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.
 
 
 
= Sensorino =
 
= Sensorino =
  
Estado: Software funcional, usa hardware off-the-shelf, desarrollo de placas propias abandonado
+
ESTADO: PRIMERAS PRUEBAS
  
 
Miembros: [[User:Dario_Salvi]], [[User:Bozo]], [[User:Roberto Zabala]], Andrew Zaborowski
 
Miembros: [[User:Dario_Salvi]], [[User:Bozo]], [[User:Roberto Zabala]], Andrew Zaborowski
Line 14: Line 10:
 
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 ==
+
== Milestone 0==
Fecha: 15 Mayo 2013
+
Fecha: 15 Mayo
  
 
* '''HW''':
 
* '''HW''':
Line 57: Line 53:
 
= Motivación =
 
= 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.
+
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.
 +
 
  
 
= Antecedentes =
 
= Antecedentes =
Line 74: Line 71:
 
* 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:'''
+
==Low power==
 
+
* 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==
+
 
+
 
* 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 79:
 
** 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===
Line 113: Line 94:
 
* el ATtiny24 o 84 aunque sus capacidades son limitadas y no hay plena compatibilidad con Arduino. El precio de un Attiny24 es de medio euro.
 
* el ATtiny24 o 84 aunque sus capacidades son limitadas y no hay plena compatibilidad con Arduino. El precio de un Attiny24 es de medio euro.
 
* 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===
Line 188: Line 167:
  
 
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 187:
 
* [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]
+
* recibe mensajes de la red de sensores a través de un nrf24 (probablemente conectado a través de un Arduino)
* [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]
+
* almacena historial de datos (BBDD)
* [http://forum.arduino.cc/index.php?topic=187692.0 este otro] que parece mas prototipal
+
* permite controlar dispositivos actuadores (encender/apagar etc...)
* [https://github.com/mattibal/meshnet este] que parece muy bueno!
+
* lanza reglas del tipo if(...) then... mejor si definidas con un lenguaje alto nivel interpretado
* [http://www.atmel.com/tools/LIGHTWEIGHT_MESH.aspx?tab=overview la librería de ATmel?]
+
* 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
  
 
=Avances=
 
=Avances=
Line 218: Line 209:
  
 
=== HW ===
 
=== HW ===
* elegir el programador adecuado
 
** responsables: Dario
 
** estado: pruebas hechas con distintos chips, ninguno me ha convencido al 100% todavia
 
 
 
* crear la versión PL (power line)
 
* crear la versión PL (power line)
 
** responsables: ?
 
** responsables: ?
Line 239: Line 226:
  
 
* crear luz RGB
 
* crear luz RGB
** responsables: Dario
+
* responsables: Dario
 
** estado: una versión ya existe, falta decidir si activarla con botón
 
** estado: una versión ya existe, falta decidir si activarla con botón
  
Line 557: Line 544:
 
* 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 553:
 
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 768: Line 734:
  
 
He cogido unas 150 muestras (una por segundo):
 
He cogido unas 150 muestras (una por segundo):
* Media: 38433.62
+
Media: 38433.62
* STD: 309.20 que es el 0.8% de la media
+
STD: 309.20 que es el 0.8% de la media
  
 
[[File:atmega_temp_internal.jpg|thumb|Relación temperatura interna externa]]
 
[[File:atmega_temp_internal.jpg|thumb|Relación temperatura interna externa]]
Line 793: Line 759:
  
 
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.
 
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)