Hola, aca abro un nuevo hilo para una consulta.... en el cole se adquirio esta estacion
conecto todo a traves de la placa weather link y pruebo con el sketch que viene..
al y el agua que le entro no me lo manda al monitor serie... ademas de no entender las lineas que usa quisiera saber como podria descartar que sea problema del sensor o de mi falta de conocimiento...
Por ejemplo dice lluvia acumulada en una hora.... como podria cambiarlo a 5 minutos....
Bueno... fueron 2 preguntas.... saber si funciona el sensor y cambiar el tiempo
No tengo experiencia con pluviometros,unicamente se me ocurre que verifiques los cables de conexion rx,tx .En el esquema el cable que sale del pin 6 del arduino (rx) debe ir al pin tx de la placa weather link y el que sale del pin 7 (tx) al rx de la placa link.Ademas en el sketch que ponen aumentan la velocidad del Serial a 115200,no tendria que influir en que funcione o no ,pero si se escriben muchos datos en el serial monitor y convendria que lo cambiaras:
Serial.begin(115200);
Recuerda cambiarlo tambien en la ventana del serial monitor.
Aca encontre un scketch que modifique y al parecer funciona... digo al parecer porque quisiera modificarle la funcion del pluviometro y que en vez de una hora sea 5 minutos o 1 minuto... para poder probarlo de manera mas directa... yo lo toque y deje comentado el original...
subo todo completo por si a alguien le viene bien y si alguien me da otra mano mas que agradecida
#include <Ethernet.h>
char databuffer[35];
double temp;
// Configuracion del Ethernet Shield
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Direccion MAC
byte ip[] = { 192,168,1,117 }; // Direccion IP del Arduino
byte server[] = { 192,168,1,10 }; // Direccion IP del servidor
EthernetClient client;
int Direccion;
float velocidad;
float vel_max;
float temperatura;
float OneHour;
float OneDay;
float presion;
int humedad;
String envioDatos = "GET /estacion/captura.php?";
#define parametro0 "&WindDirection="
#define parametro1 "&WindSpeedAverage="
#define parametro2 "&WindSpeedMax="
#define parametro3 "&Temperature="
#define parametro4 "&RainfallOneHour="
#define parametro5 "&RainfallOneDay="
#define parametro6 "&BarPressure="
#define parametro7 "&Humidity="
void getBuffer() //Get weather status data
{
int index;
for (index = 0;index < 35;index ++)
{
if(Serial.available())
{
databuffer[index] = Serial.read();
if (databuffer[0] != 'c')
{
index = -1;
}
}
else
{
index --;
}
}
}
int transCharToInt(char *_buffer,int _start,int _stop) //char to int)
{
int _index;
int result = 0;
int num = _stop - _start + 1;
int _temp[num];
for (_index = _start;_index <= _stop;_index ++)
{
_temp[_index - _start] = _buffer[_index] - '0';
result = 10*result + _temp[_index - _start];
}
return result;
}
int WindDirection() //Wind Direction
{
return transCharToInt(databuffer,1,3);
}
float WindSpeedAverage() //air Speed (1 minute)
{
temp = 0.44704 * transCharToInt(databuffer,5,7);
return temp;
}
float WindSpeedMax() //Max air speed (5 minutes)
{
temp = 0.44704 * transCharToInt(databuffer,9,11);
return temp;
}
float Temperature() //Temperature ("C")
{
temp = (transCharToInt(databuffer,13,15) - 32.00) * 5.00 / 9.00;
return temp;
}
float RainfallOneHour() //Rainfall (1 hour)
{
// temp = transCharToInt(databuffer,17,19) * 25.40 * 0.01;
temp = transCharToInt(databuffer,5,7) * 25.40 * 0.01; //Rainfall (1 min)
return temp;
}
float RainfallOneDay() //Rainfall (24 hours)
{
temp = transCharToInt(databuffer,21,23) * 25.40 * 0.01;
return temp;
}
int Humidity() //Humidity
{
return transCharToInt(databuffer,25,26);
}
float BarPressure() //Barometric Pressure
{
temp = transCharToInt(databuffer,28,32);
return temp / 10.00;
}
void setup()
{
Ethernet.begin(mac, ip); // Inicializamos el Ethernet Shield
delay(1000); // Esperamos 1 segundo de cortesia
// mySerial.begin(9600);
Serial.begin(9600);
}
void loop()
{
getBuffer(); //Begin!
Serial.print("Wind Direction: ");
Serial.print(WindDirection());
Serial.println(" ");
Serial.print("Average Wind Speed (One Minute): ");
Serial.print(WindSpeedAverage());
Serial.println("m/s ");
Serial.print("Max Wind Speed (Five Minutes): ");
Serial.print(WindSpeedMax());
Serial.println("m/s");
Serial.print("Rain Fall (One Hour): ");
Serial.print(RainfallOneHour());
Serial.println("mm ");
Serial.print("Rain Fall (24 Hour): ");
Serial.print(RainfallOneDay());
Serial.println("mm");
Serial.print("Temperature: ");
Serial.print(Temperature());
Serial.println("C ");
Serial.print("Humidity: ");
Serial.print(Humidity());
Serial.println("% ");
Serial.print("Barometric Pressure: ");
Serial.print(BarPressure());
Serial.println("hPa");
Serial.println("");
Serial.println("");
Direccion = WindDirection();
velocidad=WindSpeedAverage();
vel_max=WindSpeedMax();
temperatura=Temperature();
OneHour=RainfallOneHour();
OneDay=RainfallOneDay();
presion=BarPressure();
humedad = Humidity();
Serial.println("Conectando...");
if (client.connect(server, 80)>0) { // Conexion con el servidor
// client.print("GET /estacion/captura.php?"); // Enviamos los datos por GET
envioDatos += String(Direccion) + parametro1 + String(velocidad) + parametro2 + String(vel_max) + parametro3 + String(temperatura) + parametro4 + String(OneHour) + parametro5 + String(OneDay) + parametro6 + String(presion) + parametro7 + String(humedad); // Aca capturo todos los datos
client.print(envioDatos);
// client.print("GET /estacion/captura.php?WindDirection=WindDirection()&WindSpeedAverage=11&WindSpeedMax=WindSpeedMax()&Temperature=Temperature()&RainfallOneHour=RainfallOneHour()&RainfallOneDay=55&BarPressure=66&Humidity=77");
// put your setup code here, to run once:
client.println(" HTTP/1.0");
client.println("User-Agent: Arduino 1.0");
client.println();
Serial.println("Conectado");
} else {
Serial.println("Fallo en la conexion");
}
if (!client.connected()) {
Serial.println("Desconectando!");
}
client.stop();
client.flush();
// delay(300000); // Espero 5 minutos antes de tomar otra muestra
delay(60000);//1min
}
Hecha un ojo al ejemplo que viene con el ide Archivo->Ejemplos->02.Digital->BlinkWithoutDelay donde veras como tarbajar con la funcion millis() en vez de con delay() para no bloquear el Arduino el tiempo entre lecturas y poder hacer otras cosas.
Seguramente eso es una informacion que proviene de la estacion metereologica y el formato es ese ,en horas o 24h porque supongo que internamente tendra algun tipo de reloj que solo actualiza los datos cada hora contabilizando el agua de alguna manera que desconozco...Seria como conocer el consumo de un coche a los 100km cuando solo has recorrido 10km,si no sacas la gasolina que queda y la restas a la que habia no puedes hacer un calculo.....
Vaya Anabel.... hay que leer un poco. Esta muy clarito en la información de la estación meteorológica
Dice cuando vas a como envia la información lo siguiente
Format of Data Output
It outputs 37 bytes per second, including the end CR/LF.
Data Parser:
c000:air direction, degree
s000:air speed(1 minute), 0.1 miles per hour
g000:air speed(5 minutes), 0.1 miles per hour
t086:temperature, Fahrenheit
r000:rainfall(1 hour), 0.01 inches
p000:rainfall(24 hours), 0.01 inches
h53:humidity,% (00%= 100)
b10020:atmosphere,0.1 hpa
NOTE: The board will make a hardware self-check before it works, it will output “...” when it doesn’t detect the related devices. For example, If the temperature & humidity sensor and barometer are not installed or broken, it will output:c000s000g000t...r000p000h..b.....
Como es posible que ahora creas que viento y lluvia caida comparten los mismos bytes?
En el código el databuffer en las posiciones 5,7 corresponde a viento y ahora lo usas para lluvia caida?
Cambia el factor pero es lo mismo. Además el resultado esta en lluvia por hora y el siguiente por dia.
Ahora al final se lee 25.40 que es la conversión de una pulgada en mm y el 0.01 que debe ser para volverlo con el punto decimal correcto.
Entonces los bytes 17 a 19 te entregan la lluvia caida x hora.
Ahi no puedes hacer nada.
Bueno la estación te manda una cadena de bytes separados por letras que identifican cosas diferentes.
La secuencia ya la puse.
En tu caso no puedes cambiar como lo envía, ni la cadencia que tiene, al menos por lo poco que leí.
Tiene un código ejemplo en la web de openhack, usalo y debería funcionar bien.
Lo que haría sería monitorear los valores a cada minuto en un momento que este lloviendo a ver si puedes observar cambios
Tal vez puedas hacer algo viendo la diferencia.