Sommario:

Sensore di movimento ESP-01 con Deep Sleep: 5 passaggi
Sensore di movimento ESP-01 con Deep Sleep: 5 passaggi

Video: Sensore di movimento ESP-01 con Deep Sleep: 5 passaggi

Video: Sensore di movimento ESP-01 con Deep Sleep: 5 passaggi
Video: EXTRA Ep. 3 Sinric Pro | Costruiamo un sensore di movimento 2024, Maggio
Anonim
Image
Image

Ho lavorato alla realizzazione di sensori di movimento fatti in casa che inviano un messaggio di posta elettronica quando vengono attivati. Ci sono molti esempi di istruzioni e altri esempi per farlo. Di recente avevo bisogno di farlo con un sensore di movimento PIR a batteria e un ESP-01. L'ESP-01 è molto funzionale e ha tutte le capacità richieste, quindi perché non utilizzare il minimo e il meno costoso necessario? Aggiunto al mix è stato un altro modulo ESP-01 separato e remoto che ha attivato un cicalino quando è stato attivato il sensore di movimento.

Il codice e l'eventuale layout del circuito sono stati raccolti da numerose fonti sul Web e non credo di poterli identificare in modo specifico. L'idea di inviare e-mail tramite Gmail è venuta da un istruibile e da altre fonti e il codice finale è un amalgama di quelle fonti. Ottenere il sonno profondo per lavorare mi ha portato su molti percorsi che spesso si sono rivelati infruttuosi. La cosa divertente è che, una volta che un percorso si rivela fruttuoso, smetti di cercare altri percorsi. Quindi dico grazie a tutti coloro che hanno contribuito al mio successo e sono ancora sconosciuti.

Ho avuto lo stesso problema a far funzionare il sensore PIR per attivare il sonno profondo ESP-01. Molte strade finché non ce n'era una che funzionava.

Inutile dire che c'erano alcuni ostacoli interessanti o forse più rilevanti, una migliore comprensione dell'elettronica di cui avevo bisogno. Continui a imparare finché qualcosa non funziona e poi non devi imparare più.

L'ESP-01 esegue il sonno profondo così come qualsiasi altro modulo ESP8266 purché non sia necessario il sonno programmato. Se si desidera che il modulo si riattivi dopo un determinato periodo di tempo trascorso, ESP-01 non è il modulo da utilizzare. Ma non è quello che volevo. Il tempo trascorso è inutile quando si utilizza un PIR. Volevo che l'ESP-01 si riattivasse solo quando veniva attivato dal movimento rilevato dal PIR. Se non viene rilevato alcun movimento per ore o giorni, l'ESP-01 rimane inattivo utilizzando una carica minima della batteria.

Vedrai molti circuiti che utilizzano GPIO16 collegati al reset di ESP8266 perché GPIO16 è il segnale di riattivazione. Questo è vero, ma è il segnale di sveglia dal sonno programmato. Possiamo ignorare questo PIN, il che è positivo perché non è disponibile su ESP-01.

Fondamentalmente, tutto ciò di cui abbiamo bisogno è ottenere il segnale dal PIR per attivare il pin di ripristino ESP-01. La prima difficoltà che indovinerai è che il ripristino viene attivato su un segnale BASSO e il PIR invia un segnale ALTO quando viene attivato. Anche il ripristino deve essere ALTO o mobile all'avvio. Quindi, per farla breve, dopo aver provato alcuni circuiti diversi, ho deciso di utilizzare un transistor NPN con un resistore di pull-up per mantenere ALTO il pin RESET durante l'avvio. L'uscita dal PIR è minima ma fornisce una corrente di base sufficiente per accendere il transistor.

Come vedrai nello schema del circuito qui sotto, l'ESP-01 è stato svegliato dal sonno profondo ogni volta che il PIR ha rilevato un movimento.

Ma c'era un altro problema. Il ripristino dell'ESP-01 è avvenuto solo dopo che il PIR ha smesso di rilevare il movimento ed è tornato a un segnale basso spegnendo il transistor e riportando il pin di ripristino su ALTO a causa del resistore di pullup. Ciò significherebbe che l'e-mail non verrebbe inviata, né il cicalino verrebbe attivato fino a DOPO che il PIR non smette di rilevare il movimento. Volevo che il grilletto avvenisse non appena veniva rilevato un movimento.

Quello che ho determinato da questo comportamento è che l'ESP-01 si attiva effettivamente sul fronte di salita del segnale. Tenendo il pin di ripristino a terra non si attiva effettivamente l'ESP-01 dal sonno profondo, ma nel momento in cui la tensione sale al segnale ALTO, si verifica il ripristino.

La mia risposta molto semplice a questo comportamento è stata di aggiungere un condensatore alla linea tra l'uscita PIR e la base del transistor. Ciò ha causato l'accensione del transistor solo mentre il condensatore si stava caricando. Una volta caricato, non c'era più corrente e il transistor si è spento. Il resistore da 5k consente alla corrente di drenare a terra. L'ho testato con un LED al posto dell'ESP-01 e ho potuto vedere il LED lampeggiare per una frazione di secondo prima di spegnersi. Questo piccolo impulso è stato sufficiente per mettere momentaneamente a terra il pin di ripristino e abbastanza a lungo da attivare il ripristino dal sonno profondo.

Passaggio 1: modulo di sonno profondo ESP-01

Modulo di sonno profondo ESP-01
Modulo di sonno profondo ESP-01
Modulo di sonno profondo ESP-01
Modulo di sonno profondo ESP-01

Il modulo Deep Sleep utilizza due tensioni di lavoro. Il 5v+ casuale del pacco batteria per il PIR e anche una scheda di regolazione da 3,3 volt per ESP-01. Incorporo anche un diodo nel circuito per prevenire le parti danneggiate da tensioni inverse. Questo utilizza un po' di energia in più e riduce la tensione del pacco batteria di 0,7 volt. Il diodo può essere lasciato fuori dal circuito se si è sicuri di non invertire mai i cavi del pacco batteria. Per comodità viene aggiunto anche un interruttore.

Questo modulo è un aggiornamento minore al mio layout di sonno non profondo originale. Nella configurazione non deep sleep, il PIR è collegato direttamente al pin RX dell'ESP-01. Sto usando il pin RX dell'ESP-01 come pin di input per il PIR per alcuni motivi. GPIO0 non ha funzionato perché all'avvio il PIN di uscita PIR sarebbe BASSO causando l'ingresso in modalità flash dell'ESP-01. Non ho usato GPIO2 perché non potevo usare il LED integrato per il feedback visivo. I pin RX e TX sono spesso descritti come pin IO extra, ma la mia esperienza è che RX è un pin INPUT extra e TX è un pin OUTPUT extra.

Nella configurazione Deep Sleep, la connessione RX non è strettamente necessaria. Lo sto usando solo per monitorare per quanto tempo il PIR viene attivato accendendo il LED mentre l'ingresso è ALTO. Come accennato in precedenza, se si elimina la funzione loop e si utilizza solo la routine di configurazione, la connessione RX non è necessaria.

Ecco l'elenco delle parti per il modulo di sonno profondo ESP-01:

Scheda prototipo PCB da 1 - 5 x 7 cm

Connettore 1 - 2 pin

2 - 1 x 3 intestazioni femmina

1 - AMS1117 - Scheda del regolatore di tensione 3.3

1 - 1 x 3 perno intestazione maschio ad angolo retto

1 - 1 x 3 pin di intestazione presa femmina

1 - 1 x 4 pin di intestazione presa femmina

1 - 2 x 4 testata femmina

1 - condensatore 1uf

1 - Sensore di movimento PIR HC-SR501

1 - Transistor 2N2222

1 - Resistenza 10k

1 - Resistenza 4.7k

1 - Resistenza 1k

1 - Diodo 1N4148

1 - interruttore SS12D00G4 SPDT

1 - ESP-01

1 - Pacco batteria 4AA

Si prega di notare che nel video il circuito utilizza un adattatore per breadboard ESP-01 invece dell'intestazione 2 x 4. Sebbene questo adattatore sia più facile da saldare, l'intestazione 2 x 4 funziona bene e in realtà si adatta meglio.

Passaggio 2: codice di sonno profondo ESP-01

Il codice Deep Sleep svolge due funzioni. Invia un messaggio di posta elettronica (tramite Gmail come impostazione predefinita) e invia una richiesta web http al modulo cicalino ESP-01 associato per attivare il cicalino.

Quando attivato, questo modulo fornisce due opzioni di notifica e può essere particolarmente utile quando non si presta attenzione ai messaggi di posta elettronica.

Dovrai aggiornare sei righe di codice con i tuoi valori specifici per far funzionare lo schizzo:

const char* ssid = "xxxxx"; // Il tuo SSIDconst WiFi char* password = "xxxxx"; // La tua password WiFi String Senders_Login = "xxxxx"; // login del tuo provider di posta elettronica String Senders_Password = "xxxxx"; // la password del tuo provider di posta elettronica

A = "xxxxxx"; Da = "xxxxxx"; // Gmail generalmente preferisce che sia uguale a Senders_Login e può sostituirlo

Ho scoperto che il modulo di sonno profondo funziona in modo imprevedibile quando il sensore PIR è stato impostato su un valore inferiore a 10 secondi per la durata dell'evento di attivazione. Ho impostato il mio a 20 secondi. Ciò si è dimostrato molto affidabile, ma significa anche che gli eventi di attivazione potrebbero verificarsi con quella frequenza.

Ho anche aggiunto il codice alla funzione loop per mantenere acceso il led ESP-01 finché il PIR sta ancora rilevando il movimento. Tutto il codice nella funzione loop può essere rimosso e la chiamata al deep sleep spostata alla fine della funzione di configurazione.

Uso la funzione di lampeggio per un indicatore visivo di attività con il modulo ESP-01.

Sebbene abbia utilizzato e testato la connettività con Gmail, funzionano anche altri provider di posta elettronica. ne ho provati un paio. In effetti, ho trovato Gmail più problematico. Gmail richiede che il tuo account sia configurato per l'accesso da parte di app meno sicure. Questa impostazione dell'account è DISATTIVATA per impostazione predefinita, quindi assicurati di trovarla e modificarla in meno sicura. Gmail NON funzionerà altrimenti.

Se si sceglie di avere più di un modulo buzzer basta aggiungere chiamate extra del client http (ripetere le tre righe di codice ma cambiare l'indirizzo ip utilizzato e definire anche la variabile httpCode come int una sola volta!

Notare che l'indirizzo IP del buzzer è codificato in questo modulo. Non è necessario utilizzare l'indirizzo IP che ho scelto, ma è necessario abbinare l'indirizzo IP della chiamata Web in questo modulo con l'indirizzo IP della configurazione del server Web nel modulo successivo.

Passaggio 3: modulo cicalino ESP-01

Modulo cicalino ESP-01
Modulo cicalino ESP-01
Modulo cicalino ESP-01
Modulo cicalino ESP-01
Modulo cicalino ESP-01
Modulo cicalino ESP-01

Il modulo buzzer ha una configurazione piuttosto semplice. Utilizza un connettore USB invece di un pacco batteria perché non credo che questo modulo sia adatto per un pacco batteria. Deve rimanere sempre acceso e connesso alla rete/wifi perché non sa mai quando verrà effettuata una richiesta web. Ciò richiede una potenza più continua di quella per cui sono utili i pacchi batteria.

I moduli buzzer possono essere posizionati comodamente in più posizioni fornendo la notifica di un evento di attivazione del sensore di movimento, non importa dove ti trovi!

Il cicalino è collegato al connettore USB da 5 V e c'è un'altra scheda di regolazione da 3,3 V che fornisce alimentazione all'ESP-01.

Il modulo buzzer funzionerà utilizzando TX, GPIO0 o GPIO2 per l'uscita. Nella mia configurazione sto usando GPIO0. (Nella foto del modulo il cavo è collegato a GPIO2 ma da allora l'ho spostato.) Mentre GPIO0 non ha funzionato per il modulo di sospensione profonda (come INPUT) funziona bene con questo layout come OUTPUT. Non viene tirato a terra all'avvio, il che causerà problemi. Ho usato GPIO2 ma poi non ho potuto usare il LED a bordo per alcun feedback, ma usando GPIO0 per OUTPUT posso usare il LED a bordo.

Ho provato a utilizzare un transistor NPN per alimentare il cicalino nel circuito quando ESP-01 ha messo un segnale ALTO sul pin GPIO0 ma i risultati erano terribilmente incoerenti. Il cicalino sembrava voler suonare in ogni momento, anche con pochissima potenza. Quindi ho usato un MOSFET a canale N (2n7000) e il risultato è stato eccezionale. Il pin IO pilota il Gate come richiesto.

Mentre abbiamo solo bisogno di due pin dal connettore USB Vcc(+) e Gnd(-), io uso un'intestazione a 5 pin per collegarmi alla scheda PCB per una maggiore stabilità e per la saldatura prima di collegare l'USB al regolatore. La mia scheda del regolatore da 3,3 V è arrivata con i pin preinstallati e nella mia mente capovolta. Quindi, per inserire il regolatore nei pin dell'intestazione, puoi vedere che la scheda del circuito è nascosta, ma peggio ancora, vcc e gnd sul regolatore sono invertiti da vcc e gnd sul connettore USB. Quindi i fili si incrociano.

Si noti inoltre che l'alimentazione + per il buzzer attivo proviene dai 5v dell'USB. Inoltre, un connettore femmina a 4 pin funziona bene con il posizionamento dei pin del cicalino.

Elenco delle parti del modulo cicalino ESP-01:

Scheda PCB 1 - 5 x 7

1 - Mini connettore USB con connettori a pin (7 pin)

2 - 1 x 3 intestazioni femmina

1 - Scheda regolatore di tensione AMS1117-3,3 v

1 - 2 x 4 testata femmina

2 - 1 x 4 connettori femmina femmina

1 - MOSFET a canale N 2N7000

Resistore da 1 - 10 ohm

1 - Cicalino attivo 5v

Passaggio 4: codice modulo cicalino ESP-01

Il modulo cicalino funge da semplice server web ESP-01. Risponde con un semplice messaggio a una richiesta di root e quando riceve la richiesta di buzz, attiverà il buzzer. GPIO0 viene utilizzato per il pin GPIO per il segnale del cicalino.

Si noti che ESP-01 è configurato con un indirizzo IP codificato. Ciò è necessario affinché il modulo Deep Sleep sia accoppiato all'indirizzo del cicalino.

Come il modulo precedente, dovrai aggiornare due righe di codice con i tuoi valori specifici:

//SSID e password del tuo router WiFiconst char* ssid = "xxxxxxx";

const char* password = "xxxxxxxx";

Se hai creato più moduli buzzer, ognuno dovrebbe essere caricato con il proprio indirizzo IP univoco.

Puoi anche aggiungere diversi metodi di ronzio che producono diverse melodie di cicalino. Ad esempio, se hai un sensore PIR alla porta anteriore e uno alla porta sul retro, ciascuno di essi può effettuare una richiesta web a ciascuno dei tuoi moduli buzzer, ma un sensore potrebbe avere uno schizzo che chiama buzz e l'altro schizzo può chiamare buzz2 in modo che tu possa capire dal suono quale sensore è stato attivato. E così via e così via! La funzione buzz2 non esiste ma basta copiare la funzione buzz e modificare i valori di ritardo.

Per il server web dovresti solo aggiungere una riga di codice come questa:

server.on("/buzz2", buzz2);

Passaggio 5: considerazioni finali

Questo è il mio primo istruibile, quindi potrei aver perso alcune cose pratiche che avrei dovuto includere. La scheda del regolatore AMS1117-3.3 che ho utilizzato include un minuscolo led che si accende all'accensione. Per il modulo di sonno profondo non volevo che questo led si accendesse e scaricasse energia inutilmente. Quindi ho dissaldato quello che potevo su un lato del led sulla scheda e poi ho usato un taglierino per tagliare la linea di traccia. Questo è stato più facile di quanto pensassi e impedisce al LED di accendersi. Non sono stato in grado di determinare quale sia l'assorbimento di potenza quando l'ESP-01 è in modalità di sospensione profonda, ma potrei avere una risposta in poche settimane. Un mio collega stava eseguendo il sensore (non in modalità di sospensione profonda) e ha trovato le batterie scariche (5AA) in circa una settimana. Penso che questa configurazione dovrebbe dare un mese o anche di più. Vedremo.

Il modulo di sonno profondo costa circa $ 8 CDN in parti (batterie non incluse!) e il modulo cicalino $ 5.

Consigliato: