Você está na página 1de 6

Laboratorio de aplicacin, seccin Sistemas digitales

Depto. Ingeniera Elctrica


Universidad de Concepcin
31 de agosto de 2017

LABORATORIO 1 Introduccin al Arduino Uno


El objetivo de este laboratorio es familiarizarse con la tarjeta Arduino Uno, y sus capacidades para leer
y escribir seales anlogas y digitales.

1. La tarjeta Arduino Uno


La tarjeta Arduino Uno, que se muestra en la figura 1, est basada en un microcontrolador Atmel AT-
mega328P de 8 bits que opera a una velocidad de reloj de 16 MHz. Este microcontrolador incluye 1 KiB
de memoria EEPROM, 2 KiB de memoria SRAM y 32 KiB de memoria flash. Al mismo tiempo, la tarjeta
Arduino Uno incluye 16 pines de entrada/salida digital, y 6 pines de entrada anlogos.

Figura 1: La tarjeta Arduino Uno

En la figura anterior, se pueden apreciar los conectores de la tarjeta y sus rtulos: los pines 0 a 13 de en-
trada/salida digitales se muestran en la parte superior, mientras que los pines A0 a A5 correspondientes
a las entradas anlogas se pueden ver en la parte inferior de la figura. Adems, en la parte inferior se
pueden ver los pines de potencia Vin , GN D, 3.3V y 5V . El voltaje de entrada Vin est entre 7V y 12V ,
mientras que la tarjeta provee voltajes de salida de 3.3V y 5V para alimentar posibles perifricos
shields. Finalmente, en la esquina superior izquierda se aprecia el botn de RESET del sistema.
Existen muchas versiones de la tarjeta Arduino Uno. Las tarjetas producidas por el fabricante original,
Smart Projects, se conocen como Arduino Genuino. Existen otras tarjetas clones tales como XDRDuino,
LinDuino, y otras. Algunas de estas tarjetas utilizan un microcontrolador en encapsulado DIP (Dual
Inline Package) removible, mientras que otras utilizan un microcontrolador montado en superficie con

547401-2 Laboratorio 1 1 2do. Semestre 2017


encapsulado SMD (Surface-Mounted Device). El funcionamiento y operacin de todas estas tarjetas de-
biese ser el mismo.

2. Un primer programa en Arduino


En este primer laboratorio, aprovecharemos el hecho que casi todas las tarjetas Arduino poseen un
LED conectado al pin digital 13, y escribiremos un primer programa en Arduino cuya nica tarea es
encender y apagar este LED. En particular, el nmero del pin conectado al LED est almacenado en la
constante LED_BUILTIN.
Supondremos que el ambiente de desarrollo integrado Arduino IDE ya est instalado. En caso contrario,
descargue la ltima versin del software desde http://www.arduino.cc y siga el procedimiento de
instalacin habitual.
Ejecute el ambiente de desarrollo Arduino IDE, y ver el siguiente esqueleto de cdigo aparecer en su
pantalla, el cual muestra la estructura bsica de una aplicacin Arduino.

void setup() {
// put your setup code here, to run once:

void loop() {
// put your main code here, to run repeatedly:

La funcin setup() se ejecuta slo una vez, al iniciar la aplicacin, mientras que la funcin loop()
se repite por toda la duracin de la aplicacin. Estas dos funciones deben estar presentes en todas las
aplicaciones Arduino.
Modifique el cdigo anterior como sigue:

1 // Blink
2 int LED = 13; // LED de la tarjeta conectado al pin 13
3 void setup() {
4 // Define el pin 13 como una salida digital
5 pinMode(LED, OUTPUT);
6 }
7

8 void loop() {
9 // Enciende y apaga el LED por 100 ms
10 digitalWrite(LED, HIGH);
11 delay(100);
12 digitalWrite(LED, LOW);
13 delay(100);
14 // Enciende y apaga el LED por 1000 ms
15 digitalWrite(LED, HIGH);
16 delay(1000);
17 digitalWrite(LED, LOW);
18 delay(1000);
19 }

Conecte ahora su tarjeta Arduino al computador mediante el cable USB correspondiente. En el caso de
la tarjeta Arduino Uno, se debe usar un cable USB tipo A/B.

547401-2 Laboratorio 1 2 2do. Semestre 2017


Utilice el comando Sketch Verify/Compile , si lo prefiere, la combinacin de teclas Ctrl - R para
compilar su programa.
Antes de transferir este cdigo a su tarjeta Arduino, verifique que tanto la tarjeta como el puerto hayan
sido identificados correctamente, usando los comandos Tools Board y Tools Port.
Transfiera ahora el programa ejecutable a la tarjeta Arduino Uno mediante el comando File Upload
la combinacin de teclas Ctrl - U . Verifique que el programa hace lo esperado: enciende y apaga el
LED por 100 ms, y luego lo enciende y apaga por 1 s.
Algunos comentarios sobre el cdigo:

Es posible definir los pines digitales de Arduino como entradas como salidas. La funcin pinMode()
recibe dos argumentos: el pin digital a definir, y el modo de operacin: INPUT OUTPUT. El modo
por omisin es INPUT. Entonces, la lnea 5 define el pin 13 como una salida digital.
La funcin digitalWrite() usada en la lnea 10 define el valor de una salida digital, y puede
tomar valores HIGH (+5V) LOW (0V).

La funcin delay() usada en la lnea 11 detiene la ejecucin del programa por el nmero de
milisegundos dados como argumento a la funcin.

Experimento 1: encendiendo un LED con las salidas digitales

En el ejemplo anterior, se escribi un programa que enciende y apaga el LED incorporado en la tarjeta
Arduino Uno. Ahora, disee e implemente un circuito que conecte un LED a la salida digital 12 de
la tarjeta Arduino, y modifique el programa anterior para que encienda y apague este LED en forma
peridica. No olvide usar una resistencia limitadora en serie con el LED.

3. Modulacin de ancho de pulso (PWM) y analogWrite()


Las salidas digitales de la tarjeta Arduino Uno pueden generar slo dos valores de salida: 0V y +5V . No
es posible generar valores instantneos intermedios sin utilizar un conversor digital anlogo externo.
Sin embargo, es posible generar valores RMS intermedios utilizando la tcnica de modulacin de ancho
de pulso, ms conocida como PWM por su sigla en ingls. Por lo general, slo algunos pines digitales
de salida de una tarjeta Arduino soportan este modo de operacin. En particular, en el Arduino Uno,
los pines 3, 5, 6, 10 y 11 son pines de salida PWM.
El control PWM opera modulando el ciclo activo de una onda cuadrada, es decir, el porcentaje del
perodo que la onda cuadrada vale 1. Una seal PWD puede ser usada en forma directa, como por
ejemplo para controlar motores de corriente continua a velocidades variables, para emular una salida
anloga pura en conjunto con otros dispositivos y componentes, como por ejemplo para excitar un
parlante. La figura 2 muestra seales PWM con distintos valores de ciclo activo.
En el caso de una tarjeta Arduino, la funcin analogWrite() permite generar seales PWM. Esta fun-
cin recibe dos argumentos: el pin digital a utilizar como salida PWM, y un valor en el rango 0 a 255.
El ciclo activo de la seal puede calcularse dividiendo el valor dado por 255. As, por ejemplo, un valor
127 generar una onda cuadrada.

Experimento 2: encendiendo un LED usando PWM

Modifique ahora el circuito implementado para el experimento anterior, conectando ahora el LED a
la salida digital 11 de la tarjeta Arduino. Modifique tambin su programa para que utilice la funcin
analogWrite() con un ciclo de vida variando de 0 a 255 y de vuelta a 0, como se muestra a continuacin,
y examine el efecto de este programa sobre el LED.

547401-2 Laboratorio 1 3 2do. Semestre 2017


Figura 2: Seales PWM

void loop() {
for (i = 0; i < 256; i++) {
analogWrite(LED, i);
delay(100);
}
for (i = 255; i <= 0; i--) {
analogWrite(LED, i);
delay(100);
}
}

4. Leyendo entradas digitales


En las secciones anteriores Ud. revis la operacin de las salidas de la tarjeta Arduino Uno. Ahora
revisar la operacin de las entradas digitales.

Experimento 3: controlando el encendido de un LED

En este experimento, Ud. debe disear e implementar un circuito que lea un seal digital proveniente
de un botn, y encienda un LED si el botn est presionado, y lo apague al liberar el botn. No olvide
utilizar un resistencia de pullup para asegurar que se lee el valor correcto cuando el botn no est
presionado.

Experimento 4: conmutando el estado de un LED

Modifique ahora su solucin para que la presin del botn conmute el LED entre estar encendido y
apagado. En este caso, es necesario considerar el comportamiento real de un botn al ser presionado: la
salida puede oscilar una ms veces entre un 0 y un 1 lgico, para finalmente estabilizarse en el valor

547401-2 Laboratorio 1 4 2do. Semestre 2017


final. Este comportamiento se debe al rebote de los componentes mecnicos del botn, se muestra en la
figura 3.

Figura 3: Comportamiento oscilatorio de un botn

Este problema puede ser solucionado va hardware o va software antirrebotes. Una forma fcil de
resolver este problema mediante software es mediante un funcin que compare el estado de la entrada
digital con su valor unos 5ms antes: si son distintos, es seal que se apret el botn, y slo entonces es
necesario cambiar el valor de la salida digital que controla el LED. Implemente, entonces, esta solucin
software y verifique su operacin correcta.

5. Leyendo entradas anlogas


La tarjeta Arduino Uno tambin incluye 6 entradas anlogas en los pines A0 a A5 y un conversor
anlogo-digital de 10 bits de resolucin. Las seales anlogas conectadas a estos pines pueden ser ledas
mediante el comando analogRead(). El siguiente cdigo muestra cmo leer una seal anloga conec-
tada al pin A0 de la tarjeta, en forma iterativa cada 500ms.

const int entrada = 0;


int valor = 0;
void setup() {
Serial.begin(9600);
}

void loop() {
valor = analogRead(entrada);
Serial.println(valor);
delay(500);
}

Adems, el cdigo anterior muestra cmo utilizar la interfaz serial de la tarjeta Arduino para desplegar
el valor medido. El ambiente de desarrollo Arduino IDE incluye un monitor de la interfaz serial, el cual
se puede seleccionar mediante el botn ubicado en la esquina superior derecha de la interfaz.
Antes de usar la interfaz serial, su tasa de comunicacin debe ser definida en la funcin setup(). El
valor ledo desde la entrada anloga seguido por un avance de lnea es transmitido por esta interfaz
mediante la funcin Serial.println() ejecutada cada 500ms. Ud. puede verificar que el LED Tx de la
tarjeta Arduino Uno destella cada 500ms, y ver el valor transmitido en el monitor serial.

Experimento 5: leyendo un potencimetro

Finalmente, revise la operacin de las entradas anlogas de la tarjeta, conectando un potencimetro a


una de ellas. Compruebe que los valores retornados por analogRead() varan entre 0 y 1023.

547401-2 Laboratorio 1 5 2do. Semestre 2017


6. Laboratorio 1
De esta manera, hemos revisado las capacidades para lectura y de escritura de seales anlogas y digi-
tales de la tarjeta Arduino Uno, y quedamos preparados para desarrollos futuros.
Para revisar lo visto hasta ahora, implemente un circuito que utilice el LED RGB incluido en el kit
bsico recibido. Conecte un potencimetro a una entrada anloga de la tarjeta Arduino Uno, y verifique
que los valores retornados por analogRead() varan entre 0 y 1023. Utilice esa seal para controlar
la intensidad del canal rojo del LED de 0 a 255. Vare la intensidad de los canales azul y verde por
software, en todo el rango de 0 a 255. Agregue un retardo adecuado a su cdigo de manera que sea
posible apreciar los cambios de color del LED en todo el rango.
Este laboratorio puede ser desarrollado en forma grupal. Cada grupo debe mostrar el circuito fun-
cionando el da viernes 15, entre 9am y 12pm. Esta vez, no es necesario realizar un preinforme. Sin
embargo, deber entregar un informe final a ms tardar el da viernes 15 de septiembre a las 6pm,
detallando el circuito implementado y las experiencias realizadas.

Submitted by Laboratorio de aplicacin, seccin Sistemas digitales on 31 de agosto de 2017.

547401-2 Laboratorio 1 6 2do. Semestre 2017