Taula de continguts:

Sensor de nivell del col·lector d'aigua alimentat per bateria: 7 passos (amb imatges)
Sensor de nivell del col·lector d'aigua alimentat per bateria: 7 passos (amb imatges)

Vídeo: Sensor de nivell del col·lector d'aigua alimentat per bateria: 7 passos (amb imatges)

Vídeo: Sensor de nivell del col·lector d'aigua alimentat per bateria: 7 passos (amb imatges)
Vídeo: Total Money Makeover на португальском языке - полная аудиокнига (русские субтитры) 2024, De novembre
Anonim
Sensor de nivell del col·lector d'aigua alimentat per bateria
Sensor de nivell del col·lector d'aigua alimentat per bateria
Sensor de nivell del col·lector d'aigua alimentat per bateria
Sensor de nivell del col·lector d'aigua alimentat per bateria

La nostra casa té un dipòsit d’aigua alimentat per la pluja que cau al terrat i s’utilitza per al vàter, la rentadora i per regar les plantes del jardí. Durant els darrers tres anys, els estius van ser molt secs, de manera que vam vigilar el nivell de l’aigua al dipòsit. Fins ara hem utilitzat un pal de fusta que hem posat al dipòsit i hem marcat el nivell. Però segur que s’ha de poder millorar en això.

Aquí és on entra aquest projecte. La idea és connectar un sensor de distància ultrasònic a la part superior del tanc. Aquest sensor funciona com un sonar que emet ones sonores, que després són reflectides per la superfície de l’aigua. A partir del temps que triga les ones a tornar i la velocitat del so, podeu calcular la distància a la superfície de l’aigua i determinar la plenitud del dipòsit.

Com que no tinc una connexió de xarxa a prop del tanc, és fonamental que el dispositiu complet funcioni amb bateries. Això significa que havia de ser conscient del consum d'energia de totes les peces. Per enviar les dades de tornada, vaig decidir utilitzar el WiFi integrat d’un microxip ESP8266. Tot i que el Wifi té molta energia, té un avantatge respecte a un altre tipus de connexió de ràdio: podeu connectar-vos directament al router sense fils de la vostra casa sense haver de construir cap altre dispositiu que actuï com a relé.

Per estalviar energia, posaré l’ESP8266 en son profund la major part del temps i faré una mesura cada hora. Amb el propòsit de seguir el nivell de l’aigua, això és suficient. Les dades s’enviaran a ThingSpeak i es podran llegir en un telèfon intel·ligent a través d’una aplicació.

Un detall més! La velocitat del so, essencial per a la mesura de la distància, depèn de la temperatura i en menor mesura de la humitat. Per a una mesura exterior precisa durant les estacions, llançarem un sensor BME280, que mesura la temperatura, la humitat i la pressió. Com a avantatge, això fa que el sensor de nivell d’aigua també faci una mini estació meteorològica.

Parts:

  • 1x ESP8266 ESP-12F.
  • 1x placa adaptadora ESP-12F.
  • 1x FT232RL FTDI: adaptador USB a sèrie.
  • 1x HC-SR04-P: mòdul de mesura de distància per ultrasons. Tingueu en compte que la P és important, ja que és la versió que té un voltatge de funcionament mínim baix de 3V.
  • 1 versió BME280 3.3V: sensor de temperatura, pressió i humitat.
  • 1x IRL2203N: transistor MOSFET de canal n.
  • 1x versió MCP1700-3302E 3.3V: regulador de tensió.
  • 3 bateries recarregables AA, p. Ex. 2600mAh.
  • 1x suport per a 3 bateries.
  • 1x tauleta de pa.
  • Resistències: 1x 470K, 1x 100K, 4x 10K.
  • Condensadors: 2x ceràmica 1uF.
  • Interruptor de commutació 3x.
  • Filferros de taulers de pa en forma d’U.
  • Filferros de pont.
  • Envàs de sopa de plàstic 1l.
  • Anell de fixació per al contenidor.

Vaig posar el codi disponible a GitHub.

Pas 1: conèixer el sensor de distància ultrasònic

Conèixer el sensor de distància ultrasònic
Conèixer el sensor de distància ultrasònic
Conèixer el sensor de distància ultrasònic
Conèixer el sensor de distància ultrasònic

Mesurarem la distància a la superfície de l’aigua amb un sensor d’ultrasons, el HC-SR04-P. Igual que un ratpenat, aquest sensor utilitza el sonar: envia un pols de so amb una freqüència massa alta per a l’oïda humana, per tant ultrasònic, i espera que toqui un objecte, es reflecteixi i torni. La distància es pot calcular a partir del temps que triga a rebre el ressò i la velocitat del so.

Concretament, si el pin Trig s’eleva durant almenys 10 μs, el sensor envia una ràfega de 8 impulsos amb una freqüència de 40 Hz. La resposta s'obté al pin Echo en forma de pols amb una durada igual al temps entre l'enviament i la recepció del pols ultrasònic. Aleshores, hem de dividir per 2, ja que el pols ultrasònic va endavant i enrere i necessitem el temps de trajecte unidireccional i es multiplica per la velocitat del so, que és d’uns 340 m / s.

Però espereu un minut! De fet, la velocitat del so depèn de la temperatura i, en menor mesura, de la humitat. Estic prenent nit o és rellevant? Mitjançant una eina de càlcul trobem que a l’hivern (amb -5 ° C) podríem tenir 328,5 m / s i a l’estiu (amb 25 ° C) 347,1 m / s. Suposem, doncs, que trobem un temps de trajecte de 3 ms. A l’hivern, això significaria 98,55 cm i a l’estiu 104,13 cm. Això és tota una diferència! Per obtenir una precisió suficient al llarg de les estacions i fins i tot de dia i de nit, hem d’afegir un termòmetre a la nostra configuració. Vaig decidir incloure el BME280, que mesura la temperatura, la humitat i la pressió. Al codi que he utilitzat a la funció speedOfSound, una fórmula que calcula la velocitat del so en funció dels tres paràmetres, tot i que la temperatura és realment el factor més important. La humitat encara té un efecte menor, però l’impacte de la pressió és insignificant. Podríem utilitzar una fórmula més senzilla tenint en compte només la temperatura que vaig implementar a speedOfSoundSimple.

Hi ha un altre punt important a l'HC-SR04. Hi ha dues versions disponibles: la versió estàndard funciona a 5V, mentre que l'HC-SR04-P pot funcionar a una gamma de voltatges de 3V a 5V. Atès que les 3 bateries recarregables AA proporcionen al voltant de 3x1,25 V = 3,75 V, és important obtenir la versió P. És possible que alguns venedors enviïn un error. Doncs mireu les imatges si en compreu una. Les dues versions tenen un aspecte diferent, tant a la part posterior com a la frontal, tal com s’explica en aquesta pàgina. A la part posterior de la versió P, els tres xips són horitzontals, mentre que a la versió estàndard, un és vertical. A la part frontal, la versió estàndard té un component plata addicional.

Al circuit electrònic, utilitzarem un transistor com a interruptor per apagar l’alimentació del sensor d’ultrasons quan la nostra configuració dorm profundament per estalviar vida de la bateria. En cas contrari, encara consumiria uns 2 mA. El BME280 en canvi només consumeix uns 5 μ quan està inactiu, de manera que no cal apagar-lo amb el transistor.

Pas 2: Elecció de la placa ESP8266

Elecció del tauler ESP8266
Elecció del tauler ESP8266

Per fer funcionar el sensor el màxim temps possible amb una bateria, hem d’estalviar en el consum d’energia. Tot i que el Wifi de l’ESP8266 proporciona una manera molt còmoda de connectar el sensor al núvol, també té molta energia. En funcionament, l'ESP8266 consumeix uns 80 mA. Per tant, amb bateries de 2600 mAh només podríem fer funcionar el nostre dispositiu com a màxim 32 hores abans que estiguin buides. A la pràctica, serà menor ja que no podrem utilitzar la capacitat completa de 2600 mAh abans que la tensió baixi a un nivell massa baix.

Per sort, l'ESP8266 també té un mode de son profund, en què gairebé tot està apagat. Per tant, el pla és posar l’ESP8266 en son profund la major part del temps i despertar-lo amb tanta freqüència per fer una mesura i enviar les dades a través de Wifi a ThingSpeak. Segons aquesta pàgina, el temps màxim de son profund solia ser d’uns 71 minuts, però des de l’ESP8266 Arduino core 2.4.1 s’ha augmentat fins a aproximadament 3,5 hores. Al meu codi em vaig instal·lar durant una hora.

Primer vaig provar la convenient placa de desenvolupament de NodeMCU, però, en somni profund, encara consumia uns 9 mA, cosa que ens proporciona un màxim de 12 dies de son profund pur sense ni tan sols considerar els intervals de despertador. Un culpable important és el regulador de voltatge AMS1117, que utilitza energia fins i tot si intenteu passar-lo connectant la bateria directament al pin de 3,3 V. En aquesta pàgina s’explica com treure el regulador de voltatge i el USB UART. Tot i això, mai no vaig aconseguir fer-ho sense destruir el meu tauler. A més, després d’eliminar el USB UART ja no es pot connectar a l’ESP8266 per esbrinar què ha fallat.

La majoria de les plaques de desenvolupament ESP8266 semblen utilitzar el malgastador regulador de voltatge AMS1117. Una excepció és el WEMOS D1 mini (imatge a l'esquerra) que ve amb el més econòmic ME6211. De fet, vaig trobar que el WEMOS D1 mini utilitza uns 150 μA en son profund, cosa que s’assembla més a ell. La majoria es deu probablement a la connexió USB UART. Amb aquest tauler, heu de soldar vosaltres mateixos les capçaleres dels pins.

Tot i això, podem fer-ho molt millor utilitzant una placa d’ossos nus com l’ESP-12F (imatge de la dreta), que no té un UART USB ni un regulador de voltatge. Alimentant el pin de 3,3 V, vaig trobar un consum de son profund de només 22 μA.

Però per aconseguir que l’ESP-12F funcioni, prepareu-vos per soldar i programar-lo una mica més sense problemes. A més, tret que les bateries proporcionin directament el voltatge correcte, que oscil·la entre 3V i 3,6V, hem de proporcionar el nostre propi regulador de voltatge. A la pràctica, resulta difícil trobar un sistema de bateria que proporcioni una tensió en aquest rang durant el cicle complet de descàrrega. Recordeu que també hem d’alimentar el sensor HC-SR04-P, que teòricament pot funcionar amb una tensió de fins a 3 V, però que funciona amb més precisió si la tensió és més alta. A més, en el meu diagrama, l'HC-SR04-P està activat per un transistor, que indueix una petita caiguda de tensió addicional. Utilitzarem el regulador de tensió MCP1700-3302E. La tensió màxima d’entrada és de 6 V, de manera que l’alimentem amb fins a 4 bateries AA. Vaig decidir utilitzar 3 piles AA.

Pas 3: creeu un canal ThingSpeak

Utilitzarem ThingSpeak, un servei de núvol IoT, per emmagatzemar les nostres dades. Aneu a https://thingspeak.com/ i creeu un compte. Un cop hàgiu iniciat la sessió, feu clic al botó Nou canal per crear un canal. A la configuració del canal, empleneu el nom i la descripció que vulgueu. A continuació, anomenem els camps del canal i els activem fent clic a les caselles de selecció de la dreta. Si feu servir el meu codi sense canvis, els camps són els següents:

  • Camp 1: nivell de l'aigua (cm)
  • Camp 2: nivell de bateria (V)
  • Camp 3: temperatura (° C)
  • Camp 4: humitat (%)
  • Camp 5: pressió (Pa)

Per a futures referències, escriviu l'identificador de canal, la clau API de lectura i la clau API API, que es pot trobar a les claus API del menú.

Podeu llegir les dades de ThingSpeak al telèfon intel·ligent mitjançant una aplicació. Al meu telèfon Android faig servir el widget IoT ThingSpeak Monitor. Heu de configurar-lo amb l'identificador de canal i la clau API de lectura.

Pas 4: Com programar l'ESP-12F

Com programar l’ESP-12F
Com programar l’ESP-12F
Com programar l’ESP-12F
Com programar l’ESP-12F

Necessitem una placa d’os nus per estalviar vida útil de la bateria, però l’inconvenient és que és una mica més difícil de programar que una placa de desenvolupament amb USB UART incorporat.

Utilitzarem l’IDE Arduino. Hi ha altres instruccions que expliquen com utilitzar-lo, així que seré breu aquí. Els passos per preparar-lo per a l'ESP8266 són:

  • Descarregueu l'IDE Arduino.
  • Instal·leu suport per a la placa ESP8266. Al menú Fitxer - Preferències - Configuració, afegiu l'URL https://arduino.esp8266.com/stable/package_esp8266com_index.json a URL del gestor de taules addicionals. A continuació, al menú Eines - Tauler: el gestor de taules instal·la la comunitat esp8266 per esp8266.
  • Seleccioneu com a tauler: mòdul ESP8266 genèric.

Per manejar l’ESP-12F he utilitzat una placa adaptadora, disponible habitualment a les botigues en línia. Vaig soldar el xip al plat i després vaig soldar les capçaleres al plat. Només aleshores vaig descobrir que la placa adaptadora és massa ampla per a una taula de pa estàndard. No deixa passadors lliures al costat per fer les vostres connexions.

La solució que vaig escollir és utilitzar cables en forma d’U i connectar-los com a la imatge de la dreta abans de posar l’ESP8266 amb la placa adaptadora a la placa. Així doncs, GND i VCC estan connectats als rails de la taula de treball i els pins restants estan disponibles més avall de la taula de treball. El desavantatge és que la vostra taula de treball estarà força plena de cables un cop hàgiu acabat el circuit complet. Una altra solució és encaixar dues taules de prova juntes, tal com es mostra en aquest vídeo.

A continuació, per programar l’ESP-12F a través del port USB de l’ordinador necessitem un adaptador USB a sèrie. He utilitzat el programador FT232RL FTDI. El programador té un pont per seleccionar entre 3,3V o 5V. S'hauria de posar a 3,3 V per a l'ESP8266. No ho oblideu, ja que 5V us poden fregir el xip. La instal·lació dels controladors hauria de ser automàtica, però si la programació no funciona, podeu provar d’instal·lar-los manualment des d’aquesta pàgina.

L'ESP8266 té un mode de programació per carregar el firmware nou al flash i un mode de flash per executar el firmware actual des de la memòria flash. Per triar entre aquests modes, alguns pins han de tenir un valor determinat en arrencar:

  • Programació: GPIO0: baixa, CH-PD: alta, GPIO2: alta, GPIO15: baixa
  • Flash: GPIO0: alt, CH-PD: alt, GPIO2: alt, GPIO15: baix

La placa adaptadora ja s’encarrega d’estirar CH-PD i d’estirar GPIO15 amb resistències de 10K.

Així, doncs, al nostre circuit electrònic encara hem d’extreure GPIO2. També oferim un commutador per posar l’ESP8266 en mode de programació o en flash i un commutador per reiniciar-lo, que es fa connectant RST a terra. A més, assegureu-vos de connectar el pin TX del FT232RL al pin RXD de l’ESP8266 i viceversa.

La seqüència de programació és la següent:

  • Establiu GPIO2 a mínim tancant el commutador de programació.
  • Restableix l’ESP8266 tancant i tornant a obrir l’interruptor de reinici. L'ESP8266 ara arrenca en mode de programació.
  • Establiu GPIO2 de nou obrint el commutador de programació.
  • Pengeu el nou firmware des de l'IDE Arduino.
  • Restableix l'ESP8266 de nou tancant i tornant a obrir l'interruptor de reinici. L'ESP8266 ara arrenca en mode flash i executa el nou firmware.

Ara podeu provar si la programació funciona carregant el famós esbós de Blink.

Si tot això funciona, almenys, els pins GND, VCC, GPIO2, RST, TXD i RXD estan soldats i connectats correctament. Quin alleujament! Abans de continuar, us recomanaria provar també els altres pins amb el multímetre. Jo mateix vaig tenir un problema amb un dels pins. Podeu fer servir aquest esbós, que estableix tots els passadors a l'altura un per un durant 5 segons i, posteriorment, posa l'ESP8266 en son profund durant 20 segons. Per permetre que l'ESP8266 es desperti després de dormir profundament, heu de connectar RST a GPIO16, que proporciona el senyal de vigília.

Pas 5: penjar l'esbós

He fet que el codi estigui disponible a GitHub, només és un fitxer: Level-Sensor-Deepsleep.ino. Només heu de descarregar-lo i obrir-lo a l'IDE Arduino. O bé podeu seleccionar Fitxer - Nou i simplement copiar / enganxar el codi.

Hi ha alguna informació que heu d’emplenar al principi del fitxer: el nom i la contrasenya de la WLAN a utilitzar, les dades IP estàtiques i l’identificador de canal i la clau API d’escriptura del canal ThingSpeak.

Seguint el consell d’aquest bloc, en lloc de DHCP on el router assigna dinàmicament una IP, fem servir una IP estàtica, on definim nosaltres mateixos l’adreça IP de l’ESP8266. Això resulta ser molt més ràpid, de manera que estalviem temps actiu i, per tant, energia de la bateria. Per tant, hem de proporcionar una adreça IP estàtica disponible, així com la IP del router (passarel·la), la màscara de subxarxa i un servidor DNS. Si no esteu segur de què heu d’emplenar, llegiu el manual del vostre encaminador sobre la configuració d’una IP estàtica. En un ordinador Windows connectat mitjançant Wifi al vostre encaminador, inicieu un intèrpret d'ordres (botó Windows-r, cmd) i introduïu ipconfig / all. Trobareu la major part de la informació que necessiteu a la secció Wi-Fi.

En examinar el codi, veieu que, a diferència d'altres codis Arduino, la major part de l'acció passa a la funció de configuració en lloc de la funció de bucle. Això es deu al fet que l’ESP8266 s’endorm profundament després d’acabar la funció de configuració (tret que hàgim començat en mode OTA). Després de despertar, és com un nou reinici i es torna a configurar.

A continuació, es mostren les característiques més destacades del codi:

  • Després del despertar, el codi estableix switchPin (GPIO15 per defecte) a alt. Això engega el transistor, que al seu torn encén el sensor HC-SR04-P. Abans d'anar a dormir profundament, torna a posar el passador al mínim, apagant el transistor i l'HC-SR04-P, assegurant-se que no consumeixi més preciosa bateria.
  • Si el modePIN (GPIO14 per defecte) és baix, el codi passa al mode OTA en lloc del mode de mesura. Amb OTA (actualització per antena) podem actualitzar el firmware mitjançant Wifi en lloc del port sèrie. En el nostre cas, això és bastant convenient, ja que no hem de connectar el serial a l'adaptador USB per a més actualitzacions. Només heu d’establir GPIO14 a mínim (amb el commutador OTA al circuit electrònic), restablir l’ESP8266 (amb el commutador de reinicialització) i hauria d’estar disponible a l’Arduino IDE per carregar-lo.
  • Al PIN analògic (A0) mesurem el voltatge de la bateria. Això ens permet apagar el nostre dispositiu, també conegut com a son profund permanent, si el voltatge és massa baix, per sota de la tensió mínima, per protegir les bateries de la sobrecàrrega. La mesura analògica no és molt precisa, fem mesures numBeasuresBattery (per defecte 10) i prenem la mitjana per millorar la precisió.
  • La mesura de distància del sensor HC-SR04-P es realitza amb la funció DistanceMeasurement. Per millorar la precisió, la mesura es repeteix numMeasuresDistance (per defecte 3) vegades.
  • Hi ha una funció per calcular la velocitat del so a partir de la mesura de temperatura, humitat i pressió mitjançant el sensor BME280. L'adreça I2C per defecte del BME280 és 0x76, però si no funciona, és possible que hàgiu de canviar-la a 0x77: bool bme280Started = bme280.begin (0x77);
  • Utilitzarem el BME280 en mode forçat, el que significa que fa una mesura i torna a dormir per estalviar energia.
  • Si configureu la capacitat (l), la distància total (cm) i l’àrea (m2), el codi calcula el volum restant del dipòsit d’aigua a partir de la mesura de la distància: doble volum restant = capacitat + 10,0 * (distànciaDistància completa) *; i pengeu-ho a ThingSpeak. Si manteniu els valors predeterminats, puja la distància a la superfície de l'aigua en cm.

Pas 6: Construir el circuit electrònic

Construint el circuit electrònic
Construint el circuit electrònic

A la part superior es mostra l’esquema del circuit electrònic. És bastant gran per a una placa, especialment amb la placa adaptadora de grans dimensions i el truc amb els cables en forma d’U. En algun moment, sens dubte, desitjaria haver utilitzat l’alternativa de connectar dues taules de suport, però al final ho vaig aconseguir.

Aquestes són les característiques importants del circuit:

  • Hi ha dos voltatges que tenen un paper important: el voltatge d’entrada de la bateria (al voltant de 3,75 V) i el 3,3 V que alimenta l’ESP8266 i el BME280. Vaig posar el 3,3V al carril esquerre del tauler i el 3,75V al carril dret. El regulador de voltatge converteix el 3,75V a 3,3V. Seguint les instruccions del full de dades, he afegit condensadors d'1 μF a l'entrada i sortida del regulador de tensió per augmentar l'estabilitat.
  • El GPIO15 de l’ESP8266 està connectat a la porta del transistor. Això permet a l'ESP8266 encendre el transistor i, per tant, el sensor d'ultrasons quan està actiu i apagar-lo quan dormi profundament.
  • GPIO14 està connectat a un commutador, el commutador OTA. El tancament del commutador dóna el senyal a l’ESP8266 que volem iniciar en mode OTA, és a dir, després de prémer (tancar i obrir) el commutador RESET i carregar un nou esbós per antena.
  • Els pins RST i GPIO2 es connecten com en el diagrama de programació. Ara, el pin RST també està connectat a GPIO16 per permetre que l’ESP8266 es desperti d’un son profund.
  • Els pins TRIG i ECHO del sensor d'ultrasons estan connectats a GPIO12 i GPIO13, mentre que els pins SCL i SDA del BME280 estan connectats a GPIO5 i GPIO4.
  • Finalment, el pin analògic ADC es fa mitjançant un divisor de tensió connectat a la tensió d’entrada. Això permet mesurar la tensió d’entrada per comprovar la càrrega de les bateries. El pin ADC pot mesurar tensions entre 0V i 1V. Per al divisor de tensió vam triar resistències de 100K i 470K. Això significa que la tensió al pin ADC ve donada per: V_ADC = 100K / (100K + 470K) V_in. Prenent V_ADC = 1V això significa que podem mesurar tensions d’entrada fins a V_in = 570/100 V_ADC = 5,7V. Pel que fa al consum d’energia, també hi ha alguna fuita de corrent a través del divisor de tensió. Amb V_in = 3,75V de les bateries trobem I_leak = 3,75V / 570K = 6,6 μA.

Fins i tot quan el circuit funciona amb bateries, és possible connectar l'USB a l'adaptador sèrie. Assegureu-vos de desconnectar VCC de l’adaptador i connectar GND, RX i TX tal com es mostra al diagrama de programació. Això permet obrir el monitor de sèrie a l'IDE d'Arduino per llegir els missatges de depuració i assegurar-se que tot funcioni com s'esperava.

Per al circuit complet, vaig mesurar un consum de corrent de 50 μA en son profund quan funcionava amb bateries. Això inclou l’ESP8266, el BME280, el sensor d’ultrasons (apagat pel transistor) i les fuites a través del divisor de tensió i potser altres fuites. Així que no està gens malament.

Vaig trobar que el temps actiu total és d’uns 7 segons, dels quals 4,25 segons per connectar-se a Wifi i 1,25 segons per enviar les dades a ThingSpeak. Així doncs, amb un corrent actiu de 80 mA vaig trobar 160 μAh per hora durant el temps actiu. Afegint 50 μAh per hora per a l’estat de son profund que tenim en total 210 μAh per hora. Això significa que les bateries de 2600 mAh duren teòricament 12.400 hores = 515 dies. Aquest és el màxim absolut si poguéssim utilitzar tota la capacitat de les bateries (cosa que no és així) i no hi hagi fuites que no hagi trobat amb les meves mesures actuals. Per tant, encara he de veure si realment això s’estén.

Pas 7: Acabar el sensor

Acabament del sensor
Acabament del sensor
Acabament del sensor
Acabament del sensor
Acabament del sensor
Acabament del sensor

Vaig posar el sensor en un recipient de plàstic d’1 litre, que solia contenir sopa. A la part inferior vaig fer dos forats per adaptar-se als "ulls" del sensor HC-SR04-P. A part dels forats, el contenidor ha de ser impermeable. Després s’uneix a la paret del dipòsit d’aigua amb un anell circular que normalment s’utilitza per a una canonada de drenatge d’aigua de pluja.

Diverteix-te amb el projecte!

Recomanat: