Sommario:

Sensore porta wireless - Potenza ultra bassa: 5 passaggi
Sensore porta wireless - Potenza ultra bassa: 5 passaggi

Video: Sensore porta wireless - Potenza ultra bassa: 5 passaggi

Video: Sensore porta wireless - Potenza ultra bassa: 5 passaggi
Video: Sensore Wireless a Vibrazione Power-VIB 868mhz 2024, Luglio
Anonim
Sensore porta wireless - Potenza ultra bassa
Sensore porta wireless - Potenza ultra bassa
Sensore porta wireless - Potenza ultra bassa
Sensore porta wireless - Potenza ultra bassa
Sensore porta wireless - Potenza ultra bassa
Sensore porta wireless - Potenza ultra bassa
Sensore porta wireless - Potenza ultra bassa
Sensore porta wireless - Potenza ultra bassa

L'ennesimo sensore porta!! Bene, la motivazione per me per creare questo sensore è stata che molti di quelli che ho visto su Internet avevano una limitazione o l'altra. Alcuni degli obiettivi del sensore per me sono:

1. Il sensore dovrebbe essere molto veloce, preferibilmente meno di 5 secondi

2. Il sensore dovrebbe funzionare con una batteria agli ioni di litio da 3,7 V poiché ne ho dozzine in giro

3. Il sensore dovrebbe funzionare per molti mesi con una singola carica della batteria. Dovrebbe consumare < 10uA in modalità di sospensione

4. Il sensore dovrebbe essere in grado di attivarsi per la trasmissione di dati critici come lo stato della batteria anche quando la porta non viene utilizzata per molto tempo.

5. Il sensore dovrebbe trasmettere i dati a un argomento MQTT quando la porta è aperta e quando la porta è chiusa

6. Il sensore dovrebbe consumare la stessa quantità di energia indipendentemente dallo stato della porta

Funzionamento del sensore:

Il sensore ha 2 controller principali. Il primo è il minuscolo microcontrollore ATiny 13A. Il secondo è l'ESP che di solito è in modalità di sospensione e si attiva solo quando l'ATiny lo abilita. L'intero circuito può essere realizzato anche dal solo ESP utilizzandolo in modalità sleep ma la corrente che consuma è di gran lunga maggiore di quella necessaria per far durare una batteria per mesi quindi l'ATTiny viene in soccorso. Ha solo lo scopo di svegliarsi ogni N secondi, cercare un evento porta o un evento di controllo dello stato, se ce n'è uno, tiene il pin CH_PD dell'ESP su ALTO e invia il segnale appropriato del tipo di evento all'ESP. Il suo ruolo finisce qui.

L'ESP quindi prende il sopravvento, legge il tipo di segnale, si connette a WiFi/MQTT, pubblica i messaggi richiesti compreso il livello della batteria e quindi si spegne riportando il pin EN su LOW.

Usando questi chip in questo modo sfrutto la bassa corrente di sospensione dell'ATtiny e la corrente di riposo zero dell'ESP quando il chip è disabilitato tramite il pin CH_PD.

Forniture

Pre-richiesta:

- Conoscenza della programmazione di un ATTiny & ESP 01

- Conoscenza dei componenti di saldatura su un PCB

ESP-01 (o qualsiasi ESP)

ATTiny 13A - AVR

LDO 7333-A - Regolatore di tensione Low Dropout

Resistori - 1K, 10K, 3K3

Condensatori: 100uF, 0.1 uF

Interruttore a pulsante, micro interruttore ON/OFF - (entrambi opzionali)

Diodo - IN4148 (o qualsiasi equivalente)

Batteria agli ioni di litio

Interruttore Reed

Un caso per ospitare tutto

Saldatura, PCB ecc

Passaggio 1: schemi e codice sorgente

Schemi e codice sorgente
Schemi e codice sorgente

Lo schema è come mostrato nello schema allegato.

Ho incluso un MOSFET a canale P per la protezione dall'inversione di polarità. Se non ne hai bisogno, puoi ometterlo. Qualsiasi MOSFET a canale P con Rds ON basso andrà bene.

Al momento l'ESP non ha la capacità di OTA, ma questo è per miglioramenti futuri.

Codice sorgente smart-door-sensor

Passaggio 2: funzionamento del circuito

ATTiny Flusso di lavoro

La magia qui avviene nel modo in cui ATTiny monitora la posizione dell'interruttore della porta.

L'opzione normale sarebbe quella di collegare un resistore di pull-up all'interruttore e continuare a monitorarlo. Questo ha lo svantaggio della corrente costante consumata dal resistore di pull-up. Il modo in cui questo è stato evitato qui è che ho usato due pin per monitorare l'interruttore anziché uno. Ho usato PB3 e PB4 qui. PB3 è definito come input e PB4 come output con un INPUT_PULLUP interno su PB3. Normalmente PB4 è tenuto ALTO quando ATtiny è in modalità di sospensione. Ciò garantisce che non vi sia alcun flusso di corrente attraverso il resistore di pull-up di ingresso indipendentemente dalla posizione dell'interruttore reed. cioè. Se l'interruttore è chiuso, sia PB3 che PB4 sono ALTI e quindi nessuna corrente scorre tra di loro. Se l'interruttore è aperto, non c'è percorso tra di loro e quindi la corrente è zero. Quando l'ATtiny si sveglia scrive un LOW su PB4 e poi controlla lo stato di PB3. Se PB3 è ALTO, l'interruttore reed è APERTO altrimenti è CHIUSO. Quindi riscrive un HIGH su PB4.

La comunicazione tra ATtiny ed ESP avviene tramite due pin PB1 / PB2 collegati a Tx/RX di ESP. Ho definito il segnale come

PB1 PB2 ====== Tx Rx

0 0 ====== WAKE_UP (controllo dello stato di salute)

0 1 ====== SENSOR_OPEN

1 0 ====== SENSORE_CHIUSO

1 1 ====== NON UTILIZZATO

Oltre a inviare il segnale all'ESP, invia anche un impulso HIGH su PB0 che è collegato al pin CH_PD dell'ESP. Questo riattiva l'ESP. La prima cosa che ESP fa per mantenere GPIO0 HIGH che è collegato a CH_PD garantendo così i suoi poteri anche se l'ATTiny toglie il PB0 HIGH. Il controllo ora è con l'ESP per determinare quando vuole spegnere.

Quindi si connette a WiFi, MQTT, pubblica il messaggio e si spegne scrivendo LOW su GPIO0.

ESP 01 Flusso di lavoro:

Il flusso ESP è diretto. Si sveglia e legge i valori dei pin Tx/Rx per determinare quale tipo di messaggio deve essere pubblicato. Si connette a WiFi e MQTT, pubblica il messaggio e si spegne.

Prima di spegnere, controlla nuovamente i valori dei pin di input per vedere se sono cambiati dall'ultima lettura. Questo per occuparsi di una rapida apertura e chiusura della porta. Se non hai questo controllo, in alcuni casi potresti perdere la chiusura della porta se viene chiusa entro 5-6 secondi dall'apertura. Uno scenario pratico della porta che viene aperta e chiusa entro 2 secondi circa è ben catturato dal ciclo while che continua a inviare i messaggi finché lo stato attuale della porta è diverso da quello precedente. L'unico scenario che potrebbe mancare per registrare tutti gli eventi di apertura/chiusura è quando la porta viene aperta/chiusa ripetutamente entro una finestra di 4-5 secondi, il che è un caso molto improbabile, probabilmente un caso di un bambino che gioca con la porta.

Passaggio 3: controllo dello stato di salute

Avevo anche bisogno di un modo per avere un messaggio di controllo dello stato dall'ESP in cui invia anche il livello della batteria dell'ESP per garantire che il sensore funzioni correttamente senza ispezione manuale. Per questo l'ATTiny invia un segnale WAKE_UP ogni 12 ore. Può essere configurato tramite la variabile WAKEUP_COUNT nel codice ATtiny. Questo è molto utile per porte o finestre che vengono aperte raramente e quindi potresti non sapere se qualcosa non va nel sensore o nella sua batteria.

Nel caso in cui non sia necessaria la funzionalità di controllo dello stato, l'intero concetto di utilizzo di ATTiny non è necessario. In tal caso puoi trovare altri progetti creati da persone in cui l'alimentazione all'ESP viene alimentata tramite un MOSFET e quindi puoi ottenere un assorbimento di corrente zero quando la porta non viene azionata. Ci sono altre cose di cui occuparsi come l'assorbimento di corrente per essere lo stesso in posizione porta aperta e porta chiusa - per questo da qualche parte ho visto un progetto che utilizzava un interruttore reed a 3 stati invece del solito stato 2.

Passaggio 4: misurazioni della potenza e durata della batteria

Ho misurato il consumo di corrente del circuito e ci vogliono ~30uA quando si dorme e in giro. Seguendo le schede tecniche di ATTiny, dovrebbe essere circa 1-4 uA per l'intero circuito inclusa la corrente di riposo dell'LDO, ma poi le mie misurazioni mostrano 30. Il MOSFET e l'LDO consumano corrente insignificante.

Quindi una batteria da 800 mAH dovrebbe durare a lungo. Non ho statistiche esatte ma lo sto usando su 2 delle mie porte da più di un anno e ogni cella 18650 con circa 800 mAH rimasta in esse dura circa 5-6 mesi sulla mia porta principale che si apre e si chiude a almeno 30 volte al giorno. Quello sulla porta del tetto che si apre solo poche volte in una settimana, dura 7-8 mesi.

Passaggio 5: miglioramenti futuri

1. L'ESP non riconosce la consegna del messaggio MQTT. Il programma può essere migliorato iscrivendosi all'argomento pubblica il messaggio per confermare la consegna oppure è possibile utilizzare una libreria Async MQTT per inviare un messaggio con QoS 1.

2. Aggiornamento OTA: il codice ESP può essere modificato per leggere un argomento MQTT per un aggiornamento e quindi entrare in modalità OTA per ricevere un file.

3. ESP01 può essere sostituito con ESP-12 per accedere a più PIN di input e quindi collegare più sensori allo stesso. In tal caso la comunicazione tramite il metodo a 2 bit non è possibile. Questo può quindi essere migliorato per implementare la comunicazione I2C tra ATtiny ed ESP. Questo è un po 'complicato ma praticabile. Lo faccio funzionare in un'altra configurazione in cui un ATTiny invia i valori dell'encoder rotativo all'ESP sulla linea I2C.

4. Il circuito di corrente monitora il Vcc interno dell'ESP. Se usiamo ESP12, questo può essere modificato per leggere il livello effettivo della batteria tramite il pin ADC.

5. In futuro posterò anche una modifica a questo che può essere utilizzato come sensore autonomo senza la necessità di un MQTT o di qualsiasi sistema di automazione domestica. Il sensore funzionerà autonomamente e può effettuare una telefonata quando viene attivato - ovviamente ha bisogno di una connessione Internet per questo.

6. E l'elenco potrebbe continuare…

7. Protezione inversa della batteria - FATTO (le immagini effettive del dispositivo sono vecchie e quindi non riflettono il MOSFET)

Consigliato: