Sommario:

Allarme acqua IoT: 5 passaggi (con immagini)
Allarme acqua IoT: 5 passaggi (con immagini)

Video: Allarme acqua IoT: 5 passaggi (con immagini)

Video: Allarme acqua IoT: 5 passaggi (con immagini)
Video: Ucraino continua a divertirsi in spiaggia nonostante le bombe russe a Berdyansk 2024, Dicembre
Anonim
Allarme acqua IoT
Allarme acqua IoT

Di recente ho sperimentato il backup dello scarico della cucina. Se non fossi stato a casa in quel momento, avrebbe causato danni al pavimento e al muro a secco nel mio appartamento. Fortunatamente, ero a conoscenza del problema e pronto a raccogliere l'acqua con un secchio. Questo mi ha fatto pensare all'acquisto di un allarme alluvione. Ho scoperto molti prodotti convenienti su Amazon, ma quelli con connettività Internet hanno avuto una percentuale significativa di recensioni negative, principalmente a causa di problemi con i servizi di notifica proprietari. Ecco perché ho deciso di creare il mio allarme per l'acqua IoT che utilizzasse mezzi di notifica affidabili di mia scelta.

Fase 1: Principio di funzionamento

Principio di funzionamento
Principio di funzionamento

L'allarme ha come cervello un microcontrollore AVR ATtiny85. Prende le letture della tensione dalla batteria e dal sensore dell'acqua e le confronta con un valore predefinito per rilevare la presenza di acqua o una condizione di batteria scarica.

Il sensore dell'acqua è costituito semplicemente da due fili posizionati a circa 1 mm di distanza. Uno dei fili è collegato a 3,3 V e l'altro è collegato a un pin di rilevamento sul microcontrollore, anch'esso collegato a terra tramite un resistore da 0,5 MOhm. Normalmente, la resistenza tra i fili del sensore è molto alta (ben oltre 10 MOhm), quindi il pin di rilevamento viene tirato fino a 0 V. Tuttavia, quando è presente dell'acqua tra i fili, la resistenza scende a meno di 1 MOhm, e il pin di rilevamento vede una certa tensione (nel mio caso circa 1,5 V). Quando ATtiny85 rileva questa tensione sul pin di rilevamento, attiva un MOSFET per accendere un cicalino e invia il segnale di sveglia al modulo ESP8266 che è responsabile dell'invio di avvisi (e-mail e notifiche push). Dopo un minuto di ronzio, l'allarme viene disattivato e può essere ripristinato solo spegnendo e riaccendendo.

Questa unità funziona con due celle alcaline o NiMH. Il microcontrollore è inattivo per la maggior parte del tempo per risparmiare le batterie, svegliandosi a intermittenza per controllare il sensore dell'acqua e la tensione delle batterie. Se le batterie sono scariche, il microcontrollore riattiva il modulo ESP8266 per inviare un avviso di batteria scarica. Dopo l'avvertimento, l'allarme viene disinserito per evitare lo scaricamento eccessivo della batteria.

