Mundarija:

Pool Pi Guy - AI bilan ishlaydigan signalizatsiya tizimi va Raspberry Pi yordamida hovuz monitoringi: 12 qadam (rasmlar bilan)
Pool Pi Guy - AI bilan ishlaydigan signalizatsiya tizimi va Raspberry Pi yordamida hovuz monitoringi: 12 qadam (rasmlar bilan)

Video: Pool Pi Guy - AI bilan ishlaydigan signalizatsiya tizimi va Raspberry Pi yordamida hovuz monitoringi: 12 qadam (rasmlar bilan)

Video: Pool Pi Guy - AI bilan ishlaydigan signalizatsiya tizimi va Raspberry Pi yordamida hovuz monitoringi: 12 qadam (rasmlar bilan)
Video: Подводные камни профессии «Мастер перманентного макияжа». Подкаст с Ольгой Ханафи 2024, Iyul
Anonim
Pool Pi Guy - AI tomonidan boshqariladigan signal tizimi va Raspberry Pi yordamida hovuz monitoringi
Pool Pi Guy - AI tomonidan boshqariladigan signal tizimi va Raspberry Pi yordamida hovuz monitoringi

Uyda hovuzga ega bo'lish qiziqarli, lekin katta mas'uliyat bilan keladi. Mening eng katta tashvishim - kimdir hovuz yonida qarovsiz qolsa (ayniqsa, yosh bolalar). Mening eng katta noqulayligim - basseyndagi suv liniyasi hech qachon nasosning ostidan tushmasligiga ishonch hosil qilish, bu esa nasosni quritib yuboradi va uni ta'mirlashda $$$ turadi.

Men yaqinda OpenCV va TensorFlow bilan Raspberry Pi -ni, suv sathi sensori va solenoid klapanni har ikkala muammoni hal qilish uchun qanday ishlatishni o'ylab topdim - va bundan zavqlaning!

Ma'lum bo'lishicha, bu ham ajoyib signalizatsiya tizimi - harakatlanuvchi, AI tomonidan boshqariladigan, cheksiz moslashtiriladigan.

Keling, sho'ng'iymiz.

1 -qadam: Katta reja

Ushbu qo'llanmada biz quyidagilarni ko'rsatamiz:

  1. OpenCV va TensorFlow bilan Raspberry Pi -ni o'rnating
  2. Veb -kamerani uzun USB kabeli orqali ulang
  3. Harakatni aniqlash uchun OpenCV algoritmini yozing
  4. Ob'ektlarni aniqlash uchun TensorFlow -dan foydalaning
  5. Qiziqarli tasvirlarni ko'rsatish uchun Raspberry Pi -da veb -serverni o'rnating
  6. Agar odam aniqlansa, mobil ogohlantirishlarni ishga tushirish uchun IFTTT bilan birlashing
  7. Raspberry Pi -ga HAT rölesini ulang va uni basseynga suv qo'shadigan solenoid valfga ulang.
  8. Raspberry Pi -ga suv sathining sensori ulang va u bilan Pi -ning GPIO -ni ishlating
  9. Hammasini yopishtirish uchun kod yozing

2 -qadam: xaridlar ro'yxati

Xaridlar ro'yxati
Xaridlar ro'yxati

Barcha komponentlar Amazon -da mavjud. Bepul tajriba o'tkazing va tarkibiy qismlarni almashtiring - bu o'yin -kulgining yarmi!

  1. Raspberry Pi
  2. Raspberry Pi quvvat manbai (bu erda tejamang)
  3. Xotira kartasi (kattaroq yaxshiroq)
  4. Koson (bu Pi va HATni joylashtirish uchun etarlicha katta)
  5. USB veb -kamerasi (har qanday veb -kamera ishlaydi, lekin siz yaxshi tasvirga ega bo'lishni va yorug'likni yaxshi muvozanatlashni xohlaysiz)
  6. USB uzatma kabeli (agar kerak bo'lsa - Pi orasidagi masofani va kamerani joylashtiradigan joyni o'lchang)
  7. HAT o'rni taxtasi (bu 3 ta o'rni bor va bizga faqat bittasi kerak, lekin siz tez orada boshqalariga foyda topasiz!)
  8. Solenoid
  9. Solenoid moslamasi 1 va Fitting 2 (bu, albatta, siz solenoidga mos keladigan narsaga bog'liq, lekin bu men uchun ishlagan)
  10. Solenoid quvvat manbai (har qanday 24V AC)
  11. Kabel (yana, deyarli har qanday 2 simli kabel ishlaydi - oqim minimal)
  12. Suv sathining o'zgaruvchan kaliti (bu shunchaki misol, hovuzingizga nima oson ulanishi mumkinligini tekshiring)
  13. Ba'zi jumper simlari va simli ulagichlar

3 -qadam: Raspberry Pi -ni o'rnating

Raspberry Pi -ni o'rnating
Raspberry Pi -ni o'rnating

Raspberry Pi - bu ajoyib kompyuter. Uning narxi atigi 35 dollar, doimiy ravishda ishlaydi va ko'plab mos dasturiy va uskunalarga ega. Uni sozlash juda oson:

  1. SD -kartangizni formatlang. Bu alohida e'tibor talab qiladi - Raspberry Pi faqat FAT formatlangan SD -kartadan yuklanishi mumkin. Ushbu ko'rsatmalarga amal qiling.
  2. Raspberry Pi -ni USB klaviatura va sichqonchaga, shuningdek HDMI displeyiga ulang va Raspberry Pi NOOBS qo'llanmasidagi ko'rsatmalarga amal qiling. Wi -Fi -ni sozlang va SSH -ga kirishni yoqing. Standart pi hisob qaydnomasi uchun parol o'rnatishni unutmang.
  3. Uy tarmog'ida Raspberry Pi uchun statik IP -ni sozlash SSH -ni o'rnatishni ancha osonlashtiradi.
  4. Ish stolida/noutbukda ssh mijozi o'rnatilganligiga ishonch hosil qiling. Kompyuter uchun Putty -ni tavsiya qilaman, uni shu erdan o'rnatishingiz mumkin.
  5. USB va HDMI -ni Raspberry Pi -dan ajratib oling, uni qayta ishga tushiring va ssh -ga qo'ying - agar hammasi ishlagan bo'lsa, siz shunday narsani ko'rishingiz kerak:

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

Debian GNU/Linux tizimiga kiritilgan dasturlar - bu bepul dasturiy ta'minot; har bir dastur uchun aniq tarqatish shartlari/usr/share/doc/*/mualliflik huquqidagi alohida fayllarda tasvirlangan. Debian GNU/Linux, amaldagi qonunlar ruxsat bergan darajada, KAFSATSIZ YO'Q. Oxirgi kirish: dushanba 13 may 10:41:40 2019 yil 104.36.248.13 pi@raspberrypi: ~ $

4 -qadam: OpenCV -ni o'rnating

OpenCV -ni sozlash
OpenCV -ni sozlash

OpenCV - bu kompyuterni ko'rish uchun tasvirni boshqarish funktsiyalarining ajoyib to'plami. Bu bizga veb -kameradan tasvirlarni o'qish, ularni harakatlanish joylarini topish, ularni saqlash va boshqalarni boshqarish imkonini beradi. Raspberry Pi -ni sozlash qiyin emas, lekin biroz g'amxo'rlik talab qiladi.

Virtaulenvwrapper -ni o'rnatishdan boshlang: biz barcha dasturlarni bajarish uchun python -dan foydalanamiz va virtualenv OpenCV va TensorFlow va Flask yoki GPIO -ga bog'liqlikni alohida saqlashga yordam beradi:

pi@raspberrypi: ~ $ sudo pip virtualenvwrapper -ni o'rnating

Endi siz yangi muhit yaratish uchun "mkvirtualenv" ni, uning ustida ishlash uchun "workon" ni va boshqalarni bajarishingiz mumkin.

Shunday qilib, keling, Python 3 standart tarjimon sifatida tasvirni manipulyatsiya qilish uchun muhit yarataylik (bu 2019 yil, eski python 2 bilan ishlashga hech qanday sabab yo'q):

pi@raspberrypi: ~ $ mkvirtualenv cv -p python3

… (Cv) pi@raspberrypi: ~

Endi biz OpenCV -ni o'rnatishga tayyormiz. Biz asosan OpenCV -ni o'rganish bo'yicha ajoyib qo'llanmani kuzatamiz. Xususan, ularning 1 va 2 -bosqichlarini bajaring:

sudo apt -y updatesudo apt -y upgrade ## Bog'liqliklarni o'rnating sudo apt-get -y install-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 o'rnatish libtiff5-dev sudo apt-get -y o'rnatish libtiff-dev sudo apt-get -y ni o'rnatish libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev sudo apt-get- libxine2-dev libv4l-dev cd/usr/include/linux sudo ln -s -f../libv4l1-videodev.h videodev.h sudo apt-get -y libgstreamer0.10-dev libgstreamer-plugins-base0 ni o'rnating. 10-dev sudo apt-get -y libgtk2.0-dev libtbb-dev qt5-default sudo apt-get -y o'rnatish libatlas-base-dev sudo apt-get -y ni o'rnatish libmp3lame-dev libtheora-dev sudo apt-get -y libvorbis-dev libxvidcore-dev libx264-dev sudo apt-get -y o'rnatish libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get -y ni o'rnatish libavresample-dev sudo apt-get -y install x264 v4l-utils sudo apt -get -y libprotobuf -ni o'rnating -dev protobuf-kompilyatori 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- sinov

Endi biz faqat OpenCV -ni cv virtualenv -ga python biriktirgichlari bilan o'rnatishimiz mumkin (siz hali ham shu, to'g'rimi?)

opencv-Contrip-python-ni o'rnatish

Va bu hammasi! Bizda Raspberry Pi -da OpenCV o'rnatilgan, u rasm va videolarni yozib olishga, ularni boshqarishga va salqin bo'lishga tayyor.

Python tarjimonini ochish va opencv -ni import qilish orqali tekshiring va xatolar yo'qligini tekshiring:

(cv) pi@raspberrypi: ~ $ python

Python 3.5.3 (standart, 27 -sentabr 2018, 17:25:39) [GCC 6.3.0 20170516] linuxda Qo'shimcha ma'lumot olish uchun "yordam", "mualliflik huquqi", "kreditlar" yoki "litsenziya" ni kiriting. >>> cv2 import qilish >>>

5 -qadam: TensorFlow -ni o'rnating

TensorFlow -ni sozlash
TensorFlow -ni sozlash

TensorFlow - bu Google tomonidan ishlab chiqilgan va qo'llab -quvvatlanadigan mashinani o'rganish / AI tizimi. U turli xil vazifalar uchun chuqur o'rganiladigan modellarni keng qo'llab-quvvatlaydi, shu jumladan tasvirlardagi ob'ektlarni aniqlash va hozir Raspberry Pi-ga o'rnatish juda oddiy. Kichkina Pi -da uning engil modellarining ishlashi sekundiga 1 kadrni tashkil qiladi, bu biznikiga o'xshash dastur uchun juda mos keladi.

Biz asosan Edje Electronics -ning eng zo'r qo'llanmasiga amal qilamiz, bu o'zgartirishlar TensorFlow -ning so'nggi taqsimotlari yordamida amalga oshiriladi:

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

Endi biz Google protobufini tuzishimiz kerak. Xuddi shu ajoyib darslikning 4 -bosqichidagi ko'rsatmalarga amal qiling

Nihoyat, TensorFlow model ta'riflarini klonlang va o'rnating - Edje Electronics qo'llanmasining 5 -bosqichini bajaring.

6 -qadamda ham ulardan o'rnak olishga harakat qiling, bu Raspberry Pi -da ob'ektlarni aniqlashga ajoyib kirishdir.

6 -qadam: OpenCV yordamida harakatni aniqlash

Keling, OpenCV veb -kameramiz bilan ssh: Raspberry Pi -ga kirishni, cv virtualenv -ga (workon cv) o'ting, python tarjimonini oching (faqat python yozing) va quyidagi python buyruqlarini kiriting:

cv2 import qilish

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 ('O'qish ramkasi o'lchami: {} x {}').format (ramka shakli [1], ramka shakli [0])

Nasib qilsa, OpenCV kameradan HD ramkani o'qiy olganini ko'rasiz.

Siz bu ramkani diskka yozish uchun cv2.imwrite (yo'l, ramka) dan foydalanishingiz mumkin va haqiqiy ko'rinishga ega bo'lish uchun uni orqaga qaytarishingiz mumkin.

Harakatni aniqlash strategiyasi juda aniq:

  1. Pastroq o'lchamdagi kadrlar ustida ishlash - bu erda to'liq HD formatida ishlashning hojati yo'q
  2. Bundan tashqari, iloji boricha kamroq shovqinni ta'minlash uchun tasvirlarni xiralashtiring.
  3. Oxirgi N kadrlarning o'rtacha ishlashini saqlang. Kadr tezligi 1 FPS atrofida bo'lgan ushbu dastur uchun (TensorFlow har bir kvadrat uchun biroz vaqt talab qilgani uchun), men N = 60 yaxshi natijalar berishini aniqladim. Ehtiyotkorlik bilan amalga oshirilganda, ko'proq ramka bilan ko'proq protsessor talab qilinmaydi (u ko'proq xotira oladi - lekin biz past piksellar sonli ramkalar bilan ishlayotganimizda ahamiyatsiz)
  4. Ishlayotgan o'rtacha ko'rsatkichdan joriy tasvirni olib tashlang (yozishda ehtiyot bo'ling - ijobiy va salbiy qiymatlarga ruxsat berishingiz kerak [-255.. 255], shuning uchun kadrni int ga aylantirish kerak)
  5. Siz kadrni kulrang o'lchovli ayirboshlashda (va o'rtacha) ayirishni amalga oshirishingiz yoki RGB kanallarining har biri uchun alohida bajarishingiz, so'ngra natijalarni birlashtirishingiz mumkin (bu men tanlagan strategiya bo'lib, uni rang o'zgarishiga sezgir qiladi).
  6. Deltaning ostonasidan foydalaning va shovqinni eroziya va kengayish orqali olib tashlang
  7. Nihoyat, deltali maydonlarning konturlarini qidiring - bu joylar harakat sodir bo'lgan va hozirgi tasvir oldingi tasvirlarning o'rtacha ko'rsatkichidan farq qiladi. Agar kerak bo'lsa, biz ushbu konturlar uchun chegara qutilarini topishimiz mumkin.

Men buni github -da topishingiz mumkin bo'lgan DeltaFinder python sinfida buni amalga oshirish uchun kodni kiritdim.

7 -qadam: TensorFlow yordamida ob'ektlarni aniqlang

Agar siz TensorFlow -ni o'rnatish tartibiga rioya qilgan bo'lsangiz, siz allaqachon TensorFlow -ni o'rnatgan va ishlayotganingizni sinovdan o'tkazgansiz.

Odamlarni ochiq havoda aniqlash uchun COCO ma'lumot to'plamida oldindan o'qitilgan modellar juda yaxshi ishlaydi - bu biz TensorFlow o'rnatilishi oxirida yuklagan model. Biz buni faqat xulosa chiqarish uchun ishlatishimiz kerak!

Shunga qaramay, men bu erda topishingiz mumkin bo'lgan narsalarni osonlashtirish uchun TFClassify python sinfidagi modelni yuklash va xulosa chiqarishini qamrab oldim.

8 -qadam: Raspberry Pi -da veb -serverni o'rnating

Raspberry Pi -da veb -serverni o'rnating
Raspberry Pi -da veb -serverni o'rnating

Ob'ektlarni aniqlash natijalariga kirishning eng oson yo'li - bu veb -brauzer, shuning uchun Raspberry Pi -da veb -serverni o'rnatamiz. Keyin biz uni ma'lum bir katalogdagi rasmlarga xizmat ko'rsatadigan qilib sozlashimiz mumkin.

Veb -server tuzilishi uchun bir nechta variant mavjud. Men shishani tanladim. Bu juda konfiguratsiya qilingan va Python bilan kengaytirish oson. Bizga kerak bo'lgan "o'lchov" ahamiyatsiz bo'lgani uchun, bu etarli emas edi.

Men uni yangi virtual tizimga o'rnatishni taklif qilaman, shuning uchun:

pi@raspberrypi: ~ $ mkvirtualenv webserv

(webserv) pi@raspberrypi: ~ $ pip Flaskni o'rnating

E'tibor bering, oddiy tarmoq sozlamalari bilan faqat sizning brauzeringiz Raspberry Pi bilan bir xil simsiz LAN tarmog'ida bo'lsa, unga kirish mumkin bo'ladi. Tashqi kirishga ruxsat berish uchun Internet -routeringizda port xaritasi / NAT konfiguratsiyasini yaratishingiz mumkin, lekin men buni tavsiya qilmayman. Men yozgan kod Raspberry Pi -ga Internetga umumiy kirishga ruxsat berishda sizga kerak bo'lgan xavfsizlikni ta'minlashga urinmaydi.

Flaskni tez ishga tushirish bo'yicha ko'rsatmaga amal qilib, o'rnatishni sinab ko'ring

9 -qadam: IFTTT yordamida Raspberry Pi -dan mobil xabarnomalar

IFTTT yordamida Raspberry Pi -dan mobil xabarnomalar
IFTTT yordamida Raspberry Pi -dan mobil xabarnomalar

Haqiqatan ham voqealar sodir bo'lganda mobil xabarnomalarni olishni xohlayman. Bu holatda, odam aniqlanganda va suv sathi pasayganda. Oddiy mobil ilova yozmasdan, buni amalga oshirishning eng oddiy usuli - IFTTT -dan foydalanish. IFTTT "Agar shunday bo'lsa" degan ma'noni anglatadi va ko'p turdagi tadbirlarni ko'p turdagi harakatlarni boshlashiga imkon beradi. Bizning holatda, bizni IFTTT Maker Webhook tetiği qiziqtiradi. Bu bizga IFTTT serveriga HTTP POST so'rovini yuborish orqali IFTTT -ni ishga tushirishimizga imkon beradi, shuningdek, nima bo'lganini ko'rsatuvchi ma'lumotlar bilan birga, bizning hisobimizga maxsus kalit o'rnatilgan. IFTTT mobil ilovasi yordamida mobil qurilmamizda bildirishnoma yaratish yoki undan murakkabroq narsa qilishimiz mumkin.

Mana buni qanday qilish kerak:

  1. Ifttt.com saytida IFTTT hisobini yarating
  2. Tizimga kirganingizda, Webhook xizmati sozlamalari sahifasiga o'ting va brauzeringizga URL kiriting (masalan, https://maker.ifttt.com/use/. Bu veb -sahifada sizga kalit va harakatlarni boshlash uchun ishlatiladigan URL ko'rsatiladi..
  3. Voqea tafsilotlari bilan Webhook ishga tushirilganda, mobil xabarnoma ishlab chiqaradigan IFTTT appletini yarating:

    1. "Mening appletlarim" ni va keyin "Yangi applet" ni bosing.
    2. "+Bu" ni bosing va "veb -kancalar" ni tanlang. Tafsilotlarga o'tish uchun "Veb -so'rovni qabul qilish" ni bosing
    3. Tadbiringizga nom bering, masalan. "PoolEvent" va "Trigger yaratish" ni bosing.
    4. "+" Tugmasini bosing va "bildirishnomalar" ni tanlang. Keyin "IFTTT ilovasidan boy xabarnoma yuborish" -ni tanlang.
    5. "Sarlavha" uchun "PoolPi" kabi narsani tanlang.
    6. "Xabar" uchun "Pool Pi aniqlandi:" yozing va "ingredient qo'shish" ni bosing. "Value1".
    7. 2 -qadamda nusxa ko'chirgan URL manzilingizga qayting. U yangi yaratilgan appletni ishga tushirish uchun URL manzilini ko'rsatadi. Hodisa nomini (hodisa) joyini almashtirib, URL manzilini nusxalash (masalan, PoolEvent)
  4. Mobil qurilmangiz uchun IFTTT ilovasini yuklab oling, o'rnating va unga kiring
  5. Uning ishlashini ko'rish uchun Raspberry Pi -da ushbu python skriptini ishga tushiring (mobil qurilmangizni ishga tushirish uchun bir necha soniya yoki daqiqa ketishi mumkin).

import so'rovlari

request.post ('https://maker.ifttt.com/trigger/PoolEvent/with/key/', json = {"value1": "Salom bildirishnomalar"})

10 -qadam: Raspberry Pi -ga RAT HAT qo'shing va uni solenoid klapanga ulang

Raspberry Pi -ga HAT o'rni qo'shing va uni solenoid klapanga ulang
Raspberry Pi -ga HAT o'rni qo'shing va uni solenoid klapanga ulang
Raspberry Pi -ga HAT o'rni qo'shing va uni solenoid klapanga ulang
Raspberry Pi -ga HAT o'rni qo'shing va uni solenoid klapanga ulang
Raspberry Pi -ga HAT o'rni qo'shing va uni solenoid klapanga ulang
Raspberry Pi -ga HAT o'rni qo'shing va uni solenoid klapanga ulang

Ushbu bosqichni davom ettirishdan oldin, Raspberry Pi: ssh -ni o'chiring va "sudo shutdown now" deb yozing, so'ng uni elektrdan uzing.

Bizning maqsadimiz - elektromagnit klapanning quvvat manbaini yoqish va o'chirish - bu 24V o'zgaruvchan tok quvvatiga asoslangan suv ta'minotini ochadigan yoki yopadigan valf. O'rnimizni - bu bizning Raspberry Pi ta'minlay oladigan raqamli signalga asoslangan sxemani ochadigan yoki yopadigan elektr komponentlar. Bu erda biz Raspberry Pi -ning raqamli signal pimlariga o'z o'rni ulashimiz va 24V AC quvvat manbai va elektromagnit valf o'rtasidagi kontaktni yopib qo'yishimiz kerak.

Raspberry Pi -dagi raqamli kirish yoki chiqish vazifasini bajaradigan pinlar GPIO - Umumiy maqsadli kirish/chiqish deb nomlanadi va ular Pi tomonidagi 40 ta pinli qatordir. Pi o'chirilgan va HAT rölesini unga mahkam joylashtiring. Men tanlagan HATda 3 ta o'rni bor va biz ulardan faqat bittasini ishlatamiz. Qolgan ikkitasi bilan nima qilishingiz mumkinligini tasavvur qiling:)

Endi Raspberry Pi -ni qayta yoqing. HAT o'rni ustidagi qizil "quvvat" diodli chiroq yonishi kerak, bu GPIO orqali Pi -dan quvvat olayotganini bildiradi. Keling, uni nazorat qila olishimizni tekshirib ko'ramiz: ssh -ni yana Pi -ga kiriting, python -ni kiriting va yozing:

gpiozero import qilish

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

Siz o'rni yoqilganligini bildiruvchi "chertish" ovozini eshitishingiz va birinchi o'rni ulangan holatda ekanligini ko'rsatuvchi LEDning yonishini ko'rishingiz kerak. Endi yozishingiz mumkin

dev.on ()

Bu o'rni "o'chirilgan" holatiga aylantiradi (g'alati, bilaman …) va pythondan () chiqadi.

Endi o'tish kabellari va uzunroq kabel yordamida 24V quvvat manbai va elektromagnit valf orasidagi o'rni ulanadi. Diagrammani ko'ring. Nihoyat, adapterlar yordamida solenoid klapanni kranga ulang va yuqoridagi buyruqlarni takrorlab, hammasini sinab ko'rishga tayyorlaning - ular suvni ochib o'chirishlari kerak.

Solenoid klapanga shlangni ulang va ikkinchi uchini hovuzga chuqur qo'ying. Endi sizda kompyuter tomonidan boshqariladigan basseynni to'ldirish tizimi mavjud va uni qachon ishga tushirish kerakligini aytish uchun sensorni ulash vaqti keldi.

11 -qadam: Suv sathining sensori ulang

Suv darajasi sensori ulang
Suv darajasi sensori ulang
Suv darajasi sensori ulang
Suv darajasi sensori ulang
Suv darajasi sensori ulang
Suv darajasi sensori ulang
Suv darajasi sensori ulang
Suv darajasi sensori ulang

Suv sathi sensori - bu suzuvchi, u suzgich pastga tushganda elektr zanjirini bog'laydi va suzganda uni uzadi. Agar siz uni hovuzga kerakli balandlikda joylashtirsangiz, suv darajasi etarli bo'lganda, suzuvchi yuqoriga ko'tariladi, lekin suv etarli bo'lmaganda pastga tushadi.

Raspberry Pi suv sathining sensori holatini bilishi uchun biz ochiq yoki yopiq kontaktlarning zanglashini sezish uchun Pi kerak. Yaxshiyamki, bu juda oddiy: biz o'rni nazorat qilish uchun raqamli chiqish sifatida foydalanadigan GPIO ulagichlari kirish vazifasini bajarishi mumkin (shuning uchun GPIO -dagi I). Xususan, agar biz sensorning bitta simini GPIO ulagichidagi +3.3V ga ulasak va boshqa sensor simini biz pastga tushirish usuli sifatida o'rnatadigan pinga ulasak (demak u odatda GND kuchlanish darajasida bo'ladi), bu pin o'lchanadi. raqamli "yuqori" yoki "yoqilgan" kuchlanish faqat suv sathining sensori kontaktlarning zanglashiga olib kelganda - suv darajasi past bo'lganda. Men GPIO pin 16 -ni kirish sifatida ishlatardim, uni yuqoridagi rasmda belgilab qo'ydim.

PIN kodni kirish sifatida sozlash va uning hozirgi holatini sinab ko'rish uchun:

gpiozero import qilish

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

Mumkin bo'lgan qiyinchiliklardan biri shundaki, sensor faqat holatini o'zgartirganda, u yoqilgan va o'chgan holatlar o'rtasida tez tebranib ketadi. Buning echimi "debuning" deb nomlanadi va chora ko'rishdan oldin holatning izchil o'zgarishini qidiradi. GPIOZERO kutubxonasida buning uchun kod bor, lekin negadir bu kod men uchun yaxshi ishlamadi. Men holatning izchil o'zgarishi aniqlanganda IFTTT signallarini ishga tushirish uchun oddiy tsikl yozdim, uni bu erda mening omborimda topishingiz mumkin.

12 -qadam: Hammasini bir -biriga bog'lash uchun kod yozing

Hammasini bir -biriga bog'lash uchun kod yozing
Hammasini bir -biriga bog'lash uchun kod yozing

Bo'ldi shu. Bizning sozlashimiz tugallandi. Siz o'z kodingizni yozib, narsalarni to'liq tizimga bog'lashingiz yoki men bergan koddan foydalanishingiz mumkin. Buning uchun faqat katalog tuzilishini yarating va omborni klonlang, masalan:

mkdir hovuz

cd poolpi git clone

So'ngra iftt_url.txt nomli fayllarni motion_alert va water_level kataloglarida tahrirlang, bu sizning IFTTT veb -kancangizning maxfiy kaliti bilan URL bo'lishi uchun. Har xil harakatlar uchun ikki xil veb -kancadan foydalanishingiz mumkin.

Nihoyat, biz ushbu kod avtomatik ravishda ishlashini xohlaymiz. Buning eng oson yo'li Linux crontab xizmati orqali amalga oshiriladi. Biz ikkita asosiy vazifa uchun bir nechta crontab qatorlarini qo'shishimiz mumkin:

  1. Bizning uchta dasturimizni ishga tushiring: har bir qayta ishga tushirilganda ob'ekt detektori, suv sathi sensori va veb -server
  2. Chiqish katalogini tozalang, eski rasmlar va eski videofayllarni o'chiring (men 1 kundan katta fayllarni va 7 kundan katta rasmlarni o'chirishni tanladim - tajriba qilib ko'ring)

Buning uchun nano matn muharririni ochadigan crontab -e yozing. Faylning pastki qismiga quyidagi qatorlarni qo'shing:

0 1 * * * find/home/pi/poolpi/output -type f -name " *.avi" -mtime +1 -o'chirish

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

Nihoyat, Raspberry Pi -ni qayta ishga tushiring. Endi u sizning hovuzingizni to'liq va xavfsiz saqlashga tayyor.

O'rnatish, kodni o'ylab ko'ring va mening github omborimni yulduzcha bilan belgilashni va foydali deb topsangiz, ko'rsatmaga sharh berishni unutmang. Men har doim ko'proq ma'lumot olishga intilaman.

Baxtli qilish!

IoT Challenge
IoT Challenge
IoT Challenge
IoT Challenge

IoT tanlovida ikkinchi o'rinni egalladi

Tavsiya: