สารบัญ:

Wireless Door Sensor - Ultra Low Power: 5 ขั้นตอน
Wireless Door Sensor - Ultra Low Power: 5 ขั้นตอน

วีดีโอ: Wireless Door Sensor - Ultra Low Power: 5 ขั้นตอน

วีดีโอ: Wireless Door Sensor - Ultra Low Power: 5 ขั้นตอน
วีดีโอ: วิธีเชื่อมต่อ Door sensor DW1 และ PIR2 Sonoff รวมกับ RF Bridge แจ้งเตือนผ่านมือถือ และเปิดปิดไฟ 2024, กรกฎาคม
Anonim
เซ็นเซอร์ประตูไร้สาย - พลังงานต่ำเป็นพิเศษ
เซ็นเซอร์ประตูไร้สาย - พลังงานต่ำเป็นพิเศษ
เซ็นเซอร์ประตูไร้สาย - พลังงานต่ำเป็นพิเศษ
เซ็นเซอร์ประตูไร้สาย - พลังงานต่ำเป็นพิเศษ
เซ็นเซอร์ประตูไร้สาย - พลังงานต่ำเป็นพิเศษ
เซ็นเซอร์ประตูไร้สาย - พลังงานต่ำเป็นพิเศษ
เซ็นเซอร์ประตูไร้สาย - พลังงานต่ำเป็นพิเศษ
เซ็นเซอร์ประตูไร้สาย - พลังงานต่ำเป็นพิเศษ

เซ็นเซอร์ประตูอีกตัว !! แรงจูงใจสำหรับฉันในการสร้างเซ็นเซอร์นี้คือสิ่งที่ฉันเห็นบนอินเทอร์เน็ตมีข้อจำกัดอย่างใดอย่างหนึ่ง เป้าหมายบางประการของเซ็นเซอร์สำหรับฉันคือ:

1. เซ็นเซอร์ควรเร็วมาก - ควรน้อยกว่า 5 วินาที

2. เซ็นเซอร์ควรใช้แบตเตอรี่ Li-ion 3.7V เนื่องจากฉันมีแบตเตอรี่หลายสิบก้อนอยู่รอบๆ

3. เซ็นเซอร์ควรทำงานเป็นเวลาหลายเดือนโดยชาร์จแบตเตอรี่เพียงครั้งเดียว มันควรจะกิน < 10uA ในโหมดสลีป

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

5. เซ็นเซอร์ควรส่งข้อมูลไปยังหัวข้อ MQTT เมื่อเปิดประตูและเมื่อประตูปิด

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

การทำงานของเซ็นเซอร์:

เซ็นเซอร์มีตัวควบคุมหลัก 2 ตัว อย่างแรกคือไมโครคอนโทรลเลอร์ขนาดเล็ก ATiny 13A ประการที่สองคือ ESP ซึ่งมักจะอยู่ในโหมดสลีปและตื่นขึ้นเมื่อ ATiny เปิดใช้งานเท่านั้น วงจรทั้งหมดสามารถทำได้โดยใช้ ESP โดยใช้ในโหมดสลีป แต่กระแสไฟที่ใช้นั้นมากกว่าที่จำเป็นสำหรับแบตเตอรี่ที่จะใช้งานได้นานหลายเดือน ดังนั้น ATTiny จึงเข้ามาช่วยเหลือ ใช้เพื่อปลุกทุก N วินาทีเท่านั้น มองหาเหตุการณ์ที่ประตูหรือตรวจสุขภาพ หากมี จะถือ CH_PD pin ของ ESP ไปที่ HIGH และส่งสัญญาณที่เหมาะสมของประเภทของเหตุการณ์ไปยัง ESP. บทบาทของมันจบลงที่นั่น

จากนั้น ESP จะเข้าควบคุม อ่านประเภทสัญญาณ เชื่อมต่อกับ WiFi/MQTT เผยแพร่ข้อความที่จำเป็นรวมถึงระดับแบตเตอรี่ จากนั้นปิดตัวเองโดยนำพิน EN กลับไปที่ LOW

เมื่อใช้ชิปเหล่านี้ ฉันจะใช้ประโยชน์จากกระแสสลีปต่ำของ ATtiny และกระแสไฟที่ว่างเป็นศูนย์ของ ESP เมื่อชิปถูกปิดใช้งานผ่านพิน CH_PD

เสบียง

ข้อกำหนดเบื้องต้น:

- ความรู้เกี่ยวกับการเขียนโปรแกรม ATTiny & ESP 01

- ความรู้เกี่ยวกับการบัดกรีส่วนประกอบบน PCB

ESP-01 (หรือ ESP ใด ๆ)

ATTiny 13A - AVR

LDO 7333-A - ตัวควบคุมแรงดันไฟตกคร่อมต่ำ

ตัวต้านทาน - 1K, 10K, 3K3

ตัวเก็บประจุ: 100uF, 0.1 uF

สวิตช์ปุ่มกด, สวิตช์เปิด/ปิดไมโคร - (ทั้งสองตัวเลือก)

ไดโอด - IN4148 (หรือเทียบเท่า)

แบตเตอรี่ลิเธียมไอออน

รีดสวิทช์

กรณีที่จะบ้านมันทั้งหมด

บัดกรี, PCB ฯลฯ

ขั้นตอนที่ 1: แผนผังและซอร์สโค้ด

แผนผังและซอร์สโค้ด
แผนผังและซอร์สโค้ด

Schematics ดังแสดงในไดอะแกรมที่แนบมา

ฉันได้รวม P Channel MOSFET สำหรับการป้องกันขั้วย้อนกลับ หากคุณไม่ต้องการสิ่งนี้ คุณสามารถละเว้นได้ P Channel MOSFET ใด ๆ ที่มี Rds ON ต่ำจะทำ

ในปัจจุบัน ESP ไม่มีความสามารถของ OTA แต่สำหรับการปรับปรุงในอนาคต

ซอร์สโค้ด smart-door-sensor

ขั้นตอนที่ 2: การทำงานของวงจร

ATTiny เวิร์กโฟลว์

ความมหัศจรรย์เกิดขึ้นจากการที่ ATTiny ตรวจสอบตำแหน่งของสวิตช์ประตู

ตัวเลือกปกติคือติดตัวต้านทานแบบดึงขึ้นกับสวิตช์และตรวจสอบสถานะต่อไป สิ่งนี้มีข้อเสียของกระแสคงที่ที่ใช้โดยตัวต้านทานแบบดึงขึ้น วิธีหลีกเลี่ยงสิ่งนี้คือฉันใช้หมุดสองตัวเพื่อตรวจสอบสวิตช์แทนที่จะเป็นตัวเดียว ฉันได้ใช้ PB3 & PB4 ที่นี่ PB3 ถูกกำหนดเป็นอินพุตและ PB4 เป็นเอาต์พุตที่มี INPUT_PULLUP ภายในบน PB3 โดยปกติ PB4 จะอยู่ในระดับสูงเมื่อ ATtiny อยู่ในโหมดสลีป เพื่อให้แน่ใจว่าไม่มีกระแสไหลผ่านอินพุตดึงตัวต้านทานโดยไม่คำนึงถึงตำแหน่งของสวิตช์กก เช่น. หากปิดสวิตช์ ทั้ง PB3 และ PB4 จะสูง ดังนั้นจึงไม่มีกระแสไหลระหว่างกัน หากสวิตช์เปิดอยู่ แสดงว่าไม่มีเส้นทางระหว่างสวิตช์ ดังนั้นกระแสจึงเป็นศูนย์ เมื่อ ATtiny ตื่นขึ้น มันจะเขียน LOW บน PB4 จากนั้นตรวจสอบสถานะของ PB3 หาก PB3 สูง สวิตช์กกจะเปิด มิฉะนั้นจะปิด จากนั้นเขียนกลับค่า HIGH บน PB4

การสื่อสารระหว่าง ATtiny & ESP เกิดขึ้นผ่านสองพิน PB1 / PB2 ที่เชื่อมต่อกับ Tx/RX ของ ESP ฉันได้กำหนดสัญญาณเป็น

PB1 PB2 ====== Tx Rx

0 0 ====== WAKE_UP (ตรวจสุขภาพ)

0 1 ====== SENSOR_OPEN

1 0 ====== SENSOR_CLOSED

1 1 ====== ไม่ได้ใช้

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

จากนั้นจะเชื่อมต่อกับ WiFi, MQTT โพสต์ข้อความและปิดตัวเองโดยเขียน LOW บน GPIO0

ESP 01 ขั้นตอนการทำงาน:

ESP ไหลตรงไปข้างหน้า โดยจะปลุกและอ่านค่าของหมุด Tx/Rx เพื่อกำหนดประเภทของข้อความที่จะโพสต์ เชื่อมต่อกับ WiFi และ MQTT โพสต์ข้อความและปิดตัวเอง

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

ขั้นตอนที่ 3: ตรวจสุขภาพ

ฉันยังต้องการวิธีให้ข้อความตรวจสุขภาพจาก ESP ซึ่งส่งระดับแบตเตอรี่ของ ESP ด้วยเพื่อให้แน่ใจว่าเซ็นเซอร์ทำงานได้ดีโดยไม่ต้องตรวจสอบด้วยตนเอง สำหรับสิ่งนี้ ATTiny จะส่งสัญญาณ WAKE_UP ทุก 12 ชั่วโมง สามารถกำหนดค่าผ่านตัวแปร WAKEUP_COUNT ในรหัส ATtiny วิธีนี้มีประโยชน์มากสำหรับประตูหรือหน้าต่างที่ไม่ค่อยได้เปิด คุณจึงอาจไม่ทราบว่ามีสิ่งใดผิดปกติกับเซ็นเซอร์หรือแบตเตอรี่ของเซ็นเซอร์หรือไม่

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

ขั้นตอนที่ 4: การวัดพลังงานและอายุการใช้งานแบตเตอรี่

ฉันได้วัดการใช้กระแสไฟของวงจรแล้วและใช้เวลาประมาณ 30uA เมื่อนอนหลับและรอบๆ ตามแผ่นข้อมูลของ ATTiny ควรอยู่ที่ประมาณ 1-4 uA สำหรับวงจรทั้งหมดรวมถึงกระแสไฟนิ่งของ LDO แต่จากนั้นการวัดของฉันจะแสดง 30 MOSFET และ LDO ใช้กระแสไฟที่ไม่มีนัยสำคัญ

ดังนั้นแบตเตอรี่ขนาด 800 mAh ควรมีอายุการใช้งานยาวนาน ฉันไม่มีสถิติที่แน่นอน แต่ฉันใช้มันกับประตู 2 ประตูของฉันมานานกว่าหนึ่งปีแล้วและเซลล์ 18650 แต่ละเซลล์ที่มี 800mAH เหลืออยู่ในนั้นใช้เวลาประมาณ 5-6 เดือนที่ประตูหลักของฉันซึ่งเปิดและปิดที่ อย่างน้อย 30 ครั้งต่อวัน ประตูบนหลังคาซึ่งเปิดไม่กี่ครั้งในหนึ่งสัปดาห์ อยู่ได้ 7-8 เดือน

ขั้นตอนที่ 5: การปรับปรุงในอนาคต

1. ESP ไม่รับทราบการส่งข้อความ MQTT สามารถปรับปรุงโปรแกรมได้โดยสมัครรับหัวข้อที่เผยแพร่ข้อความเพื่อยืนยันการส่ง หรือสามารถใช้ไลบรารี Async MQTT เพื่อโพสต์ข้อความด้วย QoS 1

2. การอัปเดต OTA: คุณสามารถแก้ไขรหัส ESP เพื่ออ่านหัวข้อ MQTT สำหรับการอัปเดตได้ ดังนั้นให้เข้าสู่โหมด OTA เพื่อรับไฟล์

3. ESP01 สามารถแทนที่ด้วย ESP-12 เพื่อเข้าถึง PIN อินพุตเพิ่มเติม และสามารถแนบเซ็นเซอร์เพิ่มเติมเข้ากับชุดเดียวกันได้ ในกรณีนั้นจะไม่สามารถสื่อสารผ่านวิธี 2 บิตได้ สิ่งนี้สามารถปรับปรุงเพื่อใช้การสื่อสาร I2C ระหว่าง ATtiny & ESP สิ่งนี้ค่อนข้างซับซ้อน แต่ใช้งานได้ ฉันให้มันทำงานในการตั้งค่าอื่นที่ ATTiny ส่งค่าตัวเข้ารหัสแบบหมุนไปยัง ESP ผ่านสาย I2C

4. วงจรปัจจุบันจะตรวจสอบ Vcc ภายในของ ESP หากเราใช้ ESP12 สิ่งนี้สามารถปรับเปลี่ยนเพื่ออ่านระดับแบตเตอรี่จริงผ่านพิน ADC

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

6. และรายการดำเนินต่อไป…

7. การป้องกันแบตเตอรี่ย้อนกลับ - เสร็จสิ้น (ภาพอุปกรณ์จริงเป็นภาพเก่าและไม่สะท้อน MOSFET)

แนะนำ: