Mündəricat:

Pool Pi Guy - AI ilə idarə olunan siqnalizasiya sistemi və Raspberry Pi istifadə edərək hovuz monitorinqi: 12 addım (şəkillərlə)
Pool Pi Guy - AI ilə idarə olunan siqnalizasiya sistemi və Raspberry Pi istifadə edərək hovuz monitorinqi: 12 addım (şəkillərlə)

Video: Pool Pi Guy - AI ilə idarə olunan siqnalizasiya sistemi və Raspberry Pi istifadə edərək hovuz monitorinqi: 12 addım (şəkillərlə)

Video: Pool Pi Guy - AI ilə idarə olunan siqnalizasiya sistemi və Raspberry Pi istifadə edərək hovuz monitorinqi: 12 addım (şəkillərlə)
Video: Qorxunc hekayələr. BASANAM-2. Mistik hekayələr. Fantastik. Son 2024, Iyul
Anonim
Pool Pi Guy - AI ilə idarə olunan siqnalizasiya sistemi və Raspberry Pi istifadə edərək hovuz monitorinqi
Pool Pi Guy - AI ilə idarə olunan siqnalizasiya sistemi və Raspberry Pi istifadə edərək hovuz monitorinqi

Evdə bir hovuza sahib olmaq əyləncəlidir, amma böyük məsuliyyətlə gəlir. Mənim ən böyük narahatlığım, kimsə hovuzun yanında (xüsusən kiçik uşaqlar) yanında olub -olmadığını yoxlamaqdır. Mənim ən böyük narahatçılığım, hovuz su xəttinin heç vaxt nasos qurğusunu işə salacaq və təmirdə $$$ dəyərində olan nasos girişindən aşağı düşməməsidir.

Bu yaxınlarda hər iki problemi həll etmək üçün su səviyyəsi sensoru və solenoid klapanla birlikdə OpenCV və TensorFlow ilə bir Raspberry Pi necə istifadə edəcəyimi anladım - və bunu etməkdən zövq alın!

Həm də əla bir siqnalizasiya sistemi olduğu ortaya çıxdı - hərəkəti aktivləşdirən, AI ilə idarə olunan, sonsuz özelleştirilebilir.

Gəlin içəri girək.

Addım 1: Böyük Plan

Bu təlimatda necə edəcəyimizi göstərəcəyik:

  1. OpenCV və TensorFlow ilə bir Raspberry Pi qurun
  2. Veb kameranı uzun bir USB kabeli ilə bağlayın
  3. Hərəkəti aşkar etmək üçün OpenCV alqoritmi yazın
  4. Obyekt aşkarlanması üçün TensorFlow istifadə edin
  5. Maraqlı şəkilləri göstərmək üçün Raspberry Pi üzərində bir veb server qurun
  6. Bir şəxs aşkar edildikdə mobil siqnalları işə salmaq üçün IFTTT ilə inteqrasiya edin
  7. Raspberry Pi -yə HAT rölesi bağlayın və hovuza su əlavə edəcək solenoid valfına bağlayın.
  8. Su səviyyəsi sensörünü Raspberry Pi -yə qoşun və Pi -nin GPIO -nu istifadə edərək onunla əlaqə qurun
  9. Hamısını bir yerə yapışdırmaq üçün bir kod yazın

Addım 2: Alış -veriş siyahısı

Alış-veriş siyahısı
Alış-veriş siyahısı

Bütün komponentlər Amazon -dan asanlıqla əldə edilə bilər. Təcrübə etmək və komponentləri dəyişdirməkdən çekinmeyin - bu əyləncənin yarısıdır!

  1. Moruq Pi
  2. Raspberry Pi Güc Təchizatı (burada qənaət etməyin)
  3. Yaddaş Kartı (daha böyük olması daha yaxşıdır)
  4. Çanta (bu, həm Pi, həm də Şapka yerləşdirmək üçün kifayət qədər böyükdür)
  5. USB Veb Kamera (hər hansı bir web kamerası edəcək, ancaq yaxşı şəkillər əldə edən və işığı yaxşı balanslaşdıran bir kamera istəyirsən)
  6. USB uzatma kabeli (lazım olduqda - Pi ilə kameranı yerləşdirəcəyiniz yer arasındakı məsafəni ölçün)
  7. HAT rölesi lövhəsi (bunun 3 rölesi var və yalnız birinə ehtiyacımız var, amma tezliklə digərləri üçün bir istifadə tapacaqsınız!)
  8. Solenoid
  9. Solenoid uyğunluğu 1 və uyğun 2
  10. Solenoid Güc Təchizatı (istənilən 24V AC işləyəcək)
  11. Kabel (yenə demək olar ki, hər bir 2 telli kabel edərdi - cərəyan minimaldır)
  12. Su Səviyyə Şamandıra Açarı (bu, sadəcə bir nümunədir, hovuzunuza nə asanlıqla bağlana biləcəyini yoxlayın)
  13. Bəzi jumper telləri və tel bağlayıcıları

Addım 3: Raspberry Pi qurun

Raspberry Pi qurun
Raspberry Pi qurun

Raspberry Pi böyük bir kiçik kompüterdir. Cəmi 35 dollara başa gəlir, ardıcıl işləyir və bir çox uyğun proqram və aparata malikdir. Quraşdırmaq olduqca asandır:

  1. SD kartınızı formatlayın. Bunun xüsusi qayğıya ehtiyacı var - Raspberry Pi yalnız FAT formatlı SD kartdan yüklənə bilər. Bu təlimatları izləyin.
  2. Raspberry Pi -ni USB klaviatura və siçana, üstəgəl HDMI displeyə qoşun və Raspberry Pi NOOBS dərsliyindəki təlimatları izləyin. WiFi qurduğunuzdan və SSH girişini aktiv etdiyinizdən əmin olun. Varsayılan pi hesabı üçün bir parol qurmağı unutmayın.
  3. Ev şəbəkənizdə Raspberry Pi üçün statik bir IP qurun - SSH -ni daxil etməyi çox asanlaşdıracaq.
  4. Masaüstünüzde/dizüstü kompüterinizdə bir ssh müştəri quraşdırdığınızdan əmin olun. Bir kompüter üçün buradan quraşdıra biləcəyiniz Putty -ni tövsiyə edərdim.
  5. USB və HDMI -nı Raspberry Pi -dən ayırın, yenidən başladın və ssh -ə daxil edin - hər şey işləmişsə, belə bir şey görməlisiniz:

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

Debian GNU/Linux sisteminə daxil olan proqramlar pulsuz proqramdır; hər bir proqram üçün dəqiq paylama şərtləri/usr/share/doc/*/copyright sənədlərində ayrı -ayrı fayllarda təsvir edilmişdir. Debian GNU/Linux, qüvvədə olan qanunun icazə verdiyi ölçüdə Qəti Zəmanət Yoxdur. Son giriş: Mon May 13 10:41:40 2019 tarixindən 104.36.248.13 pi@raspberrypi: ~ $

Addım 4: OpenCV qurun

OpenCV qurun
OpenCV qurun

OpenCV, kompüter görmə qabiliyyəti üçün inanılmaz bir görüntü manipulyasiya funksiyası toplusudur. Veb kameradan görüntüləri oxumağa, hərəkət sahələrini tapmağa, saxlamağa və s. Raspberry Pi -də quraşdırma çətin deyil, lakin bir az diqqət tələb edir.

Virtaulenvwrapper quraşdıraraq başlayın: bütün proqramlarımızı etmək üçün python istifadə edəcəyik və virtualenv OpenCV və TensorFlow vs Flask və ya GPIO üçün asılılıqları ayrı saxlamağımıza kömək edəcək:

pi@raspberrypi: ~ $ sudo pip virtualenvwrapper quraşdırın

İndi yeni bir mühit yaratmaq üçün "mkvirtualenv", üzərində işləmək üçün "workon" və daha çoxunu icra edə bilərsiniz.

Beləliklə, görüntü manipulyasiyamız üçün bir mühit yaradaq, varsayılan tərcüməçi olaraq python 3 (2019 -cu ildir, köhnə python 2 ilə qalmaq üçün heç bir səbəb yoxdur):

pi@raspberrypi: ~ $ mkvirtualenv cv -p python3

… (Cv) pi@raspberrypi: ~

İndi OpenCV qurmağa hazırıq. Əsasən Learn OpenCV -də əla dərsliyi izləyəcəyik. Xüsusilə 1 və 2 addımlarını izləyin:

sudo apt -y updateudo apt -y upgrade ## Asılılıqları qurun 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 yüklə libtiff5-dev sudo apt-get -y yüklə libtiff-dev sudo apt-get -y yüklə 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 qurun. 10-dev sudo apt-get -y yüklə libgtk2.0-dev libtbb-dev qt5-default sudo apt-get -y libatlas-base-dev sudo apt-get -y yüklə libmp3lame-dev libtheora-dev sudo apt-get -y libvorbis-dev libxvidcore-dev libx264-dev sudo apt-get -y qurun libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get -y qurun libavresample-dev sudo apt-get -y install x264 v4l-utils sudo apt -get -y libprotobuf quraşdırın -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- sınaq

İndi yalnız cV virtualenv -in içərisində python bağlamaları olan OpenCV -ni quraşdıra bilərik (hələ də oradasınız, elə deyilmi?)

opencv-Contrib-python quraşdırın

Və bu qədər! Raspberry Pi -də fotoşəkil və video çəkməyə, manipulyasiya etməyə və sərin olmağa hazır olan OpenCV quraşdırmışıq.

Bir python tərcüməçisi açaraq və opencv idxal edərək yoxlayın və heç bir səhv olmadığını yoxlayın:

(cv) pi@raspberrypi: ~ $ python

Python 3.5.3 (standart, 27 Sentyabr 2018, 17:25:39) [GCC 6.3.0 20170516] linuxda Daha çox məlumat üçün "yardım", "müəllif hüquqları", "kreditlər" və ya "lisenziya" yazın. >>> cv2 idxal edin >>>

Addım 5: TensorFlow qurun

TensorFlow qurun
TensorFlow qurun

TensorFlow, Google tərəfindən hazırlanmış və saxlanılan bir maşın öyrənmə / AI çərçivəsidir. Şəkillərdəki obyektlərin aşkarlanması da daxil olmaqla müxtəlif vəzifələr üçün dərin öyrənmə modelləri üçün geniş dəstəyə malikdir və indi Raspberry Pi-də quraşdırmaq olduqca sadədir. Kiçik Pi üzərində yüngül modellərinin performansı saniyədə təxminən 1 kadrdır ki, bu da bizimki kimi bir tətbiq üçün idealdır.

Edje Electronics -in ən son TensorFlow paylamaları ilə mümkün olan dəyişiklikləri nəzərə alaraq mükəmməl bir təlimatı izləyəcəyik:

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 lxml jupyter matplotlib cython (cv)) pi@raspberrypi: ~ $ sudo apt-get python-tk quraşdırın

İndi Google -un protobufunu tərtib etməliyik. Eyni əla dərsliyin 4 -cü addımındakı təlimatları izləyin

Nəhayət, TensorFlowun model təriflərini klonlayın və qurun - Edje Electronics təlimatında 5 -ci addımı izləyin.

6 -cı addımda da onların nümunəsini izləməkdən çəkinməyin, bu, Raspberry Pi -də obyekt aşkarlanması üçün əla bir girişdir.

Addım 6: OpenCV istifadə edərək Hərəkət Algılama

OpenCV -nin vebkameramızla əlaqə qura biləcəyini sınamaqla başlayaq: ssh -ni Raspberry Pi -yə daxil edin, cv virtualenv -ə keçin (workon cv), bir python tərcüməçisi açın (python yazın) və aşağıdakı python əmrlərini daxil edin:

idxal 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 ('Çərçivə ölçüsünü oxuyun: {} x {}').format (frame.shape [1], frame.shape [0])

Hər hansı bir şansla OpenCV -nin kameradan HD çərçivə oxuya bildiyini görəcəksiniz.

Cv2.imwrite (yol, çərçivə) istifadə edərək həmin çərçivəni diskə yaza və əsl görünüş əldə etmək üçün onu geri sftp edə bilərsiniz.

Hərəkəti aşkar etmək strategiyası olduqca irəlidir:

  1. Daha aşağı qətnamə çərçivələri üzərində işləyin - burada tam HD -də işləməyə ehtiyac yoxdur
  2. Əlavə olaraq, mümkün qədər az səs -küy təmin etmək üçün şəkilləri qarışdırın.
  3. Son N çərçivələrin işləyən ortalamasını saxlayın. Çərçivə sürətinin 1 FPS civarında olduğu bu tətbiq üçün (TensorFlow hər kadr üçün bir az vaxt tələb etdiyi üçün) N = 60 -ın yaxşı nəticələr verdiyini gördüm. Diqqətli bir tətbiq daha çox çərçivə ilə daha çox CPU almadığından (daha çox yaddaşa ehtiyac var - ancaq aşağı qətnamə çərçivələri ilə işləyərkən əhəmiyyətsizdir)
  4. Mövcud görüntünü işləyən ortalamadan çıxarın (yazarkən diqqətli olun - müsbət və mənfi dəyərlərə icazə verməlisiniz [-255.. 255], buna görə çərçivənin int -ə çevrilməsi lazımdır)
  5. Çərçivəni (və ortalamanın) boz miqyaslı bir çevrilməsində çıxara bilərsiniz və ya hər bir RGB kanalı üçün ayrı-ayrılıqda edə bilərsiniz və sonra nəticələri birləşdirə bilərsiniz (seçdiyim strategiya, rəng dəyişikliklərinə həssas edir)
  6. Deltada bir eşik istifadə edin və eroziya və genişlənmə ilə səs -küyü aradan qaldırın
  7. Nəhayət, deltası olan ərazilərin konturlarını axtarın - bu sahələr hərəkətin baş verdiyi yerlərdir və indiki görüntü əvvəlki şəkillərin ortalamasından fərqlidir. Lazım gələrsə bu konturlar üçün məhdudlaşdırıcı qutular da tapa bilərik.

Bunu etmək üçün kodu githubumda tapa biləcəyiniz DeltaFinder python sinifində əhatə etdim.

Addım 7: TensorFlow istifadə edərək obyektləri aşkar edin

TensorFlow quraşdırma proseduruna əməl etmisinizsə, artıq TensorFlow -un quraşdırıldığını və işlədiyinizi sınamısınız.

Ümumi açıq bir səhnədə insanları aşkar etmək üçün COCO məlumat dəstində əvvəlcədən öyrədilmiş modellər olduqca yaxşı performans göstərir - TensorFlow qurğusunun sonunda yüklədiyimiz model. Sadəcə nəticə çıxarmaq üçün istifadə etməliyik!

Yenə də burada tapa biləcəyiniz işləri asanlaşdırmaq üçün TFClassify python sinifində model yükləmə və nəticə çıxarmağı əhatə etdim.

Addım 8: Raspberry Pi üzərində bir Web Server qurun

Raspberry Pi üzərində bir Web Server qurun
Raspberry Pi üzərində bir Web Server qurun

Obyekt aşkarlama nəticələrinə daxil olmağın ən asan yolu bir veb brauzerdir, buna görə də Raspberry Pi -də bir veb server quraq. Daha sonra müəyyən bir kataloqdakı şəkilləri təqdim etmək üçün qura bilərik.

Veb server çərçivəsi üçün bir çox variant var. Şüşəni seçdim. Python ilə son dərəcə konfiqurasiya edilə bilər və genişləndirmək asandır. Ehtiyacımız olan "miqyas" əhəmiyyətsiz olduğundan, kifayət qədər çox idi.

Yeni bir virtualenv -də quraşdırmağı təklif edirəm, buna görə:

pi@raspberrypi: ~ $ mkvirtualenv webserv

(webserv) pi@raspberrypi: ~ $ pip Flask quraşdırın

Unutmayın ki, normal bir şəbəkə quruluşu ilə yalnız brauzeriniz Raspberry Pi ilə eyni simsiz LANda olduqda əldə edilə bilər. Xarici girişə icazə vermək üçün İnternet yönlendiricinizde bir port eşleme / NAT konfiqurasiyası yarada bilərsiniz - amma bunun əksini məsləhət görürəm. Yazdığım kod, Raspberry Pi -yə ümumi İnternetə icazə verərkən lazım olacaq təhlükəsizliyi təmin etməyə çalışmır.

Flask sürətli başlanğıc təlimatını izləyərək qurğunuzu sınayın

Addım 9: IFTTT istifadə edərək Raspberry Pi -dən Mobil Bildirişlər

IFTTT istifadə edərək Raspberry Pi -dən Mobil Bildirişlər
IFTTT istifadə edərək Raspberry Pi -dən Mobil Bildirişlər

Hadisələr baş verəndə mobil bildirişlər almaq istəyirəm. Bu vəziyyətdə, bir adam aşkar edildikdə və suyun səviyyəsi aşağı düşəndə. Xüsusi bir mobil tətbiq yazmadan bunu etməyimin ən sadə yolu IFTTT -dən istifadə etməkdir. IFTTT "Əgər bu o zaman" deməkdir və bir çox növ hadisənin bir çox hərəkət növünü tetiklemesini təmin edir. Bizim vəziyyətimizdə, IFTTT Maker Webhook tətiyi ilə maraqlanırıq. Bu, hesabımıza təyin edilmiş xüsusi bir açarla IFTTT serverinə HTTP POST sorğusu göndərərək IFTTT hərəkətini tetiklememizi və nə baş verdiyini göstərən məlumatları təqdim etməyimizi təmin edir. IFTTT mobil tətbiqini istifadə edərək mobil cihazımızda bir bildiriş yaratmaq və ya daha mürəkkəb bir şey etmək kimi etdiyimiz hərəkət sadə ola bilər.

Budur bunu necə etmək olar:

  1. İfttt.com saytında IFTTT hesabı yaradın
  2. Daxil olarkən, Webhook xidməti ayarları səhifəsinə keçin və brauzerinizə URL daxil edin (https://maker.ifttt.com/use/ kimi bir şey. Bu veb səhifəsi sizə açarınızı və hərəkətləri tetiklemek üçün istifadə edəcəyiniz URL -ni göstərəcək..
  3. Webhook hadisənin təfərrüatları ilə işə salındıqda mobil bildiriş yaradacaq bir IFTTT proqramı yaradın:

    1. "Mənim Appletlərim" və sonra "New Applet" düyməsini basın.
    2. "+Bu" düyməsini basın və "webhooks" u seçin. Detallara keçmək üçün "Veb sorğusu al" düyməsini basın
    3. Tədbirinizə bir ad verin, məsələn. "PoolEvent" və "Tetikleyici yarat" düyməsini basın.
    4. "+O" düyməsini basın və "bildirişlər" seçin. Sonra "IFTTT tətbiqindən zəngin bir bildiriş göndər" seçin.
    5. "Başlıq" üçün "PoolPi" kimi bir şey seçin
    6. "Mesaj" üçün "Pool Pi təsbit edildi:" yazın və "tərkib əlavə et" düyməsini basın.. "Dəyər1".
    7. 2 -ci addımda kopyaladığınız URL -ə qayıdın. Yeni yaradılmış appletinizi çağırmaq üçün istifadə edəcəyiniz URL -i göstərəcək. {Event} yer tutucusunu hadisə adı ilə əvəz edərək həmin URL -ni kopyalayın (məsələn, PoolEvent)
  4. Mobil cihazınız üçün IFTTT tətbiqini yükləyin, quraşdırın və daxil olun
  5. İşlədiyini görmək üçün Raspberry Pi -də bu python skriptini işə salın (mobil cihazınızda işə salınması bir neçə saniyə və ya dəqiqə çəkə bilər):

idxal sorğuları

request.post ('https://maker.ifttt.com/trigger/PoolEvent/with/key/', json = {"value1": "Salam Bildirişlər"})

Addım 10: Raspberry Pi -yə bir Relay HAT əlavə edin və Solenoid Vana bağlayın

Raspberry Pi -yə bir Relay HAT əlavə edin və Solenoid Vana bağlayın
Raspberry Pi -yə bir Relay HAT əlavə edin və Solenoid Vana bağlayın
Raspberry Pi -yə bir Relay HAT əlavə edin və Solenoid Vana bağlayın
Raspberry Pi -yə bir Relay HAT əlavə edin və Solenoid Vana bağlayın
Raspberry Pi -yə bir Relay HAT əlavə edin və Solenoid Vana bağlayın
Raspberry Pi -yə bir Relay HAT əlavə edin və Solenoid Vana bağlayın

Bu addıma davam etməzdən əvvəl Raspberry Pi: ssh -i söndürün və "sudo shutdown now" yazın, sonra gücdən ayırın.

Məqsədimiz, solenoid klapanın enerji təchizatını açmaq və söndürməkdir - elektrik təchizatından aldığı 24V AC gücünə əsaslanan su təchizatını aça və ya bağlaya bilən bir klapan. Röleler, Raspberry Pi -nin təmin edə biləcəyi rəqəmsal bir siqnal əsasında bir dövrəni aça və ya bağlaya bilən elektrik komponentləridir. Burada etdiyimiz şey, Raspberry Pi -nin bu rəqəmsal siqnal pinlərinə bir röle bağlamaq və 24V AC enerji təchizatı ilə solenoid klapan arasındakı dövrəni bağlamaqdır.

Raspberry Pi üzərindəki rəqəmsal giriş və ya çıxış kimi işləyə bilən pinlərə GPIO deyilir - Ümumi Məqsədli Giriş/Çıxış və Pi tərəfindəki 40 sancaq sırasıdır. Pi söndürüldükdə və HAT rölesini möhkəm bir şəkildə daxil edin. Seçdiyim Şlyapada 3 röle var və onlardan yalnız birini istifadə edəcəyik. Digər ikisi ilə nə edə biləcəyinizi düşünün:)

İndi Raspberry Pi -ni yenidən yandırın. HAT rölesi üzərindəki qırmızı "güc" LED -i yandırılmalı və GPIO vasitəsilə Pi -dən güc aldığını göstərir. Bunu idarə edə biləcəyimizi sınayaq: ssh -i yenidən Pi -yə daxil edin, python daxil edin və yazın:

gpiozero idxal edin

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

Rölin işə salındığını göstərən bir səsli "klik" səsi eşitməlisiniz və ilk rölin bağlı vəziyyətdə olduğunu göstərən bir LED dönüşünü görməlisiniz. İndi yaza bilərsiniz

dev.on ()

Bu, röleyi "söndürmə" vəziyyətinə çevirəcək (qəribədir, bilirəm …) və pythondan çıxacaq.

İndi tullanan kabellər və daha uzun kabel istifadə edərək, 24V enerji təchizatı ilə solenoid klapan arasındakı röleyi bağlayın. Diaqrama baxın. Nəhayət, adapterləri istifadə edərək solenoid klapanı bir musluğa bağlayın və yuxarıdakı əmrləri təkrarlayaraq hamısını sınamağa hazır olun - suyu açıb söndürməlidirlər.

Solenoid valfına bir hortum bağlayın və digər ucunu hovuzun dərinliyinə qoyun. İndi kompüter tərəfindən idarə olunan bir hovuz toplama sisteminiz var və nə vaxt çalışacağını söyləmək üçün bir sensor bağlamağın vaxtı gəldi.

Addım 11: Su Səviyyə Sensorunu qoşun

Su Səviyyə Sensorunu qoşun
Su Səviyyə Sensorunu qoşun
Su Səviyyə Sensorunu qoşun
Su Səviyyə Sensorunu qoşun
Su Səviyyə Sensorunu qoşun
Su Səviyyə Sensorunu qoşun
Su Səviyyə Sensorunu qoşun
Su Səviyyə Sensorunu qoşun

Su səviyyəsi sensoru, şamandıra aşağı düşəndə elektrik dövrəsini birləşdirən və yuxarı qalxdıqda onu pozan bir şamandır. Düzgün hündürlükdə hovuza daxil etsəniz, su səviyyəsi kifayət qədər olduqda float yuxarı qalxacaq, lakin kifayət qədər su olmadıqda aşağı düşəcək.

Raspberry Pi -nin su səviyyəsi sensorunun vəziyyətini bilməsi üçün Pi -nin açıq və ya qapalı bir dövrə hiss etməsi üçün ehtiyacımız var. Xoşbəxtlikdən bu çox sadədir: röleleri idarə etmək üçün rəqəmsal çıxış olaraq istifadə etdiyimiz eyni GPIO bağlayıcıları giriş rolunu oynaya bilər (buna görə GPIO -da I). Xüsusilə, sensorun bir telini GPIO konnektorundakı +3.3V-ə və digər sensor telini açılan giriş olaraq konfiqurasiya etdiyimiz bir pinə bağlasaq (normalda GND gərginlik səviyyəsində olacağı deməkdir), bu pin ölçəcək rəqəmsal "yüksək" və ya "açıq" gərginlik yalnız su səviyyəsi sensoru dövrəni bağladıqda - suyun səviyyəsi aşağı olduqda. Yuxarıdakı şəkildə qeyd etdiyim GPIO pin 16 -nı giriş olaraq istifadə etdim.

Pini giriş olaraq konfiqurasiya etmək və mövcud vəziyyətini yoxlamaq üçün python kodu:

gpiozero idxal edin

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

Potensial bir problem, sensorun vəziyyəti dəyişdikdə, açma və söndürmə vəziyyətləri arasında sürətlə salınmasıdır. Bunun həlli "debuning" olaraq bilinir və hərəkətə keçməzdən əvvəl ardıcıl bir vəziyyət dəyişikliyi axtarır. GPIOZERO kitabxanasında bunun üçün kod var, amma nədənsə bu kod mənim üçün yaxşı işləmədi. Buradakı depomda tapa biləcəyiniz ardıcıl bir vəziyyət dəyişikliyi aşkar edildikdə IFTTT xəbərdarlıqlarını işə salmaq üçün sadə bir döngə yazdım.

Addım 12: Hamısını bir -birinə bağlamaq üçün kod yazın

Hamısını bir yerdə bağlamaq üçün kod yazın
Hamısını bir yerdə bağlamaq üçün kod yazın

Bu belədir. Quraşdırmamız tamamlandı. Hər şeyi tam bir sistemə bağlamaq üçün öz kodunuzu yaza və ya verdiyim kodu istifadə edə bilərsiniz. Bunu etmək üçün yalnız bir kataloq quruluşu yaradın və depoyu klonlayın, məsələn:

mkdir hovuz

cd poolpi git klonu

Daha sonra, gizli açarınızla öz IFTTT veb çəngəlinizin URL'sinə sahib olmaq üçün motion_alert və water_level qovluqlarında ifttt_url.txt adlı faylları redaktə edin. Fərqli hərəkətlər üçün iki fərqli veb çəngəl istifadə edə bilərsiniz.

Nəhayət, bu kodun avtomatik işləməsini istəyirik. Bunu həyata keçirməyin ən asan yolu Linux crontab xidmətidir. İki əsas vəzifə üçün bəzi crontab xətləri əlavə edə bilərik:

  1. Üç proqramımızı işə salın: hər yenidən başladıqda obyekt detektoru, su səviyyəsi sensoru və veb server
  2. Çıxış qovluğunu təmizləyin, köhnə şəkilləri və köhnə video faylları silin (1 gündən yuxarı olan faylları və 7 gündən yuxarı olan şəkilləri silməyi seçdim - sınaqdan keçməkdən çəkinin)

Bunu etmək üçün nano mətn redaktorunuzu açacaq crontab -e yazın. Faylın altına aşağıdakı sətirləri əlavə edin:

0 1 * * * find/home/pi/poolpi/output -type f -name " *.avi" -mtime +1 -silmək

0 2 * * * find/home/pi/poolpi/output -type f -name " *.jpg" -time +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

Nəhayət, Raspberry Pi -ni yenidən başladın. Hovuzunuzu dolu və təhlükəsiz saxlamağa hazırdır.

Quraşdırma, kodla məşğul olun və github depomuzu ulduzlamağı və faydalı hesab edirsinizsə təlimatlandırıcıya şərh verməyi unutmayın. Həmişə daha çox şey öyrənməyə çalışıram.

Xoşbəxtlik!

IoT Challenge
IoT Challenge
IoT Challenge
IoT Challenge

IoT Challenge -da ikinci yer

Tövsiyə: