Tag Archive for 'Arduino'

Instalando Arduino en Gentoo Linux

Hoy me propuse hacer funcionar el IDE de Arduino en Gentoo Linux, para esto tuve que hacer lo siguiente:

Leí la guía de instalación que está en
http://en.gentoo-wiki.com/wiki/Crossdev#AVR_Architecture
pero con las modificaciones para multilib de:
https://bugs.gentoo.org/show_bug.cgi?id=378387

También tuve que modificar el layout de la configuración de portage para adecuarlo al compilador avr:

http://www.gentoo-wiki.info/TIP_New_/etc/portage_layout

Pero la guía que realmente sirve está en:
http://arduino.cc/forum/index.php/topic,93672.0.html

Estos son los pasos (como root)

# layman -a crossdev
# emerge sys-devel/crossdev

# cp /usr/bin/crossdev /usr/bin/crossdev.bak
# vi /usr/bin/crossdev

editar linea 831: set_use_force ${pkg} multilib

# emerge -C cross-avr/gcc cross-avr/binutils cross-avr/avr-libc
# ln -s /usr/i686-pc-linux-gnu/avr/lib/ldscripts /usr/avr/lib/ldscripts
# USE="-openmp" crossdev --target avr --gcc 4.6.2 --binutils 2.21.1 --libc 1.7.1 -s4 --without-headers

# emerge cross-avr/binutils
# emerge cross-avr/gcc cross-avr/avr-libc

(como usuario normal)

$ avr-gcc -v
Usando especificaciones internas.
COLLECT_GCC=/usr/i686-pc-linux-gnu/avr/gcc-bin/4.6.2/avr-gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/avr/4.6.2/lto-wrapper
Objetivo: avr
Configurado con: /var/tmp/portage/portage/cross-avr/gcc-4.6.2/work/gcc-4.6.2/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/avr/gcc-bin/4.6.2 --includedir=/usr/lib/gcc/avr/4.6.2/include --datadir=/usr/share/gcc-data/avr/4.6.2 --mandir=/usr/share/gcc-data/avr/4.6.2/man --infodir=/usr/share/gcc-data/avr/4.6.2/info --with-gxx-include-dir=/usr/lib/gcc/avr/4.6.2/include/g++-v4 --host=i686-pc-linux-gnu --target=avr --build=i686-pc-linux-gnu --disable-altivec --disable-fixed-point --without-ppl --without-cloog --enable-lto --enable-nls --without-included-gettext --with-system-zlib --disable-werror --enable-secureplt --enable-multilib --disable-libmudflap --disable-libssp --disable-libgomp --with-python-dir=/share/gcc-data/avr/4.6.2/python --enable-checking=release --disable-libgcj --disable-libquadmath --enable-languages=c,c++ --enable-shared --disable-threads --disable-bootstrap --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.6.2 p1.4, pie-0.5.0'
Modelo de hilos: single
gcc versión 4.6.2 (Gentoo 4.6.2 p1.4, pie-0.5.0)

$ echo "int main() {}" > test.c
$ avr-gcc -mmcu=avr5 test.c
$ file a.out
a.out: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, not stripped

Ahora para instalar la última IDE:

# echo dev-embedded/arduino java >> /etc/portage/package.use/package.use
# emerge -av arduino

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild N ] dev-embedded/arduino-1.0 USE="java" 0 kB

Total: 1 package (1 new), Size of downloads: 0 kB

Would you like to merge these packages? [Yes/No]

Ya se puede instalar por USB el Arduino:

$ dmesg
usb 6-1: new full-speed USB device number 26 using uhci_hcd
usb 6-1: New USB device found, idVendor=2341, idProduct=0001
usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber=220
usb 6-1: Product: Arduino Uno
usb 6-1: Manufacturer: Arduino (www.arduino.cc)
usb 6-1: SerialNumber: 649383233313514002E1
cdc_acm 6-1:1.0: ttyACM0: USB ACM device
usbcore: registered new interface driver cdc_acm
cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
$ ls -l /dev/ttyACM0
crw-rw---- 1 root uucp 166, 0 mar 17 12:19 /dev/ttyACM0
$ arduino &

y voilá:

Arduino IDE 1.0 Gentoo Linux

UPDATE: En la notebook tuve que reinstalar el rxtx para que el IDE Arduino reconozca el /dev/ttyACM0

# emerge rxtx

Ahora a soldar y programar!

Control de Motor Rasti con Arduino

Siguiendo con el proyecto de Robot, esta vez le tocó el turno al control de motor de Rasti Motobox.
Para esto tuve en cuenta varios tutoriales:
Control your motors with L293D and Arduino
Tutorial Set up a L293 H-Bridge (Motor Driver)
How to drive dc motor using L293D with arduino
Y el Datasheet del ST L293B , también me sirvió un esquema del Datasheet del TI L293 porque trae un diagrama bastante bueno que reproduzco acá:

Diagrama L293

Diagrama L293 para un motor bidireccional

También pude encontrar este material pero al final no lo usé:
Manejo de potencia para motores con el integrado L293D

Como el L293 no trae diodos de protección internos para que la corriente generada por el motor cuando gira por inercia no ingrese en el circuito de la Arduino, fue necesario agregar 4 diodos externos que no están en los tutoriales pero si en el esquema del Datasheet.

Acá están las fotos de como quedó armado:
Control de Motor Rasti con Arduino

Control de Motor Rasti con Arduino

Montaje de Motor Rasti con caja reductora, eje y rueda

Control de Motor Rasti con Arduino

Control de Motor Rasti con Arduino

El siguiente es el sketch (programa) subido a la Arduino, que hace avanzar el motor 3 segundos hacia un lado y 3 hacia el otro alternativamente con una pausa de 1 segundo antes de cambiar:

// Community of Robots//
//Dc motor example code//
int motorpin1 = 3; //define digital output pin no.
int motorpin2 = 4; //define digital output pin no.
void setup () {
pinMode(motorpin1,OUTPUT); //set pin 3 as output
pinMode(motorpin2,OUTPUT); // set pin 4 as output
}

void loop () {
digitalWrite(motorpin1,LOW);
digitalWrite(motorpin2,LOW);
delay(1000);
digitalWrite(motorpin1,LOW);
digitalWrite(motorpin2,HIGH);
delay(3000);
digitalWrite(motorpin1,LOW);
digitalWrite(motorpin2,LOW);
delay(1000);
digitalWrite(motorpin1,HIGH);
digitalWrite(motorpin2,LOW);
delay(3000);
}

Video de Control de Motor Rasti o embebido:

El siguiente paso es agregar más voltaje porque el motor no tiene mucha potencia, y armar la oruga para colocar la Arduino y que se pueda mover. Puede ser que sea necesario colocar un disipador en el L293.

Reseña Histórica: Si quieren leer una historia de un pionero de la robótica que comenzó con motores Rasti hace 30 años pueden leerla en:
La historia de mi primer robot , por Eduardo J. Carletti

Contenedores para componentes electrónicos

Para organizar mejor los componentes electrónicos para los proyectos conseguí estos en Colombraro por $125 en total:

 

Display LCD 16×2 con Arduino

Siguiendo con los ejemplos de Arduino, pude seguir este tutorial para soldar LCD a conectores (Header) para poder conectarlo a la protoboard.

http://web.cecs.pdx.edu/~gerry/class/EAS199B/howto/LCDwiring/panel_prep.html

Así lo preparé para soldar:

LCD 16x2 listo para soldar

LCD 16x2 listo para soldar

Este es el equipo para soldar:

Equipo para Soldar

Equipo para Soldar

Así quedó:

LCD 16x2 con Headers Soldados

LCD 16x2 con Headers Soldados

A continuación armé un circuito con el LCD en el Protoboard basado en el circuito siguiente sacado de
http://robocodes.guiskas.com/2010/05/practica1-lcd-con-ldr/

LCD LDR Arduino Circuit

LCD LDR Arduino Circuit

Las siguientes son las modificaciones al circuito:

  • Coloqué un resistor de 10 k ohm en el pin 15 para bajar un poco el backlight que era muy fuerte
  • El LDR en Analog IN 0 y el botón en Digital IN 2 no los conecté todavía

Cargué primero un esquema (programa) con el ejemplo “Hello World” y anduvo, asi que despues cargué el siguiente modificado en base al ejemplo “Scroll” cambiando el texto por “blog.nivel7.com.ar” y el delay del desplazamiento de 150 a 250:

/*
LiquidCrystal Library - scrollDisplayLeft() and scrollDisplayRight()

Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.

This sketch prints "Hello World!" to the LCD and uses the
scrollDisplayLeft() and scrollDisplayRight() methods to scroll
the text.

The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)

Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/LiquidCrystal

*/

// include the library code:
#include

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("blog.nivel7.com.ar");
delay(1000);
}

void loop() {
// scroll 13 positions (string length) to the left
// to move it offscreen left:
for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(250);
}

// scroll 29 positions (string length + display length) to the right
// to move it offscreen right:
for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
// scroll one position right:
lcd.scrollDisplayRight();
// wait a bit:
delay(250);
}

// scroll 16 positions (display length + string length) to the left
// to move it back to center:
for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(250);
}

// delay at the end of the full loop:
delay(1000);


}

Y estos son los resultados:

LCD con Arduino, Ejemplo Hello World

LCD con Arduino, Ejemplo Hello World

Arduino con LCD 16x2

Arduino con LCD 16x2

 

Resultado en video:

Video de Hello World para móviles o embebido:

Video de scroll blog.nivel7.com.ar o embebido:

Semáforo de autos y peatonal con botón usando Arduino

Para empezar a probar circuitos básicos, decidí seguir algunos de los tutoriales, en particular me pareció interesante el de Semáforo de autos y peatonal interactivo que está en el libro Arduino Starter Kit Manual de Mike McRoberts , este es el diagrama:

Y este el circuito que armé basado en el diagrama, en la foto funcionando con una batería de 9v, teniendo cuidado que el positivo esté en el centro del conector a la placa.

Arduino con circuito de Semáforo

Arduino con circuito de Semáforo

Como el semáforo estaba programado para la lógica de Reino Unido, cambié un poco la lógica del sketch (programa) y los tiempos para Argentina:

// Project 4 - Interactive Traffic Lights
int carRed = 12; // assign the car lights
int carYellow = 11;
int carGreen = 10;
int pedRed = 9; // assign the pedestrian lights
int pedGreen = 8;
int button = 2; // button pin
int crossTime = 7000; // time allowed to cross
unsigned long changeTime; // time since button pressed
void setup() {
pinMode(carRed, OUTPUT);
pinMode(carYellow, OUTPUT);
pinMode(carGreen, OUTPUT);
pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
pinMode(button, INPUT); // button on pin 2
// turn on the green light
digitalWrite(carGreen, HIGH);
digitalWrite(pedRed, HIGH);
}
void loop() {
int state = digitalRead(button);
/* check if button is pressed and it is
over 5 seconds since last button press */
if (state == HIGH &amp;&amp; (millis() - changeTime) &gt; 5000) {
// Call the function to change the lights
changeLights();
}
}
void changeLights() {
digitalWrite(carGreen, LOW); // green off
digitalWrite(carYellow, HIGH); // yellow on
delay(2000); // wait 2 seconds
digitalWrite(carYellow, LOW); // yellow off
digitalWrite(carRed, HIGH); // red on
delay(1500); // wait 1 second till its safe
digitalWrite(pedRed, LOW); // ped red off
digitalWrite(pedGreen, HIGH); // ped green on
delay(crossTime); // wait for preset time period
// flash the ped green
digitalWrite(pedGreen, LOW); // ped red off
for (int x=0; x&lt;10; x++) {
digitalWrite(pedRed, HIGH);
delay(500);
digitalWrite(pedRed, LOW);
delay(500);
}
// turn ped red on
digitalWrite(pedRed, HIGH);
delay(500);
digitalWrite(carYellow, HIGH); // yellow on
digitalWrite(carRed, LOW); // red off
delay(1000);
digitalWrite(carGreen, HIGH);
digitalWrite(carYellow, LOW); // yellow off
// record the time since last change of lights
changeTime = millis();
// then return to the main program loop
}

El resultado final puede verse en el siguiente video para móviles

o embebido:

Lista de Compras para proyectos con Arduino

Ahora que la Arduino funciona, llegó el momento de empezar con algunos proyectos.

Tengo varios libros para apoyar los proyectos:
Make: Electronics, Learn by Discovery, Charles Platt
Getting Started With Arduino, Massimo Banzi
Beggining Arduino, Michael Mc Roberts
Manual de Programación Arduino, Brian W. Evans
Arduino Cookbook,Michael Margolis

Esta es la lista de materiales para proyectos con Arduino:

HIGH TEC ELECTRONICA
AV. RAUL SCALABRINI ORTIZ 67
(1414) CAPITAL FEDERAL
BUENOS AIRES
ARGENTINA
TEL : 011-4856-6972

    Multímetro Digital ZR161 Con buzzer. $40
    2 Protoboard $40
    LCD Azul 16×2 caracteres 65x15mm $65

Subtotal $145

Compras HIGH TECH

Compras HIGH TECH

Electrónica El Universo
Boulogne Sur Mer 917

    Alicate $14
    5 Resistores 100Ω $2
    5 Resistores 200 220Ω $2

Subtotal $18

Compras El Universo

Compras El Universo

Electrocomponentes
Paraná 128
4381-9558

    1 Circuito Integrado L293DB, Doble puente H para control de motores, 1A $16,31
    50 Resistor 1kΩ $2,25
    50 Resistor 10kΩ $2,25
    50 Resistor 150Ω $2,25
    10 Diodo Rectificador 1N4007 1Am 100V $1,11
    2 Potenciómetro 50kΩ $7,94
    2 Mini Preset montaje horizontal ajuste vertical 10k $6,15
    2 Transistor PN2222A $0,50
    2 soporte 2 pilas AA $2,98
    2 tira de conectores macho x 40 $1,45
    2 metros de cable wire wrap $4,50
    1 switch $1,36
    2 botones pushbutton $1,19
    5 led blanco 5mm $4,53
    5 led difuso rojo 5mm 40mCD $1,09
    5 led difuso verde 5mm 40mCD $1,09
    5 led difuso amarillo 5mm $1,09
    4 Sensor ldr Fotoresistor 10mm $9,97

SubTotal $68

Compras Electrocomponentes

Compras Electrocomponentes

Jugueterías Daisy
Av. San Juan 2283
4943-6558

    Rasti Cuatriciclo Motobox TRX250 300 piezas$207
    2 Baterías Recargables Sony Cycleenergy AA $60
Rasti Cuatriciclo Motobox

Rasti Cuatriciclo Motobox TRX 250

Subtotal $267
Total $498

Ahora que tengo todo para comenzar, solo me faltan algunos recipientes plásticos para guardar todo sin que se dañe y un poco de tiempo para seguir los tutoriales.

200Ω

Conectando LEDs a Arduino

Juguete que tenía LED

Juguete que tenía LED

Desarmando juguetes con leds que ya no funcionan porque se agotaron las baterías de tipo botón, se pueden obtener distintos tipos de LED, en este caso un led rojo de aprox. 3v (el juguete tenía 2 baterías de 1.5v) y un led blanco de aprox 4.5 v (el juguete tenía 3 baterías de 1.5v).
Cuando consiga el tester podré determinar exactamente los voltajes de los LED haciendo pasar corriente por ellos y midiendo la pérdida.

LED Rojo (izq.) y LED Blanco (der.)

LED Rojo (izq.) y LED Blanco (der.)

Como el pin 13 de la Arduino tiene un resistor de 220ohm incorporado, se puede conectar el LED rojo sin quemarlo.

Arduino con LED rojo en Pin 13 y LED blanco en 12

Arduino con LED rojo en Pin 13 y LED blanco en 12


Arduino con LEDs blanco y Rojo

Arduino con LEDs blanco y Rojo


En el pin 12 que entrega 5v conecté el led blanco.

Modificando el sketch Blink para 2 LED que enciendan alternativamente y vayan ‘acelerando’ y luego volver a la velocidad inicial quedó el siguiente código:

// defino la variable demora y la inicializo en 1000 (1 segundo)
int demora = 1000;

void setup() {                
  // initialize the digitals pin as an output.
  pinMode(12, OUTPUT);     
  pinMode(13, OUTPUT);     
}

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  delay(demora);              // wait 
  digitalWrite(12, HIGH);   // set the LED on
  delay(demora);              // wait 
  digitalWrite(13, LOW);    // set the LED off
  delay(demora);              // wait 
  digitalWrite(12, LOW);    // set the LED off
  delay(demora);              // wait 
  demora-=10;                 // disminuyo la demora en 10
  if (demora < 0) {           // si la demora es negativa la vuelvo a inicializar en 1000
    demora=1000;
  }
}

Encendiendo la Arduino con una fuente de 9V

Pude hacer funcionar la Arduino con una fuente de 9V. Para esto tuve que invertir la polaridad porque la fuente tenía el positivo en la parte externa del conector.

Arduino UNO con fuente de 9V

Arduino UNO con fuente de 9V

Fuente de 9V

Fuente de 9V

Polaridad cambiada

Polaridad cambiada

Instalando el Soft Arduino y Probando la Placa

Siguiendo la Guía de Instalación
http://www.arduino.cc/en/Guide/Windows
Está Instalado el Soft y ya está viva la Arduino conectada por USB, prendió el led de Power y titila el Led Interno.

Al arrancar la IDE noté que estaba muy lenta, tuve que desactivar el Bluetooth de la notebook según recomiendan en http://arduino.cc/forum/index.php?topic=50159.0 y anduvo bien, pero la mejor solución para no tener que desactivar el Bluetooth es reemplazar la DLL rxtxSerial.dll por la nueva sin problemas: http://arduino.cc/forum/index.php/topic,50986.msg363706.html#msg363706

Arduino UNO Funcionando

Arduino UNO Funcionando

Ya está funcionando!, Anduvieron bien los ejemplos Blink (lo cambié para 3 segundos de intervalo y tambien para bajar el prendido del led a 500 milisegundos) y BlinkWithoutDelay.

Probé aumentar el delay en 100ms en cada iteración y anduvo OK, con el botón de reset de la placa comienza de nuevo.

Este es el código que agregué en BlinkWithoutDelay:

  // Pausa
  delay(demora);
  // Incrementa demora en 100
  demora+=100;
  // Si la demora es más de 3seg vuelve a dejarla en 1 seg
  if (demora > 3000) {
     demora = 1000;
  }

El próximo paso es conseguir el multímetro, LEDs y algunos resistores para armar algún circuito.

Hoy llegó la Arduino UNO

Arduino Uno Pack

Arduino Uno Pack

Arduino Uno Board

Arduino Uno Board

Hoy me llegó la Arduino UNO, cuando tenga novedades del proyecto voy a ir posteando.

Categorías


Creative Commons License
blog.nivel7.com.ar is licensed under a Creative Commons Attribution 3.0 Unported License.