Intelligente wekker – Het opbouwen van de elektronica (deel 1)

7-segmentIn 2016 zal ik veel meer projecten doen waarin ik elektronica met houtbewerken combineer. Voor mensen die deze projecten ook willen maken, wil ik ook het elektronica deel beschrijven. Mocht je weinig ervaring hebben met elektronica en/of het programmeren van software, geen zorgen ik ga proberen om alles zo te beschrijven dat jij het ook kan. En de software die ik programmeer stel ik op deze site beschikbaar. Voor de die-hard programmeurs zeg ik op voorhand al, dat het 10 jaar geleden is dat ik professioneel software geschreven heb. En dat mijn code vast niet de beste is en dat het waarschijnlijk allemaal nog veel beter kan. Als jij mijn site alleen voor het houtbewerken zoekt, dan is dit artikel mogelijk niet iets voor jou. Maar ik zou dan zeker dit project blijven volgen, omdat er ook het nodige houtbewerken bij komt.

Als display voor de wekker heb ik gekozen voor het 1,2 Inch 7 segment display van Adafruit. En daar komen in een keer een hoop kreten voorbij. 1,2 Inch is de hoogte van het display wat een haar groter is dan 3cm. 7 segment wil zeggen dat elke cijfer uit 7 lampjes bestaat, die je elk individueel aan- en uit kunt zetten. Door de lampen te combineren kun je elk cijfer maken. Het display heeft 4 cijfers en ook nog twee dubbele punten. Als je elke lampje afzonderlijk op een microcontroller of een Raspberry Pi aan wilt sluiten, dan heb je daarvoor 33 pinnen voor nodig. Dat is niet alleen meer dan wat de Pi en een microcontroller aan pinnen hebben. Maar het is ook nog eens een grote wirwar aan draden als je alles eenmaal hebt aangesloten.

Adafruit heeft daarom een display gemaakt, dat je met behulp van i2c aan de Pi of een microcontroller kunt koppelen. Dat klinkt vast heel moeilijk, maar i2c is een techniek die gebruikt wordt in de elektronica om met componenten te communiceren. i2c heeft – naast de voeding en de grond – slechts twee draden die je hoeft aan te sluiten. Op het volgende plaatje zie je hoe je het display op de Raspberry Pi aansluit.

7-segment

Zo zie je maar, dat i2c het leven een stuk gemakkelijker maakt. Je ziet op het plaatje dat ik voor dit project een Raspberry Pi gebruik. De Pi is een volledige computer met General Purpose IO (GPIO) pinnen. Met behulp van de GPIO pinnen, kun je elektronica met de Pi aansturen of uitlezen. Maar goed, hoe stuur je een i2c component aan? Dat is heel makkelijk, Adafruit heeft daarvoor een speciale library gemaakt die je met behulp van de programmeertaal Python kunt gebruiken. Die library samen met een volledige beschrijving voor het aansluiten van het display kun je hier vinden. Voor je dergelijke projecten op de Pi gaat doen, is het wel verstandig om wat tutorials te volgen over Raspbian, het besturingssysteem van de raspberry Pi. Dit is geen windows maar Linux en dat is in het begin een hele omschakeling. Maar gelukkig kun je alles op het internet vinden.

Overigens kies in dit project bewust voor de Pi i.p.v. de Arduino. Dit doe ik om twee redenen. Wat ik uiteindelijk allemaal wil dat mijn wekker kan is zoveel, dat het qua software te groot wordt voor het beperkte geheugen van de Arduino. Daarnaast wordt dit een Internet Of Things (IOT) project. Daarvoor moet de wekker toegang hebben tot het internet. Nu is dit met een Arduino ook te doen, maar de Raspberry Pi heeft standaard een ethernet poort, waarmee je hem heel eenvoudig aan je eigen netwerk kunt hangen. En als je wilt kun je ook een goedkope USB Wifi dongle gebruiken.

In deze serie, wil ik je laten zien hoe ik elektronica projecten ontwerp en uitvoer. Ik bouw het altijd stuk voor stuk op. Ik ga dus niet eerst alle elektronica opbouwen en dan de programma’s schrijven. Het bovenste plaatje is, dus ook niet het uiteindelijke plaatje. Het eerste probleem dat ik op wil lossen, is er voor zorgen dat de tijd op het display weergegeven wordt. Hiervoor heb ik een klein programmaatje geschreven, waaraan ik verschillende commando’s mee kan geven.

Schermafbeelding 2016-01-01 om 18.21.40

Dit programma heb ik op verschillende plekken toegevoegd aan Raspbian. Als eerste heb ik een init.d script geschreven, die door de Pi aangeroepen wordt als, de Pi opgestart wordt of als de Pi uitgezet wordt. Het script ziet er als volgt uit:

#!/bin/bash

# /etc/init.d/seven-segment

### BEGIN INIT INFO
# Provides:          seven-segment
# Required-Start:    $time
# Required-Stop:     $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Display's current time on an i2c 7 segment display
# Description:       Clears or display's current time on an i2c 7 segment display connected to the pi
### END INIT INFO


case "$1" in
start)
python /usr/local/bin/piClock.py -init
;;
stop)
python /usr/local/bin/piClock.py -clear
;;
*)
echo "Usage: /etc/init.d/seven-segment start|stop"
exit 1
;;
esac

exit 0

Als de Pi opstart, dan start ik mijn programma met commando -init. Dit zorgt ervoor dat de i2c communicatie met het display geïnitialiseerd wordt en dat de huidige tijd weergegeven wordt. Als de Pi uitgezet wordt, dan roep start ik het programma met het command -clear, dit commando zorgt ervoor dat elk lampje in het display uitgezet wordt.

Maar wat heb je aan een wekker, als deze alleen de tijd van het opstarten weergeeft en niet elke minuut opnieuw de tijd toont? In Linux kun je gebruik maken van CronTab, om een programma op een willekeurig tijdstip en/of datum uit te voeren. Ik heb een regel in mijn CronTab toegevoegd die het programma elke minuut met het commando -time aanroept. Je kunt onder Raspbian je Crontab bewerken met het commando sudo crontab -e. Bij mij geeft dit het volgende resultaat.

Crontab

Als je alleen maar een klok zou willen, dan is het volgen van de Adafruit tutorial en het installeren van het programma dat ik geschreven heb voldoende. Overigens kun je dan waarschijnlijk veel beter een Arduino gebruiken dan een Pi. Dat scheelt je een hoop geld.

Ik heb nog geen goede plugin gevonden voor het opnemen van programma code op mijn blog. Maar mocht je interesse hebben in het programma, stuur me dan even een bericht. Ik zal in elk geval opzoek gaan naar hoe ik het programma via mijn site beschikbaar kan stellen.

Leave a Reply