สารบัญ:

การควบคุมหัวเตียงแบบไร้สาย MQTT: 5 ขั้นตอน (พร้อมรูปภาพ)
การควบคุมหัวเตียงแบบไร้สาย MQTT: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การควบคุมหัวเตียงแบบไร้สาย MQTT: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การควบคุมหัวเตียงแบบไร้สาย MQTT: 5 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Home Assistant 2023 (EP.5) DIY อุปกรณ์ IoT ด้วย Tasmota พร้อมติดตั้ง MQTT Broker 2024, กรกฎาคม
Anonim
การควบคุมหัวเตียงแบบไร้สาย MQTT
การควบคุมหัวเตียงแบบไร้สาย MQTT
การควบคุมหัวเตียงแบบไร้สาย MQTT
การควบคุมหัวเตียงแบบไร้สาย MQTT

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

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

คุณจะได้รับสิ่งที่คุณจ่าย

หลังจากผ่านไปประมาณ 6 เดือน เราสังเกตเห็นว่าปลอกคอระบายความเครียดบนตัวควบคุมตัวใดตัวหนึ่งเริ่มฉีกขาด ไม่กี่เดือนต่อมา - สายเปลือย กรอไปข้างหน้าอย่างรวดเร็วประมาณหนึ่งปี ตัวควบคุมตัวใดตัวหนึ่งใช้งานไม่ได้อีกต่อไปและอีกตัวหนึ่งเริ่มกระตุกเล็กน้อย

อีกครั้งไม่มีใครสนใจขายอะไหล่ให้เรา แล้วมันก็โดนฉัน!

เดี๋ยวก่อน! ฉันกำลังสร้างระบบอัตโนมัติในบ้านและระบบควบคุมอยู่ไม่ใช่เหรอ!?

ขั้นตอนที่ 1: การค้นพบ

การค้นพบ
การค้นพบ
การค้นพบ
การค้นพบ

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

ในกล่องมีหน้าสัมผัสสำหรับสายสัญญาณอีก 4 เส้นและปุ่มอีก 4 ปุ่ม ฉันเดาได้ดีที่สุดว่าบอร์ดควบคุมนี้ถูกใช้ในโมเดลฐานแบบมีสายทั้งหมดของพวกเขา และพวกเขาเพียงแค่วางเพลตหน้าแบบต่างๆ ไว้บนบอร์ดตามต้องการ ดังนั้นฉันจึงมีทฤษฎีการทำงาน ฉันทดสอบสายอุปทานเพื่อดูว่าจุ่มระหว่างการใช้งานหรือมีการกระตุกเมื่อใดก็ได้ - ไม่ มีกระแสไฟฟ้าไหลผ่านสายสัญญาณน้อยมาก แต่ต้องใช้ 12 โวลต์เพื่อเปิดใช้งานมอเตอร์

ขั้นตอนที่ 2: ออกแบบ

ออกแบบ
ออกแบบ
ออกแบบ
ออกแบบ
ออกแบบ
ออกแบบ
ออกแบบ
ออกแบบ

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

เตียงจะเป็นแหล่งจ่ายไฟสำหรับคอนโทรลเลอร์ และเพื่อจัดการกับ 12 โวลต์ที่ให้มา เราจำเป็นต้องมีตัวแปลงบั๊กแบบแปรผัน มีการเชื่อมโยงราคาถูกมากด้านล่างและใช้งานได้ดี สาย 12V และสาย GND เชื่อมต่อกับด้านอินพุทของคอนเวอร์เตอร์ และด้านที่มีการควบคุม 5 โวลต์เชื่อมต่อกับ VCC ของ NodeMCU และพิน VCC บนโมดูลรีเลย์ กราวด์ (-) บนคอนเวอร์เตอร์เชื่อมต่อกับพิน GND บน ทั้งโมดูลรีเลย์และ NodeMCU

NodeMCU เชื่อมต่อกับ IN1 โดยใช้ D1 (GPIO5) และ IN2 โดยใช้ D2 (GPIO4) สายสัญญาณขึ้นบนเตียงเชื่อมต่อกับขั้วต่อสกรูแบบเปิดตามปกติสำหรับรีเลย์ 1 และสายสัญญาณลงเชื่อมต่อกับขั้วต่อแผงขั้วต่อแบบเปิดตามปกติของรีเลย์ 2 คุณจะต้องเชื่อมต่อสาย 12v ที่เชื่อมต่อกับด้านอินพุตของตัวแปลงบั๊กกับขั้วต่อเทอร์มินัลบล็อกอื่นสำหรับรีเลย์ทั้ง 1 และ 2

อะไหล่

  • 1 - NodeMCU
  • 1 - โมดูล Duel Relay พร้อมการแยกกระแส
  • 1 - ตัวแปลงบัคอินพุท/เอาท์พุตตัวแปร
  • 1 - เขียงหั่นขนม PCB
  • ลวดแกนทองแดงควั่น 22 เกจ
  • 2 - M3x 8 สกรู

ขั้นตอนที่ 3: สิ่งที่ส่งมาด้วย

สิ่งที่ส่งมาด้วย
สิ่งที่ส่งมาด้วย

ตู้สามารถพบได้ที่นี่:

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

ฉันใช้กาวร้อนยึดแผ่นกระดานให้เข้าที่ แต่อาจไม่จำเป็น

ขั้นตอนที่ 4: รหัส

รหัสสามารถพบได้ที่นี่:

หมายเหตุ: โปรเจ็กต์นี้ใช้ไลบรารี pubsubclient ซึ่งสามารถเพิ่มใน Library Manager ใน Arduino IDE

โค้ดที่นี่ค่อนข้างเรียบง่ายและได้รับการออกแบบตามประเภท Cover MQTT ใน Home Assistant แนวคิดนี้ง่าย: เมื่อคุณกดปุ่มขึ้นหรือลงในผู้ช่วยในบ้าน รีเลย์ที่เหมาะสมจะปิดลงจนกว่าจะได้รับคำสั่งหยุด หรือระบบจะถึงเวลาเปิดใช้งานสูงสุดและหยุดทำงาน

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

ในรหัสของฉัน ระยะหมดเวลานี้คือ 20 วินาทีและสามารถปรับได้ในบล็อกตัวแปรส่วนกลางที่ด้านบนของรหัส

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

นอกจากนั้น เตียงยังเผยแพร่ว่ามีให้บริการทุก 60 วินาทีเท่านั้น ไม่มีระฆังหรือนกหวีดที่นี่ เนื่องจากเตียงไม่มีการตอบสนองตำแหน่ง ฉันจึงส่งกลับไปให้ Home Assistant ไม่ได้

ขั้นตอนที่ 5: ตัวอย่างการรวม

การรวมตัวอย่าง
การรวมตัวอย่าง
การรวมตัวอย่าง
การรวมตัวอย่าง

รหัสที่ฉันเขียนใช้ MQTT เพื่อสื่อสารผ่าน WiFi ดังนั้นจึงสามารถสื่อสารกับฮับหรืออุปกรณ์อัตโนมัติใดๆ ที่ใช้ MQTT ฉันใช้ Home Assistant ที่มีโบรกเกอร์ MQTT ในตัว ด้านล่างนี้คือตัวอย่างการกำหนดค่า HA ของฉัน

ใน HA ฉันมีไฟล์ cover.yaml พร้อมคำจำกัดความต่อไปนี้:

- แพลตฟอร์ม: mqtt

ชื่อ: "Master Bed Headboard" command_topic: "master_bed_control/cmd" availability_topic: "master_bed_control/availability" qos: 0 รักษา: false payload_open: "UP" payload_close: "DOWN" payload_stop: "STOP" payload_available: "online" payload_not_available: " ออฟไลน์" มองโลกในแง่ดี: จริง

สิ่งนี้ทำให้ฉันมีหนึ่งรายการในอินเทอร์เฟซ HA ของฉันด้วยปุ่มขึ้น/หยุด/ลงที่ตั้งค่าด้วยการดำเนินการตามที่อธิบายไว้ข้างต้น

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

- แพลตฟอร์ม: mqtt

state_topic: "bedside_cp1/button5" ชื่อ: "Bedside CP1 Button 5" ไอคอน: mdi:circle

- แพลตฟอร์ม: mqtt

state_topic: "bedside_cp1/button6" ชื่อ: "Bedside CP1 Button 6" ไอคอน: mdi:circle

… และกฎการทำงานอัตโนมัติ 4 ข้อเมื่อกดและปล่อยแต่ละปุ่ม เมื่อกด คำสั่งขึ้นหรือลงจะถูกส่งไปยังเตียงโดยขึ้นอยู่กับว่าปุ่มใดถูกเปิดใช้งาน เมื่อปล่อยปุ่ม คำสั่งหยุดจะถูกส่งไป:

- id: '1548308650383'

นามแฝง: MBR ปุ่ม CP ข้างเตียง 5a ทริกเกอร์: - entity_id: sensor.bedside_cp1_button_5 จาก: 'ปิด' แพลตฟอร์ม: สถานะเป็น: 'เปิด' เงื่อนไข: การกระทำ: - ข้อมูล: entity_id: ' cover.master_bed_headboard' บริการ: cover.open_cover - รหัส: '1548308758911' นามแฝง: ปุ่ม MBR ข้างเตียง CP ปุ่ม 5b ทริกเกอร์: - entity_id: sensor.bedside_cp1_button_5 จาก: แพลตฟอร์ม 'เปิด': สถานะเป็น: 'ปิด' เงื่อนไข: การกระทำ: - ข้อมูล: entity_id: ' บริการ cover.master_bed_headboard': cover.stop_cover - id: '1548308863495' นามแฝง: MBR Bedside CP Button 6a trigger: - entity_id: sensor.bedside_cp1_button_6 from: 'Off' platform: state to: 'On' condition: action: - data: entity_id: ' cover.master_bed_headboard' service: cover.close_cover - id: '1548308911467' alias: MBR Bedside CP Button 6b trigger: - entity_id: sensor.bedside_cp1_button_6 from: 'On' platform: state to: 'Off' condition: action: - ข้อมูล: entity_id: 'cover.master_bed_headboard' บริการ: cover.stop_cover

แนะนำ: