- Komponentai
- Ultragarso jutiklio modulis
- Automatinio vandens lygio valdiklio darbas
- Grandinės schema ir paaiškinimas
- Programavimas
Šiame „ Arduino“ pagrįstame automatiniame vandens lygio indikatoriaus ir valdiklio projekte vandens lygį matuosime naudodami ultragarsinius jutiklius. Pagrindinis ultragarsinio atstumo matavimo principas yra pagrįstas ECHO. Kai garso bangos yra perduodamos aplinkoje, jos, atsitrenkusios į bet kokią kliūtį, grįžta į ECHO buvimo vietą. Taigi mes turime tik apskaičiuoti jo kelionės laiką, kai abu garsai reiškia išeinantį laiką ir grįžimo laiką į pradinę vietą, smūgiuodami į bet kurią kliūtį. Po tam tikro skaičiavimo galime gauti rezultatą, kuris yra atstumas. Ši koncepcija naudojama mūsų vandens valdiklio projekte, kai vandens variklio siurblys automatiškai įsijungia, kai vandens lygis rezervuare tampa žemas. Taip pat galite patikrinti šią paprastą vandens lygio indikatoriaus grandinę, kad būtų pateikta paprastesnė šio projekto versija.
Komponentai
- Arduino Uno
- Ultragarsinis jutiklio modulis
- 16x2 LCD ekranas
- Relė 6 voltai
- ULN2003
- 7806
- PVT
- Varinė viela
- 9 voltų baterija arba 12 voltų adapteris
- Jungiamieji laidai
Ultragarso jutiklio modulis
Ultragarsinis jutiklis HC-SR04 naudojamas matuojant atstumą nuo 2 cm iki 400 cm 3 mm tikslumu. Jutiklio modulį sudaro ultragarso siųstuvas, imtuvas ir valdymo grandinė.
Ultragarso jutiklių modulis veikia natūralų ECHO garso reiškinį. Pulsas siunčiamas maždaug 10 us, kad suaktyvintų modulį. Po to modulis automatiškai siunčia 8 40 KHz ultragarso signalo ciklus ir patikrina jo aidą. Po smūgio kliūtimi signalas grįžta atgal ir jį užfiksuoja imtuvas. Taigi kliūties atstumas nuo jutiklio paprasčiausiai apskaičiuojamas pagal formulę, pateiktą kaip
Atstumas = (laikas x greitis) / 2.
Čia mes padalijome greičio ir laiko sandaugą iš 2, nes laikas yra bendras laikas, kurio prireikė norint pasiekti kliūtį ir grįžti atgal. Taigi kliūčiai pasiekti reikia tik pusės viso laiko.
Automatinio vandens lygio valdiklio darbas
Šio projekto įgyvendinimas yra labai paprastas. Mes panaudojome ultragarso jutiklių modulį, kuris siunčia garso bangas vandens rezervuare ir nustato garso bangų atspindį, kuris yra ECHO. Pirmiausia turime suaktyvinti ultragarso jutiklio modulį perduoti signalą naudojant „Arduino“ ir palaukti, kol gausime ECHO. „Arduino“ nuskaito laiką nuo ECHO sukėlimo ir gavimo. Mes žinome, kad garso greitis yra apie 340 m / s. taigi mes galime apskaičiuoti atstumą pagal pateiktą formulę:
Atstumas = (kelionės laikas / 2) * garso greitis
Kur garso greitis yra maždaug 340 m per sekundę.
Naudodami šiuos metodus, gauname atstumą nuo jutiklio iki vandens paviršiaus. Po jo turime apskaičiuoti vandens lygį.
Dabar turime apskaičiuoti bendrą vandens rezervuaro ilgį. Žinodami vandens rezervuaro ilgį, galime apskaičiuoti vandens lygį atimdami ultragarso atstumą iš bendro rezervuaro ilgio. Ir gausime vandens lygio atstumą. Dabar mes galime konvertuoti šį vandens lygį į vandens procentą ir parodyti jį LCD ekrane. Viso vandens lygio indikatoriaus projekto darbas parodytas žemiau esančioje blokinėje diagramoje.
Grandinės schema ir paaiškinimas
Kaip parodyta žemiau pateiktoje vandens lygio valdiklio grandinėje, ultragarso jutiklio modulio „gaiduko“ ir „aido“ kaiščiai yra tiesiogiai prijungti prie „arduino“ 10 ir 11 kaiščių. 16x2 skystųjų kristalų ekranas yra sujungtas su „arduino“ 4 bitų režimu. Valdymo kaištis RS, RW ir En yra tiesiogiai prijungtas prie „arduino“ kaiščių 7, GND ir 6. O duomenų kaištis D4-D7 prijungtas prie 5, 4, 3 ir 2 arduino, o garsinis signalas prijungtas prie 12 kaiščių. taip pat prijungtas prie „ arduino“ 8 kaiščio per ULN2003, norint įjungti arba išjungti vandens variklio siurblį. Įtampos reguliatorius 7805 taip pat naudojamas 5 voltų tiekimui relei ir likusiai grandinei.
Šioje grandinėje ultragarso jutiklio modulis yra demonstruojamas kibiro (vandens rezervuaro) viršuje. Šis jutiklio modulis nuskaitys atstumą tarp jutiklio modulio ir vandens paviršiaus ir parodys atstumą LCD ekrane su pranešimu „Vandens erdvė rezervuare yra:“. Tai reiškia, kad mes čia rodome tuščią vandens atstumo ar tūrio vietą, o ne vandens lygį. Dėl šios funkcijos mes galime naudoti šią sistemą bet kuriame vandens rezervuare. Kai tuščias vandens lygis pasiekia maždaug 30 cm atstumą, „Arduino“ įjungia vandens siurblį važiuodamas relė. Dabar skystųjų kristalų ekrane bus rodoma „Žemas vandens lygis“ „Variklis įjungtas“, o relės būsenos šviesos diodas pradės šviesti
Dabar, jei tuščia vieta pasiekia maždaug 12 cm atstumą, „arduino“ išjungia relę, o skystųjų kristalų ekrane bus rodoma „Tankas pilnas“, „Variklis išjungtas“. Buzzer taip pat kurį laiką pypteli ir relės būsenos šviesos diodas išsijungs.
Programavimas
Norėdami užprogramuoti „Arduino“ vandens lygio valdikliui, pirmiausia nustatome visus kaiščius, kuriuos naudosime projekte išorinių įrenginių, tokių kaip relė, LCD, garsinis signalas ir kt., Sąsajai.
#define trigeris 10 #define echo 11 #define motor 8 #define zummer 12
Tada mes inicijuojame visus projekte naudojamus įrenginius.
lcd.prade (16,2); pinMode (trigeris, OUTPUT); pinMode (aidas, INPUT); pinMode (variklis, OUTPUT); pinMode (zumeris, OUTPUT); lcd.print ("Vandens lygis"); lcd.setCursor (0,1); lcd.print ("indikatorius"); vėlavimas (2000);
Dabar inicializuokite ultragarso jutiklio modulį ir naudodami „pulseIn“ (kaištį) skaitykite ultragarso bangų ar garso siuntimo ir priėmimo laiką. Tada atlikite skaičiavimus ir naudodami atitinkamas funkcijas parodykite rezultatą 16x2 LCD ekrane.
„digitalWrite“ (aktyviklis, AUKŠTAS); vėlavimasMikrosekundės (10); „digitalWrite“ (trigeris, LOW); vėlavimasMikrosekundės (2); laikas = pulseIn (aidas, AUKŠTAS); atstumas = laikas * 340/20000; lcd.clear (); lcd.print („Vandens erdvė“); lcd.setCursor (0,1); lcd.print ("Tankas yra:"); lcd.print (atstumas); lcd.print ("Cm");
Po to mes patikriname sąlygas, ar vandens bakas yra pilnas, ar vandens lygis yra žemas, ir atitinkamai imamės veiksmų.
if (atstumas <12 && temp == 0) {digitalWrite (variklis, LOW); „digitalWrite“ (garsinis signalas, AUKŠTAS); lcd.clear (); lcd.print („Vandens bakas pilnas“); lcd.setCursor (0,1); lcd.print ("Variklis išjungtas"); vėlavimas (2000); digitalWrite (zumeris, LOW); vėlavimas (3000); temp = 1; } else if (atstumas <12 && temp == 1) {digitalWrite (variklis, LOW); lcd.clear (); lcd.print („Vandens bakas pilnas“); lcd.setCursor (0,1); lcd.print ("Variklis išjungtas"); vėlavimas (5000); }