İçindekiler:

Pool Pi Guy - Raspberry Pi Kullanarak AI Tahrikli Alarm Sistemi ve Havuz İzleme: 12 Adım (Resimli)
Pool Pi Guy - Raspberry Pi Kullanarak AI Tahrikli Alarm Sistemi ve Havuz İzleme: 12 Adım (Resimli)

Video: Pool Pi Guy - Raspberry Pi Kullanarak AI Tahrikli Alarm Sistemi ve Havuz İzleme: 12 Adım (Resimli)

Video: Pool Pi Guy - Raspberry Pi Kullanarak AI Tahrikli Alarm Sistemi ve Havuz İzleme: 12 Adım (Resimli)
Video: Part 5 - The Jungle Audiobook by Upton Sinclair (Chs 18-22) 2024, Kasım
Anonim
Pool Pi Guy - Raspberry Pi Kullanarak AI Tahrikli Alarm Sistemi ve Havuz İzleme
Pool Pi Guy - Raspberry Pi Kullanarak AI Tahrikli Alarm Sistemi ve Havuz İzleme

Evde havuza sahip olmak eğlencelidir, ancak büyük sorumluluk getirir. En büyük endişem, havuzun yakınında kimse olup olmadığını (özellikle küçük çocuklar) izlemek. En büyük sıkıntım, havuz suyu hattının asla pompa girişinin altına düşmediğinden emin olmak, bu da pompayı kuru çalıştıracak ve onarım maliyetini $$$'a düşürecek.

Kısa süre önce OpenCV ve TensorFlow ile bir Raspberry Pi'yi, su seviyesi sensörü ve solenoid valf ile birlikte her iki sorunu da çözmek için nasıl kullanacağımı buldum - ve bunu yaparken eğlenin!

Aynı zamanda harika bir alarm sistemi olduğu ortaya çıktı - hareketle etkinleştirildi, AI kontrollü, sonsuz özelleştirilebilir.

Hadi dalalım.

Adım 1: Büyük Plan

Bu talimatta nasıl yapılacağını göstereceğiz:

  1. OpenCV ve TensorFlow ile bir Raspberry Pi kurun
  2. Uzun bir USB kablosuyla bir Web Kamerası bağlayın
  3. Hareketi algılamak için bir OpenCV algoritması yazın
  4. Nesne algılama için TensorFlow kullanın
  5. İlginç görüntüleri göstermek için Raspberry Pi'de bir web sunucusu kurun
  6. Bir kişinin tespit edilmesi durumunda mobil uyarıları tetiklemek için IFTTT ile entegre edin
  7. Raspberry Pi'ye bir röle HAT takın ve havuza su ekleyecek bir solenoid valfe bağlayın.
  8. Raspberry Pi'ye bir su seviyesi sensörü takın ve Pi'nin GPIO'sunu kullanarak onunla arayüz oluşturun
  9. Hepsini birbirine yapıştırmak için bir kod yazın

2. Adım: Alışveriş Listesi

Alışveriş listesi
Alışveriş listesi

Tüm bileşenler Amazon'dan kolayca temin edilebilir. Bileşenleri denemekten ve değiştirmekten çekinmeyin - eğlencenin yarısı bu!

  1. Ahududu Pi
  2. Raspberry Pi Güç Kaynağı (burayı atlamayın)
  3. Hafıza Kartı (daha büyük daha iyidir)
  4. Kasa (bu, hem Pi'yi hem de HAT'ı barındıracak kadar büyüktür)
  5. USB Web Kamerası (herhangi bir web kamerası işe yarar, ancak iyi görüntüler alan ve aydınlatmayı iyi dengeleyen bir web kamerası istersiniz)
  6. USB uzatma kablosu (gerekirse - Pi ile kamerayı yerleştireceğiniz yer arasındaki mesafeyi ölçün)
  7. Röle kartı HAT (bunun 3 rölesi var ve sadece bir tanesine ihtiyacımız var, ancak diğerleri için çok yakında bir kullanım bulacaksınız!)
  8. solenoid
  9. Solenoid bağlantı parçası 1 ve Bağlantı 2 (bu gerçekten solenoidi neye taktığınıza bağlıdır, ancak bunlar benim için işe yaradı)
  10. Solenoid Güç Kaynağı (herhangi bir 24V AC yapar)
  11. Kablo (yine hemen hemen her 2 telli kablo bunu yapar - akım minimumdur)
  12. Su Seviyesi Şamandıra Anahtarı (bu sadece bir örnektir, havuzunuza nelerin kolayca bağlanabileceğini kontrol edin)
  13. Bazı Jumper kabloları ve Kablo konektörleri

3. Adım: Raspberry Pi'nizi Kurun

Raspberry Pi'nizi Kurun
Raspberry Pi'nizi Kurun

Raspberry Pi harika bir küçük bilgisayardır. Yalnızca 35 ABD dolarına mal olur, tutarlı çalışır ve birçok uyumlu yazılım ve donanıma sahiptir. Ayarlamak oldukça kolaydır:

  1. SD kartınızı biçimlendirin. Bu özel bir özen gerektirir - Raspberry Pi yalnızca FAT formatlı bir SD karttan önyüklenebilir. Bu talimatları izleyin.
  2. Raspberry Pi'yi bir USB klavye ve fareye ve ayrıca bir HDMI ekrana bağlayın ve Raspberry Pi NOOBS eğitimindeki talimatları izleyin. WiFi kurduğunuzdan ve SSH erişimini etkinleştirdiğinizden emin olun. Varsayılan pi hesabı için bir parola ayarlamayı unutmayın.
  3. Ev ağınızda Raspberry Pi için statik bir IP ayarlayın - bu, SSH'ye girmeyi çok daha kolay hale getirir.
  4. Masaüstünüzde/dizüstü bilgisayarınızda bir ssh istemcisinin kurulu olduğundan emin olun. PC için buradan yükleyebileceğiniz Putty'yi öneririm.
  5. USB ve HDMI'yı Raspberry Pi'den çıkarın, yeniden başlatın ve ssh'ye takın - hepsi işe yaradıysa, şöyle bir şey görmelisiniz:

Linux raspberrypi 4.14.98-v7+ #1200 SMP 12 Şubat Salı 20:27:48 GMT 2019 armv7l

Debian GNU/Linux sistemine dahil edilen programlar özgür yazılımlardır; her program için kesin dağıtım koşulları /usr/share/doc/*/copyright içindeki ayrı dosyalarda açıklanmıştır. Debian GNU/Linux, yürürlükteki yasaların izin verdiği ölçüde, KESİNLİKLE HİÇBİR GARANTİ ile birlikte gelir. Son giriş: 13 Mayıs 10:41:40 2019, 104.36.248.13 pi@raspberrypi:~ $

Adım 4: OpenCV Kurulumu

OpenCV Kurulumu
OpenCV Kurulumu

OpenCV, bilgisayarla görü için görüntü işleme işlevlerinin harika bir koleksiyonudur. Web kamerasından görüntüleri okumamıza, hareket alanlarını bulmak için onları manipüle etmemize, kaydetmemize ve daha pek çok şeye izin verecek. Raspberry Pi'de kurulum yapmak zor değil ama biraz dikkat gerektiriyor.

Virtaulenvwrapper'ı yükleyerek başlayın: tüm programlamamızı yapmak için python kullanacağız ve virtualenv, OpenCV ve TensorFlow ile Flask veya GPIO için bağımlılıkları ayrı tutmamıza yardımcı olacaktır:

pi@raspberrypi:~ $ sudo pip virtualenvwrapper yükleyin

Artık yeni bir ortam oluşturmak için "mkvirtualenv", üzerinde çalışmak için "workon" ve daha fazlasını çalıştırabilirsiniz.

Öyleyse, varsayılan yorumlayıcı olarak python 3 ile görüntü işlememiz için bir ortam oluşturalım (2019, eski python 2'ye bağlı kalmak için hiçbir neden yok):

pi@raspberrypi:~ $ mkvirtualenv cv -p python3

… (cv) pi@raspberrypi:~

Artık OpenCV'yi kurmaya hazırız. Çoğunlukla OpenCV Öğrenin'deki mükemmel öğreticiyi takip edeceğiz. Özellikle 1. ve 2. adımlarını izleyin:

sudo apt -y updatesudo apt -y yükseltme ## Bağımlılıkları yükleyin sudo apt-get -y kurulum inşa-temel checkinstall cmake pkg-config yasm sudo apt-get -y git gfortran yükleyin sudo apt-get -y install libjpeg8-dev libjasper- dev libpng12-dev sudo apt-get -y kurulumu libtiff5-dev sudo apt-get -y kurulumu libtiff-dev sudo apt-get -y kurulumu 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'ı kurun. 10-dev sudo apt-get -y kurulum libgtk2.0-dev libtbb-dev qt5-varsayılan sudo apt-get -y kurulum libatlas-base-dev sudo apt-get -y kurulum libmp3lame-dev libtheora-dev sudo apt-get -y libvorbis-dev libxvidcore-dev libx264-dev kurulumu sudo apt-get -y libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get kurulumu -y libavresample-dev kurulumu sudo apt-get -y x264 v4l-utils kurulumu sudo apt-get -y kurulum libprotobuf -dev protobuf-derleyici sudo apt-get -y kurulum libgoogle-glog-dev libgflags-dev sudo apt-get -y kurulum libgphoto2-dev libeigen3-dev libhdf5-dev doxygen sudo apt-get kurulum libqtgui4 sudo apt-get kurulum libq Ölçek

Artık OpenCV'yi python bağlamaları ile cv virtualenv içine kurabiliriz (hala içindesiniz, değil mi?)

pip kurulumu opencv-katkı-python

Ve bu kadar! Raspberry Pi'mizde fotoğraf ve video çekmeye, onları manipüle etmeye ve havalı olmaya hazır OpenCV yüklü.

Bir python yorumlayıcısı açıp opencv'yi içe aktararak bunu kontrol edin ve herhangi bir hata olmadığını kontrol edin:

(cv) pi@raspberrypi:~ $ python

Python 3.5.3 (varsayılan, 27 Eylül 2018, 17:25:39) Linux'ta [GCC 6.3.0 20170516] Daha fazla bilgi için "yardım", "telif hakkı", "kredi" veya "lisans" yazın. >>> cv2'yi içe aktar >>>

Adım 5: TensorFlow'u Ayarlayın

TensorFlow Kurulumu
TensorFlow Kurulumu

TensorFlow, Google tarafından geliştirilen ve sürdürülen bir makine öğrenimi / AI çerçevesidir. Görüntülerde nesne algılama da dahil olmak üzere çeşitli görevler için derin öğrenme modelleri için kapsamlı bir desteğe sahiptir ve artık Raspberry Pi'ye kurulumu oldukça basittir. Hafif modellerinin minik Pi üzerindeki performansı saniyede yaklaşık 1 karedir ve bu bizimki gibi bir uygulama için mükemmel derecede yeterlidir.

Temel olarak, daha yeni TensorFlow dağıtımlarının mümkün kıldığı değişikliklerle Edje Electronics'in mükemmel öğreticisini takip edeceğiz:

pi@raspberrypi:~ $ workon cv

(cv) pi@raspberrypi:~ $ pip tensorflow kurulumu (cv) pi@raspberrypi:~ $ sudo apt-get kurulumu libxml2-dev libxslt-dev (cv) pi@raspberrypi:~ $ pip kurulum yastığı lxml jupyter matplotlib cython (cv)) pi@raspberrypi:~ $ sudo apt-get install python-tk

Şimdi Google'ın protobuf'unu derlememiz gerekiyor. Sadece aynı mükemmel öğreticinin 4. adımındaki talimatları izleyin

Son olarak, TensorFlow'un model tanımlarını klonlayın ve ayarlayın - Edje Electronics eğitimindeki 5. adımı izleyin

6. adımda da örneklerini takip etmekten çekinmeyin, Raspberry Pi'de nesne algılamaya harika bir giriş.

Adım 6: OpenCV Kullanarak Hareket Algılama

OpenCV'nin web kameramızla arayüz oluşturabileceğini test ederek başlayalım: Raspberry Pi'ye ssh, cv virtualenv'e (workon cv) gidin, bir python yorumlayıcı açın (sadece python yazın) ve aşağıdaki python komutlarını girin:

cv2'yi içe aktar

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('Çerçeve boyutunu okuyun: {}x{}'.format(çerçeve.şekil[1], kare.şekil[0])

Şansınız yaver giderse OpenCV'nin kameradan bir HD kare okuyabildiğini göreceksiniz.

Bu çerçeveyi diske yazmak için cv2.imwrite(yol, çerçeve) kullanabilirsiniz ve gerçek bir görünüm elde etmek için geri sftp yapabilirsiniz.

Hareketi algılama stratejisi oldukça basittir:

  1. Daha düşük çözünürlüklü kareler üzerinde çalışın - burada full HD'de çalışmaya gerek yok
  2. Ayrıca, mümkün olduğunca az gürültü sağlamak için görüntüleri bulanıklaştırın.
  3. Son N karenin çalışan bir ortalamasını tutun. Kare hızının 1 FPS civarında olduğu bu uygulama için (TensorFlow kare başına biraz zaman aldığından), N=60'ın iyi sonuçlar verdiğini gördüm. Ve dikkatli bir uygulama daha fazla çerçeve ile daha fazla CPU almadığından (daha fazla bellek gerektirir - ancak daha düşük çözünürlüklü çerçevelerle çalıştığımızda bu ihmal edilebilir)
  4. Mevcut görüntüyü değişen ortalamadan çıkarın (sadece yazarken dikkatli olun - pozitif ve negatif değerlere [-255..255] izin vermeniz gerekir, bu nedenle çerçevenin int'ye dönüştürülmesi gerekir)
  5. Çıkarmayı çerçevenin (ve ortalamanın) gri tonlamalı dönüşümünde gerçekleştirebilir veya bunu RGB kanallarının her biri için ayrı ayrı yapabilir ve ardından sonuçları birleştirebilirsiniz (seçtiğim strateji bu, renk değişikliklerine duyarlı hale getirir)
  6. Deltada bir eşik kullanın ve erozyon ve genişleme ile gürültüyü ortadan kaldırın
  7. Son olarak deltalı alanların dış hatlarını arayın - bu alanlar hareketin olduğu ve mevcut görüntünün önceki görüntülerin ortalamasından farklı olduğu alanlardır. Gerekirse bu konturlar için sınırlayıcı kutular da bulabiliriz.

Bunu yapmak için kodu, github'ımda bulabileceğiniz DeltaFinder python sınıfında kapsülledim.

7. Adım: TensorFlow Kullanarak Nesneleri Algılayın

TensorFlow kurulum prosedürünü izlediyseniz, TensorFlow'un kurulu olduğunu ve çalıştığını zaten test etmişsinizdir.

Genel bir dış mekan sahnesinde insanları tespit etmek amacıyla, COCO veri setinde önceden eğitilmiş modeller oldukça iyi performans gösterir - bu, tam olarak TensorFlow kurulumunun sonunda indirdiğimiz modeldir. Sadece çıkarım için kullanmamız gerekiyor!

Yine, burada bulabileceğiniz işleri kolaylaştırmak için TFClassify python sınıfında model yükleme ve çıkarımı kapsülledim.

8. Adım: Raspberry Pi'de bir Web Sunucusu Kurun

Raspberry Pi'de Web Sunucusu Kurun
Raspberry Pi'de Web Sunucusu Kurun

Nesne algılama sonuçlarına ulaşmanın en kolay yolu bir web tarayıcısıdır, bu yüzden Raspberry Pi üzerinde bir web sunucusu kuralım. Daha sonra belirli bir dizinden resimler sunacak şekilde ayarlayabiliriz.

Bir web sunucusu çerçevesi için birden çok seçenek vardır. Flask'ı seçtim. Son derece yapılandırılabilir ve Python ile genişletilmesi kolaydır. İhtiyacımız olan "ölçek" önemsiz olduğundan, fazlasıyla yeterliydi.

Yeni bir virtualenv'e yüklemenizi öneririm, yani:

pi@raspberrypi:~ $ mkvirtualenv webserv

(webserv)pi@raspberrypi: ~ $ pip Flask'ı kurun

Normal bir ağ kurulumuyla, yalnızca tarayıcınız Raspberry Pi'nizle aynı kablosuz LAN'dayken erişilebilir olacağını unutmayın. Harici erişime izin vermek için İnternet yönlendiricinizde bir bağlantı noktası eşleme / NAT yapılandırması oluşturabilirsiniz - ancak buna karşı öneriyorum. Yazdığım kod, Raspberry Pi'nize genel İnternet erişimine izin verirken ihtiyaç duyacağınız güvenliği sağlamaya çalışmıyor.

Flask hızlı başlangıç kılavuzunu izleyerek kurulumunuzu test edin

9. Adım: Raspberry Pi'den IFTTT Kullanarak Mobil Bildirimler

IFTTT Kullanarak Raspberry Pi'den Mobil Bildirimler
IFTTT Kullanarak Raspberry Pi'den Mobil Bildirimler

Olaylar meydana geldiğinde gerçekten mobil bildirimler almak istiyorum. Bu durumda bir kişi tespit edildiğinde ve su seviyesi düştüğünde. Özel bir mobil uygulama yazmak zorunda kalmadan bunu yapmanın en basit yolu IFTTT kullanmaktır. IFTTT, "Bu O Zaman O Olursa" anlamına gelir ve birçok olay türünün birçok eylem türünü tetiklemesine olanak tanır. Bizim durumumuzda, IFTTT Maker Webhook tetikleyicisiyle ilgileniyoruz. Bu, IFTTT sunucusuna, ne olduğunu belirten verilerle birlikte, hesabımıza atanmış özel bir anahtarla bir HTTP POST isteği yaparak bir IFTTT eylemini tetiklememizi sağlar. Yaptığımız işlem, IFTTT mobil uygulamasını kullanarak mobil cihazımızda bir bildirim oluşturmak kadar basit veya bundan daha karmaşık bir şey olabilir.

Bunu nasıl yapacağınız aşağıda açıklanmıştır:

  1. ifttt.com'da bir IFTTT hesabı oluşturun
  2. Giriş yaparken, Webhook hizmeti ayarları sayfasına gidin ve tarayıcınıza URL'yi girin (https://maker.ifttt.com/use/ gibi bir şey. Bu web sayfası size anahtarınızı ve eylemleri tetiklemek için kullanacağınız URL'yi gösterecektir..
  3. Etkinliğin ayrıntılarıyla Web kancası tetiklendiğinde bir mobil bildirim oluşturacak bir IFTTT uygulaması oluşturun:

    1. "Uygulamalarım"ı ve ardından "Yeni Uygulama"yı tıklayın.
    2. "+bunu" tıklayın ve "web kancaları"nı seçin. Ayrıntılara gitmek için "Web isteği al"ı tıklayın
    3. Etkinliğinize bir ad verin, ör. "PoolEvent" ve "Tetikleyici oluştur" u tıklayın
    4. "+bunu" tıklayın ve "bildirimler"i seçin. Ardından "IFTTT uygulamasından zengin bir bildirim gönder"i seçin
    5. "Başlık" için "PoolPi" gibi bir şey seçin
    6. "Mesaj" için "Havuz Pi algılandı: " yazın ve "içerik ekle"ye tıklayın.."Değer1".
    7. 2. adımda kopyaladığınız URL'ye geri dönün. Yeni oluşturduğunuz uygulamanızı çağırmak için kullanılacak URL'yi gösterecektir. {event} yer tutucusunu etkinlik adıyla değiştirerek bu URL'yi kopyalayın (örnek PoolEvent'te)
  4. Mobil cihazınız için IFTTT uygulamasını indirin, kurun ve oturum açın
  5. Çalıştığını görmek için bu python betiğini Raspberry Pi'nizde çalıştırın (mobil cihazınızda tetiklenmesinin birkaç saniye veya dakika sürebileceğini unutmayın):

içe aktarma istekleri

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

Adım 10: Raspberry Pi'ye Röle HAT ekleyin ve Solenoid Valfe Bağlayın

Raspberry Pi'ye Röle HAT ekleyin ve Solenoid Valfe Bağlayın
Raspberry Pi'ye Röle HAT ekleyin ve Solenoid Valfe Bağlayın
Raspberry Pi'ye Röle HAT ekleyin ve Solenoid Valfe Bağlayın
Raspberry Pi'ye Röle HAT ekleyin ve Solenoid Valfe Bağlayın
Raspberry Pi'ye Röle HAT ekleyin ve Solenoid Valfe Bağlayın
Raspberry Pi'ye Röle HAT ekleyin ve Solenoid Valfe Bağlayın

Bu adıma geçmeden önce Raspberry Pi'nizi KAPATIN: ona ssh ve "sudo kapatma şimdi" yazın, ardından güç bağlantısını kesin

Amacımız, bir güç kaynağından aldığı 24V AC güce dayalı olarak su kaynağını açıp kapatabilen bir solenoid valfe giden güç kaynağını açıp kapatmaktır. Röleler, Raspberry Pi'mizin sağlayabileceği dijital bir sinyale dayalı olarak bir devreyi açıp kapatabilen elektrik bileşenleridir. Burada yaptığımız, Raspberry Pi'nin bu dijital sinyal pinlerine bir röle bağlayıp 24V AC güç kaynağı ile solenoid valf arasındaki devreyi kapatmasını sağlamaktır.

Raspberry Pi üzerinde dijital giriş veya çıkış görevi görebilen pinlere GPIO - General Purpose Input/Output denir ve Pi'nin yan tarafında bulunan 40 pinlik sıradır. Pi kapalıyken ve HAT rölesini sıkıca içine sokun. Seçtiğim HAT'ın içinde 3 röle var ve bunlardan sadece birini kullanacağız. Diğer ikisiyle yapabileceğiniz her şeyi hayal edin:)

Şimdi Raspberry Pi'yi tekrar açın. HAT rölesindeki kırmızı "güç" LED'i, GPIO aracılığıyla Pi'den güç aldığını gösterecek şekilde yanmalıdır. Kontrol edebileceğimizi test edelim: Pi'ye tekrar ssh yazın, python girin ve şunu yazın:

gpiozero'yu içe aktar

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

Rölenin devreye girdiğini belirten sesli bir "klik" sesi duymalı ve ilk rölenin bağlı konumda olduğunu gösteren bir LED'in yandığını görmelisiniz. şimdi yazabilirsiniz

dev.on()

Bu, röleyi "kapalı" konuma getirir (garip, biliyorum…) ve python'dan () çıkar.

Şimdi atlama kabloları ve daha uzun kablo kullanarak röleyi 24V güç kaynağı ile solenoid valf arasına bağlayın. Şemaya bakın. Son olarak, adaptörleri kullanarak solenoid valfi bir musluğa bağlayın ve yukarıdaki komutları tekrarlayarak hepsini test etmeye hazır olun - suyu açıp kapatmalıdırlar.

Solenoid valfe bir hortum bağlayın ve diğer ucunu havuzun derinliklerine yerleştirin. Artık bilgisayar kontrollü bir havuz doldurma sisteminiz var ve ne zaman çalışacağını söylemek için bir sensör bağlamanın zamanı geldi.

Adım 11: Bir Su Seviyesi Sensörü Bağlayın

Bir Su Seviyesi Sensörü Bağlayın
Bir Su Seviyesi Sensörü Bağlayın
Bir Su Seviyesi Sensörü Bağlayın
Bir Su Seviyesi Sensörü Bağlayın
Bir Su Seviyesi Sensörü Bağlayın
Bir Su Seviyesi Sensörü Bağlayın
Bir Su Seviyesi Sensörü Bağlayın
Bir Su Seviyesi Sensörü Bağlayın

Bir su seviyesi sensörü, şamandıra aşağı düştüğünde bir elektrik devresini bağlayan ve yukarı çıktığında onu kıran bir şamandıradır. Havuza doğru yükseklikte yerleştirirseniz, su seviyesi yeterli olduğunda şamandıra yükselir, yeterli su olmadığında aşağı düşer.

Raspberry Pi'nin su seviyesi sensörünün durumunu bilmesi için Pi'nin açık veya kapalı devre algılamasına ihtiyacımız var. Neyse ki bu çok basit: Röleleri kontrol etmek için dijital çıkış olarak kullandığımız aynı GPIO konektörleri giriş görevi görebilir (dolayısıyla GPIO'daki I). Spesifik olarak, sensörün bir kablosunu GPIO konnektöründeki +3.3V'a, diğer sensör kablosunu ise pull-down girişi olarak yapılandırdığımız (normalde GND voltaj seviyesinde olacağı anlamına gelir) bir pin'e bağlarsak, o pin ölçecektir. dijital "yüksek" veya "açık" voltaj, yalnızca su seviyesi sensörü devreyi kapattığında - su seviyesi düşük olduğunda. Yukarıdaki resimde işaretlediğim GPIO pin 16'yı giriş olarak kullandım.

Pini giriş olarak yapılandırmak ve mevcut durumunu test etmek için python kodu:

gpiozero'yu içe aktar

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

Potansiyel bir zorluk, sensörün sadece durumunu değiştirdiğinde, açık ve kapalı durumlar arasında hızlı bir şekilde salınmasıdır. Bunun çözümü "geri dönme" olarak bilinir ve harekete geçmeden önce tutarlı bir durum değişikliği arar. GPIOZERO kitaplığında bunu yapmak için kod var, ancak nedense bu kod benim için iyi çalışmadı. Depomda bulabileceğiniz tutarlı bir durum değişikliği tespit edildiğinde IFTTT uyarılarını tetiklemek için basit bir döngü yazdım.

Adım 12: Hepsini Bir Araya Bağlayacak Kod Yazın

Hepsini Bir Araya Bağlayacak Kod Yaz
Hepsini Bir Araya Bağlayacak Kod Yaz

Bu kadar. Kurulumumuz tamamlandı. Her şeyi tam bir sisteme bağlamak için kendi kodunuzu yazabilir veya verdiğim kodu kullanabilirsiniz. Bunu yapmak için sadece dizin yapısını oluşturun ve depoyu şu şekilde klonlayın:

mkdir havuzpi

cd poolpi git klonu

Ardından, gizli anahtarınızla kendi IFTTT web kancanızın URL'sine sahip olmak için motion_alert ve water_level dizinlerinde ifttt_url.txt adlı dosyaları düzenleyin. Farklı eylemler için iki farklı web kancası kullanabilirsiniz.

Son olarak, bu kodun otomatik olarak çalışmasını istiyoruz. Bunu başarmanın en kolay yolu Linux crontab hizmetidir. İki ana görev için bazı crontab satırları ekleyebiliriz:

  1. Üç programımızı çalıştırın: her yeniden başlatmada nesne dedektörü, su seviyesi sensörü ve web sunucusu
  2. Çıktı dizinini temizleyin, eski resimleri ve eski video dosyalarını silin (1 günden eski dosyaları ve 7 günden eski resimleri silmeyi seçtim - denemekten çekinmeyin)

Bunu yapmak için, nano metin düzenleyicinizi açacak olan crontab -e yazın. Dosyanın altına aşağıdaki satırları ekleyin:

0 1 * * * bul /home/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

Son olarak, Raspberry Pi'nizi yeniden başlatın. Artık havuzunuzu dolu ve güvende tutmak için hazır.

Kurulumu, kodu düzeltin ve github depoma yıldız eklemeyi ve faydalı bulursanız talimat üzerine yorum yapmayı unutmayın. Her zaman daha fazlasını öğrenmenin peşindeyim.

Mutlu yapım!

IoT Mücadelesi
IoT Mücadelesi
IoT Mücadelesi
IoT Mücadelesi

IoT Challenge'da İkincilik

Önerilen: