Control de consumo para led Luxeon

lunes, 14 de febrero de 2011 1 comentario
1
Vote

La idea es implementar un circuito regulador de corriente constante con el LM317 segun el siguiente esquema:

Tras la realizar la primera prueba de iluminacion del luxeon, con el integrado LM317, en el transcurso se aprecian una serie de cosas:

- es un poco costoso de soldar ya que el propio disipador de aluminio se come el calor del soldador, con un poco de flux, se soluciona el problema
- hay una caida de tension en el LM317 de 3 voltios, eso sumado a los 3,5 del luxeon, hace que se requieran 6,5 voltios de entrada minimo para conseguir los 620ma como se ve en la imagen.

este es el primer prototipo del invento, se requiere una resistencia de 2ohm y 2W para una corriente de 620ma, he puesto 2 en serie de 1ohm 2W que es lo que tenia en el cajon
 

 y aqui un video el asunto funcionando donde se aprecia como se mantiene la corriente estable a 620mah

TODO:
- controlar y medir la temperatura para adaptar un disipador de aluminio acorde, tanto en el led, como en el integrado

Referencias:
- http://www.reuk.co.uk/LM317-Current-Calculator.htm
- Post original

Categories: General Tags:

PhotoStation

domingo, 6 de febrero de 2011 1 comentario
0
Vote

El chisme trata de usar una cámara de fotos digital vieja que tenía por ahí para montar un sistema de capturas de fotos automático para grabar efectos atmosféricos y su posterior colocación en el UAV.

La cámara en cuestión es una cámara BenqDC630 que tenia por ahí. Un poco vieja, pero con posibilidad de fotografías de hasta 6MPx. Todo el sistema estará alimentado por una batería lipo de 2450 maH, asi que utilizaremos un circuito divisor de tensión para controlar el voltaje de la batería y un relé para cortar la corriente a la cámara cuando tengamos poca tensión, para no dañarla. Para este divisor de tensión usaremos dos resistencia iguales porque la lipo que utilizaremos es de 2 celdas. Si usáramos de 3 tendríamos que hacer la proporción y una seria el doble de la otra. Para adaptar la camara a los 3v que le hace falta usaremos otro circuito divisor de tensión. Este con regulador que nos cede King.
Usaremos un sensor de temperatura para controlar la temperatura de la lipo (por si las moscas) y cortar la corriente y una pantalla LCD en la que mostraremos información sobre temperatura, tensión de la lipo, y tiempo entre disparos.

Así pues tenemos como componentes:

- Arduino Duemilanove (En este caso uso una ProtoShield para un conexionado mas simple).
- Camara Digital BENQDC630
- Lipo Turnigy 2450 mah 7,4v
- Variador Brushless ZTV 30A
- Dallas 18b20
- LCD GDM1602A
- 2 Relés de 5v Finder 30.22.7.005.0010 (Cualquier otro valdría también. Uno para la camara y otro para cortar la tensión).
- 2 diodos, uno rojo y otro verde para alertar del corte de tensión.
- 2 resistencias del mismo valor para el divisor de tensión de control de carga de la lipo.

Modificación de la cámara digital

Le quitamos la carcasa y se ve el pulsador del botón con espacio suficiente para trabajar. Así pues soldamos 2 parejas de cables a cada una de las dos parejas de pines que tiene el pulsador. Una para el contacto en la posición central y otra para el contacto de la posición inferior. Nosotros pulsaremos los dos a la vez asi que bien podemos hacer las dos parejas de cables o hacerle corto a la pareja de la posición central. En nuestro caso como con el relé podemos activar los dos a la vez lo haremos con las dos parejas de cables.
Para la alimentación utilizaremos el divisor de tensión ajustable que comentamos anteriormente. Este nos convertirá los 5v que obtenemos de la lipo a 3v.





Preparando el divisor de tensión y los relés.

Para el divisor de tensión utilizaremos dos resistencias de 4,7K ohmnios que son las que tengo a mano. Para aprovechar colocare también en la misma placa el relé para el control de tensión a la cámara y los diodos. Para disparar la cámara utilizare otro relé que ya tenia montado de antemano independiente.





Sensor de temperatura y pantalla LCD

El sensor de temperatura que utilizare sera el dallas 18b20. Para mas informacion sobre su utilizacion leer el siguiente post: Dallas 18b20 con arduino
Igualemente la pantalla lcd es la que ya utilizamos anteriormente en otras frikadas. Mas info: LCD GDM1602A controlado con Shift Register 74HC595N



Conexionado provisional

De momento lo montaremos todo provisionalmente sobre la misma placa de prototipo nada mas que por manejabilidad. Conectamos el relé de disparo al pin digital 2 del arduino. La pantalla lcd la pinchamos en los pines 8,11 y 12 y la salida del divisor de tensión la enganchamos a la salida analógica 0 para leerla. El sensor de temperatura lo pinchamos en el pin digital 10.

Le cargamos el código y probamos a ver si todo funciona correctamente.

El código lo iremos modificando en svn.

Probando el chiringuito

Bueno, todo esto y lo que queremos es echar fotos así que vamos manos a la obra. En principio hay que configurar en la cámara algunas opciones como la desactivación del balance de blancos automático y casi que cualquier opción que nos venga como automática. Le damos ya para ir haciendo la primera prueba. Me la llevo a la ventana de mi casa un día tal como el de hoy, soleado con nubes. Ideal para el efecto que queremos conseguir.

Hacemos la primera prueba. Capturamos unas 275 fotos. Las fotos no han sido muy buenas, se ve que algo se me ha pasado en las opciones de configuracion de la cámara, pero son suficientes para hacer el nuestro primer efecto de timelapse con nubes. Primero las mejoro un poco con iphoto y luego creo la película con mencoder. Le pongo un bitrate de 5000, un tamaño de 1280×720 y 25 fps.

mencoder mf://*.jpg -mf fps=25:type=jpg -noskip -of lavf -lavfopts format=mov -ovc lavc -lavcopts vglobal=1:coder=0:vbitrate=15000 -vf expand=aspect=16/9,scale=1280:720 -o salida.mov



Primera toma:

Categories: Proyectos Tags:

Ardupilot Mega 1.0

viernes, 21 de enero de 2011 Sin comentarios
0
Vote

Ya está aquí la nueva gastada …

En breve un nuevo proyecto de aeronave UAV. Diversión asegurada.

Categories: Gastadas Tags:

Arduino desde Linea de Comandos

miércoles, 19 de enero de 2011 1 comentario
0
Vote

Buenas. Trás un tiempo alejado de las frikadas por motivos laborales/personales vuelvo a entrar a arduino.cc para bajarme la nueva versión del ide de arduino (0022) y me encuentro con que en el apartado de Hacking han quitado el enlace que hacia referencia a compilar y subir el código al microcontrolador por linea de comandos. Según leo en algún post veo que además han dejado de dar soporte al Makefile que en anteriores versiones venia con el IDE.

Así pues, tras pelearme un poco para poder compilar las frikadas que ya tenia con anteriores versiones, me dispongo a hacer un mini-documento explicativo de como llevar a cabo esta tarea con el nuevo IDE proporcionado por arduino.

Primeramente necesitamos los paquetes avr-libc y avrdude.

apt-get install avrdude avr-libc

Avrdude nos servirá para subir el código a arduino y avr-libc (con sus dependencias gcc-avr) nos instalara las librerías necesarias de AVR y el avr-gcc necesario para compilar.

Una vez que tenemos estos paquetes pasamos a descargarnos el ide de arduino 0022 y nos ponemos manos a la obra.

Descomprimimos el mismo en cualquier sitio temporal y buscamos las carpeta “hardware/arduino/core/arduino” que en principio es donde se encuentran las librerías propias de arduino. Esta carpeta la copiamos por ejemplo a nuestro /usr/lib

cp -a arduino-0022/hardware/arduino/core/arduino /usr/lib

Programacion sin IDE.

Llegados a este punto imaginemos que tenemos nuestra aplicación “demo”. Crearemos un directorio en nuestro directorio de trabajo (/home/user/demo) donde guardaremos el código fuente. Si hacemos un listado del directorio vemos lo siguiente:

applet(dir)
demo.pde
Makefile

Como vemos el código fuente de la aplicación lo guardamos al igual que utilizando el IDE como un archivo .pde. Realmente cuando compilamos no se compila este archivo sino el archivo demo.cpp que se encuentra dentro del directorio applet. Pero de esto no debemos preocuparnos ya que nuestro Makefile es el encargado de generar ese directorio applet a partir de nuestro .pde.

En el siguiente enlace se puede descargar un Makefile de ejemplo, que veremos a continuación para destacar la zona de configuración del mismo. Makefile de ejemplo . Este Makefile es el que teníamos de versiones anteriores.

Si nos centramos en la parte superior del Makefile nos encontramos con:

#CONFIG
TARGET = $(notdir $(CURDIR))
PORT = /dev/ttyUSB0
UPLOAD_RATE = 19200
AVRDUDE_PROGRAMMER = stk500v1
MCU = atmega168
F_CPU = 16000000

#PATHS
ARDUINO = /usr/lib/arduino
AVR_TOOLS_PATH = /usr/bin

#LIBRARIES
SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \
$(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \
$(ARDUINO)/wiring_pulse.c $(ARDUINO)/wiring_serial.c \
$(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c
CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(ARDUINO)/WMath.cpp $(ARDUINO)/Print.cpp $(ARDUINO)/WString.cpp

Lo primero que nos encontramos son las variables que debemos configurar para nuestro entorno, como por ejemplo los paths o el puerto serie al que subiremos el código.

De momento, si intentamos compilar con el nuevo ide (0022) nos dará un error ya que hay librerías que se ve que han desaparecido. En particular la librería wiring_serial.c ha dejado de venir con el nuevo IDE. Con lo que tenemos que eliminarlas. Ademas con esta version tendremos que incluir el archivo $(ARDUINO)/WString.cpp

En la variable SRC tendríamos como vemos las librerías c necesarias para la compilación y en la variable CXXSRC tendríamos las librerías c++. Estas librerías se compilan y se guardan los objetos en nuestro core de arduino, en adelante “corelibs”, (/usr/lib/arduino) y estos objetos no se eliminan al hacer un make clean. Así que hay que tener en cuenta que si por cualquier razón tocáramos estas librerías habría que eliminar los objetos que las referencian para que al volver a hacer el make nos las vuelva a compilar. Si nuestro programa requiriera de otras librerías las tendríamos que copiar al corelibs y referenciarlas en el Makefile para que se compilaran.

Al intentar compilar nos aparece tambien el siguiente error:

applet/core.a(Print.o):(.data+0×6): more undefined references to `__cxa_pure_virtual` follow

Para arreglarlo tendremos que añadir lo siguiente al corelibs/main.cpp

extern “C” void __cxa_pure_virtual()
{
while(1);
}

Llegados a este punto estaríamos preparados para hacer sin problemas:

make clean
make
make upload

Categories: General Tags:

Funcionamiento del display LCD Powertip 20×4

sábado, 9 de enero de 2010 2 comentarios
0
Vote

PowerTip 2004A

En principio este display puede parecer como cualquier otro display con controladora HD44780 compatible, pero tiene la peculiaridad de que el contraste se regula con voltaje negativo “0 a -5v” esto hace bastante complicado de manejar ya que en la placa Arduino, o micros ATmel no tenemos una fuente de voltage similar.

Cuando este display se conecta como un HD44780 no se muestran las tipicas barras negras de contraste, aunque realmente la logica del dispositivo esta encendida no llegamos a ver nada en absoluto.

Para solucionar este dilema tenemos que echar mano de un integrado convertidor de voltaje como es el ICL7660, que basicamente convierte una señal de +4,5V / +20V a -4,5 / -20V el diagrama de conexion es muy simple, seria algo como lo siguiente:

El modelo exacto del display es PC2004LRU-AWB-H-Q tambien he leido que se comercializa con otro nombre por la empresa de circuitos electronicos Cebek

PD: por lo que he leido tambien se puede implementar la solucion con un temporizador 555, pero eso es otra historia.

Referencias:

Categories: General Tags:

Usando “La Fonera” con Arduino

martes, 12 de mayo de 2009 2 comentarios
1
Vote

fon-dd-wrt

Aqui aprenderemos a utilizar el router de la fonera utilizando su puerto serie con arduino. Esto nos proporcionara wifi para nuestro proyecto y mucho mas. Para ello lo primero que tenemos que hacer es hacer un downgrade del firmware de la fonera para poderle cargar el linux dd-wrt que nos permitira tener nuestras aplicaciones un pequeño espacio de disco flash, etc.

Para hacer el downgrade se ha seguido el enlace que aparece en las referencias. En definitiva nos hace falta tener conectado la fonera a un router que tengamos en casa, al cual ahi que ponerle los siguientes parametros. (IP: 213.134.45.129, MASK: 255.255.255.0, DNS: 88.198.165.155). Por otro lado a nuestra fonera tendremos que ponerle la siguiente informacion de red (IP: 213.134.45.00, MASK: 255.255.255.0, GATEWAY y DNS: 213.134.45.129 ).

Ahora el siguiente paso es reiniciar la fonera hasta que se haga el downgrade. El autor del enlace de referencia asegura que le salio al segundo o tercer reinicio. Yo puedo decir que la mia funciono al intento numero treinta y pico. Esta bien saberlo para que no creais que no funciona. Pero de dos o tres nada, que me pegue una tarde entera reiniciando la dichosa fonera.

Bueno pues una vez que tenemos ya la version 0.7.1 r1, el siguiente paso es habilitarle la conexion por ssh. Para ello tenemos que crear dos archivos html que tendremos que ejecutar abriendolos con el navegar y haciendo click en sus respectivos botones de submit.

step1.html

<html>
<head>
</head>
<body>
<center>
<form method="post" action="http://192.168.10.1/cgi-bin/webif/connection.sh" enctype="multipart/form-data">
<input name="username" value="$(/usr/sbin/iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT)" size="68" >
<input type="submit" name="submit" value="Submit" onClick="{this.form.wifimode.value='";' + this.form.wifimode.value +';"'}" />
</form>
</body>
</html>

step2.html

<html>
<head>
</head>
<body>
<center>
<form method="post" action="http://192.168.10.1/cgi-bin/webif/connection.sh" enctype="multipart/form-data">
<input name="username" value="$(/etc/init.d/dropbear)" size="68" >
<input type="submit" name="submit" value="Submit" onClick="{this.form.wifimode.value='";' + this.form.wifimode.value +';"'}" />
</form>
</body>
</html>

En el primer paso lo que hacemos es habilitar en el cortafuegos de la fonera el acceso por el puerto 22 y en el segundo paso lo que hacemos es iniciar el demonio del ssh.

Ahora ya podemos conectarnos por ssh a la fonera, y de echo tenemos que conectarnos para hacer el siguiente paso que consistira en subir un firmware modificado de la fonera, que entre otras cosas nos permitira utilizar el espacio que tiene la misma.

cd /tmp
wget http://fonera.info/camicia/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma
mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7
reboot

Este proceso es normal que tarde un tiempo. Entre la descarga y la subida del firmware pueden pasar 10 minutitos.

Ahora el siguiente paso es volver a conectarnos por ssh y ejecutar los siguientes comandos para hacer que el RedBoot (Servicio de arranque antes de iniciar la fonera) no arranque el firmare de la fonera y se nos quede escuchando para conectarnos.

cd /tmp
wget http://fonera.info/camicia/out.hex
mtd -e “RedBoot config” write out.hex “RedBoot config”
reboot

Una vez echo, ahora tenemos que conectarnos a dicho RedBoot mediante telnet. La direccion ip que toma redboot en este estado es la 192.168.1.254, con lo que necesitaremos configurar en nuestro pc o donde estemos una ip que este en esa misma subred. (pe. 192.168.1.166).

Hacemos telnet al puerto 9000 en los primeros 10 segundos de arrancar y voilá, ya estamos dentro. Nos aparecera el prompt de RedBoot.

Antes de continuar con este paso tendremos que descargarnos la ultima version buena del DD-WRT. La que yo use es la v24 Final. El link esta mas abajo en las referencias.

Una vez lo hemos descargado lo colocamos bajo un servidor tftp en nuestro pc, nos aseguramos que esta arrancado y volvemos al prompt del RedBoot en la fonera para ejecutar los siguientes comandos:

ip_address -l 192.168.1.254/24 -h 192.168.1.166

RedBoot> fis init
About to initialize [format] FLASH image system – continue (y/n)? y
*** Initialize FLASH Image System
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0x80ff0000-0×81000000 at 0xa87e0000: .
RedBoot> load -r -b 0×80041000 linux.bin
Using default protocol (TFTP)
Raw file loaded 0×80041000-0x80662fff, assumed entry at 0×80041000
RedBoot> fis create linux

Este ultimo proceso de subida del firmare suele durar bastante tiempo (45min – 2 horas), asi que paciencia.

Una vez terminemos con esto reiniciara la fonera y ya la tendremos con nuestro nuevo firmware.

En cuanto a la conexion con arduino utilizando el puerto serie, esto dependera del modelo de nuestra fonera. En la siguiente imagen se ven los pines del puerto serie de la fonera para su modelo 2100 que es el que yo use. Aun asi en las referencias esta el enlace a la pagina donde lo saque y esta tambien el esquema de la fonera 2200.

fon2100e_internalsio

Para conectarlo a arduino tendriamos conectar los cables de Rx y Tx de la fonera al Rx y Tx del arduino. Dos cosas. Estos Rx y Tx (al menos en el 2100) estan al reves, es decir, el Rx de la Fonera va al Rx del arduino y el Tx de la fonera al Tx del arduino. La otra cosa es que al menos de momento solo he conseguido echarlo andar con el puerto serie hardware del arduino. Las pruebas que he hecho con las librerias de softserial no terminan de funcionar correctamente.

Una vez que tenemos conectado por serie la fonera ya seria cuestion de utilizar por ejemplo el programa minicom para mandar comandos al arduino.

Bueno hasta aqui este primero post de la fonera. En breve sacare otro con mas de las cosas que se pueden hacer con este cacharrito de 20 €.

Referencias:

http://www.dd-wrt.com/wiki/index.php/LaFonera_Software_Flashing

http://www.geocities.jp/arduino_diecimila/wifi/index_en.html

http://www.dd-wrt.com/dd-wrtv2/down.php?path=downloads%2Fv24%2FAtheros+WiSoc%2FFonera/

Categories: General Tags:

Mas gastadas, MicroFresadora Proxxon MF70 + motores CENECE 23HR56

martes, 21 de abril de 2009 6 comentarios
0
Vote

Llegaron las ultimas gastadas para el proyecto del cacharro CNC, aqui estan algunas imagenes ilustrativas de los elementos:

motores Cenecé 23HR56 de 400 pasos:

dscf0376_jpg

motor encima de una misteriosa caja

dscf0378_jpg

el carton lleva dentro un misterioso contenido, que será

dscf0381_jpg

aqui esta el ansiado articulo, mi tesorooo

dscf0383_jpg

mesa de coordenadas que lleva la maquina

dscf0384_jpg

en el interior esta lo interesante

dscf0386_jpg

varios angulos del aparato

dscf0387_jpg

dscf0388_jpg

dscf0389_jpg

Referencias:
http://www.cenece.com
http://www.proxxon.com/

Categories: Gastadas Tags:

Arduino + LM35

viernes, 17 de abril de 2009 5 comentarios
0
Vote

lm35dz

Para poder leer la temperatura del sensor LM35 en Arduino solo hay que conectar el sensor como el siguiente esquema:

esquema_lm35

Donde R1 es una resistencia de 100K conectada a tierra formando un “Pull-Down”, una vez hecho esto cargamos el siguiente codigo en el IDE de Arduino y abrimos el puertos serie donde deberia mostrar cada 5 segundos la temperatura recogida.

PD: lo mas importante precio menos de 2€

/*
*
* Lectura de temperatura de sensor LM35
*
* LM35 pinout
* pin Vs a arduino +5V
* pin Vout a analogpin y resistencia de 100K a GND (Pull-Down)
* pin GND a arduino GND
*/

int analogPin = 0; // Pin analogico 0 de Arduino
int temperature = 0;
int lm35read;

void setup()
{
Serial.begin(9600);
}

void loop ()
{

lm35read = analogRead(analogPin);
temperature = (5.0 * lm35read * 100.0)/1024.0;
Serial.print(temperature);
Serial.println(“C”);
delay(5000);

}

Referencias:

  • Datasheet de LM35
  • http://www.arduino.cc/en/Tutorial/DigitalPins
  • Categories: General Tags:

    Ultima gastada, controladora CNC 3 ejes

    viernes, 17 de abril de 2009 3 comentarios
    0
    Vote

    dscf0375

    Ya me llego la controladora para el proyecto CNC que estoy montando, seguire informando de los avances de la construccion del cacharro.

    Caracteristicas:
    Stepperworld FET-3, controladora por puerto paralelo de 3 Ejes con soporte de motores paso a paso unipolares de hasta 15A por fase, lleva 12 transistores Mosfets, 2 salidas auxiliares TTL para relés y 3 entradas para interruptores de fin de carrera.

    Referencias:
    http://www.stepperworld.com/fet3.htm

    Categories: Gastadas Tags:

    Recepcion IR con Arduino (protocolo NEC)

    jueves, 26 de marzo de 2009 10 comentarios
    0
    Vote

    arduino-ir

    Lo que tenemos aqui es un receptor IR 38khz TSOP4838 y la idea es programar el Arduino para que reciba los codigos IR de mandos a distancia, en concreto los mandos que he probado parecen usar el protocolo NEC que esta bastante extendido

    El primer paso es conectar el receptor IR como se ve en la foto, con el positivo a una resistencia de 220 ohm, aqui abajo se muestra el esquema de conexionado del datasheet, pero voy a obviar algunos componentes por simplificar la tarea.

    tsop4838-conexionado

    Seguidamente nos descargamos la libreria NECIRcv de http://wikiputer.org/arduino/NECIRrcv.zip y la copiamos el directorio usual arduino-013/hardware/libraries/

    Podemos cargar el ejemplo que viene con la libreria pero hay que añadir un include al principio para que la compilacion no de errores, quedaria como lo siguiente:

    // look for IR codes and print them as they are received
    #include <WProgram.h>
    #include <NECIRrcv.h>
    #define IRPIN 8 // pin that IR detector is connected to

    NECIRrcv ir(IRPIN) ;

    void setup()
    {
    Serial.begin(9600) ;
    Serial.println(“NEC IR code reception”) ;
    ir.begin() ;
    }

    void loop()
    {
    unsigned long ircode ;

    while (ir.available()) {
    ircode = ir.read() ;
    Serial.print(“got code: 0x”) ;
    Serial.println(ircode,HEX) ;
    }
    }

    Una vez compilado y subido al arduino abrimos la consola serie y pulsando alguno de los botones de los mandos los codigos HEX salen en pantalla

    nec_printcodes

    Mandos usados para las pruebas, mando para receptor Yamaha RX-V340 y mando para sintonizador TDT-USB Zappa:
    mandos

    Referencias:
    - post original: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556/0
    - informacion util sobre protocolos IR: http://www.sbprojects.com/knowledge/ir/ir.htm

    Categories: General Tags: