Editing Sensorino

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
El proyecto Sensorino tiene varios sub-proyectos que en conjunto facilitan construccion de redes de sensores / actuadores baratas.  La parte software presenta una solucion completa que sin embargo necesita que el usuario por su cuenta complete y conecte todo el hardware necesario para su caso de uso.
 
  
Esta pagina recoge discusiones y consideraciones tempranas que ocurrierion antes de empezar el desarrollo de software o hardware Sensorino actual.  Actualmente se mantiene la documentacion tecnica del proyecto [https://github.com/Sensorino/Sensorino/wiki en Github en el wiki asociado al sub-proyecto de firmware Sensorino] y los sitios enlazados ahi.  El canal de comunicacion es la lista de correo mencionada en el wiki de Github.
+
== Nombre proyecto ==
  
= Sensorino =
+
ESTADO: PRIMERAS PRUEBAS
 
+
Estado: Software funcional, usa hardware off-the-shelf, desarrollo de placas propias abandonado
+
  
 
Miembros: [[User:Dario_Salvi]], [[User:Bozo]], [[User:Roberto Zabala]], Andrew Zaborowski
 
Miembros: [[User:Dario_Salvi]], [[User:Bozo]], [[User:Roberto Zabala]], Andrew Zaborowski
  
  
= Objetivo =
+
=== Objetivo ===
  
 
construir una red de sensores compatibles con el IDE de Arduino y que cuesten menos que 5 € con todo incluido.
 
construir una red de sensores compatibles con el IDE de Arduino y que cuesten menos que 5 € con todo incluido.
  
== Milestone 0 ==
+
=== Motivación ===
Fecha: 15 Mayo 2013
+
  
* '''HW''':
+
Hay muchas aplicaciones donde lo que queremos es simplemente un medio de enviar y recibir información sencilla sin tener pero que cablear toda el entorno. Un ejemplo es la casa, por ejemplo nos interesa saber que puertas o ventanas están abiertas, queremos apagar o encender tal luz o electrodoméstico etc.
** placa base con ATMega con patas gordas y nrf24 modulo chino, todo hecho a mano. Por lo menos 5 unidades.
+
*** Sensores/actuadores: luz, temperatura, interruptor/botón, Luz RGB, Relé
+
** placa BASE, con conexiones al ordenador (o shield para Arduino). Un par de unidades.
+
** placa PL (powerline) con transformador incluido, logica 5V y DC converter. Por lo menos 3.
+
** Shield para progrmar el ATMega y hacer algún test
+
* '''FW''':
+
** Versión base de librerías Sensorino con algunos servicios hechos
+
** Update del firmware remoto
+
* '''SW''':
+
** Visualización basica
+
** Actuación
+
** comunicación con base
+
** servicios Sensorino base implementados
+
* '''Promo''':
+
** Primer evento Sensorino en Makespace
+
** Primer Wordpress basico montado
+
  
== Milestone 1 ==
 
Fecha: ?
 
  
* '''HW''':
+
=== Antecedentes ===
** Placas PCB hechas y estables para versiones mini, PL y base con ATMega con pines gordos y nrf chino
+
** primeros intentos con SMD
+
** Shield de apoyo para producción rapida de ATMega
+
* '''FW''':
+
** Gestión energía estable y probada
+
** Algun intento para creare un nivel de red, por lo menos un repeater
+
** Update del firmware fiable (?)
+
* '''SW''':
+
** Prototipos de Reglas
+
** Integración con servicios online de SMS y otros
+
* '''Promo''':
+
** Web mas madura con blog, mailing list, Foro (?), Wiki (?), en Esp y Engl
+
** Eventos fuera del Makespace
+
** 4 Demonstradores en casas
+
** Mega demonstrador en Makespace
+
 
+
= Motivación =
+
 
+
Hay muchas aplicaciones donde lo que queremos es simplemente un medio de enviar y recibir información sencilla sin tener  que cablear toda el entorno. Un ejemplo es la casa, por ejemplo nos interesa saber que puertas o ventanas están abiertas, queremos apagar o encender tal luz o electrodoméstico etc.
+
 
+
= Antecedentes =
+
  
 
Hay muchos proyectos para redes de sensores y productos comerciales, pero ninguno hasta ahora verdaderamente barato (es decir <5€), ver [[Plataformas IOT]].
 
Hay muchos proyectos para redes de sensores y productos comerciales, pero ninguno hasta ahora verdaderamente barato (es decir <5€), ver [[Plataformas IOT]].
Line 66: Line 23:
 
Otro proyecto muy parecido es [http://geekboy.it/projects/home_automation/home-automation-design este].
 
Otro proyecto muy parecido es [http://geekboy.it/projects/home_automation/home-automation-design este].
  
= Métodos y técnicas utilizadas =
+
=== Métodos y técnicas utilizadas ===
  
 
Requisitos:
 
Requisitos:
Line 74: Line 31:
 
* se tiene que poder alimentar con una pila de tipo botón o dos AA por un año
 
* se tiene que poder alimentar con una pila de tipo botón o dos AA por un año
  
 +
Estamos buscando alternativas, abajo hay una recopilación de posibilidades.
  
'''Funcionalidades que queremos:'''
+
=== Detalles ===
 
+
* recibe mensajes de la red de sensores a través de un nrf24 (probablemente conectado a través de un Arduino)
+
* almacena historial de datos (BBDD)
+
* permite controlar dispositivos actuadores (encender/apagar etc...)
+
* lanza reglas del tipo if(...) then... mejor si definidas con un lenguaje alto nivel interpretado
+
* almacena "escenarios de uso", por ejemplo: "escenario me voy de vacaciones": todo se apaga y se activa al alarma
+
* que se conecte a servicios web externos tipo "enviar SMS" o "hacer un tweet"
+
* la interfaz:
+
** mejor si web, aunque se pueden pensar alternativas (movil, PC) etc.
+
** que permita ver el estado de los dispositivos
+
** que tenga gráficos para ver tendencias, explorar patrones etc.
+
** que permita "actuar los actuadores" (pulso ON y se enciend la luz)
+
** que permita crear escenarios de uso y activarlos
+
** que permita definir reglas
+
 
+
 
+
  
==Ideas para el Hardware==
 
  
 +
====Low power====
 
* https://www.sparkfun.com/tutorials/309
 
* https://www.sparkfun.com/tutorials/309
 
* http://www.gammon.com.au/forum/?id=11497
 
* http://www.gammon.com.au/forum/?id=11497
Line 100: Line 42:
 
** http://www.kerrywong.com/2012/02/19/atmega328-fuse-bit-setting-for-3-3v-vcc/
 
** http://www.kerrywong.com/2012/02/19/atmega328-fuse-bit-setting-for-3-3v-vcc/
 
** http://www.engbedded.com/fusecalc
 
** http://www.engbedded.com/fusecalc
 +
 
* buck-boost
 
* buck-boost
 
** http://www.ti.com/product/tps63036
 
** http://www.ti.com/product/tps63036
  
 +
====Ideas para el Hardware====
  
===MCU===
+
=====MCU=====
 
De momento nos centramos en un [[ATmega328]]. El coste puede llegar a ser inferior a 1 €.
 
De momento nos centramos en un [[ATmega328]]. El coste puede llegar a ser inferior a 1 €.
 
Placas micro compatibles Arduino (de donde poder copiar el diseño): [http://www.femtoduino.com/spex/femtoduino femtoduino], [http://arduino.cc/en/Main/ArduinoBoardProMini Arduino mini pro]
 
Placas micro compatibles Arduino (de donde poder copiar el diseño): [http://www.femtoduino.com/spex/femtoduino femtoduino], [http://arduino.cc/en/Main/ArduinoBoardProMini Arduino mini pro]
Line 114: Line 58:
 
* Hay un [http://nerdralph.blogspot.ca/2014/01/nrf24l01-control-with-3-attiny85-pins.html tipo] que ha conseguido conectar un ATTiny85 dejando tres pins libres !  Perfecto para hacer llaveros o super mini sensores.
 
* Hay un [http://nerdralph.blogspot.ca/2014/01/nrf24l01-control-with-3-attiny85-pins.html tipo] que ha conseguido conectar un ATTiny85 dejando tres pins libres !  Perfecto para hacer llaveros o super mini sensores.
  
MCU+RF24L01 producto final: http://www.mysensors.org/hardware/micro
+
=====Radio=====
 
+
===Radio===
+
 
Apostamos para el chip [[nRF24L01]] de Nordic.
 
Apostamos para el chip [[nRF24L01]] de Nordic.
 
Nos gusta porqué es lo mas barato que hay en el mercado.
 
Nos gusta porqué es lo mas barato que hay en el mercado.
Line 130: Line 72:
 
* VCC -> VCC
 
* VCC -> VCC
  
====Antenas====
+
=====Consejos para sensores=====
Este [http://hackaday.com/2014/02/28/pcb-antenna-reference-designs/ post en hackaday] puede ser una fuente muy interesante a la hora de hacer antenas
+
 
+
 
+
===good pratices/usefull resource===
+
[http://electricstuff.co.uk/picavrstuff.html#Measuring%20battery%20voltage Measure battey voltage with very low drain]
+
 
+
[http://www.eevblog.com/wiki/index.php?title=PCB_Assemblers pcb assemblers]
+
 
+
[http://www.eevblog.com/wiki/index.php?title=PCB_Manufacturers pcb and stencils assemblers]
+
 
+
===Consejos para sensores===
+
 
+
====Tiempo====
+
 
+
* Los clasicos [http://learn.adafruit.com/dht/overview DHT], (0,6€ en [http://www.aliexpress.com/wholesale?SearchText=dht11&catId=&initiative_id=SB_20140228065622 aliexpress])
+
* Sensores mas resistentes para exteriores como [http://www.adafruit.com/products/1293 este] (13€ [http://www.aliexpress.com/wholesale?SearchText=AM2315+&catId=0&initiative_id=SB_20140228065604 en aliexpress])
+
* Presión como el [http://learn.adafruit.com/bmp085 BMP180], (por 2€ en [http://www.aliexpress.com/wholesale?SearchText=BMP180+&catId=&initiative_id=SB_20140228065933 aliexpress])
+
* Temperatura: supply 1.8 - 5.5 V | rango  -50 +150 C | precision 0.7 | time on 2 ms | corriente 9 uA => LMT85  (0.35 en [http://www.digikey.es/product-detail/en/LMT85DCKT/296-35728-2-ND/3974442 digikey] / [http://www.ti.com/lit/ds/symlink/lmt85.pdf datasheet])
+
  
====Presencia====
+
======Presencia======
  
 
* PIR versión 3V
 
* PIR versión 3V
 
** [http://www.aliexpress.com/item/Lastest-Smart-PIR-Sensor-module-SB00422A-1/1179012332.html este modelo] es una posibilidad: Supply current:DC3V-15V, Current drain :< 1mA, Voltage Output: High/Low level signal :3V
 
** [http://www.aliexpress.com/item/Lastest-Smart-PIR-Sensor-module-SB00422A-1/1179012332.html este modelo] es una posibilidad: Supply current:DC3V-15V, Current drain :< 1mA, Voltage Output: High/Low level signal :3V
  
====Movimiento====
 
  
* Accelerometros (a partir de 2€ e [http://www.aliexpress.com/wholesale?SearchText=ADXL335&catId=&initiative_id=SB_20140228073444 aliexpress])
+
======Otro======
* [http://learn.adafruit.com/tilt-sensor/ Tilt], con estos se pueden crear sensores de movimiento baratos (por pocos centimos en [http://www.aliexpress.com/wholesale?SearchText=tilt+ball+switch&catId=&initiative_id=SB_20140228074112 aliexpress])
+
 
+
====Plantas====
+
* [http://en.wikipedia.org/wiki/Soil_Moisture_Sensors sensore de moisture], puede ser [http://www.instructables.com/id/Garduino-Gardening-Arduino/step4/Build-Your-Moisture-Sensor/ muy sencillo] o [http://gardenbot.org/howTo/soilMoisture/#The_local_circuit_-_simple_voltage versión mejorada] para que sufra los efectos de electrolisis
+
 
+
====Otras cosas====
+
  
 
* Una [http://www.atmel.com/images/doc2508.pdf Application Note] de Atmel sobre deteccion de zero-crossing en la corriente AC - se usaria si quisiesemos graduar el brillo de luces, y es un esquema muy simple comparado con el tipico basado en los TRIAC.
 
* Una [http://www.atmel.com/images/doc2508.pdf Application Note] de Atmel sobre deteccion de zero-crossing en la corriente AC - se usaria si quisiesemos graduar el brillo de luces, y es un esquema muy simple comparado con el tipico basado en los TRIAC.
  
==Ideas para el SW==
+
====Ideas para el SW====
  
 
Queremos la compatibilidad con Arduino, por eso nos centramos en chips AVR.
 
Queremos la compatibilidad con Arduino, por eso nos centramos en chips AVR.
Line 188: Line 105:
  
 
A esto podemos añadir:
 
A esto podemos añadir:
* [http://bsonspec.org/ binary Json]
+
 
* [http://mqtt.org/new/wp-content/uploads/2009/06/MQTT-SN_spec_v1.2.pdf MQTT-SN]
+
* enrutamiento (VER [[Apuntes sobre enrutamiento con nrf24l01]]):
 +
** [http://cnm.tagus.inesc-id.pt/software/simple-ant-routing-algorithm-sara SARA]
 +
** [http://maniacbug.github.io/RF24Network/index.html algoritmo hecho para nrf24 de maniacbug] con [http://maniacbug.wordpress.com/2012/03/30/rf24network/ su entrada de blog]
 +
** [http://forum.arduino.cc/index.php?topic=187692.0 este otro] que parece mas prototipal
 +
** [https://github.com/mattibal/meshnet este] que parece muy bueno!
 +
** [http://www.atmel.com/tools/LIGHTWEIGHT_MESH.aspx?tab=overview la librería de ATmel?]
 
* algoritmo de encriptación: [http://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm TEA] o su version mas avanzada [http://en.wikipedia.org/wiki/XTEA XTEA]
 
* algoritmo de encriptación: [http://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm TEA] o su version mas avanzada [http://en.wikipedia.org/wiki/XTEA XTEA]
 
* IP en Arduino con [http://playground.arduino.cc/Code/SerialIP SLIP]?
 
* IP en Arduino con [http://playground.arduino.cc/Code/SerialIP SLIP]?
Line 203: Line 125:
 
* [www.souliss.ne Souliss] aunque parece suportar solo Ethernet o Wifi
 
* [www.souliss.ne Souliss] aunque parece suportar solo Ethernet o Wifi
  
== Ideas para la red==
 
  
Enrutamiento (VER [[Apuntes sobre enrutamiento con nrf24l01]]):
+
'''Funcionalidades que queremos:'''
* [http://forum.diyembedded.com/viewtopic.php?f=4&t=3590 gente que discute sobre el tema]
+
* [http://cnm.tagus.inesc-id.pt/software/simple-ant-routing-algorithm-sara SARA]
+
* [http://maniacbug.github.io/RF24Network/index.html algoritmo hecho para nrf24 de maniacbug] con [http://maniacbug.wordpress.com/2012/03/30/rf24network/ su entrada de blog]
+
* [http://forum.arduino.cc/index.php?topic=187692.0 este otro] que parece mas prototipal
+
* [https://github.com/mattibal/meshnet este] que parece muy bueno!
+
* [http://www.atmel.com/tools/LIGHTWEIGHT_MESH.aspx?tab=overview la librería de ATmel?]
+
  
=Avances=
+
* recibe mensajes de la red de sensores a través de un nrf24 (probablemente conectado a través de un Arduino)
 
+
* almacena historial de datos (BBDD)
== Estado Tareas ==
+
* permite controlar dispositivos actuadores (encender/apagar etc...)
 
+
* lanza reglas del tipo if(...) then... mejor si definidas con un lenguaje alto nivel interpretado
=== HW ===
+
* almacena "escenarios de uso", por ejemplo: "escenario me voy de vacaciones": todo se apaga y se activa al alarma
* elegir el programador adecuado
+
* que se conecte a servicios web externos tipo "enviar SMS" o "hacer un tweet"
** responsables: Dario
+
* la interfaz:
** estado: pruebas hechas con distintos chips, ninguno me ha convencido al 100% todavia
+
** mejor si web, aunque se pueden pensar alternativas (movil, PC) etc.
 
+
** que permita ver el estado de los dispositivos
* crear la versión PL (power line)
+
** que tenga gráficos para ver tendencias, explorar patrones etc.
** responsables: ?
+
** que permita "actuar los actuadores" (pulso ON y se enciend la luz)
** estado: ?
+
** que permita crear escenarios de uso y activarlos
 
+
** que permita definir reglas
* crear sensor temperatura
+
** responsables: Dario
+
** estado: algunas opciones recopiladas: termistor, pull ups, DHT. Falta montar uno.
+
 
+
* crear Rele
+
** responsables: ?
+
** estado: ?
+
 
+
* crear interruptor/botón
+
** responsables: ?
+
** estado: ?
+
 
+
* crear luz RGB
+
** responsables: Dario
+
** estado: una versión ya existe, falta decidir si activarla con botón
+
 
+
=== FW ===
+
* adaptar el protcolo a servidor
+
** responsables: Dario, Bozo
+
** estado: hecha implementación con JSON, parser JSON rudimental para Arduino completo
+
 
+
* crear servicios para Temperatura, botón/interruptor, luz RGB
+
** responsables: Dario
+
** estado: codigo completo, falta testear
+
 
+
* Bootloader, crear hardware Arduino compatible
+
** responsable: Andrew
+
** estado: en marcha
+
 
+
=== SW ===
+
* crear primeros ejemplos
+
** responsables: Bozo
+
** estado: en marcha
+
 
+
=== Promo ===
+
* comprar hosting PHP
+
** responsables: Bozo (y los demas dan dinero)
+
** estado: 0
+
 
+
* montar primer Wordpress
+
** responsables: ? (Dario se ofrece)
+
** estado: nada
+
 
+
== Log pruebas y reuniones ==
+
  
===Pruebas 14/9/2013===
+
====Avances====
 +
=====Pruebas 14/9/2013:=====
  
 
Hemos testeado 4 módulos [[nRF24L01]] con dos Arduinos, uno ha fallado, pero los otros tres se ha conectado etnre si.
 
Hemos testeado 4 módulos [[nRF24L01]] con dos Arduinos, uno ha fallado, pero los otros tres se ha conectado etnre si.
Line 289: Line 161:
  
  
===Pruebas 26/9/2013===
+
=====Pruebas 26/9/2013:=====
  
 
Hemos montado el Atmega328p en la breadboard.
 
Hemos montado el Atmega328p en la breadboard.
Line 320: Line 192:
 
Todos: resolver el problema de los 8MHz. Comprar socket para los chips. Construir primer prototipo.
 
Todos: resolver el problema de los 8MHz. Comprar socket para los chips. Construir primer prototipo.
  
===Pruebas 3/10/2013===
+
=====Pruebas 3/10/2013=====
  
 
A veces el ATMega cuando envía un paquete imprime dos tipos de mensajes distintos:
 
A veces el ATMega cuando envía un paquete imprime dos tipos de mensajes distintos:
Line 369: Line 241:
  
  
===Pruebas 26/10/2013 ===
+
=====Pruebas 26/10/2013:=====
  
 
Hemos probado a alimentar el ATMega con 3.3 V -> no funciona. A partir de 4.5 parece que funcione.
 
Hemos probado a alimentar el ATMega con 3.3 V -> no funciona. A partir de 4.5 parece que funcione.
Line 375: Line 247:
  
  
===Pruebas 27/10/2013===
+
=====Pruebas 27/10/2013:=====
  
 
Bozo consigue enviar datos por serial a partir de una tensión de 2.3 voltios.  
 
Bozo consigue enviar datos por serial a partir de una tensión de 2.3 voltios.  
Line 389: Line 261:
  
  
===Pruebas 28/10/2013===
+
=====Pruebas 28/10/2013:=====
  
 
Roberto también consigue hacerlo funcionar. No he identificado el problema del otro día. Probado con dos pilas AA a 2.8v sin ningún problema. Con la salida de 3.3v de Arduino también funciona.
 
Roberto también consigue hacerlo funcionar. No he identificado el problema del otro día. Probado con dos pilas AA a 2.8v sin ningún problema. Con la salida de 3.3v de Arduino también funciona.
Line 400: Line 272:
  
  
===Pruebas 23/11/2013===
+
=====Pruebas 23/11/2013:=====
  
  
Line 460: Line 332:
 
   000225652886a777078500125b5755bb87d967762000000000000000010054330000000000000000000000000000000000000000000000000000000000000000
 
   000225652886a777078500125b5755bb87d967762000000000000000010054330000000000000000000000000000000000000000000000000000000000000000
  
===Pruebas del 11/12/2013 al 17/12/2013===
+
=====Pruebas del 11/12/2013 al 17/12/2013:=====
  
 
He hecho una larga serie de pruebas con distintas combinaciones inlcuyendo:
 
He hecho una larga serie de pruebas con distintas combinaciones inlcuyendo:
Line 487: Line 359:
 
* un condensador de capacidad mayor no mejora las cosas, de hecho las empeora
 
* un condensador de capacidad mayor no mejora las cosas, de hecho las empeora
  
===Pruebas 23/1/2014===
+
=====Pruebas 23/1/2014:=====
  
 
Despues de haber perdido la cabeza con la librería de Maniacbug, y con la variante de Copeland, probé la [http://www.airspayce.com/mikem/arduino/NRF24/ librería de Mike] y me funcionó perfectamente.
 
Despues de haber perdido la cabeza con la librería de Maniacbug, y con la variante de Copeland, probé la [http://www.airspayce.com/mikem/arduino/NRF24/ librería de Mike] y me funcionó perfectamente.
Line 503: Line 375:
 
* analizando la traza en el puerto serie del Arduino se puede ver que alrededor de 1/3 o 1/4 de los paquetes no reciben ACK
 
* analizando la traza en el puerto serie del Arduino se puede ver que alrededor de 1/3 o 1/4 de los paquetes no reciben ACK
  
===Pruebas 26/1/2014===
+
=====Pruebas 26/1/2014:=====
  
 
Pruebas de Andrés (Andrew) tras recibir unos clones de Arduinos Pro Mini y módulos nRF24L01+ de China y soldar las conecciones entre los módulos y los Arduinos.  Los Arduinos son de 5V y no tienen salidas 3.3V, se han usado 3 diodos en cada modulo para que este pueda ser alimentado con 5V, el voltaje baja unos 1.9V.  Los demas pines del nRF24 son compatibles con 5V.
 
Pruebas de Andrés (Andrew) tras recibir unos clones de Arduinos Pro Mini y módulos nRF24L01+ de China y soldar las conecciones entre los módulos y los Arduinos.  Los Arduinos son de 5V y no tienen salidas 3.3V, se han usado 3 diodos en cada modulo para que este pueda ser alimentado con 5V, el voltaje baja unos 1.9V.  Los demas pines del nRF24 son compatibles con 5V.
Line 515: Line 387:
 
En otra ocasion corrijo algo en el codigo y empiezo a meter en github.  El objetivo por ahora es que ese mismo codigo lo pueda usar el programa de arranque optiboot, para poder flashear las placas por radio.
 
En otra ocasion corrijo algo en el codigo y empiezo a meter en github.  El objetivo por ahora es que ese mismo codigo lo pueda usar el programa de arranque optiboot, para poder flashear las placas por radio.
  
===Pruebas 4/2/2014===
+
=====Pruebas 4/2/2014:=====
  
 
Andres consigue subir por radio el programa "Blink" de los ejemplos de Arduino mediante una version modificada de optiboot.  Importante: La comunicacion todavia no es fiable y la mayoria de la veces la programacion falla en algun momento del proceso.
 
Andres consigue subir por radio el programa "Blink" de los ejemplos de Arduino mediante una version modificada de optiboot.  Importante: La comunicacion todavia no es fiable y la mayoria de la veces la programacion falla en algun momento del proceso.
Line 529: Line 401:
 
El problema de resetear el controlador "remoto" es complicado porque cada programa subido tendra que tener la posibilidad de reiniciar la placa por radio.  Si en algun momento se sube codigo que no lo puede hacer (p.e. se cuelga), habra que reiniciarlo posiblemente con el interruptor general de la luz, en caso de alimentacion de la red, y en caso de alimentacion por bateria, a mano.  Se puede usar el Watchdog Timer del AVR para reducir la probabilidad de que pase eso.
 
El problema de resetear el controlador "remoto" es complicado porque cada programa subido tendra que tener la posibilidad de reiniciar la placa por radio.  Si en algun momento se sube codigo que no lo puede hacer (p.e. se cuelga), habra que reiniciarlo posiblemente con el interruptor general de la luz, en caso de alimentacion de la red, y en caso de alimentacion por bateria, a mano.  Se puede usar el Watchdog Timer del AVR para reducir la probabilidad de que pase eso.
  
===Pruebas 5/2/2014===
+
=====Pruebas 5/2/2014:=====
  
 
He subido el código a mi repositorio github: https://github.com/dariosalvi78/Sensorino
 
He subido el código a mi repositorio github: https://github.com/dariosalvi78/Sensorino
Line 547: Line 419:
 
* hay tres tipos de "servicios": los en broadcast, para cuestiones de configuración de la red, los en unicast hacia la base, para enviar datos de medidas, y los unicast hacia los sensorinos, para activar cosas (tipo interruptores, actuadores etc.)
 
* hay tres tipos de "servicios": los en broadcast, para cuestiones de configuración de la red, los en unicast hacia la base, para enviar datos de medidas, y los unicast hacia los sensorinos, para activar cosas (tipo interruptores, actuadores etc.)
  
===Pruebas 7/2/2014===
+
=====Pruebas 7/2/2014:=====
  
 
Corregidos los problemas con fallos aleatorios durante programacion de Arduino por nRF24L01 pero hace falta comprobar si otros modulos se comportan de la misma manera ya que uno de los errores era muy raro - ocurria siempre que habia exactamente tres transmisiones seguidas y luego recepcion.
 
Corregidos los problemas con fallos aleatorios durante programacion de Arduino por nRF24L01 pero hace falta comprobar si otros modulos se comportan de la misma manera ya que uno de los errores era muy raro - ocurria siempre que habia exactamente tres transmisiones seguidas y luego recepcion.
Line 557: Line 429:
 
* a 9m a traves de dos paredes fallaba en promedio en el momento de haber subido 30-40% del programa, que seria despues de haber transmitido ~150-200 paquetes sin fallo, o sea que la tasa de error todavia debe ser baja (~1%).
 
* a 9m a traves de dos paredes fallaba en promedio en el momento de haber subido 30-40% del programa, que seria despues de haber transmitido ~150-200 paquetes sin fallo, o sea que la tasa de error todavia debe ser baja (~1%).
  
===Pruebas 13/2/2014: sleep, pin interrupt y watchdog===
+
=====Pruebas 13/2/2014:=====
  
 
Estoy intentando poner el PIC a dormir y despertarlo con el watchdog o los interrupts externos.
 
Estoy intentando poner el PIC a dormir y despertarlo con el watchdog o los interrupts externos.
Line 566: Line 438:
 
En principio podríamos llegar a tener un consumo de solo [https://www.sparkfun.com/tutorials/309 1uA] !
 
En principio podríamos llegar a tener un consumo de solo [https://www.sparkfun.com/tutorials/309 1uA] !
  
'''Wakeup con watchdog''': hay muchas guias que explican como funciona [http://citizen-sensing.org/2013/07/arduino-watchdog/ aqui], [http://www.fiz-ix.com/2012/11/low-power-arduino-using-the-watchdog-timer/ aqui] o [http://forum.arduino.cc/index.php/topic,48626.0.html aqui].
+
'''Wakeup con watchdog''': hay que programar una ISR
 
+
  ISR( WDT_vect ) {
Primero hay que habilitar el watchdog y su interrupción y que no resetee el PIC:
+
  //codigo aquí
 +
  }
 +
y habilitar el watchdog y su interrupción y que no resetee el PIC:
  
 
   MCUSR &= ~(1 << WDRF);
 
   MCUSR &= ~(1 << WDRF);
 
   WDTCSR |= (1 << WDCE) | (1 << WDE);
 
   WDTCSR |= (1 << WDCE) | (1 << WDE);
   WDTCSR = (1<< WDP1) | (1 << WDP2);
+
   WDTCSR = (1<< WDP0) | (1 << WDP3);
 
   WDTCSR |= _BV(WDIE);
 
   WDTCSR |= _BV(WDIE);
  
Explicación: el registro WDTCSR se encarga de configurar el watchdog. Hay 8 bits: WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0, según los configuremos obtendremos [http://forum.arduino.cc/index.php/topic,48626.0.html distintos comportamientos]:
 
  WDE  WDIE      Mode              Action on Time-out
 
    0    0      Stopped                  None
 
    0    1      Interrupt              Interrupt
 
    1    0    System Reset              Reset
 
    1    1  Interrupt System Reset interrupt then go to system reset
 
Los tiempos se setean con el prescaler (WDP3 WDP2 WDP1 WDP0):
 
  WDP3 WDP2 WDP1 WDP0  Time-out at
 
    0    0    0    0    16 ms
 
    0    0    0    1    32 ms
 
    0    0    1    0    64 ms
 
    0    0    1    1    0.125 s
 
    0    1    0    0    0.25 s
 
    0    1    0    1    0.5 s
 
    0    1    1    0    1.0 s
 
    0    1    1    1    2.0 s
 
    1    0    0    0    4.0 s
 
    1    0    0    1    8.0 s
 
 
Y luego hay que programar una ISR:
 
  ISR( WDT_vect ) {
 
  //codigo aquí
 
  }
 
 
en la ISR conviene deshabilitar el watchdog para que no toque los huevos hasta que nos durmamos otra vez
 
en la ISR conviene deshabilitar el watchdog para que no toque los huevos hasta que nos durmamos otra vez
  
Line 684: Line 535:
 
   14-19 -> 8-13  ->  1
 
   14-19 -> 8-13  ->  1
  
===Pruebas 18/2/2014===
+
=====Pruebas 18/2/2014:=====
 
+
 
Intentando desesperadamente usar mi board FTDI con una placa con ATMega 328 que he preparado.
 
Intentando desesperadamente usar mi board FTDI con una placa con ATMega 328 que he preparado.
 
Mi board FTDI es como [http://www.miniinthebox.com/es/programa-ftdi-basico-downloader-usb-a-ttl-ft232-para-arduino_p903425.html?currency=EUR&litb_from=paid_adwords_shopping&gclid=COje3dfj1rwCFSEHwwoddUoAIg esta], está basada en el chip FT232 como la de Sparkfun, pero tiene que puedo elegir 5 y 3 voltios (por eso la preferí a otras).
 
Mi board FTDI es como [http://www.miniinthebox.com/es/programa-ftdi-basico-downloader-usb-a-ttl-ft232-para-arduino_p903425.html?currency=EUR&litb_from=paid_adwords_shopping&gclid=COje3dfj1rwCFSEHwwoddUoAIg esta], está basada en el chip FT232 como la de Sparkfun, pero tiene que puedo elegir 5 y 3 voltios (por eso la preferí a otras).
Line 691: Line 541:
  
 
Que estará pasando?
 
Que estará pasando?
 
===Pruebas 23/2/2014===
 
[[File:Lights.png|thumb|Diseño de base de un sensorino con reles listo para la cortadora laser del espacio]]
 
[[File:Sensorino-acrilico.jpg|thumb|Base para montar placas de reles, arduino, nRF24, alimentador 220VAC -> 5V y regletas para coneccion de cables]]
 
 
La semana pasada consegui mejorar bastante la resistencia del bootloader a fallos de transmision y puse en el repositorio de optiboot todas las [https://github.com/balrog-kun/optiboot instrucciones de compilacion y uso].  Con este nivel de resistencia a fallos ya lo veo listo para usar en el desarrollo de software.  Hice pruebas a distancia de 12m entre los dos enchufes mas lejanos de mi casa, y a traves de muchas paredes.  La fiabilidad se puede mejorar un poquito mas cambiando algunos parametros con el coste de hacer la comunicacion mas lenta, pero la distancia maxima ahora (es decir las condiciones minimas del entorno de radio) creo que es cercana a distancia maxima absoluta a la que dejan de llegar paquetes con el hardware dado y ninguna modificacion de software lo puede remediar.
 
 
He investigado lo de antenas PCB por un lado para entender un poco para cuando posiblemente diseñemos placas Sensorino propias, por otro lado para entender las propiedades de las antenas que usan los modulos que utilizamos por ahora (los mas populares de ebay).  Texas Instrumens tiene una [http://www.ti.com/lit/an/swra161b/swra161b.pdf guia] para seleccion de antenas PCB.  De las que se presentan, la de nRF24 es mas parecida a la Meandered Inverted-F Antena (MIFA), la que se describe en mas detalle en [http://www.ti.com/lit/an/swra117d/swra117d.pdf este doc].  El patron de radiacion es bastante mas irregular que en las antenas simples tipicas, se acerca mas a isotropico pero es tan complejo que seria dificil orientar las antenas exactamente para mejorar distancias.  El doc tambien dice que en los interiores la cantidad de reflexiones hace que la polarizacion no sea importante, la conclusion es que no vale pena tomar en cuenta ni la polarizacion ni orientacion de las placas.
 
 
Con la ayuda de Mac hemos preparado una base para el sensorino de control de luces en mi casa.  El fichero fuente es un SVG de Inkscape con dos capas, la de corte y la de grabado, se podria usar con madera (contrachapado) o acrilico.  Todos los elementos se han convertido a Paths para que el MoshiDraw lo lea correctamente.  Estoy progresivamente montando los elementos en la placa cortada en acrilico.  El tamaño es el de una caja de distribucion de las que estan en las paredes.
 
 
Hoy implemente la opcion FORCE_WATCHDOG=1 en el optiboot con la cual el watchdog queda habilitado antes de arrancar la aplicacion de usuario, con el timeout de 4s.  Esta opcion es la ultima que considero necesaria para desarrollo remoto.  La aplicacion puede deshabilitar o reconfigurar el watchdog si lo necesita para otros usos, pero es recomendable que no lo toque, para que la placa automaticamente vuelva al bootloader en caso de que la aplicacion falle/muera/no responde etc. para no tener que reiniciarla a mano lo que podria ser dificil o imposible si es empotrada (si se alimenta de la red, se puede reiniciar con el interruptor general de casa).  La implementacion fue dificil porque optiboot internamente usa el watchdog y se tiene que distinguir entre un reinicio del watchdog dentro de bootloader (el normal) y dentro de aplicacion (el no deseado) y mi primera idea no funciono por un truco que usa GCC para reducir el tamaño de codigo.
 
 
===Reunión 24/2/2014===
 
 
Hemos hablado del proyecto en general y hemos acordado que merece la pena lanzar primero una comunidad open source y luego plantearse lo del Kickstarter.
 
Hemos fijado cuatro planos de trabajo:
 
 
* HW: el diseño de las placasa
 
* FW: el software para los conrtoladores, incluido bootloader, librerías y sketches
 
* SW: el servidor que corre en casa
 
* Promo: promoción, eventos, documentación
 
 
De momento los milestones quedan fijados así:
 
 
'''Milestone 0'''
 
 
Fecha: 15 Mayo
 
 
* '''HW''':
 
** placa base con ATMega con patas gordas y nrf24 modulo chino, todo hecho a mano. Por lo menos 5 unidades.
 
*** Sensores/actuadores: luz, temperatura, interruptor/botón, Luz RGB, Relé
 
** placa BASE, con conexiones al ordenador (o shield para Arduino). Un par de unidades.
 
** placa PL (powerline) con transformador incluido, logica 5V y DC converter. Por lo menos 3.
 
** Shield para progrmar el ATMega y hacer algún test
 
* '''FW''':
 
** Versión base de librerías Sensorino con algunos servicios hechos
 
** Update del firmware remoto
 
* '''SW''':
 
** Visualización basica
 
** Actuación
 
** comunicación con base
 
** servicios Sensorino base implementados
 
* '''Promo''':
 
** Primer evento Sensorino en Makespace
 
** Primer Wordpress basico montado
 
 
'''Milestone 1'''
 
 
Fecha: ?
 
 
* '''HW''':
 
** Placas PCB hechas y estables para versiones mini, PL y base con ATMega con pines gordos y nrf chino
 
** primeros intentos con SMD
 
** Shield de apoyo para producción rapida de ATMega
 
* '''FW''':
 
** Gestión energía estable y probada
 
** Algun intento para creare un nivel de red, por lo menos un repeater
 
** Update del firmware fiable (?)
 
* '''SW''':
 
** Prototipos de Reglas
 
** Integración con servicios online de SMS y otros
 
* '''Promo''':
 
** Web mas madura con blog, mailing list, Foro (?), Wiki (?), en Esp y Engl
 
** Eventos fuera del Makespace
 
** 4 Demonstradores en casas
 
** Mega demonstrador en Makespace
 
 
 
===Pruebas 28/2/2014===
 
 
1) he medido el valor de la resistencia de pull up interna del pina anlogico 0 de mi Arduino.
 
Para ello he puesto una resistencia de 100K entre el pin y tierra.
 
 
Según la formula, Rpu = 100000 ((1023/v)-1)
 
 
He cogido unas 150 muestras (una por segundo):
 
* Media: 38433.62
 
* STD: 309.20 que es el 0.8% de la media
 
 
[[File:atmega_temp_internal.jpg|thumb|Relación temperatura interna externa]]
 
 
2) he medido la temperatura externa usando un [http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Temp/ntcle100.pdf termistor que me he comprado] y midiendo la resistencia con un partidor con 10K, Rt = 10000 ((1023/v)-1) y aplicando la formula de Steinhart–Hart.
 
 
He comparado los valores medidos con los de un termometro a mercurio y parecen coincidir.
 
 
También he repetido las medidas con el termistor puesto con el pull up interno del ATMega y hay una variación de 1 grado mas o menos. En este caso la formula a aplicar es distinta: R = Rpu/((1023/v)-1)
 
 
3) he medido la temperatura interna del ATMega con [http://playground.arduino.cc/Main/InternalTemperatureSensor#.Uw0C9vl5OM0 este codigo] y he puesto en relación el valor del ADC con la temperatura medida con el termistor externo.
 
 
La relación es lineal, pero hay algo de margen de error.
 
 
 
4) Quiero hacer un sensor de luz binario, o sea uno que me avise cuando la luz esté encendida o apagada.
 
La idea es utilizarlo para, por ejemplo, la nevera.
 
Quiero entonces que el sensor esté apagado todo el tiempo, hasta que no detecte el cambio.
 
 
Como lo hago?
 
Con un fototransistor !
 
he comprado [http://www.electronicaembajadores.com/datos/pdf1/ss/ssir/bpw85.pdf este].
 
 
Lo he conectado en configuración de divisor de tensión con un pin digital, por la resistencia de pull down he observado que cuanto mas grande la resistencia, mas sensible es la detección. Al final para mi foto transistor, y un Arduino UNO  a 5V me he decantado para 560K. No se si valdría lo mismo con tensiones mas bajas. Si a alguno de vosotros se os ocurre la manera de calcularlo de hecho os doy un premio.
 
 
 
===Pruebas 3/3/2014===
 
 
he creado un proto-parser para JSON para la base. Puede buscar un dato, parsear enteros, doubles y booleanos y puede separar cadenas en un array (util para sacar la dirección de un Sensorino).
 
 
He montado los servicios de:
 
 
* LightService (para sensores de luz)
 
* RGBService (para luces RGB)
 
* TempHumService (para sensores de temperatura/humedad)
 
* SwitchService (para botones/interruptores/switches)
 
 
con sus paquetes y sus comandos JSON.
 
Falta testearlos.
 
 
===Pruebas 12/3/2014===
 
 
He ido probando convertidores USB -> serial para programar el ATMega 328. He comprado unos cuantos basados en tres chips:
 
FT323, CP2102 y PL2303HX. Son todos distintos ! los pines no se coinciden en ningún caso, por lo cual una vez elegido el que mejor funcione, habrá que soldar los pines de manera apropiada.
 
 
1) [http://www.miniinthebox.com/es/programa-ftdi-basico-downloader-usb-a-ttl-ft232-para-arduino_p903425.html FTDI Basic Program Downloader USB to TTL FT232 for Arduino]
 
 
es igualito igualito que otro que tengo que no funciona ni para atrás:
 
* 3V? si
 
* puerto reconocido en Windows: si
 
* upload del sketch: funciona
 
* monitor puerto serie: funciona, pero necesita un condensador y una resistencia entre el pin y Vcc según pone [http://www.modsbyus.com/wp-content/uploads/2013/03/FTDI_No_OSC.jpg este esquema]
 
 
 
2) [http://www.miniinthebox.com/usb-to-ttl-cp2102-module-for-stc-download_p474669.html USB to TTL CP2102 Module for STC Download]
 
 
necesita driver (por lo menos en Windows)
 
 
* 3V? si
 
* puerto reconocido en Windows: si
 
* upload sketch: hay que resetearlo a mano
 
* monitor puerto serie: si
 
 
he podido observar que el reset en realidad no funciona, porqué al reabrir el monitor serie de Arduino el chip no se reiniciaba
 
 
3) [http://www.miniinthebox.com/pl2303hx-usb-to-ttl-converter-module_p421819.html PL2303HX USB to TTL Converter Module]
 
 
no tiene pin de reset
 
 
* 3V? si
 
* puerto reconocido en Windows: si
 
* upload sketch: si, pero tengo que hacer el reset a mano
 
* monitor puerto serie: si, recibe
 
 
 
4) [http://www.miniinthebox.com/pl2303hx-converter-usb-to-ttl-usb-to-com-cable-module-black-1m_p421817.html PL2303HX Converter USB to TTL USB to COM Cable Module (Black, 1m)]
 
 
no tiene pin de reset
 
 
* 3V? ni idea
 
* puerto reconocido en Windows: si
 
* upload sketch: va, pero con un reset manual
 
* monitor puerto serie: si, recibe por lo menos
 
 
 
Hay un video que lo explica todo muy bien: http://www.youtube.com/watch?v=Vawhrr4COjI
 
 
* con el ft323 se necesita el condensador extra. El Arduino mini lo tiene ya puesto.
 
* las placas basadas en cp2102 estandar necesitan soldar un pin a mano (por lo menos las que se venden por ahi)
 
* las basadas en PL2303HX tienen algún problema de driver, ademas la mía no tiene pin de reset ni siquiera
 
 
el tipo del video al final se decanta para una placa basada en cp2102 con reset montado, he intentado buscarla en aliexpress y  hay unas cuantas como [http://www.aliexpress.com/item/Free-Shipping-10pcs-LOT-CP2104-Serial-Converter-USB-2-0-To-TTL-UART-6PIN-Module-compatible/1105267528.html?s=p esta].
 
Lo que no sabemos es si sigue siendo necesario añadir el condensador y la resistencia, pero yo me temo que si.
 
 
 
Opciones para Sensorino:
 
 
# añadimos condensador y resistencia en nuestra placa y hacemos que sean programables por FT232 sin nada mas
 
# no añadimos nada, y pedimos al usuario que enchufe el Sensorino cuando el programador avr esté listo para subir el código, esto hace que sea compatible con la mayoría de programadores
 
# si con la placa cp2102 NO fuera necesario añadir condensador y resistencia, usaríamos esta y punto
 
 
[[Category:Proyectos]][[Category:Proyectos con arduino]]
 

Please note that all contributions to Wiki Makespace Madrid may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Wiki Makespace Madrid:Copyrights for details). Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to type the two words you see in the box below:

Cancel | Editing help (opens in new window)