
Zelfbouw Raspberry Pi speaker (3)
[VIDEO] Het heeft even geduurd maar hier is dan eindelijk het laatste deel in de reeks van 3 artikelen over de Raspberry Pi Standalone Streaming Speaker met TuneIn Radio, UPnP, en Spotify Premium Support! Eerdere delen lees je hier (DIY Sonos speaker hardware) en hier (Bouw je eigen streaming speaker software). Filmpje onder artikel!
Het enige wat in dit laatste deel nog rest is het samenvoegen van alle hardware en software die in de eerdere delen voorbereid zijn. Dat lijkt simpel maar had toch nog wat meer voeten in aarde dan verwacht. :-)
De speaker behuizing

Allereerst moest de behuizing natuurlijk netjes afgewerkt worden met behulp van veel plamuren, schuren, gronden en aflakken. Ik heb voor een helder witte kleur gekozen om een strak en hoogglans uiterlijk te creëren. Een goede voorbereiding is het halve werk, hoe netter je plamuurt en schuurt hoe minder je hoeft te lakken. Na de eerste grondlaag schuur je weer netjes op met korrel 150 en kan het aflakken beginnen. In dit geval heb ik afgelakt met een roller wat je na 3 lagen helaas toch nog wel een beetje ziet: er is een soort sinaasappelhuidje gevormd. Wil je écht strak aflakken dan heb je eigenlijk geen andere keus dan de verf te spuiten, bijvoorbeeld met een spuitbus.

Aan de achterzijde zie je duidelijk de bass-reflex pijp zitten. Hier is gebruik gemaakt van een standaard PVC afvoerpijp uit de bouwmarkt, makkelijk aan te komen en goedkoop. Wel even op de juiste maat afzagen zoals berekend met WinISD (freeware/beta). Via de bass-reflex pijp komt momenteel ook de ethernetkabel naar buiten en rechtsonder vind je de stroomaansluiting voor de 12 Volt adapter. Het geheel is afgemaakt met een paar nette rubberen voetjes.
12 Volt / 5 Volt voeding van de speaker
In het eerdere artikel noemde ik al de wens om de gehele speaker met één adapter te voeden, maar omdat de TDA7297 versterkermodule op 12 Volt werkt en de Raspberry Pi op 5 Volt en een beetje kon dit niet zomaar. Om dit probleem op te lossen heb ik gebruik gemaakt van een buck converter: een kleine instelbare schakelende voeding met minimale verliezen.

Deze LM2596 converters kosten bijna niks als je ze in China besteld en zijn met een meerslagen-potmeter uiterst nauwkeurig in te stellen. Bovendien zijn ze zelfregulerend dus als de ingangsspanning fluctueert of de uitgangsbelasting veranderd blijven ze (binnen grenzen) netjes het ingestelde voltage afgeven. Om de converter goed in te kunnen stellen heb je wel even een multimeter nodig, zelf heb ik deze superfijne multifunctionele Voltcraft. De Raspberry Pi wil graag 5,1 Volt op zijn micro-USB poort binnenkrijgen, maar bij mij draaide hij bij 5,2 Volt pas stabiel.
Zoals je op de foto kunt zien heb ik het roze micro-USB kabeltje direct aan de uitgang van de buck-converter gesoldeerd, de ingang zit aangesloten op de power-connector in de achterwand waar de 12 Volt voor de versterker ook vanaf wordt getapt. Nu kan de gehele speaker met één 12 Volt adapter worden gevoed.
Uhmm.. Ground Loop Noise
Stroom er op en gaan! Uh, nee dat viel dus een beetje tegen. Waar de speaker in testopstelling perfect zuiver geluid gaf werd ik nu getrakteerd op een nare ruisende bromtoon. En als de Raspberry Pi activiteit vertoonde kwamen daar ook nog wat gezellige hoge pieptonen bij. Wat gaat hier mis? Met 2 gescheiden voedingen was er weer niks aan de hand dus het moest hier wel iets mee te maken hebben. Conclusie: er treedt een ground loop op.
Groundloop noise is een probleem dat optreedt in muziekinstallaties als er een ongewenste stroom gaat lopen via de audiokabels, in dit geval omdat ik de voeding van de Raspberry Pi en de versterker aan elkaar heb geknoopt. Het stroompje wat door de audiokabel loopt wordt door de versterker geïnterpreteerd als een audiosignaal en dus komt er een brom uit je speakers. Hoe kunnen we de groundloop voorkomen? Door te zorgen dat er geen stroom meer door de audiokabel kan lopen met behulp van een groundloop isolator. Dit handige apparaatje bevat een in- en uitgang die galvanisch van elkaar gescheiden zijn, ze zijn niet met elkaar doorverbonden maar komen uit op een spoel. Deze spoelen kunnen wel audiosignalen aan elkaar doorgeven (wisselstroom) maar blokkeren de constante (gelijk-)stroom van de groundloop.

Omdat ik zelf geen HifiBerry heb weet ik het niet zeker maar het zou kunnen dat de uitgangen van de HifiBerry DAC-kaart al geïsoleerd zijn, dan treedt dit probleem dus niet op en heb je ook geen groundloop isolator nodig, een extra apparaatje wat toch weer van nadelige invloed kan zijn op de geluidskwaliteit.
Het dot matrix LED display
En dan is er nog die mooie 8x32 LED-matrix module. Na enkele pogingen om dit display, net als de drie drukknoppen, via de GPIO van de Raspberry Pi te laten werken gaf ik het op, er was geen software voorhanden en zelf een display driver schrijven is mij te moeilijk. Omdat ik het display wel al eerder aan de praat heb gehad met behulp van een Arduino en grofweg dezelfde code als ik voor mijn zelfbouw jumbo LED matrix display heb gebruikt leek het me verstandiger om terug te grijpen op die oplossing. Omdat er verder weinig eisen waren aan de Arduino behalve formaat was dit een uitgelezen kans om een Arduino Nano te gebruiken.

Op de foto zie je rechtsonder de Arduino Nano geïnstalleerd op een moederprintje, het handige van de Nano is dat deze namelijk wel de standaard pin-afstand van 100 mil gebruikt in tegenstelling tot de Arduino Uno. Daarnaast is het ding ook nog eens superklein, perfect voor inbouw dus. De Nano zit met behulp van een mini-USB kabeltje op de Raspberry Pi aangesloten en ontvangt via USB Serial zijn commando's van Node Red. De iconen en low-level functionaliteit zit ingebakken in de software van de Nano, de koppeling met Mopidy en andere (web)services verloopt via Node Red.

In het screenshot hierboven een overzicht van de gebruikte Node Red flows om alles aan elkaar te knopen. Met behulp van de Mopidy-extensie voor Node Red kan ik op basis van de GPIO-inputs bepaalde tracks aan de tracklist toevoegen en via serial commando's naar de Arduino Nano sturen bijvoorbeeld: "RADIO|100% NL||" of "STREAM|" + title + "||". Ook de klok wordt vanuit Node Red aangestuurd met behulp van "CLOCK|" + dt.getHours() + "|" + dt.getMinutes() + "|".
Versterker met Node Red uitschakelen
Het idee van een dergelijke streamingspeaker is dat hij altijd klaar voor gebruik is, en via de tablet of telefoon bediend kan worden. Als je dan eerst op moet staan om de stekker in het stopcontact te steken gaat het gemak een beetje verloren...
De grootste energieverbruiker van het systeem is de 12 Volt max. 2 Ampère versterkermodule. Gelukkig hoeft de versterker niet altijd aan te staan en daarom lijkt het mij wel mooi als ik de versterker vanuit de Raspberry Pi aan en uit kan zetten. Aangezien ik de Arduino Nano toch al had ingebouwd kon ik daar een relais aangehangen welke de 12 Volt spanning naar de versterker schakelt. Via de seriële USB-verbinding ontvangt de Arduino het in- en uitschakel commando van Node Red op basis van de activiteit van Mopidy, volledig automatisch dus!
Bekijk een demonstratie van de Raspberry Pi Streaming Speaker op YouTube!
