dinsdag 21 oktober 2014

Muziek in een doosje

Ik wil muziek maken! Het is te zeggen, zoals met mijn Mp3 potje wil ik muziek of spraak die vooraf is opgenomen, opnieuw afspelen ergens in een bos.

Maar ik heb dat potje al, dus waarom iets veranderen dat werkt? Omdat het niet zo goed werkt, en omdat alles beter kan. De batterij laat het te snel afweten en de grootte van het potje irriteert me. Ook het feit dat er een SD kaartje in zit, zit me niet lekker. Kleine SD-kaartjes van 128Mb vind ik hier nergens meer en de Chinese versies zijn onbetrouwbaar.

Ander en beter, dacht ik dus. Maar het alternatief onder het motto: "wat je zelf doet, doe je beter", is in dit geval een behoorlijke uitdaging. Om te beginnen ga ik dus geen MP3 module meer gebruiken zoals vroeger. Zo'n module is voorgeprogrammeerd om muziek te spelen die op een SD kaartje staat. Het enige dat mijn potje doet is met een aparte microcontroller de module besturen als er een magneet in de buurt komt.

Nu moet het dus anders. Ik ga zelf een module maken die geheugen heeft om de muziek op te slaan en een D/A convertor om de digitale signalen hoorbaar te maken door MP3 oortjes. Omdat dat allemaal nieuw is voor mij, was dit de eerste stap. Een Chinees verkocht 20 D/A covertors voor een dollar en dat boeide me. Ik ging er vandaag mee aan de slag en weet nu waarom ie die prijs hanteerde.



Uiteraard gaat het zo niet in een potje, we zijn slechts in de experimenteerfase. Links zie je een mini Arduino en rechts de beruchte Chinees (PCF8591). Het is een chip met 4 A/D convertors en één D/A convertor. Hij heeft dus te veel pinnen en is nog te groot voor wat ik echt nodig heb. Maar dat is nu even het minste van mijn zorgen.

De chip doet de D/A coversie serieel, dat wil zeggen dat de Arduino links muziek data zal doorgeven door twee draadjes. Daar zit dus meteen de belangrijkste reden om deze chip niet te gebruiken. De seriële interface kan 100kbps versturen, wat op zich best veel is. Maar als ik 8 bits nodig heb per sample (het blijken er 9 te zijn), kan ik dus 11000 bytes per seconde versturen. Dat is behoorlijk weinig als je weet dat een CD speler er 44100 verstuurt. Ik zal dus geluiden met een frequentie boven 5500 Hz niet kunnen afspelen en dat is een probleem. Nu sta ik niet te springen om CD kwaliteit in een bos te brengen, maar enkel spraak onder de 5500 Hz klinkt al niet mooi meer. De 's' klanken worden 'sj' klanken en het verschil tussen een 't' en de 'p' zal vervagen.

Toch moest ik even proberen wat ie kon. Geef toe, dit is een mooie zaagtand die de Arduino heeft verzonnen. Hij is samengesteld uit 512 waarden van 0 tot 255 en weer terug naar 0. De vorm is goed, maar je hoort niks. Dat komt omdat alles zo traag gaat dat ie maar 5 Hz is. Je hoort dus niks. Nu is dat geen punt, want ik moet voor één vorm nooit 512 waarden gebruiken, een CD speler kan dat ook niet.


Ik kan 50 waarden proberen zoals hier, maar er loopt iets mis. De chip heeft een soort datamodus (die heb ik nodig) om enkel data te versturen over de bus. Je stuurt enkele bytes om te zeggen dat ie in die modus moet werken, en alles wat je dan stuurt, moet ie als data beschouwen.

En dat doet ie dus niet! Je ziet dat de vorm kleine hoekjes heeft, zo zouden er dus 50 moeten komen. Maar in de helft geeft ie het op, en daardoor is de golf plots onderbroken. Ik kan dus maximaal een 20 of 30-tal bytes sturen in deze modus, en dan zou ik weer twee bytes moeten sturen om opnieuw te starten. Maar dan zijn er dus kleine hiaten elke 20 of 30 samples. En dat zal je zeker horen als een constante ruis. Het alternatief is die modus niet gebruiken (zoals de eerste foto), maar dan beperk ik het aantal samples tot 3000 à 4000 per seconde, en dat is waardeloos. Spraak van 1.5 à 2 kHz kan je echt niet maken, een goed oor kan tot 15 kHz horen.

Soit, ik kan er dus niks mee doen en een volgende lading chips is onderweg. Ze zijn veel kleiner en de seriële bus is een SPI bus. Die is niet beperkt in snelheid tenzij de snelheid van de Arduino me parten speelt. Maar daar gaan we even niet vanuit.

Oh ja, ze zijn ook veel veel duurder, die andere chips. In plaats van twintig voor één dollar heb ik er maar twee voor één dollar.

Duur hè ;-)

maandag 13 oktober 2014

Ik ben niet belangrijk

Het was een moeilijke stap om te zetten. Maar omdat het uiteindelijke doel, en wellicht is dat in elk mensenleven zo, een zo goed en zo gelukkig mogelijk leven werd, moest ik hem zetten.

Dat gebeurt niet snel en ik kan het enkel nadien beschrijven. Dat lukt pas op het moment dat je merkt dat er iets is veranderd in je manier van denken. Tegelijkertijd blijft het duidelijk dat oude gewoonten en denkpatronen soms hardnekkig zijn, dus ook in dit geval noem ik dit een work in progress. Waar het echt om gaat, is net wat de titel zegt. Het besef dat je zelf niet belangrijk bent, moet lang sudderen vooraleer je zoiets echt kunt toegeven. In ons boekje met twaalf stappen noemt men dat nederigheid en vandaag is dat woord in ons halfrond iets vies.

Maar als je verder terugdenkt in de tijd of naar andere culturen kijkt, dan is het vaak een hoeksteen van geluk. Je hoeft niet meteen aan een Boeddhistische monnik te denken: ook de godsdienst waar ik groot mee werd, had het in hun boekje staan. Het boekje was dikker en er stond naar mijn mening enorm veel onzin in, maar net zoals dat met andere normen en waarden is gebeurd, is dit er eentje dat ik in ere heb hersteld.

Het begon toen ik verplicht werd om toe te geven dat ik machteloos stond tegenover alcohol. Dat klinkt zwaar maar het wil enkel zeggen dat ik nooit één of twee pinten kon drinken. Het was alles of niks. Een fles of een bak die half leeg was, verdroeg ik niet. Een avond beëindigen om één uur 's nachts omdat het goed geweest was, kon ik niet. Het was thuisblijven of de keet sluiten. En indien nodig, als het sluitingsuur me niet aanstond, zocht ik andere keten die mijn timing wel respecteerden. Zoiets noemen wij dan "nederig toegeven dat je machteloos staat tegenover alcohol". Er komen details als God en een Hogere Macht aan te pas, maar een atheïst kan die moeilijk meenemen.

Later werd gevraagd om dit principe uit te breiden. Maar ik was al nuchter en vroeg me af waarom ik me daar in godsnaam mee zou bezighouden. Toch is dat eenvoudig: als je nuchter wilt blijven, moet je eerst gelukkig worden en dan is dit een vereiste waar je niet omheen kan.

En dat vraagt tijd, want het gaat in tegen alle principes die je werden aangeleerd door familie, omgeving en school. Ik leerde dat ik een sterke eigen mening moest hebben. Ik moest ervoor uitkomen en duidelijk zeggen waar ik voor sta. Ik moest ook anderen overtuigen dat ik gelijk had, want een gezonde discussie verheldert de geest. Ik werd aangeleerd om van me af te bijten en me niet te laten doen in de grote boze wereld.

Aan de AA tafel was er een andere cultuur en dat was eerst moeilijk. Het ligt vast in regels die je moet volgen, en voor een alcoholist is zoiets zwaar. Plots moest ik zwijgen als anderen praten. Hoewel ik vaak wou tussenkomen, vaak zelfs gewoon om te zeggen dat ik iets begrijp of herken, volgens de nieuwe regels moest ik zwijgen. Daar was een goede reden voor: in plaats van praten, moest ik nu luisteren. Je mening voor jezelf houden tot je het woord krijgt, is niet makkelijk. Maar het kan dus en eens je het in het echte leven ook toepast, verandert er plots erg veel.

Het is niet nodig om je te verdedigen, want ik weet zelf wel waar ik voor sta. Mensen die me kennen, weten dat ook. Het is dus niet langer nuttig om te discussiëren en mijn gelijk te halen. Nederigheid mag dan een vies woord zijn, als je het toepast, word je leven veel rustiger. Er valt een hoop ballast van je schouders als je niet langer in de verdediging hoeft te gaan. Het wil niet zeggen dat je over je heen laat walsen, maar op het juiste moment zwijgen is een kunst die ik moest aanleren.

Ik moest denken aan dit dr Phil-ism. "Never mis a good chance to shut up", het zegt het allemaal. De hele kern van de zaak in één zin, daar is ie goed in. "Do you want to be right, or do you want to be happy" is er nog zo één.

"Ik ben niet belangrijk". Zo begon de tafelgenoot zijn betoog. Hij komt net zo lang aan deze tafel als ik. Hij heeft de kunst om enkele pagina's van het moeilijk plan, zijn "nieuwe film", uit te drukken in één korte zin. Als je nieuw bent, klinkt het vreemd. Als je al even hier komt, is zoiets heel logisch.

zaterdag 11 oktober 2014

Geocache waypoint verklikker

Het moet niet altijd moeilijk zijn qua elektronica, soms is het idee op zich zo simpel en toch heel erg origineel.


Dit is dan ook niet mijn idee, maar het idee van een andere CO (cache owner) voor wie ik een hele tijd geleden al eens een waypoint had gemaakt. Tot vandaag lag dit ding nergens ten velde, hij had er gewoon twee 'in stock' zoals dat heet.


Het grijze doosje met de rode knop is een variantje op mijn geocache MP3 potje, maar dan in een meer eenvoudige behuizing en zonder magnetische activering.

Maar het idee werd dus uitgebreid: stel dat je graag zou hebben dat dit waypoint coördinaten uitspreekt (waar het dus voor bedoeld is) en dat je zelf als CO graag wilt weten wanneer iemand op de knop heeft gedrukt om ze te horen.

Voorwaarde is natuurlijk dat het alleen maar lukt als je binnen het bereik van de drukknop van deze deurbel woont, dat spreekt voor zich. Maar in dit geval is dat ook zo.

Het enige wat dus moest gebeuren, is dat mijn waypoint als iemand op de rode knop drukt niet alleen de muziek gaat afspelen door de oortjes, maar ook dat op de achtergrond de deurbel wordt geactiveerd. Uiteraard moet dat gebeuren zonder dat je de drukknop van de deurbel ziet zitten. Maar zoals je ziet op de foto's is de elektronica die in de drukknop zit enorm compact en kan die makkelijk mee in het grijze doosje dat het geluid gaat produceren.

Uiteraard is het niet voldoende dat het erin past, het moet ook activeren als je op de rode knop drukt, en ik wil de batterij van de deurbel omzeilen. Er zit een kleine 3V knoopcel in en het zou een beetje dom zijn om twee batterijen te gebruiken in één toestel. Mijn waypoint werkt op 3.7V, dus dat bleek geen probleem te zijn.

Het tweede punt is natuurlijk de drukknop. Je kan niet zomaar de elektronica die ik heb gemaakt en de elektronica van de drukknop van de deurbel aan één rode drukknop vastsolderen en hopen dat alles werkt. Ik weet immers niet wat die knop in de deurbel juist doet, en ik zou makkelijk een kortsluiting kunnen maken, of de bel zou misschien helemaal niks doen. In 't slechtste geval zou ie ook geen muziek meer maken. Ik had er dus al op gerekend dat ik een extra uitgang moest voorzien aan mijn elektronica die de drukknop van de bel zou bedienen. Ik zou de software moeten aanpassen zodat samen met het afspelen van de muziek ook meteen de bel zou activeren via een ander pinnetje van de microcontroller.



Toch bleek dat allemaal niet nodig. Dit is de drukknop van de bel, en al snel was duidelijk dat het iets heel simpel is. De gele plastic kon ik gewoon wegsnijden en het middelste contact moet enkel verbonden worden met de drie andere die daar rond liggen. Het toeval wil dat die verbonden zijn met de negatieve kant van de batterij, net zoals dat met mijn drukknop het geval is. Zo toevallig is dat niet trouwens, het is niet omdat dit stukje elektronica industriëel is en dat van mij handwerk, dat we niet dezelfde basisprincipes gebruiken. Eén daarvan is dat ik elke drukknop activeer met een GND signaal dat via een pull-up weerstand aan de +3.7 Volt hangt. Hier was dat dus niet anders.

Vandaar de hele simpele oplossing. Geen software update nodig, geen extra uitgang van de microcontroller. Met drie draadjes van de deurbel naar mijn printplaatje (twee voor de batterij en één voor de drukknop), is het probleem opgelost.


De drukknop zorgt ervoor dat zowel in mijn elektronica als in die van de deurbel een signaal laag wordt, waardoor ze allebei hun ding doen.

En dat is: muziek maken, zowel binnen als buiten :)