Poiché il modulo ESP8266 è responsabile dell'invio sia degli avvisi di batteria scarica che degli avvisi di allagamento, richiede un segnale di controllo da ATiny85. A causa del numero limitato di pin disponibili, questo segnale di controllo è generato dallo stesso pin responsabile dell'indicazione del LED della batteria. Durante il normale funzionamento (l'allarme è inserito e le batterie sono cariche), il LED lampeggia in modo intermittente. Quando viene rilevata la condizione di batteria scarica, il LED si accende per fornire un segnale alto al pin RX del modulo ESP. Se viene rilevata acqua, il LED della batteria sarà spento mentre ESP8266 è attivo.

Passaggio 2: progettazione e assemblaggio

Progettazione e assemblaggio
Progettazione e assemblaggio
Progettazione e assemblaggio
Progettazione e assemblaggio
Progettazione e assemblaggio
Progettazione e assemblaggio

Ho progettato il circuito da costruire su una scheda prototipi 4x6 cm a doppia faccia utilizzando principalmente 0805 parti SMD. Gli schemi presentati si basano su questa build, ma può essere adattata facilmente per componenti a foro passante (suggerimento: per ridurre al minimo lo spazio, saldare i resistori a foro passante verticalmente).

Sono necessarie le seguenti parti:

- Resistenze: 330 Ω x 1; 470 x 1; 680 x 1; 1 kΩ x 1; 10 kΩ x 3; 470 kΩ x 3; - Un condensatore ceramico da 10 µF- Un MOSFET a canale N a livello logico (es. RFP30N06LE o AO3400)- Un LED rosso e uno giallo (o altri colori se lo si desidera).- Connettori terminali a vite a due fili x 3 (non sono assolutamente necessario, ma rendono più facile connettere e disconnettere la periferia durante il test)- Un forte cicalino piezoelettrico che va bene per 3,3 V- Un microcontrollore ATtiny85 (versione PDIP)- Una presa PDIP a 8 pin per il microcontrollore- Un modulo ESP-01 (può essere sostituito da un altro modulo basato su ESP8266, ma in questo caso ci saranno molti cambiamenti nel layout)- Un convertitore boost DC-DC da 3,3 V in grado di fornire correnti da 200 mA (burst da 500 mA) a 2,2 V ingresso. (Raccomando https://www.canton-electronics.com/power-converter… a causa della sua corrente di riposo ultra-bassa)- Un connettore femmina a 3 pin- Due connettori femmina a 4 pin o un connettore 2x4- Fili solidi 22 AWG per il sensore dell'acqua: cavo intrecciato 22 AWG (o un altro tipo di filo sottile esposto per creare tracce)

Raccomando i valori dei resistori sopra elencati, ma potresti sostituirli con valori simili. A seconda del tipo di LED che si desidera utilizzare, potrebbe essere necessario regolare i valori del resistore di limitazione della corrente per ottenere la luminosità desiderata. Il MOSFET può essere a foro passante o SMT (SOT23). Solo l'orientamento della resistenza da 330 Ohm è influenzato dal tipo di MOSFET. Si consiglia un fusibile PTC (ad es. valutato per 1 A) se si prevede di utilizzare questo circuito con batterie NiMH. Tuttavia, non è necessario con batterie alcaline. Suggerimento: le parti necessarie per questo allarme possono essere acquistate a buon mercato da ebay o aliexpress.

Inoltre, avrai bisogno di una breadboard, diversi resistori da 10k a foro passante, più cavi jumper maschio-maschio e femmina-maschio ("dupont") e un adattatore USB-UART per programmare il modulo ESP-01.

Il sensore dell'acqua può essere realizzato in vari modi, ma il più semplice è costituito da due fili da 22 AWG con estremità scoperte (lunghe 1 cm) distanziate di circa 1 mm l'una dall'altra. L'obiettivo è avere una resistenza inferiore a 5 MΩ tra i contatti del sensore quando è presente l'acqua.

Il circuito è progettato per la massima economia della batteria. Assorbe solo 40-60 µA nel regime di monitoraggio (con il LED di alimentazione rimosso sul modulo ESP-01). Una volta attivato l'allarme, il circuito assorbirà 300-500 mA (all'ingresso di 2,4 V) per un secondo o meno, dopodiché la corrente scenderà al di sotto di 180 mA. Una volta che il modulo ESP ha terminato l'invio delle notifiche, il consumo di corrente scenderà al di sotto di 70 mA fino allo spegnimento del cicalino. Quindi l'allarme si disattiverà e il consumo di corrente sarà inferiore a 30 µA. Quindi un set di batterie AA sarà in grado di alimentare il circuito per molti mesi (probabilmente più di un anno). Se usi un convertitore boost diverso, diciamo con una corrente di riposo di 500 µA, le batterie dovranno essere cambiate molto più spesso.

Suggerimenti per il montaggio:

Usa un pennarello indelebile per etichettare tutte le tracce e i componenti sulla scheda prototipi per una saldatura più semplice. Consiglio di procedere nel seguente ordine:

- LED SMT sul lato superiore e ponticelli isolati

- MOSFET lato superiore (nota: se hai un MOSFET SOT-23, posizionalo in diagonale come in foto. Se stai usando un MOSFET a foro passante posizionalo orizzontalmente con il gate pin in posizione I3.)

- parti con foro passante lato superiore (nota: il cicalino non è saldato e non deve nemmeno essere montato sul PCB)

- parti e tracce SMT sul retro (ad es. trefoli singoli dal filo AWG22)

Passaggio 3: firmware

Codice C per ATtiny85

Main.c contiene il codice che deve essere compilato e caricato sul microcontrollore. Se hai intenzione di utilizzare una scheda Arduino come programmatore, puoi trovare lo schema elettrico in questo tutorial. Devi seguire solo le seguenti sezioni (ignora il resto):

– Configurazione di Arduino Uno come ISP (Programmazione In-System)

– Collegamento di ATtiny85 con Arduino Uno.

Per compilare e caricare il firmware, avrai bisogno di CrossPack (per Mac OS) o AVR toolchain (per Windows). Il seguente comando deve essere eseguito per compilare il codice:

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

Per caricare il firmware, eseguire quanto segue:

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

Invece di "/dev/cu.usbmodem1411" dovrai probabilmente inserire la porta seriale a cui è collegato il tuo Arduino (puoi trovarlo nell'IDE Arduino: Tools Port).

Il codice contiene più funzioni. deep_sleep() fa entrare il microcontrollore in uno stato di alimentazione molto basso per circa 8 secondi. read_volt() viene utilizzato per misurare le tensioni della batteria e del sensore. La tensione della batteria viene misurata rispetto al riferimento di tensione interno (2,56 V più o meno qualche punto percentuale) mentre la tensione del sensore è misurata rispetto a Vcc = 3,3 V. Le letture vengono confrontate con BATT_THRESHOLD e SENSOR_THRESHOLD definiti rispettivamente come 932 e 102, che corrispondono a ~2,3 e 0,3 V. Potrebbe essere possibile ridurre il valore di soglia della batteria per una maggiore durata della batteria, ma non è consigliabile (fare riferimento a Considerazioni sulla batteria per informazioni dettagliate).

Activate_alarm() notifica al modulo ESP il rilevamento dell'acqua e suona il cicalino. low_batt_notification() notifica al modulo ESP che la batteria è scarica e suona anche il cicalino. Se non desideri essere svegliato nel cuore della notte per cambiare la batteria, rimuovi " | 1< " in low_batt_notification().

Schizzo Arduino per ESP-01

Ho scelto di programmare il modulo ESP usando Arduino HAL (segui il link per le istruzioni di configurazione). Inoltre ho utilizzato le seguenti due librerie:

ESP8266 Invia e-mail di Górász Péter

ESP8266 Pushover del team Arduino Hannover

La prima libreria si connette a un server SMTP e invia un avviso al tuo indirizzo email. Basta creare un account Gmail per il tuo ESP e aggiungere le credenziali al codice. La seconda libreria invia notifiche push tramite il servizio Pushover (le notifiche sono gratuite, ma devi pagare una volta per installare l'applicazione sul tuo telefono/tablet). Scarica entrambe le librerie. Inserisci il contenuto della libreria Invia email nella cartella dello schizzo (arduino lo creerà quando apri lo schizzo di arduino per la prima volta). Installa la libreria Pushover tramite l'IDE (Sketch -> Includi libreria -> Aggiungi libreria. ZIP).

Per programmare il modulo ESP-01 puoi seguire il seguente tutorial: https://www.allaboutcircuits.com/projects/breadbo… Non c'è bisogno di preoccuparsi di risaldare una fila di pin come mostrato nella guida - basta usare dupont femmina-maschio fili per collegare i pin del modulo alla breadboard. Non dimenticare che il convertitore boost e l'adattatore USB-UART devono condividere la massa (nota: potresti essere in grado di utilizzare l'uscita a 3,3 V dell'adattatore USB-UART invece del convertitore boost, ma molto probabilmente non lo farà essere in grado di erogare una corrente sufficiente).

Passaggio 4: considerazioni sulla batteria

Il codice del firmware fornito è preconfigurato per inviare un avviso di batteria scarica e spegnere a ~2,3 V. Questa soglia si basa sul presupposto che vengano utilizzate due batterie NiMH in serie. Non è consigliabile scaricare alcuna singola cella NiMH al di sotto di 1 V. Supponendo che entrambe le celle abbiano la stessa capacità e caratteristiche di scarica, entrambe verranno tagliate a ~ 1,15 V, ben all'interno dell'intervallo di sicurezza. Tuttavia, le celle NiMH che sono state utilizzate per molti cicli di scarica tendono a differire per capacità. È possibile tollerare una differenza di capacità fino al 30% poiché comporterebbe comunque il punto di interruzione della cella di tensione più basso di circa 1 V.

Sebbene sia possibile ridurre la soglia di batteria scarica nel firmware, così facendo si eliminerebbe il margine di sicurezza e si potrebbe causare una scarica eccessiva della batteria e danni, mentre ci si aspetta solo un aumento marginale della durata della batteria (una cella NiMH è > 85% scaricato a 1,15 V).

Un altro fattore che deve essere preso in considerazione è la capacità del convertitore boost di fornire almeno 3,0 V (2,5 V secondo prove aneddotiche) a una corrente di picco di 300-500 mA con batterie scariche. La bassa resistenza interna delle batterie NiMH provoca solo una trascurabile caduta di 0,1 V alle correnti di picco, quindi una coppia di celle NiMH scaricate a 2,3 V (circuito aperto) sarà in grado di fornire almeno 2,2 V al convertitore boost. È, tuttavia, più complicato con le batterie alcaline. Con una coppia di batterie AA posizionate a 2,2-2,3 V (circuito aperto) è prevedibile una caduta di tensione di 0,2-0,4 V alle correnti di picco. Anche se ho verificato che il circuito funziona con il convertitore boost consigliato con appena 1,8 V forniti alle correnti di picco, questo probabilmente fa sì che la tensione di uscita scenda momentaneamente al di sotto del valore suggerito dall'Espressiff. Pertanto, la soglia di interruzione di 2,3 V lascia poco margine di sicurezza con batterie alcaline (tenere presente che una misurazione della tensione eseguita dal microcontrollore è accurata solo entro più o meno qualche punto percentuale). Per garantire che il modulo ESP non si guasti quando le batterie alcaline sono scariche, consiglio di aumentare la tensione di interruzione a 2,4 V (#define BATT_THRESHOLD 973). A 1,2 V (circuito aperto) una cella alcalina viene scaricata di circa il 70%, che è solo 5-10 punti percentuali inferiore al grado di scarica a 1,15 V per cella.

Sia le celle NiMH che quelle alcaline presentano vantaggi e svantaggi per questa applicazione. Le batterie alcaline sono più sicure (non prendono fuoco se in cortocircuito) e hanno un tasso di autoscarica molto più basso. Tuttavia, le batterie NiMH garantiscono un funzionamento affidabile di ESP8266 a un punto di interruzione inferiore grazie alla loro bassa resistenza interna. Ma alla fine, entrambi i tipi possono essere utilizzati con alcune precauzioni, quindi è solo una questione di preferenze personali.

Passaggio 5: esclusione di responsabilità legale

Questo circuito è stato progettato da un hobbista non professionista solo per applicazioni hobbistiche. Questo design è condiviso in buona fede, ma senza alcuna garanzia. Usalo e condividi con gli altri a tuo rischio. Ricreando il circuito, accetti che l'inventore non sarà ritenuto responsabile per eventuali danni (inclusi, a titolo esemplificativo, danni a beni e lesioni personali) che potrebbero verificarsi direttamente o indirettamente a causa di malfunzionamenti o normale utilizzo di questo circuito. Se le leggi del tuo paese annullano o vietano questa esenzione di responsabilità, non puoi utilizzare questo disegno. Se condividi questo progetto o un circuito modificato basato su questo progetto, devi accreditare l'inventore originale indicando l'URL di questo istruibile.

Consigliato: