Zo maak je je eigen pollenalarm
Online zijn prima hooikoortsvoorspellers te vinden die zijn gebaseerd op factoren zoals temperatuur, wind en neerslag. Deze pollenradars houden echter geen rekening met de plantensoort, terwijl een allergie juist vaak bij specifieke soorten optreedt. Wij bouwen een pollenalarm dat alleen waarschuwt voor stuifmeel van door jou gekozen planten in een bepaalde hoeveelheid.
Boodschappenlijstje
Bijvoorbeeld bij Martoparts.nl 1 NodeMCU-module (€ 10,-) Bijvoorbeeld bij Conrad.nl 1 Trekontlasting M10 (€ 1,-) 1 Printplaatje 80 × 50 mm (€ 3,30) 1 Kunststof behuizing 85 × 56 × 39 mm (€ 4,25) 1 Schroefterminal 2-polig (€ 0,20) 1 Netadapter 5 V, 1 A (€ 6,-) 1 Rode led (€ 0,10) 1 Groene led (€ 0,10) 2 Weerstanden 100 ohm (€ 0,10) Overige benodigdheden: soldeerbout en soldeertin, zijkniptang, schroevendraaier, boormachine, vijl, secondelijm, enkelpolig snoer (30 cm), multimeter (optioneel). Totale kosten: ca. € 24,75
Tijdens de afgelopen ‘winter’ hadden veel hooikoortspatiënten al klachten. Wie allergisch is voor pollen van de els of de hazelaar kreeg het dit jaar ongekend vroeg te verduren en het lijkt erop dat we zullen moeten wennen aan het hele jaar bloeiende planten, bomen en grassen. Gelukkig zijn de meeste mensen met een pollenallergie slechts aan de beurt gedurende de tijd dat een specifieke soort bloeit. Een pollenalarm heeft dan ook alleen zin als deze daar rekening mee houdt.
Het begint natuurlijk met betrouwbare data, die zijn verkregen uit de detectie van pollen. Onze bron is het Leids Universitair Medisch Centrum, waarvan de afdeling Longziekten wekelijks luchtmonsters analyseert. Dat is ambachtelijk handwerk: de luchtmonsters bestaan uit zeven stroken plakband (één voor elke weekdag) die onder de microscoop worden onderzocht! De resultaten van de wekelijkse telling worden gepubliceerd op de website van het LUMC.
Uiteraard is die telling plaatsgebonden en de hoeveelheid gedetecteerde stuifmeelkorrels in Leiden kan sterk afwijken van die in Limburg, om maar iets te noemen. Toch geeft het een goede indicatie en door wat te experimenteren met de hoeveelheden zijn de gegevens ook bruikbaar voor andere plaatsen. We gebruiken de getallen uit de tabel om te bepalen of er een plant boven een bepaalde norm uitkomt. Als dat zo is, brandt er een rode led en wordt er per mail een waarschuwing gestuurd. Komt de waarde weer onder de norm, dan dooft de rode led en volgt een e-mail met de mededeling dat de waarschuwing is ingetrokken.
©PXimport
Hardware
Qua hardware en behuizing blinkt dit project uit in eenvoud. Er is een netadapter nodig, een compacte behuizing en een trekontlasting, een NodeMCU-module, twee leds, twee weerstanden en een printplaatje om de boel op te solderen. Dit is dan ook een zeer geschikte schakeling voor wie net met solderen begint.
De groene led geeft aan dat het systeem operationeel is en in staat is om de data op te halen van de bron; de rode led brandt bij overschrijding van de ingestelde pollennorm voor de geselecteerde planten. De schakeling wordt gevoed door een eenvoudige netadapter van 5 volt, minimaal 1 ampère. Dat kan er ook één met usb-aansluiting zijn, in dat geval heb je nog wel een passende usb-kabel nodig. Het geheel is ondergebracht in een compacte kunststof behuizing, waarvoor je vanzelfsprekend ook zelf iets kunt maken of hergebruiken. De trekontlasting ten slotte voorkomt dat de voedingskabel wordt losgetrokken als er onbedoeld kracht op komt te staan.
©PXimport
Ontwikkelomgeving installeren
De ESP-module is het gemakkelijkst te programmeren met de Arduino-ontwikkelomgeving (IDE). Deze kun je hier downloaden. Omdat deze IDE niet primair voor deze module is bedoeld, zul je nog wat extra benodigde onderdelen moeten installeren. Klik daarvoor op Bestand / Voorkeuren en voer op het tabblad Instellingen bij Additionele Board Beheer URLs de url http://arduino.esp8266.com/stable/package_esp8266com_index.json in. Kies nu Hulpmiddelen / Board: / Board Beheer… en typ esp. Let nu goed op: installeer versie 2.4.2 voor de mailversie van het programma, vanwege incompatibiliteit van de bibliotheek sendemail.h met nieuwere versies. Voor de versie zonder mail kies je de nieuwste versie. Selecteer de module via Hulpmiddelen / Board / NodeMCU 1.0 (ESP-12E Module). Sluit de ESP-module aan via een usb-kabel en selecteer in Arduino IDE de juiste poort (Hulpmiddelen / Poort, kies de com-poort met het hoogste nummer). Als alles goed is gegaan, is je opstelling nu klaar om met programmeren te beginnen.
©PXimport
Aanpassen code
Het kant-en-klare programma kun je hier downloaden. Daar staan zelfs twee varianten: voor wie genoeg heeft aan de waarschuwingsled en het niet nodig vindt om een mailtje te ontvangen is er een uitgeklede versie beschikbaar. Dat scheelt in de configuratie bespaart je de moeite van het aanmaken van een account bij een mailprovider. Download het bestand Pollen.zip en pak het uit naar een willekeurige map. Open het bestand pollen.ino voor de versie zonder mail, of pollenmail.ino voor de versie mét mailfunctie (door op het bestand te dubbelklikken, opent het automatisch in Arduino IDE, zie ook kader ‘Ontwikkelomgeving installeren’). De uitleg hieronder gaat uit van de mailvariant, aangezien dat logischerwijs de versie is waar het meest over is te vertellen.
Vul bij ssid en password respectievelijk de naam en het wachtwoord van je draadloze netwerk in. Open https://sec.lumc.nl/pollenwebextern in een browser en bepaal de regelnummers van de planten die je in de gaten wilt houden. De eerste regel met kolomnamen telt niet mee, dus de Hazelaar is regel 1, de Els is regel 2 enzovoort. In de voorbeeldcode staan de waarden voor de meest beruchte planten. Handiger is om die te vervangen door de soorten die je in de gaten wilt houden. Vul in de code bij flora[] de corresponderende regelnummers van de tabel in, gescheiden door komma’s en bij drempel[] voor elke plant de waarde. Het bepalen daarvan is een kwestie van experimenteren: bij 0 resulteert elke stuifmeelkorrel van een bepaalde plant in een alarm en bij 100 is er een behoorlijke drempel. Als je zeer allergisch bent voor het stuifmeel van de els en in mindere mate voor dat van de berk, zet je bij flora[] de waarden {2, 8} en bij drempel[] bijvoorbeeld de waarden {0, 20}. Zorg ervoor dat het aantal getallen in beide rijen gelijk is.
Download een van de twee kant-en-klare programma’s vanaf pcmweb.nl
-
Mailaccount instellen
Voor het versturen van mail heb je een mailserver nodig. Die zou je kunnen installeren op de module, maar daarmee loop je vrijwel zeker tegen problemen aan. Spamfilters wantrouwen mail van onbekende bronnen en berichten die rechtstreeks vanaf de module zijn verstuurd, zullen bij de meeste ontvangers niet aankomen. Dit probleem is te omzeilen door (gratis) gebruik te maken van een provider, zoals Mailjet.
Ga naar www.mailjet.com en maak een nieuw account aan door te klikken op Sign up for free. Om je nieuwe account te kunnen gebruiken, moet je je mailadres bevestigen door te klikken op de knop of op de link in de bevestigingsmail.
Log in bij Mailjet en klik bovenaan op Transactional / SMTP. Onder Credentials zie je Username en Password, beide zijn nodig in je programma. Neem de tekenreeks onder User over bij server_login op de plek van USERNAME (tussen de dubbele aanhalingstekens). De tekenreeks onder Password komt op de regel bij server_password op de plek van PASSWORD. De smtp-server (in-v3.mailjet.com) en het poortnummer (587) zijn al ingevuld. Vul op de plaats van AFZENDER@DOMEIN.NL het mailadres in dat je gebruikt voor je Mailjet-account.
Het versturen van mail kan ook via Gmail. Om de smtp-server te kunnen gebruiken, zul je de accountbeveiliging moeten verlagen. Klik op het pictogram van je account en dan op Je Google-account beheren / Beveiliging en schakel Toegang door minder veilige apps in. In het programma gebruik je je eigen afzenderadres en bijbehorend wachtwoord, smtp.gmail.com bij server_host en poort 465 bij server_port.
©PXimport
Toelichting code
De code begint met het insluiten van twee bibliotheken: ESP8266WiFi.h en sendemail.h. De eerste handelt de verbinding met het draadloze netwerk af en verzorgt het webverkeer. Dankzij dit programma is de module met enkele regels code met het netwerk te verbinden en als webclient te gebruiken. De tweede bibliotheek regelt de verbinding met de mailserver, waardoor het programma berichten kan versturen.
We declareren enkele constanten en variabelen, waarvan de belangrijkste in bovenstaande alinea’s al zijn besproken. In Verwerken van de gegevens worden de leds uitgezet en maakt de module verbinding met de wifi. Als dat is gelukt, gaat de groene led aan.
Verwerken van de gegevens
De functie getinfo() vormt het hart van het programma. Hier wordt de webpagina met de tabel opgehaald en geanalyseerd. De variabele pollenalarm krijgt de waarde onwaar en i krijgt de waarde 0. Zolang pollenalarm onwaar is, wordt de webpagina regel voor regel gelezen en per keer wordt gekeken of tekenreeks pollen-totaal daarin voorkomt. Dat is de laatste kolom van de tabel, waarin alle stuifmeelkorrels van een plant staan die de afgelopen week zijn geteld. Variabele i wordt met één verhoogd en heeft nu de waarde 1. Deze lus doorloopt de rijen van de tabel. Variabele j wordt gedeclareerd en krijgt waarde 0. Dit is onderdeel van een tweede lus waarmee alle elementen uit flora[] en drempel[] worden afgelopen.
Nu worden de elementen uit de rij flora[] één voor één vergeleken met i om te bepalen om welke planten het gaat. Daarbij staat flora[0] voor het eerste element uit de rij, dus als daar 1 staat (Hazelaar in de tabel) is in dit voorbeeld aan alle voorwaarden voldaan. Dan wordt de volgende regel gelezen, die de aantallen bevat. De functie toInt() dient om spaties en andere rommel te filteren, er blijft slechts een geheel getal over dat wordt toegewezen aan de variabele pollen. Als dat getal hoger is dan de corresponderende waarde in de rij drempel[] (in dit geval dus de eerste waarde in die rij), wordt pollenalarm waar en stopt de functie. Zo niet, dan wordt j met één verhoogd en worden de volgende elementen uit flora[] en drempel[] vergeleken met i totdat er niet meer elementen zijn. Dan wordt i met één verhoogd en worden de volgende rijen uit de tabel gelezen. Is de hele tabel verwerkt, dan krijgt de variabele data binnen de status waar en gaat de groene led aan.
Alarm of niet?
De functies alarm() en geenalarm() dienen uitsluitend om mails te versturen, de eerste doet dit bij een nieuw alarm. De functie email.send() geeft een waarde waar terug als het versturen is gelukt en een waarde onwaar als er iets is fout gegaan. De gebruikte constructie test daarop en geeft de variabele alarmverzonden de status waar. Als het alarm is opgeheven, wordt de functie geenalarm() op dezelfde manier uitgevoerd. Als deze met succes is uitgevoerd, krijgt alarmverzonden de status onwaar. Hierdoor wordt uitsluitend een mailtje verzonden als de status verandert, ongeacht hoe vaak deze functie wordt uitgevoerd.
Ieder uur even kijken
Na het uitvoeren van getinfo() kijkt deze functie naar de variabelen pollenalarm, databinnen en alarmverzonden. Zijn de eerste twee waar, dan is er alarm. De rode led gaat aan en als dat nog niet is gedaan wordt een alarmmail verzonden. Hierna volgt een pauze van een uur. Heeft databinnen de waarde waar en pollenalarm de waarde onwaar, dan is er geen alarm en gaat de rode led uit. Heeft alarmverzonden de waarde waar (er is een alarmmail verstuurd), dan volgt een mailtje over het opheffen van het alarm en krijg alarmverzonden de status onwaar. Ook nu volgt een pauze van een uur. Heeft databinnen de status onwaar, dan is er iets misgegaan bij het ophalen van de data. De groene led dooft om aan te geven dat het systeem (tijdelijk) niet functioneert en een pauze van een uur volgt, waarna loop() opnieuw start.
Software uploaden en testen
Als het bestand pollen_mail.ino naar wens is aangepast in de Arduino-ontwikkelomgeving en de NodeMCU-module is aangesloten, kan het uploaden beginnen. Om te testen of het werkt, kun je tijdelijk een plant (of boom) toevoegen waarvan er op dat moment zeker pollen in de tabel staan. Open de seriële monitor met Ctrl+Shift+M en upload het programma met Ctrl+U.
Nadat het uploaden is voltooid, zie je als het goed is hoe de module eerst verbinding maakt met het draadloze netwerk en vervolgens met de webserver. Dan volgt de eerste plant, de daarvoor geldende drempelwaarde en de gemeten waarde. Daarna de waarden voor de volgende planten. Overschrijdt een van de meetwaarden de voor die plant ingestelde drempel, dan verschijnt de melding Pollenalarm!, gevolgd door Mail met pollenalarm verstuurd. Blijven alle waarden onder de ingestelde drempels, dan zie je alleen Geen pollenalarm. Werkt het tot nu toe allemaal? Dan kun je de module loskoppelen.
Om te testen kun je tijdelijk een plant toevoegen waarvan er pollen in de tabel staan
-
Voorbereiding
Boor om te beginnen drie gaten in de behuizing: twee van 5 millimeter voor de leds en een van 10 millimeter voor de trekontlasting. Kleiner kan ook, met een vijl maak je dan het gat op maat. Monteer de trekontlasting en controleer of de leds passen. Lijm ze met secondelijm vast in de behuizing. Soldeer ook alvast de snoertjes aan de leds, zodat je die straks aan de printplaat kunt solderen.
©PXimport
Bouwen van de schakeling
Zoals al opgemerkt, is de hardware van dit project beperkt. De NodeMCU-module, de twee weerstanden en de schroefterminal komen op het printplaatje. Boor om te beginnen gaten van 5 millimeter op de hoeken van de printplaat, zodat deze over de schroefgaten van de behuizing vallen.
Door de componenten slim te plaatsen, zijn ze onderling te verbinden met soldeer. Houd er rekening mee dat (afhankelijk van de baantjes op de printplaat) de module dwars in de behuizing kan komen te zitten en er is dan maar weinig marge! Plaats daarom eerst de module op de printplaat en kijk of het in de behuizing gaat passen voor je verdergaat. Fixeer dan de module door aan de onderkant de pinnen op elke hoek een stukje naar buiten te buigen, bijvoorbeeld met het platte uiteinde van een schroevendraaier. Plaats daarna de weerstanden in de buurt van de pinnen D5 en D6 en tot slot de schroefterminal aan de andere kant van de module. In het voorbeeld heeft deze vier aansluitingen, maar er zijn er slechts twee nodig. Ook de weerstanden en de schroefterminal blijven het best op hun plek zitten als je de pootjes een stukje ombuigt. Knip nu met een kniptang alle pootjes (ook die van de module) af op een lengte van ongeveer twee millimeter en soldeer de te verbinden onderdelen en pinnen aan elkaar. Soldeer ook de vier hoekpinnen van de module, waarvan er overigens slechts één wordt verbonden met de schroefterminal. Zie voor tips over solderen deze uitgebreide handleiding.
©PXimport
Aansluiten
De afwerking is nu eenvoudiger dan ooit, want dankzij de kant-en-klare behuizing zit alles al op z’n plek. Wat rest is het aansluiten van de netadapter en de leds. Knip om te beginnen de ronde stekker van de kabel af. Gebruik je een usb-netadapter, dan knip je van de usb-kabel de micro-usb-connector af. Strip de afzonderlijke draadjes over een lengte van ongeveer een halve centimeter en vertin de uiteinden. Als je een multimeter hebt, kun je de polariteit (plus en min) van de aansluitingen controleren. Heb je die niet, dan kun je kijken of er een opdruk op (een van) de draden staat. Een andere mogelijkheid is het aansluiten van een led met aan één van de pootjes een weerstand van 220 ohm. Sluit een van de adapterdraadjes aan op de weerstand en het andere draadje op het vrije pootje van de led. Het draadje dat is verbonden met het lange pootje van de led, is de plus. Markeer deze draad. Steek de vertinde uiteinden van buitenaf door de trekontlasting en zet ze vast in de schroefterminal op de printplaat, waarbij de plusdraad op VIN komt en de mindraad op GND.
Sluit als laatste de leds aan met stukjes draad, waarvan je de uiteinden vertint. Verbind de kathodes (korte pootjes) van beide leds met GND, de anode (lange pootje) van de groene led sluit je aan op de weerstand bij pin D5 en de anode van de rode led op de weerstand bij D6.
©PXimport
Ingebruikname
De schakeling en het programma zijn al getest, dus kan de adapter in het stopcontact. Er is nu geen seriële monitor, dus je ziet aanvankelijk niets gebeuren. Binnen enkele seconden moet de groene led gaan branden. Als dat na een minuut nog niet zo is, is er waarschijnlijk een probleem met de wifi en zul je de schakeling wat dichterbij een accesspoint moeten zetten.
Bij overschrijding van de in de code opgegeven pollennorm, gaat ook de rode led aan en ontvang je de waarschuwingsmail. Hoewel het programma elk uur de gegevens ophaalt, is het goed om te beseffen dat deze vooralsnog slechts eenmaal per week (op dinsdagmiddag) worden ververst door het LUMC. De status blijft op de andere dagen ongewijzigd, dit is helaas niet anders. Het is alleen al daarom zeker aan te bevelen om de drempel niet te hoog te maken, zodat je tijdig een waarschuwing krijgt.
Nu maar hopen op een pollenarm jaar met weinig mailtjes!
©PXimport