Luz ambiental de IoT:Lámpara Zerynth
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicaciones y servicios en línea
| ||||
|
Acerca de este proyecto
Los estándares inalámbricos de baja potencia combinados con LED, sensores y dispositivos de comunicación ultraminiatura de bajo costo han convertido la iluminación inteligente en un catalizador para la Internet de las cosas y la automatización del hogar.
En este tutorial veremos cómo controlar una tira de LED NeoPixel vía móvil usando la aplicación Zerytnh, que muestra un selector de color y un menú para la selección de varias animaciones preconfiguradas.
Paso 1:material necesario
El proyecto requiere pocos elementos:
- Zerynth Studio :un entorno de desarrollo de Python multiplataforma y basado en navegador con funciones de sincronización en la nube y administración de placas. No importa qué sistema operativo utilice, ¡Zerynth se ejecuta! Simplemente descargue Zerynth e instálelo (http://www.zerynth.com/zerynth-studio/).
- Aplicación Zerynth: la interfaz móvil Zerynth para objetos inteligentes y sistemas IoT. Cualquier móvil se convertirá en la pantalla de objetos y el mando a distancia. Descarga:http://www.zerynth.com/zerynth-app/
- Escudo Zerynth (disponible aquí:https://store.open-electronics.org/index.php?_route_=Shield_ZERYNTH&search=toi). Una placa multisensores lista para usar que agrega funciones inteligentes a sus objetos de la vida cotidiana
- Arduino DUE o ST Nucleo F401RE o ParticlePhoton . o UDOO o Voltear y recortar de Mikroelektronika . Independientemente de la placa que utilice, Zerynth es compatible con varias placas. Puede encontrar todos los detalles de las placas compatibles aquí:http://www.zerynth.com/zerynth-studio/
- Si no usa Particle Photon (que tiene un módulo wifi integrado), necesita un elemento que conecte la placa a la web, como el escudo wi-fi de Adafruit . Sin embargo, puede utilizar cualquier otro adaptador que monte el chip wifi CC3000 Texas Instruments (http://www.ti.com/product/cc3000).
- una tira (o un anillo) de NeoPixel LED de Adafruit (disponible aquí https://www.adafruit.com/products/1426)
- una lámpara de vidrio o impresa en 3D . La elección es tuya.
Paso 2:Montaje
- Simplemente coloque el Escudo wifi y el Escudo Zerynth en su Arduino (o ST Nucleo o UDOO). Si usa Particle Photon, simplemente colóquelo en los conectores dedicados del Zerynth Shield.
- Conecte los LED de NeoPixel al puerto relacionado en el Zerynth Shield.
- Coloque todas las placas y los LED en la lámpara.
Paso 3:programación
¡Usar Zerynth es muy fácil!
- conecta y "virtualiza" tu tablero (ya se explicó aquí http://bit.ly/Hackster-VIPER-Theremin)
- cree un nuevo proyecto en Zerynth (ya se explicó aquí http://bit.ly/Hackster-IoT-Notes-Printer). Atención:necesitas crear 3 (+1) archivos:main.py, animation.py, template.html (y project.md)
- copiar el código publicado
- enlace ascendente del código en su tablero y listo!
Después de encender la lámpara, esta se conectará automáticamente a la red preestablecida.
Luego simplemente abre la aplicación Zerynth, que irá en busca de objetos Zerynth conectados a la red, selecciona el objeto de interés, en este caso la "Lámpara Zerytnh", ¡y podrás interactuar con él! En este caso, la aplicación Zerynth muestra un selector de color y un menú para la selección de varias animaciones preconfiguradas.
El código es muy simple y tiene muchos comentarios. Si tiene alguna pregunta o sugerencia, no dude en publicarla en los foros de la comunidad de Zerynth:http://community.zerynth.com/
Paso 4:¡Haga que IoT sea más brillante!
¿Te gustó? ¡Pongamos manos a la obra!
El Zerynth Shield presenta un conjunto de sensores y actuadores, que incluyen sensores para detección táctil, LED infrarrojos, micrófono, sensor de luz y sensor de temperatura. Puede comenzar con este código de ejemplo muy simple para desarrollar el comportamiento que prefiera. ¡Utilice Zerynth Shield para ampliar las funcionalidades de la lámpara!
Luigi F. Cerfeda (@L_F_Cerfeda) - Equipo Zerynth
Código
- main.py
- template.html
- animation.py
main.py Python
############################################ ################################ Lámpara Zerynth ## Creado por Zerynth Team 2015 CC # Autores:G. Baldi , D. Mazzei ############################################ ################################# Importar los módulos necesarios Importar los flujos desde bcm43362 Importar bcm43362 como wifi_driver Desde la importación inalámbrica Wi-Fi toishield # e importe el módulo zerynthapp desde zerynthapp import zerynthappstreams.serial () # conéctese a una red wifi intente:wifi_driver.auto_init () print ("Estableciendo enlace ...") wifi.link ("SSID", wifi.WIFI_WPA2, "contraseña ") print (" ¡Ok! ") excepto Exception como e:print (e) # guarda el template.html en la placa flash con new_resourcenew_resource (" template.html ") #### Configuración de ZerynthApp # ::Javascript a Python::# las siguientes funciones serán llamadas cuando se presionen los botones def change_color (r, g, b):animation.setup_color (r, g, b) def change_animation (n):animation.setup_anim (n) def change_speed (n):animation .configurar un nim_speed (n) # configura la aplicación Zerynth con un nombre, una descripción y la plantilla urlvp =zerynthapp.ZerynthApp ("Lámpara Zerynth", "¡Pruébame!", "resource://template.html") # cada vez que Javascript genera eventos las funciones correspondientes se llaman vp.on ("change_color", change_color) vp.on ("change_animation", change_animation) vp.on ("change_speed", change_speed) # ejecuta ZerynthApp! vp.run () # desde que se inicia vp.run un nuevo hilo, ¡puedes hacer lo que quieras aquí abajo! # controlemos ledsanimation.start (D6, 24)
template.html HTML
Lámpara Zerynth
Con tecnología de Zerynth (www.zerynth.com)
animation.py Python
############################################ ################################ Lámpara Zerynth ## Creado por Zerynth Team 2015 CC # Autores:G. Baldi , D. Mazzei ############################################ ################################# Funciones de animación de la lámpara de neopixel import ledstrips como neoimport threadinglock =threading.Lock () # el color Zerynth:) color =[0x54,0x9a, 0x97] anim =0anim_speed =50leds =Nonelayer0 =Nonelayer1 =Nonelayer2 =Nonenpins =0 stop =Falsestopcolor =[0xff, 0xff, 0xff] # crea todas las capas necesarias # definamos algunos coeficientes para una animación suave (media onda sinusal) animation_coefficients =[0, 0.2588190451, 0.5, 0.7071067812, 0.8660254038, 0.9659258263, 1, 0.9659258263, 0.8660254038, 0.7071067812, 0.5, 0.2588190451xff00, =(0x 0xff, 0x7f, 0x00), (0xff, 0xff, 0x00), (0x00,0xff, 0x00), (0x00,0x00,0xff), (0x4b, 0x00,0x82), (0x8f, 0x00,0xff)] def setup_anim ( n):global layer0, layer1, layer2, anim # rellenar capas con sus valores iniciales l ock.acquire () leds.clear () layer2.clear () layer0.clear () layer1.clear () n =n% 4 si n ==0:layer0 [0] =(100,0,0) layer0 [ 1] =(100,0,0) capa0 [2] =(100,0,0) capa1 [0] =(0,100,0) capa1 [1] =(0,100,0) capa1 [2] =(0,100, 0) elif n ==1:para x en el rango (npins // 2):layer0 [x] =(100 // (2 * x + 1), 0,0) layer1 [npins-x-1] =( 0,100 // (2 * x + 1), 0) layer2.clear () elif n ==2:layer1.clear () pstep =0 for x in range (npins):step =x * len (rainbow) / npins rx =(arcoiris [int (paso)] [0] + arcoiris [int (pstep)] [0]) // 4 gx =(arcoiris [int (paso)] [1] + arcoiris [int (pstep)] [ 1]) // 4 bx =(rainbow [int (step)] [2] + rainbow [int (pstep)] [2]) // 4 layer0 [x] =(rx, gx, bx) pstep =step elif n ==3:layer0.clear () layer1.clear () anim =n lock.release () def setup_anim_speed (n):global anim_speed anim_speed =n def setup_color (r, g, b):color global #print (" Color:", r, g, b) color [0] =r color [1] =g color [2] =b # Crea una función para manejar la animación de fondo def animate_background (delay):paso de color global =0 while True:if ( anim ==3 o anim ==0) y no detenido:lock.acquire () layer2.setal l (int (color [0] * animation_coefficients [paso] / 2), int (color [1] * animation_coefficients [paso] / 2), int (color [2] * animation_coefficients [paso] / 2)) lock.release () paso + =1 si paso> =len (animation_coefficients):paso =0 else:lock.acquire () layer2.clear (); layer2.setall (stopcolor [0], stopcolor [1], stopcolor [2]) lock.release () sleep (delay + 500-5 * anim_speed) def animate_foreground (delay):while True:si no se detiene:lock.acquire () si anim ==0:layer0.lshift () layer1.rshift () elif anim ==1:layer0.rshift () layer1.rshift () elif anim ==2:layer0.rshift () layer1.rshift () elif anim ==3:layer0.lshift () layer1.lshift () lock.release () else:lock.acquire () layer0.clear () layer1.clear () lock.release () sleep (delay + 100-anim_speed ) def start (pin, numpins):leds globales, layer0, layer1, layer2, npins npins =numpins leds =neo.LedStrip (pin, numpins) layer0 =neo.LedStrip (pin, numpins) layer1 =neo.LedStrip (pin, numpins) layer2 =neo.LedStrip (pin, numpins) setup_anim (0) setup_anim_speed (50) # iniciar el subproceso de animación de fondo (animate_background, 500) # iniciar el subproceso de animación de primer plano (animate_foreground, 50) while True:# leds claros leds.clear () # ahora, adquiere el bloqueo lock.acquire () # fusiona la primera y la segunda capa leds.merge (layer0) leds.m erge (layer1) # fusiona la capa de fondo solo donde los leds sean transparentes (0,0,0) leds.merge (layer2, neo.first_color) # suelta el candado lock.release () # y enciéndelo! leds.on () sleep (50) def stop (r, g, b):global detenido global stopcolor stopcolor [0] =r stopcolor [1] =g stopcolor [2] =b detenido =True def resume ():global detenido detenido =Falso setup_anim (anim)
Esquemas
Proceso de manufactura