Freitag, 8. Januar 2021

iRadio Westinghouse Simulation

 

Andreas P. hat mir ein übriggebliebenes Radiogehäuse zugeschickt damit ich ihm dort ein iRadio einbaue, was ich sehr gerne für ihn tue. Ich schildere erst mal den mechanischen Werdegang und gehe dann noch im Detail auf die software ein.

Die Skalenöffnung ist quadratisch, keine gute Ausgangssituation für ein Display. Wir entschieden uns für ein 5"-HDMI, welches in der Breite ganz gut passt. Oben und unten musste aber ein Stück verblendet werden. Dazu druckte ich ein entsprechendes Formteil


Auf den eingeschmolzenen Gewindeeinsätzen läßt sich nun das Display mit dem Raspberry anschrauben.

 

 

 
ein erster Test, hier noch mit der mitgelieferten skale2  


Andreas überließ mir die Aufgabe eine schöne Skala zu suchen, und hat gleich die Westinghouse Skala akzeptiert

 

ein weiteres Formteil trägt die beiden encoder und eine kleine Platine mit einer PAM8403 Endstufe und der Potential- und gpio-Verteilung. Warum grade eine PAM8403? Es gibt bei dieser Endstufe einen Trick um die Störgeräusche weitgehend zu eliminieren. Hier nachzulesen. Man führt die Signalmasse über einen Elko 47µ auf den ref-Eingang des IC. Zusammen mit einer USB-Soundkarte versprach ich mir einen störungsfreien Radiogenuss. Bei meinen Vorversuchen ist das auch gelungen. Bei dem Radio für Andreas gelang es mir (bis jetzt) nur zu ca. 98%. 

das waveshare-display hat keinen HDMI-Audioausgang, deshalb die USB-Soundkarte. Aber es hat einen großen Vorteil. Es spiegelt die wichtigsten gpio's auf Lötpads. So bleibt der raspberry abnehmbar und man erspart sich die fummelige Anlöterei auf der gpio-Leiste.


 


 


auf den Bildern sieht man auch schon eine weitere Komponente, nämlich das Netzteil. Ich verwendete ein Spannungsmodul 5V/2A von Hi-Link und hauste es ein. Dazu waren 3 weitere Formteile notwendig.

 
Der rote Rahmen, der die Platine trägt, ist nach hinten herausnehmbar.
 

 hier sind die beiden Holzschrauben zu sehen, die das Netzteil am Radiogehäuse halten. Durch entsprechende Bohrungen auf den gegenüberliegenden Seiten sind sie mit dem Schraubendreher zugänglich.
 

 

nach einer Revison der Frontseite ist das Netzteil nun eingebaut. Das Radio muss auf der Rückseite ein/aus geschaltet werden. Es gibt keine seitlich Bohrung an dem Radiogehäuse und an den encodern lässt sich kein Netzschalter anbringen. Durch das kompakte Netzteil erspare ich mir auch das Verlegen von netzspannungsführenden Leitungen durch das Radio.

dann bleibt nur noch die Frontansicht. Die Knöpfe hatte ich mal konstruiert für den Katzenkopf und setze sie mit entsprechend abgeändertem Schaft gerne auch für andere Radios ein.


 

mein Demo der Skalensimulation. Die Sendereinblendung war noch nicht positioniert:


 

kommen wir nun zur software. Ich versuche mich kurz zu halten. Wenn jemand den Empfänger nachbaut und kann mir nicht folgen dann bitte ich um Nachfrage und gehe gerne mehr ins Detail.

Grundeinrichtung Raspberry Pi OS

Ausgangspunkt ist ein aktuelles Raspberry Pi OS entweder über den Imager oder als image, auf die SD-card geflasht.
Es sollte die Variante "Raspberry Pi OS with desktop and recommended software" sein, da die Animation ein installiertes x11 benötigt. Im Archiv ein altes Raspbian auszugraben brauchen wir nur wenn die Tonausgabe über die Klinkenbuchse erfolgen soll. Ich rate aber wegen der Qualität zur Audioausgabe über eine USB-Soundkarte.

Nach dem flashen wird der Installationsassistent durchlaufen. Die WLAN-Daten werden eingetragen oder ein LAN-Kabel aufgesteckt. Wir stellen country auf germany, ändern das Kennwort und geben bei Bedarf die WLAN Verbindung ein. Üben uns noch etwas in Geduld bis alle updates etabliert sind und haben nach dem Neustart die grafische x11 Oberfläche vor uns.

Wir wechseln entweder auf eine neue Konsole oder öffnen ein Terminal-Fenster. Mit sudo raspi-config starten wir das Konfigurationsprogramm. Dort ändern wir den hostname, aktivieren falls noch nicht geschehen SSH, und stellen die Bootoptionen auf Console-Autologin. Mehr ist hier nicht zu tun. Bildschirm- und Audiooptionen belassen wir so wie sie sind und befolgen die Aufforderung zum Neustart.

An der Stelle sollten wir uns jetzt mit putty oder puttyportable remote mit dem Raspberry verbinden, weil es gleich eng auf dem Bildschirm wird.

Wir laden für das 5" Display den LCD-show Treiber mit der Anweisung:

sudo rm -rf LCD-show
git clone https://github.com/goodtft/LCD-show.git
chmod -R 755 LCD-show


und starten im Ordner ~/LCD-show die Treiberinstallation mit sudo ./LCD5-show

eine weitere Systemerweiterung wird benötigt:

sudo apt-get install libsdl2-*

Installation der USB-Soundkarte

mit aplay -l ermitteln wir die Karten-Nummer der Soundkarte

in dem Fall z.B. ist es die Nr. 1:

Karte 1: Device [USB Audio Device], Gerät 0: USB Audio [USB Audio]

wir editieren die /etc/asound.conf oder legen sie neu an mit folgendem Inhalt und der ermittelten Kartennummer:

pcm.!default {
 type hw
 card 1
}

ctl.!default {
 type hw
 card 1
}


Die iRadio Installation

iRadio wird von GitHub geladen:

git clone https://github.com/BM45/iRadio.git

Die Installation wird gestartet mit:

cd iRadio
sudo ./install.sh


Bau der Drehencoder-Steuerung:

sofern wir die vorgegebene gpio-Belegung (Pin 11 und 12) beibehalten wollen können wir direkt die Installation ausführen:

sudo ./install_Drehencoder.sh

Bau eines daemon für die Volume-Steuerung

wir kopieren die rotary.c nach rotary_vol.c und die install_Drehencoder.sh nach install_vol.sh.

In der install_vol.sh ändern wir gcc-Parametrierung und gpiod Namen:

#!/usr/bin/env bash

# ueberpruefe auf sudo-Rechte
if [ "$(id -u)" != 0 ]; then
 echo "Zur Ausfuehrung dieses Scripts sind Administratorrechte noetig"
 exit 1
fi

gcc /home/pi/iRadio/rotary_vol.c -o /home/pi/iRadio/gpiod_vol -lwiringPi

killall gpiod_vol
sleep 10

echo "Kopiere neuen Daemonen..."

cp /home/pi/iRadio/gpiod_vol /usr/bin/

echo "Aenderungen sind nach dem Neustart aktiv!"

in der rotary_vol.c ändern wir die gpio-Zweisung und die abzusetzenden Befehle:

Code:
include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <wiringPi.h>

#define  RoAPin    3  // GPIO-Pin 22, Pinnummer 15
#define  RoBPin    4  // GPIO-Pin 23, Pinnummer 16

unsigned char flag;
unsigned char Last_RoB_Status;
unsigned char Current_RoB_Status;

void rotaryDeal(void)
{
       Last_RoB_Status = digitalRead(RoBPin);

       while(!digitalRead(RoAPin)){
               Current_RoB_Status = digitalRead(RoBPin);
               flag = 1;
       }

       if(flag == 1){
               flag = 0;
               if((Last_RoB_Status == 0)&&(Current_RoB_Status == 1)){
                       system("echo \"volup\" | nc 127.0.0.1 9294 -N");
               }
               if((Last_RoB_Status == 1)&&(Current_RoB_Status == 0)){
                       system("echo \"voldown\" | nc 127.0.0.1 9294 -N");
               }

       }
}

Der Bau des daemon wird gestartet: sudo ./install_vol.sh

und die /etc/rc.local angepasst, die nun so aussehen soll:

Zitat:..
/usr/bin/vlcd
#/usr/bin/displayd &
/usr/bin/gpiod &
/usr/bin/gpiod_vol &
sleep 10
echo "play" | nc 127.0.0.1 9294 -N
echo "goto 0" | nc 127.0.0.1 9294 -N
#/usr/bin/gestured &  # Gestenerkennung starten
startx /home/pi/iRadio/display/x11/skale2/sdlskale
..


der start von x11 läuft erst noch ins leere. Im Ordner /home/pi/iRadio/display/x11/skale2 ist noch einiges zu tun.

Skala und Zeiger übertragen wir per FTP in den skale2 Ordner.


 

 

 
und machen folgende Änderungen in der sdlskale.cxx:

...
  #define SKALE_HOEHE 450
  #define SKALE_BREITE 1024
...
  //Eintrag der absoluten Pfade:
  textur_skale = IMG_LoadTexture(renderer, "/home/pi/iRadio/display/x11/skale2/skale_r.png");
  textur_zeiger = IMG_LoadTexture(renderer, "/home/pi/iRadio/display/x11/skale2/zeiger_r.png");
...
  // Position und Dimension des Skalenzeigers
  SDL_Rect ZeigerRect;
  ZeigerRect.x = 373; ZeigerRect.y = 83;
  ZeigerRect.w = 275;  ZeigerRect.h = 275;
  int rotationswinkel=ZEIGERANSCHLAG_LINKS;
...
  // Position und Dimension Programmanzeige
  int texW = 0; int texH = 0;
  SDL_QueryTexture(textur_prgtitel, NULL, NULL, &texW, &texH);
  SDL_Rect dstrect = { 180, 430, texW, texH };

letzter Schritt: Kompilieren der Skalensimulation mit:

sudo ./build.sh

evtl. muss noch eine eigene playlist durch das System laufen. Frühere x11 Simulationen hatten das so verlangt.

noch etwas bzgl. gpio-Bezeichnung. Die im obigen Schaltplan eingezeichnete Belegung P0, P1, P3, P4 entspricht den Bezeichnungen der gespiegelten Lötpads dieses speziellen waveshare-Display und bezieht sich, wie im Quellcode zu ersehen, auf die Pinnummern 11, 12, 15, 16.

weiterführende Dokumentationen:

radiobasteleien.blogspot.com

Ein minimales Internetradio für alte und neue Raspberrys

sowie die vielen anderen iRadio Installationen die ich bisher gezeigt habe.

Keine Kommentare:

Kommentar posten