Raspberrypi
kort beskrivelse:
Lille men meget anvendelig (Computer), første version fra 2012 består af en enkelt kerne CPU baseret på ARM, med indbygget grafik kraftig nok til at afspille video, og tilslutninger som HDMI, USB, LAN, lyd ud og PSU, samt internt et antal IO tilslutninger, harddisken er et SD kort. Senere versioner har indbygget WIFI og Bluetooth fra 3 og Zero W, 3A+ mangler LAN og Zero mangler lyd bøsning. Raspberrypi se: https://www.raspberrypi.org/
FLIRC kort beskrivelse:
USB enhed med IR modtager, der kan programmeres, til at læse koder fra de fleste fjernbetjeninger (ikke B&O), og omsætte koden til et tastatur tryk, mest brugt i forbindelse med media center, de er ofte beregnet til tastatur betjening, opsætning af koder på f.eks. Windows PC.
Netradio / Internetradio til modtagelse af digitale kanaler, som alternativ til DAB, kan bruges på de fleste radioer med en ledig indgang og fjernbetjening:
I mange tilfælde er det kun nogle få kanaler man mangler på FM, efter at DAB er kommet til, derfor er det muligt, at udbygge de fleste radioer, med den her beskrevne 9 kanals modtager, for at gøre det meget simpelt, er kanallisten en fil på SD kortet, der bruges som harddisk i Raspberry Pi, derfor undgås menu system. Betjeningen er simpel, vælg en ledig indgang hvor Raspberry Pi er tilsluttet, og brug taster på fjernbetjeningen, der er ledige i forbindelse, med den valgte indgang.
Forudsætninger for gørdetselv projekt:
Kendskab til Linux og programmering i C eller python, der vil være program eksempler sidst i artiklen, men det er ikke færdige stabile programmer, de kan potentielt også gøre skade!
Software:
Operativsystemet giver næsten sig selv Raspberrypi OS, til en head les installation er lite fint, der er ikke brug for nogen desktop, hentes hos https://www.raspberrypi.org/downloads/raspberry-pi-os/ . der er opskriften på installation også, det er ret nemt, det mindste mikro SD kort du kan få, eller har liggende skulle være nok ca. 4 GB, hvis du vil undgå monitor og keyboard, kan du oprette en tom fil og navngive den ssh, filen skal ligge i boot partitionen, så kan du oprette forbindelse over netværk med f.eks. Putty, der er så lige et problem, hvis du bruger en Raspbeerypi uden LAN eller adapter, skal WIFI opsættes ved hjælp af en wpa_supplicant.conf fil i boot partition, den skal indeholde :
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DK
network={
ssid="YOUR_NETWORK_NAME"
psk="YOUR_PASSWORD"
key_mgmt=WPA-PSK
}
Indsæt dit ssid og password, nu kan du indsætte SD kortet i Raspbeerypi, og isæt strømforsyning så starter den, der er ikke nogen tænd knap, brug evt. en IP scanner til at finde adressen.
Bemærk: Password kan ses i wpa_supplicant.conf filen, der findes en procedure for at skjule det, men det er lidt omstændeligt se:
https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
Hvis du har mulighed for at tilslutte monitor og keyboard under opsætning, så er det lidt nemmere, du kan også bruge et TV med HDMI. Når du har forbindelse, kan du starte opsætning med: sudo raspi-config der kan du ændre password (en god ide), sætte lyd udgang og WIFI. Som jeg skrev i indledningen, så kræver projektet kendskab til Linux, hvis det ovenstående ikke giver mening, så bliver det nok noget op af bakke.
Som det næste skal vi installere noget software, start med at opdatere styresystem: sudo apt-get update , sudo apt-get upgrade, derefter skal vi bruge en lyd afspiller, jeg bruger mpc mpd, vlc kan også bruges, men det følgende er baseret på mpc mpd, installer med: sudo apt-get install mpc mpd . Nu kan du teste om lyd fungere, og den kan afspille en radiokanal, f.eks. P2 klassisk: mpc add http://live-icy.gslb01.dr.dk:80/A/A04H.mp3 derefter: mpc play 1 . Hvis det fungere, kan vi afspille en kanal, du kan ændre volume med mpc volume 0-100, eller alsamixer. Hvis du ikke kan få lyd ud af lydbøsning, kan det være pga. problem med lyd ud valg, i maj udgaven af Raspberrypi OS, august udgaven ser ud til at være OK. Vi kunne fortsætte med de øvrige kanaler, men det er ikke så smart, mpd har også en tendens til at smide kanaler efter sluk tænd uden nedlukning, derfor har vi brug for en loader der kaldes efter boot, jeg bruger .bashrc til dette, den software jeg arbejder med, kan skifte mellem 9 kanaler, de 9 kanaler har jeg valgt at lægge i en txt fil placeret i boot, derved indlæses de ved boot og det er nemt at udskifte kanaler, en kanal pr. linje, afslut med tom linje, se program eksempel: loader_f2
Kanalskift med fjernbetjening:
Softwaren skal omsætte koderne fra tastatur tryk til system kald, som f.eks. mpc play 5, funktionen getch() svarer til f.eks. et bokstav med efterfølgende enter, for at det kan fungere med FLIRC, det kræver desvære at conio.h er installeret, det er ikke standard c, men er vistnok tilbage fra turbo c, hvis der er nogen der kan huske det, sikkert ikke hvis du er under 50, men det fungere ret godt og kan hentes på https://github.com/zoelabbb/conio.h . Selve funktionen er bare simpel dekodning af tastatur koder i en case funktion, den sidste del er for at kunne bruge evt. pil taster på fjernbetjeningen til at skifte op og ned i kanaler. Kode 46 (.) i main er for afslutte program., se program eksempel: net_radio , men husk det er eksperimentel, der absolut ingen garanti for hverken funktion, eller skadevirkning.
Pga. vi bruger en head les konfiguration, og vi skal kunne indlæse evt. ændrede kanaler, skal loader program og hoved program startes ved boot, det klares ret nemt med en fil der hedder .bashrc, og kan redigeres med: sudo nano .bashrc, til forskel fra rc.local kan det ikke fungere uden login, men auto login kan vælges i raspi-config, de 2 sidste linjer skal indeholde:
sudo /home/pi/./loader_f2
sudo /home/pi/./net_radio
Derefter skal Raspberrypi rebootes med: sudo reboot , efter et ½ til 1½ minut skulle den være klar til afprøvning.
Normalt skal en computer nedlukkes, før man afbryder strømmen, med f.eks: sudo shutdown now , det er lidt svært i denne konfiguration, heldigvis ser det ud til at styresystemet er ret stabilt, men igen der er ikke nogen garanti.
Ny version uden FLIRC
En lidt billigere mulighed, er at bruge en IR modtager og en anden software, IR modtagere findes som små moduler med 3 tilslutninger 2 til forsyning 5V (3,3V) og en udgang aktiv lav, og en pris på ca. 30 kr., der er forskellige modulations frekvenser, en meget brugt er 38 kHz. Tilslutning til Raspberrypi er meget enkel, brug evt. 3 små ledninger med hunstik, 0 til 0, + til 3,3V og ud til pin 13 på Raspberrypi, max 3,3V så tilslut aldrig til 5V.
Software:
Dekodningen er baseret på interrupt og timer med hjælp af pigpio se http://abyz.me.uk/rpi/pigpio/download.html
, det ser ud til at fungere rimeligt stabilt, der er desværre mange
forskellige kodnings systemer, en meget anvendt er NEC kode, og fordi
den rimelig enkel og jeg har et par fjernbetjeninger, så begynder jeg
med den.
Kodningen
er beskrevet som følger, en start puls 9 ms i længde, fulgt af en pause
på 4,5 ms, de efter følgende pulser er 0,56 ms, 1 er defineret som en
puls + en pause på 1,69 ms i alt 2,25 ms, 0 er defineret som en puls +
en pause på 0,565 ms i alt 1,125 ms, så derfor kan man måle tiden fra
starten af en puls til starten af den næste, er den 2,25 ms er det 1 og
0 hvis tiden er 1,125 ms, så det er relativt nemt at arbejde med, 1
besked er 32 bit lang bestående af en 8 bit adresse + adresse gentaget
negeret eller hvis extendet kode en samlet 16 bit adresse, men det har
ikke nogen betydning i dette projekt, efter adressen kommer koden for
taste tryk, først 8 bit så den samme kode negeret, dvs. man har en
kontrol for korrekt modtagelse, modulationen er 38kHz.
Pigpio
interrupt bliver initialiseret for negativt gående pulser i main, dvs.
for hver puls bliver interrupt rutinen kaldt og ud fra antal timer
pulser beregnes tiden fra den foregående puls, IR modtageren er aktiv
lav derfor negativt gående pulser.
Når alle 32 bit er modtaget,
kaldes en funktion der ud fra koden bestemmer det videre forløb,
sluk/tænd eller programskift f.eks. se eksempel net_radio_nec,
der er 3 steder med udprint der er kommenteret ud, hvis "//" fjernes
vises først tidsforløb derefter bit og til sidst de beregnede værdier,
det er Nr. 3 der er tast koden, der er ikke nogen standard for
sammenhæng mellem tast og funktion, så de rigtige talværdier skal
skrives ind i funktionen decode.
Japanese code bla. Panasonic, er meget lig NEC, så det foregående eksempel kan til rettes, der er lidt forskel på timing og besked er på 48 bit, bestående af 16 bit adresse + 4 bit kontrol + 4bit system + 8 bit produkt kode + 8 bit funktions kode (tast) + 8 bit kontrol, der beregnes ud fra system, produkt og funktions kode. Det ser jo lidt mere kompliceret ud, men de første 20 bit kan vi se bort fra her, egentlig er det kun funktions koden der er interessant, men så har vi ikke nogen kontrol, derfor skal system og kontrol også bruges, jeg kender ikke algoritmen, men den anvendte fungere på de flest taster, se eksempel: net_radio_jap .
Beolink 1000 er en helt anden sag, og egentlig ikke ret relevant, der er ikke nogen let tilgængelige modtagere, modulations frekvensen er 455 kHz, dvs. mere end 10 gg de normale 38 kHz, det skulle give bedre støj immunitet, frekvensen svarer til AM mellemfrekvens, derfor er der let tilgængelige filtre i hvert fald dengang, jeg har fundet en beskrivelse af kodningen som følger: I princippet en bi fase kode (Manchester), men i en B&O variant hvor timingen mellem pulser, sammen med værdien af den "forrige bit", giver den "nuværende bit". besked længden ser ud til at være 18 bit, første del er adresse og kontrol, sidste del data MSB først, jeg har fundet nedenstående dekodnings tabel:
| Timing tabble | Decoding table |
| t1 = 3,125 ms t2 = 6,25 ms t3 = 9,375 ms t4 = 12,5 ms stop bit t5 = 15,625 ms start bit | last bit 0 0 0 1 1 1 | new t t1 t2 t3 t1 t2 t3 | new bit error 0 1 0 1 error |
Selve 455 kHz pulsen er ganske kort, men forlænges i modtageren til ca. halvdelen af t1, modtagerne i 90erne var opbygget diskret og består af 7 transistore 2 455 kHz filtre 1 IR diode + en bunke andre komponenter, Vishay havde en modtager men den ser ikke ud til at være i produktion mere, så det kræver nok man har noget ophug, men se eksempel: boIR_n .
--------------------------------------------------------------------------------------------------------------------------------------------
Kurt Nielsen 27-06-2022
Bemærk: FLIRC er et varemærke tilhørende Flirc Inc, Raspberrypi er et varemærke tilhørende Raspberrypi Foundation.
Kilder: https://flirc.tv/support/flirc-usb https://www.programmingsimplified.com/c/conio.h