สารบัญ:
- ขั้นตอนที่ 1: PIR Motion Sensor
- ขั้นตอนที่ 2: การตั้งค่า PIR Motion Sensor
- ขั้นตอนที่ 3: โมดูลกล้อง Raspberry Pi และการตั้งค่า
- ขั้นตอนที่ 4: รวม PIR Motion Sensor และโมดูลกล้อง
- ขั้นตอนที่ 5: การตั้งค่าสำหรับ Flask
- ขั้นตอนที่ 6: ผลลัพธ์
วีดีโอ: Raspberry Pi Human Detector + กล้อง + ขวด: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
ในบทช่วยสอนนี้ ฉันจะอธิบายขั้นตอนต่างๆ สำหรับโครงการ Raspberry Pi IoT ของฉัน โดยใช้ PIR Motion Sensor, โมดูลกล้อง Raspberry เพื่อสร้างอุปกรณ์ความปลอดภัย IoT อย่างง่าย และการเข้าถึงบันทึกการตรวจจับด้วย Flask
ขั้นตอนที่ 1: PIR Motion Sensor
PIR ย่อมาจาก "Passive Infrared" และเซ็นเซอร์ตรวจจับความเคลื่อนไหวนี้จะจับการเคลื่อนไหวโดยดูจากมุมมองอินฟราเรดและรับการเปลี่ยนแปลงของอินฟราเรด ดังนั้นด้วยใบไม้และมนุษย์ที่ผ่านเซ็นเซอร์ มันจะตรวจจับมนุษย์เท่านั้นเนื่องจากเราในฐานะมนุษย์สร้างความร้อนและปล่อยรังสีอินฟราเรดออกมา ดังนั้น เซ็นเซอร์ตรวจจับความเคลื่อนไหวจึงเป็นตัวเลือกที่ดีสำหรับการตรวจจับการเคลื่อนไหวของมนุษย์
ขั้นตอนที่ 2: การตั้งค่า PIR Motion Sensor
มีสามพินสำหรับเซ็นเซอร์ตรวจจับความเคลื่อนไหว PIR, กำลัง, เอาต์พุตและกราวด์ ใต้หมุดคุณจะเห็นป้ายกำกับ VCC สำหรับกำลังไฟฟ้า เอาต์พุตสำหรับเอาต์พุต และ GND สำหรับกราวด์ เมื่อเซ็นเซอร์ตรวจจับการเคลื่อนไหว พินเอาต์พุตจะส่งสัญญาณ HIGH ไปยังพิน Raspberry Pi ที่คุณเชื่อมต่อเซ็นเซอร์ด้วย สำหรับ Power pin คุณต้องแน่ใจว่ามันเชื่อมต่อกับพิน 5V บน Raspberry Pi เพื่อจ่ายไฟ สำหรับโปรเจ็กต์ของฉัน ฉันเลือกเชื่อมต่อพินเอาต์พุตกับ Pin11 บน Pi
หลังจากเชื่อมต่อทุกอย่างแล้ว คุณสามารถส่งข้อความถึงเซ็นเซอร์ของคุณโดยเรียกใช้สคริปต์ดังตัวอย่างด้านล่าง:
นำเข้า RPi. GPIO เป็น GPIO เวลานำเข้า GPIO.cleanup() GPIO.setwarnings(False) GPIO.setmode(GPIO. BOARD) GPIO.setup(11, GPIO. IN) #อ่านผลจากเซ็นเซอร์ตรวจจับความเคลื่อนไหว PIR บนขา 11 ขณะที่ True: i =GPIO.input(11) if i==0: #When output from motion sensor is LOW print "No detection", i time.sleep(0.1) elif i==1: #When output from motion sensor is HIGH พิมพ์ " ตรวจพบการเคลื่อนไหว" ฉัน time.sleep(0.1)
เรียกใช้สคริปต์บน Pi ของคุณ แล้ววางมือหรือเพื่อนของคุณไว้หน้าเซ็นเซอร์เพื่อตรวจสอบว่าเซ็นเซอร์รับการเคลื่อนไหวหรือไม่
ขั้นตอนที่ 3: โมดูลกล้อง Raspberry Pi และการตั้งค่า
มนุษย์ปล่อยรังสีอินฟราเรดเนื่องจากความร้อน และวัตถุที่มีอุณหภูมิก็เช่นกัน ดังนั้นสัตว์หรือวัตถุที่ร้อนสามารถกระตุ้นเซ็นเซอร์ตรวจจับความเคลื่อนไหวได้เช่นกัน เราต้องการวิธีตรวจสอบว่าการตรวจจับนั้นถูกต้องหรือไม่ มีหลายวิธีที่จะนำไปใช้ แต่ในโครงการของฉัน ฉันเลือกใช้โมดูลกล้อง Raspberry Pi เพื่อถ่ายภาพเมื่อเซ็นเซอร์ตรวจจับความเคลื่อนไหวจับการเคลื่อนไหว
ในการใช้โมดูลกล้อง ก่อนอื่นคุณต้องตรวจสอบให้แน่ใจว่าได้เสียบหมุดเข้ากับช่องเสียบกล้องบน Pi แล้ว พิมพ์
sudo raspi-config
บน Pi ของคุณเพื่อเปิดอินเทอร์เฟซการกำหนดค่าและเปิดใช้งานกล้องใน 'ตัวเลือกการเชื่อมต่อ' หลังจากรีบูต คุณสามารถทดสอบว่า Pi เชื่อมต่อกับกล้องจริงหรือไม่โดยพิมพ์
vcgencmd get_camera
และจะแสดงสถานะให้คุณทราบ ขั้นตอนสุดท้ายคือการติดตั้งโมดูล picamera โดยพิมพ์
pip ติดตั้ง picamera
หลังจากตั้งค่าทั้งหมดแล้ว คุณสามารถทดสอบกล้องของคุณโดยเรียกใช้สคริปต์ดังตัวอย่างด้านล่าง:
จาก picamera นำเข้า PiCamera
จากเวลานำเข้ากล้องสลีป = PiCamera() camera.start_preview() sleep(2) camera.capture('image.jpg') camera.stop_preview()
รูปภาพจะถูกจัดเก็บเป็น 'image.jpg' ที่ไดเร็กทอรีเหมือนกับสคริปต์กล้องของคุณ สังเกตว่า คุณต้องแน่ใจว่า 'sleep (2)' อยู่ตรงนั้น และจำนวนนั้นมากกว่า 2 เพื่อให้กล้องมีเวลาเพียงพอในการปรับสภาพแสง
ขั้นตอนที่ 4: รวม PIR Motion Sensor และโมดูลกล้อง
แนวคิดของโปรเจ็กต์ของฉันคือเซ็นเซอร์ตรวจจับความเคลื่อนไหวและกล้องจะหันไปทางเดียวกัน เมื่อใดก็ตามที่เซ็นเซอร์ตรวจจับความเคลื่อนไหวจับการเคลื่อนไหว กล้องจะถ่ายภาพเพื่อให้เราตรวจสอบสาเหตุที่ทำให้เกิดการเคลื่อนไหวได้ในภายหลัง
บท:
นำเข้า RPi. GPIO เป็น GPIO จากวันที่และเวลานำเข้าเวลานำเข้าจาก picamera นำเข้า PiCamera
GPIO. การล้างข้อมูล ()
GPIO.setwarnings(False) GPIO.setmode(GPIO. BOARD) GPIO.setup(11, GPIO. IN) #Read output from PIR motion sensor message = 'start' counter = 0 log_f = open('static/log.txt', 'w') log_f.close()
กล้อง = PiCamera()
pic_name = 0
กล้อง.start_preview()
เวลานอน(2)
ในขณะที่จริง:
i=GPIO.input(11) if i==0: #When output from motion sensor is LOW if counter > 0: end = str(datetime.now()) log_f = open('static/log.txt', ' a') ข้อความ = ข้อความ + '; สิ้นสุดที่ ' + end + '\n' print(message) log_f.write(message) log_f.close() final = 'static/' + str(pic_name) + ".jpg" pic_name = pic_name + 1 camera.capture(สุดท้าย) ตัวนับ = 0 พิมพ์ "ไม่มีผู้บุกรุก" ฉัน time.sleep(0.1) elif i==1: #เมื่อเอาต์พุตจากเซ็นเซอร์ตรวจจับความเคลื่อนไหวสูง ถ้าตัวนับ == 0: ปัจจุบัน = str(datetime.now()) ข้อความ = 'มนุษย์ตรวจพบ:' + 'เริ่มต้นที่' + ตัวนับปัจจุบัน = ตัวนับ + 1 พิมพ์ "ตรวจพบผู้บุกรุก" ฉัน time.sleep (0.1) camera.stop_preview()
ไดเร็กทอรีสำหรับ 'log.txt' และรูปภาพเป็น 'สแตติก' ซึ่งจำเป็นสำหรับ Flask ในการทำงาน
ขั้นตอนที่ 5: การตั้งค่าสำหรับ Flask
Flask เป็นเฟรมเวิร์กเว็บขนาดเล็กที่เขียนด้วย Python และอิงจากชุดเครื่องมือ Werkzeug และเครื่องมือเทมเพลต Jinja2 ง่ายต่อการใช้งานและบำรุงรักษา สำหรับบทช่วยสอนที่ดีกว่าสำหรับ Flask ฉันแนะนำลิงก์นี้: Flask Mega Tutorial
สคริปต์หลัก 'routes.py' ของโครงการของฉัน:
จากการนำเข้าโฟลเดอร์แอป appFlaskจากการนำเข้าขวดแสดงผล_เทมเพลต เปลี่ยนเส้นทางการนำเข้าระบบปฏิบัติการ
APP_ROOT = os.path.dirname(os.path.abspath(_file_)) # หมายถึง application_top
APP_STATIC = os.path.join (APP_ROOT, 'คงที่')
@appFlask.route('/', methods=['GET', 'POST'])
def view(): log_f = open(os.path.join(APP_STATIC, 'log.txt'), 'r') logs = log_f.readlines() final_logs = สำหรับบันทึกการเข้าสู่ระบบ: final_logs.append(log. strip()) ชื่อ = str(len(final_logs)-1)+'.jpg' ส่งคืน render_template('view.html', บันทึก=final_logs, ชื่อไฟล์=ชื่อ)
ไฟล์ HTML 'view.html' อยู่ที่แถบด้านบน (เพราะเมื่อฉันคัดลอกโค้ด HTML ที่นี่ มันจะเปลี่ยนเป็นรูปแบบ HTML จริงๆ…)
และโครงสร้างของโครงการควรมีลักษณะดังนี้ (แต่แน่นอนว่ามีไฟล์มากกว่านี้):
iotproject\ appfolder\ routes.py templates\ view.html static\ log.txt 0-j.webp
ขั้นตอนที่ 6: ผลลัพธ์
สำหรับการใช้งานนี้ หลังจากตั้งค่าอย่างถูกต้องแล้ว คุณจะสามารถเข้าถึง Raspberry Pi ได้โดยพิมพ์ที่อยู่ IP บนเบราว์เซอร์ และผลลัพธ์ควรมีลักษณะเหมือนภาพที่แถบด้านบนในขั้นตอนนี้