Verbind je tuin met Internet of Things

Wil je je tuin in het oog houden met temperatuur- en vochtsensoren en misschien zelfs een webcam? Maar heb je geen elektriciteitskabel in de tuin liggen? In dit artikel leggen we je uit hoe je een Raspberry Pi op een zonnepaneel laat werken en er sensoren op aansluit.

Toen in het begin van dit jaar de Raspberry Pi Zero W uitkwam, wist ik dat dit het ideale computertje is om mijn tuin wat slimmer te maken. Die minimalistische versie van de Raspberry Pi verbruikt weinig stroom, neemt weinig ruimte in (er zijn geen logge ethernet- en USB-poorten) en heeft sinds de W-variant ook wifi en bluetooth ingebouwd. Helaas heb ik geen elektriciteitskabel in mijn tuin en een batterij geeft niet voldoende energie aan de Pi voor continu gebruik.

Het plan was dus om een Raspberry Pi Zero W op een zonnepaneel en batterij aan te sluiten. Het geheel zou ik in een weersbestendig kastje monteren aan de binnenkant van ons kippenhok, terwijl het zonnepaneel op het naar het zuiden gerichte dak van het kippenhok de zon opvangt. Ik zou dan sensoren op de gpio-pinnen van de Pi aansluiten om onder meer de grondtemperatuur uit te lezen. En met een Raspberry Pi cameramodule zou ik onze kippen in de gaten houden. Ik bestelde de benodigde componenten online en ging van start.

Zonnepaneel

De jack van het uiteinde van het zonnepaneel heeft 3,5 mm / 1,3 mm maten, terwijl we een 5,5 mm / 2,1 mm DC-jack nodig hebben. Er bestaan adapterkabels hiervoor, maar wij kozen voor een andere oplossing. Knip de jack van het uiteinde van de kabel van het zonnepaneel, verwijder wat buitenisolatie, haal de twee draden aan het uiteinde uit elkaar en snijd wat isolatie van de draden. Schroef de openingen van de schroefterminal open. Steek de twee draden dan in het terminalblock dat aan de andere kant een 5,5 mm / 2,1 mm DC-jack heeft: de rode draad in de + en de witte of zwarte draad in de -. Schroef beide openingen dicht, zodat de draden goed contact maken. Op die manier hebben we de te kleine jack vervangen door een DC-jack.

Die DC-jack hebben we nodig, omdat die in de batterijlader past. Het zonnepaneel levert een spanning van 6 V, maar die spanning is te hoog voor de rest van onze schakeling, dus de lader zet die om naar een bruikbare spanning.

Batterijlader

De batterijlader komt met een grote 4700 µF 10 V condensator die je zelf nog op het bordje hoort te solderen. Het korte pootje is negatief, het lange pootje positief. Dat staat ook zo op de condensator aangeduid: aan de kant van het korte pootje staat een - op de condensator in een lichter gekleurde strook. Steek nu het korte pootje in de uitsparing met de - en het lange pootje in de uitsparing met de +. Draai het bordje om en soldeer de pootjes vast op het bordje. Knip daarna het teveel aan pootjes af, zodat ze later niet per ongeluk tegen elkaar komen en kortsluiting veroorzaken.

Als de condensator op de batterijlader gesoldeerd is, steek je de DC-jack van het zonnepaneel in de aansluiting en sluit je het accupack met de 2-pins JST-kabel aan op de JST-connector met de aanduiding BATT. Test nu of het zonnepaneel de batterij laadt door er een lamp op te laten schijnen. Als alles goed is, knippert het rode ledje bij DC IN en het gele ledje bij CHRG. Je batterij laadt nu op van de energie die je zonnepaneel opwekt.

PowerBoost

Hoe laten we dit nu onze Raspberry Pi voeden? Daarvoor zetten we nog een andere component in, de PowerBoost. Die zet de spanning van onze batterijlader om naar een spanning op een standaard USB-connector. We moeten wel eerst die USB-connector op de PowerBoost solderen. Klik de twee armpjes van de connector op de juiste plaats in het bordje en zorg dat de vier pinnetjes door de gaatjes op het bordje gaan. Plooi de armpjes met de kop van een schroevendraaier, zodat ze tegen het bordje aan liggen en de connector vastklemmen. Soldeer daarna de vier pinnetjes op het bordje.

