Relé WiFi con ESP8266


En el post de hoy vamos  a ver lo sencillo y económico que resulta fabricar un tele-control por wifi para controlar dos cargas AC  usando como referencia la placa de bajo coste ESP8266

El Módulo ESP8266 WiFi es un SOC autónomo con pila de protocolos TCP / IP integrada que puede dar acceso a cualquier microcontrolador a su red WiFi. El ESP8266 es capaz de alojar una aplicación o descargar todas las funciones de red Wi-Fi desde otro procesador de aplicaciones.

Cada módulo ESP8266 viene preprogramado con un firmware de conjunto de comandos AT, lo que significa que simplemente puede conectarlo a su dispositivo Arduino y obtener casi la capacidad Wi-Fi que ofrece Wi-Shield.

Este módulo cuenta con una capacidad de almacenamiento y procesamiento a bordo lo suficientemente potente para permitir  integrarse con los sensores y otros dispositivos específicos a través de sus GPIO con un desarrollo mínimo inicial y una carga mínima durante el tiempo de ejecución.

Su alto grado de integración en el chip permite un mínimo de circuitos externos, incluyendo el módulo de front-end, estando diseñado para ocupar un área mínima de PCB.

Asimsimo el ESP8266 admite APSD para aplicaciones VoIP y interfaces de coexistencia Bluetooth, contiene un RF autocalibrado que le permite trabajar en todas las condiciones de funcionamiento y no requiere piezas externas de RF.

Nota: Existen una nueva versión del módulo ESP8266 WiFi que ha aumentado el tamaño del disco flash de 512k a 1 MB.

Caracteristicas:

  • 802.11 b / g / n
  • Wi-Fi Direct (P2P), soft-AP
  • Pila de protocolos TCP / IP integrada
  • Interruptor TR integrado, balun, LNA, amplificador de potencia y red de conexión
    PLLs integrados, reguladores, DCXO y unidades de administración de energía
  • + 19.5dBm de potencia de salida en modo 802.11b
  • Corriente de fuga de <10uA
  • 1MB de memoria flash
  • CPU de 32 bits de baja potencia integrada podría utilizarse como procesador de aplicaciones
  • SDIO 1.1 / 2.0, SPI, UART
  • STBC, 1 × 1 MIMO, 2 x 1 MIMO
  • A-MPDU & A-MSDU agregación & 0.4ms intervalo de guardia
  • Despierta y transmite paquetes en <2ms
  • Consumo de energía en espera de < 1.0mW (DTIM3)

Como nota importante,el módulo ESP8266 no es capaz de cambiar la lógica de 5-3V y requerirá un convertidor de nivel lógico externo si necesita conectar sensores o actuadores que utilizen logica TTL.

Si alguna vez ha intentado conectar un dispositivo de 3,3 V a un sistema de 5 V, es un  desafío  por lo que lo mejor es usar un  convertidor de nivel lógico bidireccional.Estos suelen ser pequeños dispositivos que descienden de forma segura las señales de 5V a 3.3V y suben de 3.3V a 5V al mismo tiempo. Estos convertidores de nivel también funcionan con dispositivos de 2.8V y 1.8V y son  muy fácil de usar: estas placad debe ser alimentada por las dos fuentes de tensión (alta y baja tensión) que su sistema está utilizando. Alta tensión (5V por ejemplo) al pin ‘HV’, baja tensión (3.3V por ejemplo) a ‘LV’, y tierra del sistema al pin ‘GND’.

 Materiales y herramientas

Para hacer este relé wifi necesitara:

  • Un Esp8266 ,el cual  se puede programar como un arduino y un adapatador
  • 2 relés 220vac control por 12v
  • 2 transistores TIP122
  • 6 diodos IN4007
  • unas resistencias (2x1k, 2x10k, 330, 220)
  • un transformador de 12v
  • un lm317
  • condensadores 50v 1000uf y 10uf
  • pcb de prototipos,algunos tornillos,enchufe AC , cable ,etc

Para las herramientas necesitará un soldador, un taladro, un 3d impresora (opcional) y papel de lija.

 La placa de relé

Aunque se pueden adquirir ya montados  placas con reles y el driver  por un precio bastante económico,  es también bastante sencillo construirlo usando dos reles de 12v , dos transistores  mosfet TIP122, dos diodos de proteccion  y dos resistencias de base de 1K

 Todo el conjunto se puede montar en una simple placa de prototipos pues como vemos el montaje es bastante sencillo:


La electrónica de este proyecto  pues o se compone de dos placas:

  • La placa de relé con 2 relés y 2 transistores, la cual puede ser adquirida aparte  o bien  montarla uno mismo
  • La placa de esp8266 con el módulo y toda la parte parte de alimentacion (transformador, puente rectificador y el lm317 para el 3c3 regular)

Un ejemplo de  montaje  es  colocar todos los componentes en el pcb de prototipo y luego cortar  la placa  el tamaño adecuado con una sierra. Todos los componentes se sueldan y después se ponen los  puentes con cable . Atención con el diámetro del cable cuando se conecta el relé pues,debe usar un cable de mas seccion  por el  tema de la carga AC

 La placa principal

El tablero principal consta de 3 partes:

  • La fuente  de 12v que inlcuye un puente rectificador de Graetz (bien ta montado o  con cuatro diodos) y un condensador electrolitico.
  • La fuente  de 3v3 regulados con el lm317 y las dos resistencias  que suministran un voltaje constante para la esp8266.
  • El  propio  modulo  esp8266  con las dos resistencias de protección

Para realizar la segunda placa , repita el mismo proceso de la primera. Cuando termine, compruebe el voltaje en el pin de alimentación del módulo.
Cuando están hechas las 2 placas, conecten con cable  ambo  módulos.

 Hacer la caja

 Se puede hacer  una caja con sketchup y una impresora 3d  .Si usted tiene acceso a una impresora 3d, descargar el archivo stl e imprimirlo (relleno de 20% y 0, 3 capas). Lijar la caja y los agujeros limpios.

Si no, puede hacer una caja de un Tupperware o cualquier caja de plástico.

Ahora usted puede terminar todo. Coloque primero la electrónica y el transformador en la caja y pegar. Tomar 3 tapones (uno en y 2 hacia fuera), el extremo de la tira . Conecte cada cable con el tornillo terminales siguiendo el esquema.

No se olvide de conectar el transformador.

Después de enchufe en el módulo, cierre el cuadro con  4 tornillos..!y eso es todo! ahora puede controlar cualquier dispositivo con su smartphone o PC.

Programa para la Esp8266

A continuación se describe el codigo de ejemplo para gestionar el ESP8266



// crear una instancia Arest
aREST_UI rest = aREST_UI();

// parametros WiFi
const char* ssid = «wifi nom»;
const char* password = «mot de passe»;

// puertos  TCP
LISTEN_PORT 80

// crear una instancia de servidor
WiFiServer server(LISTEN_PORT);
void setup(void)
{
Serial.begin(115200);

// crear UI
rest.title(«Relay «);
rest.button(2);
rest.button(0);

//dar nombre y la identificación del módulo
rest.set_id(«1»);
rest.set_name(«esp8266»);

// conectarse a wifi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(«.»);
}
Serial.println(«»);
Serial.println(«WiFi conectado»);

// inializando el servidor
server.begin();
Serial.println(«Servidor arrancado»);

// imprime  direccion  IP
Serial.println(WiFi.localIP());

}

void loop() {

WiFiClient client = server.available();
if (!client) {
return;
}
while(!client.available()){
delay(1);
}
rest.handle(client);

}

Basicamente se conecta a la red Wifi que se decida , se crea una instancia Arest que atiende el puerto 80 y en funcion del pulsador  que se pulse se actua  sobre  la placa

!No se olvide de cambiar el nombre de wifi y la contraseña en este código!

Una vez tenemos el código ,el último paso es programar el esp8266 como un Arduino.

Seguir este tutorial si no ahora como hacerlo: https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/using-arduino-ide para lo cual hay que descargar el programa (wifirealy.ino ) y cargarlo  en el módulo esp8266 usando por ejemplo el  siguinte montaje

Para probar el montaje ,introduzca la dirección IP del módulo en cualquier navegador y verá 2 interruptores virtuales de encendido/apagado. Esto cambiara  el control de los pines gpio 2 conectados a los transistores que a su vez excitaran los reles correspondientes controlando las cargas que se tengan conectadas a estos .

 ¿Le parece útil este proyecto?

Sensor avanzado para apertura de puerta


En el post de hoy vamos a ver un nuevo sistema de monitorización que se alimenta mediante una simple batería. La versión anterior se basó en una radio XBee y ha estado en servicio durante casi 3 años y medio. El tiempo de duración de la batería real ha sido de alrededor de 3 meses para una pila de botón CR2032, que no está mal del todo, pero aún así como vamos a ver es mejorable.

En el nuevo diseño ,aparte de usar un modulo de radio de 868 MHz RFM69 en lugar del XBee Monteino y, se ha reducido la lista de componentes moviendo la lógica del hardware a lógica de software,lo cual  significa utilizar las capacidades de ahorro energético en modo dormir tanto del ATMega328 y la RFM69 y la codificación de una manera inteligente para reducir el tiempo despertar.

Hardware

monteino.PNG

Moteino es una placa  Arduino inalámbrica de bajo coste basado en el microcontrolador Atmel ATmega328P  .

Para una guía detallada de la placa , consulte esta página dedicada . Aquí están algunas características y aspectos más destacados de Moteino:

  • Arduino bajo costo totalmente compatible con el IDE de Arduino
  • La versión regular incluye un RFM69W / transceptor a bordo HW y la antena de alambre monopolo de 1/4 de longitud de onda por separado
  • Bajo consumo de energía, energía de la batería de usar
  • 3.3V a bordo regulador (MCP1703) proporciona hasta 250 mA, entrada de hasta 16V (3.5-9V recomendado), muy baja corriente de reposo permite que este regulador para hacer funcionar su Moteino con la batería durante un tiempo muy largo
  • Muy pequeño tamaño (1,3 pulgadas x0.9)
  • diseño de tablero de cabecera de usar le permite adjuntar hembra / macho pines del conector en la parte superior o inferior y hacer escudos para ello o sólo lo utilizan en el tablero para prototipos
  • Cabecera de programación FTDI, ofrecemos este consejo adaptador FTDI para la programación de todos los Moteinos
  • DualOptiboot gestor de arranque para la programación rápida y no está en puesta demora. Elija Arduino Uno / Moteino en Herramientas> Juntas de Arduino IDE.
  • LED bordo de pin digital 9 (D9 / PB1) para depurar o indicación visual
  • acabado ENIG (RoHS Sin plomo)
  • Orgullosamente hecho y probado en Michigan EE.UU.-con componentes genuinos!

 

Para hacer un enlace inalámbrico, necesitará al menos 2 Moteinos. Alternativamente, esta es compatible con otros Arduinos que utilizan el transceptor RFM69.

Como ya se ha dicho, el hardware es mucho más simple en esta segunda versión del monitor de la puerta, se puede comprobar aquí ambos lados «generaciones» una al lado de la otra:

Monitor de puerta con XBee y Monteino

Esta segunda generación es básicamente un Monteino con un RFM69W a bordo, un divisor de tensión para controlar la batería, un interruptor de láminas( es decir un rele reed)  con una resistencia de  pull-up(370k) y un terminal de tornillo para conectar una batería.

Las razones para cambiar a una  aruitectura basada en la placa Monteino son:

  • Una mejor personalización. XBees son programables , pero en realidad, ¿quién hace eso?Así que aquí tiene una buena placa Arduino de edad con suficiente capacidad de procesamiento para utilizar prácticamente cualquier sensor que hay.
  • Mayor duración de la batería. Usted tiene más opciones de código, como poner la radio, el chip flash y el propio microcontrolador para ponerlo en modo dormir. Además también admite  una solución de  batería más robusta con 3  baterías AAA con 1000 mAh.
  • Más fácil de usar  gracias al software X-CTU .

Monteno monitor de puerta de esquema con Fritzing

Hay algunas cosas a tener en cuenta en cuanto al hardware. En primer lugar el monitor de la batería se ha diseñado después de John k2ox mensaje en el foro LowPowerLab. El divisor de tensión consiste en una resistencia de  470k y otra de 1 M. La resistencia de pull up no está ligado a GND, pero si al pin digital 12. Cuando este pin está en modo de alta impedancia de los circuitos está desactivado y no se pierde energía. Para medir el voltaje primero tiene que ajustarse para que emita y luego baja, realice una analogRead en A1 y poner de nuevo a D12 ENTRADA.

Divisor de voltaje

En segundo lugar la resistencia de pull-up en el interruptor de láminas fue una adición tardía a comprobar el tiempo hubo una caída en el consumo de energía en comparación con el pull-up interna.

Además, esto podría no parecer importante, pero le puede ahorrar algo de dinero y una gran cantidad de dolor de cabeza. Esos interruptores de láminas son realmente frágiles( el momento crítico es cuando se tiene que doblar sus patas con  un pequeño alicate de  puntas : debe  mantener la pata justo antes del punto de flexión, por lo que la cápsula está protegida en un lado del alicate y doble suavemente el otro extremo).

Doblando una caña piernas del interruptor

Y, por último, comprobar cuál es la mejor posición para el interruptor de láminas y el imán. Para imanes redondos neodinium el interruptor debe ser perpendicular al plano del imán(compruebe la imagen de cabecera en este post) y éste:

interruptor de láminas

firmware

El código es bastante simple, se basa en Felix Rusu y Thomas Studwell RFM69_ATC yRocketScream baja potencia bibliotecas. El interruptor de láminas está ligado a un pin de interrupción que despierta el Monteino cada vez que cambia su estado. A continuación, el código debe  leer  la señal y comprueba si el valor ha cambiado. Se empezo con un tiempo de rebote 25ms y más tarde he comprobado con un  DSO Nano cone 5ms es más que suficiente. Señal y mensajería parece mucho más fiable que con el XBee, donde hay mas rebotes y señales fantasma (una puerta abierta y cerrada gatillo dos mensajes y segundos después, dos mensajes más,etc).

Este es el código de bucle responsable del sueño y despertar del microcontrolador:

void loop() {
    // We got here for three possible reasons:
    // - it's the first time (so we report status and battery)
    // - after 4*15 seconds (we report status and maybe battery)
    // - after an event (same)
    send();
    // Sleep loop
    // 15 times 4 seconds equals 1 minute,
    // but in real life messages are received every 77 seconds
    // with this set up, so I'm using 13 here instead...
    for (byte i = 0; i < 13; i++) {
        // Sleep for 8 seconds (the maximum the WDT accepts)
        LowPower.powerDown(SLEEP_4S, ADC_OFF, BOD_OFF);
        // At this point either 4 seconds have passed or
        // an interrupt has been triggered. If the later
        // delay execution for a few milliseconds to avoid
        // bouncing signals and break
        if (flag) {
            flag = false;
            delay(DEBOUNCE_INTERVAL);
            break;
        }
        // If the former, check status and quit if it has changed
        if (status != digitalRead(REED_PIN)) break;
    }
}

La variable de estado mantiene el último estado enviado y reconocida por la puerta de entrada . Así que si nos falta un ACK el código intentará enviar el mismo mensaje de nuevo en cuatro segundos . Puede comprobar el código completo en la puerta de el repositorio de monitor en la Bitbucket . Se esta usando una biblioteca envoltorio ( RFM69Manager ) para gestionar la configuración y formato de los mensajes de radio . Los mensajes están en el formato :

key:value:packetID

Al igual que en » BAT : 4302 : 34 » . El ID de paquete es opcional pero el RFM69GW lo utiliza para comprobar si hay duplicados o paquetes que faltan. Se puede desactivar cambiando el valor SEND_PACKET_ID en RFM69Manager.h a 0 .

Alimentación

La alimentación  es clave en este proyecto desde el sensor será operado de la batería . En la primera generación , con el XBee , podría funcionar por cerca de 3 meses con una sola pila de botón CR2032 ~ 300mAh ,por eso para esta segunda generaciones se buscaba tanto más autonomía y fiabilidad . La fiabilidad es a menudo un intercambio de energía con el consumo : más controles , más mensajes, más tiempo despierto .
Fuente aqui