Programación en Arduino
Programación en Arduino
Arduino es una plataforma de prototipado electrónico de código abierto que permite crear proyectos
interactivos. La programación de Arduino se realiza utilizando un lenguaje basado en C/C++ y se lleva a
cabo a través de la IDE de Arduino (Entorno de Desarrollo Integrado), que facilita la escritura y carga de
programas (llamados "sketches") en la placa de Arduino.
Un poco de historia
El lenguaje del Arduino está basado en el mítico lenguaje C. Si ya has trabajado en C este tutorial te
parecerá un paseo. Si no, te basta con saber que C es el lenguaje en el que se ha desarrollado los sistemas
operativos UNIX, Linux, y cientos de sistemas, programas y aplicaciones de ordenador. El lenguaje del
Arduino es una versión reducida y mucho más sencilla de manejar que el lenguaje C. El objetivo de este
lenguaje es que puedas programar de una manera intuitiva concentrándote en lo que quieres hacer más que
en la manera de hacerlo.
Arduino fue desarrollado originalmente en el Interactive Design Institute en Ivrea (Italia) donde los
estudiantes estaban familiarizados con un lenguaje llamado Processing. Este lenguaje estaba orientado a
estudiantes de arte y diseño y utilizaba un entorno de desarrollo visual e intuitivo en el cual se basó el
entorno de desarrollo del Arduino y su lenguaje de programación.
Trabajar con un Arduino consiste fundamentalmente en interactuar con los diferentes puertos de entrada y
salida del Arduino. A fin de evitar al programador el engorro y la complejidad de programar estos puertos
(ya sean analógicos, digitales o de cualquier otro tipo) el lenguaje de Arduino usa una serie de librerías (de
las que no te tienes que preocupar ya que forman parte del lenguaje, ya las iremos viendo con detenimiento
más adelante). Estas librerías te permiten programar los pins digitales como puertos de entrada o salida, leer
entradas analógicas, controlar servos o encender y apagar motores de continua. La mayor parte de estas
librerías de base (“core libraries”) forman parte de una macro librería llamada Wiring desarrollada por
Hernando Barragán.
Cada vez que un nuevo puerto de entrada o salida es añadido al Arduino, un nuevo conjunto de librerías
especializadas en ese puerto es suministrada y mantenida por los desarrolladores del nuevo puerto.
int luz
Si (luz=1) entonces
Mensaje + días
Sino si (luz=0)
Mensaje + noches
Sino
Variables
Programar consiste básicamente en decirle a tu Arduino y a los actuadores que este controla desde sus
puertos (o “shields”) lo que tiene que hacer (o esperamos que haga, todos los programadores saben que estas
son cosas frecuentemente diferentes).
Desde un punto de vista práctico, podemos considerar las variables como los cajones de un escritorio, cada
uno tiene una etiqueta describiendo el contenido y dentro de él se encuentra el valor de la variable (el
contenido del cajón). Hay tantos tipos de variables como de datos: números de todo tipo representados de
diferentes maneras (enteros, reales, binarios, decimales, hexadecimales, etc.), textos (de un solo o varios
caracteres o líneas), matrices (arrays), constantes, etc.
Tipos de variables
Podemos dejar la variable sin inicializar (es decir, sin asignarle un valor de partida):
Os aconsejamos inicializar siempre vuestras variables en el momento de declararlas. Esto os puede ayudar a
depurar vuestros sketches y al mismo tiempo ahorra código. Asimismo, al declarar una nueva variable tratad
de anticipar el uso que el sketch va a darle a esa variable y el rango de valores que va a tomar durante la
ejecución (por ejemplo si va a sobrepasar el valor 32,000 interesa hacerla long en vez de int, o si va a tomar
valores decimales entonces necesitaremos una float). De no hacerlo así podríamos encontrarnos con
situaciones inesperadas durante la ejecución del sketch.
Veamos el típico sketch que hace parpadear un LED activado a través de un pin:
El uso de variables nos permite reutilizar este código para otro pin con tan sólo cambiar la asignación inicial
de la variable LEDpin.
No te asustes si no entiendes todo en este código. De momento basta con que comprendas el uso de las
variables. Todo lo demás lo iremos viendo en detalle más adelante. Nota que cada instrucción debe de
terminarse con un punto y coma (;) de lo contrario el compilador no entendería que la instrucción ha
acabado y nos daría un error.
Arrays
Un ‘array’ es una colección indexada (como un diccionario) de variables del mismo tipo. En el caso de un
array el índice no es una palabra como en el diccionario, sino simplemente un número (que corresponde al
número de orden de la variable concreta dentro del array). Puedes declarar un array de la siguiente manera:
Nota importante 1: ten en cuenta que el primer índice de un array es siempre 0 (no 1).
Nota importante 2: ten especial cuidado de no tratar de acceder datos fuera del array (por ejemplo en en caso
anterior miLista [7] ya que esto nos devolvería datos sin sentido de la memoria.)
La primera instrucción crea e inicializa el array con 4 valores. La segunda crea una nueva variable y le
asigna el valor de la tercera variable del array que habíamos acabado de crear (el int 3). La tercera asigna a
la primera variable del array el valor entero (int) 986. Por último la cuarta instrucción asigna a la variable
que habíamos creado en la segunda línea el valor almacenado en la primera variable del array (986).
Componentes básicos de Arduino:
Cuando no conoces el mundo de Arduino y te sumerges en él, generalmente encuentras una descripción de
que es y como programar el famosos led que parpadea, entonces se conoce la tarjeta sobre la marcha. Por
ello hoy mostraremos todas las partes del Arduino que veras en todas las placas (o en la gran mayoría) y
hasta en otro tipo de controladores.
Debemos entender, para un comienzo, que Arduino es una plataforma de desarrollo de electrónica y
programación que se compone a grandes rasgos de un microcontrolar y sus entradas y salidas listas para
usar, así como también la facilidad de comunicación con otros dispositivos. Esto nace de la necesidad de
facilitar estos recursos en pequeños, para incentivar la creatividad y el pensamiento desde una edad
temprana., sin necesidad de inundarlos con información detallada de electrónica e ingenierías. De esta forma
esta plataforma hoy en día es una herramienta para que cualquier persona que lo desee pueda aprender y/o
desarrollar sus propios proyectos.
Como podemos ver en la imagen, hay muchos componentes en la tarjeta, no haremos un detalle electrónico
basado en modelos matemáticos, pero si sabrás que puedes hacer y para que te servirán en otros dispositivos
todos, o la gran mayoría de partes.
Para comenzar definiremos nuestro Arduino como una caja negra. Caja negra haciendo alusión al sistema de
registro de los aviones para accidentes, que en realidad no son negras, sino que se les denomina así porque
no se sabe lo que contiene, solo sabemos qué hace una función. Lo mismo sucede con nuestra tarjeta, será
una caja con entradas, que son procesadas, y salidas.
Si filosofamos un poco, nos daremos cuenta que básicamente todo se comporta de esta manera, algo toma
referencias (entrada), las analiza (proceso) y ejecuta una acción (salida). Un ejemplo real seria nuestro baño
diario. Giramos la llave, tocamos el agua (entrada), la comparamos con una sensación adecuada para
nosotros (procesamos la información) y giramos la llave para agua fría o caliente (salida). Haz el ejercicio y
piensa cuantos sistemas que conoces realizan la misma lógica.
Básicamente, las señales de entrada pueden ser de dos tipos, digitales y analógicas. Las señales digitales solo
tienen 2 estados, serán reconocidas como 1 o 0, todo o nada, alto o bajo (5V o 0V), como la luz de una
habitación que esta encendida o apagada. Arduino Uno tiene 13 señales digitales que pueden funcionar
como entrada o salida (definidas en el programa), o sea, leerá 5V o 0V, o entregará 5V o 0V. Otros modelos
como el Arduino Mega tienen 54 señales digitales, que funcionan de la misma forma.
Una recomendación. Cuando el Arduino está conectado por usb al PC no es recomendable usar pines que
tengan identificación de TX y RX, ya que estos corresponden al puerto que está siendo usado por el usb, así
que tendrán comportamientos erráticos.
Por otro lado, las entradas analógicas pueden tener infinitos valores entre amplitudes definidas con el
tiempo, como las señales de audio. Infinito siempre es teórico, en la práctica las entradas analógicas medirán
valores entre 0V y 5V y serán comprendidas por la tarjeta como valores entre 0 y 1023 (1024 valores ya que
se considera el 0 como un valor más). Esto ocurre porque se debe digitalizar el valor analógico para que sea
comprendido en el mismo idioma de nuestra tarjeta (lenguaje digital de unos y ceros, como en matrix) y para
ello se ocupan 10 bit y como son 2 valores posibles en cada bit (1 y 0) tendremos combinaciones, 1024
valores a repartir entre 0V y 5V, de infinito nada. Quien digitaliza la señal analógica al lenguaje de unos y
ceros es el Conversor analógico digital, CAD o DAC en inglés.
El Arduino Uno tiene 6 entradas analógicas, que soporta una tensión de hasta 5V y pueden ser escaladas a
valores menores, pero no superiores. Otras placas pueden tener más o menos entradas, un CAD de mayor o
menor cantidad de bit, pero se comportarán de la misma forma.
Las entradas analógicas también pueden ser utilizadas como señales digitales, donde A0 equivale al pin 14
en la placa Uno.
Antes de pasar a otros componentes debemos mencionar que, en rigor, no existen salidas analógicas, pero si
mucha astucia para emularlas. Esa astucia es llamada PWM, conocida como modulación de ancho de pulso.
En las señales digitales podrán ver una raya al costado de algunos pines como el 3 y el 5, eso significa que
pueden trabajar como salidas PWM. En el fondo se juega con los tiempos en los que la señal está en 1 y en 0
(el ancho del pulso), esto genera una respuesta “analógica” desde una digital.
La zona de alimentación al costado de las entradas analógicas, permite dos cosas. Una, distribuir
alimentación desde el Arduino para algunos sensores o para control y dos, alimentar la tarjeta.
3,3V y 5V son salidas de voltaje desde la tarjeta, con ello podemos alimentar componentes externos.
Podemos utilizar cualquier GND como negativo para alimentación. Por otra parte, Vin nos permite alimentar
de forma externa la tarjeta Uno con voltajes de hasta 12V, la tarjeta trabaja con 5V y utiliza un regulador
que permite esto.
Las formas convencionales de alimentar la tarjeta son, principalmente por el Usb que aparte de funcionar
como alimentación nos permite monitorearla para hacer pruebas y por un Jack de alimentación,
fundamentalmente para baterías de 9V. Este elemento es muy usado en los kits de Arduino Educación.
La tarjeta tiene dos conexiones para comunicarse por ICSP, un tipo de comunicación serial. El que se
encuentra cerca de las entradas analógicas, específicamente sirve para programar el Bootloader del
microcontrolador que utiliza Arduino. El Bootloader es un gestor de arranque que interpreta los programas,
permite enviar y recibir datos por los puertos, hace posible la comunicación USB. El ICSP que está cerca del
conector usb de la tarjeta, es justamente el que nos permite programar el microcontrolador encargado de la
comunicación usb.
Entre los componentes que veremos y podrían llamar nuestra atención (y que son fundamentales en
cualquier microcontrolador) se encuentra el cristal de cuarzo, un oscilador de 16Mhz que determina la
velocidad de la ejecución del programa.
Arduino utiliza un microcontrolador que ejecuta nuestro programa, pero como mencionamos, existe otro que
permite la comunicación Usb y es el ATmega16u2. Un chip cuadrado que verán detrás del conector Usb de
la tarjeta. No ahondaremos en esto, la idea es conocer cada parte de la tarjeta y entender que hace.
Llegamos al cerebro de esta tarjeta, el microcontrolador ATmega 328. Como se mencionó al comienzo, el
Arduino es un microcontrolador con las entradas y salidas listas para usar. El micro es el que ejecuta
nuestros programas, lee nuestras entradas, envía señales para controlar dispositivos a la velocidad que el
cristal le permite.
De manera global, pero al grano, estos son los componentes principales de la tarjeta que necesitas conocer
para adentrarte ya en la programación, obviamente cada uno de ellos es un mundo en sí, y mientras avanzas
en el aprendizaje adquirirás nuevos conocimientos sobre ellos y deberás dedicar tiempo para entender los
principios físicos y electrónicos, acá queremos mostrarte que son y que hacen los principales componentes
sin hacerte una clase de electrónica digital, pero ya puedes aventurarte, inténtalo.
Instalación de la IDE de Arduino:
1. setup(): Esta función se ejecuta una sola vez al encender el Arduino. Se usa para inicializar variables
y configurar los pines de entrada/salida.
2. loop(): Esta función se ejecuta de manera continua. Es donde se colocan las acciones que el Arduino
debe realizar repetidamente.
void loop() {
digitalWrite(13, HIGH); // Enciende el LED en el pin 13
delay(1000); // Espera 1 segundo (1000 milisegundos)
digitalWrite(13, LOW); // Apaga el LED
delay(1000); // Espera 1 segundo
}
En este ejemplo:
1. Conecta un LED al pin 13 (la mayoría de las placas Arduino tienen un LED incorporado en este pin).
2. Carga el programa de ejemplo en la placa.
3. El LED debería encenderse y apagarse cada segundo.
A medida que adquieras más experiencia con Arduino, podrás realizar proyectos más complejos, como:
Controlar servomotores.
Leer datos de sensores de temperatura, humedad o movimiento.
Comunicarte con otros dispositivos a través de comunicación serial o inalámbrica (Bluetooth, Wi-
Fi).
Arduino es una excelente plataforma para comenzar a aprender sobre programación y electrónica de forma
práctica. La comunidad de Arduino es muy activa, por lo que hay numerosos tutoriales y recursos
disponibles para seguir aprendiendo.
¡No dudes en comenzar tu primer proyecto (excavadora prototipo) y experimentar con las infinitas
posibilidades que ofrece esta increíble herramienta!