Innholdsfortegnelse:

Batteridrevet vannfangeroppsamler: 7 trinn (med bilder)
Batteridrevet vannfangeroppsamler: 7 trinn (med bilder)

Video: Batteridrevet vannfangeroppsamler: 7 trinn (med bilder)

Video: Batteridrevet vannfangeroppsamler: 7 trinn (med bilder)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, November
Anonim
Batteridrevet vannfangeroppsamler
Batteridrevet vannfangeroppsamler
Batteridrevet vannfangeroppsamler
Batteridrevet vannfangeroppsamler

Huset vårt har en vanntank matet fra regnet som faller på taket, og brukes til toalett, vaskemaskin og vanning av planter i hagen. De siste tre årene var somrene veldig tørre, så vi holdt øye med vannstanden i tanken. Så langt brukte vi en trepinne, som vi la i tanken og merket nivået. Men det må sikkert være mulig å forbedre dette!

Det er her dette prosjektet kommer inn. Tanken er å feste en ultralydavstandssensor på toppen av tanken. Denne sensoren fungerer som en sonar som avgir lydbølger, som deretter reflekteres av vannoverflaten. Fra tiden det tar for bølgene å komme tilbake og lydens hastighet, kan du beregne avstanden til vannoverflaten og bestemme hvor full tanken er.

Siden jeg ikke har nettilkobling i nærheten av tanken, er det viktig at hele enheten fungerer på batterier. Dette betyr at jeg måtte være bevisst på strømforbruket til alle delene. For å sende tilbake dataene bestemte jeg meg for å bruke den innebygde Wifi til en ESP8266 mikrochip. Selv om Wifi er ganske strømhungrig, har den en fordel i forhold til en annen type radioforbindelse: du kan koble deg direkte til hjemmets trådløse ruter uten å måtte bygge en annen enhet som fungerer som et relé.

For å spare strøm setter jeg ESP8266 i dyp søvn mesteparten av tiden og tar en måling hver time. For mitt formål å følge opp vannstanden er dette mer enn nok. Dataene blir sendt til ThingSpeak og kan deretter leses av på en smarttelefon gjennom en app.

En detalj til! Lydens hastighet, avgjørende for avstandsmåling, avhenger av temperaturen og i mindre grad av fuktigheten. For en nøyaktig utvendig måling gjennom sesongene vil vi kaste inn en BME280 -sensor, som måler temperatur, fuktighet og trykk. Som en bonus gjør dette fra vår vannstandssensor også en mini værstasjon.

Deler:

  • 1x ESP8266 ESP-12F.
  • 1x ESP-12F adapterplate.
  • 1x FT232RL FTDI: USB til seriell adapter.
  • 1x HC-SR04-P: ultralydavstandsmåling. Vær oppmerksom på at P er viktig, siden dette er versjonen som har en lav minimum driftsspenning på 3V.
  • 1x BME280 3.3V -versjon: temperatur-, trykk- og fuktighetssensor.
  • 1x IRL2203N: n-kanal MOSFET-transistor.
  • 1x MCP1700-3302E 3.3V versjon: spenningsregulator.
  • 3x oppladbart AA -batteri, f.eks. 2600mAh.
  • 1x batteriholder for 3 batterier.
  • 1x brødbrett.
  • Motstander: 1x 470K, 1x 100K, 4x 10K.
  • Kondensatorer: 2x keramikk 1uF.
  • 3x vippebryter.
  • U-formede brødbrettledninger.
  • Jumper ledninger.
  • Suppebeholder i plast 1l.
  • Festring for beholderen.

Jeg gjorde koden tilgjengelig på GitHub.

Trinn 1: Bli kjent med ultralydavstandssensoren

Bli kjent med ultralydavstandssensoren
Bli kjent med ultralydavstandssensoren
Bli kjent med ultralydavstandssensoren
Bli kjent med ultralydavstandssensoren

Vi måler avstanden til vannoverflaten med en ultralydssensor, HC-SR04-P. Akkurat som en flaggermus bruker denne sensoren sonar: den sender en lydpuls med en frekvens for høy for det menneskelige øret, derav ultralyd, og venter på at den skal treffe et objekt, reflektere og komme tilbake. Avstanden kan deretter beregnes fra tiden det tar å motta ekkoet og lydens hastighet.

Konkret, hvis Trig -pinnen trekkes høyt i minst 10 μs, sender sensoren et utbrudd på 8 pulser med en frekvens på 40 Hz. Svaret oppnås deretter på Echo -pinnen i form av en puls med varighet lik tiden mellom sending og mottak av ultralydspulsen. Deretter må vi dele med 2, siden ultralydspulsen går frem og tilbake og vi trenger enveis reisetid, og multiplisere med lydens hastighet, som er omtrent 340 m/s.

Men vent litt! Faktisk er lydens hastighet avhengig av temperaturen og i mindre grad av fuktigheten. Er jeg nitpicking eller er dette relevant? Ved å bruke et beregningsverktøy finner vi at om vinteren (ved -5 ° C) kan vi ha 328,5 m/s, og om sommeren (ved å ta 25 ° C) 347,1 m/s. Så anta at vi finner en enveis reisetid på 3 ms. Om vinteren vil dette bety 98,55 cm og om sommeren 104,13 cm. Det er ganske forskjell! Så for å oppnå nok nøyaktighet gjennom sesongene og til og med dag og natt må vi legge til et termometer i oppsettet vårt. Jeg bestemte meg for å inkludere BME280, som måler temperatur, fuktighet og trykk. I koden jeg brukte i funksjonen speedOfSound en formel som beregner lydens hastighet når det gjelder alle tre parameterne, selv om temperaturen virkelig er den viktigste faktoren. Fuktigheten har fortsatt en mindre effekt, men påvirkningen av trykket er ubetydelig. Vi kan bruke en enklere formel som bare tar hensyn til temperaturen jeg implementerte i speedOfSoundSimple.

Det er et annet viktig poeng om HC-SR04. Det er to versjoner tilgjengelig: standardversjonen fungerer på 5V, mens HC-SR04-P kan fungere med en spenning fra 3V til 5V. Siden de 3 oppladbare AA-batteriene gir rundt 3x1.25V = 3.75V er det viktig å få P-versjonen. Noen selgere kan sende feil. Så ta en titt på bildene hvis du kjøper et. De to versjonene ser forskjellige ut både bak og foran som forklart på denne siden. På baksiden av P-versjonen er alle tre sjetongene horisontale, mens standardversjonen er vertikal. På forsiden har standardversjonen en ekstra sølvkomponent.

I den elektroniske kretsen bruker vi en transistor som en bryter for å slå av strømmen til ultralydssensoren når oppsettet går i dyp søvn for å spare batterilevetid. Ellers ville den fortsatt forbruke ca 2mA. BME280 på den annen side bruker bare omtrent 5 μ når den er inaktiv, så det er ikke nødvendig å slå den av med transistoren.

Trinn 2: Valg av ESP8266 -bord

Valg av ESP8266 -styre
Valg av ESP8266 -styre

For å bruke sensoren så lenge som mulig på et batteri må vi spare på strømforbruket. Selv om Wifi til ESP8266 gir en veldig praktisk måte å koble sensoren vår til skyen, er den også ganske strømhungrig. I drift bruker ESP8266 omtrent 80mA. Så med batterier på 2600 mAh ville vi bare kunne kjøre enheten i høyst 32 timer før de er tomme. I praksis blir det mindre siden vi ikke klarer å bruke hele 2600 mAh -kapasiteten før spenningen synker til et for lavt nivå.

Heldigvis har ESP8266 også en dvalemodus, der nesten alt er slått av. Så planen er å sette ESP8266 i dyp søvn det meste av tiden og vekke den så ofte for å gjøre en måling og sende dataene over Wifi til ThingSpeak. I følge denne siden var den maksimale dvaletiden tidligere 71 minutter, men siden ESP8266 Arduino-kjernen 2.4.1 har den økt til omtrent 3,5 timer. I koden min bestemte jeg meg for en time.

Jeg prøvde først det praktiske NodeMCU-utviklingsbordet, men bummer, i dyp søvn brukte det fortsatt omtrent 9 mA, noe som gir oss høyst 12 dager med dyp søvn uten å ta i betraktning oppvekningsintervallene. En viktig synder er spenningsregulatoren AMS1117, som bruker strøm selv om du prøver å omgå det ved å koble batteriet direkte til 3,3V -pinnen. Denne siden forklarer hvordan du fjerner spenningsregulatoren og USB UART. Imidlertid klarte jeg aldri å gjøre det uten å ødelegge brettet mitt. Dessuten kan du ikke koble til ESP8266 lenger etter å ha fjernet USB UART for å finne ut hva som gikk galt.

De fleste ESP8266 utviklingstavler ser ut til å bruke den bortkastede AMS1117 spenningsregulatoren. Ett unntak er WEMOS D1 mini (bildet til venstre) som følger med den mer økonomiske ME6211. Jeg fant faktisk ut at WEMOS D1 mini bruker omtrent 150 μA i dyp søvn, noe som er mer likt det. Det meste skyldes sannsynligvis USB UART. Med dette brettet må du lodde toppene til pinnene selv.

Imidlertid kan vi gjøre det mye bedre ved å bruke et bart ben som ESP-12F (bildet til høyre), som ikke har en USB UART eller en spenningsregulator. Ved å mate 3,3V-pinnen fant jeg et forbruk med dyp søvn på bare 22 μA!

Men for å få ESP-12F til å fungere, forbered deg på litt lodding og litt mer trøbbel med å programmere den! Med mindre batteriene direkte leverer riktig spenning, som er mellom 3V og 3,6V, må vi skaffe vår egen spenningsregulator. I praksis viser det seg å være vanskelig å finne et batterisystem som gir en spenning i dette området over hele utladingssyklusen. Husk at vi også må drive HC-SR04-P-sensoren, som teoretisk sett kan fungere med en spenning så lav som 3V, men fungerer mer nøyaktig hvis spenningen er høyere. Videre i diagrammet mitt blir HC-SR04-P slått på av en transistor, noe som induserer et lite ekstra spenningsfall. Vi vil bruke MCP1700-3302E spenningsregulator. Maksimal inngangsspenning er 6V, så vi mater den med opptil 4 AA -batterier. Jeg bestemte meg for å bruke 3 AA -batterier.

Trinn 3: Lag en ThingSpeak -kanal

Vi bruker ThingSpeak, en IoT -skytjeneste, til å lagre dataene våre. Gå til https://thingspeak.com/ og opprett en konto. Når du er logget inn, klikker du på knappen Ny kanal for å opprette en kanal. I kanalinnstillingene fyller du ut navnet og beskrivelsen som du vil. Deretter navngir vi kanalfeltene og aktiverer dem ved å klikke i avmerkingsboksene til høyre. Hvis du bruker koden min uendret, er feltene som følger:

  • Felt 1: vannstand (cm)
  • Felt 2: batterinivå (V)
  • Felt 3: temperatur (° C)
  • Felt 4: fuktighet (%)
  • Felt 5: trykk (Pa)

For fremtidig referanse, skriv ned kanal -ID, Read API -nøkkelen og Write API -nøkkelen, som du finner i menyen API -nøkler.

Du kan lese av ThingSpeak -dataene på smarttelefonen din ved hjelp av en app. På min Android -telefon bruker jeg IoT ThingSpeak Monitor -widgeten. Du må konfigurere den med kanal -ID og Read API -nøkkelen.

Trinn 4: Slik programmerer du ESP-12F

Slik programmerer du ESP-12F
Slik programmerer du ESP-12F
Slik programmerer du ESP-12F
Slik programmerer du ESP-12F

Vi trenger et bord med bare bein for å spare på batterilevetiden, men ulempen er at det er litt vanskeligere å programmere enn et utviklingskort med innebygd USB UART.

Vi bruker Arduino IDE. Det er andre instrukser som forklarer hvordan du bruker det, så jeg skal være kort her. Trinnene for å gjøre den klar for ESP8266 er:

  • Last ned Arduino IDE.
  • Installer støtte for ESP8266 -kortet. I menyen File - Preferences - Settings legger du til URL -adressen https://arduino.esp8266.com/stable/package_esp8266com_index.json til flere Board Manager -nettadresser. Neste i menyen Tools - Board - Boards Manager installer esp8266 av esp8266 community.
  • Velg som brett: Generisk ESP8266 -modul.

For å håndtere ESP-12F brukte jeg en adapterplate, som vanligvis er tilgjengelig i nettbutikker. Jeg loddet brikken til platen og loddet deretter toppene til platen. Først da oppdaget jeg at adapterplaten er for bred for et standard brødbrett! Det etterlater ingen ledige pinner på siden for å opprette forbindelser.

Løsningen jeg gikk for er å bruke U-formede ledninger og koble dem som på bildet til høyre før du setter ESP8266 med adapterplaten på brødbrettet. Så GND og VCC er koblet til skinnen på brødbrettet, og de resterende pinnene blir gjort tilgjengelige lenger ned på brødbrettet. Ulempen er at brødbrettet ditt blir ganske overfylt med ledninger når du er ferdig med hele kretsen. En annen løsning er å passe to brødbrett sammen som vist i denne videoen.

Deretter trenger vi en USB til seriell adapter for å programmere ESP-12F gjennom USB-porten på datamaskinen. Jeg brukte FT232RL FTDI programmereren. Programmereren har en jumper for å velge mellom 3,3V eller 5V. Den bør settes til 3,3V for ESP8266. Ikke glem det, da 5V kan steke brikken din! Installasjonen av driverne skal være automatisk, men hvis programmeringen ikke fungerer, kan du prøve å installere dem manuelt fra denne siden.

ESP8266 har en programmeringsmodus for å laste opp ny fastvare til blitsen, og en blitsmodus for å kjøre gjeldende fastvare fra flashminnet. For å velge mellom disse modusene må noen pins ta en viss verdi ved oppstart:

  • Programmering: GPIO0: lav, CH-PD: høy, GPIO2: høy, GPIO15: lav
  • Blits: GPIO0: høy, CH-PD: høy, GPIO2: høy, GPIO15: lav

Adapterplaten tar allerede vare på å trekke opp CH-PD og trekke ned GPIO15 med 10K motstander.

Så i vår elektroniske krets trenger vi fremdeles å hente GPIO2. Vi tilbyr også en bryter for å sette ESP8266 i programmering eller i blitsmodus og en bryter for å tilbakestille den, noe som gjøres ved å koble RST til bakken. Sørg videre for at du kobler TX-pinnen til FT232RL til RXD-pinnen på ESP8266 og omvendt.

Programmeringssekvensen er som følger:

  • Sett GPIO2 til lav ved å lukke programmeringsbryteren.
  • Tilbakestill ESP8266 ved å lukke og deretter åpne resettingsbryteren. ESP8266 starter nå i programmeringsmodus.
  • Sett GPIO2 tilbake til høyt ved å åpne programmeringsbryteren.
  • Last opp den nye fastvaren fra Arduino IDE.
  • Tilbakestill ESP8266 igjen ved å lukke og åpne resettingsbryteren. ESP8266 starter nå i flash -modus og kjører den nye fastvaren.

Nå kan du teste om programmeringen fungerer ved å laste opp den berømte Blink -skissen.

Hvis alt dette fungerer, er GND-, VCC-, GPIO2-, RST-, TXD- og RXD -pinnene riktig loddet og tilkoblet. For en lettelse! Men før du fortsetter vil jeg anbefale å også teste de andre pinnene med multimeteret ditt. Jeg hadde et problem selv med en av pinnene. Du kan bruke denne skissen, som setter alle pinnene til høy en etter en i 5 sekunder, og deretter setter ESP8266 i dyp søvn i 20 sekunder. For å gjøre ESP8266 i stand til å våkne etter dyp søvn må du koble RST til GPIO16, som gir våknesignalet.

Trinn 5: Last opp skissen

Jeg har gjort koden tilgjengelig på GitHub, det er bare en fil: Level-Sensor-Deepsleep.ino. Bare last den ned og åpne den i Arduino IDE. Eller du kan velge Fil - Ny og bare kopiere/lime inn koden.

Det er litt informasjon du må fylle ut i begynnelsen av filen: navnet og passordet til WLAN for bruk, statiske IP -detaljer og kanal -ID og skrive -API -nøkkelen til ThingSpeak -kanalen.

Etter tipset på denne bloggen, i stedet for DHCP der ruteren dynamisk tildeler en IP, bruker vi statisk IP, der vi selv angir IP -adressen til ESP8266. Dette viser seg å være mye raskere, så vi sparer på aktiv tid og dermed på batterienergi. Så vi må oppgi en tilgjengelig statisk IP -adresse, så vel som IP -adressen til ruteren (gateway), nettverksmasken og en DNS -server. Hvis du er usikker på hva du skal fylle ut, kan du lese om hvordan du setter opp en statisk IP i håndboken til ruteren din. På en Windows-datamaskin som er koblet via Wifi til deg ruteren, starter du et skall (Windows-knapp-r, cmd) og skriver ipconfig /all. Du finner det meste av informasjonen du trenger under Wi-Fi-delen.

Ved å undersøke koden ser du at i motsetning til andre Arduino -koder skjer det meste av handlingen i oppsettfunksjonen i stedet for sløyfefunksjonen. Dette er fordi ESP8266 går i dyp søvn etter at den er ferdig med oppsettfunksjonen (med mindre vi startet i OTA -modus). Etter at det våkner, er det som en ny omstart, og det kjører oppsettet igjen.

Her er de viktigste egenskapene til koden:

  • Etter vekking setter koden switchPin (standard GPIO15) til høy. Dette slår på transistoren, som igjen slår på HC-SR04-P-sensoren. Før du går i dyp søvn, setter den pinnen tilbake til lavt, slår transistoren og HC-SR04-P av, og sørger for at den ikke bruker mer dyrebar batteristrøm.
  • Hvis modePIN (standard GPIO14) er lav, går koden i OTA -modus i stedet for målemodus. Med OTA (over-the-air-oppdatering) kan vi oppdatere fastvaren via Wifi i stedet for den serielle porten. I vårt tilfelle er dette ganske praktisk siden vi ikke trenger å koble serienummeret til USB -adapteren lenger for ytterligere oppdateringer. Bare sett GPIO14 til lav (med OTA -bryteren i den elektroniske kretsen), tilbakestill ESP8266 (med tilbakestillingsbryteren), og den skal bli tilgjengelig i Arduino IDE for opplasting.
  • På den analoge PIN -koden (A0) måler vi batterispenningen. Dette gjør at vi kan slå av enheten vår, aka permanent dyp søvn, hvis spenningen blir for lav, under minVoltage, for å beskytte batteriene mot overlading. Den analoge målingen er ikke veldig nøyaktig, vi måler numMeasuresBattery (standard 10) og tar gjennomsnittet for å forbedre nøyaktigheten.
  • Avstandsmåling av HC-SR04-P-sensoren utføres i funksjonsavstandsmåling. For å forbedre nøyaktigheten gjentas målingen numMeasuresDistance (standard 3) ganger.
  • Det er en funksjon for å beregne speedOfSound fra temperatur-, fuktighets- og trykkmålingen av BME280 -sensoren. Standard I2C -adressen til BME280 er 0x76, men hvis den ikke fungerer, må du kanskje endre den til 0x77: bool bme280Started = bme280.begin (0x77);
  • Vi bruker BME280 i tvungen modus, noe som betyr at den tar en måling og går i dvale for å spare strøm.
  • Hvis du angir kapasitet (l), fullDistance (cm) og areal (m2), beregner koden det gjenværende volumet i vanntanken fra avstandsmåling: dobbel gjenværende volum = kapasitet+10,0*(fullDistance-distance)*area; og last opp dette til ThingSpeak. Hvis du beholder standardverdiene, laster den opp avstanden til vannoverflaten i cm.

Trinn 6: Bygg den elektroniske kretsen

Bygg den elektroniske kretsen
Bygg den elektroniske kretsen

Over er diagrammet over den elektroniske kretsen. Det er ganske stort for ett brødbrett, spesielt med den store adapterplaten og trikset med de U-formede ledningene. På et tidspunkt skulle jeg absolutt ønske jeg hadde brukt alternativet å koble til to brødbrett, men til slutt klarte jeg det.

Her er de viktige egenskapene til kretsen:

  • Det er to spenninger som spiller en rolle: inngangsspenningen fra batteriet (rundt 3,75V) og 3,3V som mater ESP8266 og BME280. Jeg satte 3.3V på venstre skinne på tavlen og 3.75V på høyre skinne. Spenningsregulatoren konverterer 3,75V til 3,3V. Etter instruksjonene i databladet la jeg til 1 μF kondensatorer til inngang og utgang til spenningsregulatoren for å øke stabiliteten.
  • GPIO15 på ESP8266 er koblet til porten til transistoren. Dette gjør at ESP8266 kan slå på transistoren og dermed ultralydsensoren når den er aktiv og slå den av når du går i dyp søvn.
  • GPIO14 er koblet til en bryter, OTA -bryteren. Lukking av bryteren gir signalet til ESP8266 vi ønsker å starte i OTA-modus neste, dvs. etter at vi trykker (lukker og åpner) RESET-bryteren, og laster opp en ny skisse over luften.
  • RST- og GPIO2 -pinnene er koblet til som i programmeringsdiagrammet. RST -pinnen er nå også koblet til GPIO16 for å la ESP8266 våkne fra dyp søvn.
  • Pinnene TRIG og ECHO på ultralydssensoren er koblet til GPIO12 og GPIO13, mens pinnene SCL og SDA på BME280 er koblet til GPIO5 og GPIO4.
  • Til slutt er den analoge pinnen ADC via en spenningsdeler koblet til inngangsspenningen. Dette gjør det mulig å måle inngangsspenningen for å kontrollere ladningen av batteriene. ADC -pinnen kan måle spenninger mellom 0V og 1V. For spenningsdeleren valgte vi motstander på 100K og 470K. Dette betyr at spenningen ved ADC -pinnen er gitt av: V_ADC = 100K/(100K+470K) V_in. Ved å ta V_ADC = 1V betyr dette at vi kan måle inngangsspenninger opp til V_in = 570/100 V_ADC = 5,7V. Når det gjelder strømforbruk, lekker det også noe strøm gjennom spenningsdeleren. Med V_in = 3.75V fra batteriene finner vi I_leak = 3.75V/570K = 6.6 μA.

Selv når kretsen går fra batterier, er det mulig å koble USB til seriell adapter. Bare sørg for å koble fra VCC fra adapteren og koble til GND, RX og TX som i programmeringsdiagrammet. Dette gjør det mulig å åpne Serial Monitor i Arduino IDE for å lese feilsøkingsmeldingene og sørge for at alt fungerer som forventet.

For hele kretsen målte jeg et strømforbruk på 50 μA i dyp søvn når jeg kjørte fra batterier. Dette inkluderer ESP8266, BME280, ultralydsensoren (slått av av transistoren) og lekkasje gjennom spenningsdeleren og kanskje andre lekkasjer. Så det er ikke så ille!

Jeg fant ut at den totale aktive tiden er omtrent 7 sekunder, hvorav 4,25 sekunder for å koble til Wifi og 1,25 sekunder for å sende dataene til ThingSpeak. Så med en aktiv strøm på 80mA fant jeg 160 μAh per time for den aktive tiden. Å legge til 50 μAh per time for dyp-søvn-tilstanden vi har totalt 210 μAh per time. Dette betyr at 2600 mAh batterier teoretisk varer 12400 timer = 515 dager. Dette er det absolutte maksimum hvis vi kunne bruke full kapasitet på batteriene (noe som ikke er tilfelle), og det er ingen lekkasjer som jeg ikke fant med mine nåværende målinger. Så jeg har ennå ikke sett om dette virkelig løser seg.

Trinn 7: Fullfør sensoren

Avslutte sensoren
Avslutte sensoren
Avslutte sensoren
Avslutte sensoren
Avslutte sensoren
Avslutte sensoren

Jeg la sensoren i en plastbeholder på 1 liter, som pleide å inneholde suppe. I bunnen laget jeg to hull for å passe til "øynene" til HC-SR04-P-sensoren. Bortsett fra hullene skal beholderen være vanntett. Den festes deretter til veggen i vanntanken med en sirkelring som vanligvis brukes til et regnvannsavløpsrør.

Ha det gøy med prosjektet!

Anbefalt: