Sadržaj:

Senzor razine kolektora vode na baterije: 7 koraka (sa slikama)
Senzor razine kolektora vode na baterije: 7 koraka (sa slikama)

Video: Senzor razine kolektora vode na baterije: 7 koraka (sa slikama)

Video: Senzor razine kolektora vode na baterije: 7 koraka (sa slikama)
Video: Dijagnostika motora bez dijagnostickih uredjaja 2024, Studeni
Anonim
Senzor razine kolektora vode na baterije
Senzor razine kolektora vode na baterije
Senzor razine kolektora vode na baterije
Senzor razine kolektora vode na baterije

Naša kuća ima spremnik za vodu koji se napaja kišom koja pada na krov, a koristi se za WC, perilicu rublja i zalijevanje biljaka u vrtu. Posljednje tri godine ljeta su bila jako sušna pa smo pazili na razinu vode u spremniku. Do sada smo koristili drveni štap koji smo stavili u spremnik i označili razinu. Ali zasigurno se to mora poboljšati!

Ovdje dolazi ovaj projekt. Ideja je priključiti ultrazvučni senzor udaljenosti na vrh spremnika. Ovaj senzor radi kao sonar koji emitira zvučne valove, koje zatim reflektira površina vode. Od vremena potrebnog za povratak valova i brzine zvuka, možete izračunati udaljenost do vodene površine i odrediti koliko je spremnik pun.

Budući da nemam mrežni priključak u blizini spremnika, bitno je da cijeli uređaj radi na baterije. To znači da sam morao biti svjestan potrošnje energije svih dijelova. Za vraćanje podataka odlučio sam koristiti ugrađeni Wifi mikročipa ESP8266. Iako je Wifi prilično gladan energije, on ima prednost u odnosu na drugu vrstu radijske veze: možete se izravno povezati s bežičnim usmjerivačem svog doma bez potrebe za izgradnjom drugog uređaja koji djeluje kao relej.

Radi uštede energije, ESP8266 ću većinu vremena uspavati i mjeriti svaki sat. Za moju svrhu praćenja razine vode ovo je više nego dovoljno. Podaci će se poslati u ThingSpeak, a zatim se mogu pročitati na pametnom telefonu putem aplikacije.

Još jedan detalj! Brzina zvuka, bitna za mjerenje udaljenosti, ovisi o temperaturi i u manjoj mjeri o vlažnosti. Za točno vanjsko mjerenje tijekom godišnjih doba uvest ćemo senzor BME280 koji mjeri temperaturu, vlažnost i tlak. Kao bonus ovo čini od našeg senzora razine vode i mini meteorološka stanica.

Dijelovi:

  • 1x ESP8266 ESP-12F.
  • 1x adapterska ploča ESP-12F.
  • 1x FT232RL FTDI: USB -serijski adapter.
  • 1x HC-SR04-P: ultrazvučni modul za mjerenje udaljenosti. Imajte na umu da je P važan jer je ovo verzija koja ima niski minimalni radni napon od 3V.
  • 1x verzija BME280 3.3V: osjetnik temperature, tlaka i vlage.
  • 1x IRL2203N: n-kanalni MOSFET tranzistor.
  • 1x MCP1700-3302E 3.3V verzija: regulator napona.
  • 3x punjiva AA baterija, npr. 2600 mAh.
  • 1x držač za 3 baterije.
  • 1x matična ploča.
  • Otpornici: 1x 470K, 1x 100K, 4x 10K.
  • Kondenzatori: 2x keramički 1uF.
  • 3x prekidač.
  • Žice u obliku slova U u obliku slova U.
  • Kratkospojne žice.
  • Plastična posuda za juhu 1l.
  • Prsten za pričvršćivanje spremnika.

Učinio sam kod dostupnim na GitHubu.

Korak 1: Upoznajte ultrazvučni senzor udaljenosti

Upoznajte ultrazvučni senzor udaljenosti
Upoznajte ultrazvučni senzor udaljenosti
Upoznajte ultrazvučni senzor udaljenosti
Upoznajte ultrazvučni senzor udaljenosti

Izmjerit ćemo udaljenost do vodene površine ultrazvučnim senzorom, HC-SR04-P. Baš poput šišmiša, ovaj senzor koristi sonar: šalje zvučni impuls s frekvencijom previsokom za ljudsko uho, dakle ultrazvučni, i čeka da udari u objekt, odbije se i vrati. Zatim se udaljenost može izračunati iz vremena potrebnog za primanje odjeka i brzine zvuka.

Konkretno, ako je okidač pin povučen visoko za najmanje 10 μs, senzor šalje niz od 8 impulsa s frekvencijom od 40 Hz. Odgovor se tada dobiva na Echo pinu u obliku impulsa s trajanjem jednakim vremenu između slanja i primanja ultrazvučnog impulsa. Zatim moramo podijeliti s 2, budući da ultrazvučni impuls ide naprijed-natrag i potrebno nam je jednosmjerno vrijeme putovanja, te pomnožiti sa brzinom zvuka, koja je oko 340 m/s.

Ali čekaj malo! Zapravo, brzina zvuka ovisi o temperaturi i u manjoj mjeri o vlažnosti. Gadim li se ili je to važno? Pomoću proračunskog alata otkrivamo da bismo zimi (uzimajući -5 ° C) mogli imati 328,5 m/s, a ljeti (uzimajući 25 ° C) 347,1 m/s. Pretpostavimo da ćemo pronaći jednosmjerno vrijeme putovanja od 3 ms. Zimi bi to značilo 98,55 cm, a ljeti 104,13 cm. To je velika razlika! Dakle, kako bismo postigli dovoljnu točnost tijekom godišnjih doba, pa čak i danju i noću, moramo u naš uređaj dodati termometar. Odlučio sam uključiti BME280, koji mjeri temperaturu, vlažnost i tlak. U kodu koji sam koristio u funkciji speedOfSound formulu koja izračunava brzinu zvuka u smislu sva tri parametra, iako je temperatura doista najvažniji faktor. Vlaga i dalje ima manji učinak, ali je utjecaj tlaka zanemariv. Mogli bismo koristiti jednostavniju formulu uzimajući u obzir samo temperaturu koju sam implementirao u speedOfSoundSimple.

Postoji još jedna važna točka o HC-SR04. Dostupne su dvije verzije: standardna verzija radi na 5V, dok HC-SR04-P može raditi na rasponu napona od 3V do 5V. Budući da 3 punjive AA baterije osiguravaju oko 3x1.25V = 3.75V, važno je nabaviti P-verziju. Neki prodavači mogu poslati pogrešnog. Pa pogledajte slike ako je kupite. Dvije verzije izgledaju drugačije i straga i sprijeda, kako je objašnjeno na ovoj stranici. Straga na P-verziji sva su tri čipa vodoravna, dok je u standardnoj verziji jedan okomit. Sprijeda standardna verzija ima dodatnu srebrnu komponentu.

U elektroničkom krugu koristit ćemo tranzistor kao prekidač za isključivanje napajanja ultrazvučnog senzora kada naša postavka pređe u duboki san radi uštede baterije. Inače bi i dalje trošio oko 2mA. S druge strane, BME280 troši samo oko 5 μ kad je neaktivan, pa ga nije potrebno isključiti s tranzistorom.

Korak 2: Izbor ploče ESP8266

Izbor ploče ESP8266
Izbor ploče ESP8266

Za što dulji rad senzora na bateriji moramo uštedjeti na potrošnji energije. Iako Wi-Fi ESP8266 pruža vrlo prikladan način za povezivanje našeg senzora s oblakom, on je također prilično gladan energije. Tijekom rada ESP8266 troši oko 80 mA. Tako bismo s baterijama od 2600 mAh mogli raditi samo najviše 32 sata prije nego što se isprazne. U praksi će to biti manje jer nećemo moći koristiti puni kapacitet od 2600 mAh prije nego napon padne na prenisku razinu.

Srećom, ESP8266 također ima način dubokog sna, u kojem je gotovo sve isključeno. Stoga je plan staviti ESP8266 u duboki san većinu vremena i buditi ga tako često da bi izvršio mjerenje i poslao podatke putem Wi -Fi -ja na ThingSpeak. Prema ovoj stranici, maksimalno vrijeme dubokog sna bilo je oko 71 minutu, no od ESP8266 Arduino jezgre 2.4.1 povećalo se na oko 3,5 sata. U svom kodu sam se smjestio na jedan sat.

Prvo sam isprobao prikladnu razvojnu ploču NodeMCU-a, ali šteta, u dubokom snu je i dalje trošila oko 9 mA, što nam daje najviše 12 dana čistog sna čak i bez obzira na intervale buđenja. Važan krivac je regulator napona AMS1117, koji koristi energiju čak i ako ga pokušate zaobići spajanjem baterije izravno na pin od 3,3 V. Ova stranica objašnjava kako ukloniti regulator napona i USB UART. Međutim, to nikada nisam uspio učiniti bez uništenja ploče. Štoviše, nakon uklanjanja USB UART -a više se ne možete povezati s ESP8266 kako biste shvatili što je pošlo po zlu.

Čini se da većina razvojnih ploča ESP8266 koristi rasipnički regulator napona AMS1117. Izuzetak je WEMOS D1 mini (slika lijevo) koji dolazi s ekonomičnijim ME6211. Doista, otkrio sam da WEMOS D1 mini koristi oko 150 μA u dubokom snu, što je više poput njega. Većina je vjerojatno posljedica USB UART -a. S ovom pločom morate sami zalemiti zaglavlja za igle.

Međutim, možemo biti puno bolji koristeći ploču s golim kostima poput ESP-12F (slika desno), koja nema USB UART ili regulator napona. Napajajući pin od 3,3 V otkrio sam da duboki san troši samo 22 μA!

No, kako biste ESP-12F radili, pripremite se za lemljenje i malo više gnjavaže oko programiranja! Nadalje, osim ako baterije izravno isporučuju ispravan napon, koji je između 3V i 3.6V, moramo osigurati vlastiti regulator napona. U praksi se ispostavlja da je teško pronaći baterijski sustav koji osigurava napon u ovom rasponu tijekom cijelog ciklusa pražnjenja. Upamtite da također moramo napajati senzor HC-SR04-P, koji teoretski može funkcionirati s niskim naponom od 3 V, ali radi točnije ako je napon veći. Štoviše, u mom dijagramu HC-SR04-P uključuje tranzistor, koji izaziva mali dodatni pad napona. Koristit ćemo regulator napona MCP1700-3302E. Maksimalni ulazni napon je 6V pa ga hranimo s do 4 AA baterije. Odlučio sam koristiti 3 AA baterije.

Korak 3: Stvorite ThingSpeak kanal

Za pohranu podataka koristit ćemo ThingSpeak, IoT uslugu u oblaku. Idite na https://thingspeak.com/ i stvorite račun. Nakon što ste prijavljeni, kliknite gumb Novi kanal za stvaranje kanala. U postavkama kanala unesite naziv i opis kako želite. Zatim imenujemo polja kanala i aktiviramo ih klikom na potvrdne okvire s desne strane. Ako koristite moj kôd nepromijenjen, polja su sljedeća:

  • Polje 1: vodostaj (cm)
  • Polje 2: razina baterije (V)
  • Polje 3: temperatura (° C)
  • Polje 4: vlaga (%)
  • Polje 5: tlak (Pa)

Za buduću uporabu zapišite ID kanala, API ključ za čitanje i API ključ za pisanje koji se mogu pronaći u API ključevima izbornika.

Pomoću aplikacije možete očitati podatke ThingSpeak na svom pametnom telefonu. Na svom Android telefonu koristim widget IoT ThingSpeak Monitor. Morate ga konfigurirati s ID -om kanala i API ključem za čitanje.

Korak 4: Kako programirati ESP-12F

Kako programirati ESP-12F
Kako programirati ESP-12F
Kako programirati ESP-12F
Kako programirati ESP-12F

Potrebna nam je ploča bez kostiju kako bismo uštedjeli na trajanju baterije, ali nedostatak je to što ju je malo teže programirati od razvojne ploče s ugrađenim USB UART-om.

Koristit ćemo Arduino IDE. Postoje i drugi instruktori koji objašnjavaju kako ga koristiti pa ću ovdje biti kratak. Koraci za njegovu pripremu za ESP8266 su:

  • Preuzmite Arduino IDE.
  • Instalirajte podršku za ploču ESP8266. U izborniku Datoteka - Postavke - Postavke dodajte URL https://arduino.esp8266.com/stable/package_esp8266com_index.json u dodatne URL -ove upravitelja odbora. Sljedeće u izborniku Alati - Ploča - Upravitelj ploča instalirajte esp8266 zajednice esp8266.
  • Odaberite kao ploču: Generički modul ESP8266.

Za rukovanje ESP-12F koristio sam adaptersku ploču, uobičajeno dostupnu u internetskim trgovinama. Lemio sam čip na ploču, a zatim lemio zaglavlja na ploču. Tek tada sam otkrio da je adapterska ploča preširoka za standardnu ploču! Ne ostavlja slobodne igle sa strane za uspostavljanje veze.

Rješenje koje sam odabrao je korištenje žica u obliku slova U i njihovo spajanje kao na slici desno prije stavljanja ESP8266 s adapterskom pločom na ploču. Tako su GND i VCC spojeni na tračnice matične ploče, a preostali pinovi dostupni su dalje na ploči. Nedostatak je što će vaša matična ploča biti pretrpana žicama nakon što završite cijeli krug. Drugo rješenje je spojiti dvije ploče kao što je prikazano u ovom videu.

Zatim, za programiranje ESP-12F preko USB priključka vašeg računala potreban nam je USB-serijski adapter. Koristio sam FT232RL FTDI programer. Programer ima kratkospojnik za odabir između 3,3 V ili 5 V. Trebalo bi ga postaviti na 3.3V za ESP8266. Ne zaboravite to jer bi 5V moglo ispržiti vaš čip! Instalacija upravljačkih programa trebala bi biti automatska, ali ako programiranje ne radi, možete ih pokušati ručno instalirati s ove stranice.

ESP8266 ima način programiranja za učitavanje novog firmvera na bljeskalicu i način rada bljeskalice za pokretanje trenutnog firmvera iz flash memorije. Za odabir između ovih načina rada neke igle moraju imati određenu vrijednost tijekom pokretanja:

  • Programiranje: GPIO0: nisko, CH-PD: visoko, GPIO2: visoko, GPIO15: nisko
  • Bljeskalica: GPIO0: visoka, CH-PD: visoka, GPIO2: visoka, GPIO15: niska

Adapterska ploča već se brine za podizanje CH-PD i povlačenje GPIO15 s 10K otpornika.

Dakle, u našem elektroničkom krugu još uvijek moramo izvući GPIO2. Također nudimo prekidač za stavljanje ESP8266 u programiranje ili u način rada bljeskalice te prekidač za njegovo resetiranje, što se postiže spajanjem RST -a na masu. Nadalje, spojite TX pin FT232RL na RXD pin ESP8266 i obrnuto.

Slijed programiranja je sljedeći:

  • Postavite GPIO2 na nisko zatvaranjem prekidača za programiranje.
  • Ponovno postavite ESP8266 zatvaranjem, a zatim ponovnim otvaranjem prekidača za poništavanje. ESP8266 sada se pokreće u načinu programiranja.
  • Vratite GPIO2 na visoku vrijednost otvaranjem prekidača za programiranje.
  • Prenesite novi firmver iz Arduino IDE -a.
  • Ponovno postavite ESP8266 zatvaranjem i ponovnim otvaranjem prekidača za poništavanje. ESP8266 sada se pokreće u flash modu i pokreće novi firmver.

Sada možete provjeriti radi li programiranje postavljanjem poznate Blink skice.

Ako sve ovo radi, barem su pinovi GND, VCC, GPIO2, RST, TXD i RXD ispravno lemljeni i spojeni. Koje olakšanje! No prije nego što nastavite, preporučio bih vam da svojim multimetrom isprobate i druge pinove. I sam sam imao problem s jednom iglom. Možete koristiti ovu skicu koja postavlja sve pinove na jednu po jednu na 5 sekundi, a zatim ESP8266 stavlja u duboki san na 20 sekundi. Da biste omogućili ESP8266 da se probudi nakon dubokog sna, morate spojiti RST na GPIO16, koji daje signal za buđenje.

Korak 5: Prijenos skice

Učinio sam kôd dostupnim na GitHubu, to je samo jedna datoteka: Level-Sensor-Deepsleep.ino. Samo ga preuzmite i otvorite u Arduino IDE -u. Ili možete odabrati Datoteka - Novo i samo kopirati/zalijepiti kôd.

Na početku datoteke morate unijeti neke podatke: naziv i lozinku WLAN -a za korištenje, statičke IP podatke i ID kanala i API API ključ kanala ThingSpeak kanala.

Slijedeći savjet na ovom blogu, umjesto DHCP -a gdje usmjerivač dinamički dodjeljuje IP, koristimo statički IP, gdje sami postavljamo IP adresu ESP8266. Pokazalo se da je to puno brže pa štedimo na aktivnom vremenu, a time i na energiji baterije. Stoga moramo dati dostupnu statičku IP adresu, kao i IP usmjerivača (pristupnika), masku podmreže i DNS poslužitelj. Ako niste sigurni što popuniti, pročitajte o postavljanju statičkog IP -a u priručniku usmjerivača. Na računalu sa sustavom Windows povezanom putem Wi-Fi-ja na vaš usmjerivač, pokrenite ljusku (Windows gumb-r, cmd) i unesite ipconfig /all. Većinu potrebnih podataka pronaći ćete u odjeljku Wi-Fi.

Ispitujući kôd vidite da se za razliku od drugog Arduino koda većina radnji događa u funkciji postavljanja umjesto u funkciji petlje. To je zato što ESP8266 prelazi u duboki san nakon što dovrši funkciju postavljanja (osim ako smo započeli u OTA načinu). Nakon što se probudi, to je kao novi restart i ponovno pokreće postavljanje.

Ovdje su istaknute značajke koda:

  • Nakon buđenja kod postavlja switchPin (zadani GPIO15) na visoki. Time se uključuje tranzistor, koji opet uključuje senzor HC-SR04-P. Prije dubokog sna postavlja pin natrag na nisko, isključujući tranzistor i HC-SR04-P, pazeći da ne troši dragocjenije baterije.
  • Ako je modePIN (zadani GPIO14) nizak, kôd prelazi u OTA način rada umjesto u način mjerenja. Uz OTA (bežično ažuriranje) možemo ažurirati firmver putem Wi-Fi-ja umjesto serijskog porta. U našem slučaju to je sasvim zgodno jer ne moramo više povezivati serijski na USB adapter za daljnja ažuriranja. Samo postavite GPIO14 na nisko (s OTA prekidačem u elektroničkom krugu), resetirajte ESP8266 (s prekidačem za resetiranje) i on bi trebao postati dostupan u Arduino IDE -u za prijenos.
  • Na analognom PIN -u (A0) mjerimo napon baterije. To nam omogućuje isključivanje našeg uređaja, poznatog i kao trajno stanje dubokog sna, ako napon padne, ispod minVoltage, kako bismo zaštitili baterije od prekomjernog pražnjenja. Analogno mjerenje nije baš točno, radimo mjere numMeasuresBattery (zadano 10) i uzimamo prosjek za poboljšanje točnosti.
  • Mjerenje udaljenosti senzora HC-SR04-P vrši se u funkciji distanceMeasurement. Za poboljšanje točnosti mjerenje se ponavlja numMeasuresDistance (zadano 3) puta.
  • Postoji funkcija za izračunavanje speedOfSound iz mjerenja temperature, vlažnosti i tlaka pomoću senzora BME280. Zadana I2C adresa BME280 je 0x76, ali ako ne radi, možda ćete je morati promijeniti u 0x77: bool bme280Started = bme280.begin (0x77);
  • BME280 koristit ćemo u prisilnom načinu rada, što znači da je potrebno jedno mjerenje i povratak u stanje mirovanja radi uštede energije.
  • Ako postavite kapacitet (l), punu udaljenost (cm) i površinu (m2), kôd izračunava preostali volumen spremnika za vodu prema mjerenju udaljenosti: dvostruki preostali volumen = kapacitet+10,0*(puna udaljenost)*područje; i učitajte ovo na ThingSpeak. Ako zadržite zadane vrijednosti, učitava se udaljenost do površine vode u cm.

Korak 6: Izgradnja elektroničkog kruga

Izgradnja elektroničkog kruga
Izgradnja elektroničkog kruga

Gore je dijagram elektroničkog kruga. Prilično je velik za jednu ploču, osobito s prevelikom pločom adaptera i trikom sa žicama u obliku slova U. U nekom sam trenutku zasigurno poželio da sam iskoristio alternativu povezivanja dvije ploče, ali na kraju sam uspio.

Evo važnih značajki kruga:

  • Dva napona igraju ulogu: ulazni napon iz baterije (oko 3,75 V) i 3,3 V koji napaja ESP8266 i BME280. Stavio sam 3.3V na lijevu tračnicu razvodne ploče i 3.75V na desnu. Regulator napona pretvara 3,75 V u 3,3 V. Slijedeći upute u podatkovnom listu, dodao sam 1 μF kondenzatore na ulaz i izlaz regulatora napona kako bih povećao stabilnost.
  • GPIO15 ESP8266 spojen je na vrata tranzistora. To omogućuje da ESP8266 uključi tranzistor, a time i ultrazvučni senzor kada je aktivan, te ga isključi kada odlazi u duboki san.
  • GPIO14 je spojen na prekidač, OTA prekidač. Zatvaranje prekidača daje signal ESP8266 koji želimo sljedeće pokrenuti u OTA načinu rada, tj. Nakon što pritisnemo (zatvorimo i otvorimo) prekidač RESET i prenesemo novu skicu bežičnim putem.
  • Pinovi RST i GPIO2 povezani su kao na shemi programiranja. RST pin je sada spojen i na GPIO16 kako bi se ESP8266 probudio iz dubokog sna.
  • Igle TRIG i ECHO ultrazvučnog senzora spojene su na GPIO12 i GPIO13, dok su pinovi SCL i SDA BME280 spojeni na GPIO5 i GPIO4.
  • Konačno, analogni pin ADC je putem razdjelnika napona spojen na ulazni napon. To omogućuje mjerenje ulaznog napona radi provjere napunjenosti baterija. ADC pin može mjeriti napone između 0V i 1V. Za razdjelnik napona odabrali smo otpornike od 100K i 470K. To znači da je napon na ADC pinu dan sa: V_ADC = 100K/(100K+470K) V_in. Uzimajući V_ADC = 1V to znači da možemo mjeriti ulazni napon do V_in = 570/100 V_ADC = 5.7V. Što se tiče potrošnje energije, također dolazi do curenja neke struje kroz razdjelnik napona. S V_in = 3.75V iz baterija nalazimo I_leak = 3.75V/570K = 6.6 μA.

Čak i kada krug radi od baterija, moguće je spojiti USB na serijski adapter. Samo isključite VCC adaptera i spojite GND, RX i TX kao na shemi programiranja. To omogućuje otvaranje serijskog monitora u Arduino IDE -u radi čitanja poruka o otklanjanju pogrešaka i provjere radi li sve kako se očekuje.

Za cijeli krug izmjerio sam potrošnju struje od 50 μA u dubokom snu pri radu iz baterija. To uključuje ESP8266, BME280, ultrazvučni senzor (isključen od tranzistora) i curenje kroz razdjelnik napona i možda druga curenja. Dakle, nije tako loše!

Otkrio sam da je ukupno aktivno vrijeme oko 7 sekundi, od čega 4,25 sekundi za povezivanje s Wifi -jem i 1,25 sekundi za slanje podataka na ThingSpeak. Tako sam s aktivnom strujom od 80mA našao 160 μAh na sat za aktivno vrijeme. Dodajući 50 μAh na sat za stanje dubokog sna imamo ukupno 210 μAh na sat. To znači da baterije od 2600 mAh teoretski traju 12400 sati = 515 dana. Ovo je apsolutni maksimum ako bismo mogli iskoristiti pun kapacitet baterija (što nije slučaj) i nema propuštanja koje nisam pronašao svojim trenutnim mjerenjima. Tako da tek trebam vidjeti je li ovo doista uspjelo.

Korak 7: Dovršavanje senzora

Dovršavanje senzora
Dovršavanje senzora
Dovršavanje senzora
Dovršavanje senzora
Dovršavanje senzora
Dovršavanje senzora

Senzor sam stavio u plastičnu posudu od 1 litre, koja je prije sadržavala juhu. Pri dnu sam napravio dvije rupe koje odgovaraju "očima" senzora HC-SR04-P. Osim rupa, spremnik bi trebao biti vodootporan. Zatim se pričvršćuje na stijenku spremnika za vodu kružnim prstenom koji se obično koristi za odvodnu cijev za kišnicu.

Zabavite se s projektom!

Preporučeni: