ID.nl logo
Huis

Bouw je eigen Sommentelefoon met een Raspberry Pi

In dit artikel beschrijven we hoe je een telefoon met draaischijf ‘hackt’ en aansluit op een Raspberry Pi. In ons geval zetten we hem in als ludieke manier om tafelsommen te oefenen. Oftewel: zo bouw je je eigen sommentelefoon.

Het oorspronkelijke idee om een T65 in combinatie met een Raspberry Pi te gebruiken voor een leuk en leerzaam project komt van Tammo Jan Dijkema (@tammojan), bij wie we via Twitter de Sommentelefoon ontdekten. Op de bijbehorende Github-pagina schrijft hij: “De telefoon geeft (door de hoorn) een sommetje, en je moet het antwoord geven door het te draaien met de draaischijf. De telefoon zegt ‘goed’ of ‘fout’, en geeft de volgende som.”

Ons plan is om de Raspberry Pi in de telefoon in te bouwen, een kind (zoals het zoontje van de auteur) alle audio te laten inspreken en uiteindelijk de functionaliteit te programmeren die je in het volgende kader kunt lezen.

Dit project is voor kinderen een leuke manier om te leren rekenen, vooral wanneer ze van hun eigen stem een complimentje te horen krijgen. Daarnaast is het voor de maker ook erg interessant en leerzaam om de techniek van zo’n oud apparaat nader te bekijken.

Benodigdheden

- T65-telefoon met kiesschijf en aardtoets - € 7,50 tot een paar tientjes

Deze is via Marktplaats nog makkelijk te krijgen; zoek op ‘T65 telefoon’. De prijs is afhankelijk van de kleur; standaard beige is meestal goedkoper;

- Raspberry Pi 3 inclusief voeding (€ 50,– via webshops als Hubbit.nl, Floris.cc, Kiwi-electronics.nl of Conrad.nl);

- Jumperkabels, female/female of female/male (€ 5,– via dezelfde elektronica webshops);

- Audiokabel met 3,5 mm stereo-jackplug (€ 2,– via bijvoorbeeld onlinekabelshop.nl of kabeldirect.nl). Je kunt ook de kabel van een setje oordopjes of hoofdtelefoon die je niet meer gebruikt doormidden knippen.

Totale kosten ca. € 65,–

Openschroeven

Het principe van het aansluiten van het telefoontoestel op de Raspberry Pi is simpel: door de telefoon te bedienen via de draaischijf, de aardknop en de knoppen waar de hoorn op ligt, worden er in de binnenkant contacten geopend en gesloten.

Door met een multimeter uit te zoeken welke contacten dit zijn en deze vervolgens met de juiste gpio-pinnen van de Raspberry Pi te verbinden, kunnen we de Pi laten reageren op het indrukken van de knoppen en het draaien van de draaischijf. Daarvoor schrijven we een programma in de programmeertaal Python.

We beginnen met het openen van de telefoon. Aan de onderkant zitten drie schroeven. Met de achterste schroef open je het klepje dat toegang geeft tot de aansluitkamer. Hierin vind je 12 contactpunten, waarvan twee viertallen een overzichtelijke kleurcode hebben gekregen. Contactpunten 1 tot en met 4 zijn bedoeld voor de kabels naar de stekker voor de wandcontactdoos, maar aangezien we die niet meer nodig hebben, kun je deze losmaken. De kabels aan de punten 9 t/m 12 die met de luidspreker en microfoon in de hoorn verbonden zijn, laten we gewoon zitten, want die gebruiken we natuurlijk wel.

Door de twee voorste schroeven los te draaien, maken we de behuizing los van de grondplaat. Je merkt aan het losdraaien van de schroefjes dat er is nagedacht over de degelijkheid van dit apparaat: de schroefjes kunnen namelijk niet uit de gaten vallen, waardoor je ze ook niet kwijt kunt raken. Wanneer alle schroeven los zijn, kun je de telefoon weer rechtop zetten en de behuizing van het toestel tillen.

©PXimport

De draaischijf

Misschien heb je je ook altijd al afgevraagd hoe de draaibeweging van de schijf wordt omgezet in de pulsen die het signaal vormen van het getal dat wordt gekozen. Wanneer je de draaischijf los klikt van de drie pootjes waar hij op rust en de transparante onderkant goed bekijkt, wordt de werking van dit vernuftig stukje techniek al snel duidelijk.

Door een nummer te kiezen en aan de schijf te draaien, draait een kleinere schijf met inkepingen mee. Wanneer deze terug draait, zorgen deze inkepingen ervoor dat twee kogeltjes herhaaldelijk tegen twee contactpunten gedrukt worden. Hoe hoger het nummer, hoe vaker er contact wordt gemaakt. Elk contactmoment is een ‘puls’.

Door het aantal pulsen door de Raspberry Pi te laten tellen, weten we dus welk nummer er is gekozen. De schijf met inkepingen is zo ontworpen, dat de kogels alleen contact maken tijdens het terugdraaien van de schijf, zodat de tijd tussen twee pulsen altijd even groot is. Hiervan kunnen we in de software handig gebruik maken.

Uit de draaischijf komen drie kabels: blauw, geel en rood. Deze zijn met respectievelijk de contactpunten Bl, Gl en Rd verbonden. De vraag is nu: welke kabels ‘detecteren’ dat het kogeltje tegen een contactpunt drukt? Om daar achter te komen, gebruiken we een multimeter, waarmee we telkens de weerstand tussen alle zes mogelijke combinaties van twee kabels meten. Met de multimeter ontdekken we dat het om de rode en blauwe kabel gaat: wanneer de kogel de contactpunten raakt, meten we geen weerstand; wanneer de kogel de contacten niet raakt, is die er wel.

Voor mensen met ervaring in het lezen van elektronische schema’s is het ook interessant om het oorspronkelijke schema van de PTT te bekijken op het blog van Dutchtelecom.

©PXimport

Het haakcontact

Door weer met de multimeter op onderzoek uit te gaan, ontdek je dat het indrukken van het haakcontact via aansluiting 1 en 3 in de aansluitkamer kan worden gedetecteerd. Hier zorgt het indrukken van de knop juist voor een open stroomkring en het opnemen van de hoorn voor een gesloten kring.

Echter: het haakcontact en de contacten in de draaischijf zijn met elkaar verbonden. Wanneer je veel gevoel voor timing hebt, is het zelfs mogelijk om een telefoonnummer te ‘draaien’ door snel achter elkaar knoppen van de haak in te drukken. Voor het programmeren met de Raspberry Pi is dit een nadeel, want hoe detecteer je of de hoorn wordt opgepakt of dat er aan de schijf wordt gedraaid? De oplossing is dat je rode en blauwe draad van de draaischijf loskoppelt van de bodemplaat en direct met de Raspberry Pi verbindt. De gele draad van de draaischijf verbind je vervolgens met het Rd- en Bl-contact op de bodemplaat. Hiervoor moet je een extra stukje draad gebruiken.

©PXimport

De aardknop

Het is handig dat de telefoon over een aardknop beschikt, want zo kun je nog andere leuke functies toevoegen. Oorspronkelijk werd deze knop gebruikt bij een huistelefooncentrale. Je kon er gesprekken mee in de wacht zetten en doorverbinden. Wij gebruiken hem om alle tien de tafels door elkaar te oefenen en daarnaast om een som nog eens te herhalen, voor het geval je deze niet goed hebt verstaan. Met de multimeter zien we dat ook hier het indrukken van de knop de stroomkring onderbreekt.

©PXimport

De luidspreker

De luidspreker is verbonden met de aansluitingen 11 en 12 in de aansluitkamer. Knip een stereo-audiokabel open. Je vindt daarin drie draden: meestal rood en wit voor het rechter- en linker-geluidskanaal en een kabel zonder mantel voor aansluiting op de aarde. De 3,5mm-jackplug komt uiteindelijk in de analoge audio uitgang van de Raspberry Pi te zitten, maar om de luidspreker te testen is het ook leuk om deze eens met een audio uitgang van een andere computer te verbinden.

©PXimport

Op de volgende pagina gaan we verder met het programmeren van de telefoon.

Tijdens het programmeren laten we de Raspberry Pi eerst nog naast de telefoon staan; dat is voor even gemakkelijker in verband met het aansluiten van kabels. Pas als alles werkt, gaan we hem inbouwen.

Het complete Python-programma voor de tafeltelefoon is te lang om hier volledig te bespreken. We staan alleen stil bij het de code die de aardknop, het haakcontact, de schijf en het geluid regelt. Voor elk van deze vier functies demonstreren we een klein Python-script, dat we toelichten. Het volledige script van de tafeltelefoon, waarin ook de code is opgenomen die het afvragen van de sommen regelt, is te downloaden van Github.

Programmeren

De programmacode die bij de aardknop hoort, is de meest eenvoudige van de drie inputs. Sla het volgende programma op de Raspberry Pi op onder de naam aardknop.py. Open daarna een terminalvenster, navigeer naar de map waar het bestand is opgeslagen en voer het uit met

python aardknop.py

Op regels 1 en 2 worden de gpio- en time-bibliotheken geïmporteerd, zodat we van deze functies in ons Python-script gebruik kunnen maken. Regels 4, 5 en 6 initialiseren gpio-pin 23, waarop we de aardknop op hebben aangesloten, waardoor deze als inputpin werkt.

Het programma telt hoe vaak de aardknop wordt ingedrukt. Deze hoeveelheid wordt bijgehouden door de variabele count. Regels 9 tot en met 14 worden continu herhaald: met de variabele aardContact wordt bijgehouden of de aardknop contact maakt. Deze is False wanneer er contact wordt gemaakt en True wanneer dat niet zo is. Wanneer aardContact de waarde False heeft (zie regel 11), wordt count met 1 opgehoogd, deze nieuwe waarde op het scherm gezet en een kort moment gepauzeerd.

©PXimport

Het tellen van het aantal pulsen van de draaischijf is iets ingewikkelder. We weten immers van te voren niet precies hoeveel pulsen we kunnen verwachten.

De variabele waarmee we het aantal pulsen – het gekozen nummer dus – bijhouden, is nPulsen. Met klaar houden we bij of we nog moeten wachten op een eventuele volgende puls, of dat er dusdanig veel tijd verstreken is sinds de laatste puls, dat kan worden geconcludeerd dat de schijf klaar is met draaien. De variabele schijfContact heeft de waarde True wanneer er door het kogeltje in de schijf contact wordt gemaakt (en er dus een puls wordt gedetecteerd) en False wanneer dat niet zo is.

Ten eerste wordt er op de regel 13 en 14 gewacht totdat er aan de schijf wordt gedraaid. Vervolgens worden regels 17 tot en met 25 herhaald zolang er nog pulsen worden gedetecteerd. In dat geval wordt op regel 14 allereerst de waarde van nPulsen met 1 opgehoogd. Daarna starten we met meten van de tijd. Als de schijf nog niet gestopt is met draaien, verwachten we namelijk dat er na ongeveer 1/10 seconde weer een puls binnen komt. Vandaar dat we 0,1 seconde wachten op regel 19 en direct daarna opnieuw bepalen wat de waarde van schijfContact is.

Regels 22 en 23: zolang er nog geen signaal van de schijf is binnenkomt, blijven we de tijd sinds de meest recente puls bepalen. Zodra deze tijd de 0,2 seconden overschrijdt, kunnen we er van uit gaan dat de schijf stil staat en is het totale aantal pulsen bekend. Op dat moment krijgt klaar de waarde True; we willen dan immers stoppen met het herhalen van regels 17 t/m 25.

Omdat bij tien pulsen de 0 op de draaischijf is gekozen, corrigeren we deze waarde op regel 27 en regel 28.

©PXimport

Er is een wezenlijk verschil tussen het gebruik van de hoornknoppen en de twee inputs die we zojuist bekeken hebben. De aardknop en de draaischijf worden namelijk gebruikt op voorspelbare momenten in het programma: op vaste tijdstippen waarop we input ervan verwachten. Bij het haakcontact ligt dat anders: de hoorn kan namelijk op elk willekeurig moment worden opgenomen en neergelegd. Het maakt niet uit waar het programma op dat moment dan ook mee bezig is: er moet direct worden gereageerd.

Het is erg onhandig om het script zo te programmeren dat we op elk moment rekening houden met de mogelijkheid dat de hoorn wordt gebruikt. Gelukkig is er een manier om dit op te lossen: interrupts.

Op regel 5 wordt de functie hoornCallback gedefinieerd. De programmacode daarvan (het herstarten van het hele script) moet worden uitgevoerd zodra er een ‘event’ op pin 24 plaatsvindt. Het koppelen van dit event aan de callback-functie vindt plaats op regel 14.

Het script toont allereerst de tekst “Wacht op hoorn…”, waarna het in een oneindige lus terechtkomt. In die lus (regel 17 en 18) gebeurt helemaal niets, maar wordt toch onderbroken wanneer de hoorn van de haak wordt genomen.

©PXimport

Om mp3-bestanden af te kunnen spelen met Python, maken we gebruik van de PyGame library. De code hiervan is een stuk eenvoudiger.

Vanaf regel 3 wordt de audiomixer geïnitialiseerd, het mp3-bestand geopend, het geluid afgespeeld en tot slot gewacht totdat het afspelen klaar is.

Voor de PTT-tafeltelefoon zijn er 48 verschillende mp3 bestanden opgenomen. Daarbij horen de 42 verschillende uitkomsten van de tafels van 1 tot 10 en de tekst “welke tafel wil je oefenen?”, “keer”, “is”, “goed zo!”, “dat is fout, het juiste antwoord was” en “dat was de laatste som, goed gedaan!”.

©PXimport

Op de volgende pagina bouwen we tot slot de Raspberry Pi in.

Om de Pi in de behuizing van de telefoon te krijgen, moeten een aantal onderdelen helaas het veld ruimen, anders past het niet. De bellen, inclusief de spoel, het volumewieltje en de koperkleurige grondplaat waarop deze bevestigd zijn, worden uit de T65 verwijderd. Ook de twee metalen strips die in de printplaat op de bodem vast zitten, worden doorgeknipt. De voedingskabel van de Raspberry Pi leiden we naar buiten door het gat waar voorheen het volumewieltje zat.

Er is helaas geen doorgang van de aansluitkamer naar de grote ruimte waar de rest van de elektronica zit. Wanneer je de Raspberry Pi wilt inbouwen, moeten de vijf kabels van de draaischijf, aardknop en haakcontact dus niet meer in de aansluitkamer worden vastgemaakt, maar aan dezelfde schroeven in de binnenkant van de telefoon. Hiervoor moet je wel eerst de doorzichtige kap boven op het haakcontact losmaken. Dit gaat eenvoudig met de twee schroeven aan weerszijden van de kap.

De drie jumperkabeltjes die met aansluiting 1, 2 en 3 van de aardknop en het hoorncontact zijn verbonden, kunnen via een opening rechts onder aan de doorzichtige kap richting Raspberry Pi worden geleid. Aan de linkerkant, bij de audiokabel, is er jammer genoeg geen opening; daar zit de kap helemaal tegen de grondplaat. Omdat de audiokabel wat dikker is, is het weer aandraaien van de schroef een beetje tricky, maar uiteindelijk lukt het wel.

©PXimport

Verder is het nog even opletten hoe je de audio- en voedingskabel naar de Raspberry Pi toe leidt. Het gemakkelijkste is om deze om te leiden via het middelste opstaande pootje waar de draaischijf op rust. Gebruik ook nog wat tape om de kabeltjes op sommige plaatsen op hun plek te houden. Het is ook verstandig om de metalen delen waar de Raspberry Pi op ligt met tape af te plakken, om ongewenst contact tussen de Raspberry Pi en de telefoon te voorkomen.

Voor het geval je programmeren te lastig vindt of, net als wij, je van mening bent dat er niets leukers te bedenken is dan de PTT-tafeltelefoon, gebruik je gewoon het kant-en-klare script dat hier te vinden is. En anders kun je bovenstaande scripts naar eigen inzicht combineren voor het programmeren van een verbeterde versie. Of misschien gaat er wel een belletje rinkelen en bedenk je juist een verrassende andere toepassing. We zijn erg benieuwd naar originele ideeën waarmee de lezers van PCM aan de slag gaan!

▼ Volgende artikel
Waar voor je geld: 5 draagbare bluetooth-speakers voor minder dan 90 euro
© Olga Demina | stock.adobe.com
Huis

Waar voor je geld: 5 draagbare bluetooth-speakers voor minder dan 90 euro

Bij ID.nl zijn we gek op producten waar je niet de hoofdprijs voor betaalt. Een paar keer per week speuren we daarom binnen een bepaald thema naar zulke deals. Ben je op zoek naar een goede bluetooth-speaker voor mee op vakantie? Wij zochten vijf modellen voor je uit voor minder dan 90 euro.

Een draagbare bluetooth-speaker is superhandig als je graag muziek luistert, waar je ook bent. Je koppelt ze in een paar seconden aan je telefoon of tablet, en je kunt meteen je favoriete playlist afspelen – zonder gedoe met kabels of ingewikkelde installatie. Gewoon aanzetten, verbinden en gaan met die beat. Wij zochten vijf modellen voor buiten voor je op, voor minder dan 90 euro.

JBL FLIP 6

Deze Flip 6 van JBL neem je makkelijk overal mee naartoe, maar produceert ondanks zijn compacte formaat toch flink wat geluid. Hij is klein genoeg om in je tas te gooien, maar als je hem aanzet, komt er verrassend veel bas en helderheid uit. Perfect voor op het strand, in het park of gewoon thuis op de keukentafel. Hij kan tegen een stootje – letterlijk – en is helemaal waterdicht. Dus regen of zwembad? Geen probleem. De batterij gaat zo'n 12 uur mee, dus je komt wel een dagje door. En heb je een vriend die ook een JBL-speaker heeft? Dan kun je ze koppelen voor dubbel zoveel geluid.

💪 Gewicht: 941 gram
🌊 Waterdicht: IP67
🔊 RMS-vermogen: 10 watt
🔋 Speelduur: 12 uur

Marshall Willen

De Marshall Willen valt op: niet alleen qua geluid, maar ook door z'n iconische rock-'n-roll-uiterlijk. Hij past makkelijk in je jaszak en maakt indruk met z'n kraakheldere geluid. Ondanks z'n formaat krijg je verrassend veel punch. De accu gaat gerust een hele dag mee en je kunt 'm gewoon meenemen onder de douche of in de regen – hij is namelijk waterdicht. Wat ook fijn is: hij heeft een handige clip waarmee je 'm ergens aan kunt hangen. Ideaal voor onderweg of op de fiets.

💪 Gewicht: 476 gram
🌊 Waterdicht: IP67
🔊 RMS-vermogen: 10 Watt
🔋 Speelduur: 15 uur

Sony ULT Field 1

De Sony ULT Field 1 is compact, makkelijk te dragen en zit verrassend goed in elkaar. Wat echt opvalt is de bas: lekker diep en vol. En als je dat niet genoeg vindt, zet je gewoon de ULT-knop aan voor nog wat extra power. Hij is water- én stofdicht, dus je hoeft 'm niet te sparen. De batterij houdt het een uur of 12 vol, wat prima is voor een dagje buiten. Gewoon een fijne, robuuste speaker die doet wat je nodig hebt.

💪 Gewicht: 650 gram
🌊 Waterdicht: IP67
🔊 RMS-Vermogen: 30 Watt
🔋 Speelduur: 12 uur

Ultimate Ears WONDERBOOM 4

De WONDERBOOM 4 is klein, rond en vrolijk, maar klinkt alsof-ie twee keer zo groot is. Zet hem in het midden van de kamer of je picknickkleed en iedereen hoort even goed wat er speelt, dankzij 360° geluid – en dat werkt verrassend goed. Hij is waterdicht én kan drijven, dus hij mag mee in bad of op een bootje, zolang je 'm maar niet lang onder water houdt. De batterij gaat ongeveer 14 uur mee, en als je er twee hebt, kun je stereo afspelen. Kortom: klein ding, groot geluid, nul zorgen.

💪 Gewicht: 420 gram
🌊 Waterdicht: IP67
🔊 Vermogen: niet opgegeven
🔋 Speelduur: 14 uur

Denver BTG-615

Denver is misschien nog niet zo bekend als de grote merken, maar deze 15 Watt BTG-615 verrast zeker. Voor een speaker onder de 50 euro krijg je een stevig geluid en een leuke lichtshow dankzij de ingebouwde leds. Perfect voor feestjes in je woonkamer of buiten op het balkon. Hij is spatwaterdicht, dus een beetje regen overleeft-ie wel. De batterij gaat zo'n 5 uur mee - dat is wel een stuk minder dan de andere hier besproken modellen, maar in principe voldoende voor een middagje muziek. En met een handvat bovenop neem je hem zo mee. Geen poespas, gewoon een leuke speaker die doet wat je verwacht.

