Indholdsfortegnelse:

Batteridrevet vandopsamler niveausensor: 7 trin (med billeder)
Batteridrevet vandopsamler niveausensor: 7 trin (med billeder)

Video: Batteridrevet vandopsamler niveausensor: 7 trin (med billeder)

Video: Batteridrevet vandopsamler niveausensor: 7 trin (med billeder)
Video: Camping + Wohnmobil News und Neuheiten 7/22 2024, November
Anonim
Batteridrevet vandopsamler niveau sensor
Batteridrevet vandopsamler niveau sensor
Batteridrevet vandopsamler niveau sensor
Batteridrevet vandopsamler niveau sensor

Vores hus har en vandtank fodret med regnen, der falder på taget, og bruges til toilettet, vaskemaskinen og vandingsplanter i haven. I de sidste tre år var somrene meget tørre, så vi holdt øje med vandstanden i tanken. Indtil videre brugte vi en træpind, som vi lagde i tanken og markerede niveauet. Men det må sikkert være muligt at forbedre dette!

Det er her dette projekt kommer ind. Ideen er at fastgøre en ultralydsafstandssensor øverst i tanken. Denne sensor fungerer som en sonar, der udsender lydbølger, som derefter reflekteres af vandoverfladen. Fra det tager, før bølgerne kommer tilbage og lydens hastighed, kan du beregne afstanden til vandoverfladen og bestemme, hvor fuld tanken er.

Da jeg ikke har en netforbindelse tæt på tanken, er det vigtigt, at hele enheden fungerer på batterier. Det betyder, at jeg var nødt til at være bevidst om strømforbruget til alle delene. For at sende dataene tilbage besluttede jeg mig for at bruge den indbyggede Wifi til en ESP8266 mikrochip. Selvom Wifi er temmelig strøm-sulten, har den en fordel i forhold til en anden form for radioforbindelse: du kan direkte oprette forbindelse til dit hjems trådløse router uden at skulle bygge en anden enhed, der fungerer som et relæ.

For at spare strøm lægger jeg ESP8266 i dyb søvn det meste af tiden og foretager en måling hver time. For mit formål at følge op på vandstanden er dette mere end tilstrækkeligt. Dataene sendes til ThingSpeak og kan derefter aflæses på en smartphone via en app.

Endnu en detalje! Lydens hastighed, afgørende for afstandsmåling, afhænger af temperaturen og i mindre grad af luftfugtigheden. For en præcis måling udefra i løbet af sæsonerne smider vi en BME280 -sensor i, som måler temperatur, fugtighed og tryk. Som en bonus gør dette fra vores vandstandssensor også til en mini -vejrstation.

Dele:

  • 1x ESP8266 ESP-12F.
  • 1x ESP-12F adapterplade.
  • 1x FT232RL FTDI: USB til seriel adapter.
  • 1x HC-SR04-P: ultralydsmåling modul. Bemærk, at P er vigtig, da dette er den version, der har en lav minimumsspænding på 3V.
  • 1x BME280 3.3V version: temperatur-, tryk- og luftfugtighedsføler.
  • 1x IRL2203N: n-kanal MOSFET transistor.
  • 1x MCP1700-3302E 3.3V version: spændingsregulator.
  • 3x genopladeligt AA -batteri, f.eks. 2600mAh.
  • 1x batteriholder til 3 batterier.
  • 1x brødbræt.
  • Modstande: 1x 470K, 1x 100K, 4x 10K.
  • Kondensatorer: 2x keramik 1uF.
  • 3x vippekontakt.
  • U-formede brødbrætstråde.
  • Jumper ledninger.
  • Plastsuppebeholder 1l.
  • Monteringsring til beholderen.

Jeg stillede koden til rådighed på GitHub.

Trin 1: Lær den ultralydsafstandssensor at kende

Lær den ultralydsafstandssensor at kende
Lær den ultralydsafstandssensor at kende
Lær den ultralydsafstandssensor at kende
Lær den ultralydsafstandssensor at kende

Vi måler afstanden til vandoverfladen med en ultralydssensor, HC-SR04-P. Ligesom en flagermus bruger denne sensor sonar: den sender en lydpuls med en frekvens for høj til det menneskelige øre, derfor ultralyd, og venter på, at den rammer et objekt, reflekterer og vender tilbage. Afstanden kan derefter beregnes fra den tid, det tager at modtage ekkoet og lydens hastighed.

Konkret, hvis Trig -stiften trækkes højt i mindst 10 μs, sender sensoren et burst på 8 pulser med en frekvens på 40 Hz. Svaret opnås derefter på Echo -stiften i form af en puls med varighed svarende til tiden mellem afsendelse og modtagelse af ultralydspulsen. Derefter skal vi dividere med 2, da ultralydspulsen går frem og tilbage, og vi har brug for envejs rejsetid og gange med lydens hastighed, som er omkring 340 m/s.

Men vent et øjeblik! Faktisk afhænger lydens hastighed af temperaturen og i mindre grad af luftfugtigheden. Er jeg nikket eller er dette relevant? Ved hjælp af et beregningsværktøj finder vi, at vi om vinteren (ved -5 ° C) kunne have 328,5 m/s, og om sommeren (ved 25 ° C) 347,1 m/s. Så antag, at vi finder en envejs rejsetid på 3 ms. Om vinteren ville det betyde 98,55 cm og om sommeren 104,13 cm. Det er en ganske stor forskel! Så for at opnå tilstrækkelig nøjagtighed gennem årstiderne og endda dag og nat skal vi tilføje et termometer til vores setup. Jeg besluttede at inkludere BME280, som måler temperatur, fugtighed og tryk. I koden brugte jeg i funktionen speedOfSound en formel, der beregner lydens hastighed i form af alle tre parametre, selvom temperaturen virkelig er den vigtigste faktor. Fugtigheden har stadig en mindre effekt, men påvirkningen af trykket er ubetydelig. Vi kunne bruge en enklere formel under hensyntagen til kun den temperatur, som jeg implementerede i speedOfSoundSimple.

Der er endnu et vigtigt punkt om HC-SR04. Der er to versioner til rådighed: standardversionen fungerer ved 5V, mens HC-SR04-P kan fungere ved en spænding fra 3V til 5V. Da de 3 genopladelige AA-batterier giver omkring 3x1.25V = 3.75V er det vigtigt at få P-versionen. Nogle sælgere sender muligvis den forkerte. Så tag et kig på billederne, hvis du køber et. De to versioner ser forskellige ud både på bagsiden og foran som forklaret på denne side. På bagsiden af P-versionen er alle tre chips vandrette, mens der på standardversionen er en lodret. Foran har standardversionen en ekstra sølvkomponent.

I det elektroniske kredsløb bruger vi en transistor som en switch til at slukke for strømmen til ultralydssensoren, når vores opsætning går i dyb søvn for at spare batterilevetid. Ellers ville det stadig forbruge omkring 2mA. BME280 forbruger derimod kun cirka 5 μ, når den er inaktiv, så det er ikke nødvendigt at slukke den med transistoren.

Trin 2: Valg af ESP8266 -kort

Valg af ESP8266 Board
Valg af ESP8266 Board

For at betjene sensoren så længe som muligt på et batteri skal vi spare på strømforbruget. Selvom Wifi på ESP8266 giver en meget bekvem måde at forbinde vores sensor til skyen, er den også ret strømkrævende. I drift bruger ESP8266 omkring 80mA. Så med batterier på 2600 mAh ville vi kun kunne køre vores enhed i højst 32 timer, før de er tomme. I praksis vil det være mindre, da vi ikke kan bruge hele 2600 mAh kapaciteten, før spændingen falder til et for lavt niveau.

Heldigvis har ESP8266 også en dyb dvaletilstand, hvor næsten alt er slukket. Så planen er at lægge ESP8266 i dyb søvn det meste af tiden og vække den så ofte for at foretage en måling og sende dataene over Wifi til ThingSpeak. Ifølge denne side var den maksimale tid til dyb søvn tidligere cirka 71 minutter, men siden ESP8266 Arduino-kernen 2.4.1 er den steget til cirka 3,5 timer. I min kode afregnede jeg en time.

Jeg prøvede først det praktiske NodeMCU-udviklingsbræt, men bummer, i dyb søvn brugte det stadig omkring 9 mA, hvilket højst giver os 12 dages ren dyb søvn uden selv at overveje vågneintervallerne. En vigtig synder er spændingsregulatoren AMS1117, som bruger strøm, selvom du forsøger at omgå det ved at tilslutte batteriet direkte til 3,3V -stiften. Denne side forklarer, hvordan du fjerner spændingsregulatoren og USB UART. Det lykkedes mig dog aldrig at gøre det uden at ødelægge mit bræt. Desuden kan du efter fjernelse af USB UART ikke længere oprette forbindelse til ESP8266 for at finde ud af, hvad der gik galt.

De fleste ESP8266 udviklingstavler ser ud til at bruge den spildrige AMS1117 spændingsregulator. En undtagelse er WEMOS D1 mini (billedet til venstre), der følger med den mere økonomiske ME6211. Jeg fandt faktisk ud af, at WEMOS D1 mini bruger omkring 150 μA i dyb søvn, hvilket mere ligner det. Det meste skyldes sandsynligvis USB UART. Med dette bræt skal du selv lodde overskrifterne til stifterne.

Vi kan dog gøre det meget bedre ved hjælp af et bare-benet bord som ESP-12F (billede til højre), som ikke har en USB UART eller en spændingsregulator. Ved at fodre 3,3V-stiften fandt jeg et forbrug på dyb søvn på kun 22 μA!

Men for at få ESP-12F til at arbejde forberede sig på noget lodning og lidt mere besvær med at programmere det! Medmindre batterierne direkte leverer den korrekte spænding, som er mellem 3V og 3,6V, skal vi levere vores egen spændingsregulator. I praksis viser det sig at være svært at finde et batterisystem, der leverer en spænding i dette område over dets fulde afladningscyklus. Husk, at vi også skal drive HC-SR04-P-sensoren, som teoretisk set kan fungere med en spænding så lav som 3V, men fungerer mere præcist, hvis spændingen er højere. Desuden tændes HC-SR04-P i mit diagram af en transistor, som forårsager et lille ekstra spændingsfald. Vi vil bruge MCP1700-3302E spændingsregulator. Den maksimale indgangsspænding er 6V, så vi fodrer den med op til 4 AA -batterier. Jeg besluttede at bruge 3 AA batterier.

Trin 3: Opret en ThingSpeak -kanal

Vi bruger ThingSpeak, en IoT -cloudtjeneste, til at gemme vores data. Gå til https://thingspeak.com/ og opret en konto. Når du er logget ind, skal du klikke på knappen Ny kanal for at oprette en kanal. I kanalindstillingerne skal du udfylde navnet og beskrivelsen, som du vil. Dernæst navngiver vi kanalfelterne og aktiverer dem ved at markere afkrydsningsfelterne til højre. Hvis du bruger min kode uændret, er felterne som følger:

  • Felt 1: vandstand (cm)
  • Felt 2: batteriniveau (V)
  • Felt 3: temperatur (° C)
  • Felt 4: fugtighed (%)
  • Felt 5: tryk (Pa)

For fremtidig reference nedskrive kanal -id'et, læs API -nøglen og skrive -API -nøglen, som findes i menuens API -nøgler.

Du kan aflæse ThingSpeak -data på din smartphone ved hjælp af en app. På min Android -telefon bruger jeg IoT ThingSpeak Monitor -widgeten. Du skal konfigurere det med kanal -id'et og Read API -nøglen.

Trin 4: Sådan programmeres ESP-12F

Sådan programmeres ESP-12F
Sådan programmeres ESP-12F
Sådan programmeres ESP-12F
Sådan programmeres ESP-12F

Vi har brug for et blottet benkort for at spare på batterilevetiden, men ulempen er, at det er lidt sværere at programmere end et udviklingsbord med indbygget USB UART.

Vi bruger Arduino IDE. Der er andre instruktioner, der forklarer, hvordan man bruger det, så jeg vil være kort her. Trinnene for at gøre den klar til ESP8266 er:

  • Download Arduino IDE.
  • Installer support til ESP8266 -kortet. I menuen Filer - Præferencer - Indstillinger tilføj URL'en https://arduino.esp8266.com/stable/package_esp8266com_index.json til yderligere Board Manager -webadresser. Næste i menuen Værktøjer - Board - Boards Manager installer esp8266 af esp8266 community.
  • Vælg som bord: Generisk ESP8266 -modul.

Til håndtering af ESP-12F brugte jeg en adapterplade, der almindeligvis fås i onlineshops. Jeg lodde chippen til pladen og lodde derefter overskrifterne til pladen. Først da opdagede jeg, at adapterpladen er for bred til et standard brødbræt! Det efterlader ingen frie stifter på siden for at oprette dine forbindelser.

Løsningen, jeg gik efter, er at bruge U-formede ledninger og forbinde dem som på billedet til højre, før du lægger ESP8266 med adapterpladen på brødbrættet. Så GND og VCC er forbundet til brødbræddernes skinner, og de resterende stifter stilles til rådighed længere nede på brødbrættet. Ulempen er, at dit brødbræt bliver temmelig overfyldt med ledninger, når du er færdig med hele kredsløbet. En anden løsning er at passe to brødbrætter sammen som vist i denne video.

For derefter at programmere ESP-12F via USB-porten på din computer har vi brug for en USB til seriel adapter. Jeg brugte FT232RL FTDI programmereren. Programmereren har en jumper til at vælge mellem 3,3V eller 5V. Det skal sættes til 3,3V for ESP8266. Glem det ikke, da 5V kan stege din chip! Installation af driverne skal være automatisk, men hvis programmeringen ikke virker, kan du prøve at installere dem manuelt fra denne side.

ESP8266 har en programmeringstilstand for at uploade ny firmware til blitzen og en flashtilstand til at køre den aktuelle firmware fra flashhukommelsen. For at vælge mellem disse tilstande skal nogle pins tage en bestemt værdi ved opstart:

  • Programmering: GPIO0: lav, CH-PD: høj, GPIO2: høj, GPIO15: lav
  • Flash: GPIO0: høj, CH-PD: høj, GPIO2: høj, GPIO15: lav

Adapterpladen sørger allerede for at trække CH-PD op og trække GPIO15 ned med 10K modstande.

Så i vores elektroniske kredsløb mangler vi stadig at trække GPIO2 op. Vi leverer også en switch til at sætte ESP8266 i programmering eller i flash -tilstand og en switch til at nulstille den, hvilket gøres ved at tilslutte RST til jorden. Sørg desuden for at tilslutte TX-stiften på FT232RL til RXD-stiften på ESP8266 og omvendt.

Programmeringssekvensen er som følger:

  • Indstil GPIO2 til lav ved at lukke programmeringskontakten.
  • Nulstil ESP8266 ved at lukke og derefter genåbne nulstillingskontakten. ESP8266 starter nu i programmeringstilstand.
  • Sæt GPIO2 tilbage til høj ved at åbne programmeringskontakten.
  • Upload den nye firmware fra Arduino IDE.
  • Nulstil ESP8266 igen ved at lukke og genåbne nulstillingskontakten. ESP8266 starter nu i flashtilstand og kører den nye firmware.

Nu kan du teste, om programmeringen virker ved at uploade den berømte Blink -skitse.

Hvis alt dette virker, er GND-, VCC-, GPIO2-, RST-, TXD- og RXD -benene loddet korrekt og forbundet. Hvilken lettelse! Men inden du fortsætter, vil jeg anbefale at også teste de andre stifter med dit multimeter. Jeg havde selv et problem med en af stifterne. Du kan bruge denne skitse, der sætter alle stifterne til høj en efter en i 5 sekunder, og bagefter lægger ESP8266 i dyb søvn i 20 sekunder. For at ESP8266 kan vågne op efter dyb søvn, skal du slutte RST til GPIO16, hvilket giver vække -signalet.

Trin 5: Upload af skitsen

Jeg har gjort koden tilgængelig på GitHub, det er kun en fil: Level-Sensor-Deepsleep.ino. Bare download det og åbn det i Arduino IDE. Eller du kan vælge Fil - Ny og bare kopiere/indsætte koden.

Der er nogle oplysninger, du skal udfylde i begyndelsen af filen: navnet og adgangskoden til WLAN'et, statiske IP -detaljer og kanal -id og skrive -API -nøglen til ThingSpeak -kanalen.

Efter tip på denne blog, i stedet for DHCP, hvor routeren dynamisk tildeler en IP, bruger vi statisk IP, hvor vi selv indstiller IP -adressen på ESP8266. Dette viser sig at være meget hurtigere, så vi sparer på aktiv tid og dermed på batterienergi. Så vi skal levere en tilgængelig statisk IP -adresse samt routerens IP (gateway), subnetmaske og en DNS -server. Hvis du er i tvivl om, hvad du skal udfylde, kan du læse om opsætning af en statisk IP i manualen til din router. På en Windows-computer, der er forbundet via Wifi til din router, skal du starte en shell (Windows-knap-r, cmd) og indtaste ipconfig /all. Du finder de fleste oplysninger, du har brug for, under sektionen Wi-Fi.

Ved at undersøge koden ser du, at i modsætning til andre Arduino -kode sker det meste af handlingen i opsætningsfunktionen i stedet for loop -funktionen. Dette skyldes, at ESP8266 går i dyb søvn, når den er færdig med opsætningsfunktionen (medmindre vi startede i OTA -tilstand). Efter at det vågner, er det som en ny genstart, og det kører opsætningen igen.

Her er de vigtigste træk ved koden:

  • Efter vågning sætter koden switchPin (standard GPIO15) til høj. Dette tænder transistoren, som igen tænder HC-SR04-P-sensoren. Inden du går i dyb søvn, sætter den stiften tilbage til lavt, slukker transistoren og HC-SR04-P og sørger for, at den ikke bruger mere værdifuld batteristrøm.
  • Hvis modePIN (standard GPIO14) er lav, går koden i OTA -tilstand i stedet for målingstilstand. Med OTA (over-the-air opdatering) kan vi opdatere firmwaren via Wifi i stedet for den serielle port. I vores tilfælde er dette ganske praktisk, da vi ikke længere skal slutte serien til USB -adapteren for yderligere opdateringer. Indstil bare GPIO14 til lav (med OTA -kontakten i det elektroniske kredsløb), nulstil ESP8266 (med nulstillingskontakten), og den skal blive tilgængelig i Arduino IDE til upload.
  • På den analoge PIN (A0) måler vi batteriets spænding. Dette giver os mulighed for at slukke for vores enhed, også kaldet permanent dyb søvn, hvis spændingen bliver for lav, under minVoltage, for at beskytte batterierne mod overladning. Den analoge måling er ikke særlig nøjagtig, vi foretager numMeasuresBattery (standard 10) og tager gennemsnittet for at forbedre nøjagtigheden.
  • Afstandsmåling af HC-SR04-P-sensoren udføres i funktionsafstandsmåling. For at forbedre nøjagtigheden gentages målingen numMeasuresDistance (standard 3) gange.
  • Der er en funktion til at beregne speedOfSound ud fra temperatur-, fugtigheds- og trykmåling fra BME280 -sensoren. Standard I2C -adressen for BME280 er 0x76, men hvis det ikke virker, skal du muligvis ændre den til 0x77: bool bme280Started = bme280.begin (0x77);
  • Vi bruger BME280 i tvungen tilstand, hvilket betyder, at den tager en måling og går i dvale for at spare strøm.
  • Hvis du indstiller kapacitet (l), fullDistance (cm) og areal (m2), beregner koden det resterende volumen af vandtanken ud fra afstandsmåling: dobbelt leftVolume = kapacitet+10,0*(fullDistance-distance)*areal; og upload dette til ThingSpeak. Hvis du beholder standardværdierne, uploader du afstanden til vandoverfladen i cm.

Trin 6: Opbygning af det elektroniske kredsløb

Bygger det elektroniske kredsløb
Bygger det elektroniske kredsløb

Ovenfor er diagrammet over det elektroniske kredsløb. Det er ret stort for et brødbræt, især med den overdimensionerede adapterplade og tricket med de U-formede ledninger. På et tidspunkt ville jeg bestemt ønske, at jeg havde brugt alternativet til at forbinde to brødbrætter, men i sidste ende lykkedes det mig.

Her er de vigtige funktioner i kredsløbet:

  • Der er to spændinger, der spiller en rolle: Indgangsspændingen fra batteriet (omkring 3,75V) og den 3,3V, der føder ESP8266 og BME280. Jeg satte 3,3V på venstre skinne af opslagstavlen og 3,75V på den højre skinne. Spændingsregulatoren konverterer 3,75V til 3,3V. Efter instruktionerne i databladet tilføjede jeg 1 μF kondensatorer til input og output af spændingsregulatoren for at øge stabiliteten.
  • GPIO15 i ESP8266 er forbundet til transistorens port. Dette gør det muligt for ESP8266 at tænde transistoren og dermed ultralydssensoren, når den er aktiv og slukke den, når den går i dyb søvn.
  • GPIO14 er forbundet til en switch, OTA -kontakten. Lukning af kontakten giver signalet til ESP8266, vi vil starte i OTA-tilstand næste, dvs. efter at vi har trykket på (luk og åbnet) RESET-kontakten og uploader en ny skitse over luften.
  • RST- og GPIO2 -benene er forbundet som i programmeringsdiagrammet. RST -stiften er nu også forbundet til GPIO16, så ESP8266 kan vågne op af dyb søvn.
  • Stifterne TRIG og ECHO på ultralydssensoren er forbundet til GPIO12 og GPIO13, mens stifterne SCL og SDA i BME280 er forbundet til GPIO5 og GPIO4.
  • Endelig er den analoge pin ADC via en spændingsdeler forbundet til indgangsspændingen. Dette gør det muligt at måle indgangsspændingen for at kontrollere opladningen af batterierne. ADC -stiften kan måle spændinger mellem 0V og 1V. Til spændingsdeleren valgte vi modstande på 100K og 470K. Det betyder, at spændingen ved ADC -stiften er givet ved: V_ADC = 100K/(100K+470K) V_in. Ved at tage V_ADC = 1V betyder det, at vi kan måle indgangsspændinger op til V_in = 570/100 V_ADC = 5,7V. Med hensyn til strømforbrug lækker der også en vis strøm gennem spændingsdeleren. Med V_in = 3.75V fra batterierne finder vi I_leak = 3.75V/570K = 6.6 μA.

Selv når kredsløbet kører fra batterier, er det muligt at tilslutte USB til seriel adapter. Bare sørg for at tage VCC -stikket ud af adapteren og tilslutte GND, RX og TX som i programmeringsdiagrammet. Dette gør det muligt at åbne Serial Monitor i Arduino IDE for at læse fejlfindingsmeddelelser og sikre, at alt fungerer som forventet.

For hele kredsløbet målte jeg et strømforbrug på 50 μA i dyb søvn, når jeg kørte fra batterier. Dette inkluderer ESP8266, BME280, ultralydssensoren (slukket af transistoren) og lækage gennem spændingsdeleren og måske andre lækager. Så det er ikke så slemt!

Jeg fandt ud af, at den samlede aktive tid er cirka 7 sekunder, heraf 4,25 sekunder at oprette forbindelse til Wifi og 1,25 sekunder for at sende dataene til ThingSpeak. Så med en aktiv strøm på 80mA fandt jeg 160 μAh i timen for den aktive tid. Tilføjelse af 50 μAh i timen for tilstanden med dyb søvn har vi i alt 210 μAh i timen. Det betyder, at 2600 mAh batterier teoretisk set varer 12400 timer = 515 dage. Dette er det absolutte maksimum, hvis vi kunne bruge batteriernes fulde kapacitet (hvilket ikke er tilfældet), og der er ingen lækager, som jeg ikke fandt med mine nuværende målinger. Så jeg har endnu ikke set, om det virkelig løser sig.

Trin 7: Afslutning af sensoren

Afslutning af sensoren
Afslutning af sensoren
Afslutning af sensoren
Afslutning af sensoren
Afslutning af sensoren
Afslutning af sensoren

Jeg lagde sensoren i en plastbeholder på 1 liter, som plejede at indeholde suppe. I bunden lavede jeg to huller, så de passede til "øjnene" på HC-SR04-P sensoren. Bortset fra hullerne skal beholderen være vandtæt. Det er derefter fastgjort til væggen i vandtanken med en cirkulær ring, der normalt bruges til et regnvandsledningsrør.

God fornøjelse med projektet!

Anbefalede: