martes, 20 de noviembre de 2012

Arduino + RFM12

Ejemplo de comunicación via radio con Arduino usando módulos de radio FM 433Mhz Hope RFM12B

Hardware:

Lo primero que conviene diferenciar, es que estos módulos usan un interface de comunicación SPI
para su manejo con el microcontrolador, a diferencia de otros tipo "easymode" que directamente se conectan a la salida serie del MCU sin ningún tipo de control extra.

Esto conlleva a un mayor tiempo de puesta en marcha del prototipo ya que aumenta el número de
elementos necesarios para hacerlo funcionar, mayor número de entradas de control y mayor complejidad en el protocolo de comunicación.

El beneficio de todo este complejo proceso, es que el módulo permite un gran control
de parámetros de configuracion como pueden ser: frecuencia de operación, sensor de voltaje bateria, modos de ahorro de energia, salida de reloj para MCU configurable, etc.

Otro detalle importante es la diferencia entre las distintas versiones de los modulos que existen, hay que tener claro lo que se compra para luego no encontrarse con sorpresas desagradables.

- Modulo RFM01, 433Mhz solo Recepción, operan a 5 voltios
- Modulo RFM02, 433Mhz solo Transmisión, operan a 5 voltios
- Modulo RFM12, 433Mhz Transmisión/Recepción,, operan a 5 voltios
- Modulo RFM12(B), 433Mhz Transmisión/Recepción, operan a 3,3 voltios

Entre los módulos RFM12B he apreciado que las PCB estan etiquetadas con version 3.0 y en ultimas compras version 4.0, de momento no he investigado a fondo entre las diferencias reales.

Los modulos del modelo RFM01, y RFM02 usan unos comandos de configuracion diferentes a los del RFM12 y las librerías de uso no son compatibles entre si sin modificación por eso nos centraremos en el modelo RFM12B que es el usual de encontrar.

Para solventar el problema de la diferencia de voltaje, sobre todo si usamos una placa Arduino a 5 voltios,
podemos usar un simple divisor de voltaje con resistencias de 20k y 10k

(se pueden usar transceptores de bus 5 a 3.3 voltios como el 74HC4050, o el 74LCX245, como el que se usan en los interfaces para tarjetas SD)

Esta es la imagen de una shield personalizada para usar el módulo, fabricada con "hands & fingers"






Funcionamiento:

Los módulos operan en una banda de 433Mhz mediante el protocolo FSK, para las pruebas podemos usar una antena simple construida con un cable de una longitud de 165mm,





Software:

La mejor libreria para arduino que he encontrado es la creada por Jean-Claude Wippler en su proyecto de Jeenode disponible aqui http://jeelabs.org/pub/snapshots/RF12.zip, aunque la documentación de la misma es mas bien escasas y hay que leer detenidamente los sketchs que trae como ejemplo y el propio código fuente para entender bien los mecanismos de funcionamiento, aunque tampoco es estrictamente necesario.






Otras consideraciones:

  • El modulo elegido es el modelo ALPHA-TRX433S que es un clon del RFM12B de HopeRF pero con un coste algo menor.

Referencias:

- http://jeelabs.org/2009/02/10/rfm12b-library-for-arduino/
- http://blog.strobotics.com.au/2008/01/08/rfm12-tutorial-part1/

Mini Review tiendas y proveedores

Lista de tiendas y opiniones de las mismas en base a las gastadas realizadas por ahora:

- Farnell http://es.farnell.com/ ( proveedor de productos electronica e ingenieria con un gran stock )
Deje de comprar allí despues de tener problemas con la visa-electron, no fueron capaces de arreglar el problema. Puntuacion 3/5.
- RS Online http://es.rs-online.com ( proveedor de productos de electronica e ingenieria con un stock decente)
Los precios varian bastante respecto a otros proveedores segun el tipo de producto, el sistema de envio es de lo mejor que he encontrado. Puntuación 4/5.
- Bricogeek http://www.bricogeek.com/shop/

Tienda online de productos relacionados con Arduino, la mayoria son productos de sparkfun.com, tienen un catalogo de productos y stock bastante limitado, el envio y el trato es excelente. Puntuacion 4/5

- Cole Tech http://stores.ebay.es/CNCOLETECH ( tienda de ebay china )

Articulos relacionados con grabadoras laser co2, muy buena reputacion, precios aceptables, envio ultra-rapido por DHL Avion). Puntuación 4/5

- CNC Plus http://www.cnc-plus.de ( tienda de componentes para CNC)

Tienen unos precios muy buenos en fresadoras Kress, y un catalogo de accesorios para CNC muy interesante. Puntuación 4/5.

lunes, 6 de febrero de 2012

Compilando Arduino 1.0 desde shell

Como compilar sketchs de Arduino 1.0 desde la shell de linux sin dificultad ( o intentarlo )

* Requisitos previos

* Entrar al directorio del ejemplo Blink y descargar el fichero makefile

mrgastoso#:~/arduino-1.0/examples/1.Basics/Blink$
mrgastoso#:~/arduino-1.0/examples/1.Basics/Blink$ wget http://shallowsky.com/software/arduino/Makefile-1.0-v7
mrgastoso#:~/arduino-1.0/examples/1.Basics/Blink$ mv Makefile-1.0-v7 Makefile

* Editar el fichero Makefile y cambiar los siguientes parametros:

TARGET = Blink
ARDUINO_DIR = "directorio de arduino 1.0"
ARDUINO_MODEL = atmega328 o "elegir el modelo de arduino, ante la duda mirar en el fichero arduino-1.0/hardware/arduino/boards.txt"
AVR_TOOLS_PATH = /usr/bin "cambiar si se tiene una ruta diferente del toolchain de gcc avr, en mi caso es /usr/local/avr/bin/"

* El script toma como extension del archivo .pde, asi que antes de nada lo renombramos o copiamos

mrgastoso#:~/arduino-1.0/examples/1.Basics/Blink$ cp Blink.ino Blink.pde

* Ejecutar make, y observar como surge la magia


mrgastoso#:~/arduino-1.0/examples/1.Basics/Blink$ make

/usr/local/avr/bin//avr-g++ -c -mmcu=atmega328p -I. -DF_CPU=16000000L -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/variants/standard    -Os -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -DARDUINO=100 applet/Blink.cpp -o applet/Blink.o 
/usr/local/avr/bin//avr-gcc -c -mmcu=atmega328p -I. -gstabs -DF_CPU=16000000L -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/variants/standard    -Os   -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -DARDUINO=100 /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring.c -o /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring.o 
/usr/local/avr/bin//avr-gcc -c -mmcu=atmega328p -I. -gstabs -DF_CPU=16000000L -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/variants/standard    -Os   -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -DARDUINO=100 /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_analog.c -o /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_analog.o 
/usr/local/avr/bin//avr-gcc -c -mmcu=atmega328p -I. -gstabs -DF_CPU=16000000L -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/variants/standard    -Os   -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -DARDUINO=100 /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_digital.c -o /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_digital.o 
/usr/local/avr/bin//avr-gcc -c -mmcu=atmega328p -I. -gstabs -DF_CPU=16000000L -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/variants/standard    -Os   -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -DARDUINO=100 /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_pulse.c -o /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_pulse.o 
/usr/local/avr/bin//avr-gcc -c -mmcu=atmega328p -I. -gstabs -DF_CPU=16000000L -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/variants/standard    -Os   -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -DARDUINO=100 /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_shift.c -o /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_shift.o 
/usr/local/avr/bin//avr-gcc -c -mmcu=atmega328p -I. -gstabs -DF_CPU=16000000L -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/variants/standard    -Os   -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -DARDUINO=100 /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/WInterrupts.c -o /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/WInterrupts.o 
/usr/local/avr/bin//avr-g++ -c -mmcu=atmega328p -I. -DF_CPU=16000000L -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/variants/standard    -Os -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -DARDUINO=100 /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/HardwareSerial.cpp -o /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/HardwareSerial.o 
/usr/local/avr/bin//avr-g++ -c -mmcu=atmega328p -I. -DF_CPU=16000000L -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/variants/standard    -Os -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -DARDUINO=100 /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/WMath.cpp -o /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/WMath.o 
/usr/local/avr/bin//avr-g++ -c -mmcu=atmega328p -I. -DF_CPU=16000000L -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/variants/standard    -Os -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -DARDUINO=100 /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/WString.cpp -o /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/WString.o 
/usr/local/avr/bin//avr-g++ -c -mmcu=atmega328p -I. -DF_CPU=16000000L -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino -I/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/variants/standard    -Os -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -DARDUINO=100 /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/Print.cpp -o /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/Print.o 
/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/Print.cpp: In member function 'size_t Print::print(const __FlashStringHelper*)':
/home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/Print.cpp:44:23: warning: '__progmem__' attribute ignored
/usr/local/avr/bin//avr-ar rcs applet/core.a /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring.o
/usr/local/avr/bin//avr-ar rcs applet/core.a /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_analog.o
/usr/local/avr/bin//avr-ar rcs applet/core.a /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_digital.o
/usr/local/avr/bin//avr-ar rcs applet/core.a /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_pulse.o
/usr/local/avr/bin//avr-ar rcs applet/core.a /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/wiring_shift.o
/usr/local/avr/bin//avr-ar rcs applet/core.a /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/WInterrupts.o
/usr/local/avr/bin//avr-ar rcs applet/core.a /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/HardwareSerial.o
/usr/local/avr/bin//avr-ar rcs applet/core.a /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/WMath.o
/usr/local/avr/bin//avr-ar rcs applet/core.a /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/WString.o
/usr/local/avr/bin//avr-ar rcs applet/core.a /home/mrgastoso/Descargas/arduino-1.0//hardware/arduino/cores/arduino/Print.o
/usr/local/avr/bin//avr-gcc -o applet/Blink.elf applet/Blink.o -L. applet/core.a -Os -Wl,--gc-sections -mmcu=atmega328p -lm
/usr/local/avr/bin//avr-objcopy -O ihex -R .eeprom applet/Blink.elf applet/Blink.hex


   text   data    bss    dec    hex filename
      0   1010      0   1010    3f2 applet/Blink.hex

mrgastoso#:~/arduino-1.0/examples/1.Basics/Blink$

Notas: del mismo autor tambien esta la version para arduino-0.22 : http://shallowsky.com/software/arduino/Makefile-0022-v4

- Referencias

martes, 31 de enero de 2012

Acabado de PCB con mascara de soldadura

- Acabado de PCB con mascara de soldadura estilo supremo ( de pollo )

Convertidor de señaales 5v-3.3v LCX245

Convertidor de señaales 5v-3.3v LCX245

Convertidor de señaales 5v-3.3v LCX245

Placa Arduino Ethernet con ENCJ2860

Placa Arduino Ethernet con ENCJ2860

Placa Arduino Ethernet con ENCJ2860

domingo, 29 de enero de 2012

Display LCD ST7565R

Me he topado con este display LCD grafico de 128x64 lineas, que aparte de su bajo precio 13€, tiene opcion de conexion serie SPI, lo cual lo hace muy interesante a la hora de conextarlo, estos son los datos que he podido sacar de momento del datasheet.
  • chipset ST7565R 
  • voltaje 3.3v para logica y backlight
  • conexion paralelo, o serie SPI 
  • 18 pines tipo pasante
- Pinout
1.- GND
2.- +3.3V
4.- SI
5.- SCLK
14.- A0
15.- RES
16.- CS
- Foto del bicho