PIR Motion Sensor พร้อม ESP32 โดยใช้ MicroPython และ Thornny IDE

Pir Motion Sensor Phrxm Esp32 Doy Chi Micropython Laea Thornny Ide



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

ก่อนที่เราจะเริ่มเชื่อมต่อ ESP32 กับเซ็นเซอร์ PIR เราต้องรู้ว่าการขัดจังหวะทำงานอย่างไร และวิธีอ่านและจัดการกับการขัดจังหวะใน ESP32 เรามาพูดถึงการทำงานของ PIR กับ ESP32 โดยละเอียดกัน

นี่คือเนื้อหาสำหรับบทความนี้:







1: การขัดจังหวะคืออะไร



1.1: ขัดจังหวะพินใน ESP32



2: การเรียกการขัดจังหวะใน ESP32 – MicroPython





3: การเชื่อมต่อเซ็นเซอร์ PIR กับ ESP32 – MicroPython

3.1: เซนเซอร์จับความเคลื่อนไหว PIR (HC-SR501)



3.2: พินเอาท์ HC-SR501

3.3: รหัส

3.4: เอาต์พุต

1: การขัดจังหวะคืออะไร

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

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

ด้วยการขัดจังหวะ เราไม่จำเป็นต้องตรวจสอบสถานะดิจิทัลของขาอินพุต ESP32 อย่างต่อเนื่อง เมื่อเกิดการขัดจังหวะ โปรเซสเซอร์จะหยุดการทำงานของโปรแกรมหลัก และจะมีการเรียกใช้ฟังก์ชันใหม่ที่เรียกว่า ISR ( กิจวัตรบริการขัดจังหวะ ). นี้ ISR ฟังก์ชันจัดการการขัดจังหวะที่เกิดขึ้นหลังจากนั้นกลับไปที่โปรแกรมหลักและเริ่มดำเนินการ ตัวอย่างหนึ่งของ ISR คือเซ็นเซอร์จับความเคลื่อนไหว PIR ซึ่งสร้างการขัดจังหวะเมื่อตรวจพบการเคลื่อนไหว

1.1: ขัดจังหวะพินใน ESP32

การขัดจังหวะภายนอกหรือฮาร์ดแวร์อาจเกิดจากโมดูลฮาร์ดแวร์ใดๆ เช่น เซ็นเซอร์สัมผัสหรือปุ่มกด การขัดจังหวะการสัมผัสเกิดขึ้นเมื่อตรวจพบการสัมผัสที่พิน ESP32 หรือสามารถใช้การขัดจังหวะ GPIO เมื่อกดปุ่มหรือปุ่มกด

ในบทความนี้ เราจะเรียกใช้การขัดจังหวะเมื่อตรวจพบการเคลื่อนไหวโดยใช้เซ็นเซอร์ PIR กับ ESP32

พิน GPIO เกือบทั้งหมดยกเว้น 6 พินรวม SPI ซึ่งมักจะมาใน 36 รุ่นพินของบอร์ด ESP32 ไม่สามารถใช้เพื่อวัตถุประสงค์ในการโทรขัดจังหวะได้ ดังนั้น ในการรับอินเตอร์รัปต์จากภายนอก ต่อไปนี้เป็นพินที่ใช้ใน ESP32:

2: การเรียก Interrupt ใน ESP32 โดยใช้ MicroPython

เพื่อตั้งโปรแกรมบอร์ด ESP32 ด้วยเซ็นเซอร์ PIR โดยใช้รหัส MicroPython เราต้องกำหนดฟังก์ชั่นการขัดจังหวะ ต่อไปนี้เป็นขั้นตอนง่ายๆ ที่ช่วยในการกำหนดการขัดจังหวะสำหรับบอร์ด ESP32

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

ในกรณีของเซ็นเซอร์ PIR เราจะใช้พิน GPIO เป็น ทั่วโลก ตัวแปร. ฟังก์ชันขัดจังหวะจะใช้พินเป็นอาร์กิวเมนต์และอธิบายถึงพิน GPIO ซึ่งทำให้ฟังก์ชันขัดจังหวะเกิดขึ้น

def handle_interrupt ( เข็มหมุด ) :

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

เข็มหมุด = เข็มหมุด ( 13 , เข็มหมุด. ใน )

ขั้นตอนที่ 3: ต่ออินเตอร์รัปต์เข้ากับพิน GPIO สำหรับเซ็นเซอร์ PIR โดยใช้วิธี irq():

เมื่อใช้คำสั่งด้านล่าง เราสามารถตั้งค่าการขัดจังหวะเป็นพินที่เรากำหนดไว้ก่อนหน้านี้

สะพาน. ไอคิว ( สิ่งกระตุ้น = เข็มหมุด. IRQ_RISING , ตัวจัดการ = handle_interrupt )

เดอะ ไอคิว() ใช้วิธีต่ออินเตอร์รัปต์เข้ากับพิน ไอคิว() ยอมรับสองข้อโต้แย้งที่แตกต่างกัน:

  • สิ่งกระตุ้น
  • แฮนด์เลอร์

สิ่งกระตุ้น: อาร์กิวเมนต์นี้อธิบายถึงโหมดของทริกเกอร์ ต่อไปนี้เป็นสามโหมด:

  • Pin.IRQ_FALLING: เมื่อพินเปลี่ยนจากสูงเป็นต่ำ การขัดจังหวะจะเริ่มต้นขึ้น
  • พิน.IRQ_RISING: เมื่อหมุดเปลี่ยนจากต่ำเป็นสูง การขัดจังหวะจะเริ่มขึ้น
  • Pin.IRQ_FALLING|พิน.IRQ_RISING: ทริกเกอร์การขัดจังหวะเมื่อใดก็ตามที่พินเปลี่ยนสถานะ พินไปที่ HIGH หรือ LOW

ตัวจัดการ: ฟังก์ชันนี้จะถูกเรียกใช้เมื่อมีการขัดจังหวะ

3: การเชื่อมต่อเซ็นเซอร์ PIR กับ ESP32

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

จะต้องมีส่วนประกอบดังต่อไปนี้:

  • บอร์ดพัฒนา ESP32
  • เซ็นเซอร์ตรวจจับความเคลื่อนไหว PIR (HC-SR501)
  • ตัวต้านทาน 220 โอห์ม
  • สายจัมเปอร์
  • เขียงหั่นขนม
  • นำ

แผนผัง สำหรับเซ็นเซอร์ PIR ที่มี ESP32:

การกำหนดค่าพินของ ESP32 พร้อมเซ็นเซอร์ PIR คือ:

  คำอธิบายตารางที่สร้างขึ้นโดยอัตโนมัติ

3.1: เซนเซอร์จับความเคลื่อนไหว PIR (HC-SR501)

PIR เป็นตัวย่อของ เซ็นเซอร์อินฟราเรดแบบพาสซีฟ . เซ็นเซอร์ไพโรอิเล็กทริกสองตัวที่ใช้ร่วมกันซึ่งจะตรวจจับปริมาณความร้อนรอบๆ สภาพแวดล้อม เซ็นเซอร์ไพโรอิเล็กทริกทั้งสองนี้วางเรียงต่อกัน และเมื่อวัตถุเข้ามาในระยะของวัตถุ การเปลี่ยนแปลงของพลังงานความร้อนหรือความแตกต่างของสัญญาณระหว่างเซ็นเซอร์ทั้งสองนี้จะทำให้เอาต์พุตเซ็นเซอร์ PIR มีค่าต่ำ เมื่อขาออก PIR ไปที่ LOW เราสามารถตั้งค่าคำสั่งเฉพาะเพื่อดำเนินการ (ไฟ LED กะพริบ)

  คำอธิบายไดอะแกรมสร้างขึ้นโดยอัตโนมัติ

ต่อไปนี้เป็นลักษณะของเซ็นเซอร์ PIR:

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

3.2: พินเอาท์ HC-SR501

PIR HC-SR501 มาพร้อมกับสามพิน สองอันคือพินพลังงานสำหรับ Vcc และ GND และอีกอันคือพินเอาต์พุตสำหรับสัญญาณทริกเกอร์

ต่อไปนี้เป็นคำอธิบายของพินเซ็นเซอร์ PIR:

เข็มหมุด ชื่อ คำอธิบาย
1 วีซีซี ขาอินพุตสำหรับเซ็นเซอร์ เชื่อมต่อกับ ESP32 Vin Pin
สอง ออก เอาต์พุตเซ็นเซอร์
3 จีเอ็นดี เซ็นเซอร์ GND

3.3: รหัส

ตอนนี้ถึงการเขียนโปรแกรม ESP32 เขียนโค้ดที่กำหนดในโปรแกรมแก้ไข Thonny IDE หรือ MicroPython IDE อื่น ๆ แล้วอัปโหลดไปยัง ESP32

จากเครื่องนำเข้า Pin
จาก เวลา นำเข้าการนอนหลับ
การเคลื่อนไหว = เท็จ
def handle_interrupt ( เข็มหมุด ) :
การเคลื่อนไหวทั่วโลก
การเคลื่อนไหว = จริง
Interrupt_pin ส่วนกลาง
Interrupt_pin = เข็มหมุด
นำ = เข็มหมุด ( 4 , เข็มหมุด. ออก )
สะพาน = เข็มหมุด ( 13 , เข็มหมุด. ใน )
สะพาน. ไอคิว ( สิ่งกระตุ้น = เข็มหมุด. IRQ_RISING , ตัวจัดการ = handle_interrupt )
ในขณะที่ จริง :
ถ้า การเคลื่อนไหว :
พิมพ์ ( 'ตรวจจับการเคลื่อนไหว' )
นำ. ค่า ( 1 )
นอน ( 5 )
นำ. ค่า ( 0 )
พิมพ์ ( 'หยุดการเคลื่อนไหว' )
การเคลื่อนไหว = เท็จ

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

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

พูดง่ายๆ ทุกครั้งที่ PIR ตรวจจับการเคลื่อนไหว handle_interrupt จะตั้งค่าตัวแปรการเคลื่อนไหวให้เป็นจริงและเก็บพินที่ทำให้เกิดการขัดจังหวะขึ้น สิ่งหนึ่งที่ต้องจำ มักจะประกาศ การเคลื่อนไหว ตัวแปรเป็น global เพราะจำเป็นตลอดทั้งโค้ด

ในอนาคต เราสร้างอ็อบเจกต์พิน 2 อัน อันหนึ่งสำหรับจัดเก็บพิน LED และอันที่สองจะรับเอาต์พุตเซ็นเซอร์ PIR ที่พิน GPIO 13 นอกจากนี้ เราประกาศพินทริกเกอร์ใน เพิ่มขึ้น โหมด.

ใน ห่วง ส่วนหนึ่งของโค้ดจะตรวจสอบค่าของตัวแปรการเคลื่อนไหวเมื่อเป็นจริง LED จะเปิดที่เชื่อมต่อที่ขา 4 ของ ESP32 หาก LED หยุดการเคลื่อนไหวจะดับลงหลังจากผ่านไป 5 วินาที

3.4: เอาต์พุต

ในส่วนเอาต์พุต เราจะเห็นว่าวัตถุอยู่นอกระยะของเซ็นเซอร์ PIR ดังนั้น นำ หัน ปิด .

ตอนนี้ การเคลื่อนไหวที่ตรวจพบโดย LED เซ็นเซอร์ PIR จะเปลี่ยนไป บน สำหรับ 5 วินาที หลังจากนั้นหากตรวจไม่พบการเคลื่อนไหวก็จะยังคงอยู่ ปิด จนกว่าจะได้รับทริกเกอร์ถัดไป

ผลลัพธ์ต่อไปนี้แสดงโดย เปลือก/ขั้ว ใน ธอนนี่ ไอดีโอ.

  ส่วนติดต่อผู้ใช้แบบกราฟิก ข้อความ คำอธิบายแอปพลิเคชันที่สร้างขึ้นโดยอัตโนมัติ

บทสรุป

เซ็นเซอร์ PIR ที่มี ESP32 สามารถช่วยตรวจจับการเคลื่อนไหวของสิ่งต่างๆ การใช้ฟังก์ชันขัดจังหวะใน MicroPython กับ ESP32 เราสามารถทริกเกอร์การตอบสนองที่พิน GPIO บางตัว เมื่อตรวจพบการเปลี่ยนแปลง ฟังก์ชันอินเตอร์รัปต์จะทำงานและไฟ LED จะเปิดขึ้น