Talaan ng mga Nilalaman:

Pool Pi Guy - AI Driven Alarm System at Pool Monitoring Paggamit ng Raspberry Pi: 12 Hakbang (na may Mga Larawan)
Pool Pi Guy - AI Driven Alarm System at Pool Monitoring Paggamit ng Raspberry Pi: 12 Hakbang (na may Mga Larawan)

Video: Pool Pi Guy - AI Driven Alarm System at Pool Monitoring Paggamit ng Raspberry Pi: 12 Hakbang (na may Mga Larawan)

Video: Pool Pi Guy - AI Driven Alarm System at Pool Monitoring Paggamit ng Raspberry Pi: 12 Hakbang (na may Mga Larawan)
Video: On the traces of an Ancient Civilization? 🗿 What if we have been mistaken on our past? 2024, Hulyo
Anonim
Pool Pi Guy - AI Driven Alarm System at Pool Monitoring Gamit ang Raspberry Pi
Pool Pi Guy - AI Driven Alarm System at Pool Monitoring Gamit ang Raspberry Pi

Ang pagkakaroon ng isang pool sa bahay ay masaya, ngunit may malaking responsibilidad. Ang aking pinakamalaking pag-aalala ay ang pagsubaybay kung ang sinuman ay malapit sa pool na walang nag-aalaga (lalo na ang mga mas batang bata). Ang aking pinakamalaking inis ay siguraduhin na ang linya ng tubig sa pool ay hindi mapupunta sa ibaba ng entry ng bomba, na tatakbo ang bomba at sirain ito na nagkakahalaga ng $$$ sa pag-aayos.

Nalaman ko kamakailan kung paano gumamit ng isang Raspberry Pi na may OpenCV at TensorFlow, kasama ang isang sensor ng antas ng tubig at isang solenoid na balbula upang malutas ang parehong mga isyu - at masaya na gawin ito!

Ito ay naging isang mahusay din na sistema ng alarma - na-activate ang paggalaw, kontrolado ng AI, walang katapusan na napapasadyang.

Sumisid tayo.

Hakbang 1: Grand Plan

Sa pagtuturo na ito ipapakita namin kung paano:

  1. Mag-setup ng isang Raspberry Pi na may OpenCV at TensorFlow
  2. Ikonekta ang isang Webcam sa pamamagitan ng isang mahabang USB cable
  3. Sumulat ng isang OpenCV algorithm upang makita ang paggalaw
  4. Gumamit ng TensorFlow para sa pagtuklas ng bagay
  5. Mag-set up ng isang web server sa Raspberry Pi upang maipakita ang mga kagiliw-giliw na imahe
  6. Isama sa IFTTT upang mag-trigger ng mga alerto sa mobile sakaling may isang tao na napansin
  7. Maglakip ng isang relay HAT sa Raspberry Pi at ikonekta ito sa isang solenoid na balbula na maaaring magdagdag ng tubig sa pool
  8. Maglakip ng sensor ng antas ng tubig sa Raspberry Pi at i-interface dito gamit ang PiIO GP
  9. Sumulat ng ilang code upang idikit ang lahat nang magkasama

Hakbang 2: Listahan sa Pamimili

Listahan ng bibilhin
Listahan ng bibilhin

Ang lahat ng mga sangkap ay madaling magagamit mula sa Amazon. Huwag mag-atubiling mag-eksperimento at makipagpalitan ng mga sangkap - kalahati iyon ng kasiyahan!

  1. Raspberry Pi
  2. Raspberry Pi Power Supply (huwag magtipid dito)
  3. Memory Card (mas malaki ang mas mahusay)
  4. Kaso (ang isang ito ay sapat na malaki upang mailagay ang parehong Pi at ang HAT)
  5. USB Webcam (gagawin ang anumang webcam, ngunit nais mo ang isa na nakakakuha ng magagandang mga imahe at balansehin ang pag-iilaw nang maayos)
  6. USB extension cable (kung kinakailangan - sukatin ang distansya sa pagitan ng Pi at kung saan mo ilalagay ang camera)
  7. Ang relay board HAT (ang isang ito ay may 3 mga relay at kailangan lang namin ang isa, ngunit makakahanap ka ng paggamit para sa iba pa sa lalong madaling panahon!)
  8. Solenoid
  9. Ang solenoid na angkop sa 1 at Fitting 2 (depende talaga sa kung ano ang magkasya sa solenoid, ngunit ang mga ito ay gumagana para sa akin)
  10. Solenoid Power Supply (anumang gagawin ng 24V AC)
  11. Cable (muli, halos anumang 2 strand cable ay gagawin - ang kasalukuyang ay minimal)
  12. Water Level Float Switch (halimbawa lamang ito, suriin kung ano ang maaaring madaling konektado sa iyong pool)
  13. Ang ilang mga Jumper wires at Wire connectors

Hakbang 3: I-setup ang Iyong Raspberry Pi

I-setup ang Iyong Raspberry Pi
I-setup ang Iyong Raspberry Pi

Ang Raspberry Pi ay isang mahusay na maliit na computer. Nagkakahalaga lamang ito ng $ 35, patuloy na tumatakbo, at maraming katugmang software at hardware. Ang pag-set up nito ay medyo madali:

  1. I-format ang iyong SD card. Kailangan nito ng espesyal na pangangalaga - Maaari lamang mag-boot ang Raspberry Pi mula sa isang format na FAT card na SD. Sundin ang mga tagubiling ito.
  2. Ikonekta ang Raspberry Pi sa isang USB keyboard at mouse, kasama ang isang display na HDMI, at sundin ang mga tagubilin sa tutorial na Raspberry Pi NOOBS. Tiyaking i-setup ang WiFi at paganahin ang pag-access ng SSH. Huwag kalimutang mag-set up ng isang password para sa default na pi account.
  3. Sa iyong home network setup ng isang static IP para sa Raspberry Pi - gagawing mas madali ito sa SSH.
  4. Tiyaking mayroon kang naka-install na ssh client sa iyong desktop / laptop. Para sa isang PC inirerekumenda ko ang Putty, na maaari mong mai-install mula rito.
  5. I-unhook ang USB at HDMI mula sa Raspberry Pi, i-reboot ito, at ssh dito - kung ang lahat ay gumana dapat mong makita ang isang katulad nito:

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

Ang mga program na kasama sa Debian GNU / Linux system ay libreng software; ang eksaktong mga term ng pamamahagi para sa bawat programa ay inilalarawan sa mga indibidwal na mga file sa / usr / share / doc / * / copyright. Ang Debian GNU / Linux ay may ganap na WALANG WARRANTY, sa lawak na pinapayagan ng naaangkop na batas. Huling pag-login: Lun Mayo 13 10:41:40 2019 mula sa 104.36.248.13 pi @ raspberrypi: ~ $

Hakbang 4: I-setup ang OpenCV

I-setup ang OpenCV
I-setup ang OpenCV

Ang OpenCV ay isang kamangha-manghang koleksyon ng mga pagpapaandar ng pagmamanipula ng imahe para sa paningin ng computer. Papayagan kaming magbasa ng mga imahe mula sa Webcam, manipulahin ang mga ito upang makahanap ng mga lugar ng paggalaw, i-save ang mga ito at higit pa. Ang pag-set up sa Raspberry Pi ay hindi mahirap ngunit nangangailangan ng kaunting pangangalaga.

Magsimula sa pamamagitan ng pag-install ng virtaulenvwrapper: gagamitin namin ang sawa upang gawin ang lahat ng aming programa, at tutulungan kami ng virtualenv na panatilihing magkahiwalay ang mga dependency para sa OpenCV at TensorFlow kumpara sa Flask o GPIO:

pi @ raspberrypi: ~ $ sudo pip install virtualenvwrapper

Ngayon ay maaari mo nang maisagawa ang "mkvirtualenv" upang lumikha ng isang bagong kapaligiran, "workon" upang gumana dito, at higit pa.

Kaya, lumikha tayo ng isang kapaligiran para sa ating pagmamanipula ng imahe, kasama ang python 3 bilang default na interpreter (ngayong 2019, walang dahilan upang manatili sa mas matandang python 2):

pi @ raspberrypi: ~ $ mkvirtualenv cv -p python3

… (Cv) pi @ raspberrypi: ~

Handa na kaming mag-install ng OpenCV. Susundan namin ang karamihan sa mahusay na tutorial sa Alamin ang OpenCV. Partikular na sundin ang kanilang hakbang 1 at 2:

sudo apt -y mga updateudo apt -y pag-upgrade ## Pag-install ng mga dependency sudo apt-get -y install ng build-importanteng 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 i-install ang libxine2-dev libv4l-dev cd / usr / isama / linux sudo ln -s -f../libv4l1-videodev.h videodev.h sudo apt-get -y i-install ang libgstreamer0.10-dev libgstreamer-plugins-base0. 10-dev sudo apt-get -y install ng libgtk2.0-dev libtbb-dev qt5-default sudo apt-get -y install ng libatlas-base-dev sudo apt-get -y install ng libmp3lame-dev libtheora-dev sudo apt-get -y install ng libvorbis-dev libxvidcore-dev libx264-dev sudo apt-get -y install libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get -y install ng libavresample-dev sudo apt-get -y install x264 v4l-utils sudo apt-get -y install ng libprotobuf -dev protobuf-compiler sudo apt-get -y install libgoogle-glog-dev libgflags-dev sudo apt-get -y install ng libgphoto2-dev libeigen3-dev libhdf5-dev doxygen sudo apt-get install libqtgui4 sudo apt-get install libqt4- pagsusulit

Ngayon ay maaari lamang naming mai-install ang OpenCV na may mga bind ng sawa sa loob ng cv virtualenv (nandito ka pa rin, tama?) Gamit ang

pip install opencv-contrib-python

At yun lang! Mayroon kaming naka-install na OpenCV sa aming Raspberry Pi, handa nang kumuha ng mga larawan at video, manipulahin ang mga ito at maging cool.

Suriin na sa pamamagitan ng pagbubukas ng isang interpreter ng sawa at pag-import ng opencv at suriin na walang mga error:

(cv) pi @ raspberrypi: ~ $ python

Python 3.5.3 (default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516] sa linux Type na "tulong", "copyright", "credit" o "lisensya" para sa karagdagang impormasyon. >>> import cv2 >>>

Hakbang 5: Pag-setup ng TensorFlow

Pag-setup ng TensorFlow
Pag-setup ng TensorFlow

Ang TensorFlow ay isang machine learning / AI framework na binuo at pinapanatili ng Google. Mayroon itong malawak na suporta para sa mga modelo ng malalim na pag-aaral para sa iba't ibang mga gawain kabilang ang pagtuklas ng object sa mga imahe, at ngayon ay medyo simple upang mai-install sa Raspberry Pi. Ang pagganap ng mga magaan na modelo nito sa maliit na Pi ay nasa paligid ng 1 frame bawat segundo, na perpektong sapat para sa isang application na tulad ng sa amin.

Karaniwan naming susundan ang mahusay na tutorial ng Edje Electronics, na may mga pagbabago na ginawang posible ng mga pinakabagong pamamahagi ng TensorFlow:

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

Ngayon kailangan naming mag-ipon ng protobuf ng Google. Sundin lamang ang mga tagubilin sa hakbang 4 ng parehong mahusay na tutorial

Sa wakas, i-clone at i-set up ang mga kahulugan ng modelo ng TensorFlow - sundin ang hakbang 5 sa Edje Electronics tutorial

Huwag mag-atubiling sundin ang kanilang halimbawa sa hakbang 6 din, ito ay isang mahusay na pagpapakilala sa pagtuklas ng bagay sa Raspberry Pi.

Hakbang 6: Pagtuklas ng Paggalaw Gamit ang OpenCV

Magsimula tayo sa pamamagitan ng pagsubok na ang OpenCV ay maaaring makipag-ugnay sa aming webcam: ssh sa Raspberry Pi, lumipat sa cv virtualenv (workon cv), buksan ang isang interpreter ng python (i-type lamang ang python), at ipasok ang mga sumusunod na utos ng python:

import 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 ('Basahin ang laki ng frame: {} x {}'.format (frame.shape [1], frame.shape [0])

Sa anumang swerte makikita mo na ang OpenCV ay nakakabasa ng isang HD frame mula sa camera.

Maaari mong gamitin ang cv2.imwrite (path, frame) upang isulat ang frame na iyon sa disk at sftp ito pabalik upang kumuha ng isang aktwal na hitsura.

Ang diskarte upang matukoy ang paggalaw ay medyo tuwid pasulong:

  1. Magtrabaho sa mga frame ng mas mababang resolusyon - hindi na kailangang gumana sa buong HD dito
  2. Dagdag dito, lumabo ang mga imahe upang matiyak ang kaunting ingay hangga't maaari.
  3. Panatilihin ang average ng pagpapatakbo ng huling mga N frame. Para sa application na ito, kung saan ang rate ng frame ay nasa paligid ng 1 FPS (dahil lamang sa TensorFlow ay tumatagal ng bawat oras sa bawat frame), nalaman ko na ang N = 60 ay nagbabalik ng magagandang resulta. At dahil ang isang maingat na pagpapatupad ay hindi kukuha ng mas maraming CPU na may mas maraming mga frame na OK (tumatagal ng mas maraming memorya - ngunit hindi bale-wala kapag nagtatrabaho kami kasama ang mga mas mababang resolusyon na frame)
  4. Ibawas ang kasalukuyang imahe mula sa average na tumatakbo (mag-ingat lamang sa pagta-type - kailangan mong payagan ang positibo at negatibong mga halagang [-255.. 255], kaya't kailangang i-convert ang frame sa int)
  5. Maaari mong gampanan ang pagbabawas sa isang kulay-abo na pag-convert ng frame (at ang average), o gawin ito nang hiwalay para sa bawat isa sa mga RGB channel at pagkatapos ay pagsamahin ang mga resulta (na kung saan ang pinili kong diskarte, ginagawa itong sensitibo sa mga pagbabago sa kulay)
  6. Gumamit ng isang threshold sa delta at alisin ang ingay sa pamamagitan ng pagguho at pagluwang
  7. Panghuli hanapin ang mga contour ng mga lugar na may isang delta - ang mga lugar na ito ay kung saan ang paggalaw ay nangyari at ang kasalukuyang imahe ay naiiba mula sa average ng nakaraang mga imahe. Maaari pa kaming makahanap ng mga hangganan na kahon para sa mga contour na ito kung kinakailangan.

Na-encapsulate ko ang code upang magawa ito sa klase ng DeltaFinder python na maaari mong makita sa aking github dito

Hakbang 7: Makakita ng Mga Bagay Gamit ang TensorFlow

Kung sinundan mo ang pamamaraan ng pag-install ng TensorFlow, nasubukan mo na na mayroon kang naka-install at gumagana na TensorFlow.

Para sa layunin ng pagtuklas ng mga tao sa isang pangkalahatang eksena sa labas, ang mga modelo na paunang pagsasanay sa hanay ng data ng COCO ay mahusay na gumaganap - na eksaktong modelo na na-download namin sa pagtatapos ng pag-install ng TensorFlow. Kailangan lang namin itong gamitin para sa hinuha!

Muli, na-encapsulate ko ang paglo-load ng modelo at hinuha sa klase ng python ng TFClassify upang gawing mas madali ang mga bagay, na maaari mong makita dito.

Hakbang 8: Mag-set up ng isang Web Server sa Raspberry Pi

Mag-set up ng isang Web Server sa Raspberry Pi
Mag-set up ng isang Web Server sa Raspberry Pi

Ang pinakamadaling paraan upang ma-access ang mga resulta sa pagtuklas ng bagay ay isang web browser, kaya't mag-set up tayo ng isang web server sa Raspberry Pi. Maaari namin itong i-set up upang maghatid ng mga larawan mula sa isang naibigay na direktoryo.

Mayroong maraming mga pagpipilian para sa isang framework ng web server. Pinili ko si Flask. Ito ay lubos na mai-configure at madaling i-extension sa Python. Dahil ang "sukat" na kailangan namin ay walang halaga, ito ay higit sa sapat.

Iminumungkahi kong i-install ito sa isang bagong virtualenv, kaya:

pi @ raspberrypi: ~ $ mkvirtualenv webserv

(webserv) pi @ raspberrypi: ~ $ pip i-install ang Flask

Tandaan na sa isang normal na pag-set up ng network maaabot lamang ito kapag ang iyong browser ay nasa parehong wireless LAN tulad ng iyong Raspberry Pi. Maaari kang lumikha ng isang pagma-configure ng port / NAT sa iyong Internet router upang payagan ang panlabas na pag-access - ngunit inirerekumenda ko laban dito. Ang code na sinulat ko ay hindi nagtatangka upang ibigay ang seguridad na kakailanganin mo kapag pinapayagan ang pangkalahatang pag-access sa Internet sa iyong Raspberry Pi.

Subukan ang iyong pag-install sa pamamagitan ng pagsunod sa gabay sa mabilis na pagsisimula ng Flask

Hakbang 9: Mga Abiso sa Mobile Mula sa Raspberry Pi Paggamit ng IFTTT

Mga Mobile Notification Mula sa Raspberry Pi Gamit ang IFTTT
Mga Mobile Notification Mula sa Raspberry Pi Gamit ang IFTTT

Nais kong makakuha ng mga abiso sa mobile kapag nangyari ang mga kaganapan. Sa kasong ito, kapag ang isang tao ay napansin at kapag ang antas ng tubig ay bumaba. Ang pinakasimpleng paraan na nalaman kong gawin iyon, nang hindi kinakailangang magsulat ng isang pasadyang mobile app, ay ang paggamit ng IFTTT. Ang IFTTT ay nangangahulugang "Kung Ito Pagkatapos Iyon" at nagbibigay-daan sa maraming uri ng mga kaganapan upang mag-trigger ng maraming uri ng mga pagkilos. Sa aming kaso, interesado kami sa pag-trigger ng IFTTT Maker Webhook. Pinapayagan kaming mag-trigger ng isang pagkilos na IFTTT sa pamamagitan ng paggawa ng isang kahilingan sa HTTP POST sa server ng IFTTT na may isang espesyal na susi na nakatalaga sa aming account, kasama ang data na tumutukoy sa kung anong nangyari. Ang pagkilos na gagawin namin ay maaaring maging kasing simple ng paglikha ng isang notification sa aming mobile device gamit ang IFTTT mobile app, o anumang mas kumplikado kaysa doon.

Narito kung paano ito gawin:

  1. Lumikha ng isang IFTTT account sa ifttt.com
  2. Habang naka-log in, pumunta sa pahina ng mga setting ng serbisyo ng Webhook at ipasok ang URL sa iyong browser (isang bagay tulad ng https://maker.ifttt.com/use/. Ipapakita sa iyo ng web page na iyon ang iyong susi at ang URL na gagamitin upang magpalitaw ng mga pagkilos.
  3. Lumikha ng isang IFTTT applet na makakabuo ng isang mobile notification kapag ang Webhook ay na-trigger ng mga detalye ng kaganapan:

    1. I-click ang "Aking Mga Applet" at pagkatapos ay ang "Bagong Applet".
    2. I-click ang "+ ito" at piliin ang "webhooks". I-click ang "Tumanggap ng isang kahilingan sa web" upang magpatuloy sa mga detalye
    3. Bigyan ang iyong kaganapan ng isang pangalan, hal. "PoolEvent" at i-click ang "Lumikha ng gatilyo"
    4. I-click ang "+ iyon" at piliin ang "mga abiso". Pagkatapos piliin ang "Magpadala ng isang mayamang notification mula sa IFTTT app"
    5. Para sa "pamagat" pumili ng isang bagay tulad ng "PoolPi"
    6. Para sa "mensahe" isulat ang "Nakita si Pool Pi:" at i-click ang "magdagdag ng sangkap".. "Value1".
    7. Bumalik sa URL na iyong kinopya sa hakbang 2. Ipapakita nito ang URL na gagamitin upang magamit ang iyong bagong nilikha na applet. Kopyahin ang URL na iyon, pinapalitan ang placeholder {kaganapan} ng pangalan ng kaganapan (sa halimbawa ng PoolEvent)
  4. Mag-download, mag-install at mag-login sa IFTTT app para sa iyong mobile device
  5. Patakbuhin ang python script na ito sa iyong Raspberry Pi upang makita itong gumana (tandaan na maaaring tumagal ng ilang segundo o minuto upang ma-trigger ang iyong mobile device):

mag-import ng mga kahilingan

requests.post ('https://maker.ifttt.com/trigger/PoolEvent/with/key/', json = {"value1": "Kamusta Mga Notipikasyon"})

Hakbang 10: Magdagdag ng isang Relay HAT sa Raspberry Pi at Ikonekta ito sa isang Solenoid Valve

Magdagdag ng isang Relay HAT sa Raspberry Pi at Ikonekta ito sa isang Solenoid Valve
Magdagdag ng isang Relay HAT sa Raspberry Pi at Ikonekta ito sa isang Solenoid Valve
Magdagdag ng isang Relay HAT sa Raspberry Pi at Ikonekta ito sa isang Solenoid Valve
Magdagdag ng isang Relay HAT sa Raspberry Pi at Ikonekta ito sa isang Solenoid Valve
Magdagdag ng isang Relay HAT sa Raspberry Pi at Ikonekta ito sa isang Solenoid Valve
Magdagdag ng isang Relay HAT sa Raspberry Pi at Ikonekta ito sa isang Solenoid Valve

Bago magpatuloy sa hakbang na ito I-OFF ang iyong Raspberry Pi: ssh dito at i-type ang "sudo shutdown now", pagkatapos ay idiskonekta ito mula sa kapangyarihan

Ang aming layunin ay upang buksan at i-off ang suplay ng kuryente sa isang solenoid balbula - isang balbula na maaaring buksan o isara ang supply ng tubig batay sa 24V AC na kuryente na nakukuha mula sa isang power supply. Ang mga relay ay mga de-koryenteng sangkap na maaaring magbukas o magsara ng isang circuit batay sa isang digital signal na maaaring ibigay ng aming Raspberry Pi. Ang ginagawa namin dito ay mag-hook ng relay sa mga digital signal pin ng Raspberry Pi, at isara ito sa circuit sa pagitan ng 24V AC power supply at solenoid balbula.

Ang mga pin sa Raspberry Pi na maaaring kumilos bilang digital input o output ay tinatawag na GPIO - Pangkalahatang Pakay na Input / Output at sila ang hilera ng 40 mga pin sa gilid ng Pi. Sa Pi naka-off at ipasok ang relay HAT dito. Ang HAT na pinili ko ay may 3 mga relay dito, at isa lamang sa kanila ang gagamitin namin. Isipin ang lahat ng magagawa mo sa dalawa pa:)

Ngayon buksan muli ang Raspberry Pi. Ang pulang "kapangyarihan" na LED sa relay HAT ay dapat na i-on, na nagpapahiwatig na nakakakuha ito ng lakas mula sa Pi sa pamamagitan ng GPIO. Subukan natin na makokontrol natin ito: ssh sa Pi muli, ipasok ang sawa at i-type:

import gpiozero

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

Dapat mong marinig ang isang naririnig na "pag-click", na nagpapahiwatig na ang relay ay nakikibahagi, at makita ang isang LED na pag-on na ipinapakita na ang unang relay ay nasa konektadong posisyon. Maaari ka na ngayong mag-type

dev.on ()

Alin ang magpapasara sa relay sa posisyon na "off" (kakaiba, alam ko …) at lumabas () mula sa sawa.

Ngayon gamit ang mga jumper cables at ang mas mahabang cable ay ikonekta ang relay sa pagitan ng 24V power supply at solenoid balbula. Tingnan ang diagram. Sa wakas, ikonekta ang solenoid balbula sa isang faucet gamit ang mga adaptor at maghanda upang subukan ang lahat ng ito sa pamamagitan ng pag-ulit ng mga utos sa itaas - dapat nilang i-on at i-off ang tubig.

Maglakip ng isang medyas sa solenoid balbula at ilagay ang kabilang dulo sa malalim sa pool. Mayroon ka na ngayong system na top-off na pool na kinokontrol ng computer, at oras na upang ikonekta ang isang sensor upang sabihin ito kung kailan tatakbo.

Hakbang 11: Ikonekta ang isang Sensor sa Antas ng Tubig

Ikonekta ang isang Sensor sa Antas ng Tubig
Ikonekta ang isang Sensor sa Antas ng Tubig
Ikonekta ang isang Sensor sa Antas ng Tubig
Ikonekta ang isang Sensor sa Antas ng Tubig
Ikonekta ang isang Sensor sa Antas ng Tubig
Ikonekta ang isang Sensor sa Antas ng Tubig
Ikonekta ang isang Sensor sa Antas ng Tubig
Ikonekta ang isang Sensor sa Antas ng Tubig

Ang sensor ng antas ng tubig ay isang float lamang na kumokonekta sa isang de-koryenteng circuit kapag ang float ay pababa, at sinisira ito kapag lumutang ito. Kung isingit mo ito sa pool sa tamang taas ang float ay pataas kapag ang antas ng tubig ay sapat ngunit mahulog kapag walang sapat na tubig.

Upang malaman ng Raspberry Pi ang katayuan ng antas ng sensor ng tubig kailangan namin ang Pi upang maunawaan ang isang bukas o saradong circuit. Sa kabutihang-palad iyon ay napaka-simple: ang parehong mga konektor ng GPIO na ginagamit namin bilang digital output upang makontrol ang mga relay ay maaaring kumilos bilang mga input (samakatuwid ay ang I sa GPIO). Partikular, kung ikinonekta namin ang isang kawad ng sensor sa + 3.3V sa konektor ng GPIO at ang iba pang sensor wire sa isang pin na na-configure namin bilang pull-down input (nangangahulugang normal ito sa antas ng boltahe ng GND), susukat ang pin na iyon isang digital na "mataas" o "nasa" boltahe lamang kapag isara ng sensor ng antas ng tubig ang circuit - kapag mababa ang antas ng tubig. Gumamit ako ng GPIO pin 16 bilang input, na minarkahan ko sa imahe sa itaas.

Ang python code upang mai-configure ang pin bilang input at subukan ang kasalukuyang estado nito ay:

import gpiozero

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

Ang isang potensyal na hamon ay kapag binago lamang ng sensor ang estado ay mabilis itong mag-oscillate sa pagitan ng at sa mga estado ng off. Ang solusyon dito ay kilala bilang "debouncing" at naghahanap ng pare-parehong pagbabago ng estado bago kumilos. Ang library ng GPIOZERO ay may code upang gawin iyon, ngunit sa ilang kadahilanan ang code na iyon ay hindi gumana nang maayos para sa akin. Sumulat ako ng isang simpleng loop upang mag-trigger ng mga alerto ng IFTTT kapag nakita ang isang pare-parehong pagbabago ng estado, na maaari mong makita sa aking imbakan dito.

Hakbang 12: Isulat ang Code upang Magkasama Ito Lahat

Sumulat ng Code upang maitali ang Lahat ng Ito
Sumulat ng Code upang maitali ang Lahat ng Ito

Ayan yun. Kumpleto na ang aming pag-set up. Maaari mong isulat ang iyong sariling code upang maitali ang mga bagay sa isang buong system, o gamitin ang code na ibibigay ko. Upang gawin iyon lumikha lamang ng istraktura ng direktoryo at i-clone ang imbakan, tulad nito:

mkdir poolpi

cd poolpi git clone

Susunod, i-edit ang mga file na pinangalanang ifttt_url.txt sa mga direktoryo ng motion_alert at water_level upang magkaroon ng URL para sa iyong sariling web hook ng IFTTT gamit ang iyong lihim na key. Maaari kang gumamit ng dalawang magkakaibang mga web hook para sa iba't ibang mga pagkilos.

Panghuli, nais naming awtomatikong tumakbo ang code na ito. Ang pinakamadaling paraan upang magawa iyon ay sa pamamagitan ng serbisyong crontab ng Linux. Maaari kaming magdagdag ng ilang mga linya ng crontab para sa dalawang pangunahing gawain:

  1. Patakbuhin ang aming tatlong mga programa: ang detektor ng bagay, sensor ng antas ng tubig at web server sa bawat pag-reboot
  2. Linisin ang direktoryo ng output, pagtanggal ng mga lumang larawan at mga lumang file ng video (Pinili kong tanggalin ang mga file na mas matanda sa 1 araw at mga larawan na mas matanda sa 7 araw - huwag mag-atubiling mag-eksperimento)

Upang gawin ang uri ng crontab -e na magbubukas sa iyong nano text editor. Idagdag ang mga sumusunod na linya sa ilalim ng file:

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

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

Sa wakas, i-reboot ang iyong Raspberry Pi. Handa na ngayong panatilihin ang iyong pool na puno at ligtas.

Gumawa ng tinker sa pag-set up, ang code, at huwag kalimutang lagyan ng bituin ang aking github repository at magkomento sa itinuturo kung nakita mo itong kapaki-pakinabang. Palagi akong naghahanap upang malaman ang higit pa.

Maligayang paggawa!

IoT Hamon
IoT Hamon
IoT Hamon
IoT Hamon

Runner Up sa IoT Challenge

Inirerekumendang: