viernes, 10 de junio de 2011

Introducción a Arduino

Arduino puede ser utilizado para desarrollar objetos autónomos e interactivos, como prototipos o interactuar con software instalado en el ordenador. Dada su rápida curva de aprendizaje y su precio económico es ideal para educadores, diseñadores y cualquiera interesado en la electrónica y robótica. El compilador necesario para programarlo está disponible de forma gratuita en www.arduino.cc y está disponible para Mac OS X, Windows y Linux.
Arduino UNO es la versión mejorada de su predecesor Duemilanove. Incluye función de autorreset, protección de sobrecargas, conector USB para programarlo, totalmente montado con componentes miniatura SMD (salvo el microcontrolador, para poder cambiarlo fácilmente) y nuevo bootloader OptiBoot a 155kbps. La placa se entrega completamente ensamblada y probada con un microcontrolador AVR ATmega328 con un cristal de cuarzo de 16Mhz. El microcontrolador se entrega con un bootloader que permite su programación sin necesidad de ningún tipo de programado externo. Se entrega con el nuevo chip Atmega328 de AVR con 32 KB de memoria de programa en lugar de 16 KB de la anterior versión, RAM de 2KB (antes 1KB) y EEPROM de 1 KB (antes 512 bytes). La carga de los programas también es más rápida ya que el bootloader fue actualizado a una velocidad de 115000 baudios.
Una vez que hemos adquirido nuestro Arduino UNO R3, varios tipos de resistencias, una placa con 8 relés de 10 A, varios pulsadores, varios leds de distintos colores, cablecillos para conexionar,1 conector para pila de 9 V, 1 placa board para simular las instalaciones y algunos otros componentes. procedemos a instalar el software que nos va a ayudar a programar nuestras instalaciones.
Entramos en la página  http://www.arduino.cc/es/  

Una vez instalado y abierto conectamos nuestra placa a través de su cable y lo configuramos.


PROYECTO nº 1: 

Seleccionamos en los ejemplos uno de ellos.
Comenzaremos  con algo sencillo explicando paso a paso el porqué de cada cosa.
El primer proyecto que se hace siempre con arduino es el "blink"  (parpadeo). También es conocido como el "Hola mundo". 

Básicamente consiste en un diodo led (pin 13) que se enciende y se apaga, el tiempo de encendido y apagado es de 1 seg.


Propongo que cambies el tiempo y experimentes. Otro ejercicio es traducir toda la información que aparece a continuación de las //  

 
PROYECTO nº 2:


Vamos a hacer el mismo programa anterior pero ahora utilizaremos el PIN 1 tendremos en cuenta que hay que colocar una resistencia de 220 ohmios en serie con el Led. Os muestro el esquema.





PROYECTO nº 3:

Vamos a transferir al ejercicio que está en los ejemplos FADE (dinmable)

/* Fade This example shows how to fade an LED on pin 9 using the analogWrite() function. This example code is in the public domain. */ int led = 9; // the pin that the LED is attached to int brightness = 0; // how bright the LED is int fadeAmount = 5; // how many points to fade the LED by // the setup routine runs once when you press reset: void setup() { // declare pin 9 to be an output: pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { // set the brightness of pin 9: analogWrite(led, brightness); // change the brightness for next time through the loop: brightness = brightness + fadeAmount; // reverse the direction of the fading at the ends of the fade: if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } // wait for 30 milliseconds to see the dimming effect delay(30); }

*traducimos el texto. (Solo lo que está a continuación de las //)
*transferimos
*quitamos el cable y colocamos la pila de 9 v en el conector
*modificamos el programa, cambiando los datos que hay y volvemos a transferir.

PROYECTO nº 4:

--ENCENDIDO DE 3 LEDS DE FORMA INTERMITENTE Y ALTERNATIVO--
void setup() { // inicializar los pines digitales como salidas. pinMode(11, OUTPUT); // led rojo pinMode(7, OUTPUT); // led verde pinMode(8, OUTPUT); // led blanco } void loop() { digitalWrite(11, HIGH); // led rojo encendido delay(100); // tiempo digitalWrite(11, LOW); // led rojo apagado delay(500); // tiempo digitalWrite(7, HIGH); // led verde encendido delay(200); //tiempo digitalWrite(7, LOW); // led verde apagado delay(500); // tiempo digitalWrite(8, HIGH); // led blanco encendido delay(175); // tiempo digitalWrite(8, LOW); // led blanco apagado delay(200); // tiempo digitalWrite(7, HIGH); delay(100); digitalWrite(7, LOW); delay(350); digitalWrite(8, HIGH); // delay(175); // digitalWrite(8, LOW); // }

PROYECTO nº 5:

--SIMULACIÓN DE UN SEMÁFORO--
Tenemos tres leds que se van a ir apagando y encendiendo dependiendo del tiempo que tengamos programado

PROGRAMA DE FUNCIONAMIENTO:


void setup()
{
pinMode(8,OUTPUT);//Declaramos los pines a usar y la acción que realizarán
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
}
void loop()
{

digitalWrite(10,HIGH); //Escribimos en el pin 10 "HIGH" un uno lógico para encender Led VERDE
delay(10000); //Esperamos 10 seg.
digitalWrite(10,LOW); //Escribimos en el pin 10 "BAJO" para apagar el Led VERDE
delay(500); //Esperamos medio segundo

digitalWrite(9,HIGH); //Ahora escribimos un "1" lógico en el pin 9, 
//que corresponde a nuestro Led amarillo
delay(3000); //Esperamos 3 seg.
digitalWrite(9,LOW); //Apagamos el Led amarillo
digitalWrite(9,HIGH); // Esta es la parte donde se ejecuta el parpadeo del Led, escribimos "HIGH"
delay(500); //Esperamos medio seg.
digitalWrite(9,LOW); // Apagamos el Led
delay(500); //Esperamos medio seg.
digitalWrite(9,HIGH); //Esta parte es la misma que la anterior,
delay(500); //este es el segundo parpadeo de nuestro Led
digitalWrite(9,LOW);
delay(500);
digitalWrite(9,HIGH);
delay(500);
digitalWrite(9,LOW);
delay(500);

digitalWrite(8,HIGH); //Escribimos un "1" lógico en el pin 8, que corresponde al Led ROJO
delay(10000); //Esperamos 10 seg.
digitalWrite(8,LOW); //Escribimos un "0" lógico en el pin 8, apagando el Led ROJO
}
// para practicar puedes ir cambiando los tiempos que hemos puesto entre paréntesis

MODIFICANDO EL EJERCICIO ANTERIOR PODEMOS HACER QUE FUNCIONES DOS SEMÁFOROS.
void setup() { //Declaramos los pines a usar y la acción que realizarán pinMode(2,OUTPUT); //LED ROJO pinMode(3,OUTPUT); //LED ROJO pinMode(4,OUTPUT);//LED AMARILLO pinMode(5,OUTPUT); //LED AMARILLO pinMode(6,OUTPUT); //LED VERDE pinMode(7,OUTPUT); //LED VERDE } void loop() { digitalWrite(2,HIGH); //Escribimos en el pin 10 "HIGH" un uno lógico para encender Led ROJO digitalWrite(3,HIGH); delay(10000); //Esperamos 10 seg. digitalWrite(2,LOW); //Escribimos en el pin 10 "BAJO" para apagar el Led ROJO digitalWrite(3,LOW); delay(500); //Esperamos medio segundo digitalWrite(4,HIGH); //Ahora escribimos un "1" lógico en el pin 9, digitalWrite(5,HIGH); //que corresponde a nuestro Led amarillo delay(3000); //Esperamos 3 seg. digitalWrite(4,LOW); //Apagamos el Led amarillo digitalWrite(5,LOW); delay(500); digitalWrite(4,HIGH); // Esta es la parte donde se ejecuta el parpadeo del Led, escribimos "HIGH" digitalWrite(5,HIGH); delay(500); //Esperamos medio seg. digitalWrite(4,LOW); // Apagamos el Led digitalWrite(5,LOW); delay(500); //Esperamos medio seg. digitalWrite(4,HIGH); //Esta parte es la misma que la anterior, digitalWrite(5,HIGH); delay(500); //este es el segundo parpadeo de nuestro Led digitalWrite(4,LOW); digitalWrite(5,LOW); delay(500); digitalWrite(4,HIGH); digitalWrite(5,HIGH); delay(500); digitalWrite(4,LOW); digitalWrite(5,LOW); delay(500); digitalWrite(6,HIGH); //Escribimos un "1" lógico en el pin 8 y 5, que corresponde al Led VERDE digitalWrite(7,HIGH); delay(10000); //Esperamos 10 seg. digitalWrite(6,LOW); //Escribimos un "0" lógico en el pin 8 y en el 5, apagando el Led VERDE digitalWrite(7,LOW); delay(500); }

PROYECTO nº 6:

--Conectamos un pulsador para que se encienda un LED mientras estemos pulsando--

//Declara puertos de entradas y salidas

const int buttonPin = 2; // número del pin para el botón const int ledPin = 13; // número del pin del LED int buttonState = 0; // estado del botón (0 ó LOW es apagado y 1 ó HIGH es encendido) void setup() { // Se identifica el pin 13 como salida pinMode(ledPin, OUTPUT); // Se identifica el pin 2 como entrada pinMode(buttonPin, INPUT); } void loop(){ // Leemos si el botón en pin2 está abierto o cerrado buttonState = digitalRead(buttonPin); // Si está siendo pulsado es HIGH if (buttonState == HIGH) { // Y el LED se enciende digitalWrite(ledPin, HIGH); } else { // Si no es asi, se apaga digitalWrite(ledPin, LOW); } }
Si en vez de utilizar el led que está en el pin 13, utilizamos el led conectado al pin 1, tenemos que modificar la programación y realizar el siguiente circuito:




VAMOS A REALIZAR UNA LIGERA MODIFICACIÓN AL EJERCICIO.

//Declara puertos de entradas y salidas
int pulsador=2;                                      //Pin donde se encuentra el pulsador, entrada
int led=1;                                               //Pin donde se encuentra el LED, salida
                                                              //Funcion principal
void setup()                                           // Se ejecuta cada vez que el Arduino se inicia
{
 pinMode(pulsador, INPUT);                 //Configurar el pulsador como una entrada
 pinMode(led,OUTPUT);                       //Configurar el LED como una salida
}
                                                              //Funcion ciclicla
void loop()                                             // Esta funcion se mantiene ejecutando
{                                                             //  cuando este energizado el Arduino

                                                              //Condicional para saber estado del pulsador
   if (digitalRead(pulsador)==HIGH)
   {
                                                              //Pulsador oprimido
     digitalWrite(led,HIGH);                     //Enciende el LED
     delay(300);
   }
   else if(digitalRead(pulsador)==LOW);
   digitalWrite(led,LOW);
   delay(300);
   {
                                                             //Pulsador NO oprimido
                                                             //Apaga el LED
   }
}

PROYECTO nº 7:

Desde un pulsador encendemos y apagamos un led conectado al pin 13

* Enciende y apaga un led conectado al pin digital 13
* cuando se presiona el pulsador conectado al pin 7 el Led se APAGA y al volver a soltar, el Led se enciende.
*muestra el concepto de Active-Low (activo en estado bajo)
* que consiste en conectar un botón usando una resistencia
* de pull-up (entre 1 K y 10K)
*/

 int ledPin = 13; // seleccionamos pin para el LED

 int inPin = 7;   // seleccionamos pin para el pulsador

 int val = 0;     // variable para leer estado del pulsador


void setup() {
  pinMode(ledPin, OUTPUT);  // configuramos el LED como SALIDA

  pinMode(inPin, INPUT);    // configuramos el pulsador como ENTRADA
}
void loop(){

val=digitalRead(inPin);     //leemos el estado del pulsador
if (val== HIGH) {             //verificamos si el valor es alto
                                          //corresponde al botón sin pulsar

digitalWrite(ledPin, LOW); //apagamos el Led
} else
}
digitalWrite(ledPin, HIGH); //encendemos el Led

}
}


PROYECTO nº 8:     TELERRUPTOR


int Pin_pulsador = 2;                // Numero del pin en el que se conecta el pulsador al Arduino
int Pin_led = 9;                        // Numero del pin en el que se conecta la salida al arduino
boolean Telerruptor = false;    // Declaramos la variable del telerruptor y la ponemos en fase al                                                               //   arranque del arduino


void setup()
{
pinMode(Pin_pulsador,INPUT);    // Declaramos la variable Pin_pulsador como entrada del arduino
pinMode(Pin_led,OUTPUT);        // Declaramos la variable Pin_led como salida del arduino
}

void loop()
{
if (digitalRead(Pin_pulsador) == HIGH)      // comprobamos si se acciona el pulsador
     {
Telerruptor=!Telerruptor;                // Invertimos la salida del telerruptor desde la última pulsación
digitalWrite(Pin_led,Telerruptor);   // Escribimos en la salida
delay(300);                                       //Realizamos una pausa para evitar los rebotes de la pulsación
     }
}

PROYECTO nº 9:
CONEXIÓN DE UN LED RGB



// Conectamos el LED de la siguiente forma:  
// GND    -> GND     Esta el la patilla mas larga que tiene el led
// RED    -> 13      Rojo.
// BLUE   -> 12      Azul.
// GREEN  -> 11      Verde.
// En cada una de las 3 patillas conectaremos una resistencia de  ENTRE 150 y 200 ohmios

#define LEDR 13
#define LEDA 11
#define LEDV 12
int i = 0;

void setup()
{
  pinMode(LEDV,OUTPUT);
  pinMode(LEDA,OUTPUT);
  pinMode(LEDR,OUTPUT);
}

void loop()
{
  analogWrite(LEDR,255);
  analogWrite(LEDA,255);
  analogWrite(LEDV,255);
  analogWrite(LEDR,0);
  delay(1000);  
  analogWrite(LEDV,120);
  delay(1000);  
  analogWrite(LEDR,100);
  analogWrite(LEDV,120);
  delay(1000);  
  analogWrite(LEDR,215);
  analogWrite(LEDV,34);
  delay(300);  
  analogWrite(LEDA,0);
  delay(10000);  
  analogWrite(LEDV,255);
  analogWrite(LEDA,55);
  delay(10000);  
  analogWrite(LEDR,22);
  analogWrite(LEDV,222);
  delay(10000);  
  analogWrite(LEDV,0);
  delay(10000);    
       analogWrite(LEDR,200);
      analogWrite(LEDA,200);
      analogWrite(LEDV,100);

  for(i=255;i>0;i--)
  {
    analogWrite(LEDR,i);
    delay(50);
  }
 for(i=255;i>0;i--)
  {
    analogWrite(LEDV,i);
    delay(50);
  }
 for(i=0;i<255;i++)
  {
    analogWrite(LEDR,i);
    delay(50);
  }
 for(i=255;i>0;i--)
  {
    analogWrite(LEDA,i);
    delay(50);
  }
 for(i=0;i<255;i++)
  {
    analogWrite(LEDV,i);
    delay(50);
  }
 for(i=255;i>0;i--)
  {
    analogWrite(LEDR,i);
    delay(50);
  }
  analogWrite(LEDV,0);
  analogWrite(LEDA,0);
  analogWrite(LEDR,0);
}
//podemos ir modificando los números de los colores y ver el resultado

PROYECTO nº 10:
*/Ahora usamos dos pulsadores para iluminar más o atenuar la luz del led, para ello debemos utilizar
el Led pin 9, que usa la salida PWM, modulación por ancho de pulso, como si de una salida analógica se tratara.
/*
int ledPin = 9; 
int inputPin1 = 2; // pulsador 1 
int inputPin2 = 3; // pulsador 2 
int p1; 
int p2; 
int value = 0;   
void setup() { 
pinMode(ledPin, OUTPUT); 
pinMode(inputPin1, INPUT); 
pinMode(inputPin2, INPUT); } 
void loop(){   
p1=digitalRead(inputPin1); 
p2=digitalRead(inputPin2); 
if (p1 == HIGH) 
{ value--; } 
else if (p2 == HIGH) 
{value++; } 
value = constrain(value, 0, 255); 
analogWrite(ledPin, value); 
delay(10); 
}

PROYECTO nº 11:
/*
   CONTADOR DE PULSOS
  
  Programa que muestra por la pantalla (consola serial) los pulsos que hemos dado al pulsador, según el número de pulsaciones programadas se enciende 
   un LED.
  */

int conta = 0;  //Variable para guardar el número de pulsos

void setup() // Se ejecuta cada vez que el Arduino se inicia
{
  Serial.begin(9600);             //Inicia comunicación serial
  pinMode(2,INPUT);               //Configura el pin 2 como una entrada, Pulsador
  pinMode(1,OUTPUT);              //Configura el pin 13 como una salida, LED
}

//Funcion cíclicla
void loop()                      // Esta función se mantiene ejecutando
{                                 //  cuando esté el Arduino bajo tensión

   if ( digitalRead(2) == HIGH ) // Si el pulsador esta accionado
  {
                                 
      if ( digitalRead(2) == LOW )// Si el pulsador no esta oprimido, flanco de bajada
      {
         conta++;                 //Incrementa el contador
         Serial.println(conta);   //Imprime el valor por consola
         delay (200);             // Retardo
      }
  }
   if (conta==3)                  // Si el valor del contador es 3
  {
    digitalWrite(3,HIGH);         //Enciende el LED
  }
     if (conta==5)                 // Si el valor del contador es 5
  {
    digitalWrite(3,LOW);          // Apaga el LED
  }

 }


PROYECTO nº 12:
Realizado por Santiago Julián 


Inversión de sentido de giro de un motor con dos pulsadores de marcha y uno de paro



/*INVERSIÓN DEL SENTIDO DE GIRO MEDIANTE PULSADORES DE MARCHA Y PARO*/
/*ESTE CÓDIGO PERMITE EL AUTOMATISMO DE LA INVERSIÓN DEL SENTIDO 
DE GIRO DE UN MOTOR TRIFÁSICO MEDIANTE PULSADORES DE MARCHA Y PARO
CON ENCLAVAMIENTO  DE LOS CONTACTORES DE GIRO IZQUIERDA Y DERECHA
EL SENTIDO DE GIRO SE SIMULARÁ MEDIANTE DOS LED. EN EL CABLEADO
DEFINITIVO, LAS SALIDAS SE CONECTARÍAN A RELÉS Y DE ESTOS A LOS RESPECTIVOS CONTACTORES*/
int Derecha=10; //Conectaremos el led rojo en el pin 10
int Izquierda=11; //Conectaremos el led rojo en el pin 11
int Pulsador_D=7; //Conectaremos el pulsador de marcha derecha en el pin 7                                                          
int Pulsador_P=3; //Conectaremos el pulsador de paro en el pin 3
int Pulsador_I=4; //Conectaremos el pulsador de marcha izquierda en el pin 4
int Estado_Pulsador_D; //variable que leerá el estado del pulsador de marcha derecha
int Estado_Pulsador_I; //variable que leerá el estado del pulsador de marcha izquierda
int Estado_Pulsador_P; //variable que leerá el estado del pulsador de paro
int Estado_Derecha_D; //variable que leerá el estado de la salida del pin 10
int Estado_Izquierda_I; //variable que leerá el estado de la salida del pin 11
void setup()
{
Serial.begin(9600); //Determinamos que utilizaremos la comunicación serie a 9600 bps
  
  pinMode(Derecha, OUTPUT); //Se declara el pin 10  como salida
  pinMode(Izquierda, OUTPUT); //Se declara el pin 11  como salida
  pinMode(Pulsador_D, INPUT); // Declara el pin 7 como entrada
  pinMode(Pulsador_I, INPUT); // Declara el pin 4 como entrada
  pinMode(Pulsador_P, INPUT); // Declara el pin 3 como entrada
}
void loop()
{
 Estado_Pulsador_D=digitalRead(Pulsador_D); //Lee el valor del pin 7. 
                             //  sera valor alto  "1", si esta pulsado 
                             // valor bajo "0", si esta en reposo
Estado_Pulsador_I=digitalRead(Pulsador_I); //Lee el valor del pin 4. 
                             //  sera valor alto  "1", si esta pulsado 
                             // valor bajo "0", si esta en reposo
Estado_Pulsador_P=digitalRead(Pulsador_P); //Lee el valor del pin 3.
                             //  sera valor alto  "1", si esta en pulsado 
                             // valor bajo "0", si esta en reposo 
Estado_Derecha_D=digitalRead(Derecha); //Lee el valor de la salida del pin 10.
Estado_Izquierda_I=digitalRead(Izquierda);//Lee el valor de la salida del pin 11.

 if (Estado_Pulsador_D==1 && Estado_Izquierda_I==0) // If, equivale a Si como condicional. En este caso
 //Si el estado del pulsador marcha derecha es 1 y la salida del pin 11 es 0,
 // ejecuta la siguiente instrucción
 {
   digitalWrite(Derecha,1); //Poner en nivel alto en el pin 10
   Serial.print("MARCHA DERECHA,"); // Este es el texto que que aparecerá en la impresión
   Serial.println(Estado_Derecha_D); // imprime el valor del led verde
   delay(100);//espera 100 milisegundos
 }
 if (Estado_Pulsador_P==1)//Si el estado del pulsador paro es 1, 
 //ejecuta la siguiente instrucción
 {
   digitalWrite(Derecha,0);//Poner en nivel bajo en el pin 10
   Serial.print("PARO,"); // Este es el texto que que aparecerá en la impresión
   Serial.println(Estado_Pulsador_P); // imprime el valor del pulsador de paro
   delay(100);//espera 100 milisegundos
 }

if (Estado_Pulsador_I==1 && Estado_Derecha_D==0)// If, equivale a Si como condicional. En este caso
//Si el estado del pulsador marcha izquierda es 1 y la salida del pin 10 es 0,
 // ejecuta la siguiente instrucción
 {
   digitalWrite(Izquierda,1); //Poner en nivel alto en el pin 10
   Serial.print("MARCHA IZQUIERDA,"); // Este es el texto que aparecerá en la impresión
   Serial.println(Estado_Izquierda_I); // imprime el valor del led rojo
   delay(100);//espera 100 milisegundos
 }
 if (Estado_Pulsador_P==1)//Si el estado del pulsador paro es 1, 
 //ejecuta la siguiente instrucción

 {
   digitalWrite(Izquierda,0);//Poner en nivel bajo en el pin 10
   Serial.print("PARO,"); // Este es el texto que que aparecerá en la impresión
   Serial.println(Estado_Pulsador_P); // imprime el valor del pulsador de paro
   delay(100);//espera 100 milisegundos
 }
}


PROYECTO nº 13:

Comenzamos con un nuevo proyecto que consiste en realizar la instalación de un motor dahlander con dos velocidades, una de 750 y otra de 1500 r.p.m.

Cada una de estas velocidades se va a controlar desde un interruptor rotativo a través de contactores y también vamos a tener la posibilidad de ponerlas en funcionamiento y pararlas mediante un teléfono móvil.

Material necesario:
1 interruptor diferencial IV polos
1 interruptor magnetotérmico III
1 interruptor magnetotérmico II
2 relés térmicos
3 contactores
1 arduino MEGA
1 módulo Ethernet shield
1 placa de 2 relés de 5 v
1 router o red wifi
1 teléfono móvil
1 bornero
1 motor III de conexión dahlander


Programa:

Esquema:

Imágenes:





PROYECTO nº 14:
Comenzamos con un nuevo proyecto que consiste en encender una lámpara mediante un sensor.

Al dar una palmada, se enciende la lámpara y al dar dos palmadas, la lámpara se apaga.

Material necesario:
1 Arduino UNO R3
1 un relé de 5 V cc
1 un portalámparas
1 lámpara de 60 W
1 sensor de sonido

Programa:

int led = 13;
int detector;
void setup()

{
 pinMode(led, OUTPUT);
 Serial.begin(9600);
}

void loop()

{
  int sensorValue = analogRead(A0);
  if (sensorValue < 1000  )
      {
   detector = detector +1;
   delay (150);
        }
 
   if (detector == 1  )
    {     // una palmada(1) (enciende led)

   digitalWrite(led, HIGH);

    }

  if (detector == 3  )
   {     // dos palmadas(2+1) (apaga led)

   digitalWrite(led, LOW);
  delay(100);
   detector = 0;
 
  }

   Serial.println(sensorValue);
  Serial.println(detector);
  
}


PROYECTO nº 15:
/*
   SENSOR DE COLOR
  
  Programa que muestra por la pantalla (consola serial) el color que está en ese momento delante del sensor, a la vez que se enciende un Led indicando el color. 
  Para poder establecer los valores del color, colocamos el objeto delante del sensor y según los datos que marque la pantalla serial, así establecemos la configuración.
  */


const int s0 = 8;  
const int s1 = 9;  
const int s2 = 12;  
const int s3 = 11;  
const int out = 10;   
                 // LED pins conectados a Arduino
int Ledrojo = 2;  
int Ledverde = 3;  
int Ledazul = 4;
                // Variables  
int rojo = 0;  
int verde = 0;  
int azul = 0;  
    
void setup()   
{  
  Serial.begin(9600); 
  pinMode(s0, OUTPUT);  
  pinMode(s1, OUTPUT);  
  pinMode(s2, OUTPUT);  
  pinMode(s3, OUTPUT);  
  pinMode(out, INPUT);  
  pinMode(Ledrojo, OUTPUT);  
  pinMode(Ledverde, OUTPUT);  
  pinMode(Ledazul, OUTPUT);  
  digitalWrite(s0, HIGH);  
  digitalWrite(s1, HIGH);  
}  
void loop() 
{  
  color(); 
  Serial.print("Intensidad Rojo:");  
  Serial.print(rojo, DEC);  
  Serial.print(" Intensitad Verde:");  
  Serial.print(verde, DEC);  
  Serial.print(" Intensidad Azul:");  
  Serial.print(azul, DEC);  
                                                    //Serial.println();  
  if (rojo >7 && rojo <azul && rojo < verde && rojo < 10)
  {  
   Serial.println(" - (Color Rojo)");  
   digitalWrite(Ledrojo, HIGH); // LED ROJO ENCENDIDO 
   digitalWrite(Ledverde, LOW);  
   digitalWrite(Ledazul, LOW);  
  }  
  else if (azul < rojo && azul < verde)   
  {  
   Serial.println(" - (Color Azul)");  
   digitalWrite(Ledrojo, LOW);  
   digitalWrite(Ledverde, LOW);  
   digitalWrite(Ledazul, HIGH); // LED AZUL ENCENDIDO  
  }  
  else if (verde < rojo && verde <azul)  
  {  
   Serial.println(" - (Color Verde)");  
   digitalWrite(Ledrojo, LOW);  
   digitalWrite(Ledverde, HIGH); // LED VERDE ENCENDIDO 
   digitalWrite(Ledazul, LOW);  
  }  
  else if (rojo >30 && azul >38 && verde >45)  
  {  
   Serial.println(" - (No hay objeto)");  
   digitalWrite(Ledrojo, LOW);  
   digitalWrite(Ledverde, LOW); // TODOS LOS LEDS APAGADOS 
   digitalWrite(Ledazul, LOW);  
  }  
  else if (rojo >3 && rojo <azul && rojo <verde && rojo <8 && azul <10 && verde <20)  
  {  
   Serial.println(" - (Color Rosa)");  
   digitalWrite(Ledrojo, LOW);  
   digitalWrite(Ledverde, HIGH); // LED ROSA ENCENDIDO 
   digitalWrite(Ledazul, LOW);  
  }  
  else if (rojo >4 && rojo <azul && rojo <verde && rojo <8 && azul <20 && verde <15)  
  {  
   Serial.println(" - (Color Naranja)");  
   digitalWrite(Ledrojo, LOW);  
   digitalWrite(Ledverde, HIGH); // LED NARANJA ENCENDIDO 
   digitalWrite(Ledazul, LOW);  
  }  
  else
  {Serial.println();}
  delay(400);   
  digitalWrite(Ledrojo, LOW);  
  digitalWrite(Ledverde, LOW);  
  digitalWrite(Ledazul, LOW);  
 }  
 void color()  
{    
  digitalWrite(s2, LOW);  
  digitalWrite(s3, LOW);                                
  rojo = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);  
  digitalWrite(s3, HIGH);                               
  azul = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);  
  digitalWrite(s2, HIGH);                             
  verde = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);  
}
Sensor TCS230   




PROYECTO nº 16:

Nuestro próximo trabajo consiste en hacer un cubo 4x4x4 con 64 diodos leds.
En este proyecto han participado 5 alumnos y ha realizado cada uno un cubo con leds de distintos colores y resistencias de distintos valores para poder observar su funcionamiento.
A cada cubo se le ha pasado una programación diferente para poder comparar la facilidad de control de los leds de forma individual. 
A cada uno de los cubos le hemos preparado una base en la que hemos realizado un circuito impreso para facilitar la estabilidad y el conexionado de la estructura.

Relación de matriales utilizados:

1 Arduino UNO R3
64 leds
4 transistores    NPN (2N3904)
16 resistencias 220 ohmios 1/4 de W (con resistencias de 100 ohmios es suficiente)
4 resistencias 1 K ohmio 1/4 de W
1 placa de cobre para hacer el circuito impreso de 10 x 15
Varios conectores macho para Arduino
Hilo de cobre de 0,5 mm2
Estaño
Soldador de 15 W

PROGRAMA:

//CUBO FORMADO POR 64 LEDS 4x4 LED

int C1 = 0;
int C2 = 1;
int C3 = 2;
int C4 = 3;
int C5 = 4;
int C6 = 5;
int C7 = 6;
int C8 = 7;
int C9 = 8;
int C10 = 9;
int C11 = 10;
int C12 = 11;
int C13 = 12;
int C14 = 13;
int C15 = 14;
int C16 = 15;
int L1 = 16;
int L2 = 17;
int L3 = 18;
int L4 = 19;

void setup() {
  pinMode(C1, OUTPUT);
  pinMode(C2, OUTPUT);
  pinMode(C3, OUTPUT);
  pinMode(C4, OUTPUT);
  pinMode(C5, OUTPUT);
  pinMode(C6, OUTPUT);
  pinMode(C7, OUTPUT);
  pinMode(C8, OUTPUT);
  pinMode(C9, OUTPUT);
  pinMode(C10, OUTPUT);
  pinMode(C11, OUTPUT);
  pinMode(C12, OUTPUT);
  pinMode(C13, OUTPUT);
  pinMode(C14, OUTPUT);
  pinMode(C15, OUTPUT);
  pinMode(C16, OUTPUT);
  pinMode(L1, OUTPUT);
  pinMode(L2, OUTPUT);
  pinMode(L3, OUTPUT);
  pinMode(L4, OUTPUT);
}

void loop() {
  digitalWrite(L1, HIGH); //comienza capa 1 arriba
  digitalWrite(C1, HIGH);
  delay(500);
  digitalWrite(C1, LOW);
  digitalWrite(C2, HIGH);
  delay(50);
  digitalWrite(C2, LOW);
  digitalWrite(C3, HIGH);
  delay(50);
  digitalWrite(C3, LOW);
  digitalWrite(C4, HIGH);
  delay(50);
  digitalWrite(C4, LOW);
  digitalWrite(C8, HIGH);
  delay(50);
  digitalWrite(C8, LOW);
  digitalWrite(C7, HIGH);
  delay(50);
  digitalWrite(C7, LOW);
  digitalWrite(C6, HIGH);
  delay(50);
  digitalWrite(C6, LOW);
  digitalWrite(C5, HIGH);
  delay(50);
  digitalWrite(C5, LOW);
  digitalWrite(C9, HIGH);
  delay(50);
  digitalWrite(C9, LOW);
  digitalWrite(C10, HIGH);
delay(50);
  digitalWrite(C10, LOW);
  digitalWrite(C11, HIGH); 
  delay(50);
  digitalWrite(C11, LOW);
  digitalWrite(C12, HIGH);
  delay(50);
  digitalWrite(C12, LOW);
  digitalWrite(C16, HIGH);
  delay(50);
  digitalWrite(C16, LOW);
  digitalWrite(C15, HIGH);
  delay(50);
  digitalWrite(C15, LOW);
  digitalWrite(C14, HIGH);
  delay(50);
  digitalWrite(C14, LOW);
  digitalWrite(C13, HIGH);
  delay(50);
  digitalWrite(L1, LOW); //entra capa 2
 
  digitalWrite(L2, HIGH);
  delay(100);
  digitalWrite(C13, LOW);
  digitalWrite(C14, HIGH);
  delay(100);
  digitalWrite(C14, LOW);
  digitalWrite(C15, HIGH);
  delay(100);
  digitalWrite(C15, LOW);
  digitalWrite(C16, HIGH);
  delay(100);
  digitalWrite(C16, LOW);
  digitalWrite(C12, HIGH);
  delay(100);
  digitalWrite(C12, LOW);
  digitalWrite(C11, HIGH);
  delay(100);
  digitalWrite(C11, LOW);
  digitalWrite(C10, HIGH);
  delay(100);
  digitalWrite(C10, LOW);
  digitalWrite(C9, HIGH);
  delay(100);
  digitalWrite(C9, LOW);
  digitalWrite(C5, HIGH);
  delay(100);
  digitalWrite(C5, LOW);
  digitalWrite(C6, HIGH);
  delay(100);
  digitalWrite(C6, LOW);
  digitalWrite(C7, HIGH);
  delay(100);
  digitalWrite(C7, LOW);
  digitalWrite(C8, HIGH);
  delay(100);
  digitalWrite(C8, LOW);
  digitalWrite(C4, HIGH);
  delay(100);
  digitalWrite(C4, LOW);
  digitalWrite(C3, HIGH);
  delay(100);
  digitalWrite(C3, LOW);
  digitalWrite(C2, HIGH);
  delay(100);
  digitalWrite(C2, LOW);
  digitalWrite(C1, HIGH);
  delay(100);
  digitalWrite(L2, LOW); //entra la capa 3
  digitalWrite(L3, HIGH);
  delay(100);
  digitalWrite(C1, LOW);
  digitalWrite(C2, HIGH);
  delay(100);
  digitalWrite(C2, LOW);
  digitalWrite(C3, HIGH);
  delay(100);
  digitalWrite(C3, LOW);
  digitalWrite(C4, HIGH);
  delay(100);
  digitalWrite(C4, LOW);
  digitalWrite(C8, HIGH);
  delay(100);
  digitalWrite(C8, LOW);
  digitalWrite(C7, HIGH);
  delay(100);
  digitalWrite(C7, LOW);
  digitalWrite(C6, HIGH);
  delay(100);
  digitalWrite(C6, LOW);
  digitalWrite(C5, HIGH);
  delay(100);
  digitalWrite(C5, LOW);
  digitalWrite(C9, HIGH);
  delay(100);
  digitalWrite(C9, LOW);
  digitalWrite(C10, HIGH);
  delay(100);
  digitalWrite(C10, LOW);
  digitalWrite(C11, HIGH); 
  delay(100);
  digitalWrite(C11, LOW);
  digitalWrite(C12, HIGH);
  delay(100);
  digitalWrite(C12, LOW);
  digitalWrite(C16, HIGH);
  delay(100);
  digitalWrite(C16, LOW);
  digitalWrite(C15, HIGH);
  delay(100);
  digitalWrite(C15, LOW);
  digitalWrite(C14, HIGH);
  delay(100);
  digitalWrite(C14, LOW);
  digitalWrite(C13, HIGH);
  delay(100);
  digitalWrite(L3, LOW); //entra la capa 4
  digitalWrite(L4, HIGH);
  delay(250);
  digitalWrite(C13, LOW);
  digitalWrite(C14, HIGH);
  delay(250);
  digitalWrite(C14, LOW);
  digitalWrite(C15, HIGH);
  delay(250);
  digitalWrite(C15, LOW);
  digitalWrite(C16, HIGH);
  delay(250);
  digitalWrite(C16, LOW);
  digitalWrite(C12, HIGH);
  delay(250);
  digitalWrite(C12, LOW);
  digitalWrite(C11, HIGH);
  delay(250);
  digitalWrite(C11, LOW);
  digitalWrite(C10, HIGH);
  delay(250);
  digitalWrite(C10, LOW);
  digitalWrite(C9, HIGH);
  delay(250);
  digitalWrite(C9, LOW);
  digitalWrite(C5, HIGH);
  delay(250);
  digitalWrite(C5, LOW);
  digitalWrite(C6, HIGH);
  delay(250);
  digitalWrite(C6, LOW);
  digitalWrite(C7, HIGH);
  delay(250);
  digitalWrite(C7, LOW);
  digitalWrite(C8, HIGH);
  delay(250);
  digitalWrite(C8, LOW);
  digitalWrite(C4, HIGH);
  delay(250);
  digitalWrite(C4, LOW);
  digitalWrite(C3, HIGH);
  delay(250);
  digitalWrite(C3, LOW);
  digitalWrite(C2, HIGH);
  delay(250);
  digitalWrite(C2, LOW);
  digitalWrite(C1, HIGH);
  delay(250);
  digitalWrite(L4, LOW);
  delay(250);
 
  digitalWrite(L1, HIGH); //TODOS ENCENDIDOS  comienza capa 1 arriba
  digitalWrite(C1, HIGH);
  delay(500);
  digitalWrite(C2, HIGH);
  delay(250);
  digitalWrite(C3, HIGH);
  delay(250);
  digitalWrite(C4, HIGH);
  delay(250);
  digitalWrite(C8, HIGH);
  delay(250);
  digitalWrite(C7, HIGH);
  delay(250);
  digitalWrite(C6, HIGH);
  delay(250);
  digitalWrite(C5, HIGH);
  delay(250);
  digitalWrite(C9, HIGH);
  delay(250);
  digitalWrite(C10, HIGH);
  delay(250);
  digitalWrite(C11, HIGH); 
  delay(250);
  digitalWrite(C12, HIGH);
  delay(250);
  digitalWrite(C16, HIGH);
  delay(250);
  digitalWrite(C15, HIGH);
  delay(250);
  digitalWrite(C14, HIGH);
  delay(250);
  digitalWrite(C13, HIGH);
  delay(250);
 
  digitalWrite(L1, LOW); //apaga 1ª capa
  digitalWrite(C1, LOW);
  digitalWrite(C2, LOW);
  digitalWrite(C3, LOW);
  digitalWrite(C4, LOW);
  digitalWrite(C5, LOW);
  digitalWrite(C6, LOW);
  digitalWrite(C7, LOW);
  digitalWrite(C8, LOW);
  digitalWrite(C9, LOW);
  digitalWrite(C10, LOW);
  digitalWrite(C11, LOW);
  digitalWrite(C12, LOW);
  digitalWrite(C13, LOW);
  digitalWrite(C14, LOW);
  digitalWrite(C15, LOW);
  digitalWrite(C16, LOW);
 
  digitalWrite(L2, HIGH); //enciende 2ª capa
  delay(250);
  digitalWrite(C13, HIGH);
  delay(250);
  digitalWrite(C14, HIGH);
  delay(250);
  digitalWrite(C15, HIGH);
  delay(250);
  digitalWrite(C16, HIGH);
  delay(250);
  digitalWrite(C12, HIGH);
  delay(250);
  digitalWrite(C11, HIGH);
  delay(250);
  digitalWrite(C10, HIGH);
  delay(250);
  digitalWrite(C9, HIGH);
  delay(250);
  digitalWrite(C5, HIGH);
  delay(250);
  digitalWrite(C6, HIGH);
  delay(250);
  digitalWrite(C7, HIGH);
  delay(250);
  digitalWrite(C8, HIGH);
  delay(250);
  digitalWrite(C4, HIGH);
  delay(250);
  digitalWrite(C3, HIGH);
  delay(250);
  digitalWrite(C2, HIGH);
  delay(250);
  digitalWrite(C1, HIGH);
  delay(250);
  digitalWrite(L2, LOW); // apaga 2ª capa
  delay(100);
  digitalWrite(C1, LOW);
  digitalWrite(C2, LOW);
  digitalWrite(C3, LOW);
  digitalWrite(C4, LOW);
  digitalWrite(C5, LOW);
  digitalWrite(C6, LOW);
  digitalWrite(C7, LOW);
  digitalWrite(C8, LOW);
  digitalWrite(C9, LOW);
  digitalWrite(C10, LOW);
  digitalWrite(C11, LOW);
  digitalWrite(C12, LOW);
  digitalWrite(C13, LOW);
  digitalWrite(C14, LOW);
  digitalWrite(C15, LOW);
  digitalWrite(C16, LOW);
 
  digitalWrite(L3, HIGH); //comienza 3ª capa
  digitalWrite(C1, HIGH);
  delay(500);
  digitalWrite(C2, HIGH);
  delay(250);
  digitalWrite(C3, HIGH);
  delay(250);
  digitalWrite(C4, HIGH);
  delay(250);
  digitalWrite(C8, HIGH);
  delay(250);
  digitalWrite(C7, HIGH);
  delay(250);
  digitalWrite(C6, HIGH);
  delay(250);
  digitalWrite(C5, HIGH);
  delay(250);
  digitalWrite(C9, HIGH);
  delay(250);
  digitalWrite(C10, HIGH);
  delay(250);
  digitalWrite(C11, HIGH); 
  delay(250);
  digitalWrite(C12, HIGH);
  delay(250);
  digitalWrite(C16, HIGH);
  delay(250);
  digitalWrite(C15, HIGH);
  delay(250);
  digitalWrite(C14, HIGH);
  delay(250);
  digitalWrite(C13, HIGH);
  delay(250);
 
  digitalWrite(L3, LOW); //se apaga capa 3
  digitalWrite(C1, LOW);
  digitalWrite(C2, LOW);
  digitalWrite(C3, LOW);
  digitalWrite(C4, LOW);
  digitalWrite(C5, LOW);
  digitalWrite(C6, LOW);
  digitalWrite(C7, LOW);
  digitalWrite(C8, LOW);
  digitalWrite(C9, LOW);
  digitalWrite(C10, LOW);
  digitalWrite(C11, LOW);
  digitalWrite(C12, LOW);
  digitalWrite(C13, LOW);
  digitalWrite(C14, LOW);
  digitalWrite(C15, LOW);
  digitalWrite(C16, LOW);
 
  digitalWrite(L4, HIGH); //se enciende capa 4
  delay(250);
  digitalWrite(C13, HIGH);
  delay(250);
  digitalWrite(C14, HIGH);
  delay(250);
  digitalWrite(C15, HIGH);
  delay(250);
  digitalWrite(C16, HIGH);
  delay(250);
  digitalWrite(C12, HIGH);
  delay(250);
  digitalWrite(C11, HIGH);
  delay(250);
  digitalWrite(C10, HIGH);
  delay(250);
  digitalWrite(C9, HIGH);
  delay(250);
  digitalWrite(C5, HIGH);
  delay(250);
  digitalWrite(C6, HIGH);
  delay(250);
  digitalWrite(C7, HIGH);
  delay(250);
  digitalWrite(C8, HIGH);
  delay(250);
  digitalWrite(C4, HIGH);
  delay(250);
  digitalWrite(C3, HIGH);
  delay(250);
  digitalWrite(C2, HIGH);
  delay(250);
  digitalWrite(C1, HIGH);
  delay(250);
  digitalWrite(L4, LOW);// se apaga capa 4
  delay(100);
  digitalWrite(C1, LOW);
  digitalWrite(C2, LOW);
  digitalWrite(C3, LOW);
  digitalWrite(C4, LOW);
  digitalWrite(C5, LOW);
  digitalWrite(C6, LOW);
  digitalWrite(C7, LOW);
  digitalWrite(C8, LOW);
  digitalWrite(C9, LOW);
  digitalWrite(C10, LOW);
  digitalWrite(C11, LOW);
  digitalWrite(C12, LOW);
  digitalWrite(C13, LOW);
  digitalWrite(C14, LOW);
  digitalWrite(C15, LOW);
  digitalWrite(C16, LOW); 
 
 
  digitalWrite(C1, HIGH); //3ª fase, comienzan las lineas verticales 1 arriba
  digitalWrite(L1, HIGH);
  delay(250);
  digitalWrite(L2, HIGH);
  delay(250);
  digitalWrite(L3, HIGH);
  delay(250);
  digitalWrite(L4, HIGH);
  delay(250);
  digitalWrite(C2, HIGH);  //2 arriba
  delay(250);
  digitalWrite(L1, HIGH);
  delay(250);
  digitalWrite(L2, HIGH);
  delay(250);
  digitalWrite(L3, HIGH);
  delay(250);
  digitalWrite(L4, HIGH);
  delay(250);
  digitalWrite(C3, HIGH);  //3 arriba
  delay(250);
  digitalWrite(L1, HIGH); 
  delay(250);
  digitalWrite(L2, HIGH);
  delay(250);
  digitalWrite(L3, HIGH);
  delay(250);
  digitalWrite(L4, HIGH);
  delay(250);
  digitalWrite(C4, HIGH);  //4 arriba
  delay(250);
  digitalWrite(C8, HIGH);
  delay(250);
   digitalWrite(C7, HIGH);
  delay(250);
   digitalWrite(C6, HIGH);
  delay(250);
   digitalWrite(C5, HIGH);
  delay(250);
   digitalWrite(C12, HIGH);
  delay(250);
   digitalWrite(C11, HIGH);
  delay(250);
   digitalWrite(C10, HIGH);
  delay(250);
   digitalWrite(C9, HIGH);
  delay(250);
   digitalWrite(C13, HIGH);
  delay(250);
   digitalWrite(C14, HIGH);
  delay(250);
   digitalWrite(C15, HIGH);
  delay(250);
   digitalWrite(C16, HIGH);
  delay(500);
 
 
  digitalWrite(L1, HIGH); //comienza capa 1 arriba
  digitalWrite(C1, HIGH);
  delay(500);
  digitalWrite(C1, LOW);
  digitalWrite(C2, HIGH);
  delay(50);
  digitalWrite(C2, LOW);
  digitalWrite(C3, HIGH);
  delay(50);
  digitalWrite(C3, LOW);
  digitalWrite(C4, HIGH);
  delay(50);
  digitalWrite(C4, LOW);
  digitalWrite(C8, HIGH);
  delay(50);
  digitalWrite(C8, LOW);
  digitalWrite(C7, HIGH);
  delay(50);
  digitalWrite(C7, LOW);
  digitalWrite(C6, HIGH);
  delay(50);
  digitalWrite(C6, LOW);
  digitalWrite(C5, HIGH);
  delay(50);
  digitalWrite(C5, LOW);
  digitalWrite(C9, HIGH);
  delay(50);
  digitalWrite(C9, LOW);
  digitalWrite(C10, HIGH);
delay(50);
  digitalWrite(C10, LOW);
  digitalWrite(C11, HIGH); 
  delay(50);
  digitalWrite(C11, LOW);
  digitalWrite(C12, HIGH);
  delay(50);
  digitalWrite(C12, LOW);
  digitalWrite(C16, HIGH);
  delay(50);
  digitalWrite(C16, LOW);
  digitalWrite(C15, HIGH);
  delay(50);
  digitalWrite(C15, LOW);
  digitalWrite(C14, HIGH);
  delay(50);
  digitalWrite(C14, LOW);
  digitalWrite(C13, HIGH);
  delay(50);
  digitalWrite(L1, LOW); //entra capa 2
 
  digitalWrite(L2, HIGH);
  delay(100);
  digitalWrite(C13, LOW);
  digitalWrite(C14, HIGH);
  delay(100);
  digitalWrite(C14, LOW);
  digitalWrite(C15, HIGH);
  delay(100);
  digitalWrite(C15, LOW);
  digitalWrite(C16, HIGH);
  delay(100);
  digitalWrite(C16, LOW);
  digitalWrite(C12, HIGH);
  delay(100);
  digitalWrite(C12, LOW);
  digitalWrite(C11, HIGH);
  delay(100);
  digitalWrite(C11, LOW);
  digitalWrite(C10, HIGH);
  delay(100);
  digitalWrite(C10, LOW);
  digitalWrite(C9, HIGH);
  delay(100);
  digitalWrite(C9, LOW);
  digitalWrite(C5, HIGH);
  delay(100);
  digitalWrite(C5, LOW);
  digitalWrite(C6, HIGH);
  delay(100);
  digitalWrite(C6, LOW);
  digitalWrite(C7, HIGH);
  delay(100);
  digitalWrite(C7, LOW);
  digitalWrite(C8, HIGH);
  delay(100);
  digitalWrite(C8, LOW);
  digitalWrite(C4, HIGH);
  delay(100);
  digitalWrite(C4, LOW);
  digitalWrite(C3, HIGH);
  delay(100);
  digitalWrite(C3, LOW);
  digitalWrite(C2, HIGH);
  delay(100);
  digitalWrite(C2, LOW);
  digitalWrite(C1, HIGH);
  delay(100);
  digitalWrite(L2, LOW); //entra la capa 3
  digitalWrite(L3, HIGH);
  delay(100);
  digitalWrite(C1, LOW);
  digitalWrite(C2, HIGH);
  delay(100);
  digitalWrite(C2, LOW);
  digitalWrite(C3, HIGH);
  delay(100);
  digitalWrite(C3, LOW);
  digitalWrite(C4, HIGH);
  delay(100);
  digitalWrite(C4, LOW);
  digitalWrite(C8, HIGH);
  delay(100);
  digitalWrite(C8, LOW);
  digitalWrite(C7, HIGH);
  delay(100);
  digitalWrite(C7, LOW);
  digitalWrite(C6, HIGH);
  delay(100);
  digitalWrite(C6, LOW);
  digitalWrite(C5, HIGH);
  delay(100);
  digitalWrite(C5, LOW);
  digitalWrite(C9, HIGH);
  delay(100);
  digitalWrite(C9, LOW);
  digitalWrite(C10, HIGH);
  delay(100);
  digitalWrite(C10, LOW);
  digitalWrite(C11, HIGH); 
  delay(100);
  digitalWrite(C11, LOW);
  digitalWrite(C12, HIGH);
  delay(100);
  digitalWrite(C12, LOW);
  digitalWrite(C16, HIGH);
  delay(100);
  digitalWrite(C16, LOW);
  digitalWrite(C15, HIGH);
  delay(100);
  digitalWrite(C15, LOW);
  digitalWrite(C14, HIGH);
  delay(100);
  digitalWrite(C14, LOW);
  digitalWrite(C13, HIGH);
  delay(100);
  digitalWrite(L3, LOW); //entra la capa 4
  digitalWrite(L4, HIGH);
  delay(250);
  digitalWrite(C13, LOW);
  digitalWrite(C14, HIGH);
  delay(250);
  digitalWrite(C14, LOW);
  digitalWrite(C15, HIGH);
  delay(250);
  digitalWrite(C15, LOW);
  digitalWrite(C16, HIGH);
  delay(250);
  digitalWrite(C16, LOW);
  digitalWrite(C12, HIGH);
  delay(250);
  digitalWrite(C12, LOW);
  digitalWrite(C11, HIGH);
  delay(250);
  digitalWrite(C11, LOW);
  digitalWrite(C10, HIGH);
  delay(250);
  digitalWrite(C10, LOW);
  digitalWrite(C9, HIGH);
  delay(250);
  digitalWrite(C9, LOW);
  digitalWrite(C5, HIGH);
  delay(250);
  digitalWrite(C5, LOW);
  digitalWrite(C6, HIGH);
  delay(250);
  digitalWrite(C6, LOW);
  digitalWrite(C7, HIGH);
  delay(250);
  digitalWrite(C7, LOW);
  digitalWrite(C8, HIGH);
  delay(250);
  digitalWrite(C8, LOW);
  digitalWrite(C4, HIGH);
  delay(250);
  digitalWrite(C4, LOW);
  digitalWrite(C3, HIGH);
  delay(250);
  digitalWrite(C3, LOW);
  digitalWrite(C2, HIGH);
  delay(250);
  digitalWrite(C2, LOW);
  digitalWrite(C1, HIGH);
  delay(250);
  digitalWrite(L4, LOW);
  delay(250);
 
  digitalWrite(L1, LOW);// se apaga todo
  delay(100);
  digitalWrite(L2, LOW);
  delay(100);
  digitalWrite(L3, LOW);
  delay(100);
  digitalWrite(L4, LOW);
  delay(100);
  digitalWrite(C1, LOW);
  digitalWrite(C2, LOW);
  digitalWrite(C3, LOW);
  digitalWrite(C4, LOW);
  digitalWrite(C5, LOW);
  digitalWrite(C6, LOW);
  digitalWrite(C7, LOW);
  digitalWrite(C8, LOW);
  digitalWrite(C9, LOW);
  digitalWrite(C10, LOW);
  digitalWrite(C11, LOW);
  digitalWrite(C12, LOW);
  digitalWrite(C13, LOW);
  digitalWrite(C14, LOW);
  digitalWrite(C15, LOW);
  digitalWrite(C16, LOW);  // nueva secuencia
 
  digitalWrite(L1, HIGH);
  delay(250);
  digitalWrite(L2, HIGH);
  delay(250);
  digitalWrite(L3, HIGH);
  delay(250);
  digitalWrite(L4, HIGH);
 
  digitalWrite(C1, HIGH); //3ª fase, comienzan las lineas verticales 1 arriba
  delay(500);
  digitalWrite(C1, LOW);
  delay(250);
  digitalWrite(C2, HIGH);  //2 arriba
  delay(500);
  digitalWrite(C2, LOW);
  delay(250);
  digitalWrite(C3, HIGH);
  delay(500);
  digitalWrite(C3, LOW);
  delay(250);
  digitalWrite(C4, HIGH);
  delay(500);
  digitalWrite(C4, LOW);
  delay(250);
  digitalWrite(C8, HIGH);  //3 arriba
  delay(500);
  digitalWrite(C8, LOW); 
  delay(250);
  digitalWrite(C12, HIGH);
  delay(500);
  digitalWrite(C12, LOW);
  delay(250);
  digitalWrite(C16, HIGH);
  delay(500);
  digitalWrite(C16, LOW);  //4 arriba
  delay(250);
  digitalWrite(C15, HIGH);
  delay(500);
  digitalWrite(C15, LOW);
  delay(250);
  digitalWrite(C14, HIGH);
  delay(500);
  digitalWrite(C14, LOW);
  delay(250);
  digitalWrite(C13, HIGH);
  delay(500);
  digitalWrite(C13, LOW);
  delay(250);
  digitalWrite(C9, HIGH);
  delay(500);
  digitalWrite(C9, LOW);
  delay(250);
  digitalWrite(C5, HIGH);
  delay(500);
  digitalWrite(C5, LOW);
  delay(250);
 
  digitalWrite(C6, HIGH); // comienzan las 4 del centro
  delay(250);
  digitalWrite(C6, LOW);
  delay(250);
  digitalWrite(C7, HIGH);
  delay(250);
  digitalWrite(C7, LOW);
  delay(250);
  digitalWrite(C11, HIGH);
  delay(250);
  digitalWrite(C11, LOW);
  delay(250);
  digitalWrite(C10, HIGH);
  delay(250);
  digitalWrite(C10, LOW);
  delay(200);
  digitalWrite(C6, HIGH); // repiten las 4 del centro
  delay(150);
  digitalWrite(C6, LOW);
  delay(150);
  digitalWrite(C7, HIGH);
  delay(150);
  digitalWrite(C7, LOW);
  delay(100);
  digitalWrite(C11, HIGH);
  delay(100);
  digitalWrite(C11, LOW);
  delay(75);
  digitalWrite(C10, HIGH);
  delay(50);
  digitalWrite(C10, LOW);
  delay(50);
  digitalWrite(C6, HIGH); // repiten las 4 del centro
  delay(50);
  digitalWrite(C6, LOW);
  delay(50);
  digitalWrite(C7, HIGH);
  delay(50);
  digitalWrite(C7, LOW);
  delay(50);
  digitalWrite(C11, HIGH);
  delay(50);
  digitalWrite(C11, LOW);
  delay(50);
  digitalWrite(C10, HIGH);
  delay(50);
  digitalWrite(C10, LOW);
  delay(50);
 
  digitalWrite(L1, LOW); //apagamos todo
  delay(100);
  digitalWrite(L2, LOW);
  delay(100);
  digitalWrite(L3, LOW);
  delay(100);
  digitalWrite(L4, LOW);
  delay(100);
}
Imágenes:

PROYECTO nº 17:

EN ESTE PROYECTO VAMOS A ENCENDER VARIAS LÁMPARAS CON EL MANDO DE LA TELEVISIÓN.
Materiales:
*Arduino UNO
*placa con relés para conectar las lámparas
*sensor IR
*varios cables con conectores
*mando a distancia

Programa:
Lo primero que hay que hacer es obtener el código de cada uno de los pulsadores del mando.
Sketch:
#include <Arduino.h>
#include <NECIRrcv.h>
#define PIN 3   // pin al que conectamos la patilla de salida del receptor de IR
static int aux = 1;
NECIRrcv ir(IRPIN) ;
void setup()
{
  Serial.begin(9600) ;
  Serial.println("NEC IR codigo recepcion") ;//obtenemos el código
  ir.begin() ;
}
void loop()
{
  unsigned long ircode ;
  while (ir.available()) { 
    ircode = ir.read() ;  
    Serial.println(ircode) ; 
  }
}
Anotamos los códigos obtenidos, hay que tener en cuenta que cada mando tiene un código diferente.
Pasamos al Arduino el programa final con los códigos correspondientes a las teclas a accionar.

 #include <Arduino.h>
#include <NECIRrcv.h>
#define PIN 3   // pin al que vamos a conectar la patilla de salida del sensor
int led1 = 6;
int led2 = 7;
static int aux = 1;
NECIRrcv ir(IRPIN) ;
void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  ir.begin() ;
}
void loop()
{
  unsigned long ircode ;
  while (ir.available()) {
    ircode = ir.read() ;
    if(ircode == 4010852096){  //en nuestro caso, corresponde con el botón encendido/apagado      del  //mando para el primer relé, al que hemos conectado un fluorescente de 20 W
      if(aux == 0){
        digitalWrite(led1, LOW);
        aux = 1;
      }
      else{
        digitalWrite(led1, HIGH);
        aux = 0;
      }
    }
    if(ircode == 3994140416){  //en nuestro caso, corresponde con el botón encendido/apagado del //mando para el segundo relé, al que hemos conectado una lámpara de 100 W
      if(aux == 0){
        digitalWrite(led2, LOW);
        aux = 1;
      }
      else{
        digitalWrite(led2, HIGH);
        aux = 0;
      }
    }
  }
}
Imágenes:


PROYECTO nº 18:  
 INVERSIÓN DEL SENTIDO DE GIRO DE UN MOTOR TRIFÁSICO CONTROLADO CON EL
Bluetooth DESDE EL TELÉFONO MÓVIL.

Materiales:
*Arduino UNO
*placa con 2 relés para controlar los motores
*módulo HC 05
*varios cables con conectores
*teléfono con el programa BlueTerm

Programa:
//con este programa se controlan los dos relés
#define LED_PIN1  4
#define LED_PIN2  5

int firstSensor = 0;    // primer sensor analógico
int secondSensor = 0;   // segundo sensor analógico

int inByte = 0;         // entrada de byte
boolean status_unlock;
boolean status_bluetooth;

long interval = 1000;           // intervalo al abrir y cerrar (milisegundos)
long previousMillis = 0;        // almacenará la última vez que fue actualizado LED
int minite,sec;


void setup()
{
  // iniciar puerto serie a 19200 bps:
  Serial.begin(19200);
 
  pinMode(LED_PIN1, OUTPUT);
  pinMode(LED_PIN2, OUTPUT);
 
  digitalWrite(LED_PIN1, LOW);  // cambiar el LED a:
  digitalWrite(LED_PIN2, LOW);  //
 
  status_bluetooth = true;
  status_unlock = false;
  sec = 0;
}

void loop()
{
  if (Serial.available() > 0) {  
      
    inByte = Serial.read();             // Obtiene byte de entrada: 

    if(inByte == 'M'){   
      digitalWrite(LED_PIN1, HIGH);        // cambia a:
      Serial.print('M');         // marcar
      delay(800);
      digitalWrite(LED_PIN1, LOW);        // cambia a:
      status_unlock = false;
      inByte = 0;    
    }
    if(inByte == 'P'){   
      digitalWrite(LED_PIN2, HIGH);        // cambia a:
      Serial.print('P');         // marcar
      delay(800);
      digitalWrite(LED_PIN2, LOW);        // cambia a:
      status_unlock = false;
      inByte = 0;    
    } }  
}

Imágenes:











PROYECTO nº 19:  
 CONTROL DE UN MOTOR TRIFÁSICO CON UN SENSOR DE SONIDO
CON UNA PALMADA SE PONE EN MARCHA Y CON DOS SE PARA.

Materiales:
*Arduino UNO
*placa con 2 relés para controlar el motor
*módulo HC20
*varios cables con conectores


Programa:
  -------------------------------------------------

 








--------------------------------------------------------------------------------
Sensores a utilizar en los siguientes proyectos:

 







:



PÁGINA RECOMENDADA:
https://www.youtube.com/playlist?list=PLpOqH6AE0tNgrhG4Lca75PMoE-yHrwcDq