Turinys:

„Pool Pi Guy“- AI valdoma signalizacijos sistema ir baseino stebėjimas naudojant „Raspberry Pi“: 12 žingsnių (su nuotraukomis)
„Pool Pi Guy“- AI valdoma signalizacijos sistema ir baseino stebėjimas naudojant „Raspberry Pi“: 12 žingsnių (su nuotraukomis)

Video: „Pool Pi Guy“- AI valdoma signalizacijos sistema ir baseino stebėjimas naudojant „Raspberry Pi“: 12 žingsnių (su nuotraukomis)

Video: „Pool Pi Guy“- AI valdoma signalizacijos sistema ir baseino stebėjimas naudojant „Raspberry Pi“: 12 žingsnių (su nuotraukomis)
Video: Part 3 - Triplanetary Audiobook by E. E. Smith (Chs 9-12) 2024, Liepa
Anonim
„Pool Pi Guy“- AI varoma signalizacijos sistema ir baseino stebėjimas naudojant „Raspberry Pi“
„Pool Pi Guy“- AI varoma signalizacijos sistema ir baseino stebėjimas naudojant „Raspberry Pi“

Turėti baseiną namuose yra smagu, tačiau tenka didelė atsakomybė. Didžiausias mano rūpestis yra stebėti, ar kas nors yra šalia baseino be priežiūros (ypač jaunesni vaikai). Didžiausias mano susierzinimas yra užtikrinti, kad baseino vandens linija niekada nenukristų žemiau siurblio įėjimo, todėl siurblys būtų sausas ir sunaikintas, o jo remontas kainuoja $ $ $.

Neseniai supratau, kaip naudoti „Raspberry Pi“su „OpenCV“ir „TensorFlow“kartu su vandens lygio jutikliu ir solenoidiniu vožtuvu, kad būtų išspręstos abi problemos - ir smagiai tai padaryti!

Pasirodo, tai taip pat puiki signalizacijos sistema - judesiu aktyvuota, dirbtinio intelekto valdoma, be galo pritaikoma.

Pasinerkime.

1 žingsnis: Didysis planas

Šioje instrukcijoje parodysime, kaip:

  1. Nustatykite „Raspberry Pi“naudodami „OpenCV“ir „TensorFlow“
  2. Prijunkite internetinę kamerą per ilgą USB kabelį
  3. Parašykite „OpenCV“algoritmą judesiui aptikti
  4. Norėdami aptikti objektą, naudokite „TensorFlow“
  5. „Raspberry Pi“nustatykite žiniatinklio serverį, kad būtų rodomi įdomūs vaizdai
  6. Integruokite su IFTTT, kad suaktyvintų įspėjimus mobiliesiems, jei asmuo būtų aptiktas
  7. Pritvirtinkite relės skrybėlę prie Raspberry Pi ir prijunkite ją prie solenoidinio vožtuvo, kuris pridėtų vandens į baseiną
  8. Pritvirtinkite vandens lygio jutiklį prie „Raspberry Pi“ir susiekite su juo naudodami „Pi“GPIO
  9. Parašykite kodą, kad viską suklijuotumėte

2 žingsnis: pirkinių sąrašas

Prekių sąrašas
Prekių sąrašas

Visi komponentai yra lengvai prieinami iš „Amazon“. Nesivaržykite eksperimentuoti ir keistis komponentais - tai pusė malonumo!

  1. Raspberry Pi
  2. „Raspberry Pi“maitinimo šaltinis (čia netaupykite)
  3. Atminties kortelė (kuo didesnė, tuo geriau)
  4. Dėklas (šis yra pakankamai didelis, kad tilptų ir „Pi“, ir „HAT“)
  5. USB žiniatinklio kamera (tinka bet kuri internetinė kamera, bet norite tokios, kuri gautų gerus vaizdus ir gerai subalansuotų apšvietimą)
  6. USB ilginamasis kabelis (jei reikia - išmatuokite atstumą tarp „Pi“ir vietos, kur įdėsite fotoaparatą)
  7. Relės plokštė HAT (šioje yra 3 relės, ir mums reikia tik vienos, tačiau netrukus rasite kitų naudojimo būdų!)
  8. Solenoidas
  9. Solenoido jungtis 1 ir jungtis 2 (tai tikrai priklauso nuo to, prie ko priderinsite solenoidą, bet man tai tiko)
  10. Solenoidinis maitinimo šaltinis (tinka bet kuri 24 V kintamoji srovė)
  11. Kabelis (vėlgi, tinka beveik bet kuris 2 -jų laidų kabelis - srovė yra minimali)
  12. Vandens lygio plūdinis jungiklis (tai tik pavyzdys, patikrinkite, ką galima lengvai prijungti prie baseino)
  13. Kai kurie trumpikliai ir laidų jungtys

3 žingsnis: nustatykite „Raspberry Pi“

Nustatykite „Raspberry Pi“
Nustatykite „Raspberry Pi“

„Raspberry Pi“yra puikus kompiuteris. Jis kainuoja tik 35 USD, veikia nuosekliai ir turi daug suderinamos programinės ir techninės įrangos. Jį nustatyti yra gana paprasta:

  1. Formatuokite savo SD kortelę. Tam reikia ypatingos priežiūros - „Raspberry Pi“gali paleisti tik iš FAT formato SD kortelės. Vykdykite šias instrukcijas.
  2. Prijunkite „Raspberry Pi“prie USB klaviatūros ir pelės bei HDMI ekrano ir vykdykite „Raspberry Pi NOOBS“pamokoje pateiktas instrukcijas. Būtinai nustatykite „WiFi“ir įgalinkite SSH prieigą. Nepamirškite nustatyti numatytosios pi paskyros slaptažodžio.
  3. Namų tinkle nustatykite statinį „Raspberry Pi“IP - tai žymiai palengvins prisijungimą prie SSH.
  4. Įsitikinkite, kad darbalaukyje/nešiojamame kompiuteryje įdiegtas ssh klientas. Kompiuteriui rekomenduočiau „Putty“, kurį galite įdiegti iš čia.
  5. Atjunkite USB ir HDMI nuo Raspberry Pi, iš naujo paleiskite ir įjunkite SSH - jei viskas veikė, turėtumėte pamatyti kažką panašaus:

Linux raspberrypi 4.14.98-v7+ #1200 SMP Antradienis, vasario 12 d. 20:27:48 GMT 2019 armv7l

Programos, įtrauktos į „Debian GNU/Linux“sistemą, yra nemokama programinė įranga; tikslios kiekvienos programos platinimo sąlygos aprašytos atskiruose failuose, esančiuose/usr/share/doc/*/copyright. „Debian GNU/Linux“suteikiama be jokių garantijų, kiek tai leidžia galiojantys įstatymai. Paskutinis prisijungimas: pirmadienis, gegužės 13 d. 10:41:40 2019 m. Nuo 104.36.248.13 pi@raspberrypi: ~ $

4 veiksmas: nustatykite „OpenCV“

Nustatykite „OpenCV“
Nustatykite „OpenCV“

„OpenCV“yra nuostabi vaizdų manipuliavimo funkcijų, skirtų kompiuterio regėjimui, kolekcija. Tai leis mums skaityti vaizdus iš žiniatinklio kameros, manipuliuoti jais, kad rastume judesio sritis, išsaugotume jas ir dar daugiau. „Raspberry Pi“sąranka nėra sudėtinga, tačiau reikalauja tam tikros priežiūros.

Pradėkite diegdami „virtaulenvwrapper“: mes naudosime „python“, kad atliktume visus savo programavimus, o „virtualenv“padėtų mums atskirti „OpenCV“ir „TensorFlow“prieš „Flask“arba GPIO priklausomybes:

pi@raspberrypi: ~ $ sudo pip install virtualenvwrapper

Dabar galite paleisti „mkvirtualenv“, kad sukurtumėte naują aplinką, „workon“, kad galėtumėte dirbti su ja ir dar daugiau.

Taigi, sukurkime aplinką, kad galėtume manipuliuoti vaizdais, naudodami „python 3“kaip numatytąjį vertėją (tai 2019 m., Nėra jokios priežasties laikytis senesnio python 2):

pi@raspberrypi: ~ $ mkvirtualenv cv -p python3

… (Cv) pi@raspberrypi: ~

Dabar esame pasirengę įdiegti „OpenCV“. Dažniausiai laikysimės puikios mokymo programos „Learn OpenCV“. Tiksliau atlikite jų 1 ir 2 veiksmus:

sudo apt -y updates sud dev libpng12-dev sudo apt-get -y install libtiff5-dev sudo apt-get -y install libtiff-dev sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev sudo apt-get- y įdiegti libxine2-dev libv4l-dev cd/usr/include/linux sudo ln -s -f../libv4l1-videodev.h videodev.h sudo apt-get -y install libgstreamer0.10-dev libgstreamer-plugins-base0. 10-dev sudo apt-get -y install libgtk2.0-dev libtbb-dev qt5-default sudo apt-get -y install libatlas-base-dev sudo apt-get -y install libmp3lame-dev libtheora-dev sudo apt-get -y install libvorbis-dev libxvidcore-dev libx264-dev sudo apt-get -y install libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get -y install libavresample-dev sudo apt-get -y install x264 v4l-utils sudo apt -get -y įdiegti libprotobuf -dev protobuf-compiler sudo apt-get -y install libgoogle-glog-dev libgflags-dev sudo apt-get -y install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen sudo apt-get install libqtgui4 sudo apt-get install libqt4- testas

Dabar galime tiesiog įdiegti „OpenCV“su „python“įrišimais cv virtualenv viduje (jūs vis dar jame, tiesa?) Naudodami

pip įdiegti opencv-contrib-python

Štai ir viskas! „Raspberry Pi“įdiegta „OpenCV“, paruošta fotografuoti ir filmuoti, manipuliuoti jais ir būti šauniam.

Patikrinkite, ar atidarote „python“vertėją ir importuojate „opencv“, ir patikrinkite, ar nėra klaidų:

(cv) pi@raspberrypi: ~ $ python

„Python 3.5.3“(numatytasis, 2018 m. Rugsėjo 27 d., 17:25:39) [GCC 6.3.0 20170516] „Linux“tipas „Pagalba“, „autorių teisės“, „kreditai“arba „licencija“, jei norite gauti daugiau informacijos. >>> importuoti cv2 >>>

5 veiksmas: nustatykite „TensorFlow“

Nustatykite „TensorFlow“
Nustatykite „TensorFlow“

„TensorFlow“yra mašinų mokymosi / dirbtinio intelekto sistema, sukurta ir prižiūrima „Google“. Jis plačiai palaiko giliai besimokančius modelius įvairioms užduotims, įskaitant objektų aptikimą vaizduose, ir dabar yra gana paprasta įdiegti „Raspberry Pi“. Jo lengvų modelių našumas mažame „Pi“yra maždaug 1 kadras per sekundę, o tai visiškai pakanka tokiai programai kaip mūsų.

Mes iš esmės laikysimės puikios „Edje Electronics“mokymo programos su pakeitimais, kuriuos leido atlikti naujesni „TensorFlow“paskirstymai:

pi@raspberrypi: ~ $ workon cv

(cv) pi@raspberrypi: ~ $ pip install tensorflow (cv) pi@raspberrypi: ~ $ sudo apt-get install libxml2-dev libxslt-dev (cv) pi@raspberrypi: ~ $ pip install pagalvė lxml jupyter matplotlib cython (cv) pi@raspberrypi: ~ $ sudo apt-get install python-tk

Dabar turime surinkti „Google“protobufą. Tiesiog vykdykite to paties puikaus vadovo 4 veiksmo instrukcijas

Galiausiai klonuokite ir nustatykite „TensorFlow“modelio apibrėžimus - atlikite „Edje Electronics“vadovėlio 5 veiksmą

Nesivaržykite sekti jų pavyzdžiu ir 6 veiksme, tai puikus įvadas į „Raspberry Pi“objektų aptikimą.

6 veiksmas: judesio aptikimas naudojant „OpenCV“

Pradėkime nuo bandymo, ar „OpenCV“gali sąveikauti su mūsų kamera: ssh į „Raspberry Pi“, pereikite prie cv virtualenv (workon cv), atidarykite „python“vertėją (tiesiog įveskite „python“) ir įveskite šias „python“komandas:

importuoti cv2

cap = cv2. VideoCapture (0) cap.set (cv2. CAP_PROP_FRAME_WIDTH, 1920) cap.set (cv2. CAP_PROP_FRAME_HEIGHT, 1080) ret, frame = cap.read () print ('Skaityti kadro dydis: {} x {}'.formatas (frame.shape [1], frame.shape [0])

Jei pasiseks, pamatysite, kad „OpenCV“sugebėjo nuskaityti HD kadrą iš fotoaparato.

Galite naudoti cv2.imwrite (kelią, rėmelį), kad įrašytumėte tą kadrą į diską ir sftp jį atgal, kad iš tikrųjų atrodytumėte.

Judėjimo aptikimo strategija yra gana paprasta:

  1. Dirbkite su mažesnės skiriamosios gebos rėmeliais - čia nereikia veikti „Full HD“
  2. Be to, neryškinkite vaizdus, kad būtų kuo mažiau triukšmo.
  3. Laikykite paskutinių N kadrų vidurkį. Šios programos atveju, kai kadrų dažnis yra maždaug 1 FPS (tik todėl, kad „TensorFlow“užima šiek tiek laiko kiekvienam kadrui), radau, kad N = 60 pateikia gerus rezultatus. Ir kadangi kruopštus įgyvendinimas nereikalauja daugiau procesoriaus su daugiau kadrų, tai yra gerai (tai užima daugiau atminties, bet tai yra nereikšminga, kai dirbame su mažesnės skiriamosios gebos rėmeliais)
  4. Atimkite dabartinį vaizdą iš einamojo vidurkio (tik būkite atsargūs rašydami - turite leisti teigiamas ir neigiamas reikšmes [-255.. 255], todėl kadrą reikia konvertuoti į int)
  5. Galite atlikti atėmimą iš rėmelio (ir vidurkio) pilkosios skalės konversijos arba padaryti tai atskirai kiekvienam RGB kanalui ir tada sujungti rezultatus (tokią strategiją pasirinkau, kad ji būtų jautri spalvų pokyčiams)
  6. Naudokite slenkstį deltoje ir pašalinkite triukšmą erozijos ir išsiplėtimo būdu
  7. Galiausiai ieškokite sričių kontūrų su delta - šiose srityse įvyko judėjimas, o dabartinis vaizdas skiriasi nuo ankstesnių vaizdų vidurkio. Jei reikia, galime rasti šių kontūrų ribojimo dėžutes.

Aš įtraukiau kodą, kaip tai padaryti, „DeltaFinder“python klasėje, kurią galite rasti mano „github“čia

7 žingsnis: aptikti objektus naudojant „TensorFlow“

Jei atlikote „TensorFlow“diegimo procedūrą, jau išbandėte, ar „TensorFlow“įdiegta ir veikia.

Siekiant aptikti žmones bendroje lauko scenoje, modeliai, kurie yra iš anksto apmokyti naudoti COCO duomenų rinkinį, veikia gana gerai - būtent tokį modelį mes atsisiuntėme diegdami „TensorFlow“. Mums tereikia jį panaudoti išvadoms!

Vėlgi, aš palengvinau modelio įkėlimą ir išvadas „TFClassify python“klasėje, kurią galite rasti čia.

8 veiksmas: nustatykite žiniatinklio serverį „Raspberry Pi“

„Raspberry Pi“nustatykite žiniatinklio serverį
„Raspberry Pi“nustatykite žiniatinklio serverį

Lengviausias būdas pasiekti objektų aptikimo rezultatus yra žiniatinklio naršyklė, todėl nustatykime žiniatinklio serverį „Raspberry Pi“. Tada galime nustatyti, kad būtų pateiktos nuotraukos iš nurodyto katalogo.

Yra daug žiniatinklio serverio sistemos variantų. Aš pasirinkau kolbą. Tai labai konfigūruojama ir lengva išplėsti naudojant „Python“. Kadangi mums reikalinga „skalė“yra triviali, jos buvo daugiau nei pakankamai.

Siūlau jį įdiegti naujame „virtualenv“, taigi:

pi@raspberrypi: ~ $ mkvirtualenv webserv

(webservisas) pi@raspberrypi: ~ $ pip install Flask

Atminkite, kad su įprastu tinklo sąranka jis bus pasiekiamas tik tada, kai jūsų naršyklė yra tame pačiame belaidyje LAN kaip ir jūsų „Raspberry Pi“. Savo interneto maršrutizatoriuje galite sukurti prievadų atvaizdavimo / NAT konfigūraciją, kad galėtumėte pasiekti išorę, tačiau aš rekomenduoju to nedaryti. Mano parašytas kodas nesiekia užtikrinti saugumo, kurio jums prireiktų leidžiant bendrą prieigą prie jūsų Raspberry Pi interneto.

Išbandykite diegimą vadovaudamiesi greitosios pradžios kolbos vadovu

9 veiksmas: mobilieji pranešimai iš „Raspberry Pi“naudojant IFTTT

Mobilieji pranešimai iš „Raspberry Pi“naudojant IFTTT
Mobilieji pranešimai iš „Raspberry Pi“naudojant IFTTT

Aš tikrai noriu gauti pranešimus mobiliesiems, kai įvyksta įvykiai. Šiuo atveju, kai aptinkamas žmogus ir kai vandens lygis nukrenta žemai. Paprasčiausias būdas, kurį radau, nerašydamas pasirinktinės programos mobiliesiems, yra IFTTT. IFTTT reiškia „Jei tai tada“ir leidžia daugelio tipų įvykiams suaktyvinti daugelio tipų veiksmus. Mūsų atveju mus domina „IFTTT Maker Webhook“aktyviklis. Tai leidžia mums suaktyvinti IFTTT veiksmą pateikdami HTTP POST užklausą IFTTT serveriui su specialiu mūsų paskyrai priskirtu raktu kartu su duomenimis, kurie nurodo, kas atsitiko. Veiksmas, kurį mes atliekame, gali būti toks paprastas kaip pranešimo sukūrimas mobiliajame įrenginyje naudojant IFTTT programą mobiliesiems arba bet kas sudėtingesnis.

Štai kaip tai padaryti:

  1. Sukurkite IFTTT paskyrą svetainėje ifttt.com
  2. Prisijungę eikite į „Webhook“paslaugos nustatymų puslapį ir įveskite URL į savo naršyklę (pvz., Https://maker.ifttt.com/use/. Tame tinklalapyje bus parodytas jūsų raktas ir URL, kuriuos reikia naudoti norint suaktyvinti veiksmus.
  3. Sukurkite IFTTT programėlę, kuri sugeneruos pranešimą mobiliesiems, kai bus suaktyvintas „Webhook“su išsamia įvykio informacija:

    1. Spustelėkite „Mano programėlės“, tada - „Nauja programėlė“.
    2. Spustelėkite „+tai“ir pasirinkite „žiniatinklio kabliukai“. Norėdami pereiti prie išsamios informacijos, spustelėkite „Gauti žiniatinklio užklausą“
    3. Suteikite savo renginiui pavadinimą, pvz. „PoolEvent“ir spustelėkite „Create trigger“
    4. Spustelėkite „+“ir pasirinkite „pranešimai“. Tada pasirinkite „Siųsti turtingą pranešimą iš IFTTT programos“
    5. „Pavadinimui“pasirinkite kažką panašaus į „PoolPi“
    6. Norėdami "pranešimą" parašyti "Pool Pi aptikta:" ir spustelėkite "pridėti ingredientą".. "Value1".
    7. Grįžkite prie URL, kurį nukopijavote atlikdami 2 veiksmą. Jame bus rodomas URL, kurį reikia panaudoti naujai sukurtai programėlei iškviesti. Nukopijuokite tą URL, pakeisdami vietos rezervavimo ženklą {event} įvykio pavadinimu (pavyzdyje PoolEvent)
  4. Atsisiųskite, įdiekite ir prisijunkite prie IFTTT programos savo mobiliajam įrenginiui
  5. Paleiskite šį „Python“scenarijų savo „Raspberry Pi“, kad pamatytumėte, kaip jis veikia (atminkite, kad gali užtrukti kelias sekundes ar minutes, kol suaktyvės jūsų mobiliajame įrenginyje):

importo užklausų

request.post ('https://maker.ifttt.com/trigger/PoolEvent/with/key/', json = {"value1": "Sveiki pranešimai"})

10 veiksmas: pridėkite relės skrybėlę prie „Raspberry Pi“ir prijunkite ją prie solenoidinio vožtuvo

Pridėkite relės skrybėlę prie Raspberry Pi ir prijunkite ją prie solenoidinio vožtuvo
Pridėkite relės skrybėlę prie Raspberry Pi ir prijunkite ją prie solenoidinio vožtuvo
Pridėkite relės skrybėlę prie Raspberry Pi ir prijunkite ją prie solenoidinio vožtuvo
Pridėkite relės skrybėlę prie Raspberry Pi ir prijunkite ją prie solenoidinio vožtuvo
Pridėkite relės skrybėlę prie Raspberry Pi ir prijunkite ją prie solenoidinio vožtuvo
Pridėkite relės skrybėlę prie Raspberry Pi ir prijunkite ją prie solenoidinio vožtuvo

Prieš atlikdami šį veiksmą IŠJUNKITE „Raspberry Pi“: ssh ir įveskite „sudo shutdown now“, tada atjunkite jį nuo maitinimo

Mūsų tikslas yra įjungti ir išjungti solenoidinio vožtuvo maitinimą - vožtuvą, kuris gali atidaryti arba uždaryti vandens tiekimą pagal 24 V kintamosios srovės maitinimą, kurį jis gauna iš maitinimo šaltinio. Relės yra elektriniai komponentai, galintys atidaryti arba uždaryti grandinę pagal skaitmeninį signalą, kurį gali suteikti mūsų „Raspberry Pi“. Tai, ką mes čia darome, yra prijungti relę prie šių „Raspberry Pi“skaitmeninių signalų kaiščių ir uždaryti grandinę tarp 24 V kintamosios srovės maitinimo šaltinio ir solenoidinio vožtuvo.

„Raspberry Pi“kaiščiai, galintys veikti kaip skaitmeninis įėjimas arba išėjimas, vadinami GPIO - bendrosios paskirties įvestimi/išvestimi ir yra 40 kaiščių eilė „Pi“pusėje. Išjungę „Pi“ir tvirtai į jį įkiškite relės skrybėlę. Mano pasirinktoje skrybėlėje yra 3 relės, ir mes naudosime tik vieną iš jų. Įsivaizduokite, ką galite padaryti su kitais dviem:)

Dabar vėl įjunkite „Raspberry Pi“. Rele HAT turėtų įsijungti raudonas „maitinimo“šviesos diodas, rodantis, kad jis gauna energiją iš „Pi“per GPIO. Išbandykime, ar galime jį valdyti: ssh vėl į Pi, įveskite python ir įveskite:

importuoti „gpiozero“

dev = gpiozero. DigitalOutputDevice (26, original_value = True) dev.off ()

Turėtumėte išgirsti garsinį spragtelėjimą, rodantį, kad relė įjungta, ir pamatyti, kaip įsijungia šviesos diodas, rodantis, kad pirmoji relė yra prijungtoje padėtyje. Dabar galite įvesti

dev.on ()

Tai pakeistų relę į „išjungtą“padėtį (keista, žinau …) ir išeitų () iš „python“.

Dabar, naudodami trumpiklius ir ilgesnį kabelį, prijunkite relę tarp 24 V maitinimo šaltinio ir solenoidinio vožtuvo. Žiūrėkite diagramą. Galiausiai, naudodami adapterius, prijunkite solenoidinį vožtuvą prie maišytuvo ir pasiruoškite visa tai išbandyti pakartodami aukščiau pateiktas komandas - jie turėtų įjungti ir išjungti vandenį.

Pritvirtinkite žarną prie solenoidinio vožtuvo, o kitą galą įdėkite giliai į baseiną. Dabar turite kompiuteriu valdomą baseino papildymo sistemą ir laikas prijungti jutiklį, kad jis nurodytų, kada paleisti.

11 veiksmas: prijunkite vandens lygio jutiklį

Prijunkite vandens lygio jutiklį
Prijunkite vandens lygio jutiklį
Prijunkite vandens lygio jutiklį
Prijunkite vandens lygio jutiklį
Prijunkite vandens lygio jutiklį
Prijunkite vandens lygio jutiklį
Prijunkite vandens lygio jutiklį
Prijunkite vandens lygio jutiklį

Vandens lygio jutiklis yra tiesiog plūdė, jungianti elektros grandinę, kai plūdė nusileidžia, ir sulaužo ją pakilus. Jei įdėsite jį į baseiną tinkamo aukščio, plūdė pakils, kai vandens lygis bus pakankamas, bet nukris, kai nepakanka vandens.

Kad „Raspberry Pi“žinotų vandens lygio jutiklio būseną, mums reikia „Pi“, kad pajustume atvirą ar uždarą grandinę. Laimei, tai labai paprasta: tos pačios GPIO jungtys, kurias mes naudojame kaip skaitmeninę išvestį relėms valdyti, gali veikti kaip įvestys (taigi I GPIO). Tiksliau, jei vieną jutiklio laidą prijungsime prie +3,3 V GPIO jungties, o kitą jutiklio laidą prie kaiščio, kurį sukonfigūruosime kaip ištraukiamą įvestį (tai reiškia, kad jis paprastai bus GND įtampos lygyje), tas kaištis bus matuojamas skaitmeninė „aukšta“arba „įjungta“įtampa tik tada, kai vandens lygio jutiklis uždaro grandinę - kai vandens lygis yra žemas. Kaip įvestį naudojau GPIO kaištį 16, kurį pažymėjau aukščiau esančiame paveikslėlyje.

Python kodas, skirtas konfigūruoti kaištį kaip įvestį ir patikrinti jo dabartinę būseną, yra toks:

importuoti „gpiozero“

level_input = gpiozero. Mygtukas (16) water_low = level_input.is_pressed

Vienas iš galimų iššūkių yra tas, kad kai jutiklis tiesiog keičia būseną, jis greitai svyruos tarp įjungimo ir išjungimo būsenų. Sprendimas vadinamas „atleidimu“ir prieš imantis veiksmų ieško nuoseklaus būsenos pakeitimo. „GPIOZERO“biblioteka turi kodą tai padaryti, tačiau kažkodėl man tas kodas netinkamai veikė. Parašiau paprastą ciklą, kad suaktyvinčiau IFTTT įspėjimus, kai aptinkamas nuoseklus būsenos pasikeitimas, kurį galite rasti mano saugykloje čia.

12 veiksmas: parašykite kodą, kad susietumėte viską

Parašykite kodą, kad susietumėte viską
Parašykite kodą, kad susietumėte viską

Viskas. Mūsų sąranka baigta. Galite parašyti savo kodą, kad susietumėte dalykus į visą sistemą, arba naudoti mano pateiktą kodą. Norėdami tai padaryti, tiesiog sukurkite katalogo struktūrą ir klonuokite saugyklą, pavyzdžiui:

mkdir poolpi

cd poolpi git klonas

Tada redaguokite failus, pavadintus ifttt_url.txt, kataloguose „motion_alert“ir „water_level“, kad turėtumėte savo IFTTT žiniatinklio kablio URL su slaptu raktu. Skirtingiems veiksmams galite naudoti du skirtingus žiniatinklio kabliukus.

Galiausiai norime, kad šis kodas būtų paleistas automatiškai. Lengviausias būdas tai padaryti yra naudojant „Linux crontab“paslaugą. Galime pridėti keletą „crontab“eilučių dviem pagrindinėms užduotims:

  1. Vykdykite mūsų tris programas: objekto detektorių, vandens lygio jutiklį ir žiniatinklio serverį kiekvieną kartą paleidžiant iš naujo
  2. Išvalykite išvesties katalogą, ištrinkite senas nuotraukas ir senus vaizdo failus (pasirinkau ištrinti senesnius nei 1 dienos failus ir senesnes nei 7 dienų nuotraukas - nedvejodami eksperimentuokite)

Norėdami tai padaryti, įveskite crontab -e, kuris atvers jūsų nano teksto rengyklę. Failo apačioje pridėkite šias eilutes:

0 1 * * * rasti/home/pi/poolpi/output -type f -name " *.avi" -mtime +1 -delete

0 2 * * * rasti/home/pi/poolpi/output -type f -name " *.jpg" -mtime +7 -delete @reboot python3 /home/pi/poolpi/motion_alert/webserv/webserv.py @reboot python3 /home/pi/poolpi/motion_alert/motion_obj_alert.py @reboot python3 /home/pi/poolpi/water_level/test_water_level.py

Galiausiai iš naujo paleiskite „Raspberry Pi“. Dabar jis yra paruoštas, kad jūsų baseinas būtų pilnas ir saugus.

Susitvarkykite su sąranka, kodu ir nepamirškite pažymėti žvaigždute mano „github“saugyklos ir komentuoti nurodymus, jei jums tai naudinga. Aš visada siekiu sužinoti daugiau.

Laimingas kūrimas!

IoT iššūkis
IoT iššūkis
IoT iššūkis
IoT iššūkis

II vieta „IoT Challenge“

Rekomenduojamas: