Guía Arduino

GUÍA ARDUINO

(25/11/13)

Arduino es una plataforma de hardware libre, basado en una placa con un microcontrolador y un software. Diseñado para artistas, diseñadores y aficionados a la electrónica interesados en crear proyectos.

El Software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring, muy parecido al lenguaje C. El programa en cuestión es el IDE (Integrated Development Environment).

El Hardware consiste en una placa de desarrollo con un microcontrolador ATmega y pins de entradas y salidas analógicas y digitales.

Para esta guía utilizaremos el modelo Arduino Uno Rev 3, que es la placa Arduino básica.

Hardware

Microcontrolador: Las placas Arduino usan el microcontrolador ATmega. Hay varios tipos, ATmega2560, ATmega 32u4, ATmega328… El Arduino Uno REV 3 el ATmega 328.

Reloj: Cristal de cuarzo de 16MHZ

Memoria:

-Memoria flash de 32KB (dentro del ATmega 328) 0,5KB de estos los usa el bootloader.

-SRAM de 2KB (dentro del ATmega 328)

-EEPROM de 1KB (dentro del ATmega 328)

I/O (Entradas/Salidas): El Arduino Uno tiene 14 pins I/O digitales que operan a 5V (6 de estos tienen salida PWM). Cada pin puede dar y recibir un máximo de 40mA. Algunos pins tienen características especiales:

-Serial: 0 (RX) y 1 (TX). Estos pins se usan para la comunicación serie. Están conectados al chip ATmega 16u2 para la conversión USB a TTL Serial data.

-PWM (Pulse-Width Modulation): 3,6,5,9,10,11. Proporcionan una salida PWM de 8 bits a 490Hz.

-SPI: 10(SS), 11(MOSI), 12(MISO), 13(SCK). Estos pins soportan la comunicación SPI.

-External Interrupts: 2 y 3. Estos pins se pueden configurar para llamar una función del programa cuando reciben una interrupción externa.

-LED: 13. Hay un LED conectado al pin 13. Cuando el pin tiene un valor HIGH, el LED se enciende. Cuando el pin tiene un valor LOW, el led se apaga .

El Arduino Uno también tiene 6 entradas analógicas (A0 a A5). Cada pin tiene 10 bits(1024 valores) y trabajan a 5V. También hay pins analógicos con características especiales:

-I2C: A4 o pin SDA y A5 o pin SCL. Soportan la comunicación I2C (TWI).

-AREF: Voltaje de referencia de las entradas analógicas. Sirve para cambiar a través de programación el voltaje máximo de entrada de los pins analógicos.

-Reset. Colocando este pin a LOW se reinicia el programa.

POWER: El Arduino Uno puede alimentarse a través de la conexión USB o con una alimentación externa DC a través del conector jack o los pins Vin y GND. La placa aguanta un mínimo de 6V y un máximo de 20V, aunque es recomendable alimentarla entre 7V – 12V para evitar dañar la placa.

Pins de alimentación:

-Vin: Entrada positiva para alimentación externa.

-GND: Pin de masa (ground).

-5V: Este pin proporciona 5V de salida del regulador de la placa.

-3.3V: Este pin proporciona 3,3V de salida del regulador de la placa y un máximo de 50mA.

 

Comunicación: El Arduino Uno puede comunicase con un ordenador, otra placa Arduino o otros microcontroladores a través del puerto serie utilizando los pin 0(RX) y 1(TX). El chip ATmega 16u2 de la placa convierte la comunicación serie a USB y aparece como un puerto virtual (COM) al ordenador. En la placa hay dos leds (RX y TX) los cuales parpadean cuando hay una transmisión de datos vía Serial to USB con el ordenador (pero no parpadean cuando hay una comunicación Serial con los pins 0 y 1).

El Atmega328 también soporta comunicaciones I2C y comunicaciones SPI.

Software

Arduino tiene su propio lenguaje de programación, muy parecido al lenguaje C. Los que tienen experiencia en este verán que realmente se parecen bastante y les será más fácil programar.

Para programar el Arduino es necesario el programa IDE de Arduino, se puede descargar desde la página de Arduino aquí. Después de la descarga, encontrareis una carpeta con varios archivos. En estos archivos hay el Arduino.exe que es la instalación del programa y una carpeta que pone drivers que contiene los controladores para que el PC reconozca el Arduino.

Para instalar estos drivers en Windows tenéis que ir Inicio, Equipo, clic botón derecho, Propiedades. Aquí dentro, en el margen izquierdo clic a Administrador de dispositivos. Si el Arduino está conectado a través de USB aparecerá como un dispositivo desconocido. Hacer clic derecho a este e ir a Actualizar Software Controlador. Luego se elige Buscar Software Controlador en el equipo y seleccionar la carpeta drivers de los archivos descargados antes. Ahora la placa Arduino está lista para programarla.

Al abrir el programa IDE nos encontraremos esto:

A- Actualizar: El programa revisa el código que hemos escrito y si hay algún error nos lo remarca.

B-Cargar: Sirve para cargar el código a la tarjeta Arduino.

C-Nuevo: Para crear un nuevo proyecto.

D- Abrir: Para abrir un proyecto guardado.

E- Guardar: Guarda el proyecto que estamos haciendo.

La primera vez que instalamos el programa tenemos que seleccionar la placa Arduino que vamos a programar. Vamos a Herrmientas, Tarjeta y seleccionamos nuestro modelo de placa Arduino, en este caso Arduino Uno.

Una vez hecho esto, podemos empezar a programar.

Programación

Estructura de programación

La estructura básica del lenguaje de programación de Arduino es muy simple, se compone de dos partes. Dichas dos partes son funciones: setup() y loop().

void setup()

{

}

void loop()

{

}

La función setup()  es la encargada de la configuración del programa. Se invoca una sola vez al iniciar el programa y sirve para inicializar los modos de trabajo de los pins y el puerto serial.

La función loop() contiene el programa que se ejecutará cíclicamente. Esta función es el núcleo de todo el programa.

Variables

Una variable sirve para guardar un valor numérico que variara en el programa en función de la operación que hagamos con ella.  Las variables se pueden declarar en dos partes:

      -Variables Globales: son variables que se declaran al inicio del programa (antes del setup()), y puede ser utilizada en cualquier función del programa.

      -Variables Locales: son variables declaradas dentro de una función y solo puede ser utilizada dentro de dicha función.

Hay varios tipos de variables:

-Byte: Almacena un valor numérico de 8 bits sin decimales en un rango entre 0 y 255.

-Int: Enteros almacena un valor numérico de 16 bits sin decimales en un rango entre 32767 a -32768.

-Long: Almacena valores enteros de 32 bits sin decimales  en un rango entre 2147483647 a -2147483648.

-Float: Almacena valores de punto flotante de 32 bits con decimales en un rango entre 3.4028235E +38 a -3.4028235E +38.

-Char: Es un tipo de dato que ocupa un byte de memoria y almacena un valor de carácter. Los carácteres literales se escriben con comillas simples: ‘A’ (para varios carácteres -strings- utiliza dobles comillas «ABC»).

Declaración de variables

Para declarar una variable se comienza por definir su tipo (int, byte, float, etc…), se asigna un nombre, y finalmente asignándole un valor.

int variable = 34;

Aritmética

En el programa se pueden utilizar las operaciones aritméticas de suma, resta, multiplicación y división.

x=x+5;

y=y-10;

r=r*3;

t=t/6;

Operadores de comparación

Las comparaciones de variables se usan con frecuencia en las estructuras if para testear si una condición es verdadera:

x==y      // x es igual que y

x!=y       //x no es igual a y

x<y         //x es menor que y

x>y         //x es mayor que y

x<=y      //x es menor o igual que y

x>=y      //x es mayor o igual que y

Operaciones lógicas

Las operaciones lógicas se usan para comparar dos expresiones para saber si es Verdadero o Falso. Existen tres tipos: AND(&&), OR(||) y NOT(!).  

 

AND (&&): Verdadero solo si las dos expresiones son ciertas.

if (x==1  &&   Y==4)

 OR(||): Verdadero si una expresión o las dos son ciertas.

if (x>0  ||  y>45)

 NOT (!): Verdadero si la expresión es falsa.

if (x!=3)

Constantes

Las constantes son valores predeterminados del lenguaje de programación de Arduino.

-TRUE/FALSE: TRUE es lo mismo que 0 y FALSE es lo mismo que 1.

-HIGH/LOW: Estas constantes se utilizan para la escritura o lectura de los pins I/O. HIGH es 1 i LOW es 0.

              digitalWrite(9, HIGH);  // activa la salida 9 con un nivel alto (5 voltios)

-INPUT/OUTPUT: Estas constantes se usan definir al comienzo del programa el modo de funcionamiento de los pins de la placa con la instrucción pinMode. Los pins se pueden definir como entrada (INPUT) o salida                 (OUTPUT).

               pinMode(7, OUTPUT);   // designamos el pin 7 como salida

 

Estructuras de decisión

 

if (si)

if es una estructura de decisión que se utiliza para probar si una determinada condición se cumple. Si es así, el programa ejecutará una acción.

if (x==25)

{

//Ejecutar acción

}

En este ejemplo si la variable x tiene un valor igual a 25, el código dentro de las llaves se ejecutará.

 

if…else (si…sino…)

if…else es una evolución de la estructura if, que consiste en sino se cumple la condición de if, haz otra acción.

if (x>=200)

{

//Ejecutar acción A

}

else

{

//Ejecutar acción B

}

En este ejemplo si x es mayor o igual que 200, realiza la acción A. Sino es mayor o igual que 200, realiza acción B.

for

La declaración for se usa para repetir bloques de sentencia encerradas entre llaves un número determinado de veces.

for (inicialización; condición; expresión)

{

//Ejecutar acción

}

La inicialización de una variable local se produce una sola vez y la condición se testea cada vez que se termina la ejecución de la acción dentro del bucle. Si la condición sigue cumpliéndose, la acción del bucle se vuelve a repetir. Cuando la condición no se cumpla, el bucle termina.

for (int i=0; i<10; i++)

{

//Ejecutar acción

}

En este ejemplo declaramos una variable entera i con un valor igual a 0, la condición es probar que el valor de la variable sea inferior a 10 y incrementa este valor en 1 cada vez que se ejecuta. Cuando i sea mayor que 10, el ciclo se termina.

 

while

while es un bucle que se ejecuta continuamente mientras se cumpla la condición que hay entre paréntesis. Para salir del ciclo while la condición debe cambiar. Para esto, puede hacerse dentro del bucle o a través del cambio de valor de un sensor.

while (condición)

{

//Ejecutar acción

}

do… while

Este bucle funciona de la misma manera que while con la diferencia que la condición se prueba al final del bucle, por lo que la acción dentro del do se ejecutará al menos una vez.

do

{

//Ejecutar acción

}

while (condición);

delay(ms)

Detiene el programa la cantidad del tiempo en milisegundos que se indica.

delay(1000);       //espera 1 segundo (1000 milisegundos igual a 1 segundo)

Serial

El Arduino tiene un puerto serie que podemos utilizar utilizando lo siguiente:

-Serial.begin(rate) Abre el puerto serie y fija la velocidad en baudios. Este código se tiene que poner en setup()

-Serial.println (data) Imprime los datos en el puerto serie, seguido de un salto de línea.

-Serial.avaible() Esta función devuelve el estado del buffer del puerto serie y revela si hay algún dato recibido a través de este.

-Serial.Read() Lee y captura un carácter (byte) del buffer. Es importante destacar que solo lee un solo carácter.

-Serial.Write() Escribe caracteres a través del puerto serie. A diferencia de Serial.Read() puede más de un carácter.

Programa de ejemplo

 Vamos a crear un sencillo proyecto como ejemplo. Usaremos un pulsador y un led. Cada vez que pulsemos el pulsador, el led parpadeará dos veces. Empecemos:

Material

 

-1 Led

-1 pulsador (switch)

-1 Resistencia de 680 ohmios

-1 Resistencia de 10k

 

Montaje

-En el pin 6 ponemos el pulsador con una resistencia de 10k en modo pull-down, quiere decir que en la entrada abra un 0 (0 voltios) y cuando pulsamos el pulsador hay un 1 (5 voltios).

-En el pin 7 pondremos un led con una resistencia de 680 ohmios para limitar el corriente.

Programa

//Declaramos los pins
int pulsador=6;
int led=7;

//En setup() configuramos los pins como entradas o como salidas
void setup()
{
  pinMode(pulsador, INPUT);
  pinMode(led, OUTPUT);
}

//En loop() es el programa principal que se repetirá ciclicamente
void loop()
{
  if(digitalRead(pulsador)==HIGH) //Si pulsamos el pulsador, habrá un valor HIGH en el pin 7.
  {
    //El led parpadea 2 veces
    digitalWrite(led,HIGH);
    delay(500);
    digitalWrite(led,LOW);
    delay(500);
    digitalWrite(led,HIGH);
    delay(500);
    digitalWrite(led,LOW);
  }
  else
  {
    digitalWrite(led,LOW); //Si el pulsador no esta pulsado, el led está apagado
  }
}

 

11 thoughts on “Guía Arduino

Deja un comentario