สารบัญ:

เซ็นเซอร์ประตูที่ใช้พลังงานจากแบตเตอรี่พร้อมการรวมระบบอัตโนมัติภายในบ้าน WiFi และ ESP-NOW: 5 ขั้นตอน (พร้อมรูปภาพ)
เซ็นเซอร์ประตูที่ใช้พลังงานจากแบตเตอรี่พร้อมการรวมระบบอัตโนมัติภายในบ้าน WiFi และ ESP-NOW: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เซ็นเซอร์ประตูที่ใช้พลังงานจากแบตเตอรี่พร้อมการรวมระบบอัตโนมัติภายในบ้าน WiFi และ ESP-NOW: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เซ็นเซอร์ประตูที่ใช้พลังงานจากแบตเตอรี่พร้อมการรวมระบบอัตโนมัติภายในบ้าน WiFi และ ESP-NOW: 5 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: ขั้นตอนการติดตั้ง เซนเซอร์ประตู/หน้าต่าง TUYA Door Sensor WIFI ตั้งค่าเชื่อมต่อแอพ Smart Life ง่ายๆ 2024, กรกฎาคม
Anonim
Image
Image

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

เป้าหมายของฉัน:

  • เซ็นเซอร์ที่ตรวจจับและรายงานการเปิดประตูอย่างรวดเร็ว (<5 วินาที)
  • เซ็นเซอร์ตรวจจับการปิดประตู
  • เซ็นเซอร์ที่ทำงานด้วยแบตเตอรี่และทำงานด้วยแบตเตอรี่สองสามเดือน

ฮาร์ดแวร์และซอฟต์แวร์ได้รับแรงบันดาลใจจาก

  • กระดาน Trigboard ของ Kevin Darrah (TPL5111 และ TPS73733)
  • วีดีโอนี้

ฉันสร้างเซ็นเซอร์สำหรับประตูหน้าและประตูหลังของฉัน ข้อแตกต่างเพียงอย่างเดียวคือตำแหน่ง LED และสวิตช์ไฟภายนอก (บนเซ็นเซอร์แบ็คดอร์)

ฉันทำการปรับปรุงหลายอย่างในระหว่างการพัฒนาฮาร์ดแวร์และซอฟต์แวร์ มันสามารถเห็นได้ในภาพถ่าย

เสบียง

ฉันซื้อชิ้นส่วนอิเล็กทรอนิกส์จาก Aliexpress ส่วนประกอบหลัก:

  • แบตเตอรี่ LiPo
  • TPS73733 LDO
  • TPL5111
  • รีดสวิทช์
  • มอสเฟต P-channel: IRLML6401TRPBF
  • แม่เหล็ก
  • แผ่นอะแดปเตอร์ PCB สำหรับส่วนประกอบ SMD และอื่นๆ

ขั้นตอนที่ 1: ฮาร์ดแวร์ - วงจร

ฮาร์ดแวร์ - วงจร
ฮาร์ดแวร์ - วงจร
ฮาร์ดแวร์ - วงจร
ฮาร์ดแวร์ - วงจร
ฮาร์ดแวร์ - วงจร
ฮาร์ดแวร์ - วงจร

ดูแผนผังที่แนบมาสำหรับวงจร ฉันบัดกรีชิ้นส่วน SMD บนแผ่นอะแดปเตอร์ PCB และบัดกรีส่วนประกอบทั้งหมดเข้ากับบอร์ดประสิทธิภาพสองด้าน ฉันเชื่อมต่อ ESP-01 ผ่านส่วนหัวของเพศหญิง ดังนั้นฉันจึงสามารถลบออกเพื่อตั้งโปรแกรมผ่านอะแดปเตอร์ที่แสดงในขั้นตอนที่ 3 ของคำแนะนำนี้ได้

วงจรทำงานดังนี้:

  • เมื่อเปิดประตู TPL5111 จะถูกยิงที่พิน DELAY/M_DRV และเปิดใช้งาน TPS73733 LDO ซึ่งให้พลังงานแก่ ESP-01 สำหรับการดำเนินการนี้ ต้องดึง EN/ONE_SHOT ให้ต่ำ โปรดดูเอกสารข้อมูลของ TPL5111
  • หลังจากที่โปรแกรมทำงาน (ดูขั้นตอนซอฟต์แวร์) ESP-01 จะส่งสัญญาณเสร็จสิ้นไปยัง TPL5111 ซึ่งจะปิดการใช้งาน TPS73733 ส่งผลให้ TPL5111 และ TPS73733 มีสถานะพลังงานต่ำมาก

ฉันใช้สวิตช์กกที่มีการเชื่อมต่อทั้ง NO และ NC ฉันต่อสาย NC เนื่องจากสวิตช์กกต้องปิดวงจรเมื่อถอดแม่เหล็ก (เปิดประตู) และเปิดเมื่อแม่เหล็กอยู่ใกล้ (ปิดประตู)

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

ขั้นตอนที่ 2: ฮาร์ดแวร์ - สิ่งที่แนบมา

ฮาร์ดแวร์ - สิ่งที่แนบมา
ฮาร์ดแวร์ - สิ่งที่แนบมา
ฮาร์ดแวร์ - สิ่งที่แนบมา
ฮาร์ดแวร์ - สิ่งที่แนบมา
ฮาร์ดแวร์ - สิ่งที่แนบมา
ฮาร์ดแวร์ - สิ่งที่แนบมา

ฉันออกแบบเคสใน Autodesk Fusion360 โดยได้รับแรงบันดาลใจจากวิดีโอนี้โดย 'ผู้ชายที่มีสำเนียงสวิส'

ไฟล์ STL ของทั้งสามส่วน:

  • กล่อง
  • ฝา
  • ที่ยึดแม่เหล็ก

ถูกเผยแพร่บนหน้า Thingiverse ของฉัน

ขั้นตอนที่ 3: ซอฟต์แวร์

ซอฟต์แวร์
ซอฟต์แวร์

โปรแกรมอยู่ใน Github ของฉัน

โฟลว์ของโปรแกรมแสดงอยู่ในภาพ ดูคำแนะนำอื่น ๆ ของฉันสำหรับคำอธิบายว่าฉันใช้ ESP-NOW อย่างไร

เมื่อเปิดโมดูล โมดูลจะพยายามส่งข้อความ "เปิด" ผ่าน ESP-NOW ก่อน หากไม่สำเร็จ จะเปลี่ยนไปใช้การเชื่อมต่อ WiFi และ MQTT

ฉันพบว่าอย่างน้อยในการตั้งค่าของฉัน ข้อความ 'ปิด' ไม่ได้ส่งสำเร็จผ่าน ESP-NOW ดังนั้นฉันจึงลบสิ่งนี้ออกจากโปรแกรมและใช้เฉพาะ WiFi และ MQTT

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

โปรแกรมตรวจสอบว่าผู้รับได้รับข้อความปิดผ่านการฟังข้อความ MQTT ในหัวข้อที่ถูกต้องหรือไม่

ขั้นตอนที่ 4: ระบบอัตโนมัติภายในบ้านและโทรเลข

ระบบอัตโนมัติในบ้านและโทรเลข
ระบบอัตโนมัติในบ้านและโทรเลข
ระบบอัตโนมัติในบ้านและโทรเลข
ระบบอัตโนมัติในบ้านและโทรเลข
ระบบอัตโนมัติในบ้านและโทรเลข
ระบบอัตโนมัติในบ้านและโทรเลข

เซ็นเซอร์ประตูของฉันสื่อสารกับ Openhab Home Automation บน Raspberry Pi Zero ของฉัน

แอปพลิเคชันหลัก:

  • อ่านสถานะของประตู: เปิดหรือปิด
  • เตือนฉันผ่านทางโทรเลขหากประตูเปิดอยู่ (หากเปิดนาฬิกาปลุกหรือเปิดฟังก์ชันการตรวจสอบ)
  • อ่านครั้งสุดท้ายที่ประตูถูกเปิดหรือปิด
  • นับจำนวนช่องเปิดที่เซ็นเซอร์ประตูสามารถจัดการได้ก่อนที่แบตเตอรี่จะหมด

ตัวอย่างเช่น ถ้าเราอยู่ในช่วงวันหยุดและเพื่อนบ้านเข้ามารดน้ำต้นไม้ ฉันได้รับข้อความ ดูวิดีโอในบทนำ

รายการ Openhab กฎและไฟล์แผนผังเว็บไซต์อยู่ใน Github ของฉัน ในไฟล์เหล่านี้ คุณยังสามารถเห็นเซ็นเซอร์ประตูโรงเก็บของของฉัน ซึ่งใช้สวิตช์กกแบบมีสายแบบปกติและสวิตช์หน้าสัมผัสขนาดเล็ก (ปลาย) จากเครื่องพิมพ์ 3 มิติในช่องเปิดล็อค (ดูรูป)

วิธีใช้การดำเนินการโทรเลขใน Openhab ได้อธิบายไว้ที่นี่

ขั้นตอนที่ 5: การปรับปรุงและการปรับปรุงเพิ่มเติม

การปรับปรุงและการปรับปรุงเพิ่มเติม
การปรับปรุงและการปรับปรุงเพิ่มเติม
การปรับปรุงและการปรับปรุงเพิ่มเติม
การปรับปรุงและการปรับปรุงเพิ่มเติม

ในช่วงหลายเดือนที่ผ่านมา ฉันได้ทำการปรับปรุงดังต่อไปนี้

จัดการกับการเปิดประตูแบบยาวด้วยสัญญาณพัลส์แบบสวิตช์ตัวเอง

ในฤดูร้อน เราเปิดประตูหลังทิ้งไว้สองสามชั่วโมงเมื่อเราอยู่ที่บ้าน ESP-01 ที่ทำงานด้วยการเชื่อมต่อ WiFi จะทำให้แบตเตอรี่หมดโดยไม่จำเป็น ดังนั้นฉันจึงรวมสวิตช์เปิด/ปิดเพื่อให้สามารถปิดโมดูลในสถานการณ์เหล่านี้ได้

อย่างไรก็ตาม บางครั้งสิ่งนี้ส่งผลให้โมดูลปิดอย่างถาวร (เมื่อฉันลืมเปิดเครื่อง) และแบตเตอรี่หมดหลังจากประตูเปิดและโมดูลที่ทำงานในช่วงบ่ายสองสามวัน (เมื่อฉันลืมปิดเครื่อง)

ดังนั้นฉันจึงต้องการปิดโมดูลโดยใช้ซอฟต์แวร์หลังจากที่เปิดโมดูลเป็นเวลาที่กำหนดไว้ล่วงหน้า (1 นาที)

อย่างไรก็ตาม เมื่อชีพจร 'DONE' ของ ESP-01 ปิด TPL5111 เมื่อประตูปิด ฉันพบว่า TPL5111 ไม่ได้ถูกเปลี่ยนโดยพัลส์ 'DONE' ในขณะที่พิน DELAY/M_DRV สูง สัญญาณสูงบนพิน DELAY/M_DRV นี้เกิดจากการเปิดประตูและหน้าสัมผัส NC ของสวิตช์กกที่เชื่อมต่อกับแรงดันแบตเตอรี่

ดังนั้น สัญญาณที่ส่งไปยังพิน DELAY/M_DRV ไม่ควรสูงอย่างต่อเนื่อง แต่ควรเป็นพัลส์ ในแผ่นข้อมูล TPL5111 คุณจะพบว่าควรเป็นพัลส์ที่ > 20 ms ฉันสร้างสัญญาณการสลับตัวเองนี้ผ่านมอสเฟต P-channel ตัวเก็บประจุและตัวต้านทาน 10K และ 300K ดูรูปแบบที่รวมไว้

มันทำงานดังนี้:

  • หากหน้าสัมผัส NC ของสวิตช์กกปิด เกตจะต่ำ และมอสเฟตเปิดอยู่ ส่งผลให้มีสัญญาณสูงบนพิน DELAY/M_DRV ซึ่งจะเปิดใช้งานโมดูล
  • ตัวเก็บประจุถูกชาร์จอย่างรวดเร็ว ส่งผลให้มีแรงดันไฟฟ้าเพิ่มขึ้นที่เกต
  • หลังจากผ่านไปประมาณ 20 มิลลิวินาที แรงดันไฟที่เกตจะเป็น 97% ของแรงดันแบตเตอรี่ (300K/(300K+10K) ซึ่งสูง และปิด Mosfet ส่งผลให้มีสัญญาณ LOW บนพิน DELAY/M_DRV
  • เมื่อพิน DELAY/M_DRV ต่ำ สัญญาณ DONE ของ ESP-01 ส่งผลให้โมดูลปิด

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

สิ่งสำคัญคือต้องใช้ P-channel Mosfet ซึ่งเหมาะสำหรับช่วงแรงดันไฟฟ้าที่ใช้ในที่นี้ Mosfet ต้องเปิดอย่างสมบูรณ์ที่ VGS ประมาณ - 3.8V และปิดอย่างสมบูรณ์ที่ VGS ประมาณ -0.2 V ฉันลองใช้ Mosfet หลายตัวและพบว่า IRLML6401TRPBF ทำงานได้ดีสำหรับเป้าหมายนี้ร่วมกับตัวต้านทาน 10K และ 300K. ตัวเก็บประจุขนาด 1 ยูเอฟทำงานได้ดีเพื่อให้ได้ความยาวพัลส์ประมาณ 20 มิลลิวินาที ตัวเก็บประจุที่ใหญ่ขึ้นส่งผลให้พัลส์ยาวขึ้น ซึ่งไม่จำเป็น เนื่องจาก TPL5111 ถูกเปิดใช้งาน ฉันใช้ออสซิลโลสโคป DSO150 เพื่อตรวจสอบแรงดันไฟฟ้าและความยาวพัลส์

การปรับปรุงที่วางแผนไว้: การอัปเดต OTA

ฉันวางแผนที่จะรวมการอัปเดต OTA ผ่านขั้นตอนต่อไปนี้ ซึ่งรวมอยู่ในซอฟต์แวร์ปัจจุบันแล้วบางส่วน

  • ผ่าน Openhab ของ NodeRed ฉันเผยแพร่ข้อความ 'อัปเดต' ที่เก็บไว้เป็น 'หัวข้อการอัปเดต'
  • หากโมดูลเปิดอยู่และเชื่อมต่อกับเซิร์ฟเวอร์ MQTT และสมัครรับ 'หัวข้อการอัปเดต' โมดูลจะได้รับข้อความอัปเดต
  • ข้อความอัปเดตจะป้องกันไม่ให้โมดูลปิดและเริ่ม
  • ผ่านทางเว็บไซต์ของ HTTPUpdateServer คุณสามารถอัปเดตซอฟต์แวร์ได้
  • ผ่าน Openhab ของ NodeRed ฉันเผยแพร่ข้อความ 'ว่าง' ที่เก็บไว้เป็น 'อัปเดตหัวข้อ'

การปรับปรุงที่วางแผนไว้: การปิดฮาร์ดแวร์หลังจากเวลาที่กำหนดไว้ล่วงหน้า

ในรูปแบบปัจจุบัน ฉันใช้ตัวต้านทาน 200K ระหว่าง DELAY/M_DRV และ GND ของ TPL5111 สิ่งนี้จะเปิดโมดูลนานกว่า 2 ชั่วโมง (ดู 7.5.3. ของแผ่นข้อมูล TPL5111) อย่างไรก็ตาม ฉันไม่ต้องการให้โมดูลเปิดทำงานนานเกินไป เนื่องจากแบตเตอรี่จะหมด หากโซลูชันซอฟต์แวร์ (ดูด้านบน) ไม่สามารถปิดโมดูลได้ หรือข้อความอัปเดตโดยไม่ได้ตั้งใจทำให้โมดูลอยู่ในโหมดอัปเดต โมดูลจะยังคงเปิดอยู่เป็นเวลานาน

ดังนั้นจึงควรใช้ตัวต้านทานที่มีขนาดเล็กกว่าระหว่าง DELAY/M_DRV และ GND ของ TPL5111 ดังนั้นโมดูลจะถูกปิดหลังจากช่วงเวลาสั้นๆ เช่น ตัวต้านทาน 50K ส่งผลให้มีเวลา 7 นาที

แนะนำ: