Вы находитесь на странице: 1из 13

PRACTICA 1 INTRODUCCIN A LA

PLATAFORMA ARDUINO

Alejandro Velasco Aranda

NDICE

1. Objetivos

Pg 3

2. Plataformas de trabajo

Pg 3

3. Desarrollo de la prctica

Pg 5

3.1. Configuracin herramientas

Pg 5

3.2. Cargar Bootloader Arduino

Pg 6

3.3. Desarrollo de ejemplos

Pg 7

3.4. Incidencias en el desarrollo

Pg 13

4. Conclusiones

Pg 13

1. OBJETIVOS
En esta prctica 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 prctica, vamos
a definir unos objetivos minimos:
- 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 bsicos de funcionamiento sobre arduino para
coger algo de soltura con este entorno.
- Desarrollar algn 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 prctica.
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, diseada para facilitar el
uso de la electrnica 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 propsito general,
32
registros
de
proceso
general,
tres
temporizadores
flexibles/contadores con modo de comparacin, 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 energa seleccionables por
software. El dispositivo opera entre 3,35 y 12 voltios. Por medio de la
ejecucin de poderosas instrucciones en un solo ciclo de reloj, el dispositivo

alcanza una respuesta de 1 MIPS, balanceando consumo de energa y


velocidad de proceso
Vamos a utilizar tambin un programador avr-dragon.
Es un nuevo estndar en instrumentos de desarrollo de bajo costo. Apoya
todos tipos de la programacin para la familia de dispositivo de AVR.
Tambin incluye apoyo completo de emulacin para dispositivos con 32kB
o memoria menos Rpida. La caracterstica flexible y segura de la
actualizacin de la micro-instruccin permite Estudio de AVR para
actualizar fcilmente el Dragn de AVR para apoyar nuevos dispositivos.
Caractersticas:

Trabaja bajo mltiples 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.
Opcin de SCK para apoyar objetivos con velocidad de reloj baja
(<1,5MHz).
El Dragn de AVR puede ser utilizado con una tabla externa de
objetivo. Sin embargo, el rea en la placa madre de
prototipo,permite la programacin y la depuracin sencillas sin
algn hardware adicional.

El Dragn de AVR es enchufado por el cable USB, y por tarjeta


externa con hasta 300mA (del conector de VCC)

Para desarrollar alguna aplicacin al final de la prctica, vamos a utilizar


una placa de expasin i/o para arduino.
El modelo de la placa con la que vamos a trabajar es el siguiente:

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 PRCTICA
Una vez hemos descrito los componentes que vamos a utilizar en esta
prctica vamos a comenzar a desarrollarla. Primero vamos a configurar los
componentes necesarios.

3.1. CONFIGURACIN HERRAMIENTAS


A pesar, que esta prctica se puede desarrollar en Windows, nosotros la
hemos desarrollado utilizando Ubuntu.
En primer lugar vamos a asegurarnos de que estn 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 travs 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 estn ya mediante el cable
paralelo, y mediante los cables USB al PC.
Lo siguiente ser si el PC ha detectado correctamente el microcontrolador
a travs 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<puerto> -c <programador> -p <parte-chip>
6

Puerto: usb

programador: dragon_isp parte-chip: m328p

3.2. CARGAR BOOTLOADER ARDUINO


Una vez comprobado la correcta deteccon 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 algn ejemplo para
comprobar la respuesta de nuestra placa.
Al no tener ninguna experiencia en programacin con arduino hemos
utilizado estos enlaces para guiarnos en los primeros ejemplos de arduino.
Informacin bsica: aqu vamos a encontrar todos los conocimientos bsicos
de como podemos interactuar con la herramienta de desarrollo.
http://arduino.cc/en/Guide/Environment
Podemos encontrar una breve gua del lenguaje de programacin 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 mtodos:
7

void setup() {
//Pondremos el cdigo setup aqu, para ejecutarlo una vez.
}
void loop() {
// Pondremos el cdigo 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.
Variacin de blink:
Vamos a controlar el encendido y apagado de un led con un switch
conectado a VCC y GND.
El cdigo 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);

}
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);
}
}
Tambin probamos otro ejemplo para aprender a utilizar la escritura
analgica. 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 porcin de cdigo 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<j; i++){
write_data(data1);
delay(tiempo_resfresco);
}
10

}
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 prctica 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 prctica.
En primer lugar, el principal factor que, personalmente, me ha restado
ms tiempo a la hora de desarrollar la prctica ha sido que para cada vez
que queramos cargar el cdigo de ejemplo debamos cargar el bootloader
de la placa. Entonces, si el cdigo no funcionaba bien o no lo haca como
nosotros queramos nos llevaba mucho tiempo en comprobar que todo iba
bien.
Por lo dems, la prctica estaba bastante bien explicada y no hubo ningn
otro incidente que ocasionara otro problema durante el desarrollo de esta
prctica.

4. CONCLUSIONES
Puesto que es mi primer proyecto que realizo con arduino, veo muy
interesante esta prctica porque nos facilita los conocimientos bsicos para
empezar a realizar algo ms serio.
Personalmente, me hubiese gustado que esta prctica hubiese tenido al
menos dos sesiones para poder profundizar un poco ms con Arduino, pero
tambin comprendo que si se alargase algo ms quizs no diese tiempo a
aprender otras cosas que seguro son tambin interesantes. Sin dudad, muy
positiva esta prctica.

13