PRACTICA 1 – INTRODUCCIÓN INTRODUCCIÓN A LA PLATAFORMA ARDUINO
Alejandro Velasco Aranda
ÍNDICE
1. Objetivos
Pág 3
2. Plataformas de trabajo
Pág 3
3. Desarrollo de la práctica
Pág 5
3.1. Configuración herramientas
Pág 5
3.2. Cargar Bootloader Arduino
Pág 6
3.3. Desarrollo de ejemplos
Pág 7
3.4. Incidencias en el desarrollo
Pág 13
4. Conclusiones
Pág 13
2
1. OBJETIVOS En esta práctica vamos a aprender a configurar y manejar una placa para que trabaje como arduino y desarrollar algunos ejemplos sencillos para comprobar su correcto funcionamiento. Para completar esta práctica, vamos a definir unos objetivos mñinimos: - Lograr preparar la placa para que opere como arduino: Cargar bootloader de arduino - Preparar el PC para que funcione el entorno de desarrollo arduino. - Realizar ejemplos básicos de funcionamiento sobre arduino para coger algo de soltura con este entorno. - Desarrollar algún otro uso de arduino.
2. PLATAFORMAS DE TRABAJO En primer lugar vamos a definir un poco la placa y el programador que vamos a utilizar en esta práctica. Vamos a trabajar con una placa Arduino. Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares. En concreto, un modelo Arduino Fio con microcontrolador ATMega 328p. El Atmega328p es un circuito integrado de alto rendimiento que está basado un un microcontrolador RISC, combinando 32 KB ISP flash una memoria con la capacidad de leer-mientras-escribe, 1 KB de memoria EEPROM, 2 KB de RAM, 14 lineas de E/S de propósito general, 32 registros de proceso general, tres temporizadores flexibles/contadores con modo de comparación, interrupciones internas y externas, programador de modo USART, una interfase serial orientada a byte de 2 cables, SPI puerto serial, 6-canales 10-bit Conversor A/D (8chanales en TQFP y QFN/MLF packages), "watchdog timer" programable con osciladorinterno, y cinco modos de ahorro de energía seleccionables por software. El dispositivo opera entre 3,35 y 12 voltios. Por medio de la ejecución de poderosas instrucciones en un solo ciclo de reloj, el dispositivo 3
alcanza una respuesta de 1 MIPS, balanceando consumo de energía y velocidad de proceso Vamos a utilizar también un programador avr-dragon. Es un nuevo estándar en instrumentos de desarrollo de bajo costo. Apoya todos tipos de la programación para la familia de dispositivo de AVR. También incluye apoyo completo de emulación para dispositivos con 32kB o memoria menos Rápida. La característica flexible y segura de la actualización de la micro-instrucción permite Estudio de AVR para actualizar fácilmente el Dragón de AVR para apoyar nuevos dispositivos. Características:
Trabaja bajo múltiples plataformas. Linux, Mac sistema operativo X y Windows son probados. No son necesarios componentes especiales de controladores ni smd. Es posible programar a velocidad de hasta 5kBytes/sec. Opción de SCK para apoyar objetivos con velocidad de reloj baja (<1,5MHz). El Dragón de AVR puede ser utilizado con una tabla externa de objetivo. Sin embargo, el área en la placa madre de prototipo,permite la programación y la depuración sencillas sin algún hardware adicional.
4
El Dragón de AVR es enchufado por el cable USB, y por tarjeta externa con hasta 300mA (del conector de VCC)
Para desarrollar alguna aplicación al final de la práctica, vamos a utilizar una placa de expasión i/o para arduino. El modelo de la placa con la que vamos a trabajar es el siguiente:
5
Problema: Al eliminarse un condensador de la placa arduino será necesario recargar el bootloader cada vez que necesitemos recargar el software de arduino.
3. DESARROLLO DE LA PRÁCTICA Una vez hemos descrito los componentes que vamos a utilizar en esta práctica vamos a comenzar a desarrollarla. Primero vamos a configurar los componentes necesarios.
3.1. CONFIGURACIÓN HERRAMIENTAS A pesar, que esta práctica se puede desarrollar en Windows, nosotros la hemos desarrollado utilizando Ubuntu. En primer lugar vamos a asegurarnos de que están instaladas las siguientes herramienta, y si no las instalaremos: - Avrdude: Es la herramienta que vamos a utilizar para programar microcontroladores de atmel. En nuestro caso, nos servirá para programar a través del programador avr dragon.
$ sudo apt-get install avrdude - Arduino: Será el entorno de desarrollo que utilicemos para desarrollar nuestras aplicaciones con nuestra placa arduino.
$ sudo apt-get update && sudo apt-get install arduino arduino-core Una vez que estamos seguros que hemos instalado ambas herramientas, conectamos las dos placas entre si, sino lo están ya mediante el cable paralelo, y mediante los cables USB al PC. Lo siguiente será si el PC ha detectado correctamente el microcontrolador a través del programador: Para ello vamos a utilizar el comando de avrdude con estas diferentes opciones: - $sudo avrdude – c (Nuestro programador dragon operará en modo isp) - Comando para comprobar que detecta bien la placa dragon y el micro.
$sudo avrdude – P
-c -p 6
Puerto: usb programador: dragon_isp parte-chip: m328p
3.2. CARGAR BOOTLOADER ARDUINO Una vez comprobado la correcta deteccíon de la placa habrá que cargar el bootloader. Pasamos a programar el bootloader, para ello debemos configurar los flags primero. Para esto utilizaremos:
$ sudo avrdude -c dragon_isp -p atmega328p -P usb -F -v -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m Una vez configurados los flags, procedemos a la carga del bootloader:
$ sudo avrdude -c dragon_isp -p atmega328p -P usb -F -v -e -U flash:w:/usr/share/arduino/hardware/arduino/bootloaders/atmega /ATmegaBOOT_168_atmega328.hex -U lock:w:0x0F:m
3.3. DESARROLLO DE EJEMPLOS Tras cargar el bootloader, procedemos a cargar algún ejemplo para comprobar la respuesta de nuestra placa. Al no tener ninguna experiencia en programación con arduino hemos utilizado estos enlaces para guiarnos en los primeros ejemplos de arduino. Información básica: aquí vamos a encontrar todos los conocimientos básicos de como podemos interactuar con la herramienta de desarrollo. http://arduino.cc/en/Guide/Environment Podemos encontrar una breve guía del lenguaje de programación que utilizamos para desarrollar nuestras actividades, como podemos observar es muy similar al C. http://arduino.cc/en/Reference/HomePage La estructura general de un programa en el entorno de desarrollo arduino viene formada por los siguientes métodos: 7
void setup() { //Pondremos el código setup aquí, para ejecutarlo una vez. } void loop() { // Pondremos el código main aquí, para ejecutarlo repetidamente. } Para comenzar, empezaremos desarrollando un breve ejemplo que nos aporta el entorno de desarrollo para aprender a controlar los pines digitales, como los LEDS, y a controlar los retrasos. Variación de blink: Vamos a controlar el encendido y apagado de un led con un switch conectado a VCC y GND. El código es el siguiente: void setup() { // Inicializamos los pines digitales como salidas // Pin 13 tiene un led conectado. Serial.begin(9600); //Inicializamos el Pin digital como salida correspondiente al LED pinMode(7, OUTPUT); //Inicializamos el Pin 2 digital como entrada correspondiente al switch pinMode(2,INPUT);
8
} void loop() { //Guardamos en una variable el valor del switch y comprobamos si esta //activo para encender y apagar el LED int sensorValue = digitalRead(2); if(sensorValue == 1){ digitalWrite(7,HIGH); }else{ digitalWrite(7,LOW); } } También probamos otro ejemplo para aprender a utilizar la escritura analógica. Llamado Fade, que podemos encontrar en el entorno de desarrollo arduino. Como último ejemplo, se nos planteaba realizar un contador desde 00 a 59 en display 7-segmentos cada segundo. Por desgracia, no pude completarlo en el laboratorio, y puesto que no dispongo de los componentes necesarios para realizar esta parte del trabajo en casa, aporto la porción de código que pude realizar en el laboratorio. int segPins[] = { 0, 1, 2, 3, 4, 5, 6, 7}; int tiempototal= 1000; int tiempo_refresco = 0; int j = 40; int disp1 = 8; int disp2= 9; 9
int dat1 = 0; int dat0 = 0; void setup() { for (int thisseg = 0; thisseg < 8; thisseg++) { pinMode(segPins[thisseg], OUTPUT); } pinMode(disp1, OUTPUT); pinMode(disp2, OUTPUT); }
void loop() { dat1 = 0; dat0 = 0; while (1) { refresh(0, 0); } void refresh( int data1, int data0) { tiempo_refresco = tiempototal/(2*j); for(int i = 0 ; i
} void write_data (int arg) { switch (arg) { case 0: //do something when var equals 1 write7seg(0x7e); break; case 1: //do something when var equals 2 write7seg(0x30); break; case 2: //do something when var equals 1 write7seg(0x6d); break; case 3: //do something when var equals 2 write7seg(0x79); break; case 4: //do something when var equals 1 write7seg(0x33); break; case 5: //do something when var equals 2 11
write7seg(0x5b); break; case 6: //do something when var equals 1 write7seg(0x1f); break; case 7: //do something when var equals 2 write7seg(0x70); break; case 8: //do something when var equals 1 write7seg(0x7f); break; case 9: //do something when var equals 1 write7seg(0x73); break; } } void write7seg (unsigned char arg) { unsigned char segmen = 0x01; unsigned char display1; display1 = arg;
12
for (int i = 0; i < 8; i++) { if ((display1 & segmen) == 0x00) digitalWrite(i, LOW); else digitalWrite(i, HIGH); segmen <<= 1; } }
3.4. INCIDENCIAS EN EL DESARROLLO Durante el desarrollo de esta práctica han ocurrido varios problemas que hemos resuelto para poder cumplir los objetivos propuestos al principio y que sin duda nos han restado tiempo para completar la práctica. En primer lugar, el principal factor que, personalmente, me ha restado más tiempo a la hora de desarrollar la práctica ha sido que para cada vez que queríamos cargar el código de ejemplo debíamos cargar el bootloader de la placa. Entonces, si el código no funcionaba bien o no lo hacía como nosotros queríamos nos llevaba mucho tiempo en comprobar que todo iba bien. Por lo demás, la práctica estaba bastante bien explicada y no hubo ningún otro incidente que ocasionara otro problema durante el desarrollo de esta práctica.
4. CONCLUSIONES Puesto que es mi primer “proyecto” que realizo con arduino, veo muy
interesante esta práctica porque nos facilita los conocimientos básicos para empezar a realizar algo más serio. Personalmente, me hubiese gustado que esta práctica hubiese tenido al menos dos sesiones para poder profundizar un poco más con Arduino, pero también comprendo que si se alargase algo más quizás no diese tiempo a aprender otras cosas que seguro son también interesantes. Sin dudad, muy positiva esta práctica.
13