Pluviometro no sensa

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

Aca el scketch original

#include <SoftwareSerial.h>

SoftwareSerial mySerial(6, 5); // RX, TX

char databuffer[35];
double temp;

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
}

void loop() {
  getBuffer();
  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(" porciento");
  Serial.print("Barometric Pressure: ");
  Serial.print(BarPressure());
  Serial.println("hPa");
  Serial.println("");
  Serial.println("");
}

void getBuffer(){
  int index;
  for(index = 0;index < 35;index++){
    if(mySerial.available()){
      databuffer[index]=mySerial.read();
      if(databuffer[0] != 'c'){
        index=-1;
      }
    }else{
      index--;
    }
  }
  Serial.print(databuffer);
}

int transCharToInt(char *_buffer, int _start, int _stop){
  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(){
  return transCharToInt(databuffer,1,3);
}

float WindSpeedAverage(){
  temp = 0.44704 * transCharToInt(databuffer,5,7);
  return temp;
}

float WindSpeedMax(){
  temp = 0.44704 * transCharToInt(databuffer,9,11);
  return temp;
}

float Temperature(){
  temp = (transCharToInt(databuffer,13,15) - 32.00) * 5.00 / 9.00;
  return temp;
}

float RainfallOneHour(){
  temp = transCharToInt(databuffer,17,19) * 25.40 * 0.01;
  return temp;
}

float RainfallOneDay(){
  temp = transCharToInt(databuffer,21,23) * 25.40 * 0.01;
  return temp;
}

int Humidity(){
  return transCharToInt(databuffer,25,26);
}

float BarPressure(){
  temp = transCharToInt(databuffer,28,32);
  return temp / 10.00;
}

Nuevamente Gracias!!

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.

Gracias por la respuests..lo pruebo y comento.

Lo he probado y con esa velocidad ni siquiera me levanta el serial.....
no hay manera que me sense el pluviometro

Otra consulta.... de puro burra quizas.... se podria desconectar del rj11 e incluirlo en algun pinout directo al arduino??
Gracias!!!

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.

Hola... ya ese tema lo tengo visto, espero implementarlo para luego, una vez que sense como necesito quitare esa funcion...

especificamente esto

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;
}

Muchas gracias!

analoyra:
Hola... ya ese tema lo tengo visto, espero implementarlo para luego, una vez que sense como necesito quitare esa funcion...

especificamente esto

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;
}




Muchas gracias!

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

[color=blue]c000s000g000t086r000p000h53b10020 [/color]

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?

float WindSpeedAverage()                                                             //air Speed (1 minute)
{
  temp = 0.44704 * transCharToInt(databuffer,5,7);
  return temp;
}

y tu quieres leer en

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;
}

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.

Surbyte...gracias... lo lei... pero nunca use sensores y no me doy cuenta....

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.

Gracias surbyte, si, lo probe con el ejemplo de openhacks.... pero lo que necesito es sensar cada 5 minutos todos los parametros.

y eso es lo que no entiendo como cambiarlo....

Lo que no entiendes es que la estación meteorológica envia dos datos en relación al pluviómetro, 1 x hora y otro cada 24 hs

r000:rainfall(1 hour), 0.01 inches
p000:rainfall(24 hours), 0.01 inches

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.

si lo entiendo.. gracias!