Arduino, o como aprender mucho con poco

16 395
Escrito por Nico Rey

Por Nico Rey (@reynico)

Siempre tuve cierto interés por juntar el Software con el Hardware. Poder manejar mi casa con la computadora, activar o desactivar luces o simplemente hacer inteligente a un aparato sin gracia aparente fue lo que me llevó a leer sobre los microcontroladores PIC de Microchip. Armé mi programador JDM por puerto serie (¡Que épocas!) y conseguí algunos 16f84. Con mi padre pasábamos horas boludeando con los PIC, desde parpadear un led hasta manejar aparatos de la casa, interpretar códigos DTMF para hacer un control remoto por celular, y demás. Así siempre estuve enganchado con la electrónica y la PC. Pasaron los años y siempre estuve jugando con PIC’s, principalmente 16f628a y 18f2550, entre otros.

Hace poco tiempo me empecé a interesar por Arduino. Empecé a ver como se hacía popular esta plataforma de desarrollo entre los aficionados a la electrónica. Al ser una plataforma libre vos mismo podés bajarte los diagramas para armarlo aunque considerando los costos de los componentes y el tiempo de armado y comparándolo con lo que sale un Arduino comprado no lo pensás mucho. por 100 pesos (u$s 23) podés comprarte un Arduino UNO completo con 14 entradas y salidas digitales (6 de ellas pueden usarse como salidas PWM), 6 entradas analógicas y un Atmega 328p corriendo a 16mhz. A eso sumale la interfaz USB, un regulador de voltaje que nos entrega 5 y 3,3 volts, conector ISCP y 32KB de memoria para nuestros proyectos.

Arduino UNO Board

(Estamos frente a un juguetito interesante, veamos lo que puede hacer…)

En principio debemos instalar el software necesario en nuestra computadora para poder comunicarnos con el Arduino. La IDE oficial se encuentra en el sitio web de Arduino, mas específicamente acá: http://arduino.cc/en/Main/Software. Yo personalmente encontré mucho mas lindo, usable y completo un software llamado ArduIDE: http://mupuf.org/project/arduide/ Si bien utiliza la base del software original de Arduino, la IDE es mucho mas cómoda y completa. De todos modos para empezar y no mezclar las cosas usaremos todo lo oficial.

Yo utilicé Ubuntu 10.04 para las pruebas, asi que un simple sudo apt-get install arduino nos instala el software necesario.

Blink en Arduino

Nuestro software ya está corriendo, y estamos en condiciones de conectar nuestro Arduino a la PC. Cable USB > enchufar > listo. Nuestro Arduino encenderá un led rojo indicando que tiene energía. Ahora vamos a la ide. File > Examples > Basic > Blink

Arduino UNO Board

Con eso abriremos un código de ejemplo que hará parpadear un led en la salida número 13. Para facilitarnos las cosas aún más, el dispositivo tiene ya un led incorporado a la plaqueta que está conectado a la salida 13. es el LED serigrafiado con L.

Bien, hacemos clic en la flecha a la derecha y el software compilará el código para luego guardarlo en la memoria del Atmega. Un mensaje de Done uploading sobre el borde celeste verdoso nos da la grata noticia de que el software se quemó al controlador sin problemas.
Instantáneamente veremos el led rojo parpadeando cada 1 segundo, tal cual indicó el ejemplo.

Probemos algo más interesante.. ¿Que tal leer la posición de un potenciómetro y reflejarla en la velocidad de parpadeo de un led? Bueno, dentro de los ejemplos, en los analógicos, tenemos uno llamado AnalogInput, veamos el código:

int sensorPin = A0;

int ledPin = 13;

int sensorValue = 0;

void setup() {

pinMode(ledPin, OUTPUT); 

}

void loop() {

sensorValue = analogRead(sensorPin);   

digitalWrite(ledPin, HIGH); 

delay(sensorValue);         

digitalWrite(ledPin, LOW);  

delay(sensorValue);                 

}

Lo primero que tenemos son unas variables declaradas como enteros, A0 será el pin del sensor, en nuestro caso un potenciómetro. 13 será el pin del led y 0 será el valor por defecto del sensor.

Arduino UNO Board con potenciómetro

Con setup() indicamos al hardware que ledpin (definido como 13) será la salida. Luego se hace un ciclo (loop) que lee el sensor con la funcion analogRead() y enciende el led. luego hace una espera (delay), esa espera tendrá un tiempo igual al que fue leido del sensor. Luego de ese tiempo el led se apagará y se repetirá el ciclo infinitamente.

Para aprender más sobre las funciones de programación, no podemos dejar de leer el sitio, secciones Learning y Reference.

¿Cómo Arduino hizo esto? Bueno, las entradas analógicas leen 1024 niveles, empezando desde 0 para el nivel mas bajo y 1023 para el más alto. El microcontrolador interpreta estos valores (que son leidos con la función analogRead) y ejecuta la acción necesaria. El potenciometro es un potenciometro común y corriente, de 10kohms con uno de sus pines conectado a  la salida de 5 volts que nos otorga la plaqueta y el otro pin a negativo o GND.

Para finalizar esta prueba les quiero mostrar la conexion serial con la pc, permitiendo tener un output a una consola en la pc. Agregando la definición necesaria para el puerto usando Serial.begin(9600) (donde 9600 es la velocidad de transmisión en baudios) podemos leer el estado de las entradas por una consolita,

void setup() {

Serial.begin(9600);

}

Arduino UNO Board sensando potenciómetro

En la imagen podemos ver como la consola muestra que el potenciómetro está en el valor 789.

Saliendo un poco de lo técnico, pongámonos a pensar un poco lo que tenemos en nuestras manos. A nivel económico tenemos algo que equivale a tener 100 pesos argentinos (u$s 23), pero con ojos nerds vemos mucho más que eso, estamos frente a una plataforma de aprendizaje (muy) interactiva, donde el usuario puede ser cualquier persona que sepa leer y escribir (y tenga acceso a una computadora). Cualquier niño joven puede aprender muchísimo con Arduino y aprovechando que se acerca Navidad, un Arduino UNO no es mal regalo, ¿Que opinan? Tal vez si queremos hacer un regalo más completo podemos gastarnos 200 pesos en total, añadiendo algunos leds, potenciómetros, cables, una placa experimental y una fuente de alimentación externa. Ya con eso tenés diversión para rato.

Y Arduino no termina acá. El equipo de trabajo desarrolló muchísimos modelos de Arduino, todos con usos más especificos que otros, miniatura, súper completos, muchas entradas/salidas, entre otros.

 Arduinos

Como pueden ver, el abanico de posibilidades y la capacidad de expansión es terriblemente excelente. ¡Y esperá! hay más…

Arduino es una plataforma libre, hardware libre, software libre. Por lo tanto, vos, yo, cualquiera puede diseñar nuevos dispositivos e interfaces para Arduino como por ejemplo WiFly, un módulo wi-fi para Arduino, con lo que podríamos tener un servidor web inalámbrico de muy bajo consumo.

Arduino Wi fi

Yo por lo pronto ya me estoy encargando un Ehernet Shield, mi idea es dejar el Arduino conectado con a Internet para poder tener un mini servidor web con una tarjeta de memoria para la red local y de paso leer el estado de algunos sensores a través de la web.

Un verdadero enamorado de la tecnología en general y del Hardware y el software libre en particular. Oriundo de Tres Arroyos, se pasa los días estudiando Ingeniería en sistemas y administrando uno de sus proyectos, HTForos.

16 COMENTARIOS

  1. Está buena la entrada y eso de la “filosofia libre”. Pero sigo sin apoyarlo, yo como tecnico. A mi parecer no representa ninguna diferencia de lo que ya hay o se pueda hacer con un PIC. Será por que soy de esas personas que todabia hago mis plaquetas a mano como mi obra de arte.

    Si nos enfocamos en que es mucho mas facil de aprender para alguien que no tiene mucha idea de electronica, es un lujo pero solo un poco mas que comprar uno de esos legos programables.

    Si tienen tiempo les dejo una entrada de neoteo sobre arduino. Mas o menos al final hace una comparativa bien clara
    http://www.neoteo.com/comparativa-arduino-arduino-vs-el-resto-15399

    Saludos!!

    • Depende..

      Ahí el autor dice que un Arduino cuesta 50 euros (!!!) yo pagué menos de 20 euros el mio. Por 50 euros capaz que te comprás un Mega. Además vos sacás el Atmega del Arduino y podés routear cada pin como se te cante, sin necesidad de quedar “atado” al diseño del Arduino. O sea el chabón que escribió esa nota es tanto o más fanático que yo al redactar, hace comparaciones re boludas de Linux vs Windows, Firefox vs IE… o sea, WTF. No desprestigio a los pics porque es lo que yo también sigo usando y es también con lo que me inicié.

      en ebay un 16F876A sale 5 dolares, un UNO sale 20. el UNO trae el pcb, el microcontrolador, los pines de entrada-salida, el (los) cristales, el conector ISCP, el conector USB, leds, los reguladores de voltaje, etc. O sea, no es comparable.

      • Creo que no te gusto mucho la entrada, de cualquier forma creo que se está comparando cosas diferentes en cierta forma, arduino no es atmega. Arduino es una plataforma, algo asi como un “entrenador de pic” la cual puede ser repliada con un Pic tranquilamente, valga la redundancia.

        Si es para hacer pruebas está perfecto, pero si deseas hacer algo en particular solo debes usar un Atmega, pic, freescale etc

        Saludos.

        PD: Las notificaciones de suscripcion a entradas definitvamente no anda. Nose si a alguien mas le pasa.

      • Muy bueno el artículo. Arduino tienen muchísimas ventajas, en especial para el NO electrónico. El caso se da en personas que no saben electrónica, pero si quieren programar y realizar pequeños automatismos rápidamente…

        Respecto al artículo de Mario, es una comparación, él trabaja mucho con PICs y en su momento dió su punto de vista… El post es de abril de 2009, seguramente esos precios eran vigentes a la hora de redactar.

        Saludos.

    • Mi texto va a ser mas desarticulado que de costumbre:

      Por mi parte lo consegui gratis al arduino (UNO) directo de Italia… ni el envio pague.

      Otra herramienta que encontre, y alguna vez se la comente a Nico, es el ModKit. Es un ide, que ademas de tirar lineas de codigo, podes programar tirando controles/modulos (loop’s, condicion, etc). No tengo conocimiento de como esta actualmente el proyecto, pero lo ultimo siempre esta disponible para los que donan, mientras lo free es una version recortada o limitada.

      Por otra parte, arduino fue el inovador… pero ya en el mercado se encuntran muchas placas que inlcuyen en su nombre las letras “duino”, como el caso de la NetDuino Plus que posee micro mas grande, ethernet lector de tarjetas y otras cosas ya incluido. Incluso, teoricamente son compatibles con los shields de arduino…habria que probar en la practica. Aclaro que se llaman NetDuino porque se programan desde visual studio.

      Slds.

  2. Me gustó mucho este artículo Nico.

    ¿Como le decís a un arduino que cuando el pote llegue a 10k eso equivale a 1023? (o a cero, no se como trabaja, como ves).

    O para ponerlo mas en claro: ¿Como calibrás al arduino contra el pote?

    ¡Saludos!

    • Hola Juan, me alegro que te haya gustado el articulo.

      Las entradas no se ajustan, si alimentás con 5 volts la entrada analógica, ésta toma el valor 1023, mientras que si la alimentás con negativo (gnd) el valor es cero.

      Podés hacer ajustes mas precisos y una calibración usando librerías externas aunque no lo veo muy necesario

  3. Me encanta todo lo que tiene que ver con electrónica. Desgraciadamente vivo en Corrientes, en estos lados no hay variedad ni calidad en componentes. Cuando fui a Buenos Aires aproveché y compre un pic 18f4550 para hacer un pinguino (wiki.pinguino.cc) que sería como un clon de arduino pero con pics. Lo hice mas que nada por el hecho de que toda mi experiencia es con PICs.

    Recomiendo leer un poco sobre esta alternativa que para mí es muy buena.

    Saludos.

  4. Muy buen articulo! Hace rato vengo caliente con el arduino. Yo programo PICs 16f84 desde hace un tiempo, y creo que arduino te da posibilidades infinitas.
    Donde puedo conseguir el UNO o cualquier otro modelo a buen precio en argentina?

    Gracias!

    • Creo que la unico opcion es comprar via web, ya sea ebay o casas de electronica que hacen envios (yo encontre en chile, brasil y mexico).

  5. Muy buen artículo!. Yo vengo trabajando con los PIC (hasta ahora utilicé el 16F877A, el 16F887 (una actualización del anterior) y ahora estoy con un 12F683 para un pequeño proyecto de censado de temperatura (con un DS18S20) y corriente (con un sensor de efecto Hall Allegro, no me acuerdo el modelo exacto). Hace rato que vengo leyendo de Arduino, y la verdad que cada vez me entusiasmo más. Un saludo!

  6. Arduino es una buena herramienta, sin embargo, le quita las posibilidades de realmente aprender a los que van iniciando, creando una falsa ilusion de poder hacer mucho, sabiendo poco.

    Eso es realmente un problema ya que cuando se tenga que hacer algo para lo cual arduino no tenga librerias pues no sera tan facil que encuenten la solucion.

    Saludos!

    • Librerias? Para programarlo via usb…para que otra cosa?

      Por ahi te deja las cosas mas faciles, pero nada es una solucion al 100% para nada si no esta hecho a medida…y claramente estas placas son para uso general. Vi cosas de robotica hasta automatizaciones de cortinas…y modelado/diseño 3d sumado a un kinect. Pensandolo mejor…lo limitado puede ser nuestra mente.

  7. [...] es nada más ni nada menos que una “placa computadora”, algo como vimos anteriormente cuando Nicolás Rey explicó como eran las placas Arduino pero en este caso es una placa muchísimo mas compleja, de hecho podríamos compararla con una PC [...]

Deja un respuesta