Interrupciones
Una interrupción consiste básicamente en detectar detectar un evento y realizar algo en consecuencia.
Código:
int LED = 8; //e declara una variable volátil volátil !ue cambiará de estado en el //módulo de la interrupción y se utilizará utilizará "uera. //i la variable variable no se utilizase "uera "uera del módulo de la interrupción //no ser#a necesario necesario crearla de tipo volátil. volátil. volatile int estado$actual = L%&;
//e crea la "unción "unción !ue se e'ecutará cada vez vez !ue se active active la //interrupción. Esta "unción es de tipo void void (por lo !ue !ue no devuelv devuelvee //ning)n valor* valor* y no tiene parámetros parámetros de entrada. void "un$cambio$estado(* + //e cambia al estado contrario al actual, es decir, decir, de L%& L%& se pasa //a -- y de -- a L%& L%&. estado$actual = 0estado$actual; 1 void setup(* + //e declara el pin digital correspondiente correspondiente al LED como salida. pin2ode(LED, %U34U3*; attac5nterrupt(6, "un$cambio$estado, "un$cambio$estado, 7LL9*; 1 void loop(* + //e escribe el valor valor actual del LED. digital&rite(LED, digital&rite(LED, estado$actual*; 1
E'emplo para crear un retraso (delay* , para ello se debe comprobar comprobar el tiempo transcurr ido y decidir si se toma la acción o no.
Código:
volatile int contador = 6;
// omos de lo mas obedientes
int n = contador ; long 36 = 6 ; // :ariable global para tiempo void setup(* +
pin2ode(, 94U3*; erial.begin(<66*; attac5nterrupt( 6, ervicio>oton, L%&*; L%&*;
1 void loop(* + i" (n 0= contador* + erial.println(contador*; n = contador ; 1 1 void ervicio>oton(* + i" ( millis(* ? 36 @ A6* + contador@@ ; 36 = millis(*; 1 1
El led verde irá parpadeando 5asta !ue alguien pulse el botón. 2ientras el botón estB pulsado, se llamará a la "unción alarma, !ue encenderá el led ro'o y apagará el verde.
Materiales: rduino
•
C LED
•
4ulsador
•
esistencias de A6 o5mF para proteger los LEDs y evitar errores de lectura con el botón
•
Código int red = 8; int green = A; int boton = ;
void setup(* + pin2ode(red, %U34U3*; pin2ode(green, %U34U3*; pin2ode(boton, pin2ode(boton, 94U3*;
//Greamos la interrupcion interrupcion attac5nterrupt(6, alarma, --*; 1
void loop(* + digital&rite(green, digital&rite(green, --*; delay(666*; digital&rite(green, L%&*; delay(66*; 1
//Godigo de la interrupcion interrupcion void alarma(* + digital&rite(green, L%&*; H5ile(digitalead(* H5ile(digitalead(* == --* + digital&rite(red, digital&rite(red, --*; delay(66*; digital&rite(red, L%&*; delay(66*; 1 1
CONTROL DE LED RGB
En esta práctica vamos a "amiliarizarnos con el "uncionamiento de un LED >, su patilla'e o pinuot, y lo vamos a 5acer lucir con sus di"erentes colores de "orma aleatoria utilizando la "unción random(min,maC*. random(min,maC*.
MATERIAL I DU9% I Gable U> para rduino I 4laca 4rotoboard I o"tHare DE de rduino J Diodo Led > KJ esistencia de 6 / KK6 %5ms
Código
const int
greenLED4in = 6; // 49 verde del LED > se conecta a la salida 6 const int blueLED4in = ; // 49 azul del LED > > se conecta a la salida const int redLED4in = <;
// 49 ro'o del LED > se conecta a la salida <
int random9um = 6; //variable //variabl e !ue !ue va va a almacenar el n)mero aleatorio aleator io
void setup(* + // se conguran los pines <, 6 y como salidas pin2ode(greenLED4in,%U34U3*; pin2ode(redLED4in,%U34U3*; pin2ode(blueLED4in,%U34U3*; 1
void loop(* + random9um = random(,A*; //se genera un n)mero aleatorio entre el y el M // la "uncion random(min,maC* random(min,maC* nos devuel devuelve ve un un valor valor entre min y maCJ
//se evalua evalua el el n)mero aleatorio aleatorio y en "unción de eso se se enciende de un color u otro otro i"(random9um == * +
digital&rite(<,--*; digital&rite( <,--*; //luce el LED en %N% digital&rite(6,L%&*; digital&rite(,L%&*; delay(A66*; 1 else i"(random9um == K* + digital&rite(<,L%&*; digital&rite(6,--*; digital&rite(6,--*; //luce el LED en :EDE digital&rite(,L%&*; delay(A66*; 1 else i"(random9um == M* + digital&rite(<,L%&*; digital&rite(6,L%&*; digital&rite(,--*; digital&rite(,--*; //luce el LED en OUL delay(A66*; 1 1
Barrera de tren nteractuarán LEDs y un ervo.
Material J LED o'o J LED :erde J LED marillo J ervo J K esistencias de 6 o5mmios J rduino J >oard J Gables
Es!uema elBctrico con las respectivas coneCionesF
Pinclude Qervo.5? //mportamos la biblioteca ervo.5 Pinclude Qrduino.5? ervo barrera; //Declaramos un servo y se llama barrer, con esto vamos a traba'ar int ledv = K; //Declaramos un Led, en este caso el verde sobre el pin K int leda = ;
int ledr = ; //Establecemos //Establecemos el modo de "unción "unción de cada led
void setup(*+ pin2ode(ledv, %U34U3*; pin2ode(leda, %U34U3*; pin2ode(ledr, %U34U3*; //sociamos el el servomotor servomotor al pin < del rduino rduino barrera.attac5(<*; 1 void loop(*+ //Gomenzamos //Gomenzamos nuestro nuestro programa encendiendo encendiendo el Led Led ro'o ya ya !ue nuestra nuestra barrera comien//za comien//za con la posición 6.
//Esto es es a'ustable a'ustable dado !ue !ue nosotros nosotros decidimos decidimos las posiciones posiciones iniciales
digital&rite(ledr, --*; //Le mandamos mandamos un angulo de 6 6 grados a nuestro nuestro servo servo por errores de "uncionamiento. "uncionamiento. //ecomiendo //ecomiendo !ue el inicio del mismo sea sea en 6 grados barrera.Hrite(6*; //-acemos un dela delay y de A segundo segundo antes antes de mandarle mandarle la siguiente instruccion instruccion delay (A666*; //-acemos el programa programa para el cambio cambio de ro'o a verde verde pasando pasando por el amarillo. amarillo.
digital&rite(ledr, L%&*; digital&rite(leda, digital&rite(leda, --*; delay(666*; digital&rite(leda, L%&*; delay(666*; digital&rite(leda, digital&rite(leda, --*; delay(666*;
digital&rite(leda, L%&*; delay(666*; digital&rite(leda, digital&rite(leda, --*; delay(666*; digital&rite(leda, L%&*; delay(666*; digital&rite(ledv, --*; //Una vez vez 5a cambiado el led a verde, verde, cambiamos cambiamos la posición posición de la barrera. barrera.Hrite(66*; delay(A666*; digital& digital &rite(ledv rit e(ledv,, L%&*; 1
Haciendo onidos eproducir mediante un buzzer (o Oumbador* una escala de notas musicales.
Material J >read>oard o 4rotoboard J C Oumbador ( buzzer * J rduino
J Gables
Código: // ntroducimos la variable por donde donde saldrá nuestra nuestra seRal seRal digital 5asta 5asta el zumbador int speaSer4in = ; // Denimos una variable con el n)mero de tonos !ue va a reproducir int num3 num 3ones = 6; int tonesT = +, VV,
mid G GP
D
DP
E
7
7P
P
// E!uivalen E!uivalencias cias entre "recuencias "recuencias y 9otas 9otas de la escala escala natural, no están están todas todas declaradas declaradas pero eCisten. void setup(* +
// eneramos un bucle !ue !ue recorra nuestro nuestro vector vector.. Este será el encargado encargado de introducir introducir una determinada "recuencia al zumbador cada vez, con"orme 5ayamos declarado el vector de tonos. "or (int i = 6; i Q num3ones; num3ones; i@@* + tone(speaSer4in, tonesTi*;
delay(A66*; 1
no3one(speaSer4in*; 1 void loop(* + 1
Carros de !uego:
// ntroducimos la variable por donde donde saldrá nuestra nuestra seRal seRal digital 5asta 5asta el zumbador
int speaSer4in = ; // Denimos una variable con el n)mero de tonos !ue va a reproducir int num3 num 3ones = 6; int songT = +, KM<, K<, MM6, K<, KK6, J6, , KM<, K<, MM6, K<, J6, J6, , KM<, K<, MM6, K<, KK6, J6, KK6, KM<, KK6, , 1; // int tonesT = +, VV,
mid G GP
D
DP
E
7
7P
P
// Uso una "recuencia "recuencia de J6 para para generar generar un sonido sonido !ue apenas apenas se oiga oiga y !ue sustituy sustituyaa al silencio !ue deber#a sonar en la melod#a. %s invito a !ue compartáis una solución me'or para evitar !ue suene el buzzer en esa posición. void setup(* +
"or (int i = 6; i Q num3ones; num3ones; i@@*
+ tone(speaSer4in, tonesTi*;
delay(A66*; 1
no3one(speaSer4in*; 1 void loop(* + 1
43 DEL G>E
/W 4rograma !ue !ue reproduce reproduce la melodia de X4iratas X4iratas del Garibe W/
void setup(*+ pin2ode (<, %U34U3*; //pin congurado como salida 1 // "uncion = tone(pin, tone(pin, "re!uency "re!uency,, duration*
void loop(* + tone(<,
tone(<,
delay(66*; tone(<,
tone(<,AK.A,66*; delay(66*; tone(<,A8V.KK,66*; delay(K66*; tone(<,MM6,66*; delay(66*; tone(<,AK.A,66*; delay(66*; tone(<,A8V.KK,66*; delay(66*; tone(<,A8V.KK,66*; delay(66*; tone(<,A8V.KK,66*; delay(66*; tone(<,A<.A,66*; delay(66*; tone(<,<8.MA,66*; delay(66*; tone(<,<8.MA,66*; delay(66*; tone(<,<8.MA,66*; delay(66*; tone(<,V8K.<<,66*; delay(66*; tone(<,A<.A,66*; delay(66*; tone(<,A<.A,66*; delay(66*; tone(<,A8V.KK,66*; delay(66*; tone(<,AK.A,66*; delay(66*; tone(<,A8V.KK,66*;
delay(M66*; tone(<,MM6,66*; delay(66*; tone(<,AK.A,66*; delay(66*; tone(<,A8V.KK,66*; delay(66*; tone(<,A8V.KK,66*; delay(66*; tone(<,A8V.KK,66*; delay(66*; tone(<,<8.MA,66*; delay(66*; tone(<,V8K.<<,66*; delay(66*; tone(<,V8K.<<,66*; delay(66*; tone(<,V8K.<<,66*; delay(66*; tone(<,886,66*; delay(66*; tone(<,
tone(<,A8V.KK,66*; delay(66*; tone(<,A<.A,66*; delay(66*; tone(<,<8.MA,66*; delay(66*; tone(<,<8.MA,66*; delay(66*; tone(<,V8K.<<,66*; delay(66*; tone(<,886,66*; delay(66*; tone(<,A8V.KK,66*; delay(K66*; tone(<,A8V.KK,66*; delay(66*; tone(<,<8.MA,66*; delay(66*; tone(<,A<.A,66*; delay(66*; tone(<,A<.A,66*; delay(66*; tone(<,<8.MA,66*; delay(66*; tone(<,A8V.KK,66*; delay(66*; tone(<,A<.A,66*; delay(M66*; tone(<,886,66*; delay(66*; tone(<,6M.A6,66*; delay(66*; tone(<,VM.,66*;
delay(66*; tone(<,VM.,66*; delay(66*; tone(<,VM.,66*; delay(66*; tone(<,K8.A,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,AV.<8,66*; delay(66*; tone(<,K8.A,66*; delay(66*; tone(<,K8.A,66*; delay(66*; tone(<,VM.,66*; delay(66*; tone(<,6M.A6,66*; delay(66*; tone(<,6M.A6,66*; delay(66*; tone(<,VM.,66*; delay(K66*; tone(<,886,66*; delay(66*; tone(<,6M.A6,66*; delay(66*; tone(<,VM.,66*; delay(66*;
tone(<,VM.,66*; delay(66*; tone(<,VM.,66*; delay(66*; tone(<,K8.A,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,AV.<8,66*; delay(66*; tone(<,K8.A,66*; delay(66*; tone(<,K8.A,66*; delay(66*; tone(<,VM.,66*; delay(66*; tone(<,6M.A6,66*; delay(66*; tone(<,VM.,66*; delay(M66*; tone(<,886,66*; delay(66*; tone(<,6M.A6,66*; delay(66*; tone(<,VM.,66*; delay(66*; tone(<,VM.,66*; delay(66*; tone(<,VM.,66*;
delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,AV.<8,66*; delay(66*; tone(<,AV.<8,66*; delay(66*; tone(<,AV.<8,66*; delay(66*; tone(<,V6,66*; delay(66*; tone(<,8M.,66*; delay(66*; tone(<,8M.,66*; delay(66*; tone(<,V6,66*; delay(66*; tone(<,AV.<8,66*; delay(66*; tone(<,V6,66*; delay(66*; tone(<,VM.,66*; delay(K66*; tone(<,VM.,66*; delay(66*; tone(<,K8.A,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,AV.<8,66*; delay(66*;
tone(<,V6,66*; delay(66*; tone(<,VM.,66*; delay(K66*; tone(<,VM.,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,K8.A,66*; delay(66*; tone(<,K8.A,66*; delay(66*; tone(<,VM.,66*; delay(66*; tone(<,68.VK,66*; delay(66*; tone(<,VM.,66*; delay(66*; tone(<,VM.,66*; delay(66*; tone(<,K8.A,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,K<.<,66*; delay(66*; tone(<,AV.<8,66*; delay(66*; tone(<,V6,K66*; delay(M66*; tone(<,K<.<,66*;
delay(66*; tone(<,VM.,66*; delay(66*; tone(<,886,K66*; delay(66*; tone(<,8M.,K66*; delay(M66*; tone(<,K<.<,66*; delay(66*; tone(<,VM.,66*; delay(66*; tone(<,
1
2% >%
void setup(* + 1 // "uncion = tone(pin, tone(pin, "re!uency "re!uency,, duration* void loop(* + // G9G%9 G9G%9 DE 2% >% >% //9%3 //9%3 6 no3one(<*; tone(<, 6, 66*; delay(VA*; //9%3 //9%3 6 no3one(<*; tone(<, 6, 66*; delay(VA*; //9%3 //9%3 6K no3one(<*; tone(<, 6, 66*; delay(A6*; //9%3 //9%3 6M no3one(<*; tone(<, 6, 66*; delay(A6*; //9%3 //9%3 6A no3one(<*; tone(<, 6, 66*; delay(A6*; //9%3 //9%3 6 no3one(<*;
tone(<, VV6, 66*; delay(A6*; //9%3 //9%3 6V no3one(<*; tone(<, K86, 66*; delay(VA*; //9%3 //9%3 68 no3one(<*; tone(<, A6, 66*; delay(8V*; //9%3 //9%3 6< no3one(<*; tone(<, K86, 66*; delay(A*; //9%3 //9%3 6 no3one(<*; tone(<, K6, 66*; delay(66*; //9%3 //9%3 no3one(<*; tone(<, MM6, 66*; delay(A6*; //9%3 //9%3 no3one(<*; tone(<, M86, 86*; delay(A6*; //9%3 //9%3 K no3one(<*;
tone(<, MA6, 66*; delay(A*; //9%3 //9%3 M no3one(<*; tone(<, MK6, 66*; delay(VA*; //9%3 //9%3 A no3one(<*; tone(<, K86, 66*; delay(A6*; //9%3 //9%3 no3one(<*; tone(<, 6, 86*; delay(66*; //YYYYYYYYYYYYYZ //YYYYYYYYYYYYYZ //9%3 //9%3 V no3one(<*; tone(<, V6, A6*; delay(66*; //YYYYYYYYYYYYYZ //YYYYYYYYYYYYYZ //9%3 //9%3 8 no3one(<*; tone(<, 86, 66*; delay(VA*; //9%3 //9%3 < no3one(<*; tone(<, V66, 86*; delay(A6*; //9%3 //9%3 6 no3one(<*;
tone(<, V6, A6*; delay(VA*; //9%3 //9%3 no3one(<*; tone(<, 6, 86*; delay(VA*; //9%3 //9%3 no3one(<*; tone(<, A6, 86*; delay(A6*; //9%3 //9%3 K no3one(<*; tone(<, A86, 86*; delay(VA*; //9%3 //9%3 M no3one(<*; tone(<, M86, 86*; delay(VA*; //9%3 //9%3 A no3one(<*; tone(<, A6, 66*; delay(VA*; //9%3 //9%3 no3one(<*; tone(<, K86, 66*; delay(VA*; //9%3 //9%3 V no3one(<*;
tone(<, K6, 66*; delay(66*; //9%3 //9%3 8 no3one(<*; tone(<, MM6, 66*; delay(A6*; //9%3 //9%3 < no3one(<*; tone(<, M86, 86*; delay(A6*; //9%3 //9%3 K6 no3one(<*; tone(<, MA6, 66*; delay(A*; //9%3 //9%3 K no3one(<*; tone(<, MK6, 66*; delay(VA*; //9%3 //9%3 K no3one(<*; tone(<, K86, 66*; delay(A6*; //9%3 //9%3 KK no3one(<*; tone(<, 6, 86*; delay(66*; //9%3 //9%3 KM no3one(<*;
tone(<, V6, A6*; delay(66*; no3one(<*; tone(<,86,66*; delay(VA*; no3one(<*; tone(<,V66,86*; delay(A6*; tone(<,V6,A6*; delay(VA*; no3one(<*; tone(<,6,86*; delay(VA*; no3one(<*; tone(<,A6,86*; delay(A6*; no3one(<*; tone(<,A86,86*; delay(VA*; no3one(<*; tone(<,M86,86*; delay(VA*; no3one(<*; tone(<,A66,66*; delay(A6*; no3one(<*;
tone(<,V6,66*; delay(A6*; no3one(<*; tone(<,V6,66*; delay(A6*; no3one(<*; tone(<,86,66*; delay(VA*; no3one(<*; tone(<,6,A6*; delay(VA*; no3one(<*; tone(<,A6,A6*; delay(A6*; no3one(<*; tone(<,K86,66*; delay(A6*; no3one(<*; tone(<,MK6,66*; delay(VA*; no3one(<*; tone(<,A66,66*; delay(VA*; no3one(<*; tone(<,MK6,66*; delay(A6*; no3one(<*;
tone(<,A66,66*; delay(VA*; no3one(<*; delay(A6*;tone(<,AV6,66*; delay(6*;tone(<,A66,66*; delay(A6*;tone(<,V6,66*; delay(A6*;tone(<,V6,66*; delay(VA*;tone(<,86,66*; delay(VA*;tone(<,6,A6*; delay(A6*;tone(<,A6,66*; delay(A6*;tone(<,66,86*; delay(A6*;tone(<,66,86*; delay(VA*;tone(<,66,86*; delay(A6*;tone(<,K86,66*; delay(A6*;tone(<,A66,66*; delay(A6*;tone(<,V6,66*; delay(A6*;tone(<,V6,66*; delay(VA*;tone(<,86,66*; delay(VA*;tone(<,6,A6*; delay(A6*;tone(<,A6,A6*; delay(A6*;tone(<,K86,66*; delay(VA*;tone(<,MK6,66*; delay(VA*;tone(<,A66,66*; delay(A6*;tone(<,MK6,66*; delay(VA*;tone(<,A66,66*; delay(A6*;tone(<,AV6,66*; delay(6*;tone(<,A66,66*; delay(A6*;tone(<,V6,66*; delay(A6*;tone(<,V6,66*; delay(VA*;tone(<,86,66*; delay(VA*;tone(<,6,A6*; delay(A6*;tone(<,A6,66*; delay(A6*;tone(<,66,86*; delay(A6*;tone(<,66,86*;
delay(VA*;tone(<,66,86*; delay(A6*;tone(<,K86,66*; delay(A6*;tone(<,A66,66*; delay(A6*;tone(<,V6,66*; delay(A6*;tone(<,V6,66*; delay(VA*;tone(<,86,66*; delay(VA*;tone(<,6,A6*; delay(A6*;tone(<,A6,A6*; delay(A6*;tone(<,K86,66*; delay(VA*;tone(<,MK6,66*; delay(VA*;tone(<,A66,66*; delay(A6*;tone(<,MK6,66*; delay(VA*;tone(<,A66,66*; delay(A6*;tone(<,AV6,66*; delay(6*;tone(<,A8A,66*; delay(VA*;tone(<,AA6,66*; delay(6*;tone(<,A66,66*; delay(86*;tone(<,K86,66*; delay(A6*;tone(<,A66,66*; delay(A6*;tone(<,A66,66*; delay(VA*;tone(<,A66,66*; delay(A6*;tone(<,A66,6*; delay(VA*;tone(<,A66,86*; delay(A6*;tone(<,A66,6*; delay(VA*;tone(<,A66,86*; delay(VA*;tone(<,A86,86*; delay(VA*;tone(<,6,86*; delay(VA*;tone(<,A66,86*; delay(A6*;tone(<,MK6,86*; delay(VA*;tone(<,K86,86*; delay(K66*;tone(<,A66,6*; delay(VA*;tone(<,A66,86*; delay(A6*;tone(<,A66,6*; delay(VA*;tone(<,A66,86*; delay(VA*;tone(<,A86,86*;
delay(VA*;tone(<,6,86*; delay(A*;tone(<,8V6,86*; delay(*;tone(<,V6,86*; delay(K66*;tone(<,A66,6*; delay(VA*;tone(<,A66,86*; delay(A6*;tone(<,A66,6*; delay(VA*;tone(<,A66,86*; delay(VA*;tone(<,A86,86*; delay(VA*;tone(<,6,86*; delay(VA*;tone(<,A66,86*; delay(A6*;tone(<,MK6,86*; delay(VA*;tone(<,K86,86*; delay(K66*;tone(<,6,66*; delay(VA*;tone(<,6,66*; delay(A6*;tone(<,6,66*; delay(A6*;tone(<,A6,66*; delay(A6*;tone(<,6,66*; delay(A6*;tone(<,VV6,66*; delay(A*;tone(<,K86,66*; delay(666*; tone(<,MM6,66*; delay(66*; delay(66*; tone(<,MM6,M66*; delay(66*; delay(66*; delay(A666*; 1
"tili#ación $ando in!rarro%os in!rarro%os
Es necesario utilizar una nueva librer#a
NECIRrcv ,
debe ser incluida en el apartado apart ado de
Librerias del DE.
Material:
J rduino, J ensor de in"rar ro'os @ mando compatible J esistencia 6 .
Código
Pinclude Qrduino.5? Pinclude Q9EGrcv.5? Pdene 49 8
// pin al !ue conectamos el receptor de
static int auC = ; 9EGrcv ir(49* ; void setup(* + erial.begin(<66* erial.begin(<66* ;
erial.println(X9EG codigo codigo recepcionX* recepcionX* ; ir.begin(* ir.begin(* ; 1 void loop(* + unsigned long ircode ; H5ile (ir.available(** (ir.available(** + ircode = ir.read(* ; erial.println(ircode* ; 1 1
Encendido/apagado de un LED 4ara el mando !ue 5emos utilizado (el !ue se muestra en la primera "oto*, la lectura del %9/%77 se corresponde con el valor de KAM
Código
Pinclude Qrduino.5? Pinclude Q9EGrcv.5? Pdene 49 8
// pin t5at detector is connected to
int led = V; static int auC = ; 9EGrcv ir(49* ; void setup(* + pin2ode(led, %U34U3*; ir.begin(* ir.begin(* ; 1 void loop(* + unsigned long ircode ; H5ile (ir.available(** (ir.available(** + ircode = ir.read(* ;
i"(ircode == KAM
else+ digital&rite(led, digital&rite(led, --*; auC = 6; 1 1 1
1
Control LED RGB
3ras 5aber le#do los códigos de los botones de nuestro mando ( Utilización mando in"rarro'os*, in"rarro'os *, El sensor de in"rarro'os debe controlar un LED > .
Material:
J Led > J ensor de in"rar ro'os @ mando compatible J M resistencias resistencias 6Ω (una para cada cada color del led > > y otra para el sensor sensor de in"rarro'os* in"rarro'os* J 4rotoboard J Gables
Código:
Pinclude Q&4rogram.5? Pinclude Q9EGrcv.5? //Libreria del protocolo 9EG Pdene 49 8 // 4in del receptor 9EGrcv ir(49*;
int ro'o = K; //4in del color ro'o del led > > int verde = ; //4in del color verde del led > int azul = ; //4in del color azul del led >
//poHer //poHer = M868V M868V86; 86; //Godigo correspondiente correspondiente al boton boton 4%&E 4%&E del mando a distancia //butro'o = MM6<6; MM6<6; //Godigo correspondiente correspondiente al boton boton del mando a distancia distancia //butverde //butverde = M
void setup(* + //erial.begin(<66*; //erial.begin(<66*; //niciamos //niciamos comunicacion comunicacion serie ir.begin(*; ir.begin(*; //niciamos la recepcion
pin2ode(ro'o, pin2ode(ro'o, %U34U3*; pin2ode(verde,%U34U3*; pin2ode(azul, pin2ode(azul, %U34U3*; 1
void loop(* + unsigned long ircode; //:ariab //:ariable le !ue contendra el codigo decimal del boton pulsado H5ile (ir.available(** (ir.available(** + ircode = ir.read(*; //Leemos el codigo del boton pulsado i" (ircode == poHer* poHer* //i el boton de poHer poHer... ... apagamos el led
+ digital& digital &rite(ro'o, rit e(ro'o, L%&*; L%&*; digital& digital &rite(verde, rit e(verde, L%&*; L%&*; digital& digital &rite(azul, rit e(azul, L%&*; L%&*; 1 else i" (ircode == butro'o* digital& digital &rite(ro'o,- rit e(ro'o,--*; -*; //i boton , encendemos color ro'o else i" (ircode == butverde* digital& digital &rite(verde,--*; rit e(verde,--*; //i boton , encendemos color verde else i" (ircode == butazul* digital&rite(azul,--*; digital&rite(azul,--*; //i boton K, encendemos encendemos color azul 1 1
Rel& aplicado a la do$ótica 2aterial J rduino J Un relB J Gables J Una lámpara con interruptor interr uptor J un sensor
J Un mando de control remoto universal J una resistencia de 6 o5mios
4ara ello previamente 5abremos preparado la lampara para su coneCión como muestra la siguiente imagenF
Desmontar previamente previamente el interr uptor de una lamparita de mesa. Dentro del interruptor interr uptor encontraremos encontraremos un cable continuo y el otro cortado el cual usaremos para 5acer la coneCión.
Pinclude Qrduino.5? Pinclude Q9EGrcv.5? // Descargar la librer#a de los tutoriales del control Pdene 49 K
// pin donde está conectado el
int lig5t = 8; // Denimos como luz, dónde antes estaba nuestro LED. static int auC = ; 9EGrcv ir(49* ;
void setup(* + pin2ode(lig5t, %U34U3*; ir.begin(* ir.begin(* ; 1 void loop(* + unsigned long ircode ; H5ile (ir.available(** (ir.available(** + ircode = ir.read(* ; // Establecemos !uB tiene !ue pasar cuando el código emitido coincida con el del %9. %9. i"(ircode i"(ircod e == KAM
else+ digital&rite(lig5t, digital&rite(lig5t, --*;
auC = 6; 1 1 1 1
Te'to (ia Bluetoot) del tele!ono $o(il a un LCD 4ara comenzar comenzar describirB a continuación continuación lo !ue necesitamos para el desarrolloF . 2odulo >luetoot5 -GJ6 . rduino K. 3ele"ono inteligente con sistema operativo ndroid M. Un LGD [ A. Gables de coneCión
4ara controlar el LGD [, 5e realizado la coneCion de los pines de la siguiente manera ,para el caso de un rduino Uno K y un rduino , usamos los pines al V y :GG y 9D de la tar'eta rduinoF
4ara el caso del modulo *luetoot) , este se conecta de la siguiente manera, con los pines 6 y del rduino conectados al 3[ y [ del modulo >luetoot5 y el modulo alimentado por :GG (A:* y 9D del rduino.F
Gódigo 44 9:E93%
Pinclude QLi!uidGrystal.5?
Li!uidGrystal Li!uidGrystal lcd(V,, A, M, K, *; int led4in = K; //signamos la palabra led4in como una variable tipo entera tring readtring; //signamos //signamos la palabra readtring readtring a una variable tipo cadena
void setup(* + erial.begin(<66*; erial.begin(<66*; //inicializamos //inicializamos la comunicacion comunicacion serial pin2ode(led4in, pin2ode(led 4in, %U34U3*; //e determina !ue el pin K va va a ser usado como salida lcd.begin(, *; lcd.clear(*; lcd.noutoscroll(*;
lcd.print(XEsperando lcd.print(XEsperando 2X*; delay( 66 *; 1
void loop(* + H5ile (erial.available (erial.available(** (** + //e verica verica la disponibilidad del del puero serial delay(K*;
// a traves traves de un loop
c5ar c = erial.read(*; // e leen los caracteres caracteres !ue ingresan por el puerto readtring @= c;
//se acumulan cada uno de los caracteres en readtring
1 i" (readtring.lengt5(* (readtring.lengt 5(* ?6* + //e verica !ue !ue la variable contenga in"ormacion
lcd.clear(*; erial.println(readtring*; //se envia envia lo !ue tenga la variable variable
lcd.print(readtring*; i" (readtring == X%nX*
//se compara si la palabra !ue llega es XonX
+ digital&rite(led4in, digital&rite(led4in, --*; //i es XonX se enciende el led del pin K 1 i" (readtring == X%\X* // e compara si la palabra !ue llega es Xo\X + digital&rite(led4in, digital&rite (led4in, L%&*; L%&*; //si es Xo\X se apaga el led del pin K 1 readtring=XX; readtring=XX; // e limpia la variable 1 1
Controlar Motor DC desde un tel&!ono $o(il
Este circuito nos permite controlar la corriente !ue pasa a travBs del $otor aplicando la seRal +,M !ue llega del Arduino y a medida !ue varia el anc5o del pulso del 4in < de la tar'eta Arduino , la corr iente de la base del transistor varia, varia, por lo cual la corriente corr iente !ue va desde desde el emisor 5acia el colector esta directamente controlada controlada por el +,M y esto 5ace !ue la (elocidad del $otor aumente o disminuya seg)n la corriente !ue pasa del emisor al colector del transistor, ademas !ue protegemos en cierta medida la tar'eta Arduino . Este circuito por lo general es usado para controlar $otores, relays, lamparas pe!ueRas , entre otros y el diodo 9M66V protege el transistor de la contracorriente.
2aterial
. 2otor DG pe!ueRo !ue "unciones entre Av y luetoot5 -GJ6A o -GJ6 K. Un transistor >GAM< M. esistencia de 66 o5ms A. Diodo 9M66V . rduino V. 3elB"ono 3elB"ono móvil con istema %perativ %per ativo o ndroid ndroi d 8. daptador daptador para la tar'eta rduino
const int analog%ut4in = <; // nalog output pin to 4&2 control
int output:alue output:alue = 6;
// value output to t5e 4&2 (analog out*
tring readtring; void setup(* + // initialize serial communications communications at <66 bpsF bpsF erial.begin(<66*; 1 void loop(* + H5ile (erial.available(** (erial.available(** + //e verica la disponibilidad disponibilidad del puero serial delay(K*;
// a traves traves de un loop
c5ar c = erial.read(*; // e leen los caracteres caracteres !ue ingresan por el puerto readtring @= c;
//se acumulan cada uno de los caracteres en readtring
output:alue output:alue = map(readtring.tont( map(readtr ing.tont(*, *, 6, 6K, 6, AA*; 1 i" (readtring.lengt5(* (readtring.lengt 5(* ?6* + //e verica !ue !ue la variable contenga in"ormacion erial.println(readtring.tont(**; erial.println(readtring.to nt(**; //se envia envia lo !ue tenga la variable analog&rite(analog%ut4in,out analog&rite(anal og%ut4in,output: put:alue alue *; readtring=XX; readtring=XX; // e limpia la variable 1
// Hait milliseconds milliseconds be"ore be"ore t5e neCt neCt loop // "or "or t5e analogJtoJdigital analogJtoJdi gital convert converter er to settle // a"ter a"ter t5e last readingF delay(*; 1
ensor de +ar-ing Gon esta práctica vamos a desarrollar un sistema de ayuda al estacionamiento, donde mediante un sensor de distancia por ultrasonidos vamos a emitir un pitido con mayor "recuencia con"orme nos acercamos al ob'eto.
En el datas5eet del sensor podemos ver !ue la distancia medida es proporcional a la amplitud del eco de la seRal enviada, y para calcular dic5a distancia, nos remitimos a la "ormula ]Distancia = :elocidad C 3iempoY.
Material
I 3ar'eta DU9% U9% I Gable U> para rduino I 4laca 4rotoboard I >uzzer o altavoz I ensor de ultrasonidos -GJ6M M J Gonectores mac5oJ5embra I Gables para coneCiones
Código int speaSer4in = 8; long distancia; long tiempo; int '; void setup(*+ erial.begin(<66*; pin2ode(, %U34U3*; /Wactivación del pin < como salidaF para el pulso ultrasónicoW/ ultrasóni coW/ pin2ode(V, 94U3*; /Wactivación del pin 8 como entradaF tiempo del rebote del ultrasonidoW/ 1
void loop(*+ digital&rite(,L%&*; digital&rite (,L%&*; /W 4or 4or cuestión de estabili estabilización zación del sensorW/ delay2icroseconds(A*; digital&rite(, digital&rite (, --*; /W env#o del pulso ultrasónicoW/ ultrasónic oW/ delay2icroseconds(6*;
tiempo=pulsen(V, tiempo=pulsen(V, --*; /W 7unción 7unción para medir medir la longitud del pulso pulso entrante. 2ide 2ide el tiempo !ue !ue transcurrido transcurr ido entre el env#o env#o
del pulso ultrasónico y cuando el sensor recibe el
rebote, es decirF desde !ue !ue el pin empieza a recibir el rebote, --, 5asta !ue
de'a de
5acerlo, L%&, la longitud del pulso entranteW/ distancia= int(6.6VWtiempo*; int(6.6VWtie mpo*; /W"órmul /W"órmulaa para calcular la distancia obteniendo un valor enteroW/ /W2onitorización en cent#metros cent#metros por el monitor monitor serialW/ erial.println(XDistancia X*; erial.println(distancia*; erial.println(X cmX*; //delay(666*; i"(distanciaQ=M6* + i"(distancia i"(distanci a ?=6 ^^ distanciaQ=K* ' = ; i"(distancia ?K ^^ distanciaQ=8* distanciaQ=8* ' = A6; i"(distancia i"(distanci a ?8 ^^ distanciaQ=6* ' = K66; i"(distancia i"(distanci a ?6 ^^ distanciaQ=K6* ' = 66; i"(distancia i"(distanci a ?K6 ^^ distanciaQ=M6* ' = <66; i"(distancia ?M6* ' = 66; tone(speaSer4in,KM<*;
delay('*;
no3one(speaSer4in*;
delay(66*; 1
else + no3one(speaSer4in*; 1 1
Emisor/eceptor &ireless n7ML6@ rduino Gonectar rduinos mediante en un emisor/receptor emisor/receptor &ireless n7ML6@. Utilizando la librer#a 2ir"piDriver 2ir"piDriver o simplemente simplemente 2ir". 2ir ".
Una vez tengamos conectados los módulos a cada uno de los rduinos !ue !ueremos conectar podemos probar con este e'emplo de un c5at muy sencillo. Descargamos la librer#a 2ir" de la Heb
de
rdu rduin ino o.cc .cc De Desc scar arga garr
2ir".zi 2ir" .zip p (UL (UL
descomprimimos descomprimimos en el directorio del DE J? libraries.
// Emisor/eceptor Emisor/eceptor &ireless &ireless n7ML6@ n7ML6@
Pinclude Q4.5? Pinclude Q2ir".5? Pinclude Qn7ML6.5? Pinclude Q2ir"-ardHarepiDriver.5?
c5ar Wcadena;
alterna alternati tiv va De Desc scar arga garr
2ir".zi 2ir" .zip p*
y
la
tring inputstring inputstring = XX;
//cadena recibida desde el 4G
boolean input$stringcomplete = "alse; //cadena recibida completamente desde el 4G
void setup(* + 2ir".spi = ^2ir"-ardHarepi; ^2ir"-ardHarepi; // inicio inicio de de la emision 2ir".init(*; // e envia envia un byte byte cada vez vez 2ir".pay 2ir" .payload load = ; // seleccionamos el canal 2ir".c5annel 2ir" .c5annel = <6; 2ir".cong(*; // 2-z 2ir".congegister(7$E3U4,6C6*; // eleccionamos eleccionamos dirección 2ir".set3 2ir" .set3DD((byte DD((byte W*X3[$6X*; W*X3[$6X* ; erial.begin(AV66*; erial.println(Xniciando ...X*; 1
// enviar enviar cadena void transmit(const c5ar Wstring* + byte c; "or( "or( int i=6 ; stringTi0=6C66 ; i@@ *
+ c = stringTi;
2ir".send(^c*; H5ile( 2ir".isending(* * ; 1
1
// enviar enviar una secuancia secuancia G/L7
void transmitl"(void* + byte c; c = _`r_; 2ir".send(^c*; H5ile( 2ir".isending(* * ; c = _`n_; 2ir".send(^c*; H5ile( 2ir".isending(* * ; 1 //Evento //Evento de recepcion recepcion de caracteres caracteres desde desde el 4G void serialEvent(* + c5ar inc5ar = (c5ar*erial.read(*; (c5ar*erial.read(*; // Radimos el caracter caracter recibido a la cadena inputstring @= inc5ar; // 7in de la cadena, cadena, recibido recibido QG? i"(inc5ar == _`r_* +input$stringcomplete +input$stringcomplete = true;1 1
void loop(* + // i se escribe algo por por el puerto erie lo envia. envia. i" (input$stringcomplete* (input$stringcomplete* + inputstring.toG5arr inputstring .toG5arrray(cadena, ray(cadena, 6*;
transmit(cadena*;
transmitl"(*; erial.pri eri al.print(X nt(XoJ? oJ? X*;
erial.println(inputstring*; input$stringcomplete input$strin gcomplete = "alse; inputstring inputstring = XX; 1
// Esperando recepción recepción byte c; i"( 2ir".dataeady(* * +
2ir".getData(^c*; erial.print(XEl otroJ? X*;
erial.Hrite(c*; 1
1