สารบัญ:

Pool Pi Guy - ระบบเตือนภัยที่ขับเคลื่อนด้วย AI และการตรวจสอบสระว่ายน้ำโดยใช้ Raspberry Pi: 12 ขั้นตอน (พร้อมรูปภาพ)
Pool Pi Guy - ระบบเตือนภัยที่ขับเคลื่อนด้วย AI และการตรวจสอบสระว่ายน้ำโดยใช้ Raspberry Pi: 12 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Pool Pi Guy - ระบบเตือนภัยที่ขับเคลื่อนด้วย AI และการตรวจสอบสระว่ายน้ำโดยใช้ Raspberry Pi: 12 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Pool Pi Guy - ระบบเตือนภัยที่ขับเคลื่อนด้วย AI และการตรวจสอบสระว่ายน้ำโดยใช้ Raspberry Pi: 12 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: 【Multi sub】Supreme Dantian System EP 1-103 2024, กรกฎาคม
Anonim
Pool Pi Guy - ระบบเตือนภัยที่ขับเคลื่อนด้วย AI และการตรวจสอบสระว่ายน้ำโดยใช้ Raspberry Pi
Pool Pi Guy - ระบบเตือนภัยที่ขับเคลื่อนด้วย AI และการตรวจสอบสระว่ายน้ำโดยใช้ Raspberry Pi

การมีสระว่ายน้ำที่บ้านเป็นเรื่องสนุก แต่มาพร้อมกับความรับผิดชอบที่ยิ่งใหญ่ ความกังวลที่ใหญ่ที่สุดของฉันคือการเฝ้าติดตามว่ามีใครอยู่ใกล้สระว่ายน้ำโดยไม่มีใครดูแล (โดยเฉพาะเด็กที่อายุน้อยกว่า) ความรำคาญที่ใหญ่ที่สุดของฉันคือการทำให้แน่ใจว่าท่อส่งน้ำในสระไม่เคยต่ำกว่าทางเข้าปั๊ม ซึ่งจะทำให้ปั๊มแห้งและทำลายค่าใช้จ่ายในการซ่อมแซม $$$

ฉันเพิ่งค้นพบวิธีใช้ Raspberry Pi กับ OpenCV และ TensorFlow พร้อมกับเซ็นเซอร์ระดับน้ำและโซลินอยด์วาล์วเพื่อแก้ไขปัญหาทั้งสอง - และสนุกกับการทำมัน!

กลายเป็นระบบเตือนภัยที่ยอดเยี่ยมเช่นกัน - เปิดใช้งานการเคลื่อนไหว ควบคุมโดย AI และปรับแต่งได้ไม่จำกัด

มาดำน้ำกันเถอะ

ขั้นตอนที่ 1: แผนใหญ่

ในคำแนะนำนี้เราจะแสดงวิธี:

  1. ตั้งค่า Raspberry Pi ด้วย OpenCV และ TensorFlow
  2. เชื่อมต่อเว็บแคมผ่านสาย USB ยาว
  3. เขียนอัลกอริทึม OpenCV เพื่อตรวจจับการเคลื่อนไหว
  4. ใช้ TensorFlow สำหรับการตรวจจับวัตถุ
  5. ตั้งค่าเว็บเซิร์ฟเวอร์บน Raspberry Pi เพื่อแสดงภาพที่น่าสนใจ
  6. ผสานรวมกับ IFTTT เพื่อกระตุ้นการแจ้งเตือนทางมือถือในกรณีที่ตรวจพบบุคคล
  7. ติดรีเลย์ HAT กับ Raspberry Pi และเชื่อมต่อกับโซลินอยด์วาล์วที่จะเติมน้ำลงในสระ
  8. แนบเซ็นเซอร์ระดับน้ำเข้ากับ Raspberry Pi และเชื่อมต่อโดยใช้ GPIO. ของ Pi
  9. เขียนโค้ดเพื่อติดกาวเข้าด้วยกัน

ขั้นตอนที่ 2: รายการช้อปปิ้ง

รายการช้อปปิ้ง
รายการช้อปปิ้ง

ส่วนประกอบทั้งหมดพร้อมใช้งานจาก Amazon ทดลองและแลกเปลี่ยนส่วนประกอบได้ตามสบาย - ความสนุกเพียงครึ่งเดียว!

  1. ราสเบอร์รี่ปี่
  2. Raspberry Pi Power Supply (อย่าหวงที่นี่)
  3. เมมโมรี่การ์ด (ใหญ่ยิ่งดี)
  4. เคส (อันนี้ใหญ่พอที่จะใส่ทั้ง Pi และ HAT)
  5. เว็บแคม USB (เว็บแคมใดก็ได้ แต่คุณต้องการกล้องที่ให้ภาพที่ดีและให้แสงที่สมดุล)
  6. สายต่อ USB (ถ้าจำเป็น - วัดระยะห่างระหว่าง Pi และตำแหน่งที่คุณจะวางกล้อง)
  7. บอร์ดรีเลย์ HAT (ตัวนี้มี 3 รีเลย์ และเราต้องการเพียงตัวเดียว แต่คุณจะพบการใช้งานสำหรับตัวอื่นในไม่ช้านี้!)
  8. โซลินอยด์
  9. ข้อต่อโซลินอยด์ 1 และข้อต่อ 2 (ขึ้นอยู่กับว่าคุณเหมาะกับโซลินอยด์อะไร แต่สิ่งเหล่านี้ใช้ได้สำหรับฉัน)
  10. โซลินอยด์พาวเวอร์ซัพพลาย (24V AC ใด ๆ ที่จะทำ)
  11. สายเคเบิล (อีกครั้งเกือบทุกสาย 2 เส้นจะทำ - กระแสไฟน้อยที่สุด)
  12. สวิตช์ลอยระดับน้ำ (นี่เป็นเพียงตัวอย่าง ตรวจสอบว่าอะไรเชื่อมต่อกับสระว่ายน้ำของคุณได้ง่ายๆ)
  13. สายจัมเปอร์และขั้วต่อสายไฟบางตัว

ขั้นตอนที่ 3: ตั้งค่า Raspberry Pi. ของคุณ

ตั้งค่า Raspberry Pi. ของคุณ
ตั้งค่า Raspberry Pi. ของคุณ

Raspberry Pi เป็นคอมพิวเตอร์ขนาดเล็กที่ยอดเยี่ยม มีค่าใช้จ่ายเพียง 35 ดอลลาร์ ทำงานอย่างสม่ำเสมอ และมีซอฟต์แวร์และฮาร์ดแวร์ที่เข้ากันได้มากมาย การตั้งค่านั้นค่อนข้างง่าย:

  1. ฟอร์แมตการ์ด SD ของคุณ สิ่งนี้ต้องการการดูแลเป็นพิเศษ - Raspberry Pi สามารถบู๊ตจากการ์ด SD ที่ฟอร์แมต FAT เท่านั้น ทำตามคำแนะนำเหล่านี้
  2. เชื่อมต่อ Raspberry Pi กับแป้นพิมพ์และเมาส์ USB พร้อมจอแสดงผล HDMI และทำตามคำแนะนำในบทช่วยสอน Raspberry Pi NOOBS ตรวจสอบให้แน่ใจว่าได้ตั้งค่า WiFi และเปิดใช้งานการเข้าถึง SSH อย่าลืมตั้งรหัสผ่านสำหรับบัญชี pi เริ่มต้น
  3. บนเครือข่ายในบ้านของคุณ ตั้งค่า IP แบบคงที่สำหรับ Raspberry Pi - มันจะทำให้ SSH เข้าไปได้ง่ายขึ้นมาก
  4. ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งไคลเอนต์ ssh บนเดสก์ท็อป/แล็ปท็อปของคุณ สำหรับพีซี ฉันขอแนะนำ Putty ซึ่งคุณสามารถติดตั้งได้จากที่นี่
  5. ปลด USB และ HDMI จาก Raspberry Pi รีบูทและ ssh เข้าไป - หากใช้งานได้ทั้งหมด คุณควรเห็นสิ่งนี้:

Linux raspberrypi 4.14.98-v7+ #1200 SMP อ. 12 ก.พ. 20:27:48 GMT 2019 armv7l

โปรแกรมที่มาพร้อมกับระบบ Debian GNU/Linux เป็นซอฟต์แวร์ฟรี เงื่อนไขการแจกจ่ายที่แน่นอนสำหรับแต่ละโปรแกรมมีอธิบายไว้ในไฟล์แต่ละไฟล์ใน /usr/share/doc/*/copyright Debian GNU/Linux มาพร้อมกับการรับประกันอย่างไม่มีเงื่อนไข ในขอบเขตที่กฎหมายที่ใช้บังคับอนุญาต เข้าสู่ระบบครั้งล่าสุด: จันทร์ 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 ไม่มีเหตุผลที่จะยึดติดกับ python รุ่นเก่า 2):

pi@raspberrypi:~ $ mkvirtualenv cv -p python3

… (cv) pi@raspberrypi:~

ตอนนี้เราพร้อมที่จะติดตั้ง OpenCV แล้ว ส่วนใหญ่เราจะทำตามบทช่วยสอนที่ยอดเยี่ยมใน Learn OpenCV ทำตามขั้นตอนที่ 1 และ 2: โดยเฉพาะ

sudo apt -y updatessudo apt -y upgrade ## ติดตั้งการพึ่งพา sudo apt-get -y ติดตั้ง build-essential checkinstall cmake pkg-config yasm sudo apt-get -y ติดตั้ง git gfortran sudo apt-get -y ติดตั้ง 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 ติดตั้ง libgtk2.0-dev libtbb-dev qt5-default sudo apt-get -y ติดตั้ง libatlas-base-dev sudo apt-get -y ติดตั้ง 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-คอมไพเลอร์ sudo apt-get -y ติดตั้ง libgoogle-glog-dev libgflags-dev sudo apt-get -y ติดตั้ง libgphoto2-dev libeigen3-dev libhdf5-dev doxygen sudo apt-get ติดตั้ง libqtgui4 sudo apt-get ติดตั้ง libqt4- ทดสอบ

ตอนนี้เราสามารถติดตั้ง OpenCV ด้วยการผูก python ภายใน cv virtualenv (คุณยังอยู่ในนั้นใช่ไหม) โดยใช้

pip ติดตั้ง opencv-contrib-python

และนั่นแหล่ะ! เราได้ติดตั้ง OpenCV บน Raspberry Pi ของเราแล้ว พร้อมที่จะถ่ายภาพและวิดีโอ ปรับแต่ง และเจ๋ง

ตรวจสอบว่าโดยการเปิดล่ามหลามและนำเข้า opencv และตรวจสอบว่าไม่มีข้อผิดพลาด:

(cv) pi@raspberrypi:~ $ python

Python 3.5.3 (ค่าเริ่มต้น 27 ก.ย. 2018, 17:25:39 น.) [GCC 6.3.0 20170516] บน linux พิมพ์ "help", "copyright", "credits" หรือ "license" สำหรับข้อมูลเพิ่มเติม >>> นำเข้า cv2 >>>

ขั้นตอนที่ 5: ตั้งค่า TensorFlow

ตั้งค่า TensorFlow
ตั้งค่า TensorFlow

TensorFlow เป็นเฟรมเวิร์กการเรียนรู้ของเครื่อง / AI ที่พัฒนาและดูแลโดย Google มีการสนับสนุนอย่างกว้างขวางสำหรับโมเดลการเรียนรู้เชิงลึกสำหรับงานที่หลากหลาย รวมถึงการตรวจจับวัตถุในรูปภาพ และตอนนี้ติดตั้งบน Raspberry Pi ค่อนข้างง่าย ประสิทธิภาพของรุ่นน้ำหนักเบาใน Pi ขนาดเล็กอยู่ที่ประมาณ 1 เฟรมต่อวินาที ซึ่งเพียงพอสำหรับการใช้งานอย่างของเรา

โดยพื้นฐานแล้วเราจะปฏิบัติตามบทช่วยสอนที่ยอดเยี่ยมโดย Edje Electronics โดยมีการปรับเปลี่ยนที่เป็นไปได้โดยการแจกแจง TensorFlow ล่าสุด:

pi@raspberrypi:~ $ ทำงาน cv

(cv) pi@raspberrypi:~ $ pip ติดตั้ง tensorflow (cv) pi@raspberrypi:~ $ sudo apt-get install libxml2-dev libxslt-dev (cv) pi@raspberrypi:~ $ pip ติดตั้งหมอน lxml jupyter matplotlib cython (cv)) pi@raspberrypi:~ $ sudo apt-get install python-tk

ตอนนี้เราต้องรวบรวม protobuf ของ Google เพียงทำตามคำแนะนำในขั้นตอนที่ 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() พิมพ์ ('อ่านขนาดเฟรม: {}x{}'.format(frame.shape[1], frame.shape[0])

หากโชคดีคุณจะเห็นว่า OpenCV สามารถอ่านเฟรม HD จากกล้องได้

คุณสามารถใช้ cv2.imwrite(พาธ, เฟรม) เพื่อเขียนเฟรมนั้นไปยังดิสก์และ sftp กลับเพื่อดูจริง

กลยุทธ์ในการตรวจจับการเคลื่อนไหวค่อนข้างตรงไปตรงมา:

  1. ทำงานบนเฟรมที่มีความละเอียดต่ำ - ไม่จำเป็นต้องใช้งานแบบ Full HD ที่นี่
  2. นอกจากนี้ ให้เบลอภาพเพื่อให้แน่ใจว่ามีสัญญาณรบกวนน้อยที่สุด
  3. รักษาค่าเฉลี่ยการวิ่งของเฟรม N สุดท้าย สำหรับแอปพลิเคชันนี้ โดยที่อัตราเฟรมอยู่ที่ 1 FPS (เพียงเพราะ TensorFlow ใช้เวลาต่อเฟรม) ฉันพบว่า N=60 ให้ผลลัพธ์ที่ดี และเนื่องจากการใช้งานอย่างระมัดระวังไม่ได้ใช้ CPU มากขึ้นด้วยเฟรมที่มากกว่าปกติ (มันใช้หน่วยความจำมากกว่า - แต่นั่นก็ไม่สำคัญเมื่อเราทำงานกับเฟรมที่มีความละเอียดต่ำกว่า)
  4. ลบภาพปัจจุบันออกจากค่าเฉลี่ยวิ่ง (เพียงระวังด้วยการพิมพ์ - คุณต้องอนุญาตให้มีค่าบวกและลบ [-255.. 255] ดังนั้นเฟรมจะต้องแปลงเป็น int)
  5. คุณสามารถทำการลบด้วยการแปลงระดับสีเทาของเฟรม (และค่าเฉลี่ย) หรือทำแยกกันสำหรับแต่ละช่อง RGB แล้วรวมผลลัพธ์ (ซึ่งเป็นกลยุทธ์ที่ฉันเลือก ทำให้ไวต่อการเปลี่ยนแปลงสี)
  6. ใช้ธรณีประตูบนเดลต้าและขจัดเสียงรบกวนโดยการกัดเซาะและการขยาย
  7. สุดท้าย ให้มองหารูปทรงของพื้นที่ที่มีเดลต้า - พื้นที่เหล่านี้เป็นบริเวณที่เกิดการเคลื่อนไหวและภาพปัจจุบันแตกต่างจากภาพก่อนหน้าโดยเฉลี่ย เราสามารถค้นหากรอบสำหรับเส้นขอบเหล่านี้เพิ่มเติมได้หากต้องการ

ฉันได้ห่อหุ้มโค้ดเพื่อทำสิ่งนี้ในคลาส DeltaFinder python ที่คุณสามารถหาได้ใน github ของฉันที่นี่

ขั้นตอนที่ 7: ตรวจจับวัตถุโดยใช้ TensorFlow

หากคุณปฏิบัติตามขั้นตอนการติดตั้ง TensorFlow แสดงว่าคุณได้ทดสอบแล้วว่าติดตั้ง TensorFlow และใช้งานได้

เพื่อจุดประสงค์ในการตรวจจับบุคคลในฉากกลางแจ้งทั่วไป โมเดลที่ได้รับการฝึกอบรมล่วงหน้าในชุดข้อมูล COCO นั้นทำงานได้ดีทีเดียว ซึ่งเป็นโมเดลที่เราได้ดาวน์โหลดเมื่อสิ้นสุดการติดตั้ง TensorFlow อย่างแน่นอน เราแค่ต้องการใช้มันเพื่อการอนุมาน!

อีกครั้ง ฉันได้สรุปการโหลดโมเดลและการอนุมานในคลาส TFClassify python เพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้น ซึ่งคุณสามารถหาได้ที่นี่

ขั้นตอนที่ 8: ตั้งค่าเว็บเซิร์ฟเวอร์บน Raspberry Pi

ตั้งค่าเว็บเซิร์ฟเวอร์บน Raspberry Pi
ตั้งค่าเว็บเซิร์ฟเวอร์บน Raspberry Pi

วิธีที่ง่ายที่สุดในการเข้าถึงผลการตรวจจับวัตถุคือเว็บเบราว์เซอร์ ดังนั้นเรามาตั้งค่าเว็บเซิร์ฟเวอร์บน Raspberry Pi กัน จากนั้นเราสามารถตั้งค่าให้แสดงรูปภาพจากไดเร็กทอรีที่กำหนดได้

มีหลายตัวเลือกสำหรับเฟรมเวิร์กเว็บเซิร์ฟเวอร์ ฉันเลือกขวด มันสามารถกำหนดค่าได้อย่างมากและง่ายต่อการขยายด้วย Python เนื่องจาก "มาตราส่วน" ที่เราต้องการนั้นไม่สำคัญ มันมากเกินพอ

ฉันแนะนำให้ติดตั้งใน virtualenv ใหม่ ดังนั้น:

pi@raspberrypi:~ $ mkvirtualenv เว็บเซิร์ฟเวอร์

(webserv) pi@raspberrypi: ~ $ pip ติดตั้ง 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. คลิก "+นี่" และเลือก "เว็บฮุค" คลิก "รับคำขอเว็บ" เพื่อไปยังรายละเอียด
    3. ตั้งชื่อกิจกรรมของคุณ เช่น "PoolEvent" และคลิก "สร้างทริกเกอร์"
    4. คลิก "+ที่" และเลือก "การแจ้งเตือน" จากนั้นเลือก "ส่งการแจ้งเตือนที่หลากหลายจากแอป IFTTT"
    5. สำหรับ "ชื่อเรื่อง" ให้เลือกบางอย่างเช่น "PoolPi"
    6. สำหรับ "ข้อความ" ให้เขียนว่า "ตรวจพบ Pool Pi:" และคลิก "เพิ่มส่วนผสม".."Value1"
    7. กลับไปที่ URL ที่คุณคัดลอกไว้ในขั้นตอนที่ 2 ซึ่งจะแสดง URL ที่ใช้เรียกแอปเพล็ตที่สร้างขึ้นใหม่ คัดลอก URL นั้นโดยแทนที่ตัวยึดตำแหน่ง {event} ด้วยชื่อเหตุการณ์ (ในตัวอย่าง PoolEvent)
  4. ดาวน์โหลด ติดตั้ง และลงชื่อเข้าใช้แอป IFTTT สำหรับอุปกรณ์มือถือของคุณ
  5. เรียกใช้สคริปต์หลามนี้บน Raspberry Pi ของคุณเพื่อดูว่ามันทำงาน (โปรดทราบว่าอาจใช้เวลาสองสามวินาทีหรือนาทีในการทริกเกอร์บนอุปกรณ์มือถือของคุณ):

คำขอนำเข้า

Request.post('https://maker.ifttt.com/trigger/PoolEvent/with/key/', json={"value1":"สวัสดีการแจ้งเตือน"})

ขั้นตอนที่ 10: เพิ่มรีเลย์ HAT ให้กับ Raspberry Pi และเชื่อมต่อกับโซลินอยด์วาล์ว

เพิ่มรีเลย์ HAT ให้กับ Raspberry Pi และเชื่อมต่อกับโซลินอยด์วาล์ว
เพิ่มรีเลย์ HAT ให้กับ Raspberry Pi และเชื่อมต่อกับโซลินอยด์วาล์ว
เพิ่มรีเลย์ HAT ให้กับ Raspberry Pi และเชื่อมต่อกับโซลินอยด์วาล์ว
เพิ่มรีเลย์ HAT ให้กับ Raspberry Pi และเชื่อมต่อกับโซลินอยด์วาล์ว
เพิ่มรีเลย์ HAT ให้กับ Raspberry Pi และเชื่อมต่อกับโซลินอยด์วาล์ว
เพิ่มรีเลย์ HAT ให้กับ Raspberry Pi และเชื่อมต่อกับโซลินอยด์วาล์ว

ก่อนดำเนินการตามขั้นตอนนี้ ให้ปิด Raspberry Pi ของคุณ: ssh ไปที่มันแล้วพิมพ์ "sudo shutdown now" จากนั้นถอดออกจากแหล่งจ่ายไฟ

เป้าหมายของเราคือการเปิดและปิดแหล่งจ่ายไฟของโซลินอยด์วาล์ว ซึ่งเป็นวาล์วที่สามารถเปิดหรือปิดการจ่ายน้ำโดยใช้ไฟ AC 24V ที่ได้รับจากแหล่งจ่ายไฟ รีเลย์เป็นส่วนประกอบทางไฟฟ้าที่สามารถเปิดหรือปิดวงจรโดยอาศัยสัญญาณดิจิตอลที่ Raspberry Pi ของเราสามารถให้ได้ สิ่งที่เราทำที่นี่คือการต่อรีเลย์ไปยังพินสัญญาณดิจิทัลของ Raspberry Pi และให้ปิดวงจรระหว่างแหล่งจ่ายไฟ 24V AC และโซลินอยด์วาล์ว

หมุดบน Raspberry Pi ที่สามารถทำหน้าที่เป็นอินพุตหรือเอาต์พุตดิจิทัลเรียกว่า GPIO - อินพุต/เอาต์พุตวัตถุประสงค์ทั่วไป และเป็นแถวของ 40 พินที่ด้านข้างของ Pi เมื่อปิด Pi แล้วใส่รีเลย์ HAT เข้าไปอย่างแน่นหนา HAT ที่ฉันเลือกมีรีเลย์อยู่ 3 ตัว และเราจะใช้เพียงหนึ่งในนั้น ลองนึกภาพสิ่งที่คุณทำได้กับอีกสองคน:)

ตอนนี้เปิด Raspberry Pi อีกครั้ง ไฟ LED "เปิด/ปิด" สีแดงบนรีเลย์ HAT ควรเปิดขึ้น แสดงว่าได้รับพลังงานจาก Pi ผ่าน GPIO มาทดสอบกันว่าเราสามารถควบคุมมันได้: ssh เข้าไปใน Pi อีกครั้ง ป้อน python แล้วพิมพ์:

นำเข้า gpiozero

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

คุณควรได้ยินเสียง "คลิก" แสดงว่ารีเลย์ทำงานอยู่ และเห็นไฟ LED ติดแสดงว่ารีเลย์แรกอยู่ในตำแหน่งที่เชื่อมต่อ ตอนนี้คุณสามารถพิมพ์

dev.on()

ซึ่งจะเปลี่ยนรีเลย์ไปที่ตำแหน่ง "ปิด" (แปลกฉันรู้…) และออกจาก () จาก python

ตอนนี้ใช้สายจัมเปอร์และสายยาวเชื่อมต่อรีเลย์ระหว่างแหล่งจ่ายไฟ 24V และโซลินอยด์วาล์ว ดูแผนภาพ สุดท้าย เชื่อมต่อโซลินอยด์วาล์วกับ faucet โดยใช้อะแดปเตอร์ และเตรียมพร้อมสำหรับการทดสอบทั้งหมดโดยทำซ้ำคำสั่งด้านบน - พวกเขาควรจะเปิดและปิดน้ำ

ต่อสายยางเข้ากับโซลินอยด์วาล์วและใส่ปลายอีกด้านลงไปในสระ ตอนนี้คุณมีระบบปิดสระว่ายน้ำที่ควบคุมด้วยคอมพิวเตอร์ และถึงเวลาเชื่อมต่อเซ็นเซอร์เพื่อบอกว่าเมื่อใดควรเรียกใช้

ขั้นตอนที่ 11: เชื่อมต่อเซ็นเซอร์ระดับน้ำ

เชื่อมต่อเซ็นเซอร์ระดับน้ำ
เชื่อมต่อเซ็นเซอร์ระดับน้ำ
เชื่อมต่อเซ็นเซอร์ระดับน้ำ
เชื่อมต่อเซ็นเซอร์ระดับน้ำ
เชื่อมต่อเซ็นเซอร์ระดับน้ำ
เชื่อมต่อเซ็นเซอร์ระดับน้ำ
เชื่อมต่อเซ็นเซอร์ระดับน้ำ
เชื่อมต่อเซ็นเซอร์ระดับน้ำ

เซ็นเซอร์ระดับน้ำเป็นเพียงลูกลอยที่เชื่อมต่อวงจรไฟฟ้าเมื่อลูกลอยลดลง และแตกเมื่อลอยขึ้น หากคุณใส่ลงในสระที่ความสูงที่เหมาะสม ทุ่นจะลอยขึ้นเมื่อระดับน้ำเพียงพอ แต่จะตกลงมาเมื่อมีน้ำไม่เพียงพอ

เพื่อให้ Raspberry Pi ทราบสถานะเซ็นเซอร์ระดับน้ำ เราต้องใช้ Pi เพื่อตรวจจับวงจรเปิดหรือปิด โชคดีที่ง่ายมาก: ตัวเชื่อมต่อ GPIO เดียวกันกับที่เราใช้เป็นเอาต์พุตดิจิตอลเพื่อควบคุมรีเลย์สามารถทำหน้าที่เป็นอินพุตได้ (ด้วยเหตุนี้ I ใน GPIO) โดยเฉพาะอย่างยิ่ง หากเราเชื่อมต่อสายเซ็นเซอร์หนึ่งเส้นกับ +3.3V บนขั้วต่อ GPIO และสายเซ็นเซอร์อีกเส้นกับพินที่เรากำหนดค่าเป็นอินพุตแบบดึงลง (หมายถึงปกติที่ระดับแรงดัน GND) ขานั้นจะวัด แรงดันไฟฟ้า "สูง" หรือ "เปิด" แบบดิจิตอลเฉพาะเมื่อเซ็นเซอร์ระดับน้ำปิดวงจร - เมื่อระดับน้ำต่ำ ฉันใช้ GPIO pin 16 เป็นอินพุตซึ่งฉันทำเครื่องหมายไว้ในภาพด้านบน

รหัสหลามเพื่อกำหนดค่าพินเป็นอินพุตและทดสอบสถานะปัจจุบันคือ:

นำเข้า gpiozero

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

ความท้าทายที่อาจเกิดขึ้นอย่างหนึ่งคือเมื่อเซ็นเซอร์เปลี่ยนสถานะจะสั่นอย่างรวดเร็วระหว่างสถานะเปิดและปิด วิธีแก้ปัญหาเรียกว่า "หักล้าง" และมองหาการเปลี่ยนแปลงสถานะที่สอดคล้องกันก่อนดำเนินการ ไลบรารี GPIOZERO มีโค้ดที่ต้องทำ แต่ด้วยเหตุผลบางอย่างโค้ดนั้นใช้ไม่ได้ผลสำหรับฉัน ฉันเขียนลูปง่าย ๆ เพื่อกระตุ้นการแจ้งเตือน IFTTT เมื่อตรวจพบการเปลี่ยนแปลงสถานะที่สอดคล้องกัน ซึ่งคุณสามารถหาได้ในที่เก็บของฉันที่นี่

ขั้นตอนที่ 12: เขียนโค้ดเพื่อผูกมันไว้ด้วยกัน

เขียนโค้ดเพื่อผูกมันไว้ด้วยกัน
เขียนโค้ดเพื่อผูกมันไว้ด้วยกัน

แค่นั้นแหละ. การตั้งค่าของเราเสร็จสมบูรณ์ คุณสามารถเขียนโค้ดของคุณเองเพื่อเชื่อมโยงสิ่งต่างๆ เข้าด้วยกันเป็นระบบเต็มรูปแบบ หรือใช้รหัสที่ฉันให้ไว้ ในการทำเช่นนั้น เพียงแค่สร้างโครงสร้างไดเร็กทอรีและโคลนที่เก็บ เช่น:

mkdir poolpi

cd poolpi git โคลน

ถัดไป แก้ไขไฟล์ชื่อ ifttt_url.txt ในไดเร็กทอรี motion_alert และ water_level เพื่อให้มี URL สำหรับเว็บเบ็ด IFTTT ของคุณเองด้วยรหัสลับของคุณ คุณสามารถใช้ Web hook สองแบบสำหรับการกระทำที่ต่างกัน

สุดท้าย เราต้องการให้โค้ดนี้ทำงานโดยอัตโนมัติ วิธีที่ง่ายที่สุดในการทำให้สำเร็จคือผ่านบริการ Linux crontab เราสามารถเพิ่มบรรทัด crontab สำหรับงานหลักสองอย่าง:

  1. เรียกใช้โปรแกรมสามโปรแกรมของเรา: ตัวตรวจจับวัตถุ เซ็นเซอร์ระดับน้ำ และเว็บเซิร์ฟเวอร์ในการรีบูตทุกครั้ง
  2. ล้างข้อมูลไดเร็กทอรีเอาต์พุต ลบรูปภาพเก่าและไฟล์วิดีโอเก่า (ฉันเลือกลบไฟล์ที่เก่ากว่า 1 วันและรูปภาพที่เก่ากว่า 7 วัน - ทดลองใช้งานได้ฟรี)

หากต้องการทำประเภทนั้น crontab -e ซึ่งจะเปิดโปรแกรมแก้ไขข้อความนาโนของคุณ เพิ่มบรรทัดต่อไปนี้ที่ด้านล่างของไฟล์:

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

ในที่สุด รีบูต Raspberry Pi ของคุณ ตอนนี้พร้อมแล้วที่จะทำให้สระของคุณเต็มและปลอดภัย

จัดการคนจรจัดด้วยการตั้งค่า โค้ด และอย่าลืมติดดาวที่เก็บ github ของฉันและแสดงความคิดเห็นเกี่ยวกับคำแนะนำหากคุณพบว่ามีประโยชน์ ฉันมักจะมองหาที่จะเรียนรู้เพิ่มเติม

มีความสุขในการทำ!

IoT Challenge
IoT Challenge
IoT Challenge
IoT Challenge

รองชนะเลิศใน IoT Challenge

แนะนำ: