Práctica 1 Arduino Alumno - JUANA

Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
Control de sistemas automáticos con
Arduino
CTIF OESTE Noviembre de 2014
Víctor Gallego Le Forlot
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
Práctica 1 Arduino Alumno:
LED parpadeante
Vamos a empezar con algo muy sencillo: encender y apagar repetidamente un diodo
LED, produciendo un efecto parpadeante. Para empezar, asegúrate de disponer de
todos los componentes. Luego coloca la hoja de conexiones en la placa protoboard y
conecta correctamente todos los dispositivos.
Una vez que el circuito esté montado, necesitarás descargar el programa. Para ello,
conecta la Arduino al puerto USB de tu equipo. A continuación selecciona el puerto
correcto en Tools > Serial Port > (el puerto Comm de tu Arduino). Pregunta a tu
profesor cómo saber cuál es el puerto asignado. Después descarga el programa
seleccionando File > Upload to I/O Board. Finalmente “trastea” con las
posibilidades que el control de luces te ofrece.
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
Programa
Copia el siguiente programa en tu ordenador y escribe en tu hoja qué hace cada
línea del mismo.
/*
Parpadear
Enciende un LED conectado al pin 13durante un segundo, luego lo apaga
durante otro segundo, y así todo el tiempo.
*/
int Pin_del_LED = 13;
void setup()
{
pinMode(Pin_del_LED, OUTPUT);
}
void loop()
{
digitalWrite(Pin_del_LED, HIGH);
delay(1000);
digitalWrite(Pin_del_LED, LOW);
delay(1000);
}
¿No funciona? (3 cosas a probar)
1.- El LED no luce:
Los LEDs sólo funcionan en un sentido, por lo que puedes probar a cambiar sus
conexiones y darle la vuelta.
2.- El programa no se carga en la Arduino:
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
Esto sucede a veces. Lo más habitual es que el puerto serie esté confundido.
Puedes cambiarlo en tools>serial port>
3.- Puede que tu Arduino esté estropeada:
Pide ayuda a tu profesor.
Vamos a trastear un rato …
1.- Cambiemos el pin:
El LED está conectado al pin 13, pero podemos utilizar cualquiera de los pines de tu
Arduino. Para cambiarlo, saca el cable del pin 13 y cámbialo a cualquiera de los
otros (del 0 al 13). A continuación cambia la siguiente línea en el programa:
int Pin_del_LED = 13;
--->
int Pin_del_LED = (Nuevo_pin);
2.- Cambiemos el tiempo de parpadeo:
Dentro del programa cambia los números de las instrucciones delay. Recuerda que
1000 unidades equivalen a un segundo.
3.- Controlemos el brillo del LED:
Incluso con unas salidas digitales (on/off), Arduino puede controlar el brillo del
LED simulando un comportamiento analógico (Veremos en otras prácticas esto con
más detalle).
Cambia el LED al pin 9 (que es del tipo PWM). Sustituye en el programa el
contenido del bucle (loop) por
analogWrite(Pin_del_LED, nuevo número);
donde el número a poner valdrá entre 0 (apagado) y 255 (encendido a tope)
4.- Apaguemos y encendamos el LED lentamente:
Carga el ejemplo que encontrarás en
File > Sketchbook > Examples > Analog > Fade
A continuación pásalo a la Arduino y verás como el LED cambia de brillo de forma
continua.
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
5.- Identifica los pines de tu Arduino:
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
Práctica 2 Arduino Alumno:
LEDs parpadeantes
En esta práctica vamos a utilizar ocho de las salidas digitales de Arduino. Además
aprenderemos cómo se repiten comandos con la instrucción for.
Finalmente “trastea” con las posibilidades que el control de luces te ofrece. Crea
nuevos patrones y secuencias de luz.
Programa
Copia el siguiente programa en tu ordenador y escribe en tu hoja qué hace cada
línea del mismo.
/*
Parpadear múltiples LEDs
Enciende un LED conectado al pin 6 durante un tiempo, luego lo apaga y enciende el
contiguo, y así sucesivamente.
*/
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
int Pines[] = {6,7,8,9,10,11,12,13}; //Definimos los pines de salida
int tiempo = 100; //tiempo define cuánto tiempo estará encendido el LED
void setup()
{
for(int i = 0; i < 8; i++)
{
pinMode(Pines[i],OUTPUT);
}
}
void loop()
{
for(int i = 0; i < 8; i++)
{
digitalWrite(Pines[i],HIGH);
delay(tiempo);
digitalWrite(Pines[i],LOW);
}
}
¿No funciona? (3 cosas a probar)
1.- Un LED no luce:
Los LEDs sólo funcionan en un sentido, por lo que puedes probar a cambiar sus
conexiones y darle la vuelta.
2.- El programa no se carga en la Arduino:
Esto sucede a veces. Lo más habitual es que el puerto serie esté confundido.
Puedes cambiarlo en tools>serial port>
3.- Puede que tu Arduino esté estropeada:
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
Pide ayuda a tu profesor.
Vamos a trastear un rato …
1.- Cambiemos la secuencia:
Haz que ahora cambie el sentido del movimiento de las luces.
2.- Cambiemos la velocidad:
Dentro del programa cambia los números de las instrucciones delay. Recuerda que
1000 unidades equivalen a un segundo.
3.- Controla varias luces a la vez:
Con lo que has aprendido en estas dos primeras prácticas ya puedes realizar
secuencias complejas con al menos un par de LEDs encendidos a la vez.
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
Práctica 3 Arduino Alumno:
Pulsadores: interactuando con Arduino
Hasta ahora hemos usado la Arduino para que encienda y apague LEDs según como
la hayamos programado. A continuación vamos a aprender cómo podemos
interactuar con la Arduino desde el exterior, es decir, cómo podemos hacer que la
tarjeta “sienta” el mundo que la rodea. Para ello vamos a utilizar un par de
pulsadores NA.
Para ello utilizamos los pines digitales como entradas digitales que detectan un
nivel alto (HIGH) de tensión cuando el pulsador no está pulsado, y un nivel bajo
(LOW) cuando sí lo está.
Programa
Copia el siguiente programa en tu ordenador y escribe en tu hoja qué hace cada
línea del mismo.
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
/*
Pulsadores
Enciende y apaga un LED conectado al pin digital 13, cuando pulsamos un pulsador
conectado a la entrada digital 2.
*/
int Pin_del_Led = 13;
int Pin_del_Pulsador = 2;
int valor = 0; // variable que almacena el estado del pulsador
void setup()
{
pinMode(Pin_del_Led, OUTPUT);
pinMode(Pin_del_Pulsador, INPUT);
}
void loop()
{
valor = digitalRead(Pin_del_Pulsador);
if (valor == HIGH)
{
digitalWrite(Pin_del_Led, LOW);
}
else
{
digitalWrite(Pin_del_Led, HIGH);
}
}
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
¿No funciona? (3 cosas a probar)
1.- El LED no luce:
Los LEDs sólo funcionan en un sentido, por lo que puedes probar a cambiar sus
conexiones y darle la vuelta.
2.- La Arduino no detecta que estamos pulsando:
Esto sucede a veces. Lo más habitual es que el pulsador, si es de cuatro patillas,
esté girado 90º.
3.- Puede que tu Arduino esté estropeada:
Pide ayuda a tu profesor.
Vamos a trastear un rato …
1.- Vamos a utilizar el segundo pulsador:
Vamos a programar la Arduino para que el LED se encienda al pulsar uno de los
pulsadores y se mantenga encendido hasta que pulsemos el otro.
int Pin_del_Led = 13;
int Pin_del_Pulsador1 = 3;
int Pin_del_Pulsador2 = 2;
void setup()
{
pinMode(Pin_del_Led, OUTPUT);
pinMode(Pin_del_Pulsador1, INPUT);
pinMode(Pin_del_Pulsador2, INPUT);
}
void loop()
{
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
if (digitalRead(Pin_del_Pulsador1) == LOW)
{
digitalWrite(Pin_del_Led, LOW);
}
else if (digitalRead(Pin_del_Pulsador2) == LOW)
{
digitalWrite(Pin_del_Led, HIGH);
}
}
2.- Controlemos varios LEDs:
Recupera el programa de LEDs múltiples y modifícalo para que cuando pulses el
pulsador 1 se ejecute la secuencia que encendía los LEDs uno detrás de otro.
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
Práctica 4 Arduino Alumno:
Zumbadores: sonido con Arduino
Hasta ahora hemos usado la Arduino para que encienda y apague LEDs según como
la hayamos programado. Hoy vamos a conectar un pequeño dispositivo llamado
zumbador piezoeléctrico que vibra cuando se le aplica un voltaje.
Para ello utilizamos uno de los pines digitales de tu Arduino. En él vamos a generar
una onda cuadrada, cuya frecuencia dará lugar al sonido correspondiente a una nota
musical. Cambiando la frecuencia generamos un sonido diferente.
Programa
Copia el siguiente programa en tu ordenador y escribe en tu hoja qué hace cada
línea del mismo.
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
/*
Melodía
Este ejemplo utiliza un zumbador piezoeléctrico para recibir una onda cuadrada de
cierta frecuencia y convertirla en su correspondiente tono.
* Los tonos de cada nota son
nota
tiempo en High
do
1915
re
1700
mi
1519
fa
1432
sol
1275
la
1136
si
1014
doalto
956
*/
int pin_del_altavoz = 9;
int tempo = 300;
// velocidad de la música
void DO(int duracion)
{
for (long i = 0; i < duracion * 1000; i += 1915 * 2)
{
digitalWrite(pin_del_altavoz, HIGH);
delayMicroseconds(1915);
digitalWrite(pin_del_altavoz, LOW);
delayMicroseconds(1915);
}
}
void RE(int duracion)
{
for (long i = 0; i < duracion * 1000; i += 1700 * 2)
{
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
digitalWrite(pin_del_altavoz, HIGH);
delayMicroseconds(1700);
digitalWrite(pin_del_altavoz, LOW);
delayMicroseconds(1700);
}
}
void MI(int duracion)
{
for (long i = 0; i < duracion * 1000; i += 1519 * 2)
{
digitalWrite(pin_del_altavoz, HIGH);
delayMicroseconds(1519);
digitalWrite(pin_del_altavoz, LOW);
delayMicroseconds(1519);
}
}
void FA(int duracion)
{
for (long i = 0; i < duracion * 1000; i += 1432 * 2)
{
digitalWrite(pin_del_altavoz, HIGH);
delayMicroseconds(1432);
digitalWrite(pin_del_altavoz, LOW);
delayMicroseconds(1432);
}
}
void SOL(int duracion)
{
for (long i = 0; i < duracion * 1000; i += 1275 * 2)
{
digitalWrite(pin_del_altavoz, HIGH);
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
delayMicroseconds(1275);
digitalWrite(pin_del_altavoz, LOW);
delayMicroseconds(1275);
}
}
void LA(int duracion)
{
for (long i = 0; i < duracion * 1000; i += 1136 * 2)
{
digitalWrite(pin_del_altavoz, HIGH);
delayMicroseconds(1136);
digitalWrite(pin_del_altavoz, LOW);
delayMicroseconds(1136);
}
}
void SI(int duracion)
{
for (long i = 0; i < duracion * 1000; i += 1014 * 2)
{
digitalWrite(pin_del_altavoz, HIGH);
delayMicroseconds(1014);
digitalWrite(pin_del_altavoz, LOW);
delayMicroseconds(1014);
}
}
void DOALTO(int duracion)
{
for (long i = 0; i < duracion * 1000; i += 956 * 2)
{
digitalWrite(pin_del_altavoz, HIGH);
delayMicroseconds(956);
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
digitalWrite(pin_del_altavoz, LOW);
delayMicroseconds(956);
}
}
void setup()
{
pinMode(pin_del_altavoz, OUTPUT);
}
void loop()
{
DO(4*tempo);
// delay(tempo / 2);
RE(4*tempo);
// delay(tempo / 2);
MI(4*tempo);
// delay(tempo / 2);
FA(4*tempo);
// delay(tempo / 2);
SOL(4*tempo);
// delay(tempo / 2);
LA(4*tempo);
// delay(tempo / 2);
SI(4*tempo);
// delay(tempo / 2);
DOALTO(4*tempo);
// delay(tempo / 2);
}
¿No funciona? (3 cosas a probar)
1.- El piezoeléctrico no zumba:
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
Los zumbadores sólo funcionan en un sentido, por lo que puedes probar a cambiar
sus conexiones y darle la vuelta. Observa que la patilla que va al pin 9 de tu Arduino
tiene un símbolo +.
2.- La escala musical va demasiado deprisa:
Cambia el valor de la variable tempo. Cuanto mayor sea, más despacio sonará.
3.- Puede que tu Arduino esté estropeada:
Pide ayuda a tu profesor.
Vamos a trastear un rato …
1.- Vamos a programar una pequeña melodía:
Busca una canción sencilla y haz que las notas se ejecuten en el orden apropiado y
con la duración que encuentres en la partitura. Tal vez necesites notas nuevas.
Habla con tu profesor para que te diga qué frecuencias debes usar.
void MIALTO(int duracion)
{
for (long i = 0; i < duracion * 1000; i += 758 * 2)
{
digitalWrite(pin_del_altavoz, HIGH);
delayMicroseconds(758);
digitalWrite(pin_del_altavoz, LOW);
delayMicroseconds(758);
}
}
2.- Construye una alarma que se dispara cuando un pulsador es activado:
Recupera el programa de los pulsadores y conecta uno a otro pin de tu Arduino.
Haz un pequeño programa que mire si el pulsador está activado, y en caso de que
sea así, emite dos notas, una grave y otra aguda, alternativamente.
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
Práctica 5 Arduino Alumno:
Potenciómetros: entradas analógicas.
Aparte de los pines digitales que hemos venido utilizando en estas prácticas, la
Arduino incluye 6 pines que pueden ser utilizados como entradas analógicas. Estas
entradas miden un voltaje entre 0 y 5 voltios y lo convierten en un número digital
entre 0 (0 V) y 1023 (5 V). Un dispositivo muy útil que aprovecha estas entradas
analógicas es el potenciómetro (también conocido como resistencia variable).
Cuando se conecta a 5 V con sus terminales extremos, el terminal del centro dará
cualquier valor entre 0 y 5 V, dependiendo del ángulo que se haya girado (por
ejemplo, 2.5 V si se encuentra justo en medio de su recorrido). Los valores
medidos por el pin de entrada analógico pueden ser utilizados entonces como
valores de una variable en nuestro programa para hacer algo, tomar decisiones, etc
…
Programa
Copia el siguiente programa en tu ordenador y escribe en tu hoja qué hace cada
línea del mismo.
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
/*
Entrada analógica
Enciende y apaga un diodo LED conectado al pin 13. La cantidad de
tiempo que el LED luce depende del valor obtenido por
analogRead(). En el caso más sencillo conectamos un potenciómetro
en el pin analógico 2.
*/
int pin_del_potenciometro = 2;
int pin_del_led = 13;
int valor = 0; // variable que almacena el valor que llega del sensor
void setup()
{
pinMode(pin_del_led, OUTPUT);
}
void loop()
{
valor = analogRead(pin_del_potenciometro);
digitalWrite(pin_del_led, HIGH);
delay(valor);
digitalWrite(pin_del_led, LOW);
delay(valor);
}
¿No funciona? (3 cosas a probar)
1.- El programa se queda “atascado”:
Las patillas de los potenciómetros son un poco gruesas, por lo que a veces no
encajan bien en la protoboard. Comprueba las conexiones.
2.- Giramos el potenciómetro, pero el resultado no es el esperado:
Asegúrate que el terminal conectado al pin analógico es el cursor.
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
3.- Puede que tu Arduino esté estropeada:
Pide ayuda a tu profesor.
Vamos a trastear un rato …
1.- Vamos a programar un valor umbral:
Un valor umbral es un valor a partir del cual el LED se encenderá todo el rato.
Modifica el programa:
void loop()
{
int umbral = 512;
if(analogRead(pin_del_potenciometro) > umbral)
{
digitalWrite(pin_del_led, HIGH);
}
else
{
digitalWrite(pin_del_led, LOW);
}
}
Esto hará que el LED se encienda por encima de un valor de 512. Puedes cambiar el
valor de este umbral.
2.- Haz que el brillo del LED se controle con el potenciómetro:
En primer lugar conecta el LED a un pin digital PWM, por ejemplo el 9.Luego cambia
la parte del loop del programa de la siguiente forma:
void loop()
{
int valor = analogRead(pin_del_potenciometro) / 4;
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
analogWrite(pin_del_led, valor);
}
¿Por qué hemos dividido el valor leído entre cuatro antes de utilizarlo como salida
en el pin 9?
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
Práctica 6 Arduino Alumno:
LDR (Resistencias detectoras de luz).
Hemos visto como haciendo uso de un potenciómetro, podemos modificar a nuestra
voluntad el comportamiento de nuestra Arduino. Sin embargo, a veces, podemos
desear que sean las variaciones en el entorno que rodea a nuestra Arduino, las que
controlen su comportamiento. Las resistencias detectoras de luz, LDR, permiten
detectar el nivel de luz de un lugar y utilizar esta información para modificar el
comportamiento de nuestro proyecto. Como la Arduino solo puede medir voltajes,
debemos utilizar la LDR con otra resistencia para construir un divisor de tensión
que conectaremos a uno de los pines de entrada analógicos.
Programa
Copia el siguiente programa en tu ordenador y escribe en tu hoja qué hace cada
línea del mismo.
/*
Este programa mide el nivel de luz en el ambiente y enciende un LED con una
intensidad proporcional a la luz detectada
*/
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
int pin_ldr = 0;
int nivel_luz;
int pin_led = 9;
void setup()
{
pinMode(pin_led, OUTPUT);
}
void loop ()
{
nivel_luz = analogRead(pin_ldr);
nivel_luz = map(nivel_luz, 0, 900, 0, 255);
nivel_luz = constrain(nivel_luz, 0, 255);
analogWrite(pin_led, nivel_luz);
}
¿No funciona? (3 cosas a probar)
1.- El LED no luce:
Recuerda que el LED debe conectarse correctamente. Prueba a darle la vuelta a
las conexiones.
2.- Sigue sin lucir:
Asegúrate de que la LDR, cuyos terminales son muy finos, hacen contacto en la
protoboard.
3.- Puede que tu Arduino esté estropeada:
Pide ayuda a tu profesor.
Vamos a trastear un rato …
1.- Vamos a invertir la respuesta de la Arduino al nivel de luz:
Prácticas básicas de Arduino por Víctor Gallego basado en ARDX circuits de oomlout.com
En vez de que brille más cuanta más luz haya, programémoslo al revés. Modifica el
programa:
analogWrite(pin_led, 255 – nivel_luz);
2.- Haz que el LED se encienda sólo de noche:
Definamos un valor umbral a partir del cual el LED se encienda:
void loop()
{
int umbral = 300;
if(analogRead(pin_ldr) > umbral)
{
digitalWrite(pin_led, HIGH);
}
else
{
digitalWrite(pin_led, LOW);
}
}