💪 Gewicht: 2 kg
🌊 Waterdicht: IPX5
🔊 RMS-Vermogen: 15 Watt
🔋 Speelduur: 5 uur

▼ Volgende artikel
SwitchBot introduceert nieuw slim deurslot met gezichtsherkenning en Hub 3
Zekerheid & gemak

SwitchBot introduceert nieuw slim deurslot met gezichtsherkenning en Hub 3

SwitchBot - bekend van onder meer automatische gordijnsystemen - heeft twee nieuwe producten aangekondigd die het smart home-aanbod van het bedrijf verder uitbreiden. Het gaat om de SwitchBot Lock Ultra Vision Combo en de SwitchBot Hub 3.

De SwitchBot Lock Ultra Vision Combo is volgens het bedrijf het eerste slimme deurslot dat achteraf geïnstalleerd kan worden en beschikt over 3D-gezichtsherkenning. Het systeem gebruikt meer dan 30.000 infraroodpunten om een gedetailleerde gezichtskaart te maken voor identificatie. De herkenning gebeurt binnen één seconde en is zeer veilig met een foutpercentage van minder dan 0,0001%. De gezichtskaarten worden lokaal opgeslagen met AES-128 encryptie.

Het deurslot biedt in totaal 18 verschillende manieren om de deur te openen, waaronder gezichtsherkenning, automatische ontgrendeling, NFC-kaarten, vingerafdrukherkenning, app-bediening en spraakcommando's. Het is ontworpen voor vrijwel universele compatibiliteit en past op 99,9% van de bestaande deursloten zonder dat er geboord of verbouwd hoeft te worden.

Met het FastUnlock-systeem zorgt het slot voor een snelle ontgrendeling door een permanente Bluetooth-verbinding met het Keypad Vision te onderhouden. De motor is 122,2% sneller en heeft 10,5% meer kracht dan de vorige versie, terwijl het geluidsniveau laag blijft met slechts 20 dB. Er zijn verschillende modi beschikbaar, waaronder een speciale Nachtmodus die zorgt voor een stillere werking tijdens de nachtelijke uren.

Het slot is voorzien van een driefasig batterijsysteem met een grote oplaadbare hoofdbatterij die tot 9 maanden meegaat, een back-up CR123A-batterij en een elektrolytisch noodontgrendelingssysteem voor situaties waarin de hoofdbatterij leeg is.

Naast de Lock Ultra Vision Combo heeft SwitchBot ook de Hub 3 gepresenteerd. Deze hub dient als centraal besturingspunt voor het slimme huis en ondersteunt Matter. De Hub 3 kan meer dan 100.000 infrarood-apparaten, streamingdiensten en andere SwitchBot-producten integreren. Het apparaat kan tot 30 programmeerbare commando's versturen om automatiseringsscenario's te activeren met Matter-compatibele producten van andere merken die al zijn geïntegreerd in Apple Home.

De Hub 3 heeft een Dial Master draaiknop voor de bediening van volume van verbonden apparaten zoals televisie en hifi, temperatuur en andere functies. Ook biedt het apparaat aanpasbare scèneknoppen en real-time monitoring van binnen- en buitenomgevingsgegevens. Het kan daarnaast aangepaste automatiseringsroutines maken die energiebesparend gedrag ondersteunen.

SwitchBot kondigt aan dat er binnenkort meer nieuwe producten onthuld zullen worden via hun YouTube-kanaal, waaronder de SwitchBot AI Hub, Smart Video Doorbell, K20+ Pro, Garage Door Opener, Plug Mini (EU), Safety Alarm, Smart Radiator Thermostat en een nieuwe lichtserie.

Beschikbaarheid en prijzen

De SwitchBot Lock Ultra Vision Combo is verkrijgbaar via de officiële website van SwitchBot en Amazon voor een adviesprijs van 299,99 euro. Er is ook een Lock Ultra Touch Combo beschikbaar voor een adviesprijs van 249,99 euro. De SwitchBot Hub 3 is vanaf nu verkrijgbaar voor een adviesprijs van 129,99 euro.


Bekijk andere SwitchBot-producten op Kieskeurig.nl: