Arduino (IoT): Simple Tutorial Estación Ambiental: Solar Parte III

Arduino Honduras Santiapps Marcio Valenzuela

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:

  1. Computadora (mac)
  2. Arduino UNO & Nano
  3. Battery LiPo
  4. Modulo Carga Solar USB-LiPo
  5. DC-DC Booster
  6. DHT11
  7. Modulo RF 433MHz(Rx/Tx)
  8. 2 Breadboards
  9. LCD 16×2
  10. 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í:

//#include <Wire.h> // Wire library para i2c (A4 = SDA &amp; 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&gt;");
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, &amp;buflen)){
lcd.print("Got one!");
digitalWrite(led, HIGH);
delay(100);
int i;
// Mensaje con checksum correcta recibida, botar.
for (i = 0; i &lt; buflen; i++){
// Llenar Msg Char array con chars del buffer.
MsgReceived[i] = char(buf[i]);
Serial.print(MsgReceived[i]);
}
sscanf(MsgReceived, "%d,%d,%d",&amp;humidity, &amp;temp,&amp;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");
}

Perfecto!  Veamos el proyecto final:

Arduino Tutorial Estación Ambiental Santiapps Marcio Valenzuela
Arduino Tutorial Estación Ambiental

 

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!
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s