Als je de USB-connector op de PowerBoost hebt gesoldeerd, dien je nog twee JST 2-aderige kabeltjes aan elkaar te solderen, zodat je een JST-naar-JST kabel hebt. Eén JST-kabeltje met aan het andere uiteinde twee blote draadjes wordt al bij de batterijlader geleverd, een ander koop je nog extra. Nadat je beide draadjes aan elkaar gesoldeerd hebt (je hebt een ‘derde hand’ nodig om de draadjes vast te houden, want je hebt je beide handen nodig voor de soldeerbout en het soldeersel), doe je er isolatietape omheen.

Sluit nu de PowerBoost via de JST-naar-JST-kabel op je batterijlader aan, in de JST-connector met de aanduiding LOAD. Als er spanning op staat, brandt er een groen ledje op de PowerBoost. Daarna voed je de Raspberry Pi eenvoudigweg via de USB-connector.

Image schrijven

Nu we in staat zijn om onze Raspberry Pi van stroom te voorzien, is het tijd om het computertje zelf klaar te maken. Download Raspbian Jessie Lite van de website van de Raspberry Pi (https://www.raspberrypi.org/downloads/raspbian/). We kiezen voor de Lite-variant, omdat we toch geen grafische interface nodig hebben: we hangen geen beeldscherm en toetsenbord aan onze Pi.

Steek een microSD-kaartje in de kaartlezer van je computer. Bekijk met dmesg | tail welke apparaatnaam het kaartje krijgt van Linux. Meestal is dat mmcblk0 of sdb.

Pak daarna het zip-bestand uit en schrijf het image van Raspbian dat daarin zit naar het microSD-kaartje. Dat is mogelijk met één lange opdracht:

unzip -p 2017-04-10-raspbian-jessie-lite.zip | sudo dd of=/dev/mmcblk0 bs=4M status=progress

Maak daarna de schrijfcache leeg:

sync

Verwijder nu het microSD-kaartje.

Headless set-up

We gaan nu de Pi instellen, zodat hij automatisch met je wifi-netwerk verbindt en je er via ssh op kunt inloggen. We noemen dit een ‘headless set-up’, omdat er geen beeldscherm en toetsenbord aan te pas komt.

Koppel het microSD-kaartje terug aan op je pc. Kijk met df -h op welke mountpoints de partities van het kaartje zijn gekoppeld. De eerste partitie is de bootpartitie met de opstartbestanden, de tweede is de rootpartitie met de rest van de bestanden van Raspbian. Creëer nu een bestand ssh in de bootpartitie:

touch PADNAARBOOTPARTITIE/ssh

Dankzij dit bestand weet Raspbian de eerste keer dat het besturingssysteem opstart dat het de ssh-server moet inschakelen. Maak ook een bestand wpa\_supplicant.conf aan in de bootpartitie, bijvoorbeeld met de editor nano:

nano PADNAARBOOTPARTITIE/wpa_supplicant.conf

Voeg de configuratie voor je wifi-netwerk toe met de volgende regels:

network={

  ssid="JouwESSID"

  psk="JouwWifiWachtwoord"

}

Sla het bestand op met ctrl+o en sluit nano af met ctrl+x. Koppel daarna de microSD-kaart los.

Eerste keer opstarten

Steek de microSD-kaart in je Pi. Sluit voor één keer om te kijken of alles goed gaat een beeldscherm aan. Gebruik daarvoor de mini-HDMI-naar-HDMI-convertor, want de Zero heeft geen volwaardige HDMI-aansluiting. Sluit de Zero tot slot met de micro-USB-aansluiting waar PWR bij staat (de rechtse) op de USB-connector van de PowerBoost aan. Als alles goed gaat, start hij nu op.

Kijk op het beeldscherm of je foutmeldingen ziet. Als je een kernel panic te zien krijgt, is het mogelijk dat je Pi niet compatibel is met de microSD-kaart. Schrijf het image van Raspbian dan naar een ander kaartje en voer opnieuw de headless set-up uit, waarna je van de andere microSD-kaart probeert op te starten.

Inloggen

Welk IP-adres je Pi toegekend heeft gekregen, vind je in de beheerpagina van je router of op het beeldscherm van de Pi als je dat hebt aangesloten. Log op dit IP-adres in met de gebruikersnaam pi en het wachtwoord raspberry. Werk allereerst de pakketlijsten bij met sudo apt update en upgrade daarna alle geïnstalleerde programma’s met sudo apt upgrade.

Voer daarna het configuratieprogramma uit: sudo raspi-config. Wijzig je wachtwoord, zodat je slimme tuinsysteem niet ongewild onderdeel gaat uitmaken van een botnet. En zet je tijdzone goed, zodat de timestamps in de logbestanden kloppen. Sluit het configuratieprogramma af (‘Finish’) en schakel je Pi uit met sudo halt.

[afbeelding sensoren-upgraden.png]

[bijschrift] Log op je Zero in en upgrade alle pakketten.

Sensor aansluiten

Voor je sensoren op de Raspberry Pi Zero W aansluit, moet je weten dat de gpio-pinheader op de Raspberry Pi Zero niet is voor gesoldeerd. Je hebt dan twee mogelijkheden. Ofwel soldeer je zelf nog de pinheader op de uitsparingen in het bordje. Dat is niet zo moeilijk als je de voorgaande soldeertaken tot een goed einde hebt gebracht. Maar het duurt wel een tijdje, omdat je maar liefst 40 pinnetjes te solderen hebt. Daarna zijn de sensoren met jumperwires op de header aan te sluiten. De andere oplossing is dat je de draadjes van je sensoren rechtstreeks in de gpio-gaatjes soldeert. Dat is minder werk, maar het nadeel is dat je Pi dan moeilijker herbruikbaar is voor andere toepassingen.

Hoe je de sensor goed aansluit en hoe je het in je software aanstuurt, hangt van het type sensor af. We illustreren dit met de SH10-sensor van Adafruit. Die meet de temperatuur en luchtvochtigheid van de bodem. Ze is voorzien van metalen gaas als behuizing dat de sensor beschermt tegen insijpelend water, maar wel de lucht binnenlaat om de vochtigheid van de grond te kunnen meten.

De SHT10 komt met vier draadjes: rood = VDD, groen = GND, geel = SCK, blauw = DATA. Het rode draadje verbind je met de pin linksonder de gpio-header van de Pi (3V3). Het groene draadje met de derde pin op de bovenste rij van links te beginnen (GND). Het gele draadje gaat naar de derde pin op de onderste rij van links te beginnen (SCL) en het blauwe draadje naar de tweede pin op de onderste rij van links te beginnen (SDA). Het blauwe draadje verbind je ook via een 10 kOhm-weerstand (die samen met de sensor wordt geleverd) met 3V3 op de Pi. Op https://pinout.xyz/ vind je overigens de naamgeving van alle gpio-pinnen op de Pi. Sluit voor een eerste test alles op een breadboard aan.

[afbeelding sensoren-test-sensor.jpg]

[bijschrift] We testen de SHT10-sensor op een breadboard met een Raspberry Pi 3.

Sensorgegevens uitlezen

Om de sensorgegevens uit te lezen, hebben we een Python-library nodig. Installeer eerst de Python pakketbeheerder Pip, wat ook Python3 installeert:

sudo apt install python3-pip

Daarna installeer je met Pip de benodigde Python-library (pi-sht1x, die je op https://github.com/drohm/pi-sht1x vindt):

sudo pip3 install pi-sht1x

En test dan of de sensor gegevens toont:

sudo python3 /usr/local/lib/python3.4/dist-packages/examples/sensor.py 3 5 -g ‘BOARD’

De nummers 3 en 5 zijn de pinnummers die we voor de data en de klok gebruiken. Deze nummers vind je ook op de website https://pinout.xyz/. Met de optie -g ‘BOARD’ geven we aan dat we met de eenvoudige pinnummers werken, zoals de pinnen op het bordje staan, en niet met de naamgeving door Broadcom.

Als je alles goed hebt aangesloten, krijg je nu enkele keren de temperatuur, relatieve vochtigheid en dauwpunt te zien.

Sensorgegevens doorsturen

Daarna staan we nog voor de taak om de sensorgegevens door te sturen. Dat is op allerlei manieren mogelijk en hangt af van wat je er mee wilt doen. Wil je het integreren in je domoticasysteem? Of wil je gewoon periodiek een e-mail ontvangen met de grondtemperatuur? We tonen als voorbeeld hoe dit laatste gaat. Installeer het pakket mailutils, samen met de Mail Transfer Agent (MTA) ssmtp:

sudo apt install mailutils ssmtp

Daarna moet je de MTA (Mail Transfer Agent) nog configureren om je e-mails te verzenden. Je geeft je accountgegevens voor een smtp-server in. Voor Gmail doe je dat bijvoorbeeld door in het bestand /etc/ssmtp/ssmtp.confde volgende regels te zetten:

mailhub=smtp.gmail.com:587

hostname=DEHOSTNAAMVANJEPI

AuthUser=Dit e-mailadres wordt beveiligd tegen spambots. JavaScript dient ingeschakeld te zijn om het te bekijken.

AuthPass=JEWACHTWOORD

useSTARTTLS=YES

Heb je tweefactorauthenticatie voor Gmail ingeschakeld, maak dan een applicatiespecifiek wachtwoord aan en vul dat hier in bij AuthPass. Daarna stuur je eenvoudig een e-mail met de sensorgegevens:

sudo python3 /usr/local/lib/python3.4/dist-packages/examples/sensor.py 3 5 -g 'BOARD' | mail -s "Grondtemperatuur" Dit e-mailadres wordt beveiligd tegen spambots. JavaScript dient ingeschakeld te zijn om het te bekijken.

Als dit werkt, maak je een crontab aan voor de root-gebruiker (het Python-script heeft rootprivileges nodig om de gpio-pinnen uit te lezen):

sudo crontab -e

Met de volgende regel voert cron het script elk uur uit, waardoor je de grondtemperatuur in je mailbox krijgt:

0 * * * * python3 /usr/local/lib/python3.4/dist-packages/examples/sensor.py 3 5 -g 'BOARD' | mail -s "Grondtemperatuur" Dit e-mailadres wordt beveiligd tegen spambots. JavaScript dient ingeschakeld te zijn om het te bekijken.

Buitenmontage

Nu de sensor werkt, is het tijd om van je breadboardopstelling over te stappen naar een definitieve aansluiting van je sensor en je tuincomputertje af te werken en buiten te monteren. Plaats alle componenten in een weerbestendige behuizing. We hebben de componenten met wat isolatietape vastgeplakt. Boor enkele gaten in die behuizing. Eén om de kabel van het zonnepaneel door te laten gaan en vier gaten om de behuizing met schroeven aan de onderkant van het dak te monteren.

We kozen voor de montage aan de onderkant van het dak van ons kippenhok, omdat de kabel tussen het zonnepaneel en de webcam dan zo kort mogelijk is, waardoor er minder problemen ontstaan. De kabel tussen onze Pi en de grondsensor is dan wel wat langer, maar dat is minder kritiek.

Er is nog één puntje waarop je moet letten: of je wifi-bereik voldoende is om toegang te verkrijgen tot je tuincomputertje. Indien niet, plaats dan een wifi-repeater of toegangspunt op een strategische plaats, zodat je Pi in de tuin nog voldoende bereik heeft.

NEDLINUX FORUM

Het nederlandse linuxforum
Voor beginners en pro’s

 

 

 

 

E-mailadres



 

 

Nieuwste editie:

Linuxmag op Facebook

@linuxmagnl op Twitter

linuxmagNL De gegevens van 143 miljoen Amerikanen lagen op straat, omdat een kredietregistratiebureau zijn installatie van Apa… https://t.co/9vKV5Jcsyc
11hreplyretweetfavorite
linuxmagNL Het Yocto project zorgt voor een gestandaardiseerde methode om een Linux systeem te bouwen op basis van de broncode… https://t.co/9HmioHeIUB
linuxmagNL Met Gazebo simuleer je het gedrag van robots. Dat doe je op basis van een model van de robot en zijn omgeving. Hier… https://t.co/DCIyQuz82J