Futurista ambientador


Es  reconfortante tener una fragante casa floral de primavera para senirse como si estuviera en medio de un jardín de lavanda en lugar de una vivienda tradicional  donde probablemente viva, de heho eso es es que precisamente por esto, muchas de las diferentes empresas han creado para los amantes del aire  una multitud de aromas.

Hay muchos ambientadores en el mercado: desde los antiguos aerosoles manuales hasta los disparados por temporizador pero los últimos, aunque son automáticas, son bastante tontas pues seguirán rociando incluso si no estás cerca para  sentir el olor, desperdiciando esas recargas de fragancia no tan baratas.

¿No sería agradable si su refrescante de aire fuera capaz de comunicarse con otros dispositivos y disparar solo cuando realmente lo necesite ?

En este proyecto IgorF2 diseñó   un ambientador  conectado , usando algunas impresiones 3D, NodeMCU, IFTTT y Adafruit.IO.

!

¡Siempre tenga en cuenta que este es un prototipo experimental y podría usarse con precaución!

Paso 1: herramientas y materiales

Las siguientes herramientas y materiales fueron utilizados en este proyecto:

  • impresora 3d. En mi caso, utilicé Voolt3D, una impresora 3D basada en Grabber i3;
  • 1.75mm PLA de su color favorito;
  • Alambre de soldar. Tendrás que soldar algunos cables;
  • Destornillador. Lo necesitará para montar su caso;
  • Tornillos M2x6mm (x11) ;
  • Servomotor MG995
  • NodeMCU LoLin (- La versión NodeMCU LoLin tiene un pin UV, que está conectado al terminal USB 5V. De esta forma, es posible usar los 5 V de un cargador USB, pasando por la placa NodeMCU, para alimentar el servomotor. Otras versiones de NodeMCU no tienen este pin UV (tienen un pin reservado en su lugar). De esta forma, no podrá alimentar su servomotor directamente si usa una de esas otras versiones;
  • NeoPixel 16 x WS2812 5050 RGB LED
  • Botón pulsador de 12x12x12 mm
  • Cable MiniUSB , para la conexión entre NodeMCU y la computadora (para cargar el código);
  • Cargador USB 5V, 2A ( cargador de teléfono, por ejemplo) para alimentar el circuito;
  • 5 cables de puente hembra-hembra;
  • 3 cables de puente macho-hembra;
  • Recambio de aire fresco.

 

Paso 2: impresión en 3D

Imagen de impresión 3D

El modelo 3d se diseñó utilizando Fusion 360.

El modelo se compone de cinco partes diferentes:

  • Frente: cuerpo principal del gadget. Aquí es donde algunos de los componentes electrónicos (anillo LED y botón pulsador) y el servomotor se unirán;
  • Funda trasera: se usa para cerrar el cuerpo de la caja. Aquí es donde se instalarán NodeMCU y el recambio de renovación;
  • Botón : esta parte está conectada al botón;
  • Tapa: esta parte se enrosca en la parte posterior de la caja y permite reemplazar la recarga
  • Soporte: esta parte se utiliza para bloquear el anillo LED y el botón en su posición.

Puede descargar todos los archivos stl en https://www.thingiverse.com/thing:2613327

Este es un prototipo experimental. Tenga en cuenta que fue diseñado para un modelo determinado de recarga de renovación de aire (una Glade, cuyas dimensiones en milímetros puede encontrar en las imágenes). Si desea utilizar un modelo diferente, envíe un comentario y puedo ver si es posible cambiar las dimensiones del modelo para adaptarlo a sus necesidades.

Si no tiene una impresora 3D, aquí hay algunas cosas que puede hacer:

  • Pídale a un amigo que lo imprima para usted;
  • Encuentre un espacio para hackers / fabricantes cerca. Las piezas utilizadas en este modelo se pueden imprimir rápidamente (alrededor de 9 horas).Algunos espacios de hackers / fabricantes solo le cobrarán por los materiales utilizados;
  • ¡Improvisar! Puede intentar ensamblar una estructura sin partes impresas en 3D;

Paso 3: Explicación del circuito

Imagen del circuito explicado

Para este proyecto se utiliza  el modulo  NodeMCU LoLin para controlar el gadget. NodeMCU es una plataforma de código abierto IoT, que se ejecuta en un SoC Wi-Fi ESP8266 de Espressif Systems. Su hardware se basa en el módulo ESP-12.

La placa de desarrollo conecta una red Wi-Fi determinada y recibe algunos comandos de Adafruit.io plafrom. Un anillo NeoPixel se utiliza para la indicación del estado (si la conexión Wi-Fi fue exitosa, o si se recibió un comando dado, por ejemplo). El tablero de control también acciona un servomotor, que actuará en una recarga de renovación de aire. Un botón pulsador se usa para comandos locales.

Se utilizó un cargador USB de 5 V y 2 A para alimentar la placa de control y todos los periféricos. Es importante observar que cuando se activa el servo, se toma una corriente máxima considerable de la fuente de alimentación. De esta forma, no use el puerto USB de una computadora (o cualquier otro dispositivo) para alimentar su circuito. Podría reiniciarse o incluso dañarse.

Las figuras ilustran cómo se conectaron los componentes.

Paso 4: Prepare la electrónica

Imagen de Prepare the Electronics

Algunos de los componentes utilizados en este proyecto deben soldarse primero. En este paso, mostraré cómo se prepararon para una conexión más fácil de los componentes.

1. Terminales Solder NeoPixel

Los anillos NeoPixel generalmente vienen sin cables conectados a sus terminales. Esto significa que tuve que soldar algunos cables para la conexión de los LED al microcontrolador.

Para eso use tres puentes femeninos y femeninos. Corte un lado del puente y suelde sus cables en los terminales de anillo NeoPixel. El otro extremo de cada jumper estará con un terminal hembra, que se conectará más adelante en los pines NodeMCU.

  • Cable rojo = 5V
  • Cable negro = GND
  • Cable amarillo = entrada de datos

2. Terminales de botón de soldadura

Para conectar el botón pulsador al NodeMCU, primero tuve que soldar algunos cables de puente en dos terminales del botón.

Use dos jumpers femeninos y femeninos. Cortar un lado del jumper y suelde sus hilos al botón.

  • Cable verde = entrada de datos
  • Cable negro = GND

3. Servomotor MG995

Los servomotores generalmente tienen un terminal hembra de tres pines, pero desafortunadamente no se puede conectarse directamente al NodeMCU debido a la posición de los pines. Para conectar esos componentes usé un cable de puente macho-hembra.

Paso 5: Ensamblar los componentes

Imagen de Montar los Componentes

En este paso, veremos cómo ensamblar los componentes dentro de la estructura impresa en 3D. Si no desea imprimir el caso por algún motivo, puede saltar al siguiente paso y ver cómo está conectado el circuito.
Una vez que se imprime su estructura, ensamblar el circuito es bastante simple:

  1. Coloque el anillo de LED dentro de la caja frontal ;
  2. Coloque el botón impreso en 3D dentro del anillo;
  3. Coloque el botón pulsador en el medio del soporte impreso en 3D;
  4. Monte el soporte dentro de la caja frontal con cuatro pernos M2x6mm;
  5. Monte el servomotor dentro de la carcasa delantera con cuatro tornillos (los que generalmente vienen con el servo);
  6. Coloque la bocina del servo de acuerdo con la imagen y bloquee su posición con un perno. Cuando el servo está a 90 grados, la retención debe ser horizontal;
  7. Fije NodeMCU dentro de la caja trasera usando cuatro pernos M2x6mm;
  8. Inserte el relleno de renovación de aire dentro de la cámara;
  9. Thead la tapa, cerrando la cámara;
  10. Conecte el circuito (en el siguiente paso le mostraré cómo hacerlo);
  11. Cierre la caja con tres tornillos M2x6mm.

Después de eso, estará listo para subir el código.

Paso 6: Cableado del circuito

Imagen de Wire Up the Circuit

Una vez que los componentes se colocaron dentro de la caja, conecte los cables de acuerdo con los esquemas.

  • NeoPixel 5V (cable rojo) => NodeMcu 3V3
  • NeoPixel GND (cable negro) => NodeMcu GND
  • Entrada de datos NeoPixel (cable amarillo) => NodeMcu GPIO 15 (pin D8)
  • Botón pulsador 1 (cable verde) => NodeMcu GPIO 14 (pin D5)
  • Pulsador 2 (cable negro) => NodeMcu GND
  • MG995 servo 5V (cable rojo) => NodeMcu VU pin
  • MG995 servo GNG (cable marrón) => NodeMcu GND
  • Servo señal MG995 (cable naranja) => NodeMcu GPIO 12 (pin D6)

Paso 7: Configurar NodeMCU en Arduino IDE

Imagen de Setup NodeMCU en Arduino IDE

Para este proyecto se utiliza  Arduino IDE para programar  el NodeMcu. Es la forma más fácil si ya has usado un Arduino antes, y no necesitarás aprender un nuevo lenguaje de programación, como Python o Lua, por ejemplo.

Si nunca has hecho esto antes, primero tendrá que agregar el soporte de la placa ESP8266 al software Arduino.

1. Descargue e instale la última versión de Arduino IDE

Puede encontrar la última versión para Windows, Linux o MAC OSX en el sitio web de Arduino: https://www.arduino.cc/en/main/software

Descárguelo gratis, instálelo en su computadora y ejecútelo.

2. Agregar el tablero ESP8266

Arduino IDE ya viene con soporte para muchas placas diferentes: Arduino Nano, Mine, Uno, Mega, Yún, etc. Desafortunadamente ESP8266 no está por defecto entre esas placas de desarrollo soportadas. Por lo tanto, para subir sus códigos a una placa base ESP8266, primero deberá agregar sus propiedades al software de Arduino.

  • Navegue a Archivo> Preferencias (Ctrl +, en el sistema operativo Windows);
  • Agregue la siguiente URL al cuadro de texto Gestor de tableros adicionales (el que está en la parte inferior de la ventana de Preferencias):

http://arduino.esp8266.com/stable/package_esp8266com_index.json

  • Si el cuadro de texto no estaba en blanco, significa que ya había agregado otras placas antes en Arduino IDE. Agregue una coma al final de la URL anterior y la anterior.
  • Presiona el botón “Aceptar” y cierra la ventana de Preferencias.
  • Navegue hacia Herramientas> Tablero> Administrador de tableros para agregar su placa ESP8266.
  • Escriba “ESP8266” en el cuadro de texto de búsqueda, seleccione “esp8266 por ESP8266 Community” e instálelo.

Ahora su IDE de Arduino estará listo para trabajar con muchas placas de desarrollo basadas en ESP8266, como el ESP8266 genérico, NodeMcu (que utilicé en este tutorial), Adafruit Huzzah, Sparkfun Thing, WeMos, etc.

3. Agregar las bibliotecas

Las siguientes bibliotecas se usarán para nuestro código Arduino. Descargue las siguientes bibliotecas:

Navegue a Boceto-> Incluir biblioteca-> Administrar bibliotecas … en tu IDE de Arduino y agrega las bibliotecas de arriba.¡Ahora que su entorno de desarrollo está listo, pasemos al siguiente paso!

Paso 8: Configuración de Adafruit.IO

Imagen de la configuración de Adafruit.IO

Hay muchos servicios de registro de datos disponibles para comunicar un microcontrolador a la web. Con esos servicios, puede cargar / descargar datos desde / hacia la nube y hacer muchas cosas interesantes.
Adafruit.IO es uno de esos servicios gratuitos. ¡Es realmente fácil de usar y promete traer Internet de las cosas a todos!

Crear Adafruit IO Web Feed

  • Regístrese en https://io.adafruit.com/
  • En Feeds> Crear un nuevo feed, agregue un nuevo feed denominado “IoT air freshner command”. Creará una base de datos, y la usaremos para almacenar los comandos recibidos por el gadget.

En el siguiente paso, veremos cómo configurar IFTTT, otra plataforma utilizada  en este proyecto. La idea aquí es simple: IFTTT tendrá configurados algunos desencadenantes y enviará algunos datos a la plataforma Adafruit.IO cuando una lógica dada sea verdadera. El gadget podrá leer los datos almacenados en un feed determinado en Adafruit.IO, ejecutar un poco de lógica y realizar algunas acciones.

También es un buen momento para copiar su clave Adafruit.IO, que luego será utilizada para permitir que su dispositivo acceda a la base de datos. Navega por Configuración> Ver clave AIO y copia el código de tecla activa. Lo necesitará para su código Arduino (NodeMCU) en los próximos pasos.

Paso 9: Configuración IFTTT

Imagen de la configuración IFTTT

IFTTT es una plataforma gratuita que ayuda a conectar aplicaciones y dispositivos. Puede usarlo para conectar su teléfono inteligente con otros dispositivos, o para compartir datos entre sus servicios web favoritos (como Google, Facebook, Twitter, Instragram, etc.) y otros dispositivos físicos, por ejemplo. ¡Y la mejor parte es que es realmente fácil de usar!

IFTTT usa una lógica “si esto, luego eso”, donde “esto” representa un servicio que activará una acción determinada dada por “eso”. De esta forma, creará pequeños applets que conectan los servicios y dispositivos web. Para el proyecto descrito en este tutorial, hay varias manzanas que se te ocurren. Por ejemplo, los siguientes ejemplos podrían usarse para activar su dispositivo (“esto”):

  • se hace clic en un botón virtual en un teléfono;
  • todos los días en un momento dado;
  • un teléfono inteligente (GPS) llega a una ubicación determinada;
  • se recibe una notificación por correo electrónico.

En nuestros ejemplos, “ese” valor siempre será un enlace a Adafruit.IO, donde los comandos (resultado de un desencadenante dado) se almacenarán, y más tarde serán leídos por el NodeMCU.

Primero tendrá que iniciar sesión en:https://ifttt.com/

Luego instale la aplicación IFTTT en su teléfono inteligente. Puedes encontrarlo en Google Play Store:https://play.google.com/store/apps/details?id=com.ifttt.ifttt

En el sitio web, vaya a Nuevo applet (haga clic en el botón de flecha al lado de su inicio de sesión para acceder al menú).

Paso 10: Applet # 1 – The Lazy Boy

Imagen de Applet # 1 - The Lazy Boy

Para este applet crearemos un botón virtual que activará su gadget IoT. ¡En nuestro caso, significa que no tendrá que levantarse y encender su refrescante de aire! Haga clic en un botón, aguarde y respire profundamente.

Crear el applet en el sitio web:

  • Haga clic en + Esto;
  • Escriba “botón” en el cuadro de texto del servicio Seach y seleccione Botón widget> Presione botón . Tal como se describe en el sitio web de IFTTT, creará un activador que se activará cada vez que presione el botón;
  • Ahora elija + Eso ;
  • Escriba “adafruit” y seleccione Adafruit> Enviar datos a Adafruit IO . Esto enviará datos a un canal de información en su cuenta IO de Adafruit siempre que el activador que configuró previamente ( + Esto ) esté activado;
  • Configure el nombre del feed como “IoT air freshner command” y Data para guardar como “botón”.
  • Termina tu applet y enciéndelo.

Crea un botón virtual en dispositivos Android:

  • Mantenga presionado el fondo. Y elige Widgets ;
  • Búsqueda de IFTTT Small 1 x 1;
  • Ahora elija Enviar datos a IoT air freshner command feed;
  • Se creará un botón con el ícono de Adafruit.

Pruebas:

  • Haga clic en el botón que acaba de crear;
  • En https://io.adafruit.com/, vaya a su feed de comandos de renovación de aire IoT y verifique si se recibió el comando. Mostrará la última vez que se recibió la acción si funciona correctamente.

En pasos adicionales, le mostraré cómo crear el código para su ESP8266 para realizar una acción cuando se recibe el comando.

Paso 11: Applet # 2 – IIIIIIII es Tiiiiiime!

Imagen de Applet # 2 - IIIIIIIIt es Tiiiiiime!

Para este applet, crearemos un disparador de temporizador para su gadget de IoT, que se activará en determinados momentos. Reloj de alarma perfumado listo para despertarte!

Crea el applet en el sitio web:

  • Haga clic en + Esto ;
  • Escriba “Fecha” en el cuadro de texto del servicio Seach y seleccione el widget Fecha y hora> Todos los días a las . Tal como se describe en el sitio web de IFTTT, creará un disparador que se dispara todos los días en un momento determinado;
  • Haga clic en + Eso ;
  • Escriba “adafruit” y seleccione Adafruit> Enviar datos a Adafruit IO. Esto enviará datos a un feed en su cuenta IO de Adafruit siempre que el activador que configuró previamente (+ Esto) esté activado;
  • Configure el nombre del feed como “IoT air freshner command” y Data para guardar como “time”;
  • Termina tu applet y enciéndelo.

Pruebas:

  • Para probar si está funcionando, configure el tiempo de activación por un minuto después de su hora actual. Y espéralo;
  • En https://io.adafruit.com/ , vaya a su feed de comandos de renovación de aire IoT y verifique si se recibió el comando. Mostrará la última vez que se recibió la acción si funciona correctamente.

Paso 12: Applet # 3 – ¡Hogar, dulce hogar!

Imagen de Applet # 3 - Home, Sweet Home!

Para este applet, crearemos un activador de ubicación para su gadget IoT, que se activará cada vez que ingrese a un área específica (su hogar, por ejemplo).Utilizará el servicio de Localización de su teléfono (posición de GPS) para determinar si se acerca a una ubicación específica.

Crear el applet en el sitio web:

  • Haga clic en + Esto ;
  • Escriba “ubicación” en el cuadro de texto del servicio Seach y seleccione widget de ubicación> Ingrese un área . Tal como se describe en el sitio web de IFTTT, creará un activador que se activará cada vez que ingrese a una ubicación específica;
  • Especifique la dirección de su ubicación;
  • Haga clic en + Eso ;
  • Escriba “adafruit” y seleccione Adafruit> Enviar datos a Adafruit IO . Esto enviará datos a un feed en su cuenta IO de Adafruit siempre que el activador que configuró previamente (+ Esto) esté activado;
  • Configure el nombre del feed como “comando IoT air freshner” y datos para guardar como “ubicación”;
  • Termina tu applet y enciéndelo.

Pruebas:

Para probar si funciona, ¡tendrá que caminar un poco! Tienes que salir de la ubicación que especificaste y volver allí. :RE

Paso 13: Applet # 4 – ¡Tiene correo!

Imagen de Applet # 4 - ¡Tienes correo!

Para este applet, crearemos un activador de notificación para su gadget IoT, que se activará cada vez que se reciba un correo electrónico en su cuenta de gmail. Si un tono de llamada y una notificación de vibración no fueran suficientes, ¡ahora puede agregar una notificación de olor para los mensajes entrantes!

Crea el applet en el sitio web:

  • Haga clic en + Esto ;
  • Escriba “gmail” en el cuadro de texto del servicio Seach y seleccione widget de Gmail> Cualquier correo electrónico nuevo en la bandeja de entrada . Tal como se describe en el sitio web de IFTTT, creará un activador que se activará cada vez que llegue un nuevo mensaje a Gmail.
  • Haga clic en + Eso ;
  • Escriba “adafruit” y seleccione Adafruit> Enviar datos a Adafruit IO . Esto enviará datos a un feed en su cuenta IO de Adafruit siempre que el activador que configuró previamente (+ Esto) esté activado;
  • Configure el nombre del feed como “comando IoT air freshner” y datos para guardar como “correo”;
  • Termine su applet y enciéndelo.

Pruebas

  • Para probar si funciona, envíelo y envíe un correo electrónico;
  • En https://io.adafruit.com/ , vaya a su feed de comando de renovación de aire IoT y verifique si se recibió el comando. Mostrará la última vez que se recibió la acción si funciona correctamente.

Paso 14: Código ESP8266

Imagen del código ESP8266

Ahora que sus activadores están configurados, trabajemos en su código ESP8266.

Básicamente, su gadget se conectará a una red wi-fi y esperará hasta que se reciba un nuevo comando en Arduino.IO. Cada vez que se recibe un mensaje, el renovador de aire IoT realizará sus acciones (mover un servo motor para liberar un poco de perfume, cambiar los colores del LED) y regresar para el estado inactivo. El circuito también usará un botón como entrada.

Para cargar su código, seleccione NodeMCU 0.9 (Módulo ESP-12) (si está utilizando un NodeMCU) con una velocidad de carga de 11520 kbps.Desconecte el servomotor del NodeMCU, conecte NodeMCU al puerto USB de su computadora y cargue el código.

Llevará un tiempo (mucho más que completar y cargar un boceto para un Arduino … tenga paciencia …). ¡Ahora es un buen momento para que le des un mecano de instrucciones mientras esperas! :RE

Después de completar la carga, desenchufe el cable USB, conecte el servomotor y alimente su circuito desde un cargador USB.

Código explicado:

Para la configuración de IO de Adafruit, deberá reemplazar el nombre de usuario ( XXXXXXXXXX ) y la tecla io ( YYYYYYYYY ).

Visite adafruit.io, inicie sesión en su cuenta y copie la clave io (tal como se describió en los pasos anteriores).

/************************ Adafruit IO Configuration *******************************/
// visit io.adafruit.com if you need to create an account, or if you need your Adafruit IO key.
#define IO_USERNAME “XXXXXXXXXX”
#define IO_KEY “YYYYYYYYY”

También deberá especificar el SSID y la contraseña de su enrutador Wi-Fi.Reemplace WWWWWWWWWW y ZZZZZZZZZZ para configurar su conexión Wi-Fi.

/******************************* Configuración de WIFI ***************** ********************* /
#define WIFI_SSID “WWWWWWWWWW”
#define WIFI_PASS “ZZZZZZZZZZ”
#include “AdafruitIO_WiFi.h”
AdafruitIO_WiFi io (IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);

 

Se usarán las siguientes bibliotecas (como se describe en los pasos anteriores).Deberá agregarlos en el ide de Arduino antes de compilar el código.

/ ************************ El programa principal comienza aquí ********************* ********* /

#include <ESP6266WiFi.h>
#include <AdafruitIO.h>
#include <AdafruitMQTT.h>
#include <ArduinoHttpClient.h>
#include “Servo.h”

 
Varias cosas (pines y parámetros de LED) se definen antes de la configuración:
#define SERV1 12 // Pin conectado al Servomotor
Servo s1;
#define BUTTON_PIN 14 // Pin conectado al pulsador
#define PIXELS_PIN 15 // Pin conectado a la entrada de datos NeoPixel
#define NUM_LEDS 16 // Número de NeoPixels
#define BRILLO 30
#define PIXEL_TYPE NEO_GRB + NEO_KHZ800 // Tipo de NeoPixels (vea el ejemplo de strandtest).
Anillo Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, PIXELS_PIN, PIXEL_TYPE); // + NEO_KHZ800);
AdafruitIO_Feed * command = io.feed (“iot-air-freshner-command”); // configura el feed ‘comando’
Durante la configuración, el NodeMCU inicializará los LED (apague y encienda), inicie el puerto de comunicación en serie y conéctese a Adafruit.io. Se mostrará una animación mientras intenta conectarse.

Las entradas (pulsador) y las salidas (servomotor) también se configuran durante la configuración.

void setup () {
ring.setBrightness (BRILLO);
ring.begin ();
ring.show (); // Inicializa todos los píxeles a ‘off’
// inicia la conexión en serie </ p> Serial.begin (115200);
// conectarse a io.adafruit.com
Serial.print (“Conectando a Adafruit IO”);
io.connect ();

// configuramos un manejador de mensajes para el feed ‘comando’.
// la función handleMessage (definida a continuación)
// se llamará cada vez que se envíe un mensaje
// recibido de adafruit io.
command-> onMessage (handleMessage);
// espera una conexión
int i = NUM_LEDS – 1;
int color = 255;
// anima los LED mientras espera la conexión
while (io.status () <AIO_CONNECTED) {
Serial.print (“.”);
ring.setPixelColor (i, 0, 0, color);
ring.show ();
i = i – 1;
if (i <0)

{ if (color == 255) {

color = 0; }

else

{ color = 255;

}

i = NUM_LEDS – 1;

} delay (50); }

lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando está conectado

// Estamos conectados

Serial.println ();

Serial.println (io.statusText ());

// mover el servomotor a la posición neutral s1.attach (SERV1);

s1.write (90); retraso (500);

s1.detach (); // establecer el pin del botón como entrada pinMode (BUTTON_PIN, INPUT_PULLUP);

}

El ciclo principal es bastante corto. Verifica si hay datos entrantes de Adafruit.io, y verifica si se presionó el botón. Si uno presiona el botón, envía datos a Adafruit.io.

 

void loop ()

{ // io.run (); es requerido para todos los bocetos.

// siempre debe estar presente en la parte superior de tu ciclo // función. mantiene al cliente conectado a

// io.adafruit.com, y procesa cualquier información entrante.

io.run ();

if(digitalRead(BUTTON_PIN) == LOW) {
command->save(“button”);
}

}

 

Cada vez que se recibe un mensaje, se llama a la función handleMessage .Esta función lee los últimos datos recibidos en una fuente dada en Adafruit.io, y verifica si se recibió una de las cadenas de comandos conocidas (‘botón’, ‘temporizador’, ‘ubicación’ o ‘correo’).

Según el comando recibido, los LED parpadearán con diferentes colores y el servomotor se activará.
// esta función se invoca cada vez que se recibe un mensaje
// de Adafruit IO. estaba adjunto a
// la alimentación en la función setup () arriba.

void handleMessage (AdafruitIO_Data * data) {

lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando se recibe nueva información
String commandStr = data-> toString (); // almacena los comandos entrantes en una cadena

Serial.print (“recibido <-“);
Serial.println (commandStr);

// Estas declaraciones if comparan la variable meteorológica entrante con las condiciones almacenadas, y controlan las NeoPixels en consecuencia.

// si se presionó el botón virtual
if (commandStr.equalsIgnoreCase (“button”)) {
Serial.println (“Botón virtual”);
rotatingPixels (ring.Color (255, 255, 0, 0)); // mostrar animación
lightPixels (ring.Color (255, 255, 0, 0)); // mostrar animación
launch (1);
lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando se recibe nueva información
}

// si es hora
if (commandStr.equalsIgnoreCase (“timer”)) {
Serial.println (“es hora”);
rotatingPixels (ring.Color (0, 0, 255, 0)); // mostrar animación
lightPixels (ring.Color (0, 0, 255, 0)); // mostrar animación
launch (2);
lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando se recibe nueva información
}

// si se alcanzó la ubicación
if (commandStr.equalsIgnoreCase (“ubicación”)) {
Serial.println (“Bienvenido a casa!”);
rotatingPixels (ring.Color (0, 255, 0, 0)); // mostrar animación
lightPixels (ring.Color (0, 255, 0, 0)); // mostrar animación
launch (2);
lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando se recibe nueva información
}

// si tiene correo
if (commandStr.equalsIgnoreCase (“mail”)) {
Serial.println (“¡tienes correo!”);
rotatingPixels (ring.Color (255, 0, 0, 0)); // mostrar animación
lightPixels (ring.Color (255, 0, 0, 0)); // mostrar animación
launch (1);
lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando se recibe nueva información
}
}

//La función auxiliar rotatingPixels fue desarrollada para mostrar una animación.El color se recibe como una entrada para esta variable.
// Rotación completa de Funcion NeoPixels 

void rotatingPixels (uint32_t color) {
for (int j = 0; j <3; j ++) { for (int i = NUM_LEDS-1; i> = 0; i–) {
ring.setPixelColor (i, color);
ring.show ();
delay (50);
ring.setPixelColor (i, 0, 0, 0);
ring.show ();
}
}
}

//la función de inicio se usa para controlar el servomotor. Ciclos su posición de //90 ° a 175 ° una cantidad determinada de veces.
// Actúa el servomotor
void launch (int number) {
s1.attach (SERV1);
para (int i = 0; i <number; i ++) {
s1.write (175);
delay (1000);
s1.write (90);
delay (1000);
}
s1.detach ();
}

 

Código completo Arduino  aqui; iot-air-freshner-code.inoiot-air-freshner-code.ino

 

Desde luego es un proyecto realmente muy interesante  no solo por su posible utilidad sino  porque no enseña la potencia de la herramientas o servios  web disponibles hoy en dia para ayudarnos en nuestros proyectos

¡Siempre tenga en cuenta que este es un prototipo experimental y podría usarse con precaución!

 

 

Fuente  ; instructables.com

Anuncios

Pushing usando Parse desde Netduino a Xamarin.Forms


Parse es un proveedor BaaS (Backend as a service) que, entre su conjunto de características, ofrece un servicio de notificaciones Push . Se usa  ese servicio para enviar las notificaciones push a nuestros  dispositivos. Es bastante sencillo comenzar, en primer lugar, crear una nueva aplicación, tomar las claves (para ambas REST API y .NET), escribir  un código y empezaré a enviar pushes.

Configurando el Netduino

Se puede utilizar  un simple interruptor de contacto magnético(es decir un rele reed)  para detectar cuándo la puerta se abrió o se cerró, en el código se verá algo así como var doorPort = new InputPort(... y un bucle infinito en el que reside la lógica “principal”). while el netduino lee el estado actual del sensor, lo compara con un estado previo y, si hay algún cambio, envía la notificación de inserción utilizando mi biblioteca parse-dotnetmf .

La biblioteca parse-dotnetmf

Para consumir las funciones REST Api de Parse de un Netduino 3, se puede í crear una biblioteca de clientes para facilitar las cosas , esta biblioteca actualmente solo admite el envío de notificaciones push o Parse, pero puede ampliarse fácilmente para admitir todas las demás funciones también , es fácil de usar simplemente cree un cliente var pc = new ParseClient("AppId", "Api Key"); y luego envíe una notificación push así: pc.SendPushToChannel("Hey!"); .

Esta biblioteca está muy inspirada en la biblioteca MicroTweet2 de Matt Isenhower. Utiliza la clase HttpWebRequest , no requiere dependencias adicionales y cabe fácilmente en un tablero de Wi-Fi Netduino 3.

Configuración de la aplicación Xamarin.Forms

Hay algunos pasos que debe seguir para implementar Parse Push en su aplicación Xamarin, le recomiendo que siga los tutoriales que ya existen en el sitio web de Parse. Voy a hacer un resumen rápido de lo que hice (además de tratar de crear mi propio complemento).

En primer lugar, para Windows Phone no hay pasos obligatorios que no sean seguir este tutorial , por otro lado, para Android tendrás que hacer dos cosas:
1. Marque este tutorial pero haga solo la parte de AndroidManifest.xml .
2. Compruebe la muestra en GitHub , en particular la implementación de la clase ParseApplication en el proyecto de Android.

El complemento CrossParse

Como sabemos, cuando queremos ofrecer experiencias específicas de la plataforma desde una aplicación Xamarin.Forms podemos usar o crear un complemento que nos permita resumir las funcionalidades de cada plataforma para interactuar con cada plataforma a través de una API común.

Tratar de hacer un complemento para manejar todas las interacciones con Parse push o resulta que no es tan fácil como se puede pensar al principio, pues  los Componentes Xamarin de Parse para cada plataforma ya son compatibles con las notificaciones push, pero no existe una capa de abstracción que pueda usarse con formularios, sin mencionar que hay algunos pasos especiales necesarios para cada plataforma que debe gestionar explícitamente en cada proyecto específico de plataforma como por ejemplo crear la clase ParseApplication extra en el proyecto de Android, por ejemplo).

Por lo tanto, este complemento no es tan útil o, pero aún ayuda proporcionando la capa de abstracción mencionada e instalando los nugets de Parse por ti. Con este complemento, puede suscribirse / darse de baja de los canales y gestionar las notificaciones mientras el usuario se encuentra en la aplicación. Realmente esperemos que Parse lance un complemento para formularios pronto, ya que es bastante fácil de hacer dado que ya tienen los componentes.

El autor ha realizado un video donde mostra cómo funciona el sistema:

Enlaces

No pretendemos desde este blog  crear una publicación llena de enlaces, así que aquí están los enlaces a los complementos GitHub repos (y su respectiva página NuGet):

Montaje de una impresora 3D paso a paso


Construir una  impresora  3d requiere una cierta cantidad de destreza física, sentido común y una comprensión profunda de lo que está haciendo.

Asi mismo la construcción y operación implica tensiones , por lo que deben tomarse todas las precauciones necesarias . No obstante las impresoras 3D,  funcionan con una fuente de 12V  DC  suministrados por una fuente de alimentación certificada, por lo que no debería haber peligro a tener que involucrarse con solo 12V, pero, tenga en cuenta que todavía puede haber altas corrientes involucradas ! incluso 12V no deberían tomarse a la ligera!.

Además,también las altas temperaturas están involucradas con la impresión 3D, ya que la boquilla de extrusión del extremo caliente puede funcionar alrededor de 230 ° C, la cama calentada corre a 110 ° C y el plástico fundido extrudido saldrá inicialmente alrededor de 200 ° C, por lo que debe prestarse especial cuidado y atención cuando se manejan estas partes de la impresora durante el funcionamiento.

Si esta pensando en adquirir una impresora 3d en Kit  en este post veremos paso a paso como se construye una  Iprusa I3 Max, una de las impresoras mas populares y económicas sobre todo cuando se compra en kit ( entre 100 y 200€)

Si en efecto adquiere un kit , desembale el equipo y compruebe que todas las piezas están en la caja revisando el estado de cada pieza, pues puede haber habido algún tipo de daño durante el envío. Para ayudarle con esto, suele haber una lista de componentes (BOM ) en la caja y cada bolsa de piezas suele estar etiquetadas .
Antes de empezar, con el fin de ahorrar tiempo, ordene especialmente los tornillos y tuercas y por supuesto !no los mezcle!.

Asegúrese de tener las habilidades necesarias para llevar a cabo el trabajo, o recurrir a la ayuda de alguien que lo haga.
Trabaje en una gran mesa o banco firme en un área limpia y bien iluminada.
Este tipo de kits contienen partes pequeñas asi que deberia mantenerlos fuera de los niños menores de 3 años.

1 Montar las varillas de un eje Y

Part ID Required quantity Required parts
NO.5 2 φ10 threaded rod
NO.W14 2 Y axis connect plate
NO.17 6 Spring washer
NO.8 8 M10 Washer
NO.12 8 M10  Nut

Enrosque las tuercas y las arandelas en las dos varillas roscadas M10 por separado.Es importante   respetar tanto el orden  como el numero de elementos ha insertar en la varilla roscada
El orden debe ser el siguiente:

1) Enrosque la placa de conexión del eje Y W14 en el centro.

2) Enroscar la arandela M10> Arandela elástica M10> Tuerca M10> Tuerca M10> Arandela M10 a la izquierda

3) Por la derecha enroscar la arandela M10

El aspecto de como debe quedar es el siguiente:

ejelargo.PNG

Puede ser buena ida para añadir los elementos auxiliarse de un par de gomas de borrar u otros elementos de poco espesor para apoyar ambos lados del eje

 

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

 Montar las 2 varillas lisas

Part ID Required quantity Required parts
NO.3 2 φ8 smooth rod
NO.32 3 LM8UU Linear bearings
NO.18 2 Screw locking ring
  1. Retirar la varilla de 410mm
  2. Deslice 3 Rodamientos lineales sobre las varillas lisas, una varilla lisa con dos piezas y otra con una. Antes de deslizar los rodamientos, asegúrese de que estén limpios.
  3. Deslice el anillo de fijación del tornillo en el extremo de la varilla lisa.

El resultado debería ser similar al de la imagen:

 

barras

3 Montar las placas de soporte del eje Y

Part ID Required quantity Required parts
NO. W9、

W 10

2 Support plate of Y axis(front)
NO. W 11、

W 12

2 Support plate of Y axis(rear)
NO.8 4 M10 washer
NO.12 4 M10 nut
  • Paso 1. Inserte dos barras roscadas en las placas de soporte traseras separadamente a través del orificio de montaje inferior; tenga en cuenta la orden secuencial de dos placas de soporte (como debajo de la imagen)
  • Paso 2. Fije ligeramente las varillas roscadas y la placa de soporte trasera con tuerca M10 y arandela M10.
  • Paso 3.Inserte las barras lisas con el anillo de cerradura encendido en las placas de soporte posteriores a través del agujero de montaje superior; luego fijar ligeramente el anillo de bloqueo.
  • Paso 4. Inserte el otro extremo de las varillas lisas y las varillas roscadas en la parte superior e inferior de los orificios de montaje del soporte delantero.
  • Paso 5. Fije ligeramente las varillas roscadas y la placa de madera con tuerca M10 y arandela M10.

 

 

El resultado debería ser similar al de la imagen

cuerpo.PNG

Consejos: Trate de mantener paralelas las varillas de rosca y las cuatro piezas de madera paralelas. El eje Y debe ser un rectángulo, es decir, las varillas en ambos lados deben ser paralelas, por lo que es la placa frontal y trasera. De lo contrario, causará obstrucción para el cinturón más tarde. Puede usar un calibrador digital para medir.

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

4 Montaje del motor Y

Part ID Required quantity Required parts
NO. W13 1 Y motor fix plate
NO.58 1 Stepper motor
NO.39 1 Pulleys
NO.22 3 M3 x 10mm screw
NO.24 2 M3 x 16 mm screw
NO.15 2 M3 square nut
NO.7 5 M3 washer

Paso 1. Montar la polea en el eje del motor, uno de los tornillos debe ser atornillado en el lado plano del eje. Atorníllelo lo más firmemente posible.(Observe la dirección de la polea )

Paso 2. A continuación, atornille el motor en el soporte del motor Y con 3 tornillos M3 x 10 mm y arandelas M3.

Paso 3. Empuje la lengüeta de sujeción del motor Y en el orificio cuadrado de la placa posterior. A continuación, fije con 2 tornillos M3x16mm, arandelas M3 y tuercas cuadradas M3

El resultado debería ser similar al de la imagen:

motor.PNG

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

5 Construcción de  la plataforma de impresión

Part ID Required quantity Required parts
NO.W15 1 Y platform support
NO.W16 3 Y bearing block
NO.A17 1 Belt mount
NO.47 1 Belt bracket
NO.62 4 Zip ties
NO.23 3 M3 x 12 mm screw
NO.24 6 M3 x 16 mm screw
NO.10 8 M3 nut
NO.15 1 M3 square nut
NO.7 9 M3 washer
    En este paso veremos como montar la pieza horizontal   de grandes dimensiones  donde descansara la cama caliente  que ademas  estara dotada de movilidad. Los pasos  para su montaje son los siguintes:
  • Paso 1. Monte los 3 bloques de rodamientos sobre la placa de soporte de la plataforma con tornillos M3 x 16m y arandela M3 y luego fije los otros extremos con tuercas M3.
  • Paso 2.Instale el soporte de la correa en el soporte de la correa con 2 tornillos M3 x 12mm, arandela M3 y tuerca M3.
  • Paso 3. Monte el soporte de la correa en la placa de soporte de la plataforma con un tornillo M3 x 12mm, una arandela M3 y una tuerca cuadrada M3 del mismo lado con el bloque del rodamiento.(Observe la dirección: La dirección del bracket de la correa es igual que el bloque del cojinete)
  • Paso 4. Coloque el soporte de la plataforma de construcción en el soporte del eje Y y, a continuación, ciérrelo con los tres cojinetes lineales del eje Y juntos.(Observe la dirección: El soporte de la correa está en la línea con la polea del motor Y.)

El resultado debería ser similar al de la imagen:

camacaliente.PNG

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

6 Ensamblaje  del rodillo Y

Part ID Required quantity Required parts
NO.41 2 Ball bearing
NO.37 1 Driven wheel holder
NO.40 1 Driven wheel
NO.24 1 M3 x 16 mm screw
NO.14 1 M3 wing nut
NO.29 1 M4 x25 mm screw
NO.13 1 M4 Lock nut

En realidad este paso es muy sencillo  y lo veremos de forma muy parecido en otros pasos similares del montaje . Básicamente se realiza en  los tres siguientes pasos:

Paso 1. Enrosque el tornillo M3 x 16mm a través del soporte de la rueda impulsada.

Paso 2. Ponga la rueda impulsada con rodamiento de bolas en el soporte de la rueda impulsada; Enrosque el tornillo M4 x25mm a través de la rueda motriz. Bloquee el otro extremo con una contratuerca M4. Es posible que necesite un par de alicates para apretar la tuerca de bloqueo. No  atornille demasiado el eje e pues debe dejar suficiente sitio para que la rueda dé vueltas libremente.

Etapa 4. Monte el soporte del rodamiento montado en las placas de soporte delanteras desde el interior hasta el exterior. Y atornille éste  con una tuerca de mariposa.

El resultado debería ser similar al de la imagen:

rodamiento.PNG

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

7 Montaje del cinturón del eje Y

Part ID Required quantity Required parts
NO.35 1 Timing Belts

En este paso  se trata de darle movilidad al eje Y , dado que se supone ya montado el motor  y la base de la cama caliente

Los pasos son muy sencillos y los veremos repetidos de forma muy similar para el montaje de los otros dos ejes:

  • Paso 1. Inserte un extremo de la correa en el soporte de la ranura. Preste atención a la malla del diente de la correa y la ranura.
  • Paso 2. Enhebre el otro extremo del cinturón a través de la polea del motor Y.
  • Paso 3. Enhebre el cinturón a través de la rueda impulsada. Bloquee la tuerca de mariposa. No apriete demasiado en este paso.
  • Etapa 4. Tense la correa en el soporte del cinturón, tire fuertemente y confirme su longitud, luego corte la pieza de recambio. Inserte el extremo de la correa en el soporte de la ranura
  • Paso 5.Tire la tuerca de mariposa.Consejos: La polea, el soporte del cinturón y la rueda impulsada deben estar al ras para asegurar que la plataforma de impresión se mueva suavemente.

El resultado debería ser similar al de la imagen:

ejez.PNG

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

8 Montaje del fin de carrera del eje Y

Part ID Required quantity Required parts
NO.52 1 End stop
NO.20 2 M2.5 x 16 mm screw
NO.9 2 M2.5 Hex nut
NO.6 2 M2.5 washer

Dentro de los componentes electrónicos, se encuentra el final de carrera o sensor de contacto (también conocido como “interruptor de límite”). Son dispositivos eléctricos  situados al final del recorrido o de un elemento móvil ,( el ejemplo mas claro es una cinta transportadora) , con el objetivo de enviar señales que puedan modificar el estado de un circuito en este caso para cortar la alimentación de motor paso a paso.

Internamente los usados en esta impresora   contiene  interruptores normalmente abiertos (NA), de modo que  al actuar sobre ellos  en la palanquilla abriran el circuito al que estén conectados

En nuestro caso simplemente montaremos  el tope final en la placa de soporte trasera del eje Y , con un tornillo M2.5 x 16mm, arandela M2.5 y tuerca hexagonal M2.5.

 

El resultado debería ser similar al de la imagen:

findecarrera.PNG

 

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

9 Montaje del marco XZ y el panel lateral

Part ID Required quantity Required part
NO. W1-A 1 X-Z frame (up)
NO.W1-B 1 X-Z frame (bottom)
NO.W2 1 Left side frame
NO.W3 1 Right side frame
NO.24 6 M3 x 16 mm screw
NO.15 6 M3 square nut
NO.7 6 M3 washer

En   esta fase simplemente se trata de montar el esqueleto de la impresora siguiendo los siguientes pasos:

  • Paso 1. Atornille el marco X-Z (arriba) y el panel lateral con tornillos M3 x 16mm, arandela M3 y tuercas cuadradas M3.
  • Paso 2. Atornille el marco X-Z (arriba) y el panel lateral con tornillos M3 x 16mm; M3 y tuercas cuadradas M3.  Observe la dirección de los orificios de la perilla LCD. Está a la derecha.

El resultado debería ser similar al de la imagen:

 

esqueleto.PNG

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

10 Ensamblaje del soporte de los  2 Z motores

Part ID Required quantity Required parts
NO.W4 1 Z motor fix plate (left)
NO.W5 1 Z motor fix plate (right)
NO.W6 3 Z motor support plate
NO. W7 1 Z motor support plate
NO.24 10 M3 x 16 mm screw
NO.15 10 M3 square nut
NO.7 10 M3 washer

Para alojar los motores en este paso  vamos a dotar a la estructura anterior de dos pequeños soportes donde irán los otros dos motores :

  • Paso 1.Ensamble Z placa de soporte del motor W6, W7 con placa de fijación del motor Z (izquierda) junto con tornillos M3 x 16 mm, arandela M3 y tuercas cuadradas M3.
  • Paso 2.Ensamble 2 placas de soporte de motor Z W6 con placa de fijación de motor Z (derecha) junto con tornillos M3 x 16 mm, arandela M3 y tuercas cuadradas M3.NOTE EL PEQUEÑO AGUJERO
  • Paso 3. Enrosque los soportes de motor Z montados a la izquierda y las esquinas de rigidez del marco principal con tornillos M3 x 16mm y tuercas cuadradas M3.

El resultado debería ser similar al de la imagen:

soporte motoes.PNG

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

11 Montaje del ventilador

Part ID Required quantity Required parts
NO.49

NO.254M3 x20 mm screw

NO.104M3 nut

NO.74M3 washer

1

1

1

1

Fan

Fije el ventilador en la parte posterior izquierda del bastidor con 4 tornillos M3 x 20, arandela M3 y tuercas M3. Cuidado con la dirección del ventilador. (El lado con la etiqueta está hacia afuera.)

El resultado debería ser similar al de la imagen:

ventilador.PNG

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

12 Esamblaje ejes Y – Z

Part ID Required quantity Required parts
NO.24 6 M3 x 16 mm screw
NO.10 4 M3 nut
NO.15 2 M3 square nut
NO.7 6 M3 washer

En este paso se trata de montar por fin la estructura que soportara  la cama caliente  al resto de estructura de la impresora-

Los pasos  son los siguientes:

  • Paso 1. Coloque el eje Y entre el marco principal. W14 está en la parte delantera del marco.
  • Paso 2. Atornille la placa trasera del eje Y y el panel lateral con tornillos M3 x16mm, arandela M3 y tuercas cuadradas M3.
  • Paso 3. Atornille el bastidor principal a la placa de conexión del eje Y con 4 tornillos M3 x 16mm, arandela M3 y tuercas M3.
  • Paso  4. Atornille las tuercas M10 en el eje Y.)

El resultado debería ser similar al de la imagen:

ensamblaje.PNG

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

13 Montaje fin de carrera eje Z

Part ID Required quantity Required parts
NO.52 1 End stop
NO.20 2 M 2.5 x 16 mm screw
NO.9 2 M 2.5 nut
NO.6 2 M 2.5washer

En este paso se trata de montar el interruptor de fin de carrera del eje z

Monte el tope en la base del motor de eje Z (izquierda) con tornillo M2.5 x 16mm, arandela M2.5 y tuerca hexagonal M2.5.

El resultado debería ser similar al de la imagen:

fin2.PNG

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

14 Montaje de los  2 Z motores

Part ID Required quantity Required parts
NO.58 2 Stepper motor
NO.22 8 M3 x 10mm screw
NO.7 8 M3 washer
  • Paso 1. Enhebre los cables de los motores a través de los agujeros de la fama principal. A continuación, coloque el motor debajo de la base del motor.
  • Paso 2. Atornille los motores con 4 tornillos M3 x 10mm y arandela M3.

El resultado debería ser similar al de la imagen:

motor_ens.PNG

Haga lo mismo con el otro motor Z de acuerdo con los pasos anteriores.

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

15 Montaje de los acoplamientos

Part ID Required quantity Required parts
NO.38 2 Coupling

Se trata  ahora de añadir al motor un acoplador para poder después conectarle un eje  en forma de varilla roscada

Los pasos a seguir son los siguientes:

  •  Fijar los dos acoplamientos en ambos del eje del motor.Tenga en cuenta:La apertura de ambos extremos, uno es de 5mm, otro es de 8mm, conectar el orificio de 5mm al eje del motor.
  • Atornille firmemente el tornillo de la pieza de 5 mm en la parte superior del lado plano del eje del motor; puede ver el límite en el interior del acoplamiento.
  • Haga lo mismo con el acoplamiento del eje del motor derecho de acuerdo con los pasos anteriores.

El resultado debería ser similar al de la imagen:

acople.PNG

En el siguiente vídeo podemos ver paso a paso el montaje de este conjunto:

 

En el siguiente post veremos la finalización del montaje de una impresora 3d tipo  Priusa I3 Pro W

Watimetro con Esp8266


Éste proyecto se aprovecha de que los contadores modernos  inteligentes  incluyen en el frontal un LED que parpadea cada 1kW consumido, de modo que conectando un par de  cables a dicho LED y montando una pequeño circuito   basada en el módulo Wifi ESP8266, podemos medir con bastante precisión el consumo producido.

Obviamente  no es  legal abrir el contador  inteligente de nuestra vivienda para soldar un para de  cables al LED del watimetro, básicamente porque el equipo no nos pertence  ya que las compañías suministradoras  lo suelen  ofrecer en modo alquiler , pero debe saber que  éste tipo de contadores  también lo podemos instalar en nustra vivienda  o local   en el cuadro de distribución de corriente alterna en un carril DIN, normalmente a a la salida del magneto-térmico general  que alimenta a todos los circuitos que haya instalados en  nuestra vivienda.

Por ejemplo el modulo  XCSOURCE® Medidor Energía KWH Kilovatio Hora LCD CA 50Hz Fase Simple Riel DIN 230V BI04   se puede comprar por unos 14€ en  Amazon siendo la instalación de riel DIN estándar de 35mm, y ademas cumpliendo con el estándar DIN EN 50023   y con el ancho del poste sencillo (módulo de 17.5mm), que cumple con el estándar DIN 43881.

El modulo en su configuración Estándar  tiene una ventana de visualización de 7+1 dígitos  (9999999.1kwh) mediante un LCD blanco y negro así, como también una salida con un led verde para el estado de suministro de energía y Rojo para la señal de impulso de energía  como el de los contadores “inteligentes”.

Además , no necesitamos desmontar el modulo para capturar la salida del led de consumo pues tiene una salida SO Estándar donde  podemos conectar el circuito qeu vamos   a ver (respetando la polaridad)

Realmente como vemos en el esquema de conexiones de watimetro este  se alimenta por los terminales  1 y 4 (terminales de arriba)   y su salida ira a lo terminales 3 y 6  que conectaremos a la carga ( es decir el resto de circuitos de nuestro vivienda o local) , y resaltar que precisamente en lo terminales 20 (+) y 21(-)  tenemos la salida standar  SO   de pulsos de 50ms por 1wh

 

El circuito final que el autor propone para mejorar la visualizacion de watimetro  , cuenta de los siguiente elementos:

  • De  un ESP8266-12E como corazón del diseño
  • Una  pantalla OLED
  • Una conexión para programación via conversion usb-serie
  • Una fuente de almentacion de 3.3V
  • Un  circuito de  entrada procedente de la señal SO del watimetro
  • Una entrada adicional opcional para medir consumos individuales de una carga sin watimetro exterior

 

El circuito propuesto es el siguiente:

 

.

 

Hardware

  • ESP8266-12E
  • ACS712 Current Sensor
  • 0.96″ OLED Display
  • BT136 Triac
  • MOC3021 Opto-triac
  • MCT2E
  • LM11173.3V LDO Regulator
  • 5V SMPS Module

 

Software

 

Y a continuación el código fuente  Arduino  que deberíamos grabar en el el ESP8266

 

Codigo Arduino

/***********************************************************************************/
/* This is an simple application to illustrate IoT Home Automation. /
/ This is an example for our Monochrome OLEDs based on SSD1306 drivers /
/ Pick one up today in the adafruit shop! /
/ ——> http://www.adafruit.com/category/63_98 /
/ This example is for a 128×64 size display using I2C to communicate /
/ 3 pins are required to interface (2 I2C and one reset) /
/ Adafruit invests time and resources providing this open source code, /
/ please support Adafruit and open-source hardware by purchasing /
/ products from Adafruit! /
/ Written by Limor Fried/Ladyada for Adafruit Industries. /
/ BSD license, check license.txt for more information /
/ All text above, and the splash screen must be included in any redistribution /
/************************************************************************************/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP8266WiFi.h>
#include / Local DNS Server used for redirecting all requests to the configuration portal /
#include / Local WebServer used to serve the configuration portal /
#include <WiFiManager.h> / https://github.com/tzapu/WiFiManager WiFi Configuration Magic */

#define VOLTAGE_DIVIDER 10.0f
#define REF_VOLT 0.9f
#define RESOLUTION 1024
#define WATTS_THRES 25.0
#define AC_VOLT 230.0
#define VPP_RMS 0.3535
#define BASE_PRICE 125
#define UNITS_UPL_FREQ 30 /* In 2Sec /
#define THEFT_THRESHOLD 15
#define VperAmp 0.1f / See AC712 Datasheet */
#define TRUE 1
#define FALSE 0
#define OLED_RESET 4
#define SSD1306_LCDHEIGHT 64
Adafruit_SSD1306 display(OLED_RESET);

const char* ssid = “IotEM”; /* Device SSID /
String apiKey = “GBH1K3293KFNO8WY”; / Replace with your thingspeak API key /
const char server = “api.thingspeak.com”;

/* Create an instance of the client */
WiFiClient client;
WiFiManager wifiManager;

/* Port Pin Definition */
int InVolPin = A0;
int LoadPin = 14;
int PulsePin = 12;
struct {
unsigned char LdCon: 1;
unsigned char Units:1;
} Flags;

double Voltage, VRMS, AmpsRMS, Watts;
volatile byte interruptCounter = 0;
int Pulses = 0;
int PrevUnits = 0;
int PrevMUnits = 0;
int Units, MeasUnits;

#if (SSD1306_LCDHEIGHT != 64)
#error(“Height incorrect, please fix Adafruit_SSD1306.h!”);
#endif

#define LoadOn() digitalWrite(LoadPin, 1)
#define LoadOff() digitalWrite(LoadPin, 0);

static void DispInfo (void);
static void DispStat (void);
static void SendUnits (void);
static void SendTheftInfo (void) ;
static void SendSMS (int8_t Type);
static void DisplayUnits(void);
static void TheftOccurred (void);

ADC_MODE(ADC_TOUT);

void setup(void) {
Wire.begin(0,2);
Serial.begin(9600);
pinMode(InVolPin, INPUT);
pinMode(LoadPin, OUTPUT);
pinMode(PulsePin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PulsePin), handleInterrupt, FALLING);
Flags.LdCon = FALSE;

display.display();
delay(500);
LoadOn();
ConnectAP();
DisplayUnits();
}

void loop() {
static unsigned long i = 0, j = 0, l = 0;
VRMS = getVPP() * VPP_RMS;
AmpsRMS = VRMS / VperAmp;
Watts = AmpsRMS * AC_VOLT;
if (Watts >= WATTS_THRES)
Flags.LdCon = TRUE;
else
Flags.LdCon = FALSE;
#ifdef DEBUG
Serial.print(Watts);
Serial.print(AmpsRMS);
Serial.println(” Amps RMS”);
#endif
if (Flags.LdCon) {
#ifdef DEBUG
Serial.println(MeasUnits);
Serial.println(Pulses);
Serial.println(l);
#endif
if (MeasUnits == Pulses)
if(++l > THEFT_THRESHOLD) TheftOccurred();
}
if (i++ >= UNITS_UPL_FREQ) { /* End of Day /
Units = Pulses – PrevUnits;
PrevUnits = Pulses;
SendUnits();
i = 0;
}
if (interruptCounter > 0) {
interruptCounter–;
Pulses++;
MeasUnits = Pulses;
l = 0;
#ifdef DEBUG
Serial.print(“Total Units: “);
Serial.println(Pulses);
#endif
DisplayUnits();
}
delay(1000);
}
void handleInterrupt() {
interruptCounter++;
}
static void TheftOccurred(void) {
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(3);
display.setTextColor(WHITE);
display.print(“!THEFT!”);
display.display();
SendTheftInfo();
delay(5000);
LoadOff();
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(2);
display.setTextColor(WHITE);
display.print(” Contact CESCOM”);
display.display();
delay(2000);
ESP.deepSleep(0, WAKE_RF_DEFAULT); / RIP /
for(;;);
}
void DisplayUnits(void) {
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(3);
display.setTextColor(WHITE);
display.print(Pulses);
display.setCursor(90,13);
display.setTextSize(2);
display.setTextColor(WHITE);
display.print(“Kwh”);
display.display();
}
void ConnectAP(void) {
#ifdef DEBUG
Serial.print(“Connecting Wifi: “);
Serial.println(ssid);
#endif
display.clearDisplay(); / For Display /
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(“Connecting”);
display.display();
wifiManager.autoConnect(ssid);
#ifdef DEBUG
Serial.println(“”);
Serial.println(“WiFi connected”);
Serial.println(“IP address: “);
IPAddress ip = WiFi.localIP();
Serial.println(ip);
#endif
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(“Connected”);
display.display();
delay(1000);
}
void SendTheftInfo(void) {
if (client.connect(server,80)) {
String postStr = apiKey;
postStr +=”&field2=”;
postStr += String(1);
postStr += “\r\n\r\n”;
client.print(“POST /update HTTP/1.1\n”);
client.print(“Host: api.thingspeak.com\n”);
client.print(“Connection: close\n”);
client.print(“X-THINGSPEAKAPIKEY: “+apiKey+”\n”);
client.print(“Content-Type: application/x-www-form-urlencoded\n”);
client.print(“Content-Length: “);
client.print(postStr.length());
client.print(“\n\n”);
client.print(postStr);
}
client.stop();
}
void SendUnits(void) {
if (client.connect(server,80)) {
String postStr = apiKey;
postStr +=”&field1=”;
postStr += String(Units);
postStr += “\r\n\r\n”;
client.print(“POST /update HTTP/1.1\n”);
client.print(“Host: api.thingspeak.com\n”);
client.print(“Connection: close\n”);
client.print(“X-THINGSPEAKAPIKEY: “+apiKey+”\n”);
client.print(“Content-Type: application/x-www-form-urlencoded\n”);
client.print(“Content-Length: “);
client.print(postStr.length());
client.print(“\n\n”);
client.print(postStr);
}
client.stop();
}
float getVPP() {
float result;
int readValue; //value read from the sensor
int maxValue = 0; // store max value here
int minValue = 1024; // store min value here
uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue = analogRead(InVolPin);
// see if you have a new maxValue
if (readValue > maxValue)
{
/record the maximum sensor value/
maxValue = readValue;
}
if (readValue < minValue)
{
/record the minimum sensor value*/
minValue = readValue;
}
}
// Subtract min from max
result = (((maxValue – minValue) * REF_VOLT) / RESOLUTION) * VOLTAGE_DIVIDER ;
return result;
}

 

Y por cierto para los incredulos en el siguiente video podemos ver el circuito en funcionamiento

 

Ambilight para nuestro PC


Ambilight es una tecnología diseñada para mejorar la experiencia visual  analizando las señales entrantes y produciendo una  luz lateral ambiental adecuada al contenido que se está visualizando en la pantalla un resultado bastante atractivo , el cual  además de la sensación de estar viendo una pantalla aun mayor.

Hasta hace muy poco este efecto solo se podía conseguir si comprábamos un TV que contara con ese sistema y no había otra opción, pero recientemente  con la aparición de placas con suficiente capacidad computacional, se puede emular gracias al uso por ejemplo de una Raspberry Pi .  Aun mas sencillo  y facil es hacerlo a través una placa Arduino UNO (o incluso Arduino nano), un ordenador,y una tira de 50 leds para iluminar una televisión de 47 pulgadas..!Y todo sin tener que soldar nada!.

 

 

Antes de empezar  con el montaje ,  la tira de  leds   RGB   direccionable es muy importante que este basada en el chip  ws2801 (LEDs WS2801) pues el menos no nos  dará  ningún tipo de problemas usando una Placa Arduino,  siendo ademas la mas utilizada para este tipo de montajes.

Existen tiras basadas en el chips WS2801   en formato “luces de navidad”,pero lo mas habitual es adquirirla en forma de cinta autoadhesiva.

Un ejemplo de tira es  esta  que puede comprarse en Amazon por menos de 27€

tira de leds.png

Una peculiaridad  de esta tiras ,es que se pueden cortar según la longitud que se requieran , así como además que también es posible ampliarlas gracias a  los conectores que llevan en cada extremo, pudiendo  unirse  entre ellas hasta donde se necesite.

conector.png

Asimismo, para alimentar dicha tira  también  necesitaremos aparte  una fuente de alimentación  dimensionada para el números de leds que vayamos a adquirir , como puede ser una fuente de  5v y 2A  (para 50 leds)

La tira de leds por simplicidad la conectaremos a una placa  Arduino UNO , el cual puede adquirirse en Amazon por menos de 10€

Arduino UNO comparado a la versión anterior, usa el  Chip alternativo Atmega 16U2 8U2, lo que quiere decir una tasa más alta de transferencia y memoria.Ademas esta versión cuenta con la interfaz SDA y SCL .

Los datos de LED y las líneas de reloj los conectaremos  a la salida SPI de Arduino,es decir  los datos SPI salen del pin digital 11 y  el reloj es el pin digital 13.

Los LED deben ser alimentados externamente fuera de la linea de +5V de  Arduino 5V, pues podrían estropear el regulador de este . La masa o  tierra, por el contrario, si debe ser conectada a  la masa de Arduino.

Normalmente las tiras de leds WS01  ,suelen tiene 6 cables : tres de ellos lo  conectaremos los pines (11,13 Y GND) del Arduino, y los otros dos  conectaremos  a la fuente de 5V.

La forma de conectarlos todo esto es según el siguiente esquema :

  • El cable VERDE proveniente del pin SD de la tira de leds al pin 11 del Arduino Uno.
  • El cable ROJO proveniente del pin CK  de al tira de leds al  pin 13 del Arduino Uno.
  • El cable NEGRO proveniente del pin  GND de la tira de leds al pin GND del Arduino Uno.
  • El cable AZUL proveniente del pin +5V de al tira de leds lo dejaremos sin conectar
  • El cable Rojo grueso en paralelo con el azul  proveniente de la tira de leds a la conexión +5v de la fuente auxiliar
  • El cable NEGRO en paralelo con el  negro  proveniente del pin  GND de la tira de leds al GND de la fuente auxiliar

arduino.png

Conectamos pues  la tira de leds  por un lado a una fuente de 5V /2amp .  y por el otro a Arduino , por uno de los extremos y las otras 2 o 3 tiras con los adaptadores macho hembra adecuados   a continuación siguiendo la flecha  de las tiras  haciendo un rectángulo que rodeara nuestro monitor o TV .  Evidentemente en uno de los extremos de inicio es donde haremos las conexiones  y todas la demás se harán por medio de los  conectares .

Hemos de tener cuidado ya que uno de los extremos de la tira de luces es pues para conectar la primea tira al arduino y a la fuente :de esta forma, en cada extremo quedan sueltos los cables opuestos (normalmente el cable rojo es el positivo y el azul el negativo.) que conectaremos también entre si para dar alimentación a  los leds ( aunque los conectores también den energía  ya que llevan las 4 conexiones incluida los 5v y GND)

 

 

 SOFTWARE EN EL ARDUINO

Para gobernar , la tira de leds la conectaremos a  un   Arduino   que  ademas  hará de “puente” entre el ordenador host y la tira basado en WS2801 . Los datos de LED se transmiten, y  no se almacenan en búfer, lo que significa que si  hay mas código en Arduino  podrían generar demoras debido a la RAM limitada del Arduino,pero no obstante el algoritmo ejerce cierto esfuerzo para evitar las pérdidas de buffer

 El protocolo de cierre WS2801, basado en retardo, podría desencadenarse inadvertidamente si el bus USB o la CPU  está desbordada con otras tareas. Este código almacena datos entrantes en serie e introduce pausas intencionadas si hay una amenaza del buffer  lleno prematuro.

El costo de esta complejidad es algo que  reduce el rendimiento, pero la ganancia es muy buena  evitando  la mayoría de los fallos visuales  incluso aunque finalmente una función de carga en el bus USB y  host CPU, quede  fuera de  control.

 

Si no lo tenemos, descargaremos el software de arduino (Página oficial de arduino) y lo instalamos.

Conectamos el arduino uno a nuestro pc con el cable usb. Si pide los drivers, se pueden encontrarlo en la carpeta arduino-1.0.4\drivers.

Descargaremos  esta biblioteca:fastled biblioteca descarga, la cual  importaremos  al Arduino IDE.

Ahora toca cargar el sketch para lo cual  descaremos el código Adalight para las luces  aqui 

Descomprimireos el archivo y  añadimos los archivos que acabamos de descargar en la carptea Mis documentos/ Arduino  y ng

Arrancaremos el software de arduino y  configuramos en el ide la placa Arduino en Herramientas –>Placa Arduino Uno ( o la placa que tengamos)   sin  olvidar el puerto de comunicaciones

Iremos a  File> Sketchbook> Arduino> Adalight  y uan vez cargado el sketch debemos ajustar el numero de leds  (88 en nuestro casoo) que  tengamos en la instalación  así como la velocidad máxima (500000 )

 #define NUM_LEDS 88 // Max LED count
#define LED_PIN 11 // arduino output pin – probably not required for WS2801
#define GROUND_PIN 10 // probably not required for WS2801
#define BRIGHTNESS 255 // maximum brightness
#define SPEED 500000 // virtual serial port speed, must be the same in boblight_config

Ahora ya podemos   compilar el software( botón primero que  pone un v de verificar).

 

adalight.PNG

 

Si no ha habido errores ahora podemos subir  el sw pulsando el botón de Upload( flechita a la derecha  en el software de Arduino.

Al contrario de lo que sucede  con el sketch LedlIght donde se iluminan las luces  de 3 colores rojo, verde y azul si todo ha ido bien, si tenemos conectadas los leds al arduino y a la fuente externa, cuando carguemos este  código dentro del Arduino solo lucirá el primer led de la cadena lo cual significará que estamos en buen camino.

IMG_20170221_170329.jpg

 

El código dentro de Arduino es no volátil, así que no se borrará aunque desconecte la tarjeta.

 

Sw en el PC

Una vez tenemos el sw de Adalight en un Arduino, toca instalar  el programa de captura que  envíe las señales correspondiente a nuestro Arduino

Entre los programas de captura  ambibox es el mejor especialmente con  windows 10, ya que no solo  tiene la capacidad para capturar su escritorio  sino de poner un fondo personalizable, convertir la tira en luces psicodelicas en función del audio,fondo variable automático ,plugins, etc

Se  puede encontrar aqui, tanto el software como el add-on para XBMC.

 

Una vez   descargado , durante la instalación se puede seleccionar  la opción de instalación completa ,marcando ademas la opción de descarga e instalación de playclaw.

Empezamos la configuración, pulsamos sobre el botón de mas ajustes :

more

En la parte inferior ,como vemos seleccionaremos como Device  Adalight , elegiremos  el puerto de comunicaciones ( el mismo al que este conectado el Arduino) y en el numero de zonas, coloremos  el numero de leds total que tengamos instalados ( en el ejemplo 88).

Asimismo no olvidar orden de colores,lo cual podemos obtener   fijando un color mediante el selector de Mode:Static Background   ,pinchando en el color ( aparecerá la paleta),pinchando en el check de Use baclight   y seleccionando en el combo order of colors la opción adecuada   hasta que el color de los leds sea similar al de paleta ( en mi caso es BGR)

 

fondo.PNG

IMG_20170221_204134.jpg

En este programa no olvidar  en salvar cada cambio en “Save Setting”  pues si no lo hacemos perderemos cualquier cambio que hagamos

Con las nuevas opciones ya podemos avanzar en la  configuración de nuestra instalación para lo cual seleccionaremos en Mode  :Screen capture

 

capturawindiow.PNG
Acto seguido configuramos la ubicación de los leds, pulsando  sobre SHOW AREAS OF CAPTURE y sobre el asistente de configuración,elegimos si queremos una instalación de 3 lados o 4. También  es importante la cantidad de leds que tenemos en cada lado de la TV especialmente horizontal o verticalmente.
Marcamos asimismo el orden de los leds, de izq->der o de der->izq.
Con esto ultimo ya tenemos nuestro software listo para funcionar

2017-02-21_20h59_23.png.
Este programa además tiene unas opciones muy interesantes, en esta pantalla:

adicional.png

Podemos configurar muchos parámetros de cada led, aplicar correcciones de color y gamma ,brillo ,etc

También podemos activar un servidor web para controlar el software desde el teléfono

servidor

 

El siguiente paso es instalar el add-on para el XBMC.Para ello Lo descompriremo y lo ponemos  en la ruta:”Users/Username/AppData/Roaming/XBMC/addons”

Ahora en el  apartado de add-on ( en el  menú de la izquierda ) se puede configurar un poco el comportamiento, aquí cada cual que lo puede personalizar a su gusto.

Una solución para que funcione a pantalla completa es usando el software playclaw.
Para ello, se pueden  es crear 2 perfiles dentro de ambibox, uno para el escritorio y otro para XBMC.
En este ultimo el sistema de captura que elijo es playclaw de modo que cuando se inicie un video en XBMC  dará la opción de elegir que perfil cargar, de modo que se  puede  elegir el perfil XBMC y asi  cuando se  salga de XBMC se  puede vplber   al perfil de escritorio.
Por supuesto se debe tener corriendo el software playclaw para que esto funcione.

 

Por ultimo  hay  un  modo  que haya las delicias de los que les guste la música  : el modo Color music , el cual permite modular las luces en función  de lo que se este escuchando por el canal de sonido principal.

 

musica.PNG

 

Obviamente si queremos que las luces acompañen a la imagen de video de la pantalla principal el modo de captura de pantalla elegido sera  [Software] Screen capture  y el Método  Windows 8  ( aunque tengamos Windows 10 instalado en nuestro equipo)

windows8.png

Para terminar dejamos dos test de vídeo , que a pantalla completa,  nos pueden servir para testear si nuestro sistema responde correctamente.

 

 

Cómo probar una tira de leds WS2801


Es muy frustrante adquirir  una costosa tira de leds  WS2801 ( ni importa que sea SMD o en formato “luces de navidad”) ,  adherirla y fijarla  con mucho esmero a nuestro TV o monitor ,siguiendo  cuidadosamente los muchísimos tutoriales que hay en Internet (por ejemplo para simular  con esta  el famoso  sistema ambilight ),   y al final no conseguimos obtener nada  quizás porque nuestro hardware esta mal conectado (o tenemos algo estropeado)  o bien no hemos  configurado el sw ,o una mezcla de ambas cosas.

Antes de abandonar veamos  con la ayuda de una placa Arduino Uno conectada a nuestro PC  , vamos  a ver algunas pautas que seguro  nos resuelven el misterio:

 

En primer lugar usaremos una  placa Arduino UNO , para lo cual usaremos sólo  tres cables para  conectar a uno de los  extremos de la tira de leds a Arduino . Las conexiones estandarizadas que haremos sea cual sea la modalidad de la tira de leds son las siguientes:

  • CK de la tira WS2801  al pin GPIO 13(reloj del SPI)
  • SD de la tira WS2801  al pin GPIO11 (SPI MOSI).
  • GND de la tira WS2801 al GND de Arduino
  • +5v   de la tira WS2801  a  una fuente de alimentación aparte de mínimo 2Amp ,5VDC

En algunas tiras formato “luces de navidad” el hilo azul es  GND , el . Verde  es CK  y amarillo es SD ,y el cable rojo es +5V ,  pero esto no es norma porque las tiras SMD   suelen tener un cable rojo para CK, otro verde para SD , el negro para GND  y un violeta para +5V  , lo cual como vemos no sigue para nada la pauta anterior

Aunque no es necesario  también se puede utilizar un Arduino Mega, conectando  reloj del SPI al pin 52   ,  conectando SD al   pin 51 SPI MOSI  y por supuesto las masas.

Es importante destacar que los cables extra rojo y azul son para conectar  5V DC   de al menos 2 Amp ( en función del numero de leds que vayamos a conectar)  lo cual no deberíamos extraer de la placa Arduino sino de una fuente auxiliar DC de 5V    no  olvidando de unir ambas masas ( la de Arduino y de la fuente externa).

En el siguiente esquema podemos ver claramente este montaje.
led_pixels_wiring-diagram.png

Para probar   la tira  de leds    necesitamos si aun no lo tenemos dos herramientas :

  • El IDE de Arduino :Si no lo tiene ya instalado , descargar el Arduino IDE (entorno de desarrollo integrado) de la Web de Arduino. Seleccione la versión del software para su tipo de computadora: Windows, Mac o Linux   Es un poco diferente para cada uno de los tres sistemas operativos.
  • El IDE de Processing:A continuación, descargue el IDE de processing del sitio de procesamiento.Descomprima el fichero y cópielo al  directorio  c:\archivos de programa\ . Es importante que descargue la versión processing 2.2 pues la  versión 3.0  con el codigo Adalight  tendra  errores con él.
El IDE de Arduino y Processing  son  muy similares pero son dos programa muy distintos para diferentes funciones como vamos a  ver

Descargar Adalight ZIP

Por último, visite la página Adalight en Github y descargue el archivo ZIP. El botón de descarga está cerca de la parte superior izquierda de la página:

Después de descomprimir el archivo ZIP, necesitará mover algunos archivos en su lugar.

Si ha ejecutado el Arduino o el IDE de processing  debería haber  dos  correspondientes carpetas llamadas “Arduino” y de “Procesing” dentro de su carpeta personal de “Documents” (o “Mis documentos” en Windows). En ese caso, mover el contenido de la Arduino y procesando carpetas desde el archivo ZIP de Adalight en las carpetas correspondientes de documentos.

Si las carpetas de Arduino y Processing todavía no existen en el sistema,  puede copiar estas desde el archivo ZIP de Adalight a la carpeta de documentos.

Los otros archivos y carpetas en el archivo ZIP pueden ser ignoradas ya  que son para usuarios avanzados y no son esenciales para su uso.

Salga del Arduino y Processing  si se están ejecutando  pues las carpetas recién instaladas no serán visibles hasta la siguiente vez que inicien  estos programas.

Programar Arduino

Para  probar la tira de leds  en caso de que no lo tenga instalado deberá instalar  el IDE de Arduino.Si no lo tiene instalado el IDE de Arduino conecte la placa Arduino al ordenador con un cable USB A-B. Cuando conecta por primera vez, Windows los usuarios le pedirá que para instalar a un controlador.

Iniciar el IDE de Arduino. Después de un momento, debería ver una ventana azul y blanca simple con algunos botones.

En el menú archivo , seleccione Sketchbook,   y elegir  LEDstream. .

En el menú herramientas , seleccione la  placa  luego Arduino Uno (o tipo de cualquier placa Arduino que está usando).

En el menú herramientas , seleccione el Puerto Serial y luego el puerto correspondiente a su placa de Arduino.

Haga clic en el botón de subir cerca de la parte superior izquierda de la ventana:

ledsstreamarduino

Después de que el código sea cargado, si los LEDs están conectados correctamente conectados y la fuente de alimentación está conectada, todos  los LEDs deben encenderse en una secuencia  primero todo todos en flash rojo, luego  verde y después en azul aproximadamente un segundo cada uno, y luego se apagan todos. Se trata de un diagnóstico que indica el LED Arduino están trabajando correctamente y ahora están en espera de datos de que se  envíen desde nuestro ordenador con otro sw.

Gracias    a que el Arduino almacena el programa en memoria no volátil, sólo necesita hacer este proceso de carga una vez, no cada vez que desee utilizar Adalight.

Si los LED no parpadean, asegúrese de que el cableado coincide con la página anterior, y que la fuente de alimentación está conectada.
Si persiste el error  deberíamos probar la salida digital de los  pines 11 y 13 por si estuviesen defectuosas, para lo cual conecte dos leds normales  entre GND  y los pines 11 y 13  y cargue en Arduino el siguiente código de ejemplo:
void setup(){
pinMode(13, OUTPUT);
pinMode(11, OUTPUT);//10 ok 11 ok
}void loop(){digitalWrite(13,HIGH);
digitalWrite(11,LOW);delay(1000);

digitalWrite(13,LOW);
digitalWrite(11,HIGH);

delay(1000);

Al subir el código anterior en nuestro Arduino ,  ya deberían parpadear ambos leds , lo cual sera un claro indicio que la placa Arduino esta bien:

led13

 

Una vez hayamos probado que la placa Arduino esta correcta  con el simple test anterior,  lo que nos queda es volver a cargar el sketch de  probar LedStream cargado inicialmente pues  hay evidencias  de que algún (o algunos) modulo(s)  mal que esta bloqueando el resto de módulos

En el caso de que sólo los primeros pocos LEDs respondan  y ,el resto permanece apagado o parpadea aleatoriamente o incluso no se encienda ninguno, tendrá que estudiar cual de  los módulos esta mal  .

Dentro de cada píxel  hay  una pequeña placa de circuito con el CI WS2801   el led RGB   y algunos componentes adicionales . Si no funciona  el primer píxel apretar las conexiones  donde el cable de cinta se une a la placa  e intente comprobar la conexión ,Si no  funcionase , puede recortar  ese modulo , conectando las conexiones al siguiente  píxel   y seguir la  dirección de conexión ( en el montaje SMD  llevan una flecha  que indica claramente el orden de conexiones)

ws2801

Si consigue que algunos  leds  funcionen pero aún así  algún  led posterior  parpadea ,y fallan después todos los siguientes en la cadena ,también  es muy  posible que ademas  haya algún  otro chip defectuoso  más ,  así que el proceso  anterior lo  deberá repetir  cortando el  led asignado a ese  IC defectuoso y restituyendo las conexiones soldando cablecillos entre el modulo anterior y el siguiente .

img_20170219_222107

Obviamente este proceso tendrá  que repetirlo  hasta que  el test de leds ejecutado desde el  sketch de ledstream haga que se enciendan completamente todos los ledss de un color en las tres secuencias.

Ejecutar el Software de Processing

Este paso debe realizarlo solo cuando el  test de ledStram muestre la secuencia de arranque de rojo, verde y azul apagándose todos después.

Inicie  el programa Processing ejecutando el archivo “C:\Program Files\processing-2.2.1-windows64\processing-2.2.1\processing.exe”. Después de un momento, debería ver una ventana simple de blanca y gris  muy similar al IDE de Arduino.

En el menú archivo , seleccione carpeta de bocetos,  y seleccionar el último primero: Colorswirl.

 

color
Es muy importante anotar el numero de leds( en el ejemplo 88)   tras el primer import:

import processing.serial.*;int N_LEDS = 88; // Max of 65536

Haga clic en el botón Ejecutar cerca de la parte superior izquierda de la ventana: si el Arduino esta arrancado con el sketch (LedStram ) y por supuesto conectada la tira de leds a este  y alimentada con la tensión de 5V  se  debería ver un arco iris colorido de animación sobre los LED.

Si  no pasa nada , entonces usted tendrá que editar el código alrededor de la línea 26, buscando esta declaración:

myPort = serie new (this, Serial.list() [0], 115200);

Necesitaremos cambiar el código  que abre la conexión serie con el Arduino. Una ruta es a través de ensayo y error: tratar  Serial.list() [1], entonces Serial.list() [2]y así sucesivamente, volver a arrancar el programa cada vez para ver si funciona.

Para un enfoque más científico, añadir una nueva línea de código antes de ejecutar el sketch:

println(Serial.list());

Cuando se ejecuta, muestra una lista de todos los puertos serie o dispositivos. Si sabe que dispositivo o puerto COM corresponde al Arduino, puede cambiar la línea original para incluir estos datos.

Por ejemplo, ahora se puede leer:

myPort = serie new (this, “COM6”, 115200);

Obviamente esto será diferente en cada sistema, por lo que dependerá de cada situación..

Si aun tiene dudas ,otra manera de localizar el nombre del puerto, es en el IDE de Arduino, pues  el puerto seleccionado se ve  en el menú Tools→Serial Port antes de programar el chip.

Una vez conseguido este efecto sobre los leds , este resultado es sinónimo que absolutamente todos los leds son direccionables por lo que ya puede usar su conjunto de tiras de leds  para cualquier aplicación con la certeza de que ya  le debería funcionar.
Si planea organizar los LEDs de manera similar a los ejemplos  entonces tendrá nada más que cambiar  el software. Si utiliza un diseño diferente, necesitará realizar algunos ajustes en el código  para identificar su distribución concreta

Como nota ultima :Antes de montar los LEDs detrás del monitor o TV , nunca se olvide de ejecutar el software con los LEDs sueltos en su escritorio para confirmar que todo funciona. !Esto ahorrará tiempo y angustia en el raro evento que un led vuelva a estar mal  tenga que sustituirlo!.

img_20170219_225945

 

Tipos de tiras de leds RGB


Antes de comenzar un proyecto que involucre tiras de leds SMS como por ejemplo la famosa emulación del sistema Ambilight de Philips , probablemente deberíamos identificar las diferencias entre las tiras de leds  comerciales  , las cuales actualmente están basadas en WS2801, WS2811  o en el  WS2812 (también llamadas “strips”).

La mayoría de los proyectos y las descripciones que circulan por la red  están a veces mezclados, y cuando uno se sumerge en tiras de LED por primera vez, estos números de los modelos puede ser un terreno  bastante confuso.

Realmente los números de modelo WS2801, WS2811 y WS2812 se refieren realmente a diferentes “cosas”. El WS2801 y el WS2811 son circuitos integrados de  gestion de LEDs RGB .Estos IC pueden controlar hasta 3 LEDs, típicamente Rojo, Verde y Azul  de modo que  se colocan  cerca  de cada led , así que usted como espectador verá el resultado del color mezclado. El WS2812 sin embargo es un WS2811 colocado dentro de un paquete 5050 LED.,el cual  es un paquete muy común de 3 LED (rojo, verde, azul), en un compartimento  de 5 mm x 5 mm.Es decir,  un  WS2812 es el mismo paquete pero con un controlador adicional de LED WS2811 IC incluido.Resumiendo :un WS2812 combina un LED RGB 5050 con un controlador WS2811

Otras diferencia bien acusada  de los strips  de leds  , es que mientras  las tiras WS2801 necesitaban 4 hilos, las tiras WS2811 / WS2812 sólo necesitan 3 hilos.

En efecto el WS2801 utiliza una línea de reloj independiente, lo cual puede verse como una ventaja,  puesto que  el WS2811 / WS2812 no lo lo requiren.De hecho los modelos de tiras de leds   WS2811 / WS2812 dependen del envío de datos que coincidan con un tiempo muy ajustado.

Adicionalmente  la ventaja de la WS2812, sin embargo, es que la producción de estos combos en tiras es más fácil y por lo tanto más barato, y cada RGB LED toma mucho menos espacio en tiras lo cual también tiene innegables ventajas.

 

A continuación  mostramos  una lista de  chipsets  así como algunas notas sobre ellos  extraída de las hojas de datos o de la experimentación

 

Chipset Supporte libreria Fastled Conexiones Color Bits Data Rate PWM Rate Chipset Power Draw
APA102/DOTSTAR 4 8 ~24Mbps 20khz [email protected]
WS2811 3 8 800kbps 400Hz 5mw / [email protected]
WS2812B/NEOPIXEL 3 8 800kbps 400Hz 5mw / [email protected]
TM1809/TM1812 3 8 800kbps 400Hz 7.2mw / [email protected]
TM1803 3 8 400kbps 400Hz 7.2mw / [email protected]
TM1804 3 8 800kbps 400Hz 7.2mw / [email protected]
WS2801 4 8 1Mbps 2.5kHz 60mw / [email protected]
UCS1903 3 8 400kbps unknown ?
UCS2903 3 8 800kbps unknown ?
LPD8806 4 7 1-20Mbps 4kHz ?
P9813 4 8 1-15Mbps 4.5kHz ?
SM16716 4 8 ? ? ?
TM1829 X 3 8 1.6Mbps/800kbps 7kHz [email protected]
TLS3001 X ? 12 ? ? ?
TLC5940 X 4 12 ? ? ?
TLC5947 X 4 12 ? ? ?
LPD1886 X 3 12 ? ? ?

Chipset power draw es la cantidad de potencia que un solo chip extrae cuando los leds están apagados, pero la alimentación está conectada

 

Veamos  ahora algunas notas  de sus características :

  • Ws2801 : más antiguo, barato,  pero lento (1Mbps).  Es propenso a fallar en longitudes más largas, y sobre todo si la aplicion usa mayores tasas de datos .   

 

ws2801

  • Tm1809 / 1804/1812 : Es muy similar en el protocolo al ws8211 y el coste similar. Utiliza  un IC por 3 rgb leds.Puede haber interferencia de línea (el 1809 controla 3 rgb píxeles, los 1804 controles 1 )
  • Tm1803 : versión más lenta de la tm1809, vendido principalmente por radio shack.
  •  APA102 – Adafruit  los vende estos como dotstars. La velocidad de datos soportada  es muy rápida (llega a 24Mhz) y son  validos para aplicaciones que requieran  alta tasa de actualización. Recomendados estos sobre casi cualquier otra cosa si se busca  actualizaciones frecuentes.
  • Ws2811 / ws2812 / ws2812B -Adafruit vende estos modulos como “neopixels”.  Muy bien precio:(30 leds / m por $ 6, 60 leds / m por $ 11!).  Velocidad de datos es muy lenta (800Kbps).  También  muchas de las tiras sconstan de  1 led, 1 controlador, por lo que puede cortar cada modulo por  cada led. Incluso mejor, es la variante ws2812, que  el  led y el chip van en un solo paquete por lo que puede ser muy compacto (en algunas sitio en internet  todavía lo venden como ws2811 – pero el protocolo es el mismo). Desafortunadamente, su protocolo de datos requiere interrumpir las interrupciones en el avr mientras se escriben los datos, por lo que el uso de estos leds interferirá en procsos interbnos de la CPU como las bibliotecas de IR ,  el uso de i2c  o serial.
  • Lpd8806’s – menos barato (más cerca de $ 16 / meter enviado por 48 / m), pero súper rápido (!llega  a más de 22Mbps!). Además, están emparejados, por lo que implementa un controlador por 2 rgb píxeles. A tener en cuenta que estos sólo realmente  pueden  mostrar 7 bits por canal, ( y no 8,) por lo que sólo puede mostrar 128 niveles diferentes de luz para cada canal de color. API de programación sigue siendo 8 bits, pero el bit bajo no tiene sentido.
  • P9813 – Éste es el chipset usado en la iluminación de Control Total de Cool Neon.
  • UCS1903 – similar a tm1809 / ws2811.  Muy  lento protocolo, pues opsorta cerca de 400kbps.
  • UCS1904 / 2903 – más cerca en el tiempo de la ws2811. Algunas personas lo encuentran interesante
  • SM16716 – no muy conocido .Usa un protocolo complejo.
  • GW6205 – no muy conocido.
  • LPD1886 – un chipset de 3 hilos que es de 12 bits por píxel en lugar del normalmente 7/8-bit por píxel como  la mayoría de los chipsets restantes vistos  hasta ahora
  • Controladores DMX (DMXSIMPLE o DMXSERIAL) – si controla sus leds usando DMX desde un arduino, esto requerida  DMX usando el resto de la #include <DmxSimple.h> led – Tenfg en cuenta que #include <DmxSimple.h> o #include <DmxSerial.h> antes de #include <FastLED.h> para utilizar la salida DMX.
  • Adafruit Pixie leds (PIXIE) – Son led superpotentes de 3W . Tambien con el fin de utilizar estos leds necesita #include <SoftwareSerial.h> antes de #include <FastLED.h> .
  • TM1829 – similar a la TM1809 / WS2811, pero también permite establecer 32 niveles de corriente base para el control de brillo / uso de energía 
  • TLS3001 – Es de 12 bits por color frente a 8 bits para la mayoría de los chipsets 
  • TI TLC5940 – Soporte de color de 12 bits,  que ayuda la la corrección del color, 16 canales llevados por la placa que hace RGBW con las configuraciones como esto.
  • TI TLC5947 como anteriormente, pero con 24 canales

 

 

En resumen su selección   depende del tipo de microcontrolador que vaya a utilizar y de cuáles son compatibles con la aplicación o biblioteca que va a utilizar.

Por ejemplo, en los proyectos basados en Arduino funcionaran  bien con cualquiera de estas  tiras  de led   ya que todo se ejecuta en tiempo real.
Sin embargo cuando se utiliza una Raspeberry  Pi , con un WS2811 / WS2812 puede ser un poco más difícil debido a las necesidades de tiempo estricto. Un Raspberry Pi normalmente ejecuta Linux, que no es un llamado Sistema Operativo en tiempo real, donde la temporización prevista podría ser interrumpida por otras actividades de fondo.

Aunque el WS2801 solía ser el mas  popular, poco a poco  tanto el WS2812 como el  WS2811 parecen a  ser los mas usados quizás porque son mucho mas económicos y requiren menos conexiones .