Բովանդակություն:

Pool Pi Guy - AI- ով ազդանշանային համակարգ և լողավազանի մոնիտորինգ Raspberry Pi- ի միջոցով. 12 քայլ (նկարներով)
Pool Pi Guy - AI- ով ազդանշանային համակարգ և լողավազանի մոնիտորինգ Raspberry Pi- ի միջոցով. 12 քայլ (նկարներով)

Video: Pool Pi Guy - AI- ով ազդանշանային համակարգ և լողավազանի մոնիտորինգ Raspberry Pi- ի միջոցով. 12 քայլ (նկարներով)

Video: Pool Pi Guy - AI- ով ազդանշանային համակարգ և լողավազանի մոնիտորինգ Raspberry Pi- ի միջոցով. 12 քայլ (նկարներով)
Video: USB4 Deep Dive: What Every IT Professional Should Know 2024, Հուլիսի
Anonim
Pool Pi Guy - AI- ով ազդանշանային համակարգ և լողավազանի մոնիտորինգ ՝ օգտագործելով Raspberry Pi
Pool Pi Guy - AI- ով ազդանշանային համակարգ և լողավազանի մոնիտորինգ ՝ օգտագործելով Raspberry Pi

Տանը լողավազան ունենալը հաճելի է, բայց մեծ պատասխանատվությամբ: Իմ ամենամեծ անհանգստությունը մոնիտորինգն է, եթե որևէ մեկը լողավազանի մոտ գտնվում է առանց հսկողության (հատկապես փոքր երեխաները): Իմ ամենամեծ վրդովմունքն այն է, որ լողավազանի ջրագիծը երբեք չընկնի պոմպի մուտքից ներքև, ինչը կջնջի պոմպը և կքանդի այն, արժենալով $ $ $ վերանորոգման աշխատանքներ:

Վերջերս ես պարզեցի, թե ինչպես օգտագործել Raspberry Pi- ն OpenCV- ով և TensorFlow- ով, ինչպես նաև ջրի մակարդակի տվիչով և էլեկտրամագնիսական փականով ՝ երկու խնդիրներն էլ լուծելու համար, և զվարճացեք դա անելիս:

Պարզվում է, որ դա նույնպես հիանալի ահազանգման համակարգ է `շարժումը ակտիվացված, արհեստական ինտելեկտի վերահսկմամբ, անսահմանորեն կարգավորելի:

Եկեք սուզվենք:

Քայլ 1: Մեծ ծրագիր

Այս ուսանելիում մենք ցույց կտանք, թե ինչպես անել.

  1. Կարգավորեք Raspberry Pi- ն OpenCV- ով և TensorFlow- ով
  2. Միացրեք տեսախցիկը երկար USB մալուխի միջոցով
  3. Շարժումը հայտնաբերելու համար գրեք OpenCV ալգորիթմ
  4. Օգտագործեք TensorFlow օբյեկտի հայտնաբերման համար
  5. Տեղադրեք վեբ սերվեր Raspberry Pi- ում `հետաքրքիր պատկերները ցուցադրելու համար
  6. Ինտեգրվել IFTTT- ի հետ `բջջային ազդանշաններ գործարկելու դեպքում, եթե մարդ հայտնաբերվի
  7. Միացրեք ռելե HAT- ը Raspberry Pi- ին և միացրեք այն էլեկտրական փականին, որը ջուր կավելացնի լողավազանին
  8. Pրի մակարդակի տվիչ ամրացրեք Raspberry Pi- ին և միացրեք այն Pi- ի GPIO- ի միջոցով
  9. Գրեք ինչ -որ ծածկագիր ՝ այդ ամենը միասին սոսնձելու համար

Քայլ 2: Գնումների ցուցակ

Գնումների ցուցակ
Գնումների ցուցակ

Բոլոր բաղադրիչները մատչելի են Amazon- ից: Ազատորեն փորձարկեք և փոխանակեք բաղադրիչները. Դա հաճույքի կեսն է:

  1. Ազնվամորի Պի
  2. Raspberry Pi էներգիայի մատակարարում (այստեղ մի խնայեք)
  3. Հիշողության քարտ (ավելի մեծ ավելի լավ է)
  4. Պատյան (այս մեկն այնքան մեծ է, որ կարող է տեղավորել ինչպես Pi- ն, այնպես էլ HAT- ը)
  5. USB վեբ -տեսախցիկ (ցանկացած տեսախցիկ կանի, բայց դուք ցանկանում եք, որ այն ունենա լավ պատկերներ և լավ հավասարակշռի լուսավորությունը)
  6. USB երկարացման մալուխ (անհրաժեշտության դեպքում - չափեք հեռավորությունը Pi- ի և տեսախցիկի տեղադրման միջև)
  7. Հեռախոսային տախտակ HAT (այս մեկն ունի 3 ռելեներ, և մեզ միայն մեկն է պետք, բայց շուտով դուք մյուսների համար օգտագործումը կգտնեք):
  8. Էլեկտրամագնիս
  9. Էլեկտրամագնիսական կցամաս 1 և կցամաս 2 (դա իսկապես կախված է նրանից, թե ինչին եք դուք հարմարեցնում էլեկտրամագնիսականը, բայց դրանք ինձ մոտ էին աշխատում)
  10. Էլեկտրամատակարարման էլեկտրամատակարարում (ցանկացած 24 Վ լարման դեպքում դա կանի)
  11. Մալուխ (կրկին, գրեթե ցանկացած 2 շղթայի մալուխը կկատարեր. Հոսանքը նվազագույն է)
  12. Leրի մակարդակի բոց անջատիչ (սա ընդամենը օրինակ է, ստուգեք, թե ինչ կարելի է հեշտությամբ միացնել ձեր լողավազանին)
  13. Որոշ Jumper լարեր և լարային միակցիչներ

Քայլ 3: Կարգավորեք ձեր ազնվամորի Pi- ն

Կարգավորեք ձեր ազնվամորի Pi- ն
Կարգավորեք ձեր ազնվամորի Pi- ն

Raspberry Pi- ն հիանալի փոքրիկ համակարգիչ է: Այն արժե ընդամենը $ 35, աշխատում է հետևողականորեն և ունի բազմաթիվ համատեղելի ծրագրային ապահովում և սարքավորում: Այն կարգավորելը բավականին հեշտ է.

  1. Ձևաչափեք ձեր SD քարտը: Սա հատուկ խնամքի կարիք ունի. Raspberry Pi- ն կարող է բեռնվել միայն FAT ձևաչափված SD քարտից: Հետևեք այս հրահանգներին:
  2. Միացրեք Raspberry Pi- ն USB ստեղնաշարի և մկնիկի, ինչպես նաև HDMI էկրանին և հետևեք Raspberry Pi NOOBS ձեռնարկի հրահանգներին: Համոզվեք, որ տեղադրեք WiFi և միացրեք SSH մուտքը: Մի մոռացեք գաղտնաբառ տեղադրել կանխադրված pi հաշվի համար:
  3. Ձեր տան ցանցում ստեղծեք ստատիկ IP ՝ Raspberry Pi- ի համար. Դա շատ ավելի հեշտ կդարձնի SSH մուտք գործելը:
  4. Համոզվեք, որ ձեր աշխատասեղանին/նոութբուքում տեղադրված է ssh հաճախորդ: Համակարգչի համար ես խորհուրդ կտայի Putty- ին, որը կարող եք տեղադրել այստեղից:
  5. Անջատեք USB- ն ու HDMI- ն Raspberry Pi- ից, վերագործարկեք այն և տեղադրեք դրա մեջ, եթե ամեն ինչ աշխատեց, դուք պետք է տեսնեք այսպիսի բան.

Linux raspberrypi 4.14.98-v7+ #1200 SMP Չրք փետր. 12 20:27:48 GMT 2019 armv7l

Debian GNU/Linux համակարգում ներառված ծրագրերն անվճար ծրագրակազմ են. յուրաքանչյուր ծրագրի համար բաշխման ճշգրիտ պայմանները նկարագրված են առանձին ֆայլերում/usr/share/doc/*/հեղինակային իրավունքով: Debian GNU/Linux- ը տրվում է ԲԱOLԱՐՁԵՔ ԵՐԱՇԽԻՔ, կիրառելի օրենսդրությամբ թույլատրված չափով: Վերջին մուտքը `երկուշաբթի, մայիսի 13, 10:41:40 2019 104.36.248.13 pi@raspberrypi: ~ $

Քայլ 4: Կարգավորեք OpenCV- ն

Կարգավորեք OpenCV- ն
Կարգավորեք OpenCV- ն

OpenCV- ն համակարգչային տեսողության համար պատկերի մանիպուլյացիայի գործառույթների զարմանալի հավաքածու է: Դա մեզ թույլ կտա կարդալ պատկերներ Տեսախցիկից, շահարկել դրանք շարժման տարածքներ գտնելու, պահպանելու և այլնի համար: Raspberry Pi- ի տեղադրումը դժվար չէ, բայց պահանջում է որոշակի խնամք:

Սկսեք տեղադրել virtaulenvwrapper. Մենք կօգտագործենք python- ը ՝ մեր բոլոր ծրագրավորումները կատարելու համար, և virtualenv- ն կօգնի մեզ կախվածությունը առանձին պահել OpenCV- ի և TensorFlow- ի և Flask- ի կամ GPIO- ի համար.

pi@raspberrypi: ~ $ sudo pip տեղադրել virtualenvwrapper

Այժմ դուք կարող եք կատարել «mkvirtualenv» ՝ նոր միջավայր ստեղծելու համար, «workon» ՝ դրա վրա աշխատելու համար և այլն:

Այսպիսով, եկեք ստեղծենք միջավայր մեր պատկերների մանիպուլյացիայի համար ՝ Python 3 -ը որպես կանխադրված թարգմանիչ (2019 թվականն է, հին պիթոն 2 -ի հետ մնալու պատճառ չկա)

pi@raspberrypi: ~ $ mkvirtualenv cv -p python3

… (Cv) pi@raspberrypi

Այժմ մենք պատրաստ ենք տեղադրել OpenCV: Մենք հիմնականում հետևելու ենք Learn OpenCV- ի հիանալի ձեռնարկին: Մասնավորապես հետևեք նրանց 1 -ին և 2 -րդ քայլերին.

sudo apt -y updatesudo apt -y upgrade ## Տեղադրեք կախվածություններ 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 տեղադրել libtiff5-dev sudo apt-get -y տեղադրել libtiff-dev sudo apt-get -y տեղադրել libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev sudo apt-get- y տեղադրել 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: 10-dev sudo apt-get -y install libgtk2.0-dev libtbb-dev qt5-default sudo apt-get -y տեղադրել libatlas-base-dev sudo apt-get -y install libmp3lame-dev libtheora-dev sudo apt-get -y տեղադրել libvorbis-dev libxvidcore-dev libx264-dev sudo apt-get -y տեղադրել libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get -y տեղադրել libavresample-dev sudo apt-get -y տեղադրել x264 v4l-utils sudo apt -get -y տեղադրել libprotobuf -dev protobuf-compiler sudo apt-get -y տեղադրել libgoogle-glog-dev libgflags-dev sudo apt-get -y տեղադրել libgphoto2-dev libeigen3-dev libhdf5-dev doxygen sudo apt-get install libqtgui4 sudo apt-get install libqt4- փորձարկում

Այժմ մենք կարող ենք պարզապես տեղադրել cV virtualenv- ի ներսում պիտոնի կապերով (դուք դեռ դրա մեջ եք, չէ՞) օգտագործելով

pip տեղադրել opencv-contrib-python

Եվ վերջ! Մեր Raspberry Pi- ի վրա տեղադրված է OpenCV ՝ պատրաստ լուսանկարներ և տեսանյութեր նկարահանելու, դրանք շահարկելու և հիանալի լինելու համար:

Ստուգեք, որ բացեք պիթոնի թարգմանիչ և ներմուծեք opencv և ստուգեք, որ սխալներ չկան.

(cv) pi@raspberrypi: ~ $ python

Python 3.5.3 (կանխադրված, սեպտեմբերի 27 2018, 17:25:39) [GCC 6.3.0 20170516] linux- ում Լրացուցիչ տեղեկությունների համար մուտքագրեք «օգնություն», «հեղինակային իրավունք», «կրեդիտներ» կամ «լիցենզիա»: >>> ներմուծել cv2 >>>

Քայլ 5: Կարգավորեք TensorFlow- ը

Կարգավորեք TensorFlow- ը
Կարգավորեք TensorFlow- ը

TensorFlow- ը մեքենայական ուսուցման / AI շրջանակ է, որը մշակվել և պահպանվում է Google- ի կողմից: Այն ունի լայնածավալ աջակցություն խորը ուսուցման մոդելների համար տարբեր խնդիրների համար, ներառյալ պատկերներում օբյեկտների հայտնաբերումը, և այժմ բավականին պարզ է տեղադրել Raspberry Pi- ում: Փոքր Pi- ի վրա նրա թեթև մոդելների կատարումը մոտ 1 կադր / վայրկյան է, ինչը լիովին համարժեք է մեր նման կիրառման համար:

Մենք հիմնականում հետևելու ենք Edje Electronics- ի հիանալի ձեռնարկին, փոփոխություններով, որոնք հնարավոր են դարձել 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 տեղադրել բարձ lxml jupyter matplotlib cython (cv pi@raspberrypi: su $ sudo apt-get տեղադրել python-tk

Այժմ մենք պետք է կազմենք Google- ի protobuf- ը: Պարզապես հետևեք նույն հիանալի ձեռնարկի 4 -րդ քայլին

Վերջապես, կլոնավորեք և կարգավորեք TensorFlow- ի մոդելի սահմանումները. Հետևեք 5 -րդ քայլին Edje Electronics- ի ձեռնարկում

Ազատ զգացեք հետևել նրանց օրինակին նաև 6 -րդ քայլին: Դա հիանալի ներածություն է Raspberry Pi- ում օբյեկտների հայտնաբերման համար:

Քայլ 6. Շարժման հայտնաբերում OpenCV- ի միջոցով

Սկսենք ՝ փորձարկելով, որ OpenCV- ն կարող է միանալ մեր տեսախցիկին. Ssh մեջ Raspberry Pi, տեղափոխել cv virtualenv (workon cv), բացել python- ի թարգմանիչ (պարզապես մուտքագրել python) և մուտքագրել հետևյալ python- ի հրամանները.

ներմուծել 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 ('Read frame size: {} x {}'.ֆորմատ (frame.shape [1], frame.shape [0])

Ամենայն բախտով կտեսնեք, որ OpenCV- ն կարողացավ տեսախցիկից կարդալ HD շրջանակ:

Դուք կարող եք օգտագործել cv2.imwrite (ուղի, շրջանակ) ՝ այդ շրջանակը սկավառակի վրա գրելու և այն հետ պահելու համար ՝ իրական տեսք ունենալու համար:

Շարժումը հայտնաբերելու ռազմավարությունը բավականին պարզ է.

  1. Աշխատեք ավելի ցածր լուծաչափի շրջանակների վրա. Այստեղ անհրաժեշտ չէ աշխատել ամբողջ HD- ով
  2. Ավելին, պղտորեք պատկերները `հնարավորինս քիչ աղմուկ ապահովելու համար:
  3. Պահպանեք վերջին N շրջանակների ընթացիկ միջին ցուցանիշը: Այս հավելվածի համար, որտեղ շրջանակի արագությունը մոտ 1 FPS է (միայն այն պատճառով, որ TensorFlow- ը որոշակի ժամանակ է պահանջում մեկ շրջանակի համար), ես գտա, որ N = 60 -ը լավ արդյունքներ է տալիս: Եվ քանի որ մանրակրկիտ իրականացումը չի պահանջում ավելի շատ պրոցեսոր ՝ ավելի լավ շրջանակներով (դա ավելի շատ հիշողություն է պահանջում, բայց դա աննշան է, երբ մենք աշխատում ենք ավելի ցածր լուծաչափի շրջանակներով)
  4. Գործող միջինից հանեք ընթացիկ պատկերը (պարզապես զգույշ եղեք մուտքագրման ժամանակ. Անհրաժեշտ է թույլ տալ դրական և բացասական արժեքներ [-255.. 255], այնպես որ շրջանակը պետք է փոխարկվի int)
  5. Կարող եք հանումը կատարել շրջանակի (և միջին) մոխրագույն մասշտաբի փոխակերպման վրա, կամ դա անել առանձին RGB ալիքներից յուրաքանչյուրի համար, այնուհետև միավորել արդյունքները (որն է իմ ընտրած ռազմավարությունը ՝ զգայուն դարձնելով գույնի փոփոխություններին)
  6. Օգտագործեք շեմը դելտայի վրա և հեռացրեք աղմուկը էրոզիայի և ընդլայնման միջոցով
  7. Վերջապես փնտրեք դելտա ունեցող տարածքների ուրվագծեր. Այդ տարածքներն են, որտեղ տեղի է ունեցել շարժում, և ներկայիս պատկերը տարբերվում է նախորդ պատկերների միջինից: Անհրաժեշտության դեպքում մենք կարող ենք նաև գտնել այս եզրագծերի սահմանափակ տուփեր:

Ես ծածկագրել եմ կոդը ՝ դա անելու համար DeltaFinder python դասում, որը կարող եք գտնել այստեղ իմ github- ում

Քայլ 7: TensorFlow- ի միջոցով օբյեկտների հայտնաբերում

Եթե հետևել եք TensorFlow- ի տեղադրման ընթացակարգին, արդեն փորձարկել եք, որ TensorFlow- ը տեղադրված է և աշխատում է:

Ընդհանուր առմամբ բացօթյա տեսարանում մարդկանց հայտնաբերելու նպատակով, մոդելները, որոնք նախապես վերապատրաստվել են COCO տվյալների հավաքածուի վրա, բավականին լավ են գործում, ինչը հենց այն մոդելն է, որը մենք ներբեռնել ենք TensorFlow տեղադրման ավարտին: Մենք պարզապես պետք է այն օգտագործենք եզրակացության համար:

Կրկին, ես պարունակել եմ մոդելի բեռնվածությունն ու եզրակացությունը TFClassify պիթոնների դասում `ամեն ինչ ավելի հեշտացնելու համար, որը կարող եք գտնել այստեղ:

Քայլ 8: Տեղադրեք վեբ սերվեր Raspberry Pi- ի վրա

Տեղադրեք վեբ սերվեր Raspberry Pi- ի վրա
Տեղադրեք վեբ սերվեր Raspberry Pi- ի վրա

Օբյեկտի հայտնաբերման արդյունքներին մուտք գործելու ամենադյուրին ճանապարհը վեբ դիտարկիչն է, ուստի եկեք վեբ սերվեր ստեղծենք Raspberry Pi- ի վրա: Այնուհետև կարող ենք այն կարգավորել ՝ տվյալ գրացուցակից նկարներ մատուցելու համար:

Վեբ սերվերի շրջանակի բազմաթիվ տարբերակներ կան: Ես ընտրեցի Flask- ը: Դա չափազանց կազմաձևելի է և հեշտ է ընդլայնել Python- ով: Քանի որ մեզ անհրաժեշտ «մասշտաբը» չնչին է, այն ավելի քան բավարար էր:

Ես առաջարկում եմ տեղադրել այն նոր virtualenv- ում, այնպես որ.

pi@raspberrypi: ~ $ mkvirtualenv webserv

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

Նկատի ունեցեք, որ սովորական ցանցի կարգավորմամբ այն հասանելի կլինի միայն այն դեպքում, երբ ձեր դիտարկիչը միացված է նույն անլար LAN- ին, ինչ ձեր Raspberry Pi- ն: Դուք կարող եք ստեղծել նավահանգստի քարտեզագրում / NAT կոնֆիգուրացիա ձեր ինտերնետային երթուղիչում `արտաքին մուտք գործելու համար, բայց ես խորհուրդ եմ տալիս դա չանել: Իմ գրած կոդը չի փորձում ապահովել այն անվտանգությունը, որն անհրաժեշտ կլինի ձեր Raspberry Pi- ին ընդհանուր ինտերնետ մուտք գործելու թույլտվության դեպքում:

Փորձարկեք ձեր տեղադրումը ՝ հետևելով Flask արագ մեկնարկի ուղեցույցին

Քայլ 9. Բջջային ծանուցումներ Raspberry Pi- ից IFTTT- ի միջոցով

Բջջային ծանուցումներ Raspberry Pi- ից IFTTT- ի միջոցով
Բջջային ծանուցումներ Raspberry Pi- ից IFTTT- ի միջոցով

Ես շատ եմ ուզում բջջային ծանուցումներ ստանալ, երբ իրադարձություններ են տեղի ունենում: Այս դեպքում, երբ անձը հայտնաբերվում է, եւ երբ ջրի մակարդակը ցածր է իջնում: Ամենապարզ միջոցը, որը ես գտա դա անելու համար ՝ առանց հատուկ բջջային հավելված գրելու, IFTTT- ի օգտագործումն է: IFTTT- ը նշանակում է «Եթե սա այն է» բառը և հնարավորություն է տալիս բազմաթիվ տեսակի իրադարձություններին խթանել բազմաթիվ տեսակի գործողություններ: Մեր դեպքում մեզ հետաքրքրում է IFTTT Maker Webhook ձգանը: Սա մեզ թույլ է տալիս միացնել IFTTT գործողությունը ՝ HTTP POST հարցում կատարելով IFTTT սերվերին ՝ մեր հաշվին տրված հատուկ բանալով, ինչպես նաև կատարվածը ճշտող տվյալներով: Մեր ձեռնարկած գործողությունը կարող է լինել այնքան պարզ, որքան մեր բջջային սարքում ծանուցում ստեղծելը `օգտագործելով IFTTT բջջային հավելվածը կամ դրանից ավելի բարդ բան:

Ահա թե ինչպես դա անել.

  1. Ստեղծեք IFTTT հաշիվ ifttt.com կայքում
  2. Մուտք գործելով ՝ գնացեք Webhook ծառայության կարգավորումների էջ և մուտքագրեք URL- ը ձեր դիտարկիչում (ինչ -որ բան ՝ https://maker.ifttt.com/use/: Այդ վեբ էջը ցույց կտա ձեր բանալին և գործողությունների գործարկման համար օգտագործվող URL- ը:.
  3. Ստեղծեք IFTTT հավելված, որը բջջային ծանուցում կստեղծի, երբ Webhook- ը գործարկվի իրադարձության մանրամասներով.

    1. Կտտացրեք «Իմ ապլետները», այնուհետև «Նոր հավելված»:
    2. Սեղմեք "+this" և ընտրեք "webhooks": Մանրամասներին անցնելու համար կտտացրեք «Ստացեք վեբ հարցում»
    3. Տվեք ձեր իրադարձությանը անուն, օրինակ. «PoolEvent» և կտտացրեք «Ստեղծել ձգան»
    4. Կտտացրեք «+այն» և ընտրեք «ծանուցումներ»: Այնուհետև ընտրեք «Ուղարկեք հարուստ ծանուցում IFTTT հավելվածից»
    5. «Վերնագրի» համար ընտրեք «PoolPi» - ի նման մի բան
    6. «Հաղորդագրության» համար գրեք «Լողավազանը հայտնաբերվեց.» Եվ կտտացրեք «ավելացնել բաղադրիչ».. «Արժեք 1»:
    7. Վերադառնալ 2 -րդ քայլի ձեր պատճենած URL- ին: Այն ցույց կտա այն URL- ն, որն օգտագործելու է ձեր նորաստեղծ հավելվածը կանչելու համար: Պատճենեք այդ URL- ը ՝ տեղապահը {իրադարձություն} փոխարինելով իրադարձության անունով (օրինակ PoolEvent- ում)
  4. Ներբեռնեք, տեղադրեք և մուտք գործեք IFTTT հավելված ձեր բջջային սարքի համար
  5. Գործարկեք այս Python սցենարը ձեր Raspberry Pi- ի վրա `այն տեսնելու համար (նշեք, որ ձեր բջջային սարքում գործարկելը կարող է տևել մի քանի վայրկյան կամ րոպե):

ներմուծման հարցումներ

request.post ('https://maker.ifttt.com/trigger/PoolEvent/with/key/', json = {"value1": "Բարև ծանուցումներ"})

Քայլ 10. Ազնվամորի գլխարկ ավելացրեք Raspberry Pi- ին և միացրեք այն էլեկտրամագնիսական փականին

Ավելացրեք ռելեի գլխարկ Raspberry Pi- ին և միացրեք այն էլեկտրամագնիսական փականին
Ավելացրեք ռելեի գլխարկ Raspberry Pi- ին և միացրեք այն էլեկտրամագնիսական փականին
Ավելացրեք ռելեի գլխարկ Raspberry Pi- ին և միացրեք այն էլեկտրամագնիսական փականին
Ավելացրեք ռելեի գլխարկ Raspberry Pi- ին և միացրեք այն էլեկտրամագնիսական փականին
Ավելացրեք ռելեի գլխարկ Raspberry Pi- ին և միացրեք այն էլեկտրամագնիսական փականին
Ավելացրեք ռելեի գլխարկ Raspberry Pi- ին և միացրեք այն էլեկտրամագնիսական փականին

Այս քայլին անցնելուց առաջ ԱՆURNՆԵՔ ձեր Raspberry Pi. Ssh- ը և մուտքագրեք «sudo shutdown now», այնուհետև անջատեք այն հոսանքից

Մեր նպատակն է էլեկտրամատակարարումը միացնել և անջատել էլեկտրամագնիսական փականին `փական, որը կարող է բացել կամ փակել ջրամատակարարումը` 24V AC հոսանքի հիման վրա, որը ստանում է սնուցման աղբյուրից: Ռելեներ այն էլեկտրական բաղադրիչներն են, որոնք կարող են բացել կամ փակել միացում ՝ հիմնված թվային ազդանշանի վրա, որը կարող է ապահովել մեր Raspberry Pi- ն: Այն, ինչ մենք անում ենք այստեղ, ռելեն է Raspberry Pi- ի այս թվային ազդանշանային կապիչներին և միացնում այն 24V AC հոսանքի աղբյուրի և էլեկտրամագնիսական փականի միջև միացումը:

Ազնվամորի Pi- ի քորոցները, որոնք կարող են հանդես գալ որպես թվային մուտք կամ ելք, կոչվում են GPIO - General Purpose Input/Output և դրանք Pi- ի կողքի 40 կապում շարքն են: Pi- ն անջատված վիճակում տեղադրեք ռելե HAT- ը ամուր դրա մեջ: Իմ ընտրած Գլխարկը ունի 3 ռելե, և մենք կօգտագործենք դրանցից միայն մեկը: Պատկերացրեք, ինչ կարող եք անել մյուս երկուսի հետ:)

Այժմ նորից միացրեք Raspberry Pi- ն: Ռելեի HAT- ի կարմիր «հզորության» LED- ը պետք է միանա ՝ նշելով, որ այն Pi- ից էներգիա է ստանում GPIO- ի միջոցով: Եկեք ստուգենք, որ մենք կարող ենք վերահսկել այն. Կրկին ssh մեջ Pi, մուտքագրեք python և մուտքագրեք.

ներմուծել gpiozero

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

Դուք պետք է լսեք լսելի «կտտոց», որը ցույց է տալիս, որ ռելեն ներգրավված է, և տեսնում եք LED- ի միացումը, որը ցույց է տալիս, որ առաջին ռելեն գտնվում է միացված դիրքում: Այժմ կարող եք մուտքագրել

dev.on ()

Որը ռելեին կդարձնի «անջատված» դիրք (տարօրինակ, ես գիտեմ…) և դուրս կգա () պիթոնից:

Այժմ օգտագործելով jumper մալուխներ և ավելի երկար մալուխը միացրեք ռելեն 24V էլեկտրասնուցման և էլեկտրամագնիսական փականի միջև: Տես դիագրամը: Վերջապես, ադապտերների միջոցով էլեկտրամագնիսական փականը միացրեք ծորակին և պատրաստվեք ստուգել այդ ամենը ՝ կրկնելով վերը նշված հրամանները. Դրանք պետք է ջուրը միացնեն և անջատեն:

Կցեք գուլպանը էլեկտրամագնիսական փականին և մյուս ծայրը դրեք լողավազանի խորքում: Այժմ դուք ունեք համակարգչով վերահսկվող լողավազանի լիցքավորման համակարգ, և ժամանակն է միացնել սենսորը, որը կասի, թե երբ պետք է աշխատի:

Քայլ 11: Միացրեք ջրի մակարդակի տվիչ

Միացրեք ջրի մակարդակի տվիչ
Միացրեք ջրի մակարդակի տվիչ
Միացրեք ջրի մակարդակի տվիչ
Միացրեք ջրի մակարդակի տվիչ
Միացրեք ջրի մակարդակի տվիչ
Միացրեք ջրի մակարդակի տվիչ
Միացրեք ջրի մակարդակի տվիչ
Միացրեք ջրի մակարդակի տվիչ

Levelրի մակարդակի տվիչը պարզապես բոց է, որը միացնում է էլեկտրական շղթան, երբ բոցը ներքև է, և խզում է այն, երբ բարձրանում է: Եթե այն տեղադրեք լողավազանում ճիշտ բարձրության վրա, բոցը բարձրանում է, երբ ջրի մակարդակը համարժեք է, բայց ընկնում է, երբ բավարար ջուր չկա:

Որպեսզի Raspberry Pi- ն իմանա ջրի մակարդակի տվիչի կարգավիճակը, մեզ անհրաժեշտ է, որ Pi- ն զգա բաց կամ փակ միացում: Բարեբախտաբար, դա շատ պարզ է. Նույն GPIO միակցիչները, որոնք մենք օգտագործում ենք որպես թվային ելք `ռելեները վերահսկելու համար, կարող են գործել որպես մուտքեր (հետևաբար I- ը GPIO- ում): Մասնավորապես, եթե սենսորի մի մետաղալարը միացնենք +3.3V- ին GPIO միակցիչի վրա, իսկ մյուս սենսորային մետաղալարը `այն քորոցին, որը մենք կազմաձևում ենք որպես քաշվող մուտք (նշանակում է, որ այն սովորաբար կլինի GND լարման մակարդակում), ապա այդ քորոցը չափելու է թվային «բարձր» կամ «միացված» լարման միայն այն դեպքում, երբ ջրի մակարդակի տվիչը փակում է շրջանը - երբ ջրի մակարդակը ցածր է: Որպես մուտքագրում ես օգտագործեցի GPIO կապում 16 -ը, որը նշեցի վերևի նկարում:

Պինտոնի ծածկագիրը որպես մուտքագրում կազմաձևելու և ներկայիս վիճակը ստուգելու համար ՝

ներմուծել gpiozero

level_input = gpiozero. Կոճակ (16) water_low = level_input.is_pressed

Պոտենցիալ մարտահրավերն այն է, որ երբ սենսորը պարզապես փոխում է վիճակը, այն արագ տատանվում է միացված և անջատված վիճակների միջև: Դրա լուծումը հայտնի է որպես «դեբոնսինգ» և քայլեր ձեռնարկելուց առաջ հետևողական վիճակի փոփոխություն է փնտրում: GPIOZERO գրադարանը դրա համար ունի ծածկագիր, բայց ինչ -ինչ պատճառներով այդ կոդը ինձ մոտ լավ չաշխատեց: Ես գրել եմ մի պարզ հանգույց ՝ IFTTT ահազանգերը գործարկելու համար, երբ հայտնաբերվում է հետևողական վիճակի փոփոխություն, որը կարող եք գտնել այստեղ ՝ իմ շտեմարանում:

Քայլ 12: Գրեք ծածկագիր ՝ այն ամենը միացնելու համար

Գրեք ծածկագիր ՝ այն ամենը միացնելու համար
Գրեք ծածկագիր ՝ այն ամենը միացնելու համար

Վերջ: Մեր կարգավորումն ավարտված է: Դուք կարող եք գրել ձեր սեփական կոդը ՝ իրերը լիարժեք համակարգի մեջ կապելու համար, կամ օգտագործել իմ տված ծածկագիրը: Դա անելու համար պարզապես ստեղծեք գրացուցակի կառուցվածքը և կլոնավորեք պահոցը, ինչպես օրինակ ՝

mkdir poolpi

cd poolpi git clone

Հաջորդը, խմբագրեք ifttt_url.txt անունով ֆայլերը motion_alert և water_level գրացուցակներում ՝ ձեր գաղտնի բանալին ունենալու համար ձեր սեփական IFTTT վեբ կեռիկի URL- ը: Դուք կարող եք օգտագործել երկու տարբեր վեբ կեռիկներ ՝ տարբեր գործողությունների համար:

Ի վերջո, մենք ցանկանում ենք, որ այս կոդը գործի ինքնաբերաբար: Դա իրականացնելու ամենադյուրին ճանապարհը Linux crontab ծառայության միջոցով է: Մենք կարող ենք ավելացնել crontab տող երկու հիմնական առաջադրանքների համար.

  1. Գործարկեք մեր երեք ծրագրերը ՝ օբյեկտի դետեկտորը, ջրի մակարդակի տվիչը և վեբ սերվերը յուրաքանչյուր վերագործարկման ժամանակ
  2. Մաքրեք ելքային գրացուցակը, ջնջեք հին նկարներն ու հին տեսաֆայլերը (ես ընտրեցի ջնջել 1 օրից հին ֆայլերը և 7 օրից հին պատկերները. Ազատ փորձարկեք)

Դա անելու համար մուտքագրեք crontab -e, որը կբացի ձեր նանո տեքստային խմբագրիչը: Ֆայլի ներքևում ավելացրեք հետևյալ տողերը.

0 1 * * * find/home/pi/poolpi/output -type f -name " *.avi" -mtime +1 -ջնջել

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

Վերջապես, վերագործարկեք ձեր Raspberry Pi- ը: Այժմ այն պատրաստ է ձեր լողավազանը լիարժեք և ապահով պահելու համար:

Կարգավորեք կարգաբերումը, ծածկագիրը և մի մոռացեք աստղանշել իմ github պահոցը և մեկնաբանել այն, ինչ ուսանելի է, եթե դա օգտակար եք համարում: Ես միշտ ձգտում եմ ավելին իմանալ:

Երջանիկ պատրաստում:

IoT մարտահրավեր
IoT մարտահրավեր
IoT մարտահրավեր
IoT մարտահրավեր

Երկրորդ տեղը IoT մարտահրավերում

Խորհուրդ ենք տալիս: