1. Estación meteorológica con Arduino
Con unos pocos sensores, una pantalla y Arduino podemos montar nuestra propia estación meteorológica casera que además nos dará la hora.
1.1 Materiales
Los materiales que vamos a utilizar son:
● Arduino (UNO, Nano, Mini...)
● Sensor de humedad DHT11
● Sensor de temperatura LM35
● Reloj de tiempo real
● Display LCD I2C de 128 x 64
El sensor DHT11 también es capaz de medir temperaturas, pero solamente si están por encima de 0ºC. Si no necesitamos registrar valores por debajo de cero podemos prescindir del sensor LM35.
|
|
Hemos elegido un display I2C para ahorrar pines del Arduino y simplificar el montaje.
1.2 Hardware
Veamos cómo combinar estos elementos para crear nuestra estación meteorológica:
El primer componente que vamos a conectar es el sensor de temperatura LM35 (opcional si no necesitamos leer temperaturas por debajo de los 0ºC)
Se trata de un sensor analógico, por cada grado de temperatura deja pasar 10mV por su segunda patilla. Utilizaremos una de las entradas analógicas de Arduino para leer este valor y poder calcular así la temperatura.
Cómo podemos ver en el esquema el montaje es muy sencillo, de izquierda a derecha la primera patilla es de alimentación y se conecta a los 5V, la segunda es la que nos entrega un valor en función de la temperatura y la conectaremos en A0 y la tercera se conecta a GND.
Este sensor ya está listo para funcionar.
|
|
Ahora conectaremos el sensor de humedad y temperatura DHT11. Este sensor únicamente tienen una patilla para mandar la información y nosotros por software le preguntaremos por la temperatura o la humedad según lo que necesitemos en cada momento.
Este sensor es capaz de medir un rango de humedad de entre el 20% y el 80% y temperaturas entre los 0ºC y 50ºC. Con el mismo esquema podemos sustituirlo por el modelo DHT22, capaz de tomar lecturas de humedad de entre 0% y 100% y temperaturas de entre -40ºC y 80ºC, aunque su precio es algo superior.
|
|
Ahora conectaremos el modulo de reloj de tiempo real. Este nos permitirá conocer la fecha y la hora cuando lo necesitemos, incluso si hemos interrumpido la alimentación del Arduino ya que el modulo tiene su propia batería para seguir funcionando.
La conexión es muy sencilla:
Pin de Arduino
|
Pin del modulo
|
A4
|
SDA
|
A5
|
SCL
|
5V
|
5V
|
GND
|
GND
|
|
|
Finalmente conectaremos la pantalla en la que mostraremos toda la información recopilada por los sensores.
Hemos elegido una pantalla I2C. Estas pantallas llevan un pequeño controlador integrado, lo que nos permite utilizar todo su potencial con únicamente 4 pines de Arduino.
Lo mejor es consultar las especificaciones de tu pantalla antes de conectarla, pero el esquema que te presentamos es el más común para la mayoría de los fabricantes.
Pin del display
|
Pin de Arduino
|
1
|
GND
|
2
|
5V
|
4
|
D10
|
5
|
D11
|
6
|
D13
|
15
|
GND
|
|
|
Al final todo el montaje junto debería ser parecido a este:
Podemos alimentar todo el montaje con una pila de 9V, conectando el (+) al Vin y (-) a GND
1.3 Programación
Con este esquema montado ya tenemos todo lo necesario para hacerlo funcionar, ahora veamos la programación básica que necesitamos para mostrar la información en nuestra pantalla.
Este programa hace uso de varias librerías para simplificar la programación de los componentes, puedes descargar las librerías necesarias para ejecutar este código desde las paginas de descarga de sus mantenedores:
U8glib para manejar el display, https://code.google.com/p/u8glib/
DHT-sensor-library de adafruit, https://github.com/adafruit/DHT-sensor-library
RTClib de adafruit, https://github.com/adafruit/RTClib
//Llamamos a las librerias que vamos a necesitar
#include //Libreria grafica para el display
#include "DHT.h" //cargamos la librería DHT
#include //libreria para comunicacion I2C
#include "RTClib.h" //libreria del reloj real
//CONFIGURACIONES
#define DHTPIN 6 //Seleccionamos el pin en el que se //conectará el sensor
#define DHTTYPE DHT11 //Se selecciona el DHT11 (hay //otros DHT)
#define setFont_M u8g.setFont(u8g_font_fixed_v0r)//tamaño de letra mediano
#define setFont_L u8g.setFont(u8g_font_7x13)//tamaño de letra grande
#define setFont_S u8g.setFont(u8g_font_chikitar)//tamaño de letra pequeño
//DECLARACION DE OBJETOS
RTC_DS1307 RTC;//Objeto para acceder al reloj real
DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que será usada por Arduino para comunicarse con el sensor
U8GLIB_ST7920_128X64 u8g(13, 11, 10, U8G_PIN_NONE); //Configuramos el display
void draw(void) {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 0, 22, "Iniciando....");
}
void setup(){
u8g.drawStr( 0, 22, "Iniciando....");
delay(1000);
Serial.begin(9600); // Debugging only
Serial.println("setup");
dht.begin(); //Se inicia el sensor de temperatura y humedad
//inicializar reloj
Wire.begin();//Inicializamos la librería wire
RTC.begin();//Inicializamos el módulo reloj
RTC.adjust(DateTime(__DATE__, __TIME__));//poniendo el reloj en hora
//Conexion con el display
if ( u8g.getMode() == U8G_MODE_R3G3B2 ){u8g.setColorIndex(255);}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ){u8g.setColorIndex(3);}
else if ( u8g.getMode() == U8G_MODE_BW ){u8g.setColorIndex(1);}
}
void loop(){
DateTime now = RTC.now();//Creamos un objeto que contiene la hora y fecha actual
u8g.firstPage();
do {
//Bucle con el que pintamos la pantalla
u8g.setFont(u8g_font_unifont);
u8g.setFontPosTop();
//RELOJ
u8g.setPrintPos(0,1);
u8g.print(now.hour(), DEC);//Mostramos la hora
u8g.print(":");//Dos puntos para separar horas de minutos
u8g.print(now.minute(), DEC);//Mostramos los minutos
u8g.drawHLine(0, 1+14, 40);//Linea de separacion
setFont_M;//Tipo de letra pequeño
//mostramos la temperatura interior
u8g.setPrintPos(0,30);//Nos colocamos en la posicion del display donde queremos escribir
u8g.print(dht.readTemperature());//temperatura interior con el sensor DHT11
u8g.print(" ºC");//Mostramos la unidades
//mostramos la humedad interior
u8g.setPrintPos(0,45);
u8g.print(dht.readHumidity());//humedad interior
u8g.print(" %");
} while( u8g.nextPage() );
}
Si quieres ampliar y añadir nuevas funciones a tu estación meteorológica te invitamos a que sigas el repositorio de github (https://github.com/trastejant/Estacion-Meteorologica) en él encontrarás un software mucho más completo y podrás seguir las actualizaciones y mejoras que se realicen.
¡Y por supuesto te animamos a participar de su desarrollo!
1.4 Amplia y experimenta
Ya tienes funcionando una estación meteorológica básica, ahora es el momento de que trastees con ella y aumentes sus posibilidades, por ejemplo puedes añadir un barómetro para conocer la presión atmosférica, sensores para medir la contaminación del aire, o incluir un bluetooth para conectarte desde tu dispositivo móvil y tener toda la información en tiempo real. ¡El limite ahora lo pones tu!
2. Lampara RGB Bluetooth
Una lampara RGB es aquella que contiene bombillas de luz roja, verde y azul (de ahí su nombre, por las siglas en ingles de Red, Green y Blue) con estos tres colores combinados podemos conseguir todo el espectro de luz, de ahí que sean un elemento muy interesante no solo decorativo, sino también en cromoterapia y técnicas de relajación.
Vamos a descubrir cómo montar nuestra propia lampara RGB que además podremos controlar desde un dispositivo Android.
2.1 Materiales
- Arduino (UNO, Nano, Mini...)
- Led de alta luminosidad roja
- Led de alta luminosidad verde
- Led de alta luminosidad azul
- Resistencia 68 ohm
- Resistencia 680 ohm
- Resistencia 680 ohm
- Resistencia 4.7kOhm
- Resistencia 100Ohm
- Modulo Bluetooth HC06
- Pila de 9V
|
|
2.2 Hardware
Podemos montar una versión muy sencilla simplemente con este esquema:
Conectaremos la pata más larga del led a una salida PWM de Arduino para poder controlar la intensidad con la que brillará el led. Esta conexión la haremos atraves de una resitencia para evitar dañar el led, estas son:
Led rojo: 180 Ohm
Led verde: 680 Ohm
Led Azul: 68 Ohm
El modulo Bluetooth tenemos que conectarlo cruzando las lineas Rx y te Tx de Arduino y del propio modulo, de tal forma que el Rx de Arduino irá al Tx del modulo y el Rx del modulo al Tx de Arduino. Estos módulos se alimentan con 3.3V, así que es muy importante no confundirnos al conectar la alimentación ya que podríamos dañar el módulo de forma irreversible. También utilizaremos dos resistencia de 4.7kOhm y 100Ohm entre el Rx del modulo y el Tx del Arduino para crear un divisor de tensión que nos ahorre este montaje.
Nota: El HC-06 también se vende en formato modulo e incluye todo lo necesario para conectarlo directamente a Arduino, sin necesidad de divisor de montaje.
2.3 Software
Ahora tenemos que cargar en Arduino el programa que haga funcionar a la lampara, bastará con algo así para una primera versión básica:
//Definimos los pines a los que vamos a conectar los leds
#define RED 9
#define GREEN 10
#define BLUE 11
void setup() {
//Definimos los pines de los leds como salida
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
//Configuramos la conexion via Bluetooth
Serial.begin(9600);
Serial.println("Ready");
Serial.flush();
}
void loop(){
// Esperamos ha recibir datos.
if (Serial.available()){
// La funcion read() devuelve un caracter
int command = Serial.read();
Serial.flush();
// Comprobamos el comando recibido y mostramos la acción que se debe hacer
char orden = char(command);
switch (command) {
//Si recibe un 0 apaga todo
case '0':
digitalWrite(RED, LOW);
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, LOW);
break;
//Si recibe un 1, enciende el led Rojo
case '1':
analogWrite(RED, 255);
break;
//Si recibe un 2, enciende el led Verde
case '2':
analogWrite(GREEN, 255);
break;
//Si recibe un 3, enciende el led azul
case '3':
analogWrite(BLUE, 255);
break;
default:
//Si recibe cualquier otra cosa lo devuelve
Serial.println(command);
break;
}
}
delay(10);
}
Con esto únicamente podrás encender o apagar los leds, si quieres una versión más avanzada y con más opciones podrás encontrarla en el repositorio de gitHub de este proyecto (https://github.com/trastejant/Lampara_RGB).
Puedes utilizar la aplicación BlueTerm para Android para mandar directamente los valores que deseas o la TrasLight para controlar la lampara, ambas podrás encontrarlas en el Market de Android. También puedes crear tu propia aplicación adaptada a tus gustos.
2.4 Mejoras
Hasta ahora tenemos una lampara RGB que podemos controlar vía bluetooth, pero es una versión muy simple, que no es capaz de dar mucha intensidad de luz. Podemos crear una lampara mucho más potente con unas sencillas mejoras. Necesitaremos añadir:
- 1 Tira de Led Rojos
- 1 Tira de Led Verdes
- 1 Tira de Led Azul
- 1 Tira de Led Blanco
- 4 Transistores
- 4 Resistencia 2k2
- 4 Diodos 1N4001
Podríamos prescindir de la tira de leds blancos, ya que este color puede lograrse mediante los otros tres colores, pero no conseguiríamos que todas las luces fuesen uniformes, ya que de ese modo tendríamos la intensidad combinada de las tres tiras de led.
Estas tiras de led funcionan a 12V, por eso necesitamos los transistores para que hagan de interruptor, enviando 12V de la alimentación a los leds cuando reciban 5V del Arduino.
El montaje sería así:
¡Ahora es tu turno para conseguir mejorar, ampliar y compartir tu lampara RGB bluetooth!