Taula de continguts:

NexArdu: Control intel·ligent d’il·luminació: 5 passos
NexArdu: Control intel·ligent d’il·luminació: 5 passos

Vídeo: NexArdu: Control intel·ligent d’il·luminació: 5 passos

Vídeo: NexArdu: Control intel·ligent d’il·luminació: 5 passos
Vídeo: Séance ordinaire - 5 juillet 2021 2024, Juliol
Anonim
NexArdu: Control intel·ligent d’il·luminació
NexArdu: Control intel·ligent d’il·luminació

Actualització

Si heu desenvolupat la mateixa funcionalitat amb Home Assistant. Home Assistant ofereix un ventall immens de possibilitats. Podeu trobar el desenvolupament aquí.

Un esbós per controlar la il·luminació de la llar de manera intel·ligent mitjançant dispositius sense fil tipus X10 a 433,92 MHz (també coneguts com a 433 MHz), p. Nexa.

Antecedents

Pel que fa a la il·luminació decorativa, d'alguna manera m'ha cansat que cada segona o tercera setmana hagués de reajustar els temporitzadors que encenen els llums a causa del canvi de l'hora solar respecte al CET. algunes nits anem al llit abans que altres. Per això, de vegades els llums s'apaguen "massa tard" o "massa d'hora". L’anterior m’ha desafiat a pensar: vull que la il·luminació decorativa s’encengui sempre al mateix nivell de llum ambiental i després s’apagui en determinat moment en funció de si estem desperts o no.

Objectiu

Aquesta instrucció explota les possibilitats de dispositius controlats sense fils com System Nexa que funcionen a la freqüència de 433,92 MHz. Aquí presentem:

  1. Control automatitzat de la il·luminació
  2. Control web

Control web. Servidor web intern vs extern

El servidor intern aprofita la possibilitat que el blindatge Ethernet Arduino proporcioni un servidor web. El servidor web atendrà les trucades dels clients web per comprovar i interactuar amb l’Arduino. Aquesta és una solució directa amb una funcionalitat limitada; les possibilitats de millorar el codi del servidor web estan limitades per la memòria de l’Arduino. El servidor extern requereix la configuració d’un servidor web PHP extern. Aquesta configuració és més complicada i no és compatible amb aquest tutorial, però, el codi / pàgina PHP per comprovar i dirigir l'Arduino es proporciona amb funcionalitats bàsiques. Les possibilitats de millorar el servidor web estan, en aquest cas, limitades pel servidor web extern.

Factura de materials

Per aprofitar al màxim les possibilitats que ofereix aquest esbós, necessiteu:

  1. Un Arduino Uno (provat a R3)
  2. Un escut Ethernet Arduino
  3. Un conjunt Nexa o similar que funciona a 433,92 MHz
  4. Un sensor PIR (Passive InfraRed) que funciona a 433,92 MHz
  5. Una resistència de 10KOhms
  6. Un LDR
  7. Un RTC DS3231 (només versió del servidor extern)
  8. Un transmissor de 433,92 MHz: XY-FST
  9. Un receptor de 433,92 MHz: MX-JS-05V

El mínim recomanat és:

  1. Un Arduino Uno (provat a R3)
  2. Un conjunt Nexa o similar que funciona a 433,92 MHz
  3. Una resistència de 10KOhms
  4. Un LDR
  5. Un transmissor de 433,92 MHz: XY-FST

(L'omissió del blindatge d'Ethernet requereix modificacions de l'esbós que no es proporcionen dins d'aquesta instrucció)

La lògica Nexa. Una breu descripció

El receptor Nexa aprèn la identificació del control remot i la identificació del botó. Dit d’una altra manera, cada comandament a distància té el seu número de remitent i cada parell de botons d’encès / apagat té el seu ID de botó. El receptor ha d'aprendre aquests codis. Alguns documents de Nexa indiquen que un receptor es pot emparellar amb fins a sis comandaments a distància. Els paràmetres Nexa:

  • SenderID: identificador del control remot
  • ButtonID: número de parell de botons (activat / desactivat). Comença amb el número 0
  • Grup: sí / no (també conegut com a botons "Tots apagats / activats")
  • Ordre: activat / desactivat

Passos instructius. Nota

Els diferents passos descrits aquí són oferir dos sabors diferents sobre com aconseguir l’objectiu. No dubteu a triar el que vulgueu. Aquí teniu l’índex:

Pas 1: el circuit

Pas 2: Nexardu amb servidor web intern (amb NTP)

Pas 3: Nexardu amb servidor extern

Pas 4: informació valuosa

Pas 1: el circuit …

El circuit …
El circuit …

Connecteu els diversos components tal com es mostra a la imatge.

Pin Arduino # 8 a Pin de dades al mòdul RX (receptor) Pin d'Arduino # 2 a Pin de dades al mòdul RX (receptor) Pin d'Arduino # 7 a Pin de dades al mòdul TX (remitent) Pin d'Arduino A0 a LDR

Configuració RTC. Només es necessita a la configuració del servidor extern. Pin pin Arduino A4 a pin SDA al mòdul RTC Pin PIN Arduino A5 a pin SCL al mòdul RTC

Pas 2: Nexardu amb servidor web intern (amb NTP)

Les biblioteques

Aquest codi fa ús de moltes biblioteques. La majoria es poden trobar a través del "Gestor de biblioteques" de l'IDE Arduino. Si no trobeu una biblioteca a la llista, si us plau, google.

Wire. Client NTP

L’esbós

El codi següent explota la possibilitat d'utilitzar la placa Arduino UNO no només com a mitjà per controlar els dispositius Nexa, sinó que també inclou un servidor web intern. Un comentari que cal afegir és que el mòdul RTC (Real Time Clock) s’ajusta automàticament mitjançant NTP (Network Time Protocol).

Abans de penjar el codi a Arduino, és possible que hàgiu de configurar el següent:

  • SenderId: primer heu d’ensumar el SenderId, vegeu-ho a continuació
  • PIR_id: primer heu d’ensumar el SenderId, vegeu-ho a continuació
  • Adreça IP de la LAN: configureu una IP de la vostra LAN al vostre escut Ethernet Arduino. Valor per defecte: 192.168.1.99
  • Servidor NTP: no és estrictament necessari, però podria ser bo buscar google per als servidors NTP del vostre entorn proper. Valor per defecte: 79.136.86.176
  • El codi s’ajusta per a la zona horària CET. Ajusteu aquest valor -si cal, a la vostra zona horària per mostrar l'hora correcta (NTP)

Ensumant els codis Nexa

Per a això, heu de connectar, com a mínim, el component RX a l'Arduino tal com es mostra al circuit.

A continuació trobareu l’esbós de Nexa_OK_3_RX.ino que, en el moment d’escriure-ho, és compatible amb els dispositius Nexa NEYCT-705 i PET-910.

Els passos a seguir són:

  1. Vinculeu el receptor Nexa amb el comandament a distància.
  2. Carregueu Nexa_OK_3_RX.ino a l'Arduino i obriu el "Monitor de sèrie".
  3. Premeu el botó del control remot que controla el receptor Nexa.
  4. Preneu nota del "RemoteID" i "ButtonID".
  5. Definiu aquests números a SenderID i ButtonID a la declaració de variable de l'esbós anterior.

Per llegir la identificació del PIR, només cal que utilitzeu aquest mateix esbós (Nexa_OK_3_RX.ino) i llegeixi el valor al "Monitor de sèrie" quan el PIR detecti moviment.

Pas 3: Nexardu amb servidor extern

Les biblioteques

Aquest codi fa ús de moltes biblioteques. La majoria es poden trobar a través del "Gestor de biblioteques" de l'IDE Arduino. Si no trobeu una biblioteca a la llista, si us plau, google.

Wire.hRTClib.h: aquesta és la biblioteca de https://github.com/MrAlvin/RTClibSPI.h - Requereix Ethernet shield NexaCtrl.h - Controlador de dispositiu Nexa Ethernet.h - Per habilitar i incloure el blindatge EthernetRCSwitch.h - Obligatori per a PIRTime.h - Obligatori per a RTCTimeAlarms.h - Gestió de l'alarma horària aREST.h - per a serveis d'API RESTful explotats per un servidor externairair / wdt.h - Gestió del temporitzador de vigilància

L’esbós

L'esbós següent presenta un altre sabor del mateix, aquesta vegada potencia les possibilitats que pot donar un servidor web extern. Com ja s'ha esmentat a la introducció, El servidor extern requereix la configuració d'un servidor web PHP extern. Aquesta configuració és més complicada i no és compatible amb aquest tutorial, però, el codi / pàgina PHP per comprovar i dirigir l'Arduino es proporciona amb funcionalitats bàsiques.

Abans de penjar el codi a Arduino, és possible que hàgiu de configurar el següent:

  • SenderId: primer heu d’ensumar el SenderId, consulteu Inxolar els codis Nexa al pas anterior
  • PIR_id: primer heu d’ensumar el SenderId, consulteu Inxolar els codis Nexa al pas anterior
  • Adreça IP de la LAN: configureu una IP de la vostra LAN al vostre escut Ethernet Arduino. Valor per defecte: 192.168.1.99

Per obtenir el procediment de detecció de codi Nexa, consulteu el pas número 1.

Expedient complementari

Pengeu el fitxer nexardu4.txt adjunt al vostre servidor PHP extern i canvieu el nom a nexardu4.php

Temps RTC definit

Per establir la data / hora a l'RTC, faig servir l'esbós SetTime que combina la biblioteca DS1307RTC.

Pas 4: informació valuosa

Informació valuosa
Informació valuosa
Informació valuosa
Informació valuosa

És bo conèixer el comportament

  1. Quan Arduino està sota "Control automàtic de llum", pot passar per quatre estats diferents en relació amb la il·luminació ambiental i l'hora del dia:

    1. Despert: Arduino espera que arribi la nit.
    2. Actiu: ha arribat la nit i Arduino ha encès els llums.
    3. Somnolent: els llums estan encesos, però arriba el moment d'apagar-los. Comença a "time_to_turn_off - PIR_time", és a dir, si time_to_turn_off s'estableix a 22:30 i PIR_time s'estableix a 20 minuts, l'Arduino entrarà en estat somnolent a les 22:10.
    4. Inactiu: la nit passa, Arduino ha apagat els llums i Arduino espera que l'alba es desperti.
  2. Arduino sempre escolta els senyals que envien els comandaments a distància. Això inclou la possibilitat de mostrar l’estat de les llums (encès / apagat) a la xarxa quan s’utilitza el control remot.
  3. Mentre Arduino està despert, intenta apagar els llums tot el temps, per tant, els senyals ON enviats per un control remonte per encendre els llums podrien ser capturats per Arduino. En cas que això passi, l'Arduino intentarà tornar a apagar els llums.
  4. Mentre Arduino està actiu, intenta que els llums s’encenguin tot el temps, per tant, els senyals OFF enviats per un control remot per apagar els llums podrien ser capturats per Arduino. En cas que això passi, l'Arduino intentarà tornar a encendre els llums.
  5. En estat somnolent, els llums es poden encendre / apagar amb un comandament a distància. L'Arduino no contrarestarà.
  6. En un estat somnolent, el compte enrere PIR començarà a restablir-se de "time_to_turn_off - PIR_time" i, per tant, el time_to_turn_off s'amplia 20 minuts cada vegada que el PIR detecta moviment. Un "senyal PIR detectat!" es mostrarà el missatge al navegador web quan això passi.
  7. Mentre que Arduino està latent, els llums es poden activar i apagar mitjançant el comandament a distància. L'Arduino no contrarestarà.
  8. Un restabliment o un cicle d’alimentació de l’Arduino el portarà al mode actiu. Això significa que si l'Arduino s'ha restablert després del time_turn_off, Arduino encendrà els llums. Per evitar-ho, cal que Arduino passi al mode manual (marqueu "Control automàtic lleuger") i espereu fins al matí per tornar-lo a "Control automàtic lleuger".
  9. Com s'ha esmentat, Arduino espera que l'alba es torni a activar. Per això, el sistema es pot enganyar dirigint una llum prou forta cap al sensor de llum que superi el llindar de "lluminositat mínima". En cas que això passi, Arduino canviarà a estat actiu.
  10. El valor de tolerància és d’elevada importància per tal d’evitar que el sistema pugui activar i desactivar-se al voltant del valor llindar Lluminositat mínima. Les llums led, a causa del seu parpelleig i la seva alta capacitat de resposta, poden ser una font de comportament de batuda. Augmenteu el valor de tolerància si experimenteu aquest problema. Faig servir el valor 7.

És bo saber-ne el codi

  1. Com podeu observar, el codi és molt gran i fa servir una quantitat considerable de biblioteques. Això compromet la quantitat de memòria lliure necessària per a l'emmagatzematge dinàmic. En el passat, he notat un comportament inestable en frenar el sistema, sobretot després de trucades web. Per tant, el repte més gran que he tingut ha estat limitar la seva mida i l’ús de diverses variables per tal de fer que el sistema sigui estable.
  2. El codi que explota el servidor intern que he utilitzat a casa, funciona des de febrer de 2016 sense problemes.
  3. He fet esforços considerables per enriquir el codi amb explicacions. Aprofiteu-ho per jugar amb diversos paràmetres com el nombre d'enviaments de codi Nexa per ràfega, el temps de sincronització NTP, etc.
  4. El codi no inclou l’estiu. S’ha d’ajustar mitjançant el navegador web quan s’apliqui.

Alguns punts a tenir en compte

  1. Afegiu les antenes als mòduls de radiofreqüència (RF) TX i RX. T'estalviarà temps queixant-se de dos punts principals: la resistència i l'abast del senyal de RF. Faig servir un cable de 50 Ohms de 17,28 cm (6,80 polzades) de llarg.
  2. Aquest intructable pot funcionar amb altres sistemes domòtics com Proove, per exemple. Una de les moltes condicions que cal complir és que funcionin a la freqüència de 433,92 MHz.
  3. Un mal de cap important amb Arduino és tractar amb biblioteques que poden actualitzar-se amb el pas del temps i de sobte no tornar a ser compatibles amb el vostre "vell" esbós; el mateix problema pot sorgir en actualitzar el vostre IDE Arduino. Compte que aquest podria ser el nostre cas aquí -sí, el meu problema també.
  4. Diversos clients web simultanis amb diferents modes de llum creen un estat de "parpelleig".

Captura de pantalla

Al carrusel de la imatge de dalt, trobareu una captura de pantalla de la pàgina web que es mostra quan truqueu l'Arduino mitjançant el vostre navegador web. Donada la configuració IP predeterminada del codi, l'URL seria

Un aspecte que podria ser objecte de millora és el posicionament del botó "enviar", ja que té efecte a totes les caixes d'entrada i no només al "Control automàtic de llum", com es podria pensar. En altres paraules, si voleu canviar algun dels valors possibles, sempre heu de prémer el botó "Envia".

Documentació detallada / avançada

He adjuntat els fitxers següents perquè us puguin ajudar a entendre tota la solució, especialment per a la resolució i millora de problemes.

Arduino_NexaControl_IS.pdf proporciona documentació sobre la solució del servidor intern.

Arduino_NexaControl_ES.pdf proporciona documentació sobre la solució del servidor extern.

Referències externes

Sistema Nexa (suec)

Pas 5: acabat

Acabat!
Acabat!

Aquí ho teniu tot acabat i en acció!

El cas Arduino Uno es pot trobar a Thingiverse com a "Arduino Uno Rev3 amb caixa Ethernet Shield XL".

Recomanat: