Vintage (internet) radio

Mijn schoonmoeder vertelde tijdens de kerst over haar hobby om oude radio’s te verzamelen en weer werkend te maken. Dat bracht mij op het idee om zo’n kapotte oude radio de 21ste eeuw in te helpen. Uiteraard ben ik niet de eerste die op dat idee gekomen is, op internet zijn legio hobbyprojecten beschreven. De beschrijving van Bob Rathbone’s project is super gedetailleerd en volledig en een prima inspiratiebron. Onderstaand een beschrijving van mijn project.

Mijn opzet is een oude Phillips radio om te bouwen tot een internet radio m.b.v. een Raspberry Pi Zero 2w, de radio dient de volgende kenmerken te hebben:

  • Kan met de knoppen aan de voorkant van de radio bedient worden, waaronder:
    • Volume/Mute
    • Toon
    • Preset channel
    • Aan/uit
  • Kan via een app bedient worden
  • Kan via een webpagina bedient worden
  • Kan met een afstandsbediening bedient worden
  • Beschikt over de volgende in- en uitgangen
    • USB-aansluiting
    • RCA en/of S/PDIF aansluiting (voor aansluiten van een versterker)
  • Beschikt over (stereo) luidsprekers
  • Kan muziek van zowel streamingsdiensten als Spotify en Youtube afspelen (DLNA/UPnP-AV)
  • Kan muziek van internet kanalen zoals 100% NL, Waterstad FM, Sky radio etc. afspelen
  • Kan muziek vanaf een NAS afspelen
  • Kan muziek vanaf een USB stick afspelen
  • Kan op TV worden aangesloten voor OSD (OnScreen Display)
  • Optioneel: Kan als Bluetooth speaker worden gebruikt
  • Optioneel: Kan muziek via AirPlay afspelen
  • Optioneel: Bij het draaien aan de tuning knop beweegt de aanwijzer nog steeds, en scroll je door de preset channels

Links:

https://www.bobrathbone.com/raspberrypi/documents/Raspberry%20PI%20Vintage%20Radio.pdf

https://www.bobrathbone.com/raspberrypi/documents/Raspberry%20PI%20Radio%206.x.pdf

Van mijn schoonmoeder heb ik een Phillips BX310 A/53 bakelieten radio cadeau gekregen. Een redelijk complete beschrijving van dit apparaat kun je vinden op https://www.techniekvantoen.nl/philips-bx-310a/

Het apparaat stamt uit 1952 en zal de basis van mijn project vormen.

Onderdelenlijst:

OnderdeelAantalPrijsWebshop
Raspberry Pi Zero 2W1€ 17,95SOS Solutions
HiFiBerry DAC+ Zero1€ 14,90 SOS Solutions
Sandisk High endurance 32Gb Micro- SD-card1€ 10,90Dataio.nl
2.5 inch 15W 4 Ohm luidsprekers2€ 21,36Aliexpress
Velleman Stereo versterkermodule 2x30W VM1131€ 24,10Opencircuit.nl
EI 66/34,7 118 Transformator 50VA, 18V, 2780mA1€ 13,83Reichelt.nl
PCB Protoboard 9x15cm1€ 0,24Alixexpress
C&K Components
A12515RNZQ Rotary switch
1€ 5,46Farnell
PEC11R-4215F-N0012 BOURNS Rotary encoders2€ 4,19TME
Lineaire Dual Potentiometer 100K1€ 3,69Aliexpress
Askoppeling 6 op 6mm4€ 3,68Aliexpress
Asverlenging 6mm4€ 3,37Reichelt.nl
40 voudige ribbon cable1Uit rommelbak (van oude PC diskdrive of dvd-speler oid)
40 Pins (2×20) Male/Male Headers1€ 2,94 (5)Aliexpress
Extra Lange Stacking Header 2x20p1€ 1,82 Aliexpress
GPIO extender1€ 5,95KiWi electronics
Schakelaar + AC aansluiting + zekering1€ 1,38Aliexpress
Male 2 pin PCB mount connectors5€ 1,52 (50-stuks)Aliexpress
Female 4 pin PCB connectors 30cm2€ 2,52 (10-stuks)Aliexpress
Female 2 pin PCB connectors 30cm1€ 2,28 (10-stuks) Aliexpress
16 pin male in-line PCB mount connector1€ 2,95Aliexpress
Stereo jack plug socket1Van sloop thin-client PC
2x RCA-male Tulp audio kabel naar 3.5mm Jack male 0,5m1€ 2,99 Aliexpress
Tulp chassisdeel-rood/zwart1€ 2,34 (2-stuks)Aliexpress
RGB led1€ 0,40Reichelt.nl
VS1838B IR Receiver1Uit voorraad
220 Ohm weerstand3€ 2,30 (50-stuks)Aliexpress
100 Ohm weerstand1Uit voorraad
47 Ohm weerstand1Uit voorraad
IN4148 diodes2Uit voorraad
2-voudige terminal pcb mount1€ 0,07 (20-stuks)Aliexpress
Mean Well 1RM-15-5 220v-5v 3A PCB voeding1€ 14,99Conrad.nl
Totaal€ 170,66

Benodigdheden

  • Laptop/Desktop met (Micro)SD kaartlezer
  • Optioneel bij Airplay: IOS device zoals een Ipad of IPhone
  • Optioneel bij Bluetooth speaker: Mobiele telefoon of tablet met bluetooth
  • Verloopkabel of -adapter HDMI naar HDMI-stekker D micro
  • USB-C male naar USB-A female adapter (of de USB Mini HUB OTG van hierboven)
  • Toetsenbord met USB-A aansluiting
  • Muis met USB-A aansluiting
  • Monitor met HDMI-aansluiting
  • Papiersnijder en/of schaar
  • Papierlijm en plakband
  • Meetlint
  • Viltstift
  • (Digitale) schuifmaat
  • Boormachine, 4 en 6 mm staal oren
  • Popnageltang + 4mm popnagels
  • Flex
  • Metaalvijl
  • Krimpkous + Föhn
  • Jumperkabeltjes 10 en 30cm

Stap 1. Raspbian op de Micro SD kaart installeren en configureren

Download de Raspberry Pi Imager van https://downloads.raspberrypi.org/imager/imager_latest.exe, en open de exe. De installatie wizard van de Imager tool start. Klik op “Installeren”, en daarna op “Voltooien”

De Imager tool start en je krijgt een melding met de vraag of de Raspberry Pi imager wijzigingen op je apparaat mag aanbrengen, bevestig dit met “Ja

Daarna verschijnt de user-interface van de imager tool

Plaats de lege SD-Card in je kaartlezer. Kies bij “Besturingssysteem” voor “Raspberry PI OS (32-BIT)” en bij “Opslagapparaat” de SD-Card die je net geplaatst hebt. Klik daarna op “Schrijf”, en Raspbian wordt op je SD-Card geïnstalleerd.

Haal nadat de Imager tool klaar is, sluit de Imager tool en haal de SD-kaart uit je Laptop/Desktop en schuif hem in de Raspberry Zero 2W

Booting Raspberry Pi 3 B With a USB Drive : 3 Steps - Instructables

Sluit Toetsenbord, Muis en Monitor aan. (De Raspberry Zero ondersteund ook Bluetooth, dus je kunt ook een Bluetooth toetsenbord en muis gebruiken. Maar om die in te kunnen stellen zul je toch eerst met een USB-A variant aan de slag moeten). Sluit de Raspberry Zero met een voeding van minimaal 5.2v en 2.5A (gebruik hier bij voorkeur een officiele Raspberry Pi voeding) aan op het lichtnet. Raspbian start nu op in Desktop mode. Log in met username “pi” en wachtwoord “raspberry”.

raspbian desktop

Automatisch start de “Welkom bij Raspberry Pi” installatie wizard op

pi wizard

Klik op “Next”, en stel je Land, Taal en TimeZone in

pi wizard country

Verander nu het wachtwoord van de user “pi”

pi wizard password

Selecteer het WiFi netwerk en vul het WiFi password in

Laat de Raspberry Zero de updates van Raspbian downloaden en installeren

pi wizard updating

En klik tenslotte op “Restart” om de setup af te ronden

pi wizard complete

Enable eventueel SSH volgens de tutorials op https://phoenixnap.com/kb/enable-ssh-raspberry-pi#ftoc-heading-1

Maak met een terminal programma, bijv. Putty, connectie met de Raspberry Zero 2W. Achterhaal hiervoor het ip-address van je Raspberry Zero 2W van je router of dhcp-server, of open op de desktop van de Raspberry Zero een terminalvenster en gebruik het commando ipconfig om het ip-address te achterhalen.

In mijn geval heb ik er voor gekozen om SSH te activeren op de Raspberry Zero 2W volgens de beschrijving op https://phoenixnap.com/kb/enable-ssh-raspberry-pi#ftoc-heading-3

En maak verbinding met de Raspberry Zero m.b.v. de volgende putty settings, de eerste keer dat je via SSH connectie maakt moet je bevestigen dat de fingerprint van de Raspberry Zero toegevoegd wordt aan het register, bevestig dit met “Ja”

Log in met user pi en het wachtwoord wat je eerder ingegeven hebt. We gaan nu nog een paar zaken configureren, zoals de hostnaam en (optioneel) syslog, voer hiervoor de volgende commando’s uit

$ sudo vi /etc/hostname

Verander de hostname “raspberrypi” naar een naam van je keuze, in mijn geval “radio”, en sla de file op. Verander tevens in /etc/hosts de hostname achter 127.0.0.1 (zogenaamde localhost)

$ sudo vi /etc/hosts

Die ziet er dan als volgt uit

pi@raspberrypi:~ $ cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

127.0.1.1 radio

Voeg tot slot de hostname toe aan de dhcp-client configuratie file /etc/dhcpcd.conf, dit onder “# define static profile”

$ sudo vi /etc/dhcpcd.conf

Die ziet er dan als volgt uit

$ cat /etc/dhcpcd.conf
# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.

# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel

# Inform the DHCP server of our hostname for DDNS.
hostname

# Use the hardware address of the interface for the Client ID.
clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
#duid

# Persist interface configuration when dhcpcd exits.
persistent

# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit

# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu

# Most distributions have NTP support.
#option ntp_servers

# A ServerID is required by RFC2131.
require dhcp_server_identifier

# Generate SLAAC address using the Hardware Address of the interface
#slaac hwaddr
# OR generate Stable Private IPv6 Addresses based from the DUID
slaac private

# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

# It is possible to fall back to a static IP if DHCP fails:
# define static profile
#profile static_eth0
#static ip_address=192.168.1.23/24
#static routers=192.168.1.1
#static domain_name_servers=192.168.1.1
hostname radio.sydspost.nl

# fallback to static profile on eth0
#interface eth0
#fallback static_eth0

reboot de Raspberry Zero met

$ sudo reboot

Maak opnieuw verbinding met de Raspberry Zero in putty door voor de optie “Restart Session” te kiezen, en log opnieuw in als user pi. Als alles goed is gegaan zie je dat de prompt is aangepast naar: pi@radio:~ $.

Optioneel kun je de systeem logging van de Raspberry Zero naar een centrale syslog server laten zenden, zie ook mijn tutorial “Syslog server inrichten“. Standaard is rsyslog al geïnstalleerd binnen de Raspbian image en behoeft alleen nog geconfigureerd te worden. Volg hiervoor stap 3. van voorgenoemde tutorial, dus:

$ sudo vi /etc/rsyslog.conf

Voeg nu onderstaande regel toe boven in de file, net onder de eerste uitgecommentarieerde regels:

@@<ip-address syslog server>:<poortnummer>

In mijn geval dus @@192.168.2.29:514, de eerste 5 regels van de file ziet er dan zo uit:

$ cat /etc/rsyslog.conf
# /etc/rsyslog.conf    Configuration file for rsyslog.
#
#                      For more information see
#                      /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
@@192.168.2.29:514

Herstart de rsyslog deamon met:

$ sudo systemctl restart rsyslog

Check de /var/log/syslog file op je Centrale syslog-server om te checken of de radio zijn logging doorstuurt naar de centrale Syslog server.

Stap 2. Hifiberry DAC+ Zero monteren en configureren

De bestelde Hifiberry DAC+ Zero is binnengekomen. Om de DAC op de Raspberry Pi Zero te kunnen monteren tevens een 40-pin femaleheader met extra lange pins mee besteld. Deze femaleheader eerst op de Raspberry Pi Zero gesoldeerd met de pins naar boven zodat de femaleheader van de DAC hier op geschoven kan worden. Tevens spacers geplaatst tussen de DAC en Raspberry Pi Zero.

Stap 3. Benodigde software installeren

Installeer anacron. Anacron wordt gebruikt om de playlists gescheduled te updaten, dit om radio streams die niet meer bestaan te detecteren en uit je playlist te halen.

 $ sudo apt-get install anacron

Installeer optioneel scratch. Default wordt de radio software met een achtergrond image geleverd. Het installeren van scratch zorgt voor additionele achtergrond images die je kunt activeren in de radio software. Hoe dit in zijn werk gaat leg ik later uit.

$ sudo apt-get install scratch

Nu gaan we de Music Player Daemon (MPD) installeren en de bijbehorende client Music Player Client (MPC), dit inclusief de Python MPD bibliotheek

$ sudo apt-get install mpd mpc python3-mpd

(Optioneel) de volgende bibliotheken installeren, zover die nog niet geïnstalleerd zijn

$ sudo apt-get install python2 python3-rpi.gpio pip

En installeren we de radio software van Bob Rathbone

$ wget https://bobrathbone.com/raspberrypi/packages/radiod_7.4_armhf.deb
$ sudo dpkg -i radiod_7.4_armhf.deb

Indien dpkg de volgende foutmelding geeft “Package python is not installed”, voer dan het volgende commando uit om dit te herstellen: sudo apt-get install -f

Het configuratieprogramma wordt automatisch opgestart

Kies voor 1. Replace configuration file, en ga met de tab toets naar “<Ok>” en druk op Enter.

Ik ga mijn radio bedienen met de knoppen voorop het apparaat. Hierbij worden de Volume en Toon knoppen aangesloten op Rotary Encoders, dit ik kies voor optie 2. Radio with Rotary Encoders en Enter, bevestig de vraag “Is this correct?” met “<Ja>”

Ik ga standaard Rotary encoders gebruiken, dus kies voor optie 1. Standard rotary encoders with A, B and C inputs only en Enter, bevestig de vraag “Is this correct?” met “<Ja>”

Ik gebruik de 40 pins flatcable versie, dus kies voor optie 1. 40 pin version wiring en Enter, bevestig de vraag “Is this correct?” met “<Ja>”

Ik ga mijn TV voor Onscreen Display gebruiken, de TV sluit ik aan op de HDMI poort van de Raspberry Zero, dus kies voor optie 5. HDMI or touch screen display en Enter, bevestig de vraag “Is this correct?” met “<Ja>”

En wederom voor optie 5. HDMI television or monitor (800×480) en Enter, bevestig de vraag “Is this correct?” met “<Ja>”

Hoewel de Vintage look-alike er mooi is, en goed zou passen bij de oude Philips radio, kies ik voor de functioneel rijkere radio, dus optie 1. Full feature radio en Enter, bevestig de vraag “Is this correct?” met “<Ja>”

Kies voor optie 1. Start radio at boot time en Enter, bevestig de vraag “Is this correct?” met “<Ja>”

Voor beeldvullende radio-interface op mijn TV kies ik voor optie 1. Start graphical radio full screen en Enter, bevestig de vraag “Is this correct?” met “<Ja>”. De configuratietool gaat nu even flink aan de slag, en keert terug met het configureren van de Audio interface

Druk op Enter, het volgende scherm verschijnt

Ik gebruik een HiFiBerry DAC+ Zero dus kies voor optie 5. HiFiBerry DAC/Mini-amp/PCM5102A/PCM5100A. Druk op Enter en bevestig de vraag “Is this correct?” met “<Ja>”.

Bevestig de vraag op de Raspberry Pi gereboot dient te worden met “<Yes>”.

Vervolgens kunnen we met aplay -L de aanwezige soundcard configuraties achterhalen

pi@radio:~ $ aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
lavrate
    Rate Converter Plugin Using Libav/FFmpeg Library
samplerate
    Rate Converter Plugin Using Samplerate Library
speexrate
    Rate Converter Plugin Using Speex Resampler
bluealsa
    Bluetooth Audio Hub
jack
    JACK Audio Connection Kit
oss
    Open Sound System
pulse
    PulseAudio Sound Server
upmix
    Plugin for channel upmix (4,6,8)
vdownmix
    Plugin for channel downmix (stereo) with a simple spacialization
sftvol
default
hw:CARD=sndrpihifiberry,DEV=0
    snd_rpi_hifiberry_dac, HifiBerry DAC HiFi pcm5102a-hifi-0
    Direct hardware device without any conversions
plughw:CARD=sndrpihifiberry,DEV=0
    snd_rpi_hifiberry_dac, HifiBerry DAC HiFi pcm5102a-hifi-0
    Hardware device with all software conversions
sysdefault:CARD=sndrpihifiberry
    snd_rpi_hifiberry_dac, HifiBerry DAC HiFi pcm5102a-hifi-0
    Default Audio Device
front:CARD=sndrpihifiberry
    snd_rpi_hifiberry_dac, HifiBerry DAC HiFi pcm5102a-hifi-0
    Default Audio Device
dmix:CARD=sndrpihifiberry,DEV=0
    snd_rpi_hifiberry_dac, HifiBerry DAC HiFi pcm5102a-hifi-0
    Direct sample mixing device
usbstream:CARD=sndrpihifiberry
    snd_rpi_hifiberry_dac
    USB Stream Output

De systemdefault is “sysdefault:CARD=sndrpihifiberry”, test of alles goed is aangesloten met (Let op: zonder “CARD=” !). Als het goed is hoor je een vrouwenstem zeggen “Front speaker …”.

pi@radio:~ $ speaker-test -D sysdefault:sndrpihifiberry -t wav -c 1

Vervolgens heb ik dit “adres” van de soundcard opgenomen in de configuratie van MPD en de radio. Voeg onderstaand configuratie-fragment toe aan /etc/mpd.conf

audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "sysdefault:sndrpihifiberry"
        mixer_type      "software"
##      mixer_device    "default"       # optional
##      mixer_control   "PCM"           # optional
##      mixer_index     "0"             # optional
}

Noot: je kunt meerdere geluidskaarten configureren in mpd.conf, dus er kunnen meerdere instanties van audio_output {} voorkomen.

Vervolgens configureer je in /usr/share/radio/radiod.conf welke geluidskaart definitie uit de mpd configuratie de radio moet gebruiken voor zijn output. Dit doormiddel van het configureren van de parameter : audio_out”. Dit ziet er dan als volgt uit

# Audio output device - Must match an output using the "aplay -l" command
# The configure_audio.sh program will set this to headphones(default), HDMI, DAC or USB
# depending upon the audio device/card selection. You can override this setting
# with your own unique string from the aplay command, for example "HiFiBerry"
audio_out="sysdefault:sndrpihifiberry"

Voor een testopstelling gebruik ik m’n Bose Soundtouch. Middels een een 3.5mm jack naar RCA kabel sluit ik de HiFiBerry aan op de AUX-ingang van de Bose Soundtoch. Dit wordt mijn testopstelling om de software in te stellen en te testen.

Om de software te kunnen bedienen nog een bluetooth muis geconfigureerd met

$ sudo bluetoothctl
Agent registered
[bluetooth]#

set de muis in de pairing stand en laat de Raspberry Zero naar bluetooth devices scannen met

[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:D8:24:3F Discovering: yes
[NEW] Device 00:A0:50:93:4B:E0 HwZ_fb1449f749000b2f20
[NEW] Device ED:7E:5A:8E:0C:9F N038L
[NEW] Device DC:BC:5B:3D:7D:10 N005J
[NEW] Device 9C:30:5B:4F:1F:04 Woonkamer-TV
[NEW] Device 1C:1A:DF:E9:07:3E Microsoft Sculpt Comfort Mouse

Je ziet mijn Microsoft Sculpt Comfort Mouse als nieuw bluetooth apparaat verschijnen, pair dit apparaat met het mac-address ( in mijn geval 1C:1A:DF:E9:07:3E ) van de muis

[bluetooth]# pair 1C:1A:DF:E9:07:3E
Attempting to pair with 1C:1A:DF:E9:07:3E
[CHG] Device 1C:1A:DF:E9:07:3E Connected: yes
[CHG] Device 1C:1A:DF:E9:07:3E Modalias: usb:v045Ep07A2d0129
[CHG] Device 1C:1A:DF:E9:07:3E UUIDs: 00001000-0000-1000-8000-00805f9b34fb
[CHG] Device 1C:1A:DF:E9:07:3E UUIDs: 00001124-0000-1000-8000-00805f9b34fb
[CHG] Device 1C:1A:DF:E9:07:3E UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device 1C:1A:DF:E9:07:3E ServicesResolved: yes
[CHG] Device 1C:1A:DF:E9:07:3E Paired: yes
Pairing successful
[CHG] Device 1C:1A:DF:E9:07:3E WakeAllowed: yes
[CHG] Device 1C:1A:DF:E9:07:3E ServicesResolved: no
[CHG] Device 1C:1A:DF:E9:07:3E Connected: no

de muis is nu gepaired met de Raspberry Zero, maar moet nu nog geconnect en getrust worden met

[bluetooth]# connect 1C:1A:DF:E9:07:3E
[CHG] Device 1C:1A:DF:E9:07:3E Class: 0x00000580
[CHG] Device 1C:1A:DF:E9:07:3E Icon: input-mouse
[CHG] Device 1C:1A:DF:E9:07:3E Connected: yes
[bluetooth]# trust 1C:1A:DF:E9:07:3E
Changing 1C:1A:DF:E9:07:3E trust succeeded
[Microsoft Sculpt Comfort Mouse]# exit

De testopstelling is hiermee compleet.

Stap 3. Configuratie IR-ontvanger

Om de radio te kunnen bedienen kun je natuurlijk de knoppen icm met OSD gebruiken of een app. Maar een afstandsbediening is wel zo gemakkelijk. Ik kon nog net op tijd een WD TV Live afstandsbediening uit de prullenbak redden die mijn vrouw in haar opruimwoede had weggegooid. Deze ga ik inzetten als afstandsbediening.

Voordat we de benodigde software gaan installeren en configureren heb ik eerst een proefopstelling gemaakt met een VS1838B IR ontvanger, breadboard en Raspberry Zero. De pinout is als volgt

Raspberry ZeroVS1838BToelichting
3.3vVCC
GNDGND
GPIO 25Signal
Raspberry Pi Zero 2W GPIO Pinout with Board layout

De proefopstelling ziet er als volgt uit

Nu gaan we de software installeren, start de configuratie wizard op met

sudo /usr/share/radio/configure_ir_remote.sh

De wizard start met het volgende scherm, kies optie 1. “Run IR remote control configuration” en druk op “OK”

Kies optie 1. Raspbian Buster or later” en druk op “Ok”, op de vraag “Is this correct” bevestig dat met “Yes”

Kies bij op welke GPIO de IR ontvanger is aangesloten voor optie 5. “All versions using DAC GPIO 25” en druk op “Ok”

Kies bij IR Activity led voor optie 2. “All designs using DAC sound card GPIO 16 (pin 36)”. Druk op “Ok”

De configuratie wizard installeert nu een flink aan bibliotheken en software modules, de installatie sluit af met

Configuration of LIRC completed OK
Reboot the system and then run the following
to configure your IR remote control
    sudo irrecord -f -d /dev/lirc0 ~/lircd.conf

Then copy your configuration file (myremote.conf) to  /etc/lirc/lircd.conf.d
    sudo cp myremote.conf /etc/lirc/lircd.conf.d/.

Reboot the Raspberry Pi

A log of this run will be found in /usr/share/radio/install_ir.log

Reboot de Raspberry Zero

$ sudo reboot

Nadat de Raspberry Zero opnieuw opgestart is, check of LIRC goed draait met

$ sudo systemctl status lircd
● lircd.service - Flexible IR remote input/output application support
     Loaded: loaded (/lib/systemd/system/lircd.service; enabled; vendor preset:>
     Active: active (running) since Mon 2022-01-03 18:54:38 CET; 39s ago
TriggeredBy: ● lircd.socket
       Docs: man:lircd(8)
             http://lirc.org/html/configure.html
   Main PID: 486 (lircd)
      Tasks: 2 (limit: 409)
        CPU: 36ms
     CGroup: /system.slice/lircd.service
             └─486 /usr/sbin/lircd --nodaemon

Als LIRC goed is opgestart kunnen we nu de afstandsbediening en IR ontvanger testen met

$ sudo mode2 --raw -d /dev/lirc0
Using driver default on device /dev/lirc0 Trying device: /dev/lirc0 Using device: /dev/lirc0 Running as regular user pi

Druk nu een toets van de afstandsbediening in, je krijgt nu een response als hieronder staand

Using raw access on device /dev/lirc0
Using device: /dev/lirc/0
Running as regular user pi
code: 0xffffff00
code: 0x2fdf0a00
code: 0x4b230001
code: 0x23110000
code: 0x6a020001
code: 0x17020000
code: 0x68020001
code: 0x18020000
code: 0x4d020001
code: 0x83060000
code: 0x6a020001
code: 0x17020000
code: 0x81020001
code: 0xfe010000
code: 0x4d020001
code: 0x36020000
code: 0x16020001
code: 0x82020000
code: 0x52020001
code: 0x67060000
code: 0x2c020001
code: 0xa0060000
code: 0x65020001
code: 0x1a020000
code: 0x4f020001
code: 0x35020000
code: 0x14020001
code: 0xb6060000
code: 0x4f020001
code: 0x81060000
code: 0x83020001
code: 0x50060000
code: 0x2e020001
code: 0xa0060000
code: 0x4a020001
code: 0x33020000
code: 0x2e020001
code: 0x9f060000
code: 0x4d020001
code: 0x3e020000
code: 0x0c020001
code: 0xb8060000
code: 0x4d020001
code: 0x33020000
code: 0x4c020001
code: 0x36020000
code: 0x2c020001
code: 0x53020000
code: 0x4e020001
code: 0x36020000
code: 0x67020001
code: 0x18020000
code: 0x4b020001
code: 0x38020000
code: 0x15020001
code: 0xb6060000
code: 0x4f020001
code: 0x31020000
code: 0x4f020001
code: 0x82060000
code: 0x68020001
code: 0x66060000
code: 0x4d020001
code: 0x80060000
code: 0x16020001
code: 0xb7060000
code: 0x4e020001
code: 0x82060000
code: 0x4f020001
code: 0x809c0000
code: 0x3c230001
code: 0xa0080000
code: 0x2d020001
code: 0x09110203

Dat werkt, nu gaan we de IR codes van de WD TV Live afstandsbediening downloaden van sourceforge.net. Op de pagina http://lirc-remotes.sourceforge.net/remotes-table.html vindt je van heel veel afstandsbedieningen de IR codes, die van de WD TV Live afstandsbediening vindt je op https://sourceforge.net/p/lirc-remotes/code/ci/master/tree/remotes/wd/KWSB0865F101.lircd.conf. Met wget halen we die op

$ wget https://sourceforge.net/p/lirc-remotes/code/ci/master/tree/remotes/wd/KWSB0865F101.lircd.conf?format=raw
--2022-01-03 22:28:19--  https://sourceforge.net/p/lirc-remotes/code/ci/master/tree/remotes/wd/KWSB0865F101.lircd.conf?format=raw
Resolving sourceforge.net (sourceforge.net)... 204.68.111.105
Connecting to sourceforge.net (sourceforge.net)|204.68.111.105|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: ‘KWSB0865F101.lircd.conf?format=raw’

KWSB0865F101.lircd.     [ <=>                ]   2.17K  --.-KB/s    in 0s

2022-01-03 22:28:20 (13.5 MB/s) - ‘KWSB0865F101.lircd.conf?format=raw’ saved [2226]

Het bestand wordt opgeslagen met de naam ‘KWSB0865F101.lircd.conf?format=raw’, deze dient hernoemd te worden naar een willekeurige bestandsnaam met de extentie .conf. Ik gebruik de bestandsnaam wdtvlive.lirc.conf

$ mv 'KWSB0865F101.lircd.conf?format=raw' wdtvlive.lircd.conf

Kopieer dit file vervolgens naar de directory /etc/lirc/lircd.conf.d en herstart Lirc

$ sudo cp wdtvlive.lircd.conf /etc/lirc/lircd.conf.d/wdtvlive.lircd.conf
$ sudo systemctl restart lircd

We gaan nu de afstandsbediening opnieuw testen met irw

$ irw

Druk een toets op de afstandsbediening in, en het systeem reageert met

 $ irw
00000000219e10ef 00 KEY_ENTER WDTVLive
00000000219ea05f 00 KEY_UP WDTVLive
00000000219e00ff 00 KEY_DOWN WDTVLive

Dat werkt, sluit af met <Ctrl-c>. De standaard toets-indeling en key-benaming van de WDTV wijkt af van de radio software. Dus de file /etc/lirc/lircd.conf.d/wdtvlive.lircd.conf dient aangepast te worden zodat de key-benamingen overeenstemmen met de functies van de radio.

$ sudo vi /etc/lirc/lircd.conf.d/wdtvlive.lircd.conf

Hulptabel die ik daarbij gebruikt heb:

Radio Key NameOperationWD-TV Live AB toetsWD-TV IR code HEX
KEY_VOLUMEUPVolume upRight arrow249E906F
KEY_VOLUMEDOWNVolume downLeft arrow249EE01F
KEY_CHANNELUPChannel upUp arrow249EA05F
KEY_CHANNELDOWN:qChannel downDown arrow249E00FF
KEY_MUTEMute soundMute249EB24D
KEY_MENUStep menu Play selected Load tracks/stations Next menuSetup249E827D
KEY_UPPrevious artist Toggle source Previous option<< 249EF807
KEY_DOWNNext artist Toggle source Next option>> 249E7887
KEY_LEFTTrack up Toggle option|<<249E40BF
KEY_RIGHTTrack down Toggle option|>>249E807F
KEY_OKStep menu Play selected Load tracks/stations Next menuOK249E10EF
KEY_EXITExit/shutdownȮ249E48B7

De file /etc/lirc/lircd.conf.d/wdtvlive.lircd.conf komt er dan als volgt uit te zien (de ongebruikte toetsen heb ik uit gecommentarieerd)

$ cat wdtv*.conf

# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Thu Dec 10 10:11:42 2015
#
# contributed by N. Wolf
#
# brand:       WD
# model no. of remote control: KWSB0865F101
# devices being controlled by this remote: WD TV Live Streaming Media PLayer WDBHG70000NBK-01
#

begin remote

  name  WDTVLive
  bits           16
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  header       8994  4433
  one           592  1654
  zero          592   569
  ptrail        599
  pre_data_bits   16
  pre_data       0x219E
  gap          107534
  toggle_bit_mask 0x0

      begin codes
#          KEY_0                    0x8877
#          KEY_1                    0x18E7
#          KEY_2                    0x9867
#          KEY_3                    0x708F
#          KEY_4                    0x38C7
#          KEY_5                    0xB847
#          KEY_6                    0x7A85
#          KEY_7                    0xBA45
#          KEY_8                    0x3AC5
#          KEY_9                    0xFA05
#          KEY_AUDIO                0xB04F
#          KEY_BACK                 0xD827
#          KEY_BLUE                 0xE817
          KEY_CHANNELDOWN          0x00FF
          KEY_OK                   0x10EF
          KEY_DOWN                 0x7887
#          KEY_GREEN                0x28D7
#          KEY_HOME                 0x609F
          KEY_VOLUMEDOWN           0xE01F
          KEY_MUTE                 0xB24D
          KEY_RIGHT                0x807F
#          KEY_ENTER                0x10EF
#          KEY_OPTION               0x58A7
#          KEY_PLAYPAUSE            0x50AF
          KEY_EXIT                 0x48B7
          KEY_LEFT                 0x40BF
#          KEY_RED                  0xA857
          KEY_UP                   0xF807
          KEY_VOLUMEUP             0x906F
#          KEY_SEARCH               0xF00F
          KEY_MENU                 0x827D
#          KEY_STOP                 0x20DF
#          KEY_SUBTITLE             0x30CF
          KEY_CHANNELUP            0xA05F
#          KEY_YELLOW               0x6897
      end codes

end remote

Natuurlijk daarna weer getest met irw, nadat ik eerst de lircd-daemon opnieuw heb opgestart

$ sudo systemctl restart lircd
$ irw
00000000219ee01f 00 KEY_VOLUMEDOWN WDTVLive
00000000219e906f 00 KEY_VOLUMEUP WDTVLive
00000000219ea05f 00 KEY_CHANNELUP WDTVLive
00000000219e00ff 00 KEY_CHANNELDOWN WDTVLive
00000000219e10ef 00 KEY_OK WDTVLive
00000000219ef807 00 KEY_UP WDTVLive
00000000219e40bf 00 KEY_LEFT WDTVLive
00000000219e807f 00 KEY_RIGHT WDTVLive
00000000219e7887 00 KEY_DOWN WDTVLive
00000000219e48b7 00 KEY_EXIT WDTVLive
00000000219e827d 00 KEY_MENU WDTVLive
00000000219eb24d 00 KEY_MUTE WDTVLive
^C

Zo dat klopt als een zwerende vinger. Nu starten we de irradiod deamon op en zorgen ervoor dat hij bij het starten van de Raspberry Zero automatisch opstart met

$ sudo systemctl enable irradiod radiod
Created symlink /etc/systemd/system/multi-user.target.wants/irradiod.service → /lib/systemd/system/irradiod.service.
Created symlink /etc/systemd/system/multi-user.target.wants/radiod.service → /lib/systemd/system/radiod.service.
$ sudo systemctl start irradiod radiod

Controleer de status van de irradiod daemon met

$ sudo systemctl status irradiod radiod
● irradiod.service - Radio remote control daemon
     Loaded: loaded (/lib/systemd/system/irradiod.service; enabled; vendor pres>
     Active: active (running) since Tue 2022-09-20 13:22:11 CEST; 38min ago
   Main PID: 457 (python3)
      Tasks: 1 (limit: 407)
        CPU: 1.416s
     CGroup: /system.slice/irradiod.service
             └─457 python3 /usr/share/radio/remote_control.py nodaemon

Sep 20 13:22:11 radio systemd[1]: Started Radio remote control daemon.
Sep 20 13:22:14 radio sudo[528]:     root : PWD=/ ; USER=root ; COMMAND=/usr/bi>
Sep 20 13:22:14 radio sudo[528]: pam_unix(sudo:session): session opened for use>
Sep 20 13:22:14 radio sudo[528]: pam_unix(sudo:session): session closed for use>
Sep 20 13:22:15 radio sudo[546]:     root : PWD=/ ; USER=root ; COMMAND=/usr/bi>
Sep 20 13:22:15 radio sudo[546]: pam_unix(sudo:session): session opened for use>
Sep 20 13:22:16 radio remote_control.py[547]: Protocols changed to unknown othe>
Sep 20 13:22:16 radio remote_control.py[547]: Loaded BPF protocol xbox-dvd
Sep 20 13:22:16 radio sudo[546]: pam_unix(sudo:session): session closed for use>

● radiod.service - Radio daemon
     Loaded: loaded (/lib/systemd/system/radiod.service; enabled; vendor preset>
     Active: active (running) since Tue 2022-09-20 13:44:44 CEST; 16min ago
   Main PID: 10891 (python3)

Opstarten van de irradiod- en radiod-daemons gaan goed en geven geen foutmeldingen. Nu testen of het werkt, stop de irradiod-daemon en start remote_control.py handmatig op

$ sudo systemctl stop irradiod
$ sudo /usr/share/radio/remote_control.py nodaemon
IR Remote control listener running pid 17027
Using pylirc module
Protocols changed to unknown other lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp cec imon rc-mm
Loaded BPF protocol xbox-dvd
Listening for input on IR sensor
KEY_VOLUMEUP
KEY_VOLUMEDOWN
KEY_CHANNELUP
KEY_CHANNELDOWN
KEY_MUTE
KEY_MENU
KEY_UP
KEY_DOWN
KEY_LEFT
KEY_RIGHT
KEY_OK
KEY_EXIT
^C('\nStopping remote control pid', 17027)
Killed

$ sudo systemctl start irradiod

en zowaar het werkt ! In de volgende stap gaan we de led die aangeeft dat de afstandsbediening een signaal stuurt installeren en testen.

Stap 4. Led die ontvangst IR signaal weergeeft installeren en configureren

Eerst de proefopstelling uitbreiden met de rode led en een 100 Ohm weerstand. Dit conform onderstaande pinout

Raspberry ZeroLedToelichting
GNDCathode (-), korte poot
GPIO16 (pin 36)Anode (+), lange pootSluit deze in serie aan met de 100 Ohm weerstand

Om het softwarematig werkend te krijgen is een aanpassing van de file /usr/share/radio/radiod.conf nodig, de waarde van parameter “remote_led” op regel 65 dient op 16 (GPIO16) gezet te worden

$ sudo vi /usr/share/radio/radiod.conf

dit deel van radiod.conf komt er dan als volgt uit te zien

     60 # Output LED for remote control, default GPIO 11 (pin 23) or
     61 # GPIO 13 (pin 33) for AdaFruit plate or PiFace CAD (40 pin RPi needed)
     62 # Use GPIO 16 (pin 36) for designs using IQAudIO DAC cards etc.
     63 # Use GPIO 14 (pin 8) for designs using IQAudIO Cosmic controller
     64 # remote_led=0 is no output LED
     65 remote_led=16
     66

Sla de file op en test de werking met

$ sudo ./remote_control.py flash

Herstart de radiod- en irradiod-daemons om de werking in combinatie met de afstandsbediening te testen

$ sudo systemctl restart irradiod radiod

Stap 6. Bluetooth speaker koppelen

Zover dat je dat bij met koppelen van een bluetooth muis nog niet gedaan hebt, enable de Bluealsa service en start hem op

$ sudo systemctl enable bluealsa
$ sudo systemctl start bluealsa

Nu kunnen we de bluetooth speaker koppelen met bluetoothctl

$ sudo bluetoothctl
Agent registered
[bluetooth]#

set de bluetooth speaker in de pairing stand en laat de Raspberry Zero naar bluetooth devices scannen met

[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:D8:24:3F Discovering: yes
[NEW] Device 00:A0:50:93:4B:E0 HwZ_fb1449f749000b2f20
[NEW] Device ED:7E:5A:8E:0C:9F N038L
[NEW] Device DC:BC:5B:3D:7D:10 N005J
[NEW] Device 9C:30:5B:4F:1F:04 Woonkamer-TV
[NEW] Device 3C:A3:08:B2:E5:FB Speaker fitnessruimte

Je ziet mijn Bose soundtouch, met naam “Speaker fitnessruimte” als nieuw bluetooth apparaat verschijnen, pair dit apparaat met het mac-address ( in mijn geval 3C:A3:08:B2:E5:FB ) van de speaker

[bluetooth]# pair 3C:A3:08:B2:E5:FB
Attempting to pair with 3C:A3:08:B2:E5:FB
[CHG] Device 3C:A3:08:B2:E5:FB Connected: yes
[CHG] Device 3C:A3:08:B2:E5:FB Connected: yes
[CHG] Device 3C:A3:08:B2:E5:FB Modalias: bluetooth:v009Ep0801d4014
[CHG] Device 3C:A3:08:B2:E5:FB UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:A3:08:B2:E5:FB UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:A3:08:B2:E5:FB UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:A3:08:B2:E5:FB UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:A3:08:B2:E5:FB ServicesResolved: yes
[CHG] Device 3C:A3:08:B2:E5:FB Paired: yes
Pairing successful

de speaker is nu gepaired met de Raspberry Zero, maar moet nu nog geconnect en getrust worden met

[Speaker fitnessruimte]# connect 3C:A3:08:B2:E5:FB
Attempting to connect to 3C:A3:08:B2:E5:FB
Connection successful
[Speaker fitnessruimte]# trust 3C:A3:08:B2:E5:FB
[CHG] Device 3C:A3:08:B2:E5:FB Trusted: yes
Changing 3C:A3:08:B2:E5:FB trust succeeded
[Speaker fitnessruimte]# exit

Je kunt nu het volume instellen met

alsamixer -D bluealsa

Door met de muis op de rood-wit-groene balk te klikken kun je het volume instellen. Een proefbestand afspelen kun je met

aplay -D bluealsa /usr/share/sounds/alsa/Front_Center.wav

Stel nu de audio settings van de radio opnieuw in met

$ sudo /usr/share/radio/configure_audio.sh

en kies voor optie 13 “Bluetooth device” en druk op “<Ok>” en “<Yes>”

Start de radio daarna opnieuw op. En test of de radio het geluid afspeelt via de bluetooth speaker zodra de Raspberry Zero opnieuw is opgestart

Stap 8. Radio configureren als bluetooth speaker

Ja je leest het goed, andersom kan natuurlijk ook. Als de radio straks uitgerust wordt met een paar stevige speakers dan is het ook heel handig om de radio te kunnen gebruiken als bluetooth speaker voor je telefoon of tablet. Dit configureren we als volgt. Zorg er eerst voor dat je Raspberry Zero bluetooth verbinding te vinden is door andere devices, dit doe je met

pi@radio:~ $ bluetoothctl
Agent registered
[bluetooth]# discoverable on
[CHG] Controller B8:27:EB:D8:24:3F Discoverable: yes

Pak nu je telefoon of tablet erbij. In mijn geval gebruik ik een Oneplus 5T android telefoon. Klik op het bluetooth icoontje van je telefoon en klik op “+ Apparaat koppelen”

Het duurt soms even voor dat je radio zichtbaar wordt, even geduld dus, hij verschijnt vanzelf

En daar is hij al, klik op radio en de telefoon probeert te koppelen aan de radio, als de bluetooth-koppelcode getoond wordt, krijg je ook een melding op de desktop van de Raspberry Zero

Op je desktop

Klik op je desktop op “OK” en op je telefoon op “Koppelen”, in je terminal window zie je dat de telefoon gekoppeld wordt

pi@radio:~ $ bluetoothctl
Agent registered
[CHG] Device 94:65:2D:41:23:0F Connected: no
[DEL] Device 94:65:2D:41:23:0F OnePlus 5T
[NEW] Device 94:65:2D:41:23:0F OnePlus 5T
[CHG] Device 94:65:2D:41:23:0F Modalias: bluetooth:v001Dp1200d1436
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001103-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001115-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001116-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000112d-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: fafbdd20-83f0-4389-addf-917ac9dae5b2
[CHG] Device 94:65:2D:41:23:0F ServicesResolved: yes
[CHG] Device 94:65:2D:41:23:0F Paired: yes
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001103-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000110d-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001115-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001116-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000112d-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device 94:65:2D:41:23:0F UUIDs: fafbdd20-83f0-4389-addf-917ac9dae5b2
[CHG] Device 94:65:2D:41:23:0F ServicesResolved: no
[CHG] Device 94:65:2D:41:23:0F Connected: no

Connect en trust nu de radio en de telefoon met

[bluetooth]# connect 94:65:2D:41:23:0F
[CHG] Device 94:65:2D:41:23:0F Connected: yes

[OnePlus 5T]# trust 94:65:2D:41:23:0F
[CHG] Device 94:65:2D:41:23:0F Trusted: yes
Changing 94:65:2D:41:23:0F trust succeeded
[OnePlus 5T]# exit

En je telefoon en radio zijn gekoppeld

Stel de radio bluetooth connectie nog even in door achter “radio” op het instellingen icoontje te klikken, en “HD-audio” en “Media-audio” op aan te zetten

Test het uit door bijvoorbeeld een Youtube filmpje te openen (als je even een van de volumeknoppen indrukt zie je dat de media-uitvoer naar bluetooth staat ingesteld), en als alles goed is gegaan hoor je prachtige klanken uit je radio “bluetooth speaker” komen

Stap 7. Airplay installeren en configureren

Om Airplay ondersteuning te installeren start je de configuratie wizard install_airplay.sh

$ sudo /usr/share/radio/install_airplay.sh

De Raspberry Zero staat flink te stampen om alle software componenten te installeren. Vervolgens activeren we de airplay ondersteuning in de radio. Zet hiervoor de parameter airplay op regel 290 op yes

$ sudo vi /usr/share/radio/radiod.conf

dit deel van de configuratiefile ziet er dan als volgt uit

    287 [AIRPLAY]
    288
    289 # Airplay activation yes or no
    290 airplay=yes
    291
    292 # Mixer preset volume for radio and media player if using sound card
    293 # Set to 0 if using onboard audio or USB sound dongle.
    294 # If using a sound card set to 100% initially and adjust as neccessary
    295 # Old name was mixer_volume
    296 mixer_preset=100
    297

Vervolgens dien je de parameter mixer_volume_id nog van de juiste waarde te voorzien, deze kun je achterhalen met

$ amixer -D sysdefault controls | grep -i volume
numid=5,iface=MIXER,name='PCM Playback Volume'

en stel je de waarde van de parameter mixer_volume_id met de waarde 5 in in /usr/share/radio/radiod.conf, dat ziet er dan zo uit (let op, dit deel kan ontbreken in je configuratiefile, voeg dit dan compleet onderin toe)

# Mixer volume ID (Airplay) Use command 'amixer controls | grep -i volume'
# to identify mixer volume control ID
mixer_volume_id=5

Tot slot zorgen we ervoor dat de ook shairport-sync de default soundcard “sysdefault” gebruikt. Hiervoor openen we de file /etc/shairport-sync.conf, en zoeken naar de parameter group “alsa” onder “// Back End Settings”

$ sudo vi /etc/shairport-sync.conf

Haal het //-teken weg voor output_device en verander “default” in “sysdefault”, dit gedeelte van de configuratiefile ziet er dan als volgt uit

// Back End Settings

// These are parameters for the "alsa" audio back end.
// For this section to be operative, Shairport Sync must be built with the following configuration flag:
// --with-alsa
alsa =
{
        output_device = "sysdefault"; // the name of the alsa output device. Use "shairport-sync -h" to discover the names of ALSA hardware devices. Use "alsamixer" or "aplay" to find out the names of devices, mixers, etc.
//      mixer_control_name = "PCM"; // the name of the mixer to use to adjust output volume. If not specified, volume in adjusted in software.

Zorg dat de airplay ondersteuning automatisch op wordt gestart, en reboot

$ sudo systemctl enable shairport-sync
$ sudo systemctl start shairport-sync
$ sudo reboot

Pak nu een IOS device erbij en connect via Airplay met de radio. Open het bedieningspaneel op je IOS device (Hoe dat voor jou device werkt kun je naslaan op https://support.apple.com/nl-nl/HT202809), en klik op het Airplay icoon rechtsboven.

Er volgt nu een overzicht van beschikbare airplay apparaten, radio staat daar al tussen, klik die aan en het IOS device maakt verbinding met de radio

Kies nu je favoriete muziek app, bijvoorbeeld Google play, en start audio streaming naar de radio

Stap 8. Webpagina installeren

Altijd handig om als je op afstand van de radio met je laptop zit te werken, en je geen zin hebt om op te staan om de afstandsbediening te pakken of aan de knoppen te draaien, dat je de radio via een webpagina kunnen bedienen. Hiervoor installeren we eerst Apache2 inclusief wat bibliotheken

$ sudo apt-get install apache2 php libapache2-mod-php

En daar Bob Rathbone’s webpagina’s voor radio

$ cd
$ wget http://www.bobrathbone.com/raspberrypi/packages/radiodweb_1.9_armhf.deb
$ sudo dpkg -i radiodweb_1.9_armhf.deb
$ echo 'ServerName radio' >> /etc/apache2/apache2.conf
$ sudo systemctl reload apache2

En ta da, je webinterface is klaar

Stap 9. Spotify connect installeren en configureren

Installeer spotify connect met

$ cd
$ curl -sL https://dtcooper.github.io/raspotify/install.sh | sh

Open de file /lib/systemd/system/raspotify.service en commentarieer de parameters “Restart” en “RestartSec” uit, voeg tevens achter de parameter “ExecStart=/usr/bin/librespot” de optie “–device=sysdefault:sndrpihifiberry”

$ sudo vi /lib/systemd/system/raspotify.service

Na die aanpassing ziet de file er als volgt uit

[Unit]
Description=Raspotify (Spotify Connect Client)
Documentation=https://github.com/dtcooper/raspotify
Documentation=https://github.com/librespot-org/librespot
Documentation=https://github.com/dtcooper/raspotify/wiki
Documentation=https://github.com/librespot-org/librespot/wiki/Options
Wants=network.target sound.target
After=network.target sound.target

[Service]
DynamicUser=yes
SupplementaryGroups=audio

# Restart=always
# RestartSec=10

# Some of these may be implied by DynamicUser=yes
RestrictRealtime=true
RestrictSUIDSGID=true
RestrictNamespaces=true
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK

ProtectHostname=true
ProtectControlGroups=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectProc=invisible
ProtectHome=true
ProtectSystem=strict
ProtectClock=yes

DevicePolicy=strict
DeviceAllow=char-alsa rw
DeviceAllow=/dev/null r
DeviceAllow=/dev/random r
DeviceAllow=/dev/urandom r

UMask=077
CacheDirectoryMode=0700
CacheDirectory=%N
StateDirectoryMode=0700
StateDirectory=%N
ConfigurationDirectoryMode=0600
ConfigurationDirectory=%N

PrivateTmp=true
PrivateUsers=true

ProcSubset=pid
NoNewPrivileges=true
PermissionsStartOnly=true
LockPersonality=true
MemoryDenyWriteExecute=true
RemoveIPC=true

CapabilityBoundingSet=

#SystemCallArchitectures=native
SystemCallFilter=@system-service
SystemCallFilter=~@privileged @resources
SystemCallErrorNumber=EPERM

Environment=LIBRESPOT_NAME="%N (%H)"
Environment=LIBRESPOT_CACHE=%C/%N
Environment=LIBRESPOT_SYSTEM_CACHE=%S/%N

EnvironmentFile=-%E/%N/conf

ExecStart=/usr/bin/librespot --device=sysdefault:sndrpihifiberry

[Install]
WantedBy=multi-user.target

Reload de system deamon’s, en start de raspotify daemon opnieuw op

$ sudo systemctl daemon-reload
$ sudo systemctl restart raspotify

Stap 10. Backup maken

Het gros van het installatie en configuratie werk is nu gedaan. Tijd om een backup te maken. Ik gebruik hiervoor het programma USB Image tool 1.7.0, dit tooltje kun je van verschillende websites downloaden, onder andere hier https://usb-image-tool.en.uptodown.com/windows/download

Sluit je radio af met

sudo shutdown now

Haal het SD-kaartje uit je Raspberry Zero en plaatst hem in de SD-kaartlezer van je laptop/desktop. Start USB Image tool, en klik op je SD kaart. In mijn geval SDXC Card (D:\)

Klik vervolgens op “Backup” rechts onderin. Geef de backup een plaats op je harde schijf en een zinvolle naam, en klik op “Opslaan”

Er wordt nu een bijna 1-op1 kopie van je SD-Card gemaakt, zorg ervoor dat je dus genoeg ruimte op je harde schijf hebt

Je kunt echter de img file nog comprimeren door hem te zippen. Dus zodra de USB image tool klaar is met het maken van de image file, sluit je de tool af. Open de verkenner en navigeer naar de plaats waar je de image file hebt opgeslagen. Klik met je rechter muisknop op de image file, en kies voor “Comprimeren naar ZIP-bestand

De 32Gb (in mijn geval) wordt nu teruggebracht naar een meer behapbare 1.7Gb. Ik upload deze zip-file vervolgens naar Google Drive, maar je kunt hem natuurlijk ook naar een USB thumbdrive of externe harde schijf kopieren en buiten je woning bewaren.

Je kunt nu de SD-card veilig verwijderen uit je laptop/desktop, en hem terugplaatsen in je Raspberry Zero.

Het software matige deel is nu klaar, we gaan nu letterlijk onze handen vuil maken met het aanpassen van de vintage radio zodat al die mooie nieuwe electronica er in gaat passen.

Stap 11. Philips radio uit elkaar halen

Om ruimte te maken voor de moderne electronica moet de oude buizenradio verwijderd worden uit zijn behuizing. Dit is een precair klusje, want ik wil koste wat kost de knoppen kunnen hergebruiken, en buitenkant van de radio mag natuurlijk niet beschadigd worden. Eerst draai ik de 7 schroeven van het achterpaneel los gedraaid en het achterpaneel verwijderd

Daarna de radio een kwart slag gedraaid, met de voorkant op de werkbank, en de 4 schroeven (3 schroeven in mijn geval, een ontbrak al) van het onderpaneel losgedraaid en het onderpaneel verwijderd.

Vervolgens de 4 knoppen aan de voorkant voorzichtig losgetrokken, dit ging gelukkig verrassend soepel.

Wederom de radio met de voorkant op de werkbank geplaatst en de 4 schroeven waarmee de binnenkant van de radio vast zit aan de behuizing losgedraaid, daarna voorzichtig de radio een stukje uit zijn behuizing gehaald.

De luidspreker zit nog aan de radio vast, die met een kniptang losgeknipt

Daarna kon ik de radio volledig losmaken van zijn behuizing. Als laatste de luidspreker losgemaakt van het frontpaneel door de 3 schroeven met klemmen los te draaien

Uiteraard komt er 60 jaar aan stof vrij uit de binnenkant van radio, daarom eerst maar eens een natte doek door de binnenkant gehaald, en ook de buitenkant voorzichtig afgesopt

Op de bodem van de radio ga ik een metalen plaat monteren waarop ik vervolgens alle electronica, zoals de Raspberry Zero, transformator, DAC, versterker en PCB op vastzet. Van een vorig project heb ik een deel van de metalen behuizing van een thinclient PC nog liggen, deze maak ik in de volgende stap op maat.

Stap 12. Nieuwe basis voor het binnenwerk maken

Ben eerst gestart met het maken van een CAD tekening van het frontpaneel van het nieuwe binnenwerk, dit om exact de posities van de rotary encoders en switch te bepalen, maar ook om de poulies van de zenderaanwijzer op de juiste plek terug te kunnen monteren. In feite maak ik zo’n soort van boormal voor het frontpaneel.

Eerst alle maten overgenomen m.b.v. een meetlint en digitale schuifmaat.

Hier mijn CAD ontwerpen

De tekeningen zijn in CAD en PDF formaat te downloaden

FileDownload
FreeCad tekening Frontpaneel buizenradiohttps://drive.google.com/file/d/1NoOT6KCy5qTouuTfLhOYngYP900Y7Wca/view?usp=sharing
PDF file van Frontpaneel buizenradiohttps://drive.google.com/file/d/1ZHLX0weAiR-EoI_E64aQpjCQdNOecB3J/view?usp=sharing

Vervolgens het ik de CAD tekeningen uitgeprint, met de papiersnijder en schaar bijgesneden en met papierlijm aan elkaar bevestigd.

In de schuur vond ik een oud TL-armatuur. Het metalen deksel had de perfecte afmetingen, vorm en dikte voor het frontpaneel.

Vervolgens met een prikpen in het midden van de gaatjes in de boormal een perforatie aangebracht. De boormal daarna met plakband op het op maat gemaakte frontpaneel geplakt en met een viltstift het middenpunt van de gaatjes overgenomen van de boormal op het frontpaneel.

Met de boormachine alle gaatjes in het frontpaneel geboord. Dan is de onderplaat aan de beurt. Hiervoor gebruik ik de behuizing van een sloop thin cliënt PC. Ook hiervan komen de vorm, maten en dikte overeen met wat ik nodig heb. Met de flex maak ik hem op maat.

Aan de zijkanten bevestig ik met popnagels een paar op maat gemaakte hoekijzers.

Hier bevestig ik vervolgens met popnagels het frontpaneel

En pas het geheel in de behuizing van de radio

De gaten voor de Rotary encoders en switch komen exact overeen met de gaten van de behuizing van de radio. Alleen van de lengte van het onderpaneel moet nog iets af om het passend te krijgen, maar dat doe ik later wanneer de constructie van de aanwijzer er op zit, en de afstand tot de binnenkant van de voorkant van de radio exact bekend is. Maar voordat ik daar aan begin maak ik eerst nog een ontwerp voor het plaatsen van de electronica op de onderplaat. Aanname is dat deze ongeveer 28 bij 12 cm wordt. Eerst de maten van de verschillende componenten uit de respectievelijke datasheets gehaald.

Daarna op basis hiervan een CAD tekening gemaakt die wederom als boormal kan fungeren.

Noot: Nog geen exacte afmetingen van de Velleman K4003 versterker, deze voeg ik zodra deze binnengekomen is toe aan onderstaande tekening.

Ook deze is uiteraard weer te downloaden

FileDownload
Onderpaneel radio CAD filehttps://drive.google.com/file/d/1TXkJWP6N7Au9GwSiuiBbn3Gf0TNEOaLs/view?usp=sharing
Onderpaneel radio PDF filehttps://drive.google.com/file/d/1HKt2X2_1RxbijZ6xwXEXAD0TKvZuEls7/view?usp=sharing

Ook hier weer dezelfde procedure. Tekening op maat snijden met papiersnijder, en met plakband op onderpaneel vastzetten. Daarna met boormachine de gaatjes (4mm) boren.

Stap 13. Zenderaanwijzer monteren op metalen binnenwerk

Zoals al in de vorige stap beschreven staat wil ik de zenderaanwijzer werkend zien te krijgen in de nieuwe opzet. Mijn plan is om de radio software van bob uit te breiden met een preset-channel functie, bijv. met 8 of 12 preset-channels. De zenderaanwijzer wordt dan verbonden met de schacht van de rotary switch waarmee je de preset-channel kunt selecteren. Je kunt dan door de preset-channels “bladeren” terwijl je ook de zenderaanwijzer ziet bewegen, met een druk op de rotary switch selecteer je dan de preset-channel. Als eerste stap in deze functionaliteit de montage van de “oude” poelies en draad met aanwijzer op het nieuwe metalen binnenwerk. Onderstaand een foto van de montage van de verschillende onderdelen op de oude buizenradio, dit ter referentie

De compenten die ik overneem zijn:

  1. Links de poulie met bevestigingsbeugel
  2. Rechts de geleide poulie met bevestigingsbeugel
  3. Rechts de grote poelie met bevestigingspaneel
  4. Rechtsonder de schachthouder van de zenderkeuze
  5. Draad met veer

Helaas brak de draad tijdens het demonteren van de onderdelen, dus die moet ik vervangen. Onderstaand de gedemonteerde onderdelen

Vervolgens deze onderdelen vastgeschroefd op het frontpaneel

Voor testdoeleinden heb ik even de oude schacht van de zenderkeuze gebruikt, deze wordt later vervangen door een rotary switch met push-button. In mijn viskoffer vond ik een stevige gevlochten draad en twee wartels ter vervanging van de gebroken draad. Voor het kunnen bevestigen van de verschillende onderdelen heb ik nog wat kleine inkepingen moeten flexen/vijlen en gaatjes moeten boren, maar het voert te ver om deze hier ook allemaal te gaan beschrijven. De opstelling uiteraard ook getest met bevestigde zenderaanwijzer in de radio, en dit werkt allemaal naar behoren.

Nu kan ook de definitieve lengte van het onderpaneel bepaald worden, en het onderpaneel op maat gemaakt worden. De definitieve maten van het onderpaneel komen uit op 280 x 105 mm. Dit intussen in een aangepaste CAD tekening opgenomen zoals beschreven in de vorige stap.

<foto nog toevoegen na definitief maken ontwerp voor onderpaneel>

Om de nieuwe luidsprekers te bevestigen heb ik een plaatje 4mm MDF op dezelfde maat gezaagd met de oude luidspreker als mal. Tevens een uitsparing aan de onderkant gehouden voor het bevestigen van het printplaatje met IR ontvanger en RGB LED en gaatjes er in geboord om alle componenten erop te kunnen bevestigen.

Stap 14. Printplaat maken voor IR ontvanger en RGB LED

De IR ontvanger en RGB LED komen achter twee bestaande uitsparingen in het frontpaneel van de radio en worden op een printplaatje gesoldeerd. Onderstaand het schema van het printplaatje:

Onderstaand de specificaties van de RGB LED

Aanbevolen weerstanden bij een voltage van 5V:
Rood:
R = ( 5,0V – 2,4V ) / 20mA = 2,6V / 0,02A = 130 Ohm -> 150 Ohm

Groen:
R = ( 5,0V – 3,4V ) / 20mA = 1,6V / 0,02A = 80 Ohm -> 82 Ohm

Blauw:
R = ( 5,0V – 3,4V ) / 20mA = 1,6V / 0,02A = 80 Ohm -> 82 Ohm

Echter de Raspberry Pi geeft een voltage van 3.3v op de GPIO output pins, dus dan is er alleen voor de Rode pin een weerstand nodig:

R = ( 3,3V – 2,4V ) / 20mA = 2,6V / 0,02A = 45 Ohm -> 47 Ohm

Te gebruiken onderdelen:

  • printplaatje
  • RGB LED
  • 6 pins header
  • 47 Ohm weerstand
  • 6-pins female header met kabel
  • VS1838B IR Receiver
  • 6-aderige dupont kabel female-female

De pinout voor de IR ontvanger en RGB led is als volgt:

Raspberry PI pinIR ontvangerRGB LED
GPIO 25 (pin 22)SIG (pin 1)
GND (pin 20)GND (pin 2)
3.3v (pin 1)VCC (pin 3)
GPIO 23 (pin 16)Rood
3.3v (pin 1)Anode (+) (lange poot)
GPIO 22 (pin 15)Blauw
GPIO 27 (pin 13)Groen

Soldeer de componenten conform schema van het de IR ontvanger en RGB LED op de printplaat. Let daarbij op de de IR ontvanger en RGB LED goed “zichtbaar” zijn in het frontpaneel. Met zichtbaarheid van de IR ontvanger bedoel ik dat de IR communicatie tussen de afstandsbediening en de IR ontvanger niet geblokt wordt door het frontpaneel. Het resultaat ziet er dan zo uit.

Nu uiteraard weer testen. Sluit m.b.v. een 6 dradige female-female kabel en 6 male-male dupont kabeltjes de printplaat aan op de raspberry pi conform bovenstaande pinout. De werking van de RGB LED kun je testen met python. Start Python3 op en voer achtereenvolgens de volgende commando’s uit:

pi@radio:/usr/share/radio $ python3
Python 3.9.2 (default, Mar 12 2021, 04:06:34)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import RPi.GPIO as GPIO
>>> GPIO.setmode(GPIO.BCM)
>>> GPIO.setwarnings(False)
>>> GPIO.setup(22,GPIO.OUT)
>>> GPIO.setup(23,GPIO.OUT)
>>> GPIO.setup(27,GPIO.OUT)
>>> GPIO.output(22,False)
>>> GPIO.output(22,True)
>>> GPIO.output(23,False)
>>> GPIO.output(23,True)
>>> GPIO.output(27,False)
>>> GPIO.output(27,True)
>>> exit()

Als het solderen en aansluiten op de raspberry pi goed is gegaan, dan zal bij de waarde False de betreffende led aangaan, en bij de waar True uit. De rode led brandde bij mij significant minder fel, dus misschien is de 47 Ohm weerstand toch iets te veel geweest. Maar dat laat ik voorlopig maar zo.

De IR ontvanger kun je wederom met het commando irw testen:

pi@radio:/usr/share/radio $ irw
00000000219e10ef 00 KEY_OK WDTVLive
00000000219e10ef 00 KEY_OK WDTVLive
00000000219e10ef 00 KEY_OK WDTVLive
00000000219e00ff 00 KEY_CHANNELDOWN WDTVLive

Tests geslaagd, volgende stap is om het printplaatje samen met de luidsprekers in de vintage radio te plaatsen.

<foto’s nog toevoegen>

Stap 15. Rotary switch t.b.v. Menu keuze aansluiten en monteren

Met een rotary switch kun je meerdere standen selecteren door de knop rond te draaien. In de radio heeft dit de functie om tussen de verschillende menu’s te switchen. Namelijk:

  • Radio stations laden
  • Informatie (m.b.v. espeak)
  • Zoek menu
  • Laad media bibliotheek
  • Her indexeer muziek bibliotheek

De rotary switch die ik besteld heb heeft 6 posities en 2 polen. Voor deze toepassing gebruik ik echter maar 1 pool. Door het toepassen van diodes en het aansluiten van 3 GPIO’s creëer je dan 6 menu posities die een waarde 1 of 0 opleveren. Zie ook onderstaand schema uit Bob’s handleiding. (Bob heeft een rotary switch gebruikt met 8 posities en 1 pool, maar omdat posities 7 en 8 niet gebruikt worden kun je ook volstaan met een rotary switch met 6 posities). Let op, GPIO25 onderstaand in Bob’s schema is al ingebruik t.b.v. de IR ontvanger, gebruik daarom GPIO24 hiervoor.

Schematisch weergegeven:

Benodigde onderdelen:

  • rotary switch
  • 4 IN4148 diodes
  • 6 dupont kabels female/male-female
  • 2 x 6 pins header
  • 4-voudige jumperkabel female-female

Knip de female of male stekkers af van de 6 dupont kabels, strip de kabeleinden en soldeer deze op polen 2 t/m 5 en de centrale pool. Doe een drup lock-tide lijm tussen de male stekkers van de dupont kabels, en fixeer ze tijdelijk met een stukje tape. Soldeer de 2 6-pins headers parallel aan elkaar op het “moederbord” van de radio en verbind de pins van headers met elkaar volgens onderstaande beschrijving:

  • pin 1 header 1 aan pin 1 van header 2 (GND)
  • pin 2 header 1 aan pin 2 van header 2 (GPIO24)
  • pin 3 header 1 aan pin 3 van header 2 (GPIO8)
  • pin 5 header 1 aan pin 4 van header 2 (GPIO7)

Soldeer de IN4148 diodes aan header 1 conform bovenstaand schema. Steek de 6-voudige dupont kabel op header 1.

Nu testen. Sluit middels een 4-tal female-male dupont kabels header 2 aan op de raspberry pi conform bovenstaande beschrijving. Draai de knop van de rotary switch helemaal naar rechts (positie 1, niet in gebruik). Wederom gebruiken we python3 om de werking van de rotary switch te testen. Gebruik onderstaand python script om te checken of de juiste waarde wordt weergegeven als je aan de knop van rotary switch draait

pi@radio:~ $ vi rotary_switch.py
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(24,GPIO.IN)
GPIO.setup(8,GPIO.IN)
GPIO.setup(7,GPIO.IN)
while True:
  if GPIO.input(24): gpio24=1
  else: gpio24=0
  if GPIO.input(8): gpio8=1
  else: gpio8=0
  if GPIO.input(7): gpio7=1
  else: gpio7=0

  print(gpio24 + (gpio8 * 2) + (gpio7 * 4))
  time.sleep(2)

en start het script met

pi@radio:~ $ python3 rotary_switch.py
0
0
1
1
2
2
3
3
4
4
5
5

Als alles goed aangesloten is zie je dan achtereen volgens 0 t/m 5 op je scherm komen naarmate je de knop van de rotary switch naar links draait. Gelukt ? Dan gaan we vervolgens de rotary switch aan de voormalige zenderzoek knop van de vintage radio bevestigen.

<nog verder uitwerken nadat as-verleng bussen zijn binnengekomen>

Stap 16. Rotary encoder t.b.v. Volume en Mute aansluiten en monteren

De rotary encoder heeft twee functies, namelijk:

  • het volume kunnen instellen
  • en door de knop in te drukken kun je geluid uitzetten (mute-functie)

De rotary encoder die ik besteld heb heeft 5 aansluitpolen, twee aan en de ene zijde en drie aan de andere zijde. Dit is de pinout van de rotary encoder

De rotary encoder wordt als volgt op de radio aangesloten:

FunctieGPIO/PinRotary encoder
Volume upGPIO15 (Pin 10)Output B
Volume downGPIO14 (Pin 8)Output A
Mute volumeGPIO4 (Pin 7)Output E
GND (Pin 6)Input C & D

Schematisch weergegeven:

Benodigde onderdelen:

  • rotary encoder met knop
  • 2 x 4 pins male header
  • 2 x 4-voudige jumperkabel female-female

Knip van één van de jumperkabels de stekker af, strip de kabeleinden en soldeer deze op de polen A, B, C en E van de rotary encoder. Verbind de polen C en D met een kort stukje draad. Soldeer de 2 4-pins headers parallel aan elkaar op het moederbord van de radio, en verbind de pins van de headers 1-op-1 met elkaar. Steek de 4-voudige jumperkabel met de rotary encoder op header 1, steek de andere 4-voudige jumperkabel op header 2 en verbindt deze met de raspberry pi conform bovenstaande pinout.

Nu testen. Sluit middels een 4-tal female-male dupont kabels header 2 aan op de raspberry pi conform bovenstaande beschrijving. In onderstaande video kun je mijn test zien, eerst test ik de mute knop, daarna volume up en volume down met succes.

Vervolgens monteren we de volume/mute rotary incoder in in het chassis. In stap 12. is dit chassis al op maat gemaakt, dus ik kan eenvoudig de knop met de bijgeleverde boutjes in het tweede gat van links vast schroeven.

<as-verlenging en foto’s nog toevoegen>

Stap 17. Rotary encoder t.b.v. Tuner aansluiten en monteren

Met de tunerknop kun je tussen de verschillende radiokanalen switchen. Links omdraaien, channel down en rechts omdraaien, channel up. Ook hiervoor gebruiken we een rotary encoder, deze keer zonder knop.

De rotary encoder wordt als volgt op de radio aangesloten:

FunctieGPIO/PinRotary encoder
Channel upGPIO17 (Pin 11)Output A
Channel downGPIO10 (Pin 19)Output B
GND (Pin 25)Input C

Schematisch weergegeven:

Benodigde onderdelen:

  • rotary encoder
  • 2 x 3 pins male header
  • 2 x 3-voudige jumperkabel female-female

Knip van één van de jumperkabels de stekker af, strip de kabeleinden en soldeer deze op de polen A, B en C van de rotary encoder. Soldeer de 2 3-pins headers parallel aan elkaar op het moederbord van de radio, en verbind de pins van de headers 1-op-1 met elkaar. Steek de 3-voudige jumperkabel met de rotary encoder op header 1, steek de andere 3-voudige jumperkabel op header 2 en verbindt deze met de raspberry pi conform bovenstaande pinout.

Testen: Sluit middels een 3-tal female-male dupont kabels header 2 aan op de raspberry pi conform bovenstaande beschrijving. In onderstaande video kun je mijn test zien, eerst test ik channel-up, daarna channel-down met succes.

Stap 18. Toonregeling

De toonregeling bevindt zich tussen de HifiBerry DAC en Velleman versterker en wordt aangestuurd middels een dual lineare rotary encoder. De toonregeling dient dubbel uitgevoerd te worden voor het linker en rechter audiokanaal, vandaar dat er ook een dual rotary encoder toegepast dient te worden. De toonregeling wordt middels een standaard 2x RCA-male Tulp audio kabel naar 3.5mm Jack male kabel aangesloten op de HifiBerry DAC.

De dual lineare rotary encoder die ik besteld heb is een Alpha RV16A01F20KB100KM en heeft 6 aansluitpolen, 3 aansluitpolen voor het linker audio kanaal, en 3 aansluitpolen voor het rechter audio kanaal. Deze zijn galvanisch gescheiden.

De toonregeling is gebaseerd op onderstaand schema van muzique.com:

Uiteraard dient dit twee-voudig uitgevoerd worden voor een stereo signaal, dit levert het volgende schema op:

Benodigde onderdelen:

  • J1: Audio jack 3.5mm printplaat stereo
  • R1/R2: 2 x 10K weerstand
  • R2/R5: 2 x 47K weerstand
  • C1/C2: 2 x 0.022uF condensator
  • VR1/VR2: 2 x 100K trimpot
  • R3: dual lineare rotary encoder 100K
  • J2/J3: 2 x 2 pins male header
  • 6-voudige jumperkabel female-male/female
  • 2 x 2-voudige jumperkabel female-male/female
  • 1 x 2-voudige RCA-male Tulp audio kabel naar 3.5mm Jack male kabel

Knip van de 6-voudige jumperkabel de male/female stekker af, strip de kabeleinden en soldeer deze op de polen A, B, C van beide potmeters van de dual lineare rotary encoder.

Stap 19. Velleman K4003 versterker assembleren

Uiteraard de kit-versie van de Velleman versterker besteld, en niet het kant en klare VM113 model. De kit bestaat uit de volgende onderdelen:

  • print plaat
  • 2 Elco’s
  • 3 condensators
  • pins
  • koelblok
  • 2 weerstanden
  • een IC
  • 4 diodes
  • 2 1uK63 condensators
  • wat boutjes en moertjes om het koelblok op de printplaat te kunnen bevestigen
  • garantiecertificaat
  • kleurcoderingen weerstanden
  • kaartje waar op staat dat de handleiding online te vinden is

Ik volg de instructies uit de manual van Velleman voor het monteren van de verschillende componenten op de printplaat:

1. Monteer de weerstanden.

In de verpakking zitten twee weerstanden (8,2 Ohm). Buig de beide poten onder een hoek van 90 graden en plaats ze in R1 en R2. Maakt niet uit hoe je ze om plaatst.

2. Monteer de dioden. Let op de polariteit!

In de verpakking vindt je 4 diodes (1N5404). Buig de poten onder een hoek van 90 graden en plaats de diodes in D1, D2, D3 en D4. Let er daarbij op dat je de licht grijze band van de diode in dezelfde richting plaatst als het witte vlakje op de printplaat. Draai daarna de printplaat om en soldeer de weerstanden en diodes vast. Zorg er daarbij voor dat de componenten lekker strak tegen de printplaat komen te liggen.

3. Monteer de keramische condensatoren.

In de verpakking zitten twee gele condensatoren met nummer 223 (22nF) en één blauwe condensator met nummer 104 (100nF). Plaats een gele condensator met nummer 223 op posities C1 en C2, en de blauwe condensator met nummer 104 op positie C3. Ook bij condensatoren maakt het niet uit hoe je ze omdraait. Draai de printplaat om, en soldeer ook de condensatoren vast.

4. Monteer de printpennen.

In de verpakking zitten twee zakjes met PCB pennen, plaats die op posities L-IN, GND, LS-L, GND (Links), VA 12VAC, GND (2x), VB 12VAC (onder), R-IN, GND, LS-R en GND (rechts). Soldeer de pennen vast aan de achterkant.

5. Monteer de multilayer condensatoren.

In de verpakking zitten twee multiplayer condensatoren met het opschrift 1uK63 (1uF). Soldeer deze op posities C4 en C5. Ook hierbij maakt het weer niet uit hoe je ze omdraait.

6. Monteer de elektrolytische condensatoren. Let op de polariteit!

Je had het natuurlijk al gezien, per ongeluk in de tweede stap de twee ELCO’s al vastgesoldeerd ;-). Maar volgens de manual komen ze nu aan de beurt. Op de zijkant van de ELCO’s staat duidelijk met een – (min) teken aangegeven wat de – (min) is, het is de zijde met de korte poot. Plaats deze uiteraard op de min kant van posities C6 en C7. Dus de lange poot op de +, en de korte poot op de -. Soldeer de ELCO’s aan de achterzijde vast.

Knip aan de achterzijde alle pootjes netjes af.

7. Monteer het IC.

Monteer het IC met de metalen rugzijde naar de rand van de print. Monteer het zodanig hoog dat de aansluitingen NIET afgeknipt hoeven te worden. Monteer vervolgens het IC tegen de koelbalk zoals aangegeven in de figuur 1.0 Tussen het IC en de koelbalk moet men de isolatie mica (voorzie langs beide zijden eventueel wat warmte geleidende pasta, ordernr. : therm20) monteren.

8. Monteer het koelblok op de IC

In de verpakking zitten 2 M3 15mm boutjes en moeren, carroserieringen en borgringen. Voer het boutjes door de gaten in het koelblok, schuif de met koelpasta ingesmeerde mica isolatie (transparant kunststof plaatje met gaatje) op één van de boutjes, en schuif deze op de IC, plaats dan de carroserieringen, dan de borgringen en zet het geheel vast met de boutjes. Zie ook onderstaande tekening:

In volgende stappen gaan we de versterker aansluiten volgens onderstaand principe

De luidsprekers worden aangesloten op LS-L + GND en LS-R + GND, de toonregeling op L-IN + GND en R-IN + GND en de 2 x 12VAC transformator op VA + GND + VB.

Stap 20. Monteren van Raspberry Pi en voeding op “moederbord”

In deze stap monteren we de GPIO extender, de Raspberry Pi inclusief HiFiBerry DAC+ en 5v voeding op het moederbord.

Benodigde onderdelen:

  • GPIO extender
  • 4 M2 schroefjes
  • Raspberry Pi Zero 2W inclusief HiFiBerry DAC+ erop gemonteerd (zie ook stap 2)
  • 3D geprinte steun (zie verderop)
  • 2-voudige terminal PCB-mount
  • Mean-well voedingsblok 5V/3A
  • Male 2 pin PCB mount connector
  • Stukje 1.5mm draad
  • 2 female-female jumperkabels

We starten met het monteren van de GPIO extender op het moederbord. Neem met een dunne fine-liner de posities van de gaatjes in de GPIO extender over op het moederbord. Boor vervolgens met een 2mm boortje de gaatjes in het moederbord. Monteer de meegeleverde afstandhouders en schroefjes op de GPIO extender. Helaas zaten er geen extra schroefjes bij de GPIO extender om het geheel vervolgens op het moederbord te bevestigen, hiervoor een greep gedaan in mijn bakje met allerhande schroeven.

Vervolgens het voedingsblok, de terminal voor de aansluiting van 230v en de male PCB connector op het moederbord gesoldeerd. Tussen de terminal en het voedingsblok een stukje geisoleerd 1.5mm draad gebruikt voor de 230v.

Met behulp van twee female-female jumperkabels de voeding aangesloten op de 5V en GND aansluiting van de GPIO extender. Daarna een snoer met stekker aan de terminal geschroefd en de stekker in het stopcontact gestoken. Met een multi-meter gechecked welke spanning het voedingsblok afgeeft, een keurige 4.9v.

Na deze controle de Raspberry Pi met DAC op de GPIO extender gestoken en getest of de Raspberry Pi goed functioneerde. De Raspberry Pi “hangt” nu los op de GPIO extender, niet echt een wenselijke situatie. Vandaar met FreeCAD een steun ontworpen tussen de Raspberry Pi en het moederbord.

Uiteraard zijn de ontwerp files te downloaden:

FileDownload URL
FreeCad ontwerphttps://drive.google.com/file/d/11ssinuEOQ02eJReh-hOq4NqkY9U9-BMI/view?usp=sharing
STLhttps://drive.google.com/file/d/1fNBbtkI6s5d1WCBLHkaPxWuKOn_Xf-tQ/view?usp=sharing

Vervolgens de steun tussen de Raspberry Pi en het moederbord geplaatst, de gaatjes overgenomen en uitgeboord met een 3mm boortje. Tot slot de steun met schroefjes en boutjes vastgezet op de Raspberry Pi en het moederbord.

2 thoughts on “Vintage (internet) radio

  1. Derik says:

    He supergave site met leuke dingen…

    Die radio heerlijk!!!

    Kan hij ook met een bt box? en dan in domoticz?
    Dat zou helemaal te gek zijn.
    dummy spotify lijst aan.. muziek
    dummy internet radio aan, kx fm
    Enz

    Hopelijk heb je zoiets..?

    Beantwoorden
    1. Syds says:

      Derik, dank voor je berichtje. Zoals je wel hebt kunnen lezen is dit project nog steeds “onder handen”. Wacht eigenlijk op een nieuwe Raspberry Pi Zero 2W, maar die zijn al tijden niet leverbaar. Pas in het najaar weer. Maar maakt niet uit, zomers ben ik liever in de tuin en heb ik minder tijd voor m’n domotica en electronica hobby. Maar om op je vragen terug te komen, heb nog niet geprobeerd om er een Bluetooth luidspreker aan te hangen, maar dit lijkt me zeer goed mogelijk net als bijvoorbeeld een bluetooth hoofdtelefoon of oordopjes. Ook heb ik de aansturing van de Radio nog niet geintegreerd in Domoticz. Aangezien de Radio over een webinterface beschikt moet het niet al te moeilijk zijn om de integratie met Domoticz te realiseren. Desnoods schrijf ik er een API (voor Radio) en een Plugin (voor Domoticz) voor. Wordt vervolgd (in de herfst/winter)

      Beantwoorden

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.