DIY Kerstboomalarm - Kerstboom vraagt zelf om water

Nog niet eerder stonden de kerstbomen al zo vroeg; tegen de tijd dat het Kerst is, dreigen ze al te verdrogen. Als ze op een kruis staan is daar weinig aan te doen, maar een kerstboom doet het veel beter in een voet die tevens dienstdoet als waterbak. Maar het blijkt dat die bomen binnen erg dorstig zijn, en wie controleert het water nog nadat er eenmaal zo’n gezellig sneeuwkleedje overheen ligt? Precies, daarom een last-minuteproject voor alle knutselaars die geen zin hebben in een kale kerstboom!

Boodschappenlijstje

Bijvoorbeeld bij Martoparts.nl

  • 1 NodeMCU-module (€ 10,-)Bijvoorbeeld bij Conrad.nl
  • 2 Trekontlasting M10 (€ 2,-)
  • 1 Printplaatje 80 × 50 mm (€ 3,30)
  • 1 Kunststof behuizing 85 × 56 × 39 mm (€ 4,25)
  • 1 Schroefterminal 4-polig (€ 0,40)
  • 1 Netadapter 5 V, 1 A (€ 6,-)
  • 1 Rode led (€ 0,10)
  • 1 Groene led (€ 0,10)
  • 2 Weerstanden 100 ohm (€ 0,10)
  • 1 Weerstand 10 kilo-ohm (€ 0,05)

Optioneel, bijvoorbeeld bij AliExpress of eBay

  • Watersensor (‘soil moisture sensor’) zonder elektronica (€ 0,50

Als alternatief kun je ook de gestripte uiteinden van het dubbelpolige snoer gebruiken, die je een beetje uit elkaar buigt.

Overige benodigdheden: soldeerbout en soldeertin, zijkniptang, schroevendraaier, boormachine, vijl, secondelijm, enkelpolig snoer (30 cm), dubbelpolig snoer (1 meter) multimeter (optioneel).

Totale kosten: ca. € 26,–

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, drie 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 er voldoende water is; de rode led brandt bij het bereiken van de in de code bepaalde ondergrens. 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 kunststoffen behuizing, waarvoor je vanzelfsprekend ook zelf iets kunt maken of hergebruiken. De trekontlastingen voorkomen dat de voedingskabel en de sondekabel worden losgetrokken als er onbedoeld kracht op komt te staan.

Een compacte en eenvoudige behuizing van kunststof volstaat voor dit project. De eerste trekontlasting is al gemonteerd en de gaten voor beide leds zijn al geboord.

Ontwikkelomgeving installeren

De ESP-module is het gemakkelijkst te programmeren met de Arduino-ontwikkelomgeving (IDE). Deze kun je downloaden via www.tiny.cc/arduinosoft. 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, vanwege incompatibiliteit van de bibliotheek sendemail.h met nieuwere versies! 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.

Installeer versie 2.4.2 om de bibliotheek sendemail.h te kunnen gebruiken.

Aanpassen code

Het kant-en-klare programma kun je downloaden vanaf https://storage.googleapis.com/pdm-assets/media/files/Kerstboom_mail.zip. Download het bestand Kerstalarm.zip en pak het uit naar een willekeurige map. Open het bestand Kerstboom_mail.ino (door op het bestand te dubbelklikken, opent het automatisch in Arduino IDE, zie ook kader ‘Ontwikkelomgeving installeren’). Vul bij ssid en password respectievelijk de naam en het wachtwoord van je draadloze netwerk in.

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 https://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.

De gegevens van Mailjet zoals je ze in de code kunt gebruiken.

Mail versturen via Gmail

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.

Het versturen van e-mail kan ook met Gmail, maar dat gaat ten koste van de beveiliging van je account.

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; dankzij dit programma is de module met enkele regels code met het netwerk te verbinden. 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 setup() worden de pinnen gedefinieerd, de leds uitgezet en maakt de module verbinding met de wifi.

Verwerken van de gegevens

De functie loop() draait continu en vormt het hart van het programma. Hier wordt pin D1 op HIGH gezet en de waarde op de analoge pin bepaald en bewaard in de variabele meting. Zodra dat klaar is, gaat D1 weer op LOW. Door dit te doen, loopt er slechts zeer kortstondig stroom door het water. Dat is belangrijk om de watersensor te ontzien; bij een constante stroom zou de anode (de kant waarop de +5 volt staat) snel corroderen.

De code werkt met twee waarden, vastgelegd in de constanten ondergrens en veilige_waarde. De waarden van deze twee liggen iets uit elkaar, zodat kleine schommelingen in de meting geen invloed hebben bij het bepalen of het nat of droog is.

Is het resultaat van de meting kleiner dan of gelijk aan ondergrens, dan gaat of blijft de rode led aan en de groene uit. Als de booleaanse variabele alarmverzonden onwaar is, wordt ook de functie alarm() uitgevoerd. Daarin wordt een mailtje verstuurd met de melding, waarna alarmverzonden op waar wordt gezet. Dit voorkomt dat er bij elke meetronde een mail uitgaat. Pas wanneer de meetwaarde boven de veilige waarde uitkomt, wordt alarmverzonden weer op onwaar gezet en staat alles weer klaar voor een nieuw alarmronde. De rode led gaat of blijft dan uit en de groene aan. De variabele pulsdelay (de wachttijd tussen twee metingen) wordt nu vijf minuten in plaats van een seconde.

De kerstboom heeft uren nodig om het water te verbruiken en niet te vaak meten beperkt de genoemde corrosie. Andersom gaat veel sneller. Als je de kerstboom water geeft, is een vertraging van maximaal een seconde werkbaar. Doordat er in die situatie geen water tussen de elektroden aanwezig is, speelt corrosie dan nauwelijks een rol.

De watersensor corrodeert niet, door slechts af en toe kort te meten.

Probeer eens de cursus Hardware Programmeren van onze Tech Academy.

Software uploaden en testen

Als het bestand kerstboom_mail.ino naar wens is aangepast in de Arduino-ontwikkelomgeving en de NodeMCU-module is aangesloten op zowel je pc als op de watersensor, kan het uploaden beginnen. 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. Dan volgt de meetwaarde en de melding ‘Droogtealarm!’ en als het goed is de melding ‘Mail met droogtealarm verstuurd.’ erachteraan. De rode led brandt en de melding ‘Droogtealarm!’ herhaalt zich vervolgens elke seconde. Hopelijk heb je de verstuurde mail inmiddels ontvangen.

Door de sensor tegen een natte doek te houden of gedeeltelijk onder te dompelen in een kopje water, zie je de meetwaarde oplopen, de rode led doven en de groene aan gaan. De melding ‘Voldoende water’ staat nu in de seriële monitor en het programma wacht nu vijf minuten tot de volgende meting. Eventueel kun je de hoogte van ondergrens en veilige_waarde nog aanpassen in de code. Tot nu toe alles in orde? Mooi.

Om te testen kun je tijdelijk een natte doek of kopje water gebruiken

Voorbereiding

Boor om te beginnen drie gaten in de behuizing: twee van 5 millimeter voor de leds en twee van 10 millimeter voor de trekontlasting. Kleiner kan ook, met een vijl maak je dan de gaten op maat. Monteer de trekontlastingen en controleer of de leds passen. Lijm ze met secondelijm vast in de behuizing. Soldeer ook alvast de snoertjes aan de leds, en de watersensor zodat je die straks met de printplaat kunt verbinden.

De behuizing met trekontlasting en met de leds erin vastgelijmd.

Bouwen van de schakeling

Zoals al opgemerkt, is de hardware van dit project beperkt. De NodeMCU-module, de drie 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 van 100 ohm in de buurt van de pinnen D5 en D6 en de weerstand van 10 kilo-ohm bij pin A0. Zet tot slot de schroefterminal aan de andere kant van de module. 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 de uitgebreide handleiding via www.tiny.cc/pcmsolderen.

De bestukte printplaat en de gedeeltelijk gesoldeerde printplaat in de behuizing.

De schakeling is door zijn eenvoud heel geschikt voor wie met solderen begint.

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, de watersensor 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.

Soldeer van het dubbelpolige snoer elke draad aan één van de pinnen van de watersensor. Verbind de watersensor met de twee overgebleven aansluitingen van de schroefterminal, die je op de printplaat hebt verbonden met de pinnen A0 en D1 van de NodeMCU-module.

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.

De gestripte en vertinde uiteinden van het adaptersnoer.

Ingebruikname

Bevestig de watersensor in de voet met de kerstboom, zodat de twee pennen straks half in het water zullen hangen. Het bevestigen kan even een klusje zijn; Duct tape werkt voor bijna elke klus, maar een constructie met boutjes is wellicht iets robuuster. Let daarbij wel op dat je niet per ongeluk elektrisch verbinding maakt tussen de elektroden van de sensor!

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 rode led gaan branden. En binnen enkele minuten moet je een mailtje krijgen. Als dat niet gebeurt, is er waarschijnlijk een probleem met de wifi en zul je de schakeling wat dichterbij een accesspoint moeten zetten.

Geef de kerstboom water en zodra dat boven de sensor uitkomt, moet de rode led uitgaan en de groene gaan branden. Alvast een groene Kerst gewenst!

Het kersboomalarm in bedrijf.

Geschreven door: Martijn Overman op

Category: Tips en Trucs, Hardware

Tags: arduino, diy, kerstboomalarm