Difference between revisions of "Sensorino"

From Wiki Makespace Madrid
Jump to: navigation, search
(Ideas para el Hardware)
(Avances:)
Line 206: Line 206:
 
'''Pruebas 27/10/2013:'''
 
'''Pruebas 27/10/2013:'''
  
Bozo consigue enviar datos por serial a partir de una tension de 2.3 voltios.  
+
Bozo consigue enviar datos por serial a partir de una tensión de 2.3 voltios.  
 
Con 2.1 voltios funciona pero no arranca bien.
 
Con 2.1 voltios funciona pero no arranca bien.
  
El circuito esta hecho con una fuente regulable sin condensadores y un parpadeo de led.
+
El circuito está hecho con una fuente regulable sin condensadores y un parpadeo de led.
El .hex fue generado selecionando "atmega 328 on bread board" como tipo de placa
+
El .hex fue generado seleccionando "atmega 328 on bread board" como tipo de placa
  
avrdude: Device signature = 0x1e950f
+
  avrdude: Device signature = 0x1e950f
avrdude: safemode: lfuse reads as E2
+
  avrdude: safemode: lfuse reads as E2
avrdude: safemode: hfuse reads as D8
+
  avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as 7
+
  avrdude: safemode: efuse reads as 7
  
  
 
'''Pruebas 28/10/2013:'''
 
'''Pruebas 28/10/2013:'''
  
Roberto tambien consigue hacerlo funcionar hoy tambien. No he identificado el problema del otro dia. Probado con dos pilas AA a 2.8v sin ningun problema. Con la salida de 3.3v de arduino tambien 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.
  
El valor de los fuses utilizados son los que proponia [http://www.kerrywong.com/2012/02/19/atmega328-fuse-bit-setting-for-3-3v-vcc/ kerry Wong] sin modificar el brown-out que de momento no ha sido necesario.
+
El valor de los fuses utilizados son los que proponía [http://www.kerrywong.com/2012/02/19/atmega328-fuse-bit-setting-for-3-3v-vcc/ kerry Wong] sin modificar el brown-out que de momento no ha sido necesario.
 
+
low_fuses=0xE2
+
high_fuses=0xDA
+
extended_fuses=0x05
+
  
 +
  low_fuses=0xE2
 +
  high_fuses=0xDA
 +
  extended_fuses=0x05
  
  
Line 234: Line 233:
  
 
Prueba de Dario para montar una placa integrada.
 
Prueba de Dario para montar una placa integrada.
 +
Dado que no quiere esperar los zocalos se ha soldado PIC y chip radio todo juntos, como NO hay que hacer.
 +
  
 
Conexión de pines:
 
Conexión de pines:
 
  
 
ATMEGA -> NRF24L01:<br/>
 
ATMEGA -> NRF24L01:<br/>
Line 260: Line 260:
 
PIN 1 GND -> GND<br/>
 
PIN 1 GND -> GND<br/>
 
PIN 2 VCC -> 3V<br/>
 
PIN 2 VCC -> 3V<br/>
 +
 +
El ATMega es el que programamos en el MakeSpace y de momento solo va con 5V.
 +
Dario se caga en todo y dice muchas blasfemias.

Revision as of 20:03, 23 November 2013

Nombre proyecto

ESTADO: PRIMERAS PRUEBAS

Miembros: User:Dario_Salvi, User:Bozo, User:Roberto Zabala


Objetivo

construir una red de sensores compatibles con el IDE de Arduino y que cuesten menos que 5 € con todo incluido.

Motivación

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

Hay muchos proyectos para redes de sensores y productos comerciales, pero ninguno hasta ahora verdaderamente barato (es decir <5€), ver Plataformas IOT.

El proyecto mas parecido al nuestro de momento es este, quitandole quizas los LEDs para ahorrar. Otro proyecto muy parecido es este.

Métodos y técnicas utilizadas

Requisitos:

  • cada nodo tiene una MCU y una conexión RF
  • el nodo base tiene que ser muy barato: < 5€
  • se tiene que poder programar con el IDE de Arduino
  • 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.

Detalles

Low power

https://www.sparkfun.com/tutorials/309 http://www.gammon.com.au/forum/?id=11497

Ideas para el Hardware

De momento nos centramos en un ATmega328 y en el chip nRF24L01 de Nordic. El coste de los dos puede llegar a ser inferior a 1 €. Placas micro compatibles Arduino (de donde poder copiar el diseño): femtoduino, Arduino mini pro

Asignación de pines según la librería de maniacbub (ver articulo original):

  • PD2 -> IRQ
  • PB0 -> CS
  • PB5 -> SCK
  • PB4 -> MISO
  • PB3 -> MOSI
  • PB1 -> CE
  • GND -> GND
  • VCC -> VCC


Alternativas son, para la MCU, 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.

Pinouts: ATMega328P, nrf24l01

Ideas para el SW

Queremos la compatibilidad con Arduino, por eso nos centramos en chips AVR. Hay unas cuantas librerías para controlar el chip radio:

Y unos posts sobre el tema:


A esto podemos añadir:

Del lado "servidor" o sea el colectore de todas las medidas y generador de aplicaciones domoticas se puede usar:

Avances:

Reunión 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 los cogidos de ejemplo de la librería RF24 que parece ser la mejor hecha. Hemos probado la conexion estrella y ha funcionado.

Decisiones: para la semana que viene vamos a intentar conectar un Atmega328p directamente a un modulo nRF24L01 en una placa de prototipado. Queremos producir 4 nodos e ir haciendo experimentos. Experimentos posibles:

  • mejor tipo de baterías, 2 AA? 1 de moneda de 3V ?
  • aguante de baterías
  • alcance de la comunicación
  • ir haciendo pruebas con el SW

objetivo final que hemos visualizado: una placa integrada con modulo radio y atmega, super pequeña, de bajo coste (<5€), con un kit de SW para redes de sensores. Como SW se considera incluso hacer un porting del stack 6loWPAN.


Pruebas 26/9/2013:

Hemos montado el Atmega328p en la breadboard. Para programar el ATMega desde Arduino hemos seguido este tutorial. Hay dos fases: en una cargas el bootloader en el ATmega virgen. Para ello se necesita un Arduino que envíe el firmware por los pines del SPI. RECORDAR de cargar el sketch Arduino as ISP de la carpeta de los ejemplos !

En la segunda fase puedes cargar tus sketch, en este caso se usa el puerto serie, y se puede usar un Arduino quitandole el chip O un cable USB-to-serial (FTDI chip) si lo hay.

Primer prototipo

Para ir probando la comunicación con el nRF24L01 hemos cargado un sketch para usar el chip Nordic. Hemos utilizado la librería de maniacbug aquí y el codigo de ejemplo GettingStarted.

Para cargar el sketch en el ATmega hemos utilizado un cable FTDI y NO HA FUNCIONADO, no sabemos porqué. Entonces hemos usado el Arduino SIN MCU y HA FUNCIONADO. Hemos conectado el nRF24L01 según este esquema, cuidado con hacer el mapeado entre los pines de Arduino y los del Atmeg328 (ver aquí)!

El Atmega ve el chip y es capaz de enviar paquetes pero no de recibirlos. No sabemos porqué pero sospechamos que es por tener el clock a 8MHz en lugar de 16.Hay indicios de que afecta de alguna manera. El chip puede comunicar hasta 10 Mhz en el bus SPI. En la libreria tenemos SPI.setClockDivider(SPI_CLOCK_DIV4); Entonces con un un atmega328 @ 8 Mhz, 8/4 = 2 mbs , no debería haber problema. Otra posible causa pueden ser los delays().


Pasos a seguir:

Dario: va a enviar un correo al creador de la librería RF24 preguntandole cual es la mas actualizada y si el ve algún problema en tener un Arduino a 8MHz en lugar de 16Mhz.


Roberto: se encarga de ver los sockets e intenta programar el ATMega con el cable FTDI

Todos: resolver el problema de los 8MHz. Comprar socket para los chips. Construir primer prototipo.

Pruebas del 3/10/2013

A veces el ATMega cuando envía un paquete imprime dos tipos de mensajes distintos:

  Now sending 22333...failed.
  Failed, response timed out.

o

  Now sending 23609...ok...Failed, response timed out.


La diferencia entre la primera linea y la segunda esta en este codigo (GettingStarted.pde):

  // First, stop listening so we can talk.
  radio.stopListening();
  
  // Take the time, and send it.  This will block until complete
  unsigned long time = millis();
  printf("Now sending %lu...",time);
  bool ok = radio.write( &time, sizeof(unsigned long) );
  if (ok)
    printf("ok...");
  else
    printf("failed.\n\r");


Pruebas hechas:

  • seteado SPI_CLOCK_DIV2 en RF24.cpp de la libreria RF24 de Maniacbug: NINGUN CAMBIO
  • comentado linea SPI_CLOCK_DIV en RF24.cpp: NINGUN CAMBIO
  • metiendo un condensador de 10 microF entre pin 3.3v y tierra: AHORA SOLO DA Now sending 23609...ok...Failed, response timed out.
  • metiendo 500 ms en lugar de 200 en esperar la respuesta: NINGUN CAMBIO
  • comprobado que los delay() y millis() sean buenos: son buenos (los segundos son segundos)

Al final hemos encontrado el problema: eran unos cables mal conectados entre el Arduino (no el Atmega) y la placa nfr (culpa de Roberto). CUIDADO con las librerías (maniacbug o mirf o Mike) que tienen distintos cableados !!!

Hemos quitado el condensador y la mitad de los paquetes se perdían.


Conclusiones:

  • la comunicación funciona entre los dos
  • meter condensador de 10microF es suficiente para no perder paquetes

Observacion: el modulo nrf24L01 tiene un oscilador a 16MHz, en una placa integrada se podría aprovechar también para el ATMega Para compartir el cristal, los CI tienen que estar cerca, un CI excita el crstal, mientras el otro solo "lee" la salida: http://forum.arduino.cc/index.php?topic=78584.0 .


Para la próxima: ir probando con baterías distintas, diseñar el prototipo


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 intentado quitandole el brownout como sugiere este post(settings a 0xFF), pero nada.


Pruebas 27/10/2013:

Bozo consigue enviar datos por serial a partir de una tensión de 2.3 voltios. Con 2.1 voltios funciona pero no arranca bien.

El circuito está hecho con una fuente regulable sin condensadores y un parpadeo de led. El .hex fue generado seleccionando "atmega 328 on bread board" como tipo de placa

  avrdude: Device signature = 0x1e950f
  avrdude: safemode: lfuse reads as E2
  avrdude: safemode: hfuse reads as D8
  avrdude: safemode: efuse reads as 7


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.

El valor de los fuses utilizados son los que proponía kerry Wong sin modificar el brown-out que de momento no ha sido necesario.

  low_fuses=0xE2
  high_fuses=0xDA
  extended_fuses=0x05


Pruebas 23/11/2013:


Prueba de Dario para montar una placa integrada. Dado que no quiere esperar los zocalos se ha soldado PIC y chip radio todo juntos, como NO hay que hacer.


Conexión de pines:

ATMEGA -> NRF24L01:
PIN 4 PD2 -> PIN 8 NRF24 (IRQ)
PIN 15 PB1 -> PIN 3 NRF24 (CE)
PIN 16 PB2 -> PIN 4 NRF24 (CSN)
PIN 17 PB3 -> PIN 6 NRF24 (MOSI)
PIN 18 PB4 -> PIN 7 NRF24 (MISO)
PIN 19 PB5 -> PIN 5 NRF24 (SCK)


además hay que tener en consideración los pines de alimentación y para programar el PIC:

ATMEGA:
PIN 1 PC6 -> Reset
PIN 2 PD0 -> TX
PIN 3 PD1 -> RX
PIN 7 VCC -> 3V
PIN 8 GND -> GND


NRF24:
PIN 1 GND -> GND
PIN 2 VCC -> 3V

El ATMega es el que programamos en el MakeSpace y de momento solo va con 5V. Dario se caga en todo y dice muchas blasfemias.