สารบัญ:

NexArdu: การควบคุมอัจฉริยะของการส่องสว่าง: 5 ขั้นตอน
NexArdu: การควบคุมอัจฉริยะของการส่องสว่าง: 5 ขั้นตอน

วีดีโอ: NexArdu: การควบคุมอัจฉริยะของการส่องสว่าง: 5 ขั้นตอน

วีดีโอ: NexArdu: การควบคุมอัจฉริยะของการส่องสว่าง: 5 ขั้นตอน
วีดีโอ: Séance ordinaire - 5 juillet 2021 2024, พฤศจิกายน
Anonim
NexArdu: ระบบควบคุมไฟส่องสว่างอัจฉริยะ
NexArdu: ระบบควบคุมไฟส่องสว่างอัจฉริยะ

อัปเดต

หากได้พัฒนาฟังก์ชันการทำงานแบบเดียวกันโดยใช้ Home Assistant Home Assistant นำเสนอความเป็นไปได้มากมาย คุณสามารถค้นหาการพัฒนาได้ที่นี่

ภาพร่างเพื่อควบคุมไฟส่องสว่างภายในบ้านอย่างชาญฉลาดผ่านอุปกรณ์ที่คล้าย X10 ไร้สาย 433.92MHz (หรือ 433MHz) เช่น เน็กซ่า

พื้นหลัง

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

วัตถุประสงค์

คำแนะนำนี้ใช้ประโยชน์จากความเป็นไปได้ของอุปกรณ์ควบคุมแบบไร้สายเช่น System Nexa ที่ทำงานบนความถี่ 433.92MHz ในที่นี้เราจะนำเสนอ:

  1. ระบบควบคุมแสงสว่างอัตโนมัติ
  2. การควบคุมเว็บ

การควบคุมเว็บ เว็บเซิร์ฟเวอร์ภายในและภายนอก

เซิร์ฟเวอร์ภายในใช้ประโยชน์จากความเป็นไปได้ของ Arduino Ethernet shield เพื่อจัดหาเว็บเซิร์ฟเวอร์ เว็บเซิร์ฟเวอร์จะเข้าร่วมการโทรของเว็บไคลเอ็นต์เพื่อตรวจสอบและโต้ตอบกับ Arduino นี่เป็นโซลูชันที่ตรงไปตรงมาพร้อมฟังก์ชันการทำงานที่จำกัด ความเป็นไปได้ในการปรับปรุงโค้ดเว็บเซิร์ฟเวอร์นั้นถูกจำกัดโดยหน่วยความจำของ Arduino เซิร์ฟเวอร์ภายนอกต้องการการตั้งค่าเว็บเซิร์ฟเวอร์ PHP ภายนอก การตั้งค่านี้ซับซ้อนกว่าและไม่รองรับในบทช่วยสอนนี้ อย่างไรก็ตาม โค้ด/หน้า PHP สำหรับตรวจสอบและควบคุม Arduino มีฟังก์ชันพื้นฐานมาให้ ความเป็นไปได้ในการปรับปรุงเว็บเซิร์ฟเวอร์ ในกรณีนี้ ถูกจำกัดโดยเว็บเซิร์ฟเวอร์ภายนอก

บิลวัสดุ

เพื่อใช้ประโยชน์อย่างเต็มที่จากความเป็นไปได้ที่ร่างนี้มอบให้ คุณต้อง:

  1. Arduino Uno (ทดสอบบน R3)
  2. ชิลด์อีเธอร์เน็ต Arduino
  3. ชุด Nexa หรือการทำงานที่คล้ายกันที่ 433.92MHz
  4. เซ็นเซอร์ PIR (Passive InfraRed) ทำงานที่ 433.92MHz
  5. ตัวต้านทาน 10KOhms
  6. LDR
  7. RTC DS3231 (รุ่นเซิร์ฟเวอร์ภายนอกเท่านั้น)
  8. เครื่องส่งสัญญาณ 433.92MHz: XY-FST
  9. เครื่องรับ 433.92MHz: MX-JS-05V

ขั้นต่ำที่แนะนำคือ:

  1. Arduino Uno (ทดสอบบน R3)
  2. ชุด Nexa หรือการทำงานที่คล้ายกันที่ 433.92MHz
  3. ตัวต้านทาน 10KOhms
  4. LDR
  5. เครื่องส่งสัญญาณ 433.92MHz: XY-FST

(การละเว้นอีเธอร์เน็ตชิลด์ต้องมีการดัดแปลงร่างที่ไม่ได้ระบุไว้ในคำแนะนำนี้)

เน็กซ่า ลอจิก คำอธิบายสั้น ๆ

เครื่องรับ Nexa จะเรียนรู้รหัสการควบคุมระยะไกลและรหัสปุ่ม กล่าวอีกนัยหนึ่ง รีโมททุกตัวมีหมายเลขผู้ส่ง และปุ่มเปิด/ปิดแต่ละคู่มีรหัสปุ่ม ผู้รับต้องเรียนรู้รหัสเหล่านั้น เอกสาร Nexa บางฉบับระบุว่าเครื่องรับสามารถจับคู่กับรีโมทได้ถึงหกตัว พารามิเตอร์ Nexa:

  • SenderID: ID ของรีโมทคอนโทรล
  • ButtonID: หมายเลขคู่ปุ่ม (เปิด/ปิด) ขึ้นต้นด้วยเลข0
  • กลุ่ม: ใช่/ไม่ใช่ (หรือที่เรียกว่าปุ่ม "ปิด/เปิดทั้งหมด")
  • คำสั่ง: เปิด/ปิด

ขั้นตอนที่แนะนำได้ บันทึก

ขั้นตอนต่างๆ ที่อธิบายไว้ในที่นี้คือการนำเสนอสองรสชาติที่แตกต่างกันในการบรรลุวัตถุประสงค์ รู้สึกอิสระที่จะเลือกสิ่งที่คุณต้องการ นี่คือดัชนี:

ขั้นตอนที่ #1: วงจร

ขั้นตอนที่ #2: Nexardu พร้อมเว็บเซิร์ฟเวอร์ภายใน (มี NTP)

ขั้นตอนที่ #3: Nexardu พร้อมเซิร์ฟเวอร์ภายนอก

ขั้นตอนที่ #4: ข้อมูลที่มีค่า

ขั้นตอนที่ 1: วงจร…

เดอะเซอร์กิต…
เดอะเซอร์กิต…

ลวดส่วนประกอบที่หลากหลายตามที่แสดงในภาพ

Arduino pin #8 ถึง Data pin บน RX (receiver) moduleArduino pin #2 ไปยัง Data pin บน RX (receiver) moduleArduino pin #7 ไปยัง Data pin บน TX (ผู้ส่ง) moduleArduino pin A0 ถึง LDR

การกำหนดค่า RTC จำเป็นเฉพาะในการกำหนดค่าเซิร์ฟเวอร์ภายนอกเท่านั้น พิน Arduino A4 ถึงพิน SDA บนโมดูล RTCArduino พิน A5 ถึงพิน SCL บนโมดูล RTC

ขั้นตอนที่ 2: Nexardu พร้อมเว็บเซิร์ฟเวอร์ภายใน (มี NTP)

ห้องสมุด

รหัสนี้ใช้ไลบรารีจำนวนมาก ส่วนใหญ่สามารถพบได้ผ่าน "Library Manager" ของ Arduino IDE คุณไม่ควรหาห้องสมุดที่อยู่ในรายการ กรุณา google

Wire.hSPI.h - ต้องใช้โดย Ethernet shieldNexaCtrl.h - ตัวควบคุมอุปกรณ์ Nexa Ethernet.h - เพื่อเปิดใช้งานและนำเสนอ Ethernet shieldRCSwitch.h - จำเป็นสำหรับ PIRTime.h - จำเป็นสำหรับ RTCTimeAlarms.h - การจัดการการแจ้งเตือนเวลาEthernetUdp.h - จำเป็นสำหรับ ลูกค้า NTP

The Sketch

โค้ดด้านล่างใช้ประโยชน์จากความเป็นไปได้ของการใช้บอร์ด Arduino UNO ไม่เพียงแต่เป็นสื่อกลางในการควบคุมอุปกรณ์ Nexa แต่ยังมีเว็บเซิร์ฟเวอร์ภายในอีกด้วย ข้อสังเกตเพิ่มเติมคือ โมดูล RTC (Real Time Clock) จะได้รับการปรับโดยอัตโนมัติผ่าน NTP (Network Time Protocol)

ก่อนที่คุณจะอัปโหลดโค้ดไปยัง Arduino คุณอาจต้องกำหนดค่าต่อไปนี้:

  • SenderId: คุณต้องดมกลิ่น SenderId ก่อน ดูด้านล่าง
  • PIR_id: คุณต้องดมกลิ่น SenderId ก่อน ดูด้านล่าง
  • ที่อยู่ IP ของ LAN: ตั้งค่า IP ของ LAN ของคุณเป็นอีเธอร์เน็ต Arduino shield ของคุณ ค่าเริ่มต้น: 192.168.1.99
  • เซิร์ฟเวอร์ NTP: ไม่จำเป็นอย่างยิ่ง แต่อาจเป็นการดีสำหรับ Google สำหรับเซิร์ฟเวอร์ NTP ในบริเวณใกล้เคียงของคุณ ค่าเริ่มต้น: 79.136.86.176
  • รหัสถูกปรับสำหรับเขตเวลา CET ปรับค่านี้ - หากจำเป็น ในเขตเวลาของคุณเพื่อแสดงเวลาที่ถูกต้อง (NTP)

ดมกลิ่นรหัส Nexa

สำหรับสิ่งนี้คุณต้องต่อสาย -อย่างน้อยส่วนประกอบ RX กับ Arduino ตามที่แสดงในวงจร

ค้นหาด้านล่างของภาพร่าง Nexa_OK_3_RX.ino ที่เข้ากันได้กับอุปกรณ์ Nexa NEYCT-705 และ PET-910 ในขณะที่เขียน

ขั้นตอนที่ต้องปฏิบัติตามคือ:

  1. จับคู่เครื่องรับ Nexa กับรีโมทคอนโทรล
  2. โหลด Nexa_OK_3_RX.ino ลงใน Arduino แล้วเปิด "Serial Monitor"
  3. กดปุ่มรีโมทคอนโทรลที่ควบคุมเครื่องรับ Nexa
  4. จด "RemoteID" และ "ButtonID"
  5. ตั้งค่าตัวเลขเหล่านี้ภายใต้ SenderID และ ButtonID บนการประกาศตัวแปรของแบบร่างก่อนหน้า

หากต้องการอ่าน Id ของ PIR ให้ใช้แบบร่างเดียวกันนี้ (Nexa_OK_3_RX.ino) และอ่านค่าบน "Serial Monitor" เมื่อ PIR ตรวจพบการเคลื่อนไหว

ขั้นตอนที่ 3: Nexardu พร้อมเซิร์ฟเวอร์ภายนอก

ห้องสมุด

รหัสนี้ใช้ไลบรารีจำนวนมาก ส่วนใหญ่สามารถพบได้ผ่าน "Library Manager" ของ Arduino IDE หากคุณไม่พบห้องสมุดที่อยู่ในรายการ โปรด google

Wire.hRTClib.h - นี่คือไลบรารีจาก https://github.com/MrAlvin/RTClibSPI.h - ต้องใช้โดย Ethernet shieldNexaCtrl.h - ตัวควบคุมอุปกรณ์ NexaEthernet.h - เพื่อเปิดใช้งานและนำเสนอ Ethernet shieldRCSwitch.h - จำเป็นสำหรับ PIRTime.h - จำเป็นสำหรับ RTCTimeAlarms.h - การจัดการการเตือนเวลาaREST.h - สำหรับบริการ RESTful API ที่ใช้ประโยชน์โดยเซิร์ฟเวอร์ภายนอก/wdt.h - การจัดการตัวจับเวลา Watchdog

The Sketch

ภาพสเก็ตช์ด้านล่างมีคุณลักษณะอื่นที่เหมือนกัน คราวนี้เพิ่มขีดความสามารถที่เป็นไปได้ที่เว็บเซิร์ฟเวอร์ภายนอกสามารถให้ได้ ดังที่ได้กล่าวไปแล้วในบทนำ เซิร์ฟเวอร์ภายนอกต้องมีการตั้งค่าเว็บเซิร์ฟเวอร์ PHP ภายนอก การตั้งค่านี้ซับซ้อนกว่าและไม่รองรับในบทช่วยสอนนี้ อย่างไรก็ตาม โค้ด/หน้า PHP สำหรับตรวจสอบและควบคุม Arduino มีฟังก์ชันพื้นฐานมาให้

ก่อนที่คุณจะอัปโหลดโค้ดไปยัง Arduino คุณอาจต้องกำหนดค่าต่อไปนี้:

  • SenderId: คุณต้องดมกลิ่น SenderId ก่อน โปรดดูที่ การดมกลิ่นรหัส Nexa ในขั้นตอนก่อนหน้า
  • PIR_id: คุณต้องดมกลิ่น SenderId ก่อน โปรดดูการดมกลิ่นรหัส Nexa ในขั้นตอนก่อนหน้า
  • ที่อยู่ IP ของ LAN: ตั้งค่า IP ของ LAN ของคุณเป็นอีเธอร์เน็ต Arduino shield ของคุณ ค่าเริ่มต้น: 192.168.1.99

สำหรับขั้นตอนการดมกลิ่นโค้ด Nexa โปรดดูขั้นตอนที่ #1

ไฟล์เสริม

อัปโหลดไฟล์ nexardu4.txt ที่แนบมากับเซิร์ฟเวอร์ PHP ภายนอกของคุณและเปลี่ยนชื่อเป็น nexardu4.php

ตั้งเวลา RTC

ในการตั้งเวลา/วันที่บน RTC ฉันใช้ Sketch SetTime ที่รวมไลบรารี DS1307RTC

ขั้นตอนที่ 4: ข้อมูลที่มีค่า

ข้อมูลที่มีค่า
ข้อมูลที่มีค่า
ข้อมูลที่มีค่า
ข้อมูลที่มีค่า

น่ารู้พฤติกรรม

  1. เมื่อ Arduino อยู่ภายใต้ "การควบคุมแสงอัตโนมัติ" มันสามารถผ่านสี่สถานะที่แตกต่างกันซึ่งสัมพันธ์กับแสงโดยรอบและช่วงเวลาของวัน:

    1. ตื่นตระหนก: Arduino รอคอยค่ำคืนที่จะมาถึง
    2. Active: ค่ำคืนมาถึงแล้ว Arduino ได้เปิดไฟแล้ว
    3. ง่วงนอน: ไฟเปิดอยู่ แต่ถึงเวลาปิดแล้ว มันเริ่มต้นที่ "time_to_turn_off - PIR_time" นั่นคือถ้า time_to_turn_off ถูกตั้งค่าเป็น 22:30 และ PIR_time ตั้งไว้ที่ 20 นาที Arduino จะเข้าสู่สถานะง่วงนอนเวลา 22:10 น.
    4. อยู่เฉยๆ: กลางคืนผ่านไป Arduino ได้ปิดไฟและ Arduino รอให้รุ่งสางตื่นขึ้น
  2. Arduino คอยฟังสัญญาณที่ส่งโดยรีโมทคอนโทรลอยู่เสมอ คุณสมบัตินี้แสดงสถานะของไฟ (เปิด/ปิด) บนเว็บได้เมื่อใช้รีโมทคอนโทรล
  3. ในขณะที่ Arduino ตื่นตัวมันพยายามที่จะปิดไฟตลอดเวลา ดังนั้นสัญญาณ ON ที่ส่งโดยตัวควบคุม remonte เพื่อเปิดไฟอาจถูกจับโดย Arduino หากสิ่งนี้เกิดขึ้น Arduino จะพยายามปิดไฟอีกครั้ง
  4. ในขณะที่ Arduino ทำงานอยู่ จะพยายามเปิดไฟตลอดเวลา ดังนั้น สัญญาณ OFF ที่ส่งโดยรีโมทคอนโทรลเพื่อปิดไฟอาจถูกจับโดย Arduino หากสิ่งนี้เกิดขึ้น Arduino จะพยายามเปิดไฟอีกครั้ง
  5. ในสภาวะที่หลับใหล สามารถเปิด/ปิดไฟได้ด้วยรีโมทคอนโทรล Arduino จะไม่ตอบโต้
  6. ในสถานะที่ง่วงนอน การนับถอยหลังของ PIR จะเริ่มรีเซ็ตจาก "time_to_turn_off - PIR_time" ดังนั้น time_to_turn_off จะถูกขยายออกไป 20 นาทีทุกครั้งที่ PIR ตรวจพบการเคลื่อนไหว A "ตรวจพบสัญญาณ PIR!" ข้อความจะแสดงบนเว็บเบราว์เซอร์เมื่อสิ่งนี้เกิดขึ้น
  7. ในขณะที่ Arduino อยู่นิ่งไฟสามารถเปิดและปิดผ่านรีโมทคอนโทรล Arduino จะไม่ตอบโต้
  8. การรีเซ็ตหรือวงจรพลังงานของ Arduino จะทำให้เข้าสู่โหมดแอคทีฟ ซึ่งหมายความว่าหาก Arduino ถูกรีเซ็ตหลังจาก time_turn_off แล้ว Arduino จะเปิดไฟ เพื่อหลีกเลี่ยงปัญหานี้ Arduino จะต้องถูกนำเข้าสู่โหมดแมนนวล (ทำเครื่องหมายที่ "Light Automatic Control") และรอจนถึงเช้าเพื่อกลับไปที่ "Light Automatic Control"
  9. ดังที่กล่าวไว้ข้างต้น Arduino รอให้รุ่งสางกลับมาใช้งานได้อีกครั้ง ด้วยเหตุนี้ ระบบอาจหลงกลได้โดยการนำแสงที่แรงเพียงพอไปทางเซ็นเซอร์แสงซึ่งเกินเกณฑ์ "ความส่องสว่างขั้นต่ำ" หากสิ่งนี้เกิดขึ้น Arduino จะต้องเปลี่ยนเป็นสถานะใช้งาน
  10. ค่าความคลาดเคลื่อนมีความสำคัญสูงเพื่อหลีกเลี่ยงไม่ให้ระบบเปิดและปิดรอบค่าเกณฑ์ขั้นต่ำความส่องสว่าง ไฟ LED เนื่องจากการกะพริบและการตอบสนองที่สูง อาจเป็นสาเหตุของพฤติกรรมการกระพือปีกได้ เพิ่มค่าความคลาดเคลื่อนถ้าคุณประสบปัญหานี้ ฉันใช้ค่า 7

เรื่องน่ารู้เกี่ยวกับโค้ด

  1. อย่างที่คุณสังเกตได้ โค้ดมีขนาดใหญ่มากและใช้ไลบรารีจำนวนมาก ซึ่งจะทำให้จำนวนหน่วยความจำว่างที่จำเป็นสำหรับฮีปลดลง ฉันสังเกตเห็นพฤติกรรมที่ไม่เสถียรในอดีตที่ทำให้ระบบหยุดทำงาน โดยเฉพาะหลังจากโทรผ่านเว็บ ดังนั้น ความท้าทายที่ใหญ่ที่สุดที่ฉันมีคือการจำกัดขนาดและการใช้ตัวแปรที่หลากหลายเพื่อทำให้ระบบมีเสถียรภาพ
  2. รหัสที่หาประโยชน์จากเซิร์ฟเวอร์ภายในที่ฉันใช้ที่บ้าน ได้เริ่มทำงานแล้วตั้งแต่เดือนกุมภาพันธ์ 2016 โดยไม่มีปัญหา
  3. ฉันได้ใช้ความพยายามอย่างมากในการทำให้โค้ดสมบูรณ์พร้อมคำอธิบาย ใช้ประโยชน์จากสิ่งนี้เพื่อเล่นกับพารามิเตอร์ที่หลากหลาย เช่น จำนวนการส่งโค้ด Nexa ต่อการระเบิด เวลาซิงค์ NTP เป็นต้น
  4. รหัสนี้ไม่มีการปรับเวลาตามฤดูกาล จำเป็นต้องปรับเปลี่ยนผ่านเว็บเบราว์เซอร์เมื่อนำมาใช้

ข้อควรพิจารณาบางประการ

  1. เพิ่มเสาอากาศไปยังโมดูลความถี่วิทยุ TX และ RX จะช่วยคุณประหยัดเวลาในการบ่นเกี่ยวกับประเด็นหลักสองประการ: ความยืดหยุ่นและช่วงของสัญญาณ RF ฉันใช้ลวด 50Ohms ยาว 17.28 ซม. (6.80 นิ้ว)
  2. คำสั่งสอนนี้อาจทำงานร่วมกับระบบอัตโนมัติภายในบ้านอื่นๆ เช่น Proove เป็นต้น หนึ่งในหลายๆ เงื่อนไขที่ต้องปฏิบัติตามคือให้ทำงานบนความถี่ 433.92MHz
  3. ปัญหาใหญ่ของ Arduino คือการจัดการกับไลบรารี่ที่อาจได้รับการอัปเดตอยู่ตลอดเวลา และจู่ๆ ก็ไม่สามารถกลับไปใช้งานได้กับภาพสเก็ตช์ "เก่า" ของคุณ ปัญหาเดียวกันอาจเกิดขึ้นเมื่ออัพเกรด Arduino IDE ของคุณ ระวังว่านี่อาจเป็นกรณีของเราที่นี่ - ใช่ ปัญหาของฉันด้วย
  4. เว็บไคลเอ็นต์พร้อมกันหลายตัวที่มีโหมดแสงต่างกันจะสร้างสถานะ "กะพริบ"

ภาพหน้าจอ

ในภาพหมุนด้านบน คุณจะพบภาพหน้าจอของหน้าเว็บที่แสดงเมื่อคุณเรียกใช้ Arduino ผ่านเว็บเบราว์เซอร์ของคุณ จากการกำหนดค่า IP เริ่มต้นของรหัส URL จะเป็น

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

เอกสารรายละเอียด/ขั้นสูง

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

Arduino_NexaControl_IS.pdf มีเอกสารเกี่ยวกับโซลูชันเซิร์ฟเวอร์ภายใน

Arduino_NexaControl_ES.pdf มีเอกสารเกี่ยวกับโซลูชันเซิร์ฟเวอร์ภายนอก

ข้อมูลอ้างอิงภายนอก

ระบบ Nexa (สวีเดน)

ขั้นตอนที่ 5: เสร็จแล้ว

ที่เสร็จเรียบร้อย!
ที่เสร็จเรียบร้อย!

คุณทำทุกอย่างเสร็จแล้ว!

กรณี Arduino Uno สามารถพบได้ใน Thingiverse เป็น "Arduino Uno Rev3 พร้อม Ethernet Shield XL-case"

แนะนำ: