IES Extremadura


Módulo con sensor de corriente ACS712
Descripción:
Este módulo basado en el circuito integrado ACS712 permite medir la cantidad de corriente que pasa a través de un circuito de corriente alterna (AC) o corriente continua (DC). El método de medida es a través de un sensor de efecto hall que entrega un voltaje de salida proporcional a la corriente que hay en el circuito. El trayecto para la medida de corriente es por el interior del circuito integrado.

Características:
-Sensor lineal de efecto hall.
-Alta precisión de medida debido a la cercanía del sensor de efecto hall al elemento de paso.
-Baja resistencia del elemento de paso para una baja disipación de potencia (1.2 mΩ típico)
-Capacidad de sobrevivir a picos de corriente de hasta 5 veces la corriente nominal.
-Disponible en 2 rangos de medición: 5 y 30 amperios.
-Modelo: ACS712, basado en el chip fabricado por Allegro MicroSystems.
-Voltaje de alimentación para el chip ACS712: 5.0 volts. Ic= 10 ma.
-Incluye led indicador del voltaje de alimentación (D1)
-Aislamiento entre el sensor de corriente y la salida: 2.1 KVrms 
-La salida de voltaje es proporcional a la corriente a medir, AC ó DC.
-Error máximo de linealidad a la salida 1.5% @ 25 C.
-Sensitividad: 66 mv/A para módulo de 30 amp y 185 mv/A para módulo de 5 amp.



 ÍNDICE DE ACTIVIDADES
 BLINK
 SENSOR DE TEMPERATURA-HUMEDAD + LCD
 SENSOR DE TEMPERATURA-HUMEDAD + TV




Dispositivos Arduino para la Eficiencia Energética

TÍTULO DEL PROYECTO:  BLINK
Comenzamos  con algo sencillo explicando paso a paso el porqué de cada cosa.
El primer proyecto que se hace siempre con arduino es el "blik"  (parpadeo). También es conocido como el "Hola mundo".
Básicamente consiste en un diodo led que se enciende y se apaga.


MATERIALES: 
-        Placa de Arduino. UNO
-       Cable USB de conexión
-       1 Led


CÓDIGO:
/*Blink. Consiste en un led que se enciende y se apaga. Lo conectaremos en el pin 13, ya que en este pin no es necesario conectar la resistencia en serie con el  led. El encendido y apagado lo realizaremos con el comando delay*/
Esto que acabo de escribir, se puede escribir también en la misma pantalla donde estamos tecleando el código del programa. La regla es comenzar el párrafo  con   /*   y terminarlo con */ 
Si no necesitamos escribir un párrafo muy largo también podemos utilizar al comienzo de la línea //   Pero en este caso solo sirve para una línea, cada vez que empecemos otra nueva siempre comenzaremos con  //
Empezamos:

int ledPin=13;        // Indicamos que utilizaremos el pin 13 como variable y lo identificaremos

                             // como ledPin, pero podríamos llamarle como quisiéramos.
                             // Importante la sintaxis. int separado del nombre que queremos darle
                             // y terminamos con punto y coma
                             //  int, es una variable. Al colocarla en este punto el programa podrá
                             // utilizarla en cualquier momento. Se conoce como variable global.

void setup ()        
// Inicio del programa. Terminado en paréntesis abierto y cerrado.
                             // Abrimos llaves. Todo lo que escribamos a continuación estará
                             // incluido dentro de la llaves.
{
pinMode ( ledPin, OUTPUT);  // Declaramos el pin 13, que lo hemos identificado como ledPin
                                               // como salida. OUTPUT con mayúsculas y
                                              // entre paréntesis y terminado en punto y coma
                                              // Cerramos llave
}

void loop()           // Indicamos que aquí comienza el bucle para que el programa se repita

                            // indefinidamente. Abrimos llaves.
{
digitalWrite (ledPin, HIGH);  // Literalmente lo que estamos diciendo es: "escribe un 1 en el 
                                            // ledPin" Es decir, enciende el led que hemos identificado 
                                            // como ledPin.
delay (1000);                      // Mediante delay lo que hacemos es una parada en el programa,
                                           //ojo, no es un temporizador. Es provocar una parada en el loop.
                                           //En este caso la parada será de un segundo ya que hemos 
                                           // programado 1000 milisegundos.
digitalWrite (ledPin, LOW); // En esta ocasión el mensaje es "Escribe un 0 en el ledPin"
                                           // es decir, apaga el led.
delay (1000);                      // Provocamos otra parada en el loop
}                                          // Importante, terminar el programa cerrando las llaves


"Fritzing"                                                                      
                                

FOTOS: 


   


OBSERVACIONES: 
Es muy importante, no para el funcionamiento del programa, si no para que controlemos lo que hemos escrito, hacer todas, las aclaraciones que consideremos oportunas sobre las diferentes instrucciones. Siempre después de // o abriendo el comentario con  /*  y cerrándolo con */
Una vez tecleado el código lo validamos, lo guardamos y lo transferimos a la placa Arduino, que previamente hemos conectado al ordenador a través del cable USB

Si todo va bien tendrá que funcionar, de lo contrario nos dará un mensaje de error en la validación.
Se pueden modificar los tiempos de encendido y apagado del led, cambiando el tiempo en “delay

AUTOR: Santiago Julián Polo.  IES “EXTREMADURA”. Montijo




TÍTULO DEL PROYECTO:  SENSOR DE TEMPERATURA-HUMEDAD + LCD

El objetivo del proyecto es obtener unas medidas de temperatura y humedad, las cuales, las iremos sacando por una pantalla LCD.
Este trabajo servirá de base para utilizar las pantallas LCD con un sensor y así saber cual es el estado insitu.


MATERIALES:

-   Placa de Arduino. UNO
-   Cable USB de conexión
-   Sensor temperatura-humedad DHT11
-   Pantalla LCD  1602 I2C v.3
-   Cables conexión macho-hembra


CÓDIGO:

/*
ARDUEFICIENCIA

 Este es un ejemplo de programa para LCD 1602
I2C v.3 y sensor de 
 Temperatura-Humedad DHT11 */

 // Importamos las bibliotecas necesarias//
 #include <Wire.h>  // Incluida en el Arduino IDE
 #include <LiquidCrystal_I2C.h>
 #include <DHT.h>

 // Definimos las variables que vamos a utilizar//
 #define DHTPIN 2 //Seleccionamos el pin en el que se //conectará el sensor
 #define DHTTYPE DHT11 //Se selecciona el DHT11 (hay //otros DHT)
 DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que será usada por Arduino para comunicarse con el sensor

 // Definimos los objetos
 // Establecer la dirección de LCD de 0x20 para una pantalla de 20 caracteres 4 líneas
 // Establecer las patas del chip I2C utilizado para las conexiones de LCD:
 //                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
 LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // configura la direccion LCD I2C

 // Ejecutamos el setup //

 void setup()  
 {
  Serial.begin(9600);  // Se utiliza para introducir caracteres

  lcd.begin(20,4);  // inicializar el LCD con 20 caracteres 4 líneas y encender la luz de fondo
  dht.begin(); //Se inicia el sensor de temperatura
 // --------3 parpadeos rapidos de la luz de fondo---------- //

  for(int i = 0; i< 3; i++)
  {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight();
 // --------- Terminar con luz de fondo encendida ------------ //
 //-------- Escribe los caracteres de la pantalla ----------------
 // NOTA: La osición del cursor: (CUADRO, LÍNEA) comenzará con 0
  lcd.setCursor(2,0);
  lcd.print("Bienvenidos!");
  delay(1000);
  lcd.setCursor(1,1);
  lcd.print("Ardueficiencia");
  delay(1000); 
  lcd.clear();
 }
 // Termina el setup//
 // Inicializamos el bucle //

 void loop()
 {
  float h = dht.readHumidity(); //Se lee la humedad
  float t = dht.readTemperature(); //Se lee la temperatura
  //Se escriben los datos de humedad y temperatura en el LCD
  lcd.setCursor(13,0);
  lcd.print( h);
  lcd.setCursor(0,0);
  lcd.write("Humedad:");
  lcd.setCursor(15,0);
  lcd.write("%");
  lcd.setCursor(13,1);
  lcd.print( t); 
  lcd.setCursor(0,1);
  lcd.write("Temperatura:");
  lcd.setCursor(15,1);
  lcd.write("C");
  delay(2000); //Se espera 2 segundos para
seguir leyendo //datos
 }
 // Terminamos el bucle //




FOTOS:
   
 

OBSERVACIONES:

El  problema que podemos encontrar es que no encontremos la librería adecuada para el LCD, ya que este dispositivo ha cambiado y se ha ido mejorando.  El nuestro tiene una interface i2C en su versión tercera. 
El sensor de temperatura es mas corriente y no debe darnos muchos problemas.
El código lo tenéis explicado, para que podáis ir siguiéndolo fácilmente, de todas formas es solo un código base, para que se le pueda ir añadiendo mas cosas, comparar datos, actuadores para activar o desactivar electroválvulas, etc.

Todo lo necesario librerías, código, imágenes, los tenéis disponible en este enlace:

AUTOR: J.Carlos Obregón Crespo.  IES “EXTREMADURA”. Montijo


Dispositivos Arduino para la Eficiencia Energética

TÍTULO DEL PROYECTO:  SENSOR DE TEMPERATURA-HUMEDAD + TV

El objetivo del proyecto es obtener unas medidas de temperatura y humedad, las cuales, las iremos sacando por una pantalla de televisión. Esto lo podremos hacer de forma directa al canal AV-VIDEO o bien como podéis ver en las fotos, se puede utilizar un modulador  para emitir la señal por un canal de televisión y verlo así, a través de la instalación de telecomunicaciones.
Este trabajo nos da una dimensión mas en la presentación de los datos obtenidos por el Arduino, en este caso por un sensor de temperatura y humedad.

MATERIALES: 


-       Placa de Arduino. UNO
-       Cable USB de conexión
-       Sensor temperatura-humedad DHT11
-       Cable RCA-Arduino
-       Cables conexión macho-hembra
-       Modulador analógico.

   FABRICACIÓN:

  El Arduino no tiene conector RCA, así que  para  resolver esto tendremos que fabricarnos   nuestro propio cable. Vamos a utilizar un método sencillo para conectar directamente a       los pines del Arduino.

  Un cable RCA individual contiene dos cables: señal y tierra. El cable de señal está por lo     general protegido por un aislamiento para evitar distorsiones. El cable de tierra no es un     alambre real sino una malla de cobre trenzado, por lo general.

  Para hacer las conexiones seguiremos la figura:
                             

  En primer lugar, tenemos que conectar la tierra del RCA a uno de pines de tierra del           Arduino, después conectamos la señal (VIDEO) del cable RCA a los pines digitales del       Arduino 9 y 7 usando dos resistencias como vemos en la figura. Necesitamos pin 9 para     la sincronización del remitente (Arduino) y el receptor (televisor) y necesitamos pin 7 para   emitir la señal de vídeo.

CÓDIGO:


/*  ARDUEFICIENCIA

  Este código imprime en una pantalla de TV por la entrada de AV-IN los datos obtenidos por el sensor DHT11, nuestro sensor de temperatura y humedad.

  Emplea las salidas digitales 7 y 9
  Emplea la libreria TVout.h

 */
  // Primero importamos las librerias 

 #include <TVout.h>
 #include <fontALL.h>
 #include "humedad.h"
 #include "temperatura.h"
 #include <DHT.h>
  
 // Definimos las variables que vamos a utilizar//
 #define DHTPIN 2                    //Seleccionamos el pin en el que se conectará el sensor
 #define DHTTYPE DHT11       //Se selecciona el DHT11 (hay/otros DHT)
 DHT dht(DHTPIN, DHTTYPE);    //Se inicia una variable que será usada por Arduino para comunicarse con el sensor

                                
 TVout TV;                                                       //Crea un objeto TVout

void setup() {   

  TV.begin(PAL,120,96);                                         //Establece la resolucion de pantalla
  
  TV.select_font(font8x8ext);                                  //Establece el tamaño de fuente a 8x8
  TV.println("ARDUEFICIENCIA");         //Imprime un linea de texto en unas coordenadas
  TV.delay(3000);                                               //Espera 3 segundos
  TV.select_font(font6x8); 
  TV.println(0,30,"TEMPERATURA\n\n");         //Imprime un linea de texto en unas                                                                                      coordenadas
  TV.println(0,50,"Y HUMEDAD");
  TV.delay(3000);
  TV.clear_screen();                                            //Borra la pantalla
  TV.println("Cargando ...");                                   // Introducimos el tipico Cargando...
  TV.delay(1500);
  TV.clear_screen();

}

void loop() {  
  
  float h = dht.readHumidity();                                 //Se lee la humedad
  float t = dht.readTemperature();                           //Se lee la temperatura 

  TV.select_font(font6x8);                                   // Seleccionamos la fuente del texto
  TV.println("Humedad:\n\n");                                // Indicamos la variable humedad
  TV.select_font(font8x8ext);                                // Seleccionamos la fuente del texto
  TV.print(h);
  TV.println(" %"); 
  TV.bitmap((TV.hres()-50),(TV.vres()-40),humedad);          //Dibuja un mapa de bit en                                                                                                  las coordenadas

  TV.delay(10000);
  TV.clear_screen();
  TV.select_font(font6x8);                                    // Seleccionamos la fuente del texto
  TV.println("Temperatura:\n\n");                             // Indicamos la variable temperatura
  TV.select_font(font8x8ext);                                 // Seleccionamos la fuente del texto
  TV.print(t);
  TV.println(" C\n");
  TV.bitmap((TV.hres()-50),(TV.vres()-40),temperatura);       //Dibuja un mapa de bit en                                                                                                     las coordenadas

  TV.delay(10000);
  TV.clear_screen();

}


"Fritzing"       
                                                                                   
                                                               
                                
       FOTOS: 

                                                                                                   

OBSERVACIONES: 


La generación de una señal de vídeo es difícil. Por lo general se necesita una gran cantidad de código ensamblador complicado Afortunadamente, Myles Metzler creó la biblioteca TV-Out. Esta biblioteca nos ofrece funciones básicas para dibujar líneas, círculos y rectángulos, a demás, viene con un conjunto de herramientas para introducir texto en fuentes de diversos tamaños.

Por supuesto, no se puede esperar que, un pequeño dispositivo como el Arduino, pueda generar gráficos en alta definición, pero al menos es capaz de generar gráficos en blanco y negro con una resolución de 128 por 96 píxeles para PAL y NTSC. Eso es suficiente para lo que nosotros nos planteamos.

En este proyecto se han incluidos dos librerías que contienen dos dibujos, puesto que el Arduino no tiene procesamiento gráfico no puede manejar imágenes en jpg o bmp, por lo que, tenemos que traducir las imágenes a píxeles de 128x96. Esto lo podemos hacer con el programa gratuito image2code para Windows.

Todo lo necesario librerías, código, imágenes, los tenéis disponible en este enlace:



AUTOR: J.Carlos Obregón Crespo.  IES “EXTREMADURA”. Montijo


Dispositivos Arduino para la Eficiencia Energética

TÍTULO DEL PROYECTO:  FABRICACIÓN DE PLACA SOLAR PARA ARDUINO

El objetivo del proyecto es calcular, diseñar, soldar, medir y en general realizar todo el proceso necesario para fabricar una placa solar.

MATERIALES: 

-       Conector USB de conexión
-       Célula solar
-       Cristal y madera de 20 x 35
-       Cables preestañado para conexión.
-       Soldador, tijeras, regla.
-   Diodo, transistor. 

   FABRICACIÓN:

  


"FOTOS"                                                                                          
                                                               


PROCESO DE FABRICACIÓN DE UNA PLACA SOLAR
                                                
                                                             


OBSERVACIONES: 




AUTOR: José, Santiago y Juan Carlos.  IES “EXTREMADURA”. Montijo
Dispositivos Arduino para la Eficiencia Energética

TÍTULO DEL PROYECTO:  CONTROL DE UNA INSTALACIÓN MEDIANTE UN ARDUINO UNO Y UNA PLACA SHIELD
Con un arduino UNO podemos controlar hasta cinco lámparas o relés.


MATERIALES: 
-        Placa de Arduino. UNO
-   Placa shield
-       Cable USB de conexión
-       1 módulo de 5 relés
-   5 Lámparas
-   Una red con wifi



CÓDIGO:

//FUNCIONA con 5 relés
#include <SPI.h>
#include <Ethernet.h>

//Declaración de la direcciones MAC e IP. También del puerto 80
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,1,100);
EthernetServer servidor(80);
int PIN_1=2;  int PIN_2=3;  int PIN_3=4;  int PIN_4=5;  int PIN_5=6;

String readString=String(30);
String state1=String(3); String state2=String(3); String state3=String(3);
String state4=String(3); String state5=String(3);

void setup() {
Ethernet.begin(mac, ip);
servidor.begin();
pinMode(PIN_1,OUTPUT);
digitalWrite(PIN_1,LOW);
pinMode(PIN_2,OUTPUT);
digitalWrite(PIN_2,LOW);
pinMode(PIN_3,OUTPUT);
digitalWrite(PIN_3,LOW);
pinMode(PIN_4,OUTPUT);
digitalWrite(PIN_4,LOW);
pinMode(PIN_5,OUTPUT);
digitalWrite(PIN_5,LOW);

state1="OFF";  state2="OFF";  state3="OFF";
state4="OFF";  state5="OFF";
}

void loop() {
EthernetClient cliente= servidor.available();
if(cliente)
{
boolean lineaenblanco=true;
while(cliente.connected()) {
if(cliente.available()) {
char c=cliente.read();
if(readString.length()<30) //Leemos petición HTTP caracter a caracter
{
readString.concat(c);//Almacenar los caracteres en la variable readString
}
if(c=='\n' && lineaenblanco) //Si la petición HTTP ha finalizado
{
int LED1 = readString.indexOf("LED1=");
int LED2 = readString.indexOf("LED2=");
int LED3 = readString.indexOf("LED3=");
int LED4 = readString.indexOf("LED4=");
int LED5 = readString.indexOf("LED5=");

if(readString.substring(LED1,LED1+6)=="LED1=T") {digitalWrite(PIN_1,HIGH);
state1="ON";}
if (readString.substring(LED1,LED1+6)=="LED1=F") {digitalWrite(PIN_1,LOW);
state1="OFF";}

if (readString.substring(LED2,LED2+6)=="LED2=T") {digitalWrite(PIN_2,HIGH);
state2="ON"; }
if (readString.substring(LED2,LED2+6)=="LED2=F") {digitalWrite(PIN_2,LOW);
state2="OFF";}

if(readString.substring(LED3,LED3+6)=="LED3=T") {digitalWrite(PIN_3,HIGH);
state3="ON";  }
if (readString.substring(LED3,LED3+6)=="LED3=F") {digitalWrite(PIN_3,LOW);
state3="OFF";}

if(readString.substring(LED4,LED4+6)=="LED4=T") {digitalWrite(PIN_4,HIGH);
state4="ON";  }
if (readString.substring(LED4,LED4+6)=="LED4=F") {digitalWrite(PIN_4,LOW);
state4="OFF";}

if(readString.substring(LED5,LED5+6)=="LED5=T") {digitalWrite(PIN_5,HIGH);
state5="ON"; }
if (readString.substring(LED5,LED5+6)=="LED5=F") {digitalWrite(PIN_5,LOW);
state5="OFF";}

cliente.println("HTTP/1.1 200 OK");
cliente.println("Content-Type: text/html");
cliente.println("Connection: close");
cliente.println("Refresh: 25");  // refresca la información cada 25 seg.
cliente.println(); // Diseño de Página Web HTML
cliente.println("<!DOCTYPE HTML>");
cliente.println("<html>");
cliente.println("<head>");
cliente.println("<title>CONTROL DE MI INSTALACION</title>");
cliente.println("</head>");
cliente.println("<body>"); //cliente.println("<body width=100% height=100%>");
cliente.println("<body bgcolor=#056103 height=100% width=100%>");
cliente.println("<center>");
cliente.print("PATIO ");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED1=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED1=F\'>");
cliente.println("   PATIO=");  cliente.println(state1);  cliente.print("<p>&nbsp;</p>");

cliente.print("PASILLO  ");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED2=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED2=F\'>");
cliente.println("   PASILLO=");  cliente.println(state2);  cliente.print("<p>&nbsp;</p>");

cliente.print("TERRAZA  ");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED3=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED3=F\'>");
cliente.println("   TERRAZA=");  cliente.println(state3);  cliente.print("<p>&nbsp;</p>");

cliente.print("ENTRADA  ");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED4=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED4=F\'>");
cliente.println("   ENTRADA=");  cliente.println(state4);  cliente.print("<p>&nbsp;</p>");

cliente.print("SALON  ");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED5=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED5=F\'>");
cliente.println("   SALON=");  cliente.println(state5);  cliente.print("<p>&nbsp;</p>");

cliente.println("</body>");
cliente.println("</html>");
cliente.stop();

readString="";
}
}
}
}
}


"Fritzing"                                                                      
                                

FOTOS: 


   


OBSERVACIONES: 


AUTOR: José Cerrato Barrero.  IES “EXTREMADURA”. Montijo

Dispositivos Arduino para la Eficiencia Energética

TÍTULO DEL PROYECTO:  CONTROL DE UNA INSTALACIÓN MEDIANTE UN ARDUINO MEGA Y UNA PLACA SHIELD
Con un arduino MEGA podemos controlar mas salidas (lámparas o relés) que con el UNO.


MATERIALES: 
-        Placa de Arduino. MEGA 2560
-   Placa shield
-       Cable USB de conexión
-       1 módulo de 8 relés
-   8 Lámparas
-   Un router o Una red con wifi



CÓDIGO:

//ARDUEFICIENCIA
//FUNCIONA con 7 relés
#include <SPI.h>
#include <Ethernet.h>

//Declaración de la direcciones MAC e IP. También del puerto 80
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,1,100);
EthernetServer servidor(80);
int PIN_1=2;  int PIN_2=3;  int PIN_3=4;  int PIN_4=5;  int PIN_5=6; int PIN_6=7;  int PIN_7=8;

String readString=String(30);
String state1=String(3); String state2=String(3); String state3=String(3);
String state4=String(3); String state5=String(3); String state6=String(3); String state7=String(3);

void setup() {
Ethernet.begin(mac, ip);
servidor.begin();
pinMode(PIN_1,OUTPUT);
digitalWrite(PIN_1,LOW);
pinMode(PIN_2,OUTPUT);
digitalWrite(PIN_2,LOW);
pinMode(PIN_3,OUTPUT);
digitalWrite(PIN_3,LOW);
pinMode(PIN_4,OUTPUT);
digitalWrite(PIN_4,LOW);
pinMode(PIN_5,OUTPUT);
digitalWrite(PIN_5,LOW);
pinMode(PIN_6,OUTPUT);
digitalWrite(PIN_6,LOW);
pinMode(PIN_7,OUTPUT);
digitalWrite(PIN_7,LOW);

state1="OFF";  state2="OFF";  state3="OFF";
state4="OFF";  state5="OFF"; state6="OFF"; state7="OFF";
}

void loop() {
EthernetClient cliente= servidor.available();
if(cliente)
{
boolean lineaenblanco=true;
while(cliente.connected()) {
if(cliente.available()) {
char c=cliente.read();
if(readString.length()<30) //Leemos petición HTTP caracter a caracter
{
readString.concat(c);//Almacenar los caracteres en la variable readString
}
if(c=='\n' && lineaenblanco) //Si la petición HTTP ha finalizado
{
int LED1 = readString.indexOf("LED1=");
int LED2 = readString.indexOf("LED2=");
int LED3 = readString.indexOf("LED3=");
int LED4 = readString.indexOf("LED4=");
int LED5 = readString.indexOf("LED5=");
int LED6 = readString.indexOf("LED6=");
int LED7 = readString.indexOf("LED7=");

if(readString.substring(LED1,LED1+6)=="LED1=T") {digitalWrite(PIN_1,HIGH);
state1="ON";}
if (readString.substring(LED1,LED1+6)=="LED1=F") {digitalWrite(PIN_1,LOW);
state1="OFF";}

if (readString.substring(LED2,LED2+6)=="LED2=T") {digitalWrite(PIN_2,HIGH);
state2="ON"; }
if (readString.substring(LED2,LED2+6)=="LED2=F") {digitalWrite(PIN_2,LOW);
state2="OFF";}

if(readString.substring(LED3,LED3+6)=="LED3=T") {digitalWrite(PIN_3,HIGH);
state3="ON";  }
if (readString.substring(LED3,LED3+6)=="LED3=F") {digitalWrite(PIN_3,LOW);
state3="OFF";}

if(readString.substring(LED4,LED4+6)=="LED4=T") {digitalWrite(PIN_4,HIGH);
state4="ON";  }
if (readString.substring(LED4,LED4+6)=="LED4=F") {digitalWrite(PIN_4,LOW);
state4="OFF";}

if(readString.substring(LED5,LED5+6)=="LED5=T") {digitalWrite(PIN_5,HIGH);
state5="ON"; }
if (readString.substring(LED5,LED5+6)=="LED5=F") {digitalWrite(PIN_5,LOW);
state5="OFF";}

if(readString.substring(LED6,LED6+6)=="LED6=T") {digitalWrite(PIN_6,HIGH);
state6="ON"; }
if (readString.substring(LED6,LED6+6)=="LED6=F") {digitalWrite(PIN_6,LOW);
state6="OFF";}

if(readString.substring(LED7,LED7+6)=="LED7=T") {digitalWrite(PIN_7,HIGH);
state7="ON"; }
if (readString.substring(LED7,LED7+6)=="LED7=F") {digitalWrite(PIN_7,LOW);
state7="OFF";}

cliente.println("HTTP/1.1 200 OK");
cliente.println("Content-Type: text/html");
cliente.println("Connection: close");
cliente.println("Refresh: 25");  // refresca la información cada 25 seg.
cliente.println(); // Diseño de Página Web HTML
cliente.println("<!DOCTYPE HTML>");
cliente.println("<html>");
cliente.println("<head>");
cliente.println("<title>CONTROL DE MI INSTALACION</title>");
cliente.println("</head>");
cliente.println("<body>"); //cliente.println("<body width=100% height=100%>");
cliente.println("<body bgcolor=#056103 height=100% width=100%>");
cliente.println("<center>");

cliente.print("PATIO ");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED1=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED1=F\'>");
cliente.println("   PATIO=");  cliente.println(state1);  cliente.print("<p>&nbsp;</p>");

cliente.print("PASILLO  ");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED2=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED2=F\'>");
cliente.println("   PASILLO=");  cliente.println(state2);  cliente.print("<p>&nbsp;</p>");

cliente.print("TERRAZA  ");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED3=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED3=F\'>");
cliente.println("   TERRAZA=");  cliente.println(state3);  cliente.print("<p>&nbsp;</p>");

cliente.print("ENTRADA  ");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED4=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED4=F\'>");
cliente.println("   ENTRADA=");  cliente.println(state4);  cliente.print("<p>&nbsp;</p>");

cliente.print("SALON  ");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED5=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED5=F\'>");
cliente.println("   SALON=");  cliente.println(state5);  cliente.print("<p>&nbsp;</p>");

cliente.print("DORMITORIO_1");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED6=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED6=F\'>");
cliente.println("DORMITORIO_1=");  cliente.println(state6);  cliente.print("<p>&nbsp;</p>");

cliente.print("DORMITORIO_2");
cliente.println("<input type=submit value=ON style=width:200px;height:80px onClick=location.href='./?LED7=T\'><input type=submit value=OFF style=width:200px;height:80px onClick=location.href='./?LED7=F\'>");
cliente.println("DORMITORIO_2=");  cliente.println(state7);  cliente.print("<p>&nbsp;</p>");

cliente.println("</body>");
cliente.println("</html>");
cliente.stop();

readString="";
}
}
}
}
}



"Fritzing"                                                                      
                                

FOTOS: 






   


OBSERVACIONES: 
Nosotros hemos utilizado un router que teníamos y hemos creado una red LAN sin conexión a internet, por lo tanto nuestro alcance, para conectarnos desde el teléfono móvil, es de un rango de unos 50 metros, suficiente para controlar toda la vivienda.

AUTOR: José Cerrato Barrero.  IES “EXTREMADURA”. Montijo
Dispositivos Arduino para la Eficiencia Energética

TÍTULO DEL PROYECTO:  TIMBRE INALÁMBRICO

Se va a construir un timbre inalámbrico, para el que necesitaremos  hacer uso de dos estaciones cada una con Arduino Uno, Shield XBee, módulo XBee Serie 1. En la estación de Emisión (E) tenemos un pulsador para poder activar vía inalámbrica el buzzer y el LED ubicados en la estación de Recepción (R).
Vamos a utilizar para desarrollar este proyecto un protocolo de comunicación inalámbrico conocido como ZigBee y propio de la empresa Digi, todo esto atraves  de unos módulos que implementan la comunicación inalámbrica ZigBee, estos son conocidos como módulos XBee.
ZigBee es un protocolo de alto nivel de comunicación inalámbrica para su utilización con radiodifusión digital de bajo consumo, basada en el estándar IEEE 802.15.4 de redes inalámbricas de área personal (wireless personal área network, WPAN). Su objetivo son las aplicaciones que requieren comunicaciones seguras con baja tasa de envío de datos y maximización de la vida útil de sus baterías. En principio, el ámbito donde se prevé que esta tecnología cobre más fuerza es en domótica, es por ello que nosotros hemos querido utilizarlo.
Los módulos XBee son versátiles a la hora de establecer diversas topologías de red, por lo que este ejemplo puede ayudar a plantear proyectos mas complejos.
Estos módulos habrá que configurarlos para definir los parámetros de la comunicación que vamos ha realizar, para lo que necesitaremos un software especifico, uno de ellos es el XCTU, que lo podemos encontrar en la web de la empresa, aunque existen varios y para diferentes sistemas operativos en internet.


MATERIALES:  
       
       Xbee explorer USB
       Cable USB-miniUSB

Estación de Emisión (E)
    XBee 1mW - Serie 1
    Shield XBee Wireless
    Arduino Uno
    Pulsador
    Protoboard

Estación de Recepción (R)
    XBee 1mW - Serie 1
    Shield XBee Wireless
    Arduino Uno
    LED
    Buzzer
    Protoboard


CÓDIGO:

Codigo del Emisor:
/* ARDUEFICIENCIA

  Este codigo es par la realizar un Timbre inalámbrico parte del EMISOR (E)


  Consiste en que  cada vez que se presione el pulsador se va a enviar un
  caracter,como el Arduino tiene conectado un módulo XBee este caracter se
  enviar de manera inalámbrica.
*/


//Declaramos el puerto de I/O

int boton = 2;  //Pin donde se encuentra el pulsador, entrada


void setup()
{
  Serial.begin(9600);    //Inicia comunicación serial
  pinMode(boton,INPUT);  //Configura el pulsador como una entrada
}


void loop()
{          

//Preguntamos si el pulsador esta oprimido

  if(digitalRead(boton)==HIGH){
    Serial.print('T');  //Imprime vía serial la letra 'T'
    delay(10);          //Retardo para no congestionar la escritura serial
  }

}
Codigo del Receptor:

/* ARDUEFICIENCIA

   Este codigo es par la realizar un Timbre inalámbrico parte del RECEPTOR (R)


  Consiste en estar a la escucha por el puerto serie y si recibe el caracter
  esperado en este caso la 'T', el programa activa el buzzer (alarma sonora)
  y activa el LED (alarma visual)

*/


//Declaramos el puerto de I/O

int buzzer=5; //Pin donde se encuentra el buzzer, salida
int led=13;   //Pin donde se encuentra el led, salida


void setup() //
{
  Serial.begin(9600);     //Inicia comunicación serial
  pinMode(buzzer,OUTPUT); //Configura el buzzer como una salida
  pinMode(led,OUTPUT);    //Configura el led como una salida
}

void loop()
{          

  // Pregunta si hay algún dato en el puerto serial
  if(Serial.available()>0){

    // Pregunta si el dato recibido es la letra 'T'
    if(Serial.read() == 'T'){   

      digitalWrite(buzzer,HIGH);  //Activa buzzer
      delay(10);                  //Retardo
      digitalWrite(buzzer,LOW);   //Apaga buzzer

      digitalWrite(led,HIGH);     //Activa led
      delay(10);                  //Retardo
      digitalWrite(led,LOW);      //Apaga led
    }
  }

}

"Fritzing"
                                                                     
                                

FOTOS:



OBSERVACIONES: 
Nosotros para la realización del proyecto hemos utilizado una Shield XBee Wireless en la que tenemos que fijarnos en un par de detalles.
Si nos fijamos en la imagen, tenemos varias zonas:

1 XBee Socket
2 Indicadores LED
3 Selección del pin serial de comunicación
4 Puente para el programar Arduino
5 Puente de tensión de operación 3.3V (Cuando se opera en 3.3V, instale el puente)

En la zona 3, dos puentes están colocados para conectar XBee_DIN, XBee_DOUT al pin digital de Arduino. Cuando XBee se comunica con Arduino lo hace por los puertos serie, si utilizamos los puertos serie, que  por defecto tenemos en el Arduino ( como es nuestro caso) colocamos los puentes uniendo DIN a D1, DOUT a D0, como en la imagen:


Para descargarse el XCTU:

Pagina para conocer los parámetros AT de configuración del Xbee:


AUTOR: Juan Carlos Obregón Crespo.  IES “EXTREMADURA”. Montijo

Dispositivos Arduino para la Eficiencia Energética

TÍTULO DEL PROYECTO:  CONTROL DE UN MOTOR DAHLANDER MEDIANTE UN ARDUINO UNO Y UNA PLACA SHIELD


MATERIALES: 
-        Placa de Arduino. UNO
-   Placa shield
-       Cable USB de conexión
-       1 módulo de 2 relés
-   3 Ccontactores
-   Un router o Una red con wifi



CÓDIGO:

//Ardueficiencia
//funciona con dos relés
#include <SPI.h>
#include <Ethernet.h>//Declaración de la direcciones MAC e IP. También del puerto 80

byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,1,100); //IP
EthernetServer servidor(80);
int PIN_LED1=8;
String readString1=String(30);
String state1=String(3);
int PIN_LED2=9;
String state2=String(3);


void setup()
{
  Ethernet.begin(mac, ip); //Inicializamos con las direcciones asignadas
  servidor.begin();
  pinMode(PIN_LED1,OUTPUT);
  digitalWrite(PIN_LED1,LOW);
  state1="OFF";
  pinMode(PIN_LED2,OUTPUT);
  digitalWrite(PIN_LED2,LOW);
  state2="OFF";

}

void loop()
{
  EthernetClient cliente= servidor.available();
  if(cliente)
  {
    boolean lineaenblanco=true;
    while(cliente.connected())//Cliente conectado
    {
      if(cliente.available())
      {
        char c=cliente.read();
        if(readString1.length()<30)//Leemos petición HTTP caracter a caracter
        {
          readString1.concat(c); //Almacenar los caracteres en la variable readString
     
        }
        if(c=='\n' && lineaenblanco)//Si la petición HTTP ha finalizado
        {
          int LED1 = readString1.indexOf("LED1=");
          int LED2 = readString1.indexOf("LED2=");
          if(readString1.substring(LED1,LED1+6)=="LED1=T")
          {
            digitalWrite(PIN_LED1,HIGH);
            state1="ON";
          } else if (readString1.substring(LED1,LED1+6)=="LED1=F")
          {
            digitalWrite(PIN_LED1,LOW);
            state1="OFF";
          }
          if(readString1.substring(LED2,LED2+6)=="LED2=T")
          {
            digitalWrite(PIN_LED2,HIGH);
            state2="ON";
          } else if (readString1.substring(LED2,LED2+6)=="LED2=F")
          {
            digitalWrite(PIN_LED2,LOW);
            state2="OFF";
          }
          if(readString1.substring(LED1,LED1+6)=="LED1=T")
          {
            digitalWrite(PIN_LED2,LOW);
            state2="OFF";
          }
          if(readString1.substring(LED2,LED2+6)=="LED2=T")
          {
            digitalWrite(PIN_LED1,LOW);
            state1="OFF";
          }
          //Cabecera HTTP estándar
          cliente.println("HTTP/1.1 200 OK");
          cliente.println("Content-Type: text/html");
          cliente.println();      
          //Página Web en HTML
          cliente.println("<html>");
          cliente.println("<head>");
          cliente.println("<title>MOTOR DAHLANDER</title>");
          cliente.println("Refresh: 5");
          cliente.println("</head>");
          cliente.println("<body width=300% height=300%>");
          cliente.println("<center>");
          cliente.println("<h1>MOTOR DAHLANDER</h1>");
         cliente.println("<h1 height=100% width=100%>");
          cliente.println("<body bgcolor=#97FC95 height=100% width=100%>");
          cliente.print("<br><br>");
          cliente.print("VELOCIDAD CORTA: ");
          cliente.print(state1);
          cliente.print("<br><br><br><br>");
          cliente.println("<input type=submit value=ON style=width:200px;height:175px onClick=location.href='./?LED1=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:175px onClick=location.href='./?LED1=F\'>");
          cliente.print("<br><br>");
          cliente.print("VELOCIDAD LARGA: ");
          cliente.print(state2);
          cliente.print("<br><br><br><br>");
          cliente.println("<input type=submit value=ON style=width:200px;height:175px onClick=location.href='./?LED2=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:175px onClick=location.href='./?LED2=F\'>");
          cliente.print("<br><br>");
          cliente.println("</center>");
          cliente.println("</body>");
          cliente.println("</html>");
          cliente.stop();//Cierro conexión con el cliente
          readString1="";
        }
      }
    }
   }
  }



"Fritzing"                                                                      
                                

FOTOS: 






   


OBSERVACIONES: 
Nosotros hemos utilizado un router que teníamos y hemos creado una red LAN sin conexión a internet, por lo tanto nuestro alcance, para conectarnos desde el teléfono móvil, es de un rango de unos 50 metros, suficiente para controlar el motor.

AUTOR: José Cerrato Barrero.  IES “EXTREMADURA”. Montijo
Dispositivos Arduino para la Eficiencia Energética

TÍTULO DEL PROYECTO:  CONTROL DE DOS LÁMPARAS DESDE UN MANDO A DISTANCIA, CONECTADAS A UN ARDUINO UNO.


MATERIALES: 
-        Placa de Arduino. UNO
-   Mando a distancia 
-       Cable USB de conexión
-       1 módulo de 2 relés
-   2 lámparas
-   Un sensor IR



CÓDIGO:
//Ardueficiencia
//Control de dos lámparas con un mando a distancia, conectadas a un arduino Uno
#include <IRremote.h>
#define RECV_PIN 3 //indicamos el pin por el que recibimos los datos del sensor
boolean encendido;  //Variable donde compruebo si el led esta encendido o no
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
     Serial.begin(9600);  //Comunicación por el puerto serie
     pinMode(4,OUTPUT);  //Pin 4 como salida
     pinMode(5,OUTPUT);  //Pin 5 como salida
     encendido=0;  //indicamos estado inicial (apagado);
     irrecv.enableIRIn(); // Iniciamos la recepcion
}

void loop()
{
       if (irrecv.decode(&results))// Si tenemos datos porque hemos pulsado una tecla en el mando
    {
      Serial.print("Codigo: 0x") ;
      Serial.println(results.value,HEX) ;//Mostramos por puerto serie el código en Hexadecimal
      if(results.value==16582903)//Comprobamos si es el valor de la TECLA nº1
      {                          //El valor introducido corresponde al valor decimal que hemos obtenido de la tecla nº 1 del mando
        if(encendido==1)//Comprobamos si está encendido el led
             {
                   digitalWrite(4,LOW);// Si lo está, lo apagamos
                   encendido=0;
             }
         
        else //si no, lo encendemos
             {
                  digitalWrite(4,HIGH);
                  encendido=1;
             }
      }
       delay(50); //retardamos de 50 ms para evitar que el código se lea dos veces en una pulsacion
       irrecv.resume(); // Recibimos el siguiente valor del sensor
        if(results.value==16615543)//Comprobamos si es el valor de la TECLA nº2
      {                          //El valor introducido corresponde al valor decimal que hemos obtenido de la tecla nº 2 del mando
        if(encendido==1)//Comprobamos si está encendido el led
             {
                   digitalWrite(5,LOW);// Si lo está, lo apagamos
                   encendido=0;
             }
         
        else //si no, lo encendemos
             {
                  digitalWrite(5,HIGH);
                  encendido=1;
             }
      }
        delay(50); //retardamos de 50 ms para evitar que el código se lea dos veces en una pulsacion
        irrecv.resume(); // Recibimos el siguiente valor del sensor
    }
}





"Fritzing"                                                                      
                                

FOTOS: 





   


OBSERVACIONES: 
Lo primero que tenemos que hacer es obtener los valores de cada una de las teclas del mando que queramos utilizar. Estos los códigos obtenidos del mando que he utilizado.




AUTOR: José Cerrato Barrero.  IES “EXTREMADURA”. Montijo
Dispositivos Arduino para la Eficiencia Energética

TÍTULO DEL PROYECTO:  CONTROL DE LÁMPARAS MEDIANTE PALMADAS, CONTROLADAS POR UN SENSOR DE SONIDO, CONECTADAS A UN ARDUINO UNO.


MATERIALES: 
-        Placa de Arduino. UNO 
-       Cable USB de conexión
-       1 módulo de 2 relés
-   2 lámparas
-   1 sensor de sonido



CÓDIGO:
//Ardueficiencia
//Control de dos lámparas con un sensor de sonido, conectadas a un arduino Uno
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);
       
}






"Fritzing"                                                                      
                                

FOTOS: 

OBSERVACIONES: 
Al dar una palmada o hacer algún ruido se enciende la lámpara o lámparas conectadas y al dar dos palmadas, se apagan las lámparas que estén conectadas a la instalación.




AUTOR: Lucas Corzo.  IES “EXTREMADURA”. Montijo




3 comentarios:

  1. Hoy hemos tenido nuestra primera reunión todo el grupo, hemos comenzado a organizarnos y a repartir tareas. Es un proyecto muy ambicioso pero con estos alumnos se puede conseguir cualquier cosa.
    Un saludo .

    ResponderEliminar
  2. Hoy, los alumnos que no tenían ninguna experiencia con Arduino, se han reunido por segunda vez, han instalado el programa, han cargado el "Hola Mundo" y están traduciendo y cambiando las configuraciones para practicar un poco con la estructura del programa.

    ResponderEliminar
  3. Estamos terminando nuestras placas solares para poder cargar el móvil o conectar nuestros Arduinos. La experiencia está resultando muy bonita y los alumnos están muy animados, nos hemos reunido varias tardes y hay mucha participación.

    ResponderEliminar