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. |
|
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*/
// Cerramos llaveEsto 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 } 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 |
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 */
Se pueden modificar los
tiempos de encendido y apagado del led, cambiando el tiempo en “delay”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. |
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: 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> </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> </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> </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> </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> </p>"); cliente.println("</body>"); cliente.println("</html>"); cliente.stop(); readString=""; } } } } } |
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> </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> </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> </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> </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> </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> </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> </p>"); cliente.println("</body>"); cliente.println("</html>"); cliente.stop(); readString=""; } } } } } |
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.
|
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
}
}
}
|
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=""; } } } } } |
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 } } |
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); } |
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
|
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.
ResponderEliminarUn saludo .
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.
ResponderEliminarEstamos 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