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); } }
© Copyright 2024