Satura rādītājs:

Pool Pi Guy - AI vadīta signalizācijas sistēma un baseina uzraudzība, izmantojot Raspberry Pi: 12 soļi (ar attēliem)
Pool Pi Guy - AI vadīta signalizācijas sistēma un baseina uzraudzība, izmantojot Raspberry Pi: 12 soļi (ar attēliem)

Video: Pool Pi Guy - AI vadīta signalizācijas sistēma un baseina uzraudzība, izmantojot Raspberry Pi: 12 soļi (ar attēliem)

Video: Pool Pi Guy - AI vadīta signalizācijas sistēma un baseina uzraudzība, izmantojot Raspberry Pi: 12 soļi (ar attēliem)
Video: Часть 3 - Трипланетная аудиокнига Э. Э. Смита (главы 9–12) 2024, Novembris
Anonim
Pool Pi Guy - AI vadīta signalizācijas sistēma un baseina uzraudzība, izmantojot Raspberry Pi
Pool Pi Guy - AI vadīta signalizācijas sistēma un baseina uzraudzība, izmantojot Raspberry Pi

Baseina izmantošana mājās ir jautra, taču tā ir saistīta ar lielu atbildību. Manas lielākās rūpes ir uzraudzīt, vai kāds atrodas baseina tuvumā bez uzraudzības (īpaši jaunāki bērni). Mans lielākais kaitinājums ir pārliecināties, ka baseina ūdensvads nekad nenokļūst zem sūkņa ieejas, kas sūkni darbinātu sausu un iznīcinātu tā remontu.

Nesen esmu sapratis, kā izmantot Raspberry Pi ar OpenCV un TensorFlow, kā arī ūdens līmeņa sensoru un solenoīda vārstu, lai atrisinātu abas problēmas - un izklaidējieties to darīt!

Izrādās, ka tā ir arī lieliska trauksmes sistēma - kustību aktivizēta, AI kontrolēta, bezgalīgi pielāgojama.

Ienirstam.

1. solis: Lielais plāns

Šajā pamācībā mēs parādīsim, kā:

  1. Iestatiet Raspberry Pi ar OpenCV un TensorFlow
  2. Pievienojiet tīmekļa kameru, izmantojot garu USB kabeli
  3. Uzrakstiet OpenCV algoritmu kustības noteikšanai
  4. Objektu noteikšanai izmantojiet TensorFlow
  5. Iestatiet tīmekļa serveri Raspberry Pi, lai parādītu interesantos attēlus
  6. Integrējiet ar IFTTT, lai aktivizētu brīdinājumus mobilajām ierīcēm gadījumā, ja tiek atklāta persona
  7. Pievienojiet releja HAT Raspberry Pi un pievienojiet to solenoīda vārstam, kas pievienotu baseinam ūdeni
  8. Pievienojiet ūdens līmeņa sensoru Raspberry Pi un saskarieties ar to, izmantojot Pi GPIO
  9. Uzrakstiet kādu kodu, lai to visu salīmētu

2. darbība. Iepirkumu saraksts

Iepirkumu saraksts
Iepirkumu saraksts

Visas sastāvdaļas ir viegli pieejamas vietnē Amazon. Jūtieties brīvi eksperimentēt un apmainīties ar komponentiem - tā ir puse jautrības!

  1. Raspberry Pi
  2. Raspberry Pi barošanas avots (šeit nevajag taupīt)
  3. Atmiņas karte (jo lielāka, jo labāka)
  4. Korpuss (šis ir pietiekami liels, lai ievietotu gan Pi, gan HAT)
  5. USB tīmekļa kamera (derēs jebkura tīmekļa kamera, bet jūs vēlaties tādu, kas uzņem labus attēlus un labi līdzsvaro apgaismojumu)
  6. USB pagarinājuma kabelis (ja nepieciešams - izmēriet attālumu starp Pi un vietu, kur novietosit kameru)
  7. Releju dēlis HAT (šim ir 3 releji, un mums vajag tikai vienu, bet pārējiem jūs atradīsit pielietojumu pietiekami drīz!)
  8. Solenoīds
  9. Solenoīda armatūra 1 un armatūra 2 (tas tiešām ir atkarīgs no tā, kam jūs piestiprināt solenoīdu, bet tie man darbojās)
  10. Solenoīda barošanas avots (derētu jebkurš 24V maiņstrāva)
  11. Kabelis (atkal derētu gandrīz jebkuram 2 dzīslu kabelim - strāva ir minimāla)
  12. Ūdens līmeņa pludiņa slēdzis (tas ir tikai piemērs, pārbaudiet, ko var viegli savienot ar jūsu baseinu)
  13. Daži džemperu vadi un vadu savienotāji

3. darbība: iestatiet savu Raspberry Pi

Iestatiet savu Raspberry Pi
Iestatiet savu Raspberry Pi

Raspberry Pi ir lielisks dators. Tas maksā tikai 35 USD, darbojas nepārtraukti, un tajā ir daudz saderīgas programmatūras un aparatūras. Tās iestatīšana ir diezgan vienkārša:

  1. Formatējiet savu SD karti. Tam nepieciešama īpaša piesardzība - Raspberry Pi var startēt tikai no FAT formatētas SD kartes. Izpildiet šos norādījumus.
  2. Pievienojiet Raspberry Pi USB tastatūrai un pelei, kā arī HDMI displejam un izpildiet Raspberry Pi NOOBS apmācības instrukcijas. Noteikti iestatiet WiFi un iespējojiet SSH piekļuvi. Neaizmirstiet iestatīt paroli noklusējuma pi kontam.
  3. Mājas tīklā iestatot Raspberry Pi statisku IP - tas ievērojami atvieglos SSH ievadīšanu.
  4. Pārliecinieties, vai datorā/klēpjdatorā ir instalēts ssh klients. Personālajam datoram es ieteiktu Putty, kuru varat instalēt no šejienes.
  5. Atvienojiet USB un HDMI no Raspberry Pi, pārstartējiet to un ieslēdziet tajā - ja viss darbojās, jums vajadzētu redzēt kaut ko līdzīgu:

Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l

Programmas, kas iekļautas Debian GNU/Linux sistēmā, ir bezmaksas programmatūra; precīzie katras programmas izplatīšanas noteikumi ir aprakstīti atsevišķos failos mapē/usr/share/doc/*/copyright. Debian GNU/Linux tiek piegādāta BEZ GARANTIJAS, ciktāl to atļauj piemērojamie tiesību akti. Pēdējā pieteikšanās: pirmdien, 13. maijā 10:41:40 2019 no 104.36.248.13 pi@raspberrypi: ~ $

4. darbība: iestatiet OpenCV

Iestatiet OpenCV
Iestatiet OpenCV

OpenCV ir pārsteidzoša attēlu manipulācijas funkciju kolekcija datora redzei. Tas ļaus mums lasīt attēlus no tīmekļa kameras, manipulēt ar tiem, lai atrastu kustības apgabalus, saglabātu tos un daudz ko citu. Iestatīšana Raspberry Pi nav sarežģīta, taču prasa zināmu aprūpi.

Sāciet, instalējot virtaulenvwrapper: mēs izmantosim python, lai veiktu visu mūsu programmēšanu, un virtualenv palīdzētu mums nošķirt atkarības no OpenCV un TensorFlow vs Flask vai GPIO:

pi@raspberrypi: ~ $ sudo pip instalēt virtualenvwrapper

Tagad jūs varat izpildīt "mkvirtualenv", lai izveidotu jaunu vidi, "workon", lai strādātu pie tā un daudz ko citu.

Tātad, izveidosim vidi mūsu attēlu manipulācijām ar python 3 kā noklusējuma tulku (ir 2019. gads, nav pamata palikt pie vecākā python 2):

pi@raspberrypi: ~ $ mkvirtualenv cv -p python3

… (Cv) pi@raspberrypi: ~

Tagad mēs esam gatavi instalēt OpenCV. Mēs galvenokārt sekosim lieliskajai apmācībai vietnē Learn OpenCV. Īpaši izpildiet to 1. un 2. darbību:

sudo apt -y updates sud apt-y upgrade ## Instalēt atkarības sudo apt-get -y install build-essential checkinstall cmake pkg-config yasm sudo apt-get -y install git gfortran sudo apt-get -y install libjpeg8-dev libjasper- 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 instalējiet 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 instalējiet libprotobuf -dev protobuf-kompilators 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- pārbaude

Tagad mēs varam vienkārši instalēt OpenCV ar python saitēm cv virtualenv iekšpusē (jūs joprojām tajā atrodaties, vai ne?), Izmantojot

pip instalējiet opencv-contrib-python

Un tas arī viss! Mūsu Raspberry Pi ir instalēts OpenCV, kas ir gatavs fotoattēlu un video uzņemšanai, manipulēšanai ar tiem un foršam.

Pārbaudiet to, atverot python tulku un importējot opencv, un pārbaudiet, vai nav kļūdu:

(cv) pi@raspberrypi: ~ $ python

Python 3.5.3 (noklusējums, 2018. gada 27. septembris, 17:25:39) [GCC 6.3.0 20170516] par linux Tips "help", "autortiesības", "kredīti" vai "licence", lai iegūtu vairāk informācijas. >>> importēt cv2 >>>

5. darbība: iestatiet TensorFlow

Iestatiet TensorFlow
Iestatiet TensorFlow

TensorFlow ir Google izstrādāta un uzturēta mašīnmācīšanās / AI sistēma. Tam ir plašs atbalsts dziļi apgūstamiem modeļiem dažādiem uzdevumiem, tostarp objektu noteikšanai attēlos, un tagad to ir diezgan vienkārši instalēt Raspberry Pi. Tā vieglo modeļu veiktspēja mazajā Pi ir aptuveni 1 kadrs sekundē, kas ir pilnīgi piemērots tādai lietojumprogrammai kā mūsu.

Mēs pamatā sekosim Edje Electronics izcilajai apmācībai, ar izmaiņām, kas iespējamas, izmantojot jaunākos TensorFlow izplatījumus:

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 spilvens lxml jupyter matplotlib cython (cv) pi@raspberrypi: ~ $ sudo apt-get install python-tk

Tagad mums jāapkopo Google protobuf. Vienkārši izpildiet tās pašas lieliskās apmācības 4. darbības norādījumus

Visbeidzot, klonējiet un iestatiet TensorFlow modeļa definīcijas - izpildiet Edje Electronics apmācības 5. darbību

Jūtieties brīvi sekot viņu piemēram arī 6. darbībā, tas ir lielisks ievads objektu noteikšanā Raspberry Pi.

6. darbība: kustību noteikšana, izmantojot OpenCV

Sāksim, pārbaudot, vai OpenCV var saskarties ar mūsu tīmekļa kameru: ssh Raspberry Pi, pārejiet uz cv virtualenv (workon cv), atveriet python tulku (vienkārši ierakstiet python) un ievadiet šādas python komandas:

importēt 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 ('Lasīt rāmja izmēru: {} x {}'.format (frame.shape [1], frame.shape [0])

Ar veiksmi jūs redzēsit, ka OpenCV spēja no kameras nolasīt HD kadru.

Jūs varat izmantot cv2.imwrite (ceļš, rāmis), lai ierakstītu šo rāmi diskā un sftp to atpakaļ, lai iegūtu faktisku izskatu.

Kustības noteikšanas stratēģija ir diezgan vienkārša:

  1. Strādājiet ar zemākas izšķirtspējas kadriem - šeit nav nepieciešams darboties ar Full HD
  2. Turklāt aizmiglojiet attēlus, lai nodrošinātu pēc iespējas mazāku troksni.
  3. Saglabājiet pēdējo N kadru vidējo rādītāju. Šai lietojumprogrammai, kur kadru nomaiņas ātrums ir aptuveni 1 FPS (tikai tāpēc, ka TensorFlow aizņem kādu laiku vienā kadrā), es atklāju, ka N = 60 atgriež labus rezultātus. Un tā kā rūpīga ieviešana neprasa vairāk CPU ar vairāk kadriem, tas ir labi (tas aizņem vairāk atmiņas, bet tas ir niecīgs, ja strādājam ar zemākas izšķirtspējas kadriem)
  4. Atņemiet pašreizējo attēlu no tekošā vidējā (tikai uzmanieties, rakstot - jums ir jāatļauj pozitīvas un negatīvas vērtības [-255.. 255], tāpēc rāmis ir jāpārvērš int)
  5. Jūs varat veikt atņemšanu rāmja (un vidējā) pelēkās skalas konversijā vai arī atsevišķi katram RGB kanālam un pēc tam apvienot rezultātus (es izvēlējos stratēģiju, padarot to jutīgu pret krāsu izmaiņām)
  6. Deltā izmantojiet slieksni un noņemiet troksni erozijas un paplašināšanās rezultātā
  7. Visbeidzot meklējiet apgabalu kontūras ar deltu - šajās zonās ir notikusi kustība, un pašreizējais attēls atšķiras no iepriekšējo attēlu vidējā. Vajadzības gadījumā mēs varam atrast ierobežojošās kastes šīm kontūrām.

Esmu ievietojis kodu, lai to izdarītu, DeltaFinder python klasē, kuru varat atrast manā github šeit

7. darbība. Objektu noteikšana, izmantojot TensorFlow

Ja esat ievērojis TensorFlow uzstādīšanas procedūru, jūs jau esat pārbaudījis, vai TensorFlow ir instalēts un darbojas.

Lai atklātu cilvēkus vispārējā brīvā dabā, modeļi, kas ir iepriekš apmācīti par COCO datu kopu, darbojas diezgan labi - tieši tādu modeli mēs lejupielādējām TensorFlow instalācijas beigās. Mums tas vienkārši jāizmanto, lai izdarītu secinājumus!

Atkal, es esmu iekapsulējis modeļa ielādi un secinājumus TFClassify python klasē, lai atvieglotu lietas, kuras varat atrast šeit.

8. darbība. Iestatiet tīmekļa serveri Raspberry Pi

Iestatiet tīmekļa serveri Raspberry Pi
Iestatiet tīmekļa serveri Raspberry Pi

Vieglākais veids, kā piekļūt objektu noteikšanas rezultātiem, ir tīmekļa pārlūkprogramma, tāpēc izveidosim tīmekļa serveri Raspberry Pi. Pēc tam mēs varam to iestatīt, lai parādītu attēlus no konkrētā direktorija.

Tīmekļa servera ietvaram ir vairākas iespējas. Es izvēlējos kolbu. Tas ir ārkārtīgi konfigurējams un viegli paplašināms, izmantojot Python. Tā kā mums nepieciešamā "skala" ir triviāla, ar to bija vairāk nekā pietiekami.

Es iesaku to instalēt jaunā virtualenv, tāpēc:

pi@raspberrypi: ~ $ mkvirtualenv tīmekļa serviss

(tīmekļa serviss) pi@raspberrypi: ~ $ pip install Flask

Ņemiet vērā, ka ar normālu tīkla iestatīšanu tas būs sasniedzams tikai tad, ja jūsu pārlūkprogramma atrodas tajā pašā bezvadu LAN tīklā kā jūsu Raspberry Pi. Jūs varētu izveidot portu kartēšanu / NAT konfigurāciju savā interneta maršrutētājā, lai atļautu ārēju piekļuvi, bet es iesaku to nedarīt. Manis rakstītais kods nemēģina nodrošināt drošību, kas jums būtu nepieciešama, atļaujot vispārēju piekļuvi internetam jūsu Raspberry Pi.

Pārbaudiet instalāciju, ievērojot kolbas ātrās lietošanas pamācību

9. solis: mobilie paziņojumi no Raspberry Pi, izmantojot IFTTT

Mobilie paziņojumi no Raspberry Pi, izmantojot IFTTT
Mobilie paziņojumi no Raspberry Pi, izmantojot IFTTT

Es patiešām vēlos saņemt paziņojumus mobilajām ierīcēm, kad notiek notikumi. Šajā gadījumā, kad tiek atklāta persona un kad ūdens līmenis pazeminās. Vienkāršākais veids, kā es to atklāju, bez nepieciešamības rakstīt pielāgotu mobilo lietotni, ir IFTTT izmantošana. IFTTT apzīmē "If This then That" un ļauj daudziem notikumu veidiem izraisīt daudzu veidu darbības. Mūsu gadījumā mūs interesē IFTTT Maker Webhook sprūda. Tas ļauj mums aktivizēt IFTTT darbību, iesniedzot HTTP POST pieprasījumu IFTTT serverim ar īpašu atslēgu, kas piešķirta mūsu kontam, kā arī datus, kas norāda notikušo. Mūsu veiktā darbība var būt tikpat vienkārša kā paziņojuma izveide mūsu mobilajā ierīcē, izmantojot IFTTT mobilo lietotni, vai kaut kas sarežģītāks.

Lūk, kā to izdarīt:

  1. Izveidojiet IFTTT kontu vietnē ifttt.com
  2. Kad esat pieteicies, dodieties uz Webhook pakalpojuma iestatījumu lapu un savā pārlūkprogrammā ievadiet URL (piemēram, https://maker.ifttt.com/use/. Šajā tīmekļa vietnē tiks parādīta jūsu atslēga un URL, ko izmantot, lai aktivizētu darbības).
  3. Izveidojiet IFTTT sīklietotni, kas ģenerēs mobilo paziņojumu, kad tiks aktivizēts Webhook ar informāciju par notikumu:

    1. Noklikšķiniet uz "Manas sīklietotnes" un pēc tam uz "Jauna sīklietotne".
    2. Noklikšķiniet uz "+tas" un izvēlieties "tīmekļa āķi". Noklikšķiniet uz "Saņemt tīmekļa pieprasījumu", lai pārietu uz detalizētu informāciju
    3. Piešķiriet notikumam nosaukumu, piem. "PoolEvent" un noklikšķiniet uz "Izveidot aktivizētāju"
    4. Noklikšķiniet uz "+" un izvēlieties "paziņojumi". Pēc tam izvēlieties "Sūtīt bagātīgu paziņojumu no lietotnes IFTTT"
    5. "Nosaukumam" izvēlieties kaut ko līdzīgu "PoolPi"
    6. "Ziņojumam" ierakstiet "Pool Pi atklāts:" un noklikšķiniet uz "pievienot sastāvdaļu".. "Value1".
    7. Atgriezieties pie URL, kuru nokopējāt 2. darbībā. Tajā tiks parādīts URL, kas jāizmanto, lai izsauktu jaunizveidoto sīklietotni. Kopējiet šo URL, aizvietojot vietturu {event} ar notikuma nosaukumu (PoolEvent piemērā)
  4. Lejupielādējiet, instalējiet un piesakieties savai mobilajai ierīcei paredzētajā IFTTT lietotnē
  5. Palaidiet šo python skriptu savā Raspberry Pi, lai redzētu tā darbību (ņemiet vērā, ka var paiet dažas sekundes vai minūtes, lai aktivizētu jūsu mobilajā ierīcē):

importēšanas pieprasījumus

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

10. solis: pievienojiet releja cepuri Raspberry Pi un pievienojiet to solenoīda vārstam

Pievienojiet releja cepuri Raspberry Pi un pievienojiet to solenoīda vārstam
Pievienojiet releja cepuri Raspberry Pi un pievienojiet to solenoīda vārstam
Pievienojiet releja cepuri Raspberry Pi un pievienojiet to solenoīda vārstam
Pievienojiet releja cepuri Raspberry Pi un pievienojiet to solenoīda vārstam
Pievienojiet releja cepuri Raspberry Pi un pievienojiet to solenoīda vārstam
Pievienojiet releja cepuri Raspberry Pi un pievienojiet to solenoīda vārstam

Pirms turpināt šo darbību, IZSLĒGT savu Raspberry Pi: ssh un ierakstiet “sudo shutdown now”, pēc tam atvienojiet to no strāvas

Mūsu mērķis ir ieslēgt un izslēgt elektrības padevi elektromagnētiskajam vārstam - vārstam, kas var atvērt vai aizvērt ūdens padevi, pamatojoties uz 24 V maiņstrāvu, ko tā saņem no barošanas avota. Releji ir elektriskie komponenti, kas var atvērt vai aizvērt ķēdi, pamatojoties uz digitālo signālu, ko var nodrošināt mūsu Raspberry Pi. Tas, ko mēs šeit darām, ir savienot releju ar šīm Raspberry Pi digitālajām signāla tapām un aizvērt ķēdi starp 24 V maiņstrāvas barošanas avotu un solenoīda vārstu.

Raspberry Pi tapas, kas var darboties kā digitālā ieeja vai izvade, sauc par GPIO - vispārējas nozīmes ieeja/izeja, un tās ir rindas ar 40 tapām Pi pusē. Kad Pi ir izslēgts, un stingri ievietojiet tajā releju HAT. Izvēlētajā cepurē ir 3 releji, un mēs izmantosim tikai vienu no tiem. Iedomājieties visu, ko varat darīt ar pārējiem diviem:)

Tagad atkal ieslēdziet Raspberry Pi. Sarkanajai "barošanas" gaismas diodei uz releja HAT vajadzētu iedegties, norādot, ka tā saņem enerģiju no Pi caur GPIO. Pārbaudīsim, vai varam to kontrolēt: ssh vēlreiz Pi, ievadiet python un ierakstiet:

importēt gpiozero

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

Jums vajadzētu dzirdēt skaņas klikšķi, kas norāda, ka relejs ir ieslēgts, un redzēt, kā iedegas gaismas diode, kas norāda, ka pirmais relejs ir pievienotajā stāvoklī. Tagad varat rakstīt

dev.on ()

Kas pārslēgtu releju pozīcijā "izslēgts" (dīvaini, es zinu …) un izietu () no python.

Tagad, izmantojot savienojuma kabeļus un garāko kabeli, savienojiet releju starp 24 V barošanas avotu un solenoīda vārstu. Skatiet diagrammu. Visbeidzot, savienojiet elektromagnētisko vārstu ar jaucējkrānu, izmantojot adapterus, un sagatavojieties to visu pārbaudīt, atkārtojot iepriekš minētās komandas - tiem vajadzētu ieslēgt un izslēgt ūdeni.

Piestipriniet šļūteni pie elektromagnētiskā vārsta un ievietojiet otru galu dziļi baseinā. Tagad jums ir datora vadīta baseina papildināšanas sistēma, un ir pienācis laiks pieslēgt sensoru, lai pateiktu, kad tas jādarbina.

11. solis: pievienojiet ūdens līmeņa sensoru

Pievienojiet ūdens līmeņa sensoru
Pievienojiet ūdens līmeņa sensoru
Pievienojiet ūdens līmeņa sensoru
Pievienojiet ūdens līmeņa sensoru
Pievienojiet ūdens līmeņa sensoru
Pievienojiet ūdens līmeņa sensoru
Pievienojiet ūdens līmeņa sensoru
Pievienojiet ūdens līmeņa sensoru

Ūdens līmeņa sensors ir vienkārši pludiņš, kas savieno elektrisko ķēdi, kad pludiņš ir nolaists, un pārtrauc to, kad tas peld. Ja ievietojat to baseinā pareizajā augstumā, pludiņš būs uz augšu, kad ūdens līmenis būs atbilstošs, bet nokritīs, ja nepietiek ūdens.

Lai Raspberry Pi uzzinātu ūdens līmeņa sensora stāvokli, mums ir nepieciešams Pi, lai saprastu atvērtu vai slēgtu ķēdi. Par laimi, tas ir ļoti vienkārši: tie paši GPIO savienotāji, kurus mēs izmantojam kā digitālo izeju, lai kontrolētu relejus, var darboties kā ieejas (tātad I GPIO). Konkrētāk, ja mēs savienojam vienu sensora vadu ar +3.3V uz GPIO savienotāja un otru sensora vadu ar tapu, kuru konfigurējam kā nolaižamu ieeju (tas nozīmē, ka tā parasti būs GND sprieguma līmenī), šī tapa mērīs digitāls "augsts" vai "ieslēgts" spriegums tikai tad, kad ūdens līmeņa sensors slēdz ķēdi - kad ūdens līmenis ir zems. Kā ievadi es izmantoju GPIO pin 16, ko es atzīmēju attēlā iepriekš.

Python kods, lai konfigurētu tapu kā ievadi un pārbaudītu tā pašreizējo stāvokli, ir šāds:

importēt gpiozero

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

Viens no iespējamiem izaicinājumiem ir tāds, ka, sensoram vienkārši mainot stāvokli, tas ātri svārstīsies starp ieslēgšanas un izslēgšanas stāvokļiem. Risinājums tam ir pazīstams kā “atcelšana”, un pirms darbības sākšanas tiek meklētas konsekventas stāvokļa izmaiņas. GPIOZERO bibliotēkā ir kods, lai to izdarītu, bet nez kāpēc šis kods man nedarbojās labi. Es uzrakstīju vienkāršu cilpu, lai aktivizētu IFTTT brīdinājumus, kad tiek konstatētas konsekventas stāvokļa izmaiņas, ko varat atrast manā krātuvē šeit.

12. solis: uzrakstiet kodu, lai to visu sasaistītu

Uzrakstiet kodu, lai to visu sasaistītu
Uzrakstiet kodu, lai to visu sasaistītu

Tieši tā. Mūsu iestatīšana ir pabeigta. Jūs varat uzrakstīt savu kodu, lai sasaistītu lietas pilnā sistēmā, vai izmantot manu sniegto kodu. Lai to izdarītu, vienkārši izveidojiet direktoriju struktūru un klonējiet krātuvi, piemēram:

mkdir poolpi

cd poolpi git klons

Pēc tam rediģējiet failus ifttt_url.txt katalogos motion_alert un water_level, lai būtu jūsu IFTTT tīmekļa āķa URL ar slepeno atslēgu. Dažādām darbībām varat izmantot divus dažādus tīmekļa āķus.

Visbeidzot, mēs vēlamies, lai šis kods darbotos automātiski. Vienkāršākais veids, kā to izdarīt, ir Linux crontab pakalpojums. Mēs varam pievienot dažas crontab rindas diviem galvenajiem uzdevumiem:

  1. Palaidiet mūsu trīs programmas: objekta detektoru, ūdens līmeņa sensoru un tīmekļa serveri katrā restartēšanas reizē
  2. Iztīriet izvades direktoriju, dzēšot vecos attēlus un vecos video failus (es izvēlējos dzēst failus, kas vecāki par 1 dienu, un attēlus, kas vecāki par 7 dienām - nekautrējieties eksperimentēt)

Lai to izdarītu, ierakstiet crontab -e, kas atvērs jūsu nano teksta redaktoru. Pievienojiet šādas rindas faila apakšdaļā:

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

0 2 * * * atrast/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

Visbeidzot, restartējiet Raspberry Pi. Tagad tas ir gatavs, lai jūsu baseins būtu pilns un drošs.

Rūpējieties par iestatīšanu, kodu un neaizmirstiet atzīmēt ar zvaigznīti manu github krātuvi un komentēt pamācību, ja jums tas šķiet noderīgi. Es vienmēr cenšos uzzināt vairāk.

Laimīgu veidošanu!

IoT izaicinājums
IoT izaicinājums
IoT izaicinājums
IoT izaicinājums

Otrā vieta IoT izaicinājumā

Ieteicams: