Inhoudsopgave:

IoT-wateralarm: 5 stappen (met afbeeldingen)
IoT-wateralarm: 5 stappen (met afbeeldingen)

Video: IoT-wateralarm: 5 stappen (met afbeeldingen)

Video: IoT-wateralarm: 5 stappen (met afbeeldingen)
Video: Sustainable Living: Water Level Monitoring With Ultrasonic Sensor, Blynk And ChatGPT Generated Code 2024, Juli-
Anonim
IoT-wateralarm
IoT-wateralarm

Ik heb onlangs een back-up van de keukenafvoer ervaren. Als ik op dat moment niet thuis was geweest, zou het vloer- en gipsplaatschade hebben veroorzaakt in mijn appartement. Gelukkig was ik me bewust van het probleem en klaar om het water eruit te scheppen met een emmer. Dit zette me aan het denken om een overstromingsalarm aan te schaffen. Ik ontdekte tal van betaalbare producten op Amazon, maar degenen met internetverbinding hadden een aanzienlijk percentage negatieve recensies, voornamelijk vanwege problemen met eigen meldingsservices. Daarom heb ik besloten om mijn eigen IoT-wateralarm te maken met betrouwbare meldingsmiddelen van mijn keuze.

Stap 1: Werkingsprincipe

Werkingsprincipe
Werkingsprincipe

Het alarm heeft een AVR ATtiny85-microcontroller als brein. Het meet spanningsmetingen van de batterij en de watersensor en vergelijkt deze met een vooraf gedefinieerde waarde om de aanwezigheid van water of een bijna lege batterij te detecteren.

De watersensor bestaat uit twee draden die ongeveer 1 mm uit elkaar zijn geplaatst. Een van de draden is verbonden met 3,3 V en de andere is verbonden met een detectiepin op de microcontroller, die ook is verbonden met aarde via een weerstand van 0,5 MOhm. Normaal gesproken is de weerstand tussen de sensordraden erg hoog (ruim meer dan 10 MOhm), dus de sensorpin wordt helemaal naar beneden getrokken tot 0 V. Als er echter water tussen de draden aanwezig is, daalt de weerstand tot minder dan 1 MOhm, en de detectiepen ziet wat spanning (in mijn geval ongeveer 1,5 V). Wanneer ATtiny85 deze spanning op de detectiepin detecteert, activeert het een MOSFET om een zoemer aan te zetten en stuurt het het weksignaal naar de ESP8266-module die verantwoordelijk is voor het verzenden van waarschuwingen (e-mail en pushmeldingen). Na een minuut zoemen wordt het alarm uitgeschakeld en kan het alleen worden gereset door power cycling.

Dit apparaat werkt op twee alkaline- of NiMH-cellen. De microcontroller slaapt het grootste deel van de tijd om de batterijen te sparen en wordt met tussenpozen wakker om de watersensor en de spanning van de batterijen te controleren. Als de batterijen bijna leeg zijn, wekt de microcontroller de ESP8266-module om een waarschuwing voor een bijna lege batterij te sturen. Na de waarschuwing wordt het alarm uitgeschakeld om overmatige ontlading van de batterij te voorkomen.

Aangezien de ESP8266-module verantwoordelijk is voor het verzenden van zowel waarschuwingen voor een bijna lege batterij als voor overstromingswaarschuwingen, heeft deze een besturingssignaal van ATiny85 nodig. Vanwege het beperkte aantal beschikbare pinnen wordt dit stuursignaal gegenereerd door dezelfde pin die verantwoordelijk is voor de batterij-LED-indicatie. Tijdens normaal bedrijf (het alarm is ingeschakeld en de batterijen zijn opgeladen), knippert de LED met tussenpozen. Wanneer de batterij bijna leeg is, gaat de LED branden om een hoog signaal te geven aan de RX-pin van de ESP-module. Als er water wordt gedetecteerd, is de batterij-LED uit terwijl ESP8266 wakker is.

Stap 2: Ontwerp en montage

Ontwerp en montage
Ontwerp en montage
Ontwerp en montage
Ontwerp en montage
Ontwerp en montage
Ontwerp en montage

Ik ontwierp het circuit om te worden gebouwd op een dubbelzijdig 4x6 cm protoboard met voornamelijk 0805 SMD-onderdelen. De gepresenteerde schema's zijn gebaseerd op deze build, maar het kan eenvoudig worden aangepast voor componenten met doorlopende gaten (tip: soldeer doorlopende weerstanden verticaal om de ruimte te minimaliseren).

De volgende onderdelen zijn vereist:

- Weerstanden: 330 x 1; 470 x 1; 680 x 1; 1 kΩ x 1; 10 kΩ x 3; 470 kΩ x 3; - Een keramische condensator van 10 µF - Een logisch niveau N-kanaal MOSFET (bijv. RFP30N06LE of AO3400) - Een rode en een gele LED (of andere kleuren indien gewenst). - Tweedraads schroefklemconnectoren x 3 (dit zijn geen absoluut noodzakelijk, maar ze vergemakkelijken het aansluiten en loskoppelen van randapparatuur tijdens het testen)- Een luide piëzo-zoemer die goed is voor 3,3 V- Een ATtiny85-microcontroller (PDIP-versie)- Een 8-pins PDIP-aansluiting voor de microcontroller- Een ESP-01-module (deze kan worden vervangen door een andere op ESP8266 gebaseerde module, maar in dat geval zullen er veel veranderingen in de lay-out zijn) - Een 3,3 V DC-DC boost-converter die 200 mA (500 mA burst) stromen kan leveren bij 2,2 V invoer. (Ik raad https://www.canton-electronics.com/power-converter aan… vanwege de ultra-lage ruststroom)- Een 3-pins vrouwelijke header- Twee 4-pins vrouwelijke headers of een 2x4 header- 22 AWG massieve draden voor de watersensor- 22 AWG gevlochten draad (of een ander type dunne blootliggende draad om sporen te creëren)

Ik raad de hierboven vermelde weerstandswaarden aan, maar u kunt de meeste ervan vervangen door vergelijkbare waarden. Afhankelijk van het type LED's dat u wilt gebruiken, moet u mogelijk de stroombegrenzende weerstandswaarden aanpassen om de gewenste helderheid te krijgen. De MOSFET kan een doorlopende opening of SMT (SOT23) zijn. Alleen de oriëntatie van de weerstand van 330 Ohm wordt beïnvloed door het type MOSFET. Een PTC-zekering (bijv. met een nominale waarde van 1 A) wordt aanbevolen als u van plan bent dit circuit te gebruiken met NiMH-batterijen. Bij alkalinebatterijen is dit echter niet nodig. Tip: de onderdelen die nodig zijn voor dit alarm zijn goedkoop te koop via ebay of aliexpress.

Daarnaast heb je een breadboard, verschillende doorgaande 10k-weerstanden, meerdere male-male en female-male jumper ("dupont") draden en een USB-UART-adapter nodig om de ESP-01-module te programmeren.

De watersensor kan op verschillende manieren worden gemaakt, maar de eenvoudigste zijn twee 22 AWG-draden met blootliggende uiteinden (1 cm lang) op een onderlinge afstand van ongeveer 1 mm. Het doel is om minder dan 5 MΩ weerstand te hebben tussen de sensorcontacten als er water aanwezig is.

Het circuit is ontworpen voor een maximaal batterijverbruik. Het trekt slechts 40-60 µA in het bewakingsregime (met de power-LED verwijderd op de ESP-01-module). Zodra het alarm is geactiveerd, zal het circuit gedurende een seconde of minder 300-500 mA (bij 2,4 V ingang) verbruiken en daarna zal de stroom onder 180 mA dalen. Zodra de ESP-module klaar is met het verzenden van meldingen, daalt het stroomverbruik tot onder de 70 mA totdat de zoemer uitschakelt. Daarna zal het alarm zichzelf uitschakelen en zal het stroomverbruik lager zijn dan 30 µA. Dus een set AA-batterijen kan het circuit vele maanden (waarschijnlijk meer dan een jaar) van stroom voorzien. Als je een andere boost-converter gebruikt, zeg maar met een ruststroom van 500 µA, dan zullen de batterijen veel vaker moeten worden vervangen.

Montagetips:

Gebruik een permanente marker om alle sporen en componenten op het protoboard te labelen voor eenvoudiger solderen. Ik raad aan om in de volgende volgorde te werk te gaan:

- bovenzijde SMT LED's en geïsoleerde draadbruggen

- MOSFET aan de bovenzijde (let op: als je een SOT-23 MOSFET hebt, plaats deze dan diagonaal zoals op de foto. Als je een doorgaande MOSFET gebruikt, plaats deze dan horizontaal met de poortpin in positie I3.)

- doorlopende delen aan de bovenzijde (let op: de zoemer is niet gesoldeerd en hoeft niet eens op de print te worden gemonteerd)

- achterkant SMT-onderdelen en -sporen (bijv. individuele strengen van AWG22-draad)

Stap 3: Firmware

C-code voor ATtiny85

Main.c bevat de code die moet worden gecompileerd en geüpload naar de microcontroller. Als je een Arduino-bord als programmeur gaat gebruiken, vind je het bedradingsschema in deze tutorial. U hoeft alleen de volgende secties te volgen (negeer de rest):

– Arduino Uno configureren als ISP (In-System Programming)

– ATtiny85 verbinden met Arduino Uno.

Om de firmware te compileren en te uploaden, hebt u CrossPack (voor Mac OS) of AVR-toolchain (voor Windows) nodig. De volgende opdracht moet worden uitgevoerd om de code te compileren:

avr-gcc -Os -mmcu=attiny85 -c hoofd.c; avr-gcc -mmcu=attiny85 -o hoofd.elf hoofd.o; avr-objcopy -j.text -j.data -O ihex main.elf main.hex

Voer het volgende uit om de firmware te uploaden:

avrdude -c arduino -p attiny85 -P /dev/cu.usbmodem1411 -b 19200 -e -U flash:w:main.hex

In plaats van "/dev/cu.usbmodem1411" moet je waarschijnlijk de seriële poort plaatsen waarop je Arduino is aangesloten (je kunt deze vinden in de Arduino IDE: Tools Port).

De code bevat meerdere functies. deep_sleep() zorgt ervoor dat de microcontroller gedurende ongeveer 8 seconden in een zeer lage energiestand gaat. read_volt() wordt gebruikt om de batterij- en sensorspanningen te meten. De batterijspanning wordt gemeten tegen de interne spanningsreferentie (2,56 V plus of min een paar procent), terwijl de sensorspanning wordt gemeten tegen Vcc = 3,3 V. De metingen worden vergeleken met BATT_THRESHOLD en SENSOR_THRESHOLD gedefinieerd als respectievelijk 932 en 102, die overeenkomen met ~ 2,3 en 0,3 V. Mogelijk kunt u de drempelwaarde van de batterij verlagen voor een langere levensduur van de batterij, maar dit wordt niet aanbevolen (raadpleeg Overwegingen bij batterijen voor gedetailleerde informatie).

active_alarm() informeert de ESP-module over waterdetectie en laat de zoemer klinken. low_batt_notification() meldt de ESP-module dat de batterij bijna leeg is en laat ook de zoemer horen. Als u niet midden in de nacht gewekt wilt worden om de batterij te vervangen, verwijdert u " | 1< " in low_batt_notification().

Arduino-schets voor ESP-01

Ik heb ervoor gekozen om de ESP-module te programmeren met Arduino HAL (volg de link voor installatie-instructies). Daarnaast heb ik de volgende twee bibliotheken gebruikt:

ESP8266 E-mail verzenden door Górász Péter

ESP8266 Pushover door het Arduino Hannover-team

De eerste bibliotheek maakt verbinding met een SMTP-server en stuurt een waarschuwing naar uw e-mailadres. Maak gewoon een Gmail-account voor uw ESP en voeg de inloggegevens toe aan de code. De tweede bibliotheek verstuurt push-notificaties via de Pushover-service (notificaties zijn gratis, maar je moet eenmalig betalen om de applicatie op je telefoon/tablet te installeren). Download beide bibliotheken. Plaats de inhoud van de Send Email-bibliotheek in uw schetsmap (arduino maakt deze aan wanneer u de Arduino-schets voor de eerste keer opent). Installeer de Pushover-bibliotheek via de IDE (Sketch -> Include Library -> Add. ZIP-bibliotheek).

Om de ESP-01-module te programmeren, kunt u de volgende zelfstudie volgen: https://www.allaboutcircuits.com/projects/breadbo… U hoeft zich niet druk te maken over het opnieuw solderen van een rij pinnen zoals weergegeven in de gids - gebruik gewoon vrouwelijk-mannelijk dupont draden om de pinnen van de module met het breadboard te verbinden. Vergeet niet dat de boost-converter en de USB-UART-adapter aarde moeten delen (let op: u kunt misschien de 3,3 V-uitgang van de USB-UART-adapter gebruiken in plaats van de boost-converter, maar hoogstwaarschijnlijk niet voldoende stroom kunnen leveren).

Stap 4: Overwegingen bij de batterij

De meegeleverde firmwarecode is vooraf geconfigureerd om een waarschuwing voor een bijna lege batterij te verzenden en uit te schakelen bij ~ 2,3 V. Deze drempel is gebaseerd op de veronderstelling dat twee NiMH-batterijen in serie worden gebruikt. Het wordt niet aanbevolen om een individuele NiMH-cel onder 1 V te ontladen. Ervan uitgaande dat beide cellen dezelfde capaciteit en ontladingskarakteristieken hebben, zullen beide worden afgesneden bij ~1,15 V - ruim binnen het veilige bereik. NiMH-cellen die al vele ontlaadcycli in gebruik zijn, hebben echter de neiging om in capaciteit te verschillen. Tot 30% verschil in capaciteit kan worden getolereerd, omdat dit nog steeds zou resulteren in het laagste spanningsgrenspunt rond 1 V.

Hoewel het mogelijk is om de lage batterijdrempel in de firmware te verlagen, zou dit de veiligheidsmarge wegnemen en zou dit kunnen leiden tot overmatige ontlading en schade van de batterij, terwijl slechts een marginale toename van de levensduur van de batterij te verwachten is (een NiMH-cel is > 85% ontladen bij 1,15 V).

Een andere factor waarmee rekening moet worden gehouden, is het vermogen van de boost-converter om minimaal 3,0 V (2,5 V volgens anekdotisch bewijs) te leveren bij 300-500 mA piekstroom bij bijna lege batterijen. De lage interne weerstand van NiMH-batterijen veroorzaakt slechts een verwaarloosbare daling van 0,1 V bij piekstromen, dus een paar NiMH-cellen ontladen tot 2,3 V (open circuit) kan de boost-converter ten minste 2,2 V leveren. Bij alkalinebatterijen ligt het echter ingewikkelder. Met een paar AA-batterijen op 2,2-2,3 V (open circuit) is een spanningsval van 0,2-0,4 V te verwachten bij piekstromen. Hoewel ik heb geverifieerd dat het circuit werkt met de aanbevolen boost-converter met slechts 1,8 V geleverd bij piekstromen, zorgt dit er waarschijnlijk voor dat de uitgangsspanning tijdelijk onder de door de Espressiff voorgestelde waarde zakt. De grenswaarde van 2,3 V laat dus weinig veiligheidsmarge over bij alkalinebatterijen (houd er rekening mee dat een spanningsmeting die door de microcontroller wordt uitgevoerd slechts binnen plus of min een paar procent nauwkeurig is). Om ervoor te zorgen dat de ESP-module niet hapert wanneer de alkalinebatterijen bijna leeg zijn, raad ik aan de uitschakelspanning te verhogen tot 2,4 V (#define BATT_THRESHOLD 973). Bij 1,2 V (open circuit) wordt een alkalinecel voor ongeveer 70% ontladen, wat slechts 5-10 procentpunten lager is dan de ontladingsgraad bij 1,15 V per cel.

Zowel NiMH- als alkalinecellen hebben voor- en nadelen voor deze toepassing. Alkalinebatterijen zijn veiliger (ontbranden niet bij kortsluiting) en hebben een veel lagere zelfontlading. NiMH-batterijen garanderen echter een betrouwbare werking van ESP8266 bij een lager uitschakelpunt dankzij hun lage interne weerstand. Maar uiteindelijk kan elk type met enige voorzorgsmaatregelen worden gebruikt, dus het is gewoon een kwestie van persoonlijke voorkeur.

Stap 5: Juridische disclaimer

Dit circuit is ontworpen door een niet-professionele hobbyist, alleen voor hobbytoepassingen. Dit ontwerp wordt te goeder trouw gedeeld, maar zonder enige garantie. Gebruik het en deel het op eigen risico met anderen. Door het circuit opnieuw te maken, gaat u ermee akkoord dat de uitvinder niet aansprakelijk kan worden gesteld voor enige schade (inclusief maar niet beperkt tot waardevermindering van activa en persoonlijk letsel) die direct of indirect kan optreden door een storing of normaal gebruik van dit circuit. Als de wetten van uw land deze afstand van aansprakelijkheid tenietdoen of verbieden, mag u dit ontwerp niet gebruiken. Als u dit ontwerp of een aangepast circuit op basis van dit ontwerp deelt, moet u de oorspronkelijke uitvinder crediteren door de url van dit instructable aan te geven.

Aanbevolen: