
Tutorial Estación Ambiental Solar: Parte II
Ahora que tenemos nuestra fuente de poder podemos armar nuestra unidad de muestreo. Esta se encargará de tomar las mediciones y por ende necesitará autonomía energética. Aquí también veremos el uso de la librería LowPower, la cual nos ayudará a ahorrar energía mientras la unidad no este maestreando. Es decir, la mayoría de las veces solo tenemos que muestrear 1 o 2 veces cada hora. El resto del tiempo podemos reducir la cantidad de energía consumida ya que no es necesario alimentar todos los componentes.
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)
En la edición anterior armamos nuestra Unidad de Carga. Ahora veamos la Unidad que recopilará y enviará los datos muestreados.
Unidad de Muestreo:
- Arduino UNO – Nano
- DHT11
- Tx RF de 433MHz para transmisión de datos
La Unidad de Muestreo estará a cargo de tomar las muestras y reportarlas via RF a la Unidad Central. Esta es sencilla y podemos hacerla en una breadboard asi:

El código para muestra y transmitir llevará un bloque especial para ahorrar energía. Usaremos una librería llamada el LowPower Library que esta disponible en GitHub:
Se usa mas o menos asi:
#include “LowPower.h” // importar la libreria
int led = 13; // Para ilustrar
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH); //Encendemos la LED
LowPower.powerDown(SLEEP_1S, ADC_OFF, BOD_OFF); // en lugar de delay(1000) ;
digitalWrite(led, LOW); //Apagamos la LED
LowPower.powerDown(SLEEP_1S, ADC_OFF, BOD_OFF); // en lugar de delay(1000) ;
}
Veamos el codigo de muestrear y transmitir los datos usando esta librería. El muestreo se hace así:
[code]
// Envío de Datos y Dormir Modulo
#include <VirtualWire.h>
#include “LowPower.h”
#include “DHT.h”
#define DHTPIN 8 // Pin para el DHT11
#define DHTTYPE DHT11 // Objeto DHT 11
DHT dht(DHTPIN, DHTTYPE);
int ledPin = 13;
char Msg[30];// Para el string que enviaremos por el RF
void setup(){
dht.begin(); // initializar el DHT11
pinMode(ledPin,OUTPUT);
// VirtualWire
vw_setup(2000); // Bits por seg
vw_set_tx_pin(12);// Settear Tx pin. Default es 12
Serial.begin(19200);
}
void loop() {// Leer y almacenar data
int humidity = dht.readHumidity();
int temp = dht.readTemperature();
int f = dht.readTemperature(true);
int hi_f = dht.computeHeatIndex(f,humidity); //Indice calor en F
int heat_index =(hi_f-32)*5/9; // conversión a C
sprintf(Msg, “%d,%d,%d”, humidity,temp ,heat_index);
// Encender LED para mostrar Tx
digitalWrite(ledPin, HIGH);
delay(100);
Serial.print(“About to send message”);
vw_send((uint8_t *)Msg, strlen(Msg));
//print message
Serial.print(“The message is”);
Serial.print(Msg);
vw_wait_tx(); // Esperar hasta que todo el string se transmita
// Apagar luz después de transmision
digitalWrite(ledPin, LOW);
Serial.print(“Message sent!”);
// Dormir durante 5 minutos
// As low power library support maximum 8s ,we use for loop to take longer (5mins) sleep
// 5×60=300
//300/4=75
for(int i=0;i<75;i++){
LowPower.powerDown(SLEEP_4S, ADC_OFF, BOD_OFF); // En lugar de delay(4000);
}
}[/code]
La unidad se ve así:

En la siguiente parte cubriremos la Rx y platicaremos sobre cubrir necesidades energéticas de nuestros módulos.