فهرست مطالب:

NexArdu: کنترل هوشمند روشنایی: 5 مرحله
NexArdu: کنترل هوشمند روشنایی: 5 مرحله

تصویری: NexArdu: کنترل هوشمند روشنایی: 5 مرحله

تصویری: NexArdu: کنترل هوشمند روشنایی: 5 مرحله
تصویری: با کمترین هزینه تلویزینت رو هوشمند کن - نمایش صفحه موبایل در تلویزیون 2024, جولای
Anonim
NexArdu: کنترل هوشمند روشنایی
NexArdu: کنترل هوشمند روشنایی

به روز رسانی

اگر عملکرد مشابهی را با استفاده از Home Assistant توسعه داده اید. دستیار خانگی طیف وسیعی از امکانات را ارائه می دهد. در اینجا می توانید توسعه را پیدا کنید.

طرحی برای کنترل روشنایی خانه به شیوه ای هوشمند از طریق دستگاههای بی سیم X3 مانند 433.92 مگاهرتز (433 مگاهرتز) ، به عنوان مثال. نکسا

زمینه

وقتی صحبت از روشنایی تزئینی به میان می آید ، به نوعی برای من خسته کننده بوده است که هر هفته یا سوم هفته باید تایمرهایی را که چراغ ها را روشن می کنند به دلیل تغییر ساعت خورشیدی با توجه به CET دوباره تنظیم کنم. در همان زمان ، بعضی شبها زودتر از شبهای دیگر می خوابیم. به همین دلیل ، گاهی اوقات چراغ ها "خیلی دیر" یا "خیلی زود" خاموش می شوند. موارد بالا باعث شد که من فکر کنم: من می خواهم نور تزئینی همیشه در همان سطح نور محیط روشن شود و بسته به بیدار بودن یا نبودن ما در زمان خاصی خاموش شود.

هدف، واقعگرایانه

این دستورالعمل از امکانات دستگاه های بی سیم کنترل شده مانند System Nexa که روی فرکانس 433.92 مگاهرتز کار می کنند ، استفاده می کند. در اینجا ما باید ویژگی های زیر را ارائه دهیم:

  1. کنترل روشنایی خودکار
  2. کنترل وب

کنترل وب. سرور داخلی در مقابل خارجی

سرور داخلی از امکان محافظ اترنت Arduino برای ارائه سرور وب استفاده می کند. سرور وب برای بررسی و تعامل با آردوینو در تماس های سرویس گیرنده وب شرکت می کند. این یک راه حل مستقیم با قابلیت های محدود است. امکانات افزایش کد وب سرور با حافظه Arduino محدود می شود. سرور خارجی نیاز به راه اندازی یک وب سرور PHP خارجی دارد. این تنظیمات پیچیده تر است و توسط این آموزش پشتیبانی نمی شود ، اما کد/صفحه PHP برای بررسی و هدایت آردوینو با عملکرد اولیه ارائه شده است. در این مورد ، امکانات افزایش سرور وب توسط سرور وب خارجی محدود می شود.

صورتحساب مواد

برای استفاده کامل از امکاناتی که این طرح ارائه می دهد ، به موارد زیر نیاز دارید:

  1. Arduino Uno (تست شده روی R3)
  2. یک سپر اترنت آردوینو
  3. مجموعه Nexa یا مشابه آن در 433.92 مگاهرتز کار می کند
  4. سنسور PIR (مادون قرمز منفعل) که در 433.92 مگاهرتز کار می کند
  5. یک مقاومت 10 کیلو اهم
  6. یک LDR
  7. RTC DS3231 (فقط نسخه سرور خارجی)
  8. فرستنده 433.92 مگاهرتز: XY-FST
  9. گیرنده 433.92 مگاهرتز: MX-JS-05V

حداقل توصیه شده عبارت است از:

  1. Arduino Uno (تست شده روی R3)
  2. مجموعه Nexa یا مشابه آن در 433.92 مگاهرتز کار می کند
  3. یک مقاومت 10 کیلو اهم
  4. یک LDR
  5. فرستنده 433.92 مگاهرتز: XY-FST

(حذف سپر اترنت مستلزم اصلاح طرح است که در این دستورالعمل ارائه نشده است)

منطق نکسا توضیح مختصر

گیرنده Nexa شناسه کنترل از راه دور و شناسه دکمه را می آموزد. به عبارت دیگر ، هر ریموت شماره فرستنده خود را دارد و هر جفت دکمه روشن/خاموش دارای شناسه دکمه خود است. گیرنده باید آن کدها را یاد بگیرد. برخی از اسناد Nexa بیان می کنند که گیرنده را می توان با حداکثر شش ریموت کنترل جفت کرد. پارامترهای Nexa:

  • SenderID: شناسه کنترل از راه دور
  • ButtonID: شماره جفت دکمه (روشن/خاموش). با عدد 0 شروع می شود
  • گروه: بله/خیر (معروف به دکمه های "همه خاموش/روشن")
  • فرمان: روشن/خاموش

مراحل قابل آموزش توجه داشته باشید

مراحل مختلف توضیح داده شده در اینجا این است که دو طعم مختلف در مورد چگونگی دستیابی به هدف ارائه شود. با خیال راحت یکی را به سلیقه خود انتخاب کنید. اینم ایندکس:

مرحله 1: مدار

مرحله شماره 2: Nexardu با سرور داخلی وب (شامل NTP)

مرحله 3: Nexardu با سرور خارجی

مرحله 4: اطلاعات ارزشمند

مرحله 1: مدار…

مدار…
مدار…

اجزای متنوع را همانطور که در تصویر نشان داده شده است سیم کشی کنید.

پین آردوینو#8 به پین داده در ماژول RX (گیرنده) پین آردوینو#2 به پین داده روی ماژول RX (گیرنده) پین آردوینو#7 به پین داده روی ماژول TX (فرستنده) پین آردوینو A0 تا LDR

پیکربندی RTC فقط در پیکربندی سرور خارجی مورد نیاز است. پین آردوینو A4 تا پین SDA در ماژول RTC پین آردوینو A5 تا پین SCL در ماژول RTC

مرحله 2: Nexardu با سرور وب داخلی (شامل NTP)

کتابخانه ها

این کد از کتابخانه های زیادی استفاده می کند. اکثر آنها را می توان از طریق "مدیر کتابخانه" Arduino IDE یافت. اگر کتابخانه فهرست شده ای پیدا نکردید ، لطفاً گوگل کنید.

Wire.hSPI.h - مورد نیاز توسط اترنت shieldNexaCtrl.h - کنترل کننده دستگاه Nexa Ethernet.h - برای فعالسازی و ویژگی سپر اترنت RCSwitch.h - مورد نیاز برای PIRTime.h - مورد نیاز برای RTCTimeAlarms.h - مدیریت زنگ ساعت سرویس گیرنده NTP

طرح

کد زیر از امکان استفاده از برد Arduino UNO نه تنها به عنوان وسیله ای برای کنترل دستگاههای Nexa بلکه از یک سرور داخلی داخلی نیز استفاده می کند. نکته ای که باید اضافه شود این است که ماژول RTC (ساعت واقعی) به طور خودکار از طریق NTP (پروتکل زمان شبکه) تنظیم می شود.

قبل از بارگذاری کد در Arduino ، ممکن است لازم باشد موارد زیر را پیکربندی کنید:

  • SenderId: ابتدا باید SenderId را بویید ، به زیر مراجعه کنید
  • PIR_id: ابتدا باید SenderId را بویید ، به زیر مراجعه کنید
  • آدرس IP LAN: IP شبکه LAN خود را روی سپر اترنت آردوینو تنظیم کنید. مقدار پیش فرض: 192.168.1.99
  • سرور NTP: ضروری نیست ، اما خوب است که سرورهای NTP را در نزدیکی خود جستجو کنید. مقدار پیش فرض: 79.136.86.176
  • کد برای منطقه زمانی CET تنظیم شده است. برای نمایش زمان صحیح (NTP) این مقدار را -در صورت نیاز ، در منطقه زمانی خود تنظیم کنید

بو کردن کدهای Nexa

برای انجام این کار ، حداقل قسمت RX را به آردوینو وصل کنید ، همانطور که در مدار نشان داده شده است.

در زیر طرح Nexa_OK_3_RX.ino را بیابید که در زمان نگارش آن با دستگاههای Nexa NEYCT-705 و PET-910 سازگار است.

مراحل زیر باید انجام شود:

  1. گیرنده Nexa را با کنترل از راه دور جفت کنید.
  2. Nexa_OK_3_RX.ino را روی آردوینو بارگذاری کرده و "Serial Monitor" را باز کنید.
  3. دکمه کنترل از راه دور را که گیرنده Nexa را کنترل می کند ، فشار دهید.
  4. به "RemoteID" و "ButtonID" توجه کنید.
  5. این اعداد را زیر SenderID و ButtonID در اعلان متغیر طرح قبلی تنظیم کنید.

برای خواندن شناسه PIR ، فقط از همین طرح (Nexa_OK_3_RX.ino) استفاده کنید و وقتی PIR حرکت را تشخیص می دهد ، مقدار روی "مانیتور سریال" را بخوانید.

مرحله 3: Nexardu با سرور خارجی

کتابخانه ها

این کد از کتابخانه های زیادی استفاده می کند. بسیاری از موارد را می توان از طریق "مدیر کتابخانه" Arduino IDE یافت. اگر کتابخانه فهرست شده را پیدا نکردید ، لطفاً Google را جستجو کنید.

Wire.hRTClib.h - این کتابخانه از https://github.com/MrAlvin/RTClibSPI.h - مورد نیاز توسط اترنت shieldNexaCtrl.h - کنترل کننده دستگاه Nexa Ethernet.h - برای فعال سازی و ویژگی سپر اترنت RCSwitch.h - مورد نیاز PIRTime.h - مورد نیاز برای RTCTimeAlarms.h - مدیریت زنگ زمان

طرح

طرح زیر طعم دیگری از همان را نشان می دهد ، این بار امکاناتی را که یک وب سرور خارجی می تواند ارائه دهد ، تقویت می کند. همانطور که در مقدمه ذکر شد ، سرور خارجی نیاز به راه اندازی یک وب سرور PHP خارجی دارد. این تنظیمات پیچیده تر است و توسط این آموزش پشتیبانی نمی شود ، اما کد/صفحه PHP برای بررسی و هدایت آردوینو با عملکرد اولیه ارائه شده است.

قبل از بارگذاری کد در Arduino ، ممکن است لازم باشد موارد زیر را پیکربندی کنید:

  • SenderId: ابتدا باید SenderId را بویید ، در مرحله قبل به Sniffing the Nexa codes مراجعه کنید.
  • PIR_id: ابتدا باید SenderId را بویید ، در مرحله قبل به Sniffing the Nexa codes مراجعه کنید.
  • آدرس IP LAN: IP شبکه LAN خود را روی سپر اترنت آردوینو تنظیم کنید. مقدار پیش فرض: 192.168.1.99

برای روش کشیدن کد Nexa ، لطفاً به مرحله 1 مراجعه کنید.

فایل مکمل

فایل پیوست nexardu4.txt را در سرور PHP خارجی خود بارگذاری کرده و نام آن را به nexardu4.php تغییر دهید.

زمان RTC تنظیم شده است

برای تنظیم زمان/تاریخ در RTC ، من از طرح SetTime استفاده می کنم که کتابخانه DS1307RTC را جمع آوری می کند.

مرحله 4: اطلاعات ارزشمند

اطلاعات ارزشمند
اطلاعات ارزشمند
اطلاعات ارزشمند
اطلاعات ارزشمند

خوب است رفتار را بدانید

  1. هنگامی که آردوینو تحت "کنترل خودکار نور" است ، می تواند از چهار حالت مختلف در ارتباط با روشنایی محیط و زمان روز عبور کند:

    1. بیدارانه: آردوینو منتظر شب آینده است.
    2. فعال: شب فرا رسید و آردوینو چراغ ها را روشن کرد.
    3. خاموش: چراغ ها روشن هستند اما زمان خاموش شدن آنها در راه است. در "time_to_turn_off - PIR_time" شروع می شود ، یعنی اگر time_turn_off روی 22:30 و PIR_time روی 20 دقیقه تنظیم شده باشد ، Arduino در ساعت 22:10 وارد حالت خواب آلودگی می شود.
    4. خفته: شب می گذرد ، آردوینو چراغ ها را خاموش می کند و آردوینو منتظر است تا سپیده دم بیدار شود.
  2. آردوینو همیشه به سیگنال های ارسال شده توسط کنترل از راه دور گوش می دهد. این ویژگی امکان نمایش وضعیت چراغ ها (روشن/خاموش) روی وب را هنگام استفاده از کنترل از راه دور نشان می دهد.
  3. در حالی که آردوینو بیدار است سعی می کند چراغ ها را همیشه خاموش کند ، بنابراین سیگنال های ON ارسال شده توسط کنترل از راه دور برای روشن کردن چراغ ها ممکن است توسط آردوینو ضبط شود. اگر این اتفاق بیفتد ، آردوینو دوباره سعی می کند چراغ ها را خاموش کند.
  4. در حالی که آردوینو فعال است ، سعی می کند چراغ ها را همیشه روشن کند ، بنابراین سیگنال های خاموش ارسال شده توسط کنترل از راه دور برای خاموش کردن چراغ ها ممکن است توسط آردوینو ضبط شود. اگر این اتفاق بیفتد ، آردوینو دوباره سعی می کند چراغ ها را روشن کند.
  5. در حالت خواب شبانه می توان با کنترل از راه دور چراغ ها را خاموش/روشن کرد. آردوینو خنثی نمی شود.
  6. در حالت خواب ، شمارش معکوس PIR از "time_to_turn_off - PIR_time" شروع به تنظیم مجدد می کند و به این ترتیب هر بار که PIR حرکت را تشخیص می دهد ، زمان_برگردانیدن به مدت 20 دقیقه افزایش می یابد. "سیگنال PIR شناسایی شد!" هنگامی که این اتفاق می افتد ، پیام در مرورگر وب نشان داده می شود.
  7. در حالی که آردوینو خاموش است ، چراغ ها را می توان از طریق کنترل از راه دور روشن و خاموش کرد. آردوینو خنثی نمی شود.
  8. یک چرخه تنظیم مجدد یا قدرت آردوینو آن را به حالت فعال می آورد. این بدان معناست که اگر آردوینو پس از time_turn_off بازنشانی شده باشد ، Arduino چراغ ها را روشن می کند. برای جلوگیری از این امر ، آردوینو باید به حالت دستی درآید (علامت "کنترل خودکار نور" را انتخاب کنید) و تا صبح منتظر بمانید تا دوباره به "کنترل خودکار نور" برگردید.
  9. همانطور که گفته شد ، آردوینو منتظر است تا سپیده دم دوباره فعال شود. به همین دلیل ، سیستم می تواند با هدایت یک نور به اندازه کافی قوی به سمت سنسور نوری که از آستانه "حداقل روشنایی" فراتر رود ، فریب بخورد. اگر این اتفاق بیفتد ، آردوینو باید به حالت فعال تغییر کند.
  10. مقدار تحمل از اهمیت بالایی برخوردار است تا از روشن و خاموش شدن سیستم در اطراف مقدار آستانه حداقل روشنایی جلوگیری شود. چراغ های LED به دلیل سوسو زدن و پاسخگویی بالا می توانند منبعی برای رفتار تکان دهنده باشند. اگر این مشکل را تجربه کردید مقدار تحمل را افزایش دهید. من از مقدار 7 استفاده می کنم.

خوب است در مورد کد بدانید

  1. همانطور که متوجه شدید ، کد بسیار بزرگ است و از تعداد قابل توجهی کتابخانه استفاده می کند. این مقدار حافظه آزاد لازم برای پشته را به خطر می اندازد. من در گذشته متوجه رفتارهای ناپایدار شده بودم که سیستم متوقف می شد ، مخصوصاً پس از تماس های وب. بنابراین ، بزرگترین چالشی که من داشتم این بود که اندازه آن و استفاده از متغیرهای متنوع را برای ایجاد ثبات در سیستم محدود کنم.
  2. کدی که از سرور داخلی استفاده می کند -توسط من در خانه استفاده می شود ، اکنون از فوریه 2016 بدون مشکل اجرا می شود.
  3. من تلاش های زیادی برای غنی سازی کد با توضیحات انجام داده ام. از این مزیت برای بازی با پارامترهای متنوع مانند تعداد ارسال کد Nexa در پشت سر هم ، زمان همگام سازی NTP و غیره استفاده کنید.
  4. این کد دارای نور روز نیست. هنگام اعمال ، این مورد باید از طریق مرورگر وب تنظیم شود.

نکاتی که باید مورد توجه قرار گیرد

  1. آنتن ها را به ماژول های فرکانس رادیویی TX و RX (RF) اضافه کنید. این امر باعث صرفه جویی در وقت شما از دو نکته اصلی می شود: انعطاف پذیری و محدوده سیگنال RF. من از سیم 50 اهم استفاده می کنم که طول آن 17.28 سانتی متر (6.80 اینچ) است.
  2. به عنوان مثال ، این سیستم عامل ممکن است با سایر سیستم های اتوماسیون خانگی مانند Proove کار کند. یکی از بسیاری از شرایطی که باید انجام شود این است که آنها را روی فرکانس 433.92 مگاهرتز کار کنید.
  3. یک سردرد بزرگ با آردوینو این است که با کتابخانه هایی که ممکن است در طول زمان به روز شوند و ناگهان با طرح قدیمی شما سازگار نباشند ، برخورد کنید. همین مشکل ممکن است هنگام ارتقاء IDE Arduino شما ایجاد شود. مراقب باشید که این می تواند مورد ما باشد -بله ، مشکل من نیز هست.
  4. چندین سرویس گیرنده وب همزمان با حالت های مختلف نور ، حالت "چشمک زدن" را ایجاد می کند.

اسکرین شات

در چرخ فلک تصویر بالا ، تصویری از صفحه وب را مشاهده می کنید که هنگام تماس با آردوینو از طریق مرورگر وب نمایش داده می شود. با توجه به پیکربندی IP پیش فرض کد ، آدرس اینترنتی https://192.168.1.99 خواهد بود

یکی از جنبه هایی که ممکن است بهبود یابد موقعیت دکمه "ارسال" است زیرا روی همه کادرهای ورودی تأثیر می گذارد و نه تنها بر روی "کنترل خودکار نور" همانطور که تصور می شود. به عبارت دیگر ، اگر می خواهید هر یک از مقادیر ممکن را تغییر دهید ، همیشه باید دکمه "ارسال" را فشار دهید.

مستندات مفصل/پیشرفته

فایلهای زیر را ضمیمه کرده ام تا بتوانند به شما در درک کامل راه حل ، مخصوصاً برای عیب یابی و بهبود ، کمک کنند.

Arduino_NexaControl_IS.pdf اسناد مربوط به راه حل سرور داخلی را ارائه می دهد.

Arduino_NexaControl_ES.pdf اسناد مربوط به راه حل سرور خارجی را ارائه می دهد.

منابع خارجی

سیستم نکسا (سوئدی)

مرحله 5: تمام شد

تمام شده!
تمام شده!

در آنجا همه چیز به پایان رسیده و در حال انجام است!

قاب آردوینو Uno را می توان در Thingiverse به عنوان "Arduino Uno Rev3 با قاب اترنت شیلد XL" یافت.

توصیه شده: