
Tutorial Estación Ambiental Solar: Parte III
Ya tenemos la unidad de muestreo. Ahora veamos la unidad central encargada de recibir los datos y mostrarlos en el LCD.
Requisitos:
- Computadora (mac)
- Arduino UNO & Nano
- Battery LiPo
- Modulo Carga Solar USB-LiPo
- DC-DC Booster
- DHT11
- Modulo RF 433MHz(Rx/Tx)
- 2 Breadboards
- LCD 16×2
- Arduino IDE (https://www.arduino.cc/en/Main/Software)
Finalmente llegamos a la Unidad Central o de Recepción de datos.
Unidad Central:
- Rx RF de 433MHz para recepción y almacenamiento
- Arduino UNO
La Unidad Central es la que recibirá los datos. Como tal puede operar de una UNO completa ya que su consumo energético es mas grande pero podría estar conectada a un tomacorriente con USB.
El código del receptor seria mas o menos así:
[code]
//#include <Wire.h> // Wire library para i2c (A4 = SDA & A5 = SCL)
//#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C library para control LCD en i2c protocol
#include <VirtualWire.h> // Virtual library para decode señal de Rx
#include <LiquidCrystal.h>
byte thermometer[8] = { //icono para thermometer
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};
byte droplet[8] = { //icono para gota
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};
byte hi[8]= {//icono para indice de calor
0B00000,
0B00000,
0B10101,
0B01110,
0B11111,
0B01110,
0B10101,
0B00000,
};
//(addr, EN,RW,RS,D4,D5,D6,D7,BL,BLpol)
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //cambiar address según i2c
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//borrowed from library examples LCDI2C
//LiquidCrystal_I2C lcd(0x27, 16, 2);
// Sensores
int humidity=0;
int temp=0;
int heat_index=0;
char MsgReceived[21];
int led = 13; //pin para LED
void setup(){
lcd.begin(16,2);
lcd.print(“Estacion Ambtl>”);
lcd.setCursor(0,1);
lcd.print(“loading…”);
pinMode(led, OUTPUT);
delay(2000);
// VirtualWire
// Set rx pin first so setup wont conflict with default set from vw library
vw_set_rx_pin(9);
// Bits por seg
vw_setup(2000);
// Iniciar el receptor PLL funcionando
vw_rx_start();
lcd.createChar(1, thermometer);
lcd.createChar(2, droplet);
lcd.createChar(3, hi); // only 2 rows!
Serial.begin(19200);
} // END void setup
void loop(){
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
//Tomar data de control base
lcd.setCursor(0,1);
lcd.print(“Listening…”);
if (vw_get_message(buf, &buflen)){
lcd.print(“Got one!”);
digitalWrite(led, HIGH);
delay(100);
int i;
// Mensaje con checksum correcta recibida, botar.
for (i = 0; i < buflen; i++){
// Llenar Msg Char array con chars del buffer.
MsgReceived[i] = char(buf[i]);
Serial.print(MsgReceived[i]);
}
sscanf(MsgReceived, “%d,%d,%d”,&humidity, &temp,&heat_index); // Converts a string to an array
digitalWrite(led, LOW);
lcd_display();
memset( MsgReceived, 0, sizeof(MsgReceived));// This line is for reset the StringReceived
}
}
void lcd_display() {
//lcd.setCursor(1,0);
//lcd.print(“WEATHER STATION “);
lcd.setCursor(0,1);
//lcd.print(“T”);
//lcd.setCursor(1,1);
lcd.write(1);
lcd.setCursor(1, 1);
lcd.print(temp);
lcd.write(0b11011111);
lcd.print(“C”);
//lcd.setCursor(6,1);
//lcd.print(“H”);
lcd.setCursor(6, 1);
lcd.write(2);
lcd.setCursor(7, 1);
lcd.print(humidity);
lcd.print(“%”);
//lcd.setCursor(11,1);
//lcd.print(“HI”);
lcd.setCursor(11, 1);
lcd.write(3);
lcd.setCursor(12, 1);
lcd.print(heat_index);
lcd.write(0b11011111);
lcd.print(“C”);
}[/code]
Perfecto! Veamos el proyecto final:

Ahora podemos muestrear periódicamente mientras nuestra Unidad de Carga alimenta la Unidad de Muestreo, la Unidad Central recibe los datos. Necesitaríamos hacer algo con esos datos en la Unidad Central. Los podríamos transmitir por WiFi, GPRS, BT, almacenarlos en una SD card o en este caso, mostrarlos en una LCD o TFT.
Para estos proyectos es importante poder calcular la capacidad de almacenamiento energético de las baterías y la capacidad de carga de los paneles. Tenemos que poder producir suficiente energía durante el día para almacenar para toda la noche y así mismo tenemos que tener un almacén suficientemente grande para toda la noche. Para ellos es vital conocer el consumo de nuestros componentes.
Como estimar la duración de nuestra batería:
Iavg = (Ton*Ion + Tsleep*Isleep ) / (Ton +Tsleep)
Ton (arduino activa ) = 250 ms =0.25s and Ion = 16mA
Tsleep = 5min =300s and Isleep = 200 uA (approx)
Iavg = 0.205 mA
Operating Voltage =5 V
Pavg=VxIavg =5x.205=1.026 mW
Li Ion battery capacity =3000 mAh
Battery voltage =3.7V
Power =3.7×3000=11100 mWh
Battery life = 11100/1.026 =10,818.7 hours = 15 meses mas o menos
Que podemos hacer con esta tecnología:
- Dar autonomía energética a nuestros proyectos de exploración, monitoreo u otra función remota!