This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Estación meteorológica v2 - giltesa
#41
Pues aprovecho que mis padres viven allí y tienen ADSL en la casa. Para conectarme a internet desde la huerta (unos 50m), hice un enlace con dos routers wifi y antenas direccionales. Al router de la huerta le conecto por cable el arduino con la placa ethernet. Está en una caseta con electricidad.
Los routers wifi los pillé en una tienda de segunda mano a 0,60€ y compré varios.
Lo hice por enredar, pero se ha quedado funcionando desde hace tiempo.
Tuve problemas porque de vez en cuando se quedaba colgado. No sabía si era problema del arduino o del router, yl e puse un arduino micro (3€) que cada 6 horas resetea la alimentación de router y del arduino. Y este invierno ha estado 6 meses sin colgarse hasta que saltó el diferencial por una tormenta el jueves pasado. Y lo ví porque se interrumpió la grafica de xively.
En cuanto al programa que sube los datos a xively, lo uso desde que era pachube (luego fue cosm) y me pareció ver que ahora hay librerías que facilitan mucho subir datos.
  Responder
#42
Ok tío muchas gracias.

Yo de momento donde lo quiero poner no tengo luz ni adsl jajaj :dale2: , por eso era lo del modulo GSM/GPRS. Cuando me ponga con lo del xively igual te pregunto alguna cosa que seguro que me lío...

Gracias!!, Saludos! Mola
  Responder
#43
jfelipe escribió:Ahora que vamos a cambiar la hora este fin de semana, ¿te has planteado que haga el cambio de horario verano/invierno automáticamente?
Si lo usas no lo he visto.
Yo lo apliqué hace unos años para un fraile del tiempo que hice con arduino. Posteriormente he cambiado algunas cosas, y aún tengo pendiente actualizar la página, pero lo puedes ver en frailedeltiempo.wordpress.com
Utilizaba el algoritmo de Zeller para calcular el día de la semana de una fecha dada. Y a partir de ahí hace el cambio el último domingo de Marzo y el último deomingo de Octubre.
Lo tengo bastante olvidado, pero lo buscaré.

Que tal Felipe,

1.- Si considero que es útil e importante implementar el cambio automático en horario de verano en un reloj.
2.- Me impresiona como se calcula una fecha especifica con Zeller y no sabía que se llamaba así hasta tu post. MAGIA Mola

Quiero desde muchos años armar un reloj atómico, usando Arduino + Modulo 16x2 vía I2C + GPS vía serial.

Ya tengo las piezas pero no el código.

¡POR FAVOR AYUDAMÉ Giltesa y jFelipe!

Gracias por su atención...
  Responder
#44
Hola plumetín
No he usado nunca el GPS con arduino. Lo que sí que hice fue actualizar la hora por internet mediante el protocolo ntp. Para ello utilizaba la librería Time. Mirando en los ejemplos que trae esa librería , viene uno (TimeGPS) que coge la hora del GPS y usa la librería TinyGPS (http://arduiniana.org/libraries/TinyGPS/).
Creo que de aquí podrás sacar más información, porque yo con el GPS ya te digo que no he trasteado.
  Responder
#45
Hola de nuevo a todos!

Bueno, ya he recibido el pluviometro que me recomendasteis, lo he "apañado" ya que era wireles, lo he cableado y lo he tenido esta semana funcionando a ver que tal muestreaba.

Las conclusiones que he sacado son que ó falla el arduino, ó falla el pluviometro, me explico.

Estoy incrementando los pulsos del pluviómetro mediante la INT0 (Interrupción externa del Pin 2 - Arduino UNO). Y creo que no va muy fino..., a veces me da la sensación de que entra en la interrupción (cuenta un pulso) sin que realmente ocurra el mismo.

He decidido meter pluviometro en un armario (ahí seguro que no oscila) , y poner una LCD-I2C monitorizando los clicks, a ver que resultados obtengo estos días.

También voy a poner otro arduino (en este caso MEGA) en la misma situación, pero en vez del pluviometro, con un sensor electromágnetico (de esos de puerta), y que también incremente por interrupción externa para observar si en los 2 casos detectan pulsos sin que realmente ocurra el evento.

Este es el código que utilizo para lectura por interrupción externa que encontré por internet para el pluviómetro.

Código:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

// PLUVIOMETRO VARIABLES                  
#define PIN_RAIN_GAUGE  2     // Digital 2 (INT_0)                          // PLUVIOMETRO - INT EXTERNA 0
volatile int numClicksRainGauge = 0;   // Incremented in the interrupt
volatile long lastInt = 0;             // Tiempo en que se realizo la última interrupción.
float x;                               // for calculate the rain quantity                          
                                                                            // FIN PLUVIOMETRO

void setup() {
  Serial.begin(9600);
  Serial.println("PLUVIOMETRO TEST!");

  lcd.init();      // Initialize the lcd  
  lcd.backlight(); // Encender la luz del LCD
//   interrupts();
   pinMode(PIN_RAIN_GAUGE, INPUT);
//   pinMode(PIN_RAIN_GAUGE, INPUT_PULLUP);
   digitalWrite(PIN_RAIN_GAUGE, HIGH);
   attachInterrupt(0, countRainGauge, FALLING);
//   attachInterrupt(0, countRainGauge2, RISING);


  
}

void loop() {


    Serial.print("CLICKS ");
    Serial.println(numClicksRainGauge);

//    lcd.clear();
    lcd.setCursor(0,0); //(Columna,fila) (0,0)=Arriba izda
    lcd.print("CLICKS ");
    lcd.print(numClicksRainGauge);
    delay(1000);

  }



//=======================================================
// Interrupt handler for rain gauge. Called on every
// contact closure
//=======================================================
void countRainGauge() {
   if((millis()-lastInt)>200) {
     numClicksRainGauge++;
     lastInt = millis();
}
}

Saludos!! Mola
  Responder
#46
Yo lo veo bien, aunque quizás se podría mejorar el código de la interrupción, porque ese control que haces evita que se sumen varios "clics" seguidos pero quizás habría que controlar el tiempo que tarda el sensor en pasar de LOW -> HIGH -> LOW, supongo que según la velocidad a la que se mueva el balancín tardara mas o menos tiempo en cambiar entre esos estados.

No sé si se puede, pero quizás dentro de la interrupción podrías poner un while que detenga el programa mientras el sensor siga en HIGH, una vez termine cuentas la pulsación y sales de la interrupción.

No sé si eso servirá, prueba a ver Mola
giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.
  Responder
#47
Gracias giltesa,

Bueno, despues de dejarlo unas 20 horas monitorizando, acabo de mirar el sistema y marca 14 clicks, y ayer lo deje con 1 (por no dejarlo en 0 por si se reiniciaba o algo), asi que efecivamente ejecuta la interrupción externa sin que realmente ocurra el evento Triste

Ok gracias por el consejo, algo así serviría?

Código:
void countRainGauge(){
     pulsoOn=millis();                           // Detección del flanco de subida (Ha entrado en la interrupción)
     while(PIN_RAIN_GAUGE==HIGH)  // Tiempo de espera para que cambie de estado
     {
     }
//    pulsoOff=millis();                        // Detección del flanco de bajada
     if ((millis()-pulsoOn)>100)             // Si la diferencia de tiempo es > 100 ms
     {                                                  //  ha sido una entrada a la interrupción valida
     numClicksRainGauge++;
     }

}

S2! Mola
  Responder
#48
La pregunta es, porque el arduino detecta pulsos cuando no debiera? Eso es porque el sensor por alguna razon los manda....

Enviado desde mi Nexus 4 mediante Tapatalk
  Responder
#49
Prueba con una resistencia PULLUP externa, no creo que tenga que ver el usar una interna pero es otra cosa que puedes probar.

También puedes hacer el circuito entero pero con un pulsador, sin el sensor de agua, a ver si con eso también hace cosas raras :S
giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.
  Responder
#50
Estoy de acuerdo contigo, y tampoco me lo explico...

El sistema es el siguiente, a ver si consigo explicarlo bien


PLUVIOMETRO ----------------------// ~~ //--------- ARDUINO


---------------------------------------------// ~~ // -------- VCC (ARDUINO)
|
|
SENSOR ELECTROMAGNETICO
|
|
---------------------------------------------// ~~ // --------PIN 2 (ARDUINO)
|
R (10K)
|--------------------------------------------// ~~ // ---------GND (ARDUINO)


// ~~ // Equivale al cable entre el pluviómetro y el arduino por donde se mandan la señal y Vcc/Gnd, es de 1 metro +-

No se si me he explicado bien, espero que si Sonrisa
Saludos!! Mola
  Responder
#51
El sensor es electromagnetico? No es optoelectronico? Al ser antes wifi llevaba circuiteria interior?

Enviado desde mi Nexus 4 mediante Tapatalk
  Responder
#52
Si exacto, es electromagnético.

Antes era Wifi, pero he desoldado el sensor, y lo he cableado con el esquema de arriba.

Utilizo la pcb en la que venia soldado únicamente para poner el sensor en su "sitio", ya que está hecha a medida y queda perfectamente fijada dentro del pluviómetro para la detección de las oscilaciones, pero no tiene alimentación ni nada, ni pega ningún contacto con ninguna parte de esa pequeña pcb, he puesto cinta aislante

Saludos! Mola
  Responder
#53
Osea has aislado completamente el sensor de la pcb?

Enviado desde mi Nexus 4 mediante Tapatalk
  Responder
#54
Si si, esta aislada por completo.

Voy a quitar el sensor del arduino, sin nada en los pines para ver si también ocurre algo raro...

Thx!! Mola
  Responder
#55
Yo en estos momentos tengo desmontado el pluviómetro, pero acabo de hacer unas pruebas y con cable normal entra ruido y cuenta pulsos, tal como te pasa a tí.
Las pruebas que hice hace tiempo fueron empleando cable apantallado y la resistencia interna de pull-up y así te evitas conectar una resistencia (mira el ejemplo Digital>DigitalInputPullup). En ese caso la lógica funciona al revés. Cuando cierra el circuito da estado LOW.
No contrasté la medida, por lo que no sé si entrarían tantos pulsos falsos como dices.
Mi pluviómetro es la versión cableada, no la inalámbrica, y el cable original que lleva es tipo telefónico, por lo que el circuito electrónico que llevaría podrá evitar de alguna forma que el cable haga de antena y le entre ruido eléctrico.
Habrá que probar con la supresión de rebotes (Ejemplos>Digital>Debounce) si el apantallado no es suficiente.
  Responder
#56
Acabo de hacer otra prueba con el cable original, paralelo sin apantallar, tipo telefónico, con la resistencia interna de pull-up, y adaptando el programa que elimina los rebotes y aparentemente cuenta bien. Lo dejaré una noche para ver si se modifica el valor del contador.
Posiblemente la interrupción detecte rebotes en el contacto del relé reed (electromecánico) o ruido en el cableado.
A continuación pongo el código que he usado
Código:
/*
Debounce + DigitalInputPullup

Each time the input pin goes from HIGH to LOW (e.g. because of a push-button
press), the output pin is toggled from LOW to HIGH or HIGH to LOW.  There's
a minimum delay between toggles to debounce the circuit (i.e. to ignore
noise).  

The circuit:
* LED attached from pin 13 to ground
* Momentary switch attached from pin 11 to ground

* Note: On most Arduino boards, there is already an LED on the board
connected to pin 13, so you don't need any extra components for this example.


created 21 November 2006
by David A. Mellis
modified 30 Aug 2011
by Limor Fried
modified 28 Dec 2012
by Mike Walters
recombined Debounce + DigitalInputPullup 31 May 2014
by Joaqun Felipe

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/InputPullupSerial
  http://www.arduino.cc/en/Tutorial/Debounce
*/

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 11;    // the number of the pushbutton pin
const int ledPin = 13;      // the number of the LED pin

// Variables will change:
int ledState = LOW;         // the current state of the output pin
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin
int i=0;
// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;    // the debounce time; increase if the output flickers

void setup() {
  Serial.begin(9600);
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);

  // set initial LED state
  digitalWrite(ledPin, ledState);
}

void loop() {
  // read the state of the switch into a local variable:
  int reading = digitalRead(buttonPin);

  // check to see if you just pressed the button
  // (i.e. the input went from HIGH to LOW),  and you've waited
  // long enough since the last press to ignore any noise:  

  // If the switch changed, due to noise or pressing:
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:

    // if the button state has changed:
    if (reading != buttonState) {
      buttonState = reading;

      // only toggle the LED if the new button state is LOW
      if (buttonState == LOW) {
        ledState = !ledState;
        i++;
        Serial.println(i);
      }
    }
  }

  // set the LED:
  digitalWrite(ledPin, ledState);

  // save the reading.  Next time through the loop,
  // it'll be the lastButtonState:
  lastButtonState = reading;
}
  Responder
#57
Muchísimas gracias por la ayuda chicos, da gusto con gente así!!

El cable que utilizo yo es este por si os puede sugerir algo, o dar alguna pista

[Imagen: %24_57.JPG]
http://www.ebay.es/itm/181389995247?var=...1436.l2649

S2!! Mola
  Responder
#58
Ese es cable sin apantallar. El que he usado yo es como ese pero de 2 hilos en vez de 4.
Con el código que he puesto antes en 5 horas no ha entrado ningún pulso fantasma.
Lo dejo por la noche.
  Responder
#59
Otras 9 horas y no ha entrado ningún pulso fantasma con el código que puse. Parece que el filtrado funciona incluso con el cable paralelo, y no hace falta cable apantallado.
  Responder
#60
Ok perfect!!
Yo he cambiado el cable por un cable ethernet trenzado, no está apantallado tampoco, lo dejaré unos días a ver que tal funciona.
De todas maneras creo que en el curro tengo cable apantallado, si no me compraré uno, así me curo en salud :roll:

Gracias, Saludos!! Mola
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  Estacion Meteorologica Triggerr 261 55,033 21-01-2017, 10:43 PM
Último mensaje: cna