Está en la página 1de 57

Interrupciones

Una interrupcin consiste bsicamente en detectar detectar un evento y realizar algo en


consecuencia.
Cdigo:
int LED = 8;
//Se declara una variable voltil que cambiar de estado en el
//mdulo de la interrupcin y se utilizar fuera.
//Si la variable no se utilizase fuera del mdulo de la interrupcin
//no sera necesario crearla de tipo voltil.
volatile int estado_actual = LOW;
//Se crea la funcin que se ejecutar cada vez que se active la
//interrupcin. Esta funcin es de tipo void (por lo que no devuelve
//ningn valor) y no tiene parmetros de entrada.
void fun_cambio_estado()
{
//Se cambia al estado contrario al actual, es decir, de LOW se pasa
//a HIGH y de HIGH a LOW.
estado_actual = !estado_actual;
}
void setup()
{
//Se declara el pin digital correspondiente al LED como salida.
pinMode(LED, OUTPUT);
attachInterrupt(0, fun_cambio_estado, FALLING);
}
void loop()
{
//Se escribe el valor actual del LED.
digitalWrite(LED, estado_actual);
}

Ejemplo para crear un retraso (delay) , para ello se debe comprobar el tiempo transcurrido y
decidir si se toma la accin o no.
Cdigo:
volatile int contador = 0;

// Somos de lo mas obedientes

int n = contador ;
long T0 = 0 ; // Variable global para tiempo
void setup()
{

pinMode(2, INPUT);
Serial.begin(9600);
attachInterrupt( 0, ServicioBoton, LOW);

}
void loop()
{ if (n != contador)
{ Serial.println(contador);
n = contador ;
}
}
void ServicioBoton()
{
if ( millis() > T0 + 250)
{ contador++ ;
T0 = millis();
}
}

El led verde ir parpadeando hasta que alguien pulse el botn. Mientras el botn est pulsado,
se llamar a la funcin alarma, que encender el led rojo y apagar el verde.

Materiales:
Arduino
2x LED
Pulsador
Resistencias de 150 ohm: para proteger los LEDs y evitar errores de lectura con el botn

Cdigo
int red = 8;
int green = 5;

int boton = 2;
void setup()
{

pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(boton, INPUT);

//Creamos la interrupcion
attachInterrupt(0, alarma, HIGH);
}

void loop()
{

digitalWrite(green, HIGH);
delay(1000);

digitalWrite(green, LOW);
delay(200);
}

//Codigo de la interrupcion
void alarma()
{

digitalWrite(green, LOW);

while(digitalRead(2) == HIGH)
{

digitalWrite(red, HIGH);
delay(200);

digitalWrite(red, LOW);
delay(200);
}
}

CONTROL DE LED RGB


En esta prctica vamos a familiarizarnos con el funcionamiento de un LED RGB, su patillaje o
pinuot, y lo vamos a hacer lucir con sus diferentes colores de forma aleatoria utilizando la
funcin random(min,max).

MATERIAL
1 ARDUINO

1 Cable USB para Arduino


1 Placa Protoboard

1 Software IDE de Arduino


1- Diodo Led RGB

3- Resistencia de 220 / 330 Ohms

Cdigo

const int

greenLEDPin = 10; // PIN verde del LED RGB se conecta a la salida 10

const int blueLEDPin = 11; // PIN azul del LED RGB se conecta a la salida 11
const int redLEDPin = 9;

// PIN rojo del LED RGB se conecta a la salida 9

int randomNum = 0; //variable que va a almacenar el nmero aleatorio


void setup() {

// se configuran los pines 9, 10 y 11 como salidas


pinMode(greenLEDPin,OUTPUT);

pinMode(redLEDPin,OUTPUT);
}

pinMode(blueLEDPin,OUTPUT);

void loop()
{

randomNum = random(2,5); //se genera un nmero aleatorio entre el 2 y el 4


// la funcion random(min,max) nos devuelve un valor entre min y max-1
//se evalua el nmero aleatorio y en funcin de eso se enciende de un color u otro
if(randomNum == 2)
{

digitalWrite(9,HIGH); //luce el LED en ROJO


digitalWrite(10,LOW);
digitalWrite(11,LOW);
}

delay(500);

else if(randomNum == 3)
{

digitalWrite(9,LOW);

digitalWrite(10,HIGH); //luce el LED en VERDE


digitalWrite(11,LOW);

delay(500);
}

else if(randomNum == 4)
{

digitalWrite(9,LOW);
digitalWrite(10,LOW);

digitalWrite(11,HIGH); //luce el LED en AZUL


}

delay(500);

Barrera de tren
Interactuarn LEDs y un Servo.

Material
- 1 LED Rojo
- 1 LED Verde
- 1 LED Amarillo
- 1 Servo
- 3 Resistencias de 220 ohmmios
- 1 Arduino
- 1 Board
- Cables
Esquema elctrico con las respectivas conexiones:

#include <Servo.h> //Importamos la biblioteca Servo.h


#include <Arduino.h>
Servo barrera; //Declaramos un servo y se llama barrer, con esto vamos a trabajar
int ledv = 13; //Declaramos un Led, en este caso el verde sobre el pin 13
int leda = 12;

int ledr = 11;


//Establecemos el modo de funcin de cada led
void setup(){
pinMode(ledv, OUTPUT);
pinMode(leda, OUTPUT);
pinMode(ledr, OUTPUT);
//Asociamos el servomotor al pin 9 del Arduino
barrera.attach(9);
}
void loop(){
//Comenzamos nuestro programa encendiendo el Led rojo ya que nuestra barrera comien//za
con la posicin 0.

//Esto es ajustable dado que nosotros decidimos las posiciones iniciales


digitalWrite(ledr, HIGH);
//Le mandamos un angulo de 10 grados a nuestro servo por errores de funcionamiento.
//Recomiendo que el inicio del mismo sea en 0 grados
barrera.write(10);
//Hacemos un delay de 5 segundo antes de mandarle la siguiente instruccion
delay (5000);
//Hacemos el programa para el cambio de rojo a verde pasando por el amarillo.
digitalWrite(ledr, LOW);
digitalWrite(leda, HIGH);
delay(1000);
digitalWrite(leda, LOW);
delay(1000);
digitalWrite(leda, HIGH);
delay(1000);

digitalWrite(leda, LOW);
delay(1000);
digitalWrite(leda, HIGH);
delay(1000);
digitalWrite(leda, LOW);
delay(1000);
digitalWrite(ledv, HIGH);
//Una vez ha cambiado el led a verde, cambiamos la posicin de la barrera.
barrera.write(100);
delay(5000);
digitalWrite(ledv, LOW);
}

Haciendo Sonidos
Reproducir mediante un buzzer (o Zumbador) una escala de notas musicales.
Material
- BreadBoard o Protoboard
- 1 x Zumbador ( buzzer )
- Arduino

- Cables

Cdigo:
// Introducimos la variable por donde saldr nuestra seal digital hasta el zumbador
int speakerPin = 12;
// Definimos una variable con el nmero de tonos que va a reproducir
int numTones = 10;
int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
//

mid C C#

D#

F#

G#

// Equivalencias entre frecuencias y Notas de la escala natural, no estn todas declaradas pero
existen.
void setup()
{

// Generamos un bucle que recorra nuestro vector. Este ser el encargado de introducir una
determinada frecuencia al zumbador cada vez, conforme hayamos declarado el vector de
tonos.

for (int i = 0; i < numTones; i++)


{
tone(speakerPin, tones[i]);
delay(500);
}
noTone(speakerPin);
}
void loop()
{
}

Carros de fuego:
// Introducimos la variable por donde saldr nuestra seal digital hasta el zumbador
int speakerPin = 12;
// Definimos una variable con el nmero de tonos que va a reproducir
int numTones = 10;
int song[] = {261, 349, 392, 440, 392, 330, -10, 261, 349, 392, 440, 392, -10, -10, 261, 349,
392, 440, 392, 330, -10, 330, 349, 330, 261, 261};
// int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
//

mid C C#

D#

F#

G#

// Uso una frecuencia de -10 para generar un sonido que apenas se oiga y que sustituya al

silencio que debera sonar en la meloda. Os invito a que compartis una solucin mejor para
evitar que suene el buzzer en esa posicin.
void setup()
{
for (int i = 0; i < numTones; i++)

{
tone(speakerPin, tones[i]);
delay(500);
}
noTone(speakerPin);
}
void loop()
{
}

PIRATAS DEL CARIBE


/* Programa que reproduce la melodia de "Piratas del Caribe */
void setup(){
pinMode (9, OUTPUT); //pin configurado como salida
}
// funcion = tone(pin, frequency, duration)
void loop() {
tone(9,293.66,200);
delay(200);
tone(9,293.66,100);
delay(100);
tone(9,293.66,200);
delay(200);
tone(9,293.66,100);
delay(100);
tone(9,293.66,200);
delay(200);
tone(9,293.66,100);
delay(100);

tone(9,293.66,100);
delay(100);
tone(9,293.66,100);
delay(100);
tone(9,293.66,100);
delay(100);
tone(9,293.66,200);
delay(200);
tone(9,293.66,100);
delay(100);
tone(9,293.66,200);
delay(200);
tone(9,293.66,100);
delay(100);
tone(9,293.66,200);
delay(200);
tone(9,293.66,100);
delay(100);
tone(9,293.66,100);
delay(100);
tone(9,293.66,100);
delay(100);
tone(9,293.66,100);
delay(100);
tone(9,293.66,200);
delay(200);
tone(9,293.66,100);
delay(100);
tone(9,293.66,200);
delay(200);
tone(9,293.66,100);
delay(100);
tone(9,293.66,200);

delay(200);
tone(9,293.66,100);
delay(100);
tone(9,293.66,100);
delay(100);
tone(9,440,100);
delay(100);
tone(9,523.25,100);
delay(100);
tone(9,587.33,100);
delay(200);
tone(9,587.33,100);
delay(200);
tone(9,587.33,100);
delay(100);
tone(9,659.25,100);
delay(100);
tone(9,698.45,100);
delay(200);
tone(9,698.45,100);
delay(200);
tone(9,698.45,100);
delay(100);
tone(9,783.99,100);
delay(100);
tone(9,659.25,100);
delay(200);
tone(9,659.25,100);
delay(200);
tone(9,587.33,100);
delay(100);
tone(9,523.25,100);
delay(100);

tone(9,523.25,100);
delay(100);
tone(9,587.33,100);
delay(300);
tone(9,440,100);
delay(100);
tone(9,523.25,100);
delay(100);
tone(9,587.33,100);
delay(200);
tone(9,587.33,100);
delay(200);
tone(9,587.33,100);
delay(100);
tone(9,659.25,100);
delay(100);
tone(9,698.45,100);
delay(200);
tone(9,698.45,100);
delay(200);
tone(9,698.45,100);
delay(100);
tone(9,783.99,100);
delay(100);
tone(9,659.25,100);
delay(200);
tone(9,659.25,100);
delay(200);
tone(9,587.33,100);
delay(100);
tone(9,523.25,100);
delay(100);
tone(9,587.33,100);

delay(400);
tone(9,440,100);
delay(100);
tone(9,523.25,100);
delay(100);
tone(9,587.33,100);
delay(200);
tone(9,587.33,100);
delay(200);
tone(9,587.33,100);
delay(100);
tone(9,698.45,100);
delay(100);
tone(9,783.99,100);
delay(200);
tone(9,783.99,100);
delay(200);
tone(9,783.99,100);
delay(100);
tone(9,880,100);
delay(100);
tone(9,932.33,100);
delay(200);
tone(9,932.33,100);
delay(200);
tone(9,880,100);
delay(100);
tone(9,783.99,100);
delay(100);
tone(9,880,100);
delay(100);
tone(9,587.33,100);
delay(300);

tone(9,587.33,100);
delay(100);
tone(9,659.25,100);
delay(100);
tone(9,698.45,100);
delay(200);
tone(9,698.45,100);
delay(200);
tone(9,783.99,100);
delay(200);
tone(9,880,100);
delay(100);
tone(9,587.33,100);
delay(300);
tone(9,587.33,100);
delay(100);
tone(9,698.45,100);
delay(100);
tone(9,659.25,100);
delay(200);
tone(9,659.25,100);
delay(200);
tone(9,698.45,100);
delay(100);
tone(9,587.33,100);
delay(100);
tone(9,659.25,100);
delay(400);
tone(9,880,100);
delay(100);
tone(9,1046.50,100);
delay(100);
tone(9,1174.66,100);

delay(200);
tone(9,1174.66,100);
delay(200);
tone(9,1174.66,100);
delay(100);
tone(9,1318.51,100);
delay(100);
tone(9,1396.91,100);
delay(200);
tone(9,1396.91,100);
delay(200);
tone(9,1396.91,100);
delay(100);
tone(9,1567.98,100);
delay(100);
tone(9,1318.51,100);
delay(200);
tone(9,1318.51,100);
delay(200);
tone(9,1174.66,100);
delay(100);
tone(9,1046.50,100);
delay(100);
tone(9,1046.50,100);
delay(100);
tone(9,1174.66,100);
delay(300);
tone(9,880,100);
delay(100);
tone(9,1046.50,100);
delay(100);
tone(9,1174.66,100);
delay(200);

tone(9,1174.66,100);
delay(200);
tone(9,1174.66,100);
delay(100);
tone(9,1318.51,100);
delay(100);
tone(9,1396.91,100);
delay(200);
tone(9,1396.91,100);
delay(200);
tone(9,1396.91,100);
delay(100);
tone(9,1567.98,100);
delay(100);
tone(9,1318.51,100);
delay(200);
tone(9,1318.51,100);
delay(200);
tone(9,1174.66,100);
delay(100);
tone(9,1046.50,100);
delay(100);
tone(9,1174.66,100);
delay(400);
tone(9,880,100);
delay(100);
tone(9,1046.50,100);
delay(100);
tone(9,1174.66,100);
delay(200);
tone(9,1174.66,100);
delay(200);
tone(9,1174.66,100);

delay(100);
tone(9,1396.91,100);
delay(100);
tone(9,1567.98,100);
delay(200);
tone(9,1567.98,100);
delay(200);
tone(9,1567.98,100);
delay(100);
tone(9,1760,100);
delay(100);
tone(9,1864.66,100);
delay(200);
tone(9,1864.66,100);
delay(200);
tone(9,1760,100);
delay(100);
tone(9,1567.98,100);
delay(100);
tone(9,1760,100);
delay(100);
tone(9,1174.66,100);
delay(300);
tone(9,1174.66,100);
delay(100);
tone(9,1318.51,100);
delay(100);
tone(9,1396.91,100);
delay(200);
tone(9,1396.91,100);
delay(200);
tone(9,1567.98,100);
delay(200);

tone(9,1760,100);
delay(100);
tone(9,1174.66,100);
delay(300);
tone(9,1174.66,100);
delay(100);
tone(9,1396.91,100);
delay(100);
tone(9,1318.51,100);
delay(200);
tone(9,1318.51,100);
delay(200);
tone(9,1174.66,100);
delay(100);
tone(9,1108.73,100);
delay(100);
tone(9,1174.66,100);
delay(200);
tone(9,1174.66,100);
delay(200);
tone(9,1318.51,100);
delay(200);
tone(9,1396.91,100);
delay(200);
tone(9,1396.91,100);
delay(100);
tone(9,1396.91,100);
delay(100);
tone(9,1567.98,100);
delay(200);
tone(9,1760,300);
delay(400);
tone(9,1396.91,100);

delay(100);
tone(9,1174.66,100);
delay(100);
tone(9,880,300);
delay(600);
tone(9,1864.66,300);
delay(400);
tone(9,1396.91,100);
delay(100);
tone(9,1174.66,100);
delay(100);
tone(9,932.33,300);
delay(600);
tone(9,587.33,100);
delay(100);
tone(9,440,100);
delay(200);
tone(9,587.33,100);
delay(300);
tone(9,554.36,100);
delay(400);
tone(9,1567.98,100);
delay(100);
tone(9,1567.98,100);
delay(100);

MARIO BROSS

void setup() {
}
// funcion = tone(pin, frequency, duration)
void loop() {

// CANCION DE MARIO BROSS


//NOTA 01
noTone(9);

tone(9, 660, 100);


delay(75);

//NOTA 02
noTone(9);

tone(9, 660, 100);


delay(75);
//NOTA 03
noTone(9);

tone(9, 660, 100);


delay(150);

//NOTA 04
noTone(9);

tone(9, 660, 100);


delay(150);
//NOTA 05
noTone(9);

tone(9, 660, 100);


delay(50);

//NOTA 06
noTone(9);

tone(9, 770, 100);


delay(150);
//NOTA 07
noTone(9);

tone(9, 380, 100);


delay(275);

//NOTA 08
noTone(9);

tone(9, 510, 100);


delay(287);
//NOTA 09
noTone(9);

tone(9, 380, 100);


delay(225);

//NOTA 10
noTone(9);

tone(9, 320, 100);


delay(200);
//NOTA 11
noTone(9);

tone(9, 440, 100);


delay(250);

//NOTA 12
noTone(9);

tone(9, 480, 80);


delay(150);
//NOTA 13
noTone(9);

tone(9, 450, 100);


delay(165);
//NOTA 14
noTone(9);

tone(9, 430, 100);


delay(75);

//NOTA 15
noTone(9);

tone(9, 380, 100);


delay(150);
//NOTA 16
noTone(9);

tone(9, 660, 80);


delay(100);

//
//NOTA 17
noTone(9);

tone(9, 760, 50);


delay(100);

//
//NOTA 18
noTone(9);

tone(9, 860, 100);


delay(75);

//NOTA 19
noTone(9);

tone(9, 700, 80);


delay(150);
//NOTA 20
noTone(9);

tone(9, 760, 50);


delay(75);
//NOTA 21
noTone(9);

tone(9, 660, 80);


delay(175);

//NOTA 22
noTone(9);

tone(9, 520, 80);


delay(150);
//NOTA 23
noTone(9);

tone(9, 580, 80);


delay(75);

//NOTA 24
noTone(9);

tone(9, 480, 80);


delay(75);
//NOTA 25
noTone(9);

tone(9, 510, 100);


delay(175);

//NOTA 26
noTone(9);

tone(9, 380, 100);


delay(275);
//NOTA 27
noTone(9);

tone(9, 320, 100);


delay(200);
//NOTA 28
noTone(9);

tone(9, 440, 100);


delay(250);

//NOTA 29
noTone(9);

tone(9, 480, 80);


delay(150);
//NOTA 30
noTone(9);

tone(9, 450, 100);


delay(165);

//NOTA 31
noTone(9);

tone(9, 430, 100);


delay(75);
//NOTA 32
noTone(9);

tone(9, 380, 100);


delay(150);

//NOTA 33
noTone(9);

tone(9, 660, 80);


delay(100);
//NOTA 34
noTone(9);

tone(9, 760, 50);


delay(100);
noTone(9);

tone(9,860,100);
delay(75);
noTone(9);

tone(9,700,80);
delay(150);
tone(9,760,50);
delay(75);

noTone(9);
tone(9,660,80);
delay(175);
noTone(9);
tone(9,520,80);
delay(150);
noTone(9);
tone(9,580,80);
delay(75);

noTone(9);
tone(9,480,80);
delay(75);

noTone(9);
tone(9,500,100);
delay(250);
noTone(9);

tone(9,760,100);
delay(150);
noTone(9);

tone(9,720,100);
delay(50);

noTone(9);
tone(9,680,100);
delay(75);

noTone(9);
tone(9,620,150);
delay(75);

noTone(9);
tone(9,650,150);
delay(150);
noTone(9);

tone(9,380,100);
delay(150);
noTone(9);

tone(9,430,100);
delay(75);

noTone(9);
tone(9,500,100);
delay(75);

noTone(9);
tone(9,430,100);
delay(150);
noTone(9);

tone(9,500,100);
delay(75);

noTone(9);
delay(50);tone(9,570,100);
delay(110);tone(9,500,100);
delay(150);tone(9,760,100);
delay(50);tone(9,720,100);
delay(75);tone(9,680,100);
delay(75);tone(9,620,150);

delay(150);tone(9,650,200);
delay(150);tone(9,1020,80);
delay(150);tone(9,1020,80);
delay(75);tone(9,1020,80);

delay(150);tone(9,380,100);
delay(150);tone(9,500,100);
delay(150);tone(9,760,100);
delay(50);tone(9,720,100);
delay(75);tone(9,680,100);
delay(75);tone(9,620,150);

delay(150);tone(9,650,150);
delay(150);tone(9,380,100);
delay(75);tone(9,430,100);
delay(75);tone(9,500,100);

delay(150);tone(9,430,100);
delay(75);tone(9,500,100);
delay(50);tone(9,570,100);
delay(110);tone(9,500,100);
delay(150);tone(9,760,100);
delay(50);tone(9,720,100);
delay(75);tone(9,680,100);
delay(75);tone(9,620,150);

delay(150);tone(9,650,200);
delay(150);tone(9,1020,80);
delay(150);tone(9,1020,80);

delay(75);tone(9,1020,80);
delay(150);tone(9,380,100);
delay(150);tone(9,500,100);
delay(150);tone(9,760,100);
delay(50);tone(9,720,100);
delay(75);tone(9,680,100);
delay(75);tone(9,620,150);
delay(150);tone(9,650,150);
delay(150);tone(9,380,100);
delay(75);tone(9,430,100);
delay(75);tone(9,500,100);
delay(150);tone(9,430,100);
delay(75);tone(9,500,100);
delay(50);tone(9,570,100);

delay(210);tone(9,585,100);
delay(275);tone(9,550,100);
delay(210);tone(9,500,100);
delay(180);tone(9,380,100);

delay(150);tone(9,500,100);
delay(150);tone(9,500,100);
delay(75);tone(9,500,100);
delay(150);tone(9,500,60);
delay(75);tone(9,500,80);

delay(150);tone(9,500,60);
delay(175);tone(9,500,80);
delay(75);tone(9,580,80);

delay(175);tone(9,660,80);
delay(75);tone(9,500,80);

delay(150);tone(9,430,80);
delay(75);tone(9,380,80);

delay(300);tone(9,500,60);
delay(75);tone(9,500,80);

delay(150);tone(9,500,60);
delay(175);tone(9,500,80);
delay(75);tone(9,580,80);

delay(75);tone(9,660,80);
delay(225);tone(9,870,80);

delay(162);tone(9,760,80);
delay(300);tone(9,500,60);
delay(75);tone(9,500,80);

delay(150);tone(9,500,60);
delay(175);tone(9,500,80);
delay(75);tone(9,580,80);

delay(175);tone(9,660,80);
delay(75);tone(9,500,80);

delay(150);tone(9,430,80);
delay(75);tone(9,380,80);

delay(300);tone(9,660,100);
delay(75);tone(9,660,100);

delay(150);tone(9,660,100);
delay(150);tone(9,510,100);
delay(50);tone(9,660,100);

delay(150);tone(9,770,100);
delay(225);tone(9,380,100);
delay(1000);
tone(9,440,200);
delay(200);
delay(200);

tone(9,440,400);
delay(200);
delay(200);
delay(5000);
}

Utilizacin mando infrarrojos

Es necesario utilizar una nueva librera NECIRrcv, debe ser incluida en el apartado de
Librerias del IDE.
Material:
- Arduino,

- Sensor de infrarrojos + mando compatible


- Resistencia 220 .

Cdigo
#include <Arduino.h>

#include <NECIRrcv.h>
#define IRPIN 8

static int aux = 1;

// pin al que conectamos el receptor de IR

NECIRrcv ir(IRPIN) ;
void setup()
{

Serial.begin(9600) ;

Serial.println("NEC IR codigo recepcion") ;


}

ir.begin() ;

void loop()
{

unsigned long ircode ;


while (ir.available()) {
ircode = ir.read() ;

Serial.println(ircode) ;

Encendido/apagado de un LED

Para el mando que hemos utilizado (el que se muestra en la primera foto), la lectura del
ON/OFF se corresponde con el valor de 3125149440.
Cdigo
#include <Arduino.h>

#include <NECIRrcv.h>
#define IRPIN 8
int led = 7;

// pin that IR detector is connected to

static int aux = 1;

NECIRrcv ir(IRPIN) ;
void setup()
{

pinMode(led, OUTPUT);
ir.begin() ;
}

void loop()
{

unsigned long ircode ;


while (ir.available()) {
ircode = ir.read() ;

if(ircode == 3125149440){
if(aux == 0){

digitalWrite(led, LOW);

aux = 1;

else{

digitalWrite(led, HIGH);

}
}

aux = 0;

Control LED RGB


Tras haber ledo los cdigos de los botones de nuestro mando (Utilizacin mando infrarrojos),
El sensor de infrarrojos debe controlar un LED RGB .

Material:

- Led RGB
- Sensor de infrarrojos + mando compatible
- 4 resistencias 220 (una para cada color del led RGB y otra para el sensor de infrarrojos)
- Protoboard
- Cables

Cdigo:

#include <WProgram.h>
#include <NECIRrcv.h> //Libreria del protocolo NEC
#define IRPIN 8 // Pin del receptor IR
NECIRrcv ir(IRPIN);

int rojo = 13; //Pin del color rojo del led RGB
int verde = 12; //Pin del color verde del led RGB
int azul = 11; //Pin del color azul del led RGB

//power = 4228087680; //Codigo correspondiente al boton POWER del mando a distancia


//butrojo = 4161240960; //Codigo correspondiente al boton 1 del mando a distancia
//butverde = 4194664320; //Codigo correspondiente al boton 2 del mando a distancia
//butazul = 4177952640; //Codigo correspondiente al boton 3 del mando a distancia

void setup()
{
//Serial.begin(9600); //Iniciamos comunicacion serie
ir.begin(); //Iniciamos la recepcion IR

pinMode(rojo, OUTPUT);
pinMode(verde,OUTPUT);
pinMode(azul, OUTPUT);
}

void loop()
{
unsigned long ircode; //Variable que contendra el codigo decimal del boton pulsado
while (ir.available())
{
ircode = ir.read(); //Leemos el codigo del boton pulsado
if (ircode == power) //Si el boton de power... apagamos el led

{
digitalWrite(rojo, LOW);
digitalWrite(verde, LOW);
digitalWrite(azul, LOW);
}
else if (ircode == butrojo) digitalWrite(rojo,HIGH); //Si boton 1, encendemos color rojo
else if (ircode == butverde) digitalWrite(verde,HIGH); //Si boton 2, encendemos color verde
else if (ircode == butazul) digitalWrite(azul,HIGH); //Si boton 3, encendemos color azul
}
}

Rel aplicado a la domtica


Material
- Arduino
- Un rel
- Cables
- Una lmpara con interruptor
- un sensor IR

- Un mando de control remoto universal


- una resistencia de 220 ohmios

Para ello previamente habremos preparado la lampara para su conexin como muestra la
siguiente imagen:

Desmontar previamente el interruptor de una


lamparita de mesa. Dentro del interruptor

encontraremos un cable continuo y el otro cortado


el cual usaremos para hacer la conexin.

#include <Arduino.h>
#include <NECIRrcv.h> // Descargar la librera de los tutoriales del control IR
#define IRPIN 13

// pin donde est conectado el IR

int light = 8; // Definimos como luz, dnde antes estaba nuestro LED.
static int aux = 1;
NECIRrcv ir(IRPIN) ;

void setup()
{
pinMode(light, OUTPUT);
ir.begin() ;
}
void loop()
{
unsigned long ircode ;
while (ir.available()) {
ircode = ir.read() ;
// Establecemos qu tiene que pasar cuando el cdigo emitido coincida con el del ON.
if(ircode == 3125149440){
if(aux == 0){
digitalWrite(light, LOW);
aux = 1;
}
else{
digitalWrite(light, HIGH);

aux = 0;
}
}
}
}

Texto via Bluetooth del telefono movil a un LCD


Para comenzar describir a continuacin lo que necesitamos para el desarrollo:
1. Modulo Bluetooth HC-06
2. Arduino
3. Telefono inteligente con sistema operativo Android
4. Un LCD 2X16
5. Cables de conexin

Para controlar el LCD 2X16, he realizado la conexion de los pines de la siguiente manera ,para
el caso de un Arduino Uno R3 y un Arduino , usamos los pines 2 al 7 y VCC y GND de la
tarjeta Arduino:

Para el caso del modulo bluetooth, este se conecta de la siguiente manera, con los pines 0 y 1
del Arduino conectados al TX y RX del modulo Bluetooth y el modulo alimentado por VCC
(5V) y GND del Arduino.:

Cdigo APP INVENTOR

#include <LiquidCrystal.h>

LiquidCrystal lcd(7,6, 5, 4, 3, 2);


int ledPin = 13; //Asignamos la palabra ledPin como una variable tipo entera
String readString; //Asignamos la palabra readString a una variable tipo cadena

void setup() {
Serial.begin(9600); //inicializamos la comunicacion serial
pinMode(ledPin, OUTPUT); //Se determina que el pin 13 va a ser usado como salida
lcd.begin(16, 2);
lcd.clear();
lcd.noAutoscroll();

lcd.print("Esperando SMS");
delay( 200 );
}

void loop() {
while (Serial.available()) { //Se verifica la disponibilidad del puero serial
delay(3);

// a traves de un loop

char c = Serial.read(); // Se leen los caracteres que ingresan por el puerto


readString += c;

//se acumulan cada uno de los caracteres en readString

}
if (readString.length() >0) { //Se verifica que la variable contenga informacion
lcd.clear();
Serial.println(readString); //se envia lo que tenga la variable
lcd.print(readString);
if (readString == "On")

//se compara si la palabra que llega es "on"

{
digitalWrite(ledPin, HIGH); //Si es "on" se enciende el led del pin 13
}
if (readString == "Off") // Se compara si la palabra que llega es "off"
{
digitalWrite(ledPin, LOW); //si es "off" se apaga el led del pin 13
}
readString=""; // Se limpia la variable
}
}

Controlar Motor DC desde un telfono movil


Este circuito nos permite controlar la corriente que pasa a travs del motor aplicando la
seal PWM que llega del Arduino y a medida que varia el ancho del pulso del Pin 9 de la

tarjeta Arduino, la corriente de la base del transistor varia, por lo cual la corriente que va desde
el emisor hacia el colector esta directamente controlada por el PWM y esto hace que

la velocidad del motor aumente o disminuya segn la corriente que pasa del emisor al colector
del transistor, ademas que protegemos en cierta medida la tarjeta Arduino. Este circuito por lo
general es usado para controlar motores, relays, lamparas pequeas , entre otros y el diodo
IN4007 protege el transistor de la contracorriente.

Material

1. Motor DC pequeo que funciones entre 5v y 9v


2. Un modulo Bluetooth HC-05 o HC-06
3. Un transistor BC549
4. Resistencia de 100 ohms
5. Diodo IN4007
6. Arduino
7. Telfono mvil con Sistema Operativo Android
8. Adaptador para la tarjeta Arduino

const int analogOutPin = 9; // Analog output pin to PWM control

int outputValue = 0;

// value output to the PWM (analog out)

String readString;
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
}
void loop() {
while (Serial.available()) { //Se verifica la disponibilidad del puero serial
delay(3);

// a traves de un loop

char c = Serial.read(); // Se leen los caracteres que ingresan por el puerto


readString += c;

//se acumulan cada uno de los caracteres en readString

outputValue = map(readString.toInt(), 0, 1023, 0, 255);


}
if (readString.length() >0) { //Se verifica que la variable contenga informacion
Serial.println(readString.toInt()); //se envia lo que tenga la variable
analogWrite(analogOutPin,outputValue );
readString=""; // Se limpia la variable
}
// wait 2 milliseconds before the next loop
// for the analog-to-digital converter to settle
// after the last reading:
delay(2);
}

Sensor de Parking
Con esta prctica vamos a desarrollar un sistema de ayuda al estacionamiento, donde mediante
un sensor de distancia por ultrasonidos vamos a emitir un pitido con mayor frecuencia conforme
nos acercamos al objeto.

En el datasheet del sensor podemos ver que la distancia medida es proporcional a la amplitud
del eco de la seal enviada, y para calcular dicha distancia, nos remitimos a la formula
Distancia = Velocidad x Tiempo.

Material

1 Tarjeta ARDUINO UNO


1 Cable USB para Arduino
1 Placa Protoboard
1 Buzzer o altavoz
1 Sensor de ultrasonidos HC-SR04
4 - Conectores macho-hembra
Cables para conexiones

Cdigo
int speakerPin = 8;
long distancia;
long tiempo;
int j;
void setup(){
Serial.begin(9600);
pinMode(6, OUTPUT); /*activacin del pin 9 como salida: para el pulso ultrasnico*/
pinMode(7, INPUT); /*activacin del pin 8 como entrada: tiempo del rebote del ultrasonido*/
}

void loop(){
digitalWrite(6,LOW); /* Por cuestin de estabilizacin del sensor*/
delayMicroseconds(5);
digitalWrite(6, HIGH); /* envo del pulso ultrasnico*/
delayMicroseconds(10);

tiempo=pulseIn(7, HIGH); /* Funcin para medir la longitud del pulso entrante. Mide el
tiempo que transcurrido entre el envo

del pulso ultrasnico y cuando el sensor recibe el

rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que

deja de

hacerlo, LOW, la longitud del pulso entrante*/


distancia= int(0.017*tiempo); /*frmula para calcular la distancia obteniendo un valor entero*/
/*Monitorizacin en centmetros por el monitor serial*/
Serial.println("Distancia ");
Serial.println(distancia);
Serial.println(" cm");
//delay(1000);
if(distancia<=40)
{
if(distancia >=0 && distancia<=3)
j = 1;
if(distancia >3 && distancia<=8)
j = 50;
if(distancia >8 && distancia<=20)
j = 300;
if(distancia >20 && distancia<=30)
j = 600;
if(distancia >30 && distancia<=40)
j = 900;
if(distancia >40)
j = 1200;
tone(speakerPin,349);
delay(j);
noTone(speakerPin);

delay(100);
}
else
{
noTone(speakerPin);
}
}

Emisor/Receptor Wireless nRF24L01+ Arduino


Conectar 2 Arduinos mediante en un emisor/receptor Wireless nRF24L01+. Utilizando la librera
MirfSpiDriver o simplemente Mirf.

Una vez tengamos conectados los 2 mdulos a cada uno de los Arduinos que queremos conectar
podemos probar con este ejemplo de un chat muy sencillo. Descargamos la librera Mirf de la
web

de

Arduino.cc Descargar

Mirf.zip (URL

descomprimimos en el directorio del IDE -> libraries.

// Emisor/Receptor Wireless nRF24L01+

#include <SPI.h>

#include <Mirf.h>
#include <nRF24L01.h>

#include <MirfHardwareSpiDriver.h>
char *cadena;

alternativa Descargar

Mirf.zip)

la

String inputstring = "";

//cadena recibida desde el PC

boolean input_stringcomplete = false; //cadena recibida completamente desde el PC


void setup()
{

Mirf.spi = &MirfHardwareSpi;
// inicio de la emision

Mirf.init();

// Se envia un byte cada vez


Mirf.payload = 1;

// seleccionamos el canal
Mirf.channel = 90;
Mirf.config();

// 1MHz

Mirf.configRegister(RF_SETUP,0x06);
// Seleccionamos direccin
Mirf.setTADDR((byte *)"TX_01");
Serial.begin(57600);
}

Serial.println("Iniciando ...");

// enviar cadena
void transmit(const char *string)
{

byte c;

for( int i=0 ; string[i]!=0x00 ; i++ )


{
c = string[i];

Mirf.send(&c);
}
}

while( Mirf.isSending() ) ;

// enviar una secuancia CR/LF


void transmitlf(void)
{

byte c;
c = '\r';

Mirf.send(&c);
while( Mirf.isSending() ) ;

c = '\n';

Mirf.send(&c);

while( Mirf.isSending() ) ;

}
//Evento de recepcion de caracteres desde el PC
void serialEvent() {

char inchar = (char)Serial.read();

// Aadimos el caracter recibido a la cadena

inputstring += inchar;

// Fin de la cadena, recibido <CR>


}

if(inchar == '\r') {input_stringcomplete = true;}

void loop()
{

// Si se escribe algo por el puerto Serie lo envia.


if (input_stringcomplete) {

inputstring.toCharArray(cadena, 10);
transmit(cadena);
transmitlf();

Serial.print("Yo-> ");
Serial.println(inputstring);

input_stringcomplete = false;
}

inputstring = "";

// Esperando recepcin
byte c;

if( Mirf.dataReady() )

Mirf.getData(&c);

Serial.print("El otro-> ");

}
}

Serial.write(c);

También podría gustarte