soy nuevo por aquí, y no sé si podréis echarme un cable...
Estoy montando un pluviómetro de balancín mediante un programa sencillo que ejecuta una interrupción por el pin 2 (Arduino Uno o Mega me ocurre igual con cualquiera de los dos).
int RAIN = 2; // PIN del sensor
float rainin = 0;
volatile unsigned long raintime, rainlast, raininterval, rain;
void setup()
{
Serial.println("Iniciando....");
pinMode(RAIN, INPUT); // aquí utilizo una resistencia de 10K en PULL-UP entre el cable que va al pin 2 y la alimentación. si utilizo el el PULL-UP interno del Arduino con INPUT_PULLUP me ocurre lo mismo.
Serial.begin(19200);
attachInterrupt(digitalPinToInterrupt(RAIN), LluviaInterrupt, FALLING);
interrupts();
}
void loop()
{
while (rainin > 0){
rainin=0;
Serial.print("lluvia(l)=");
Serial.println(rainin);
rainin=0;
}
}
void LluviaInterrupt() {
raintime = millis();
raininterval = abs(raintime - rainlast);
if (raininterval > 20) // ignora el pulso ocurrido en los 20ms siguientes
{
rainin += 0.2794; // incremento de lluvia por pulso
rainlast = raintime; // iniciamos variable para la siguiente interrupción.
}
}
Cada vez que bajo bajo el balancín se produce se produce un pulso y me cuenta un salto... hasta ahí bien, el caso es que cuenta saltos aleatorios.
Lo tengo enchufado a una batería que que se carga mediante una placa solar que además de alimentar al Arduino alimenta a una resistencia de 30ohms para calentar el aceite de una enfriadora (no tengo electricidad allí, solo un grupo electrógeno y debo mantener el aceite caliente cuando arranco el grupo). además cuando enciendo el grupo la batería se alimenta de un cargador de baterías enganchado al generador. Lo que me ocurre es que empiezan a saltarme interrupciones aleatoriamente supongo que por el ruido que me genera el sistema y claro el pluviómetro me indica que está diluviando.
Cuando el sistema me lo traigo a mi casa y lo alimento desde la red eléctrica es más estable, pero aún así si estoy monitoreando con un ordenador los saltos y el ordenador lo voy a conectar a la red, (es un mac) al tocar con la punta del cargador (USB-C) la carcasa del ordenador, como el Arduino está conectado por USB me crea una interrupción. Si rozo la punta del cargador con el ordenador me saltan un montón de interrupciones.
¿Cómo puedo aislar el sistema de estas interferencias?, que supongo que son de la misma indole que cuando estoy con la placa solar.
Muchas gracias, espero haberme explicado con claridad.
(el programa es más complejo porque me manda los datos de temperatura y humedad a demás de la lluvia(ficticia) a una base de datos mediante un módulo GSM-SHIELD SIM900, pero el problema me ocurre con esto por lo que he puesto solo el trozo de programa).
Hi,
Aqui mi sugerencia es de que muestres con un esquematico como tienes el systema alambrado. Segundo segun tu explicacion dices que tienes ruidos y que alimentas el sistema con placas solares y baterias. Aqui estas omitiendo una cosa muy importante. Haz leido el voltaje de la alimentacion para ver si el voltajes es correcto.Una baja del voltaje te puede dar el simtoma que estas experimentando.Tambien mencionas que cuando lo instalas cerca de la computadora experimentas el mismo problema. Creo que con un esquematico podemos darte sugerrencias/consejos una vez que veamos como tienes el systema alambrado.
el cableado del sensor de lluvia: Tiene dos cables. Uno a negativo el otro al pin2 del Arduino y un resistencia 10k entre el cable que va del pin2 al 5V del Arduino.
Me apunto a este mismo problema. Tengo montado un UNO a un sensor de una alarma, de manera que cuando el sensor salta envia una señal por cable a al pin 2 del Arduino, el cual sale del reposo y envia una señal a la central y hace saltar la alarma. Este montaje es para adecuar un sensor cableado de una alarma antigua a la nueva alarma que han montado. El montaje se alimenta de la propia fuente de alimentación de la alarma. El montaje funciona perfectamente salvo que hay muchos saltos espurios y evidentemente la he tendio que desconectar porque enviaba muchas falsas alarmas.
cualquier interferencia en la alimentación, sea bien porque conecto en la regleta donde está conectado todo o bien porque conecto el ordenador a la red, me da un salto. (Cuando está conectada a la red eléctrica).
Donde lo tengo conectado a la placa solar, cuando enciendo el grupo electrógeno, como se conecta el cargador de batería también lo hace. y durante el funcionamiento normal, me ocurre mucho, supongo que al cambiar carga desde placa o carga desde batería.
Hi,
Pregunta porque no conectas el panel solar al cargador y del cargador a la bateria. Asi el panel solar va cargar la bateria y entonces dejas que la bateria supla el voltaje con el regulador que alimente el arduino y no veo bien pero parece que es sim xxxx. De la bateria entonces que supla el voltaje a la resistencia del heater de 30 ohmios para calentar el estrogeno. Si estass usando un SIMxxx recuerda que este requiere un minimo de 2 amperios cuando esta comunicandoce. No dices que baterias estan usando pero creo que debes de calcular la corriente total del systema para entonces decidir que baterias vas a usar. No dices cuanto tiempo tienes el heater conectado pues este te va cosumir me imagino ques es 12 voltios/30 ohmios 0.4amps. Creo que lo mejor hagas un analizis de cuantoa correitne usa cada componente para determinar el tamano de la bateria y que panel solar a usar.
Creo que es normal que al arrancar el Arduino pueda dar algún salto, a mi me ha pasado y en cualquier pin, y es que creo (y que alguien me corrija si me equivoco) el estado del pin es aleatorio hasta que se defina si es de entrada o salida, si está hig o low... Una vez arrancado y seteado, el pin que no se haya ajustado creo que siempre será low y si es de entrada y no tiene una resistencia pull-down la variación del valor es un hecho, de ahí siempre la recomendación de colocar una resistencia pull-down o pull-up (se puede usar la que lleva el arduido incluida). Así el valor de la corriente será estable (0V o 5V), salvo cuando lo que esté conectado a ese pin la cambie.
En mi caso la resistencia que tengo es pull-down para que sea siempre 0V y sólo cambie cuando el sensor la ponga a +5 a través de un optoacoplador, ya que el sensor da 12V.
Cuando conecto el montaje a la alimentación de la alarma (+9V) corregida a +5V con un regulador. Por cierto, tuve que colocar ese regulador porque conectado directamente los 9V al raw del arduino, el montaje no funcionaba. No encendía el led del pin 13 que lo programé para que parpadee 3 veces al arrancar (inidcación de funcionamiento) y luego cuando recibe una señal del sensor (indicador de recepción).
Cuando tauro te preguntó por el esquema mas que nada era con referencia a como esta conectado ese pin del que depende la interrupción.
Tienes una resistencia a masa o VCC?
Si el pin esta conectado via un cable a tu balancín, ese cable actua como una antena.
Bueno me he respondido solo
pinMode(RAIN, INPUT); // aquí utilizo una resistencia de 10K en PULL-UP entre el cable que va al pin 2 y la alimentación. si utilizo el el PULL-UP interno del Arduino con INPUT_PULLUP me ocurre lo mismo.
Con tu comentario al definir tu pin.
Tienes una R pull up y aun asi ocurre todo lo que has indicado.
BUeno en ese caso pasamos al plan B.
Cable tiene malla? Seguro que no pero si la tuviera seguimos con ideas.
Deberías considerar colocar algun filtro RFI a la entrada de tus cables que llegan al Arduino. Basicamente podrias usar un filtro de esos disponibles en las fuentes de viejas PC pero si no tienes, esos filtros los venden en las casas de electronica o los consigues por internet.
Siempre hablo de la alimentación que le llega al Arduino via la placa solar y el cargador, si quieres luego de la batería. O sea entre bateria y Arduino.
Qué mas podrias intentar?
tal vez colocar tu arduino en una caja metálica, de aluminio sirve o si consigues una agujereada como las fuentes de switching que se consiguen para salidas DC. Algo asi crea una jaula de faraday que aisla al Arduino de los problemas externos.
Ve probando paso a paso a ver si resulta alguna de las ideas.
Hi,
Par ir por parte podrias dejarnos saber el moddelo del medidor de lluvia pues hay algunos que dan una senal usando un reed switch otro con voltaje. Tmbien mencionas que usas un opto el salida del modulo para bajar la senal de 12 voltios a 5 voltios.
Hi,
Surbyte si lo que tu mencionas del reed switch es correcto entonces el medidor produce un contacto de salida.Ahora el medidor necesita voltaje externo o no. El reed switch tu tienes acceso a los contactos? Por lo que el menciona que usa una resistencia a ground de 10K. Si esto es correcto entonces se necesita conectar una resistencia de 1 K los 5 voltios del arduino en seria al anodo del opto coupler y el catodo del opto a un lado del switche del medidor el el otro al ground del arduino. Adjunto el circuito para usarse si usa un reed switch. En esta forma eliminaria ruidos electricos pero todavia hay que eliminar los brincos de los contactos cuasndo cierran/abren. Tambien se puede eliminar el opto y llevar la salida al input del arduino.
Hi,
Ya yo creia que estaba leyendo cosa raras pero si el menciona.
En mi caso la resistencia que tengo es pull-down para que sea siempre 0V y sólo cambie cuando el sensor la ponga a +5 a través de un optoacoplador, ya que el sensor da 12V.
Ok. entonces de igual modo se estan transmitiendo posibles rebotes.
Yo comenzaría con un código que use Bounce2.h y un intervalo de 50mseg a ver como se comporta. No hacen falta interrupciones para un balancin de lluvia.
Es un proceso lento aun cuando este diluviando.
Eso si no se usa DELAY en ninguna parte del código restante.
Hi,
Surbyte, entonces el lo que necesita hacer es alambrar el circuito del meddor de lluvia como demuestra el circuito adjunto y usa tu sugerencia de usar el Bounce2.h. Eso le va a resolver el problema del contacto brincando cuando cierra/abre.
Si el switch rebota, se debe a su naturaleza mecánica. Si eso ocurre tu capacitor se cargará/descargará menos en cada intervalo en el que llegue a VCC.
Cambia algo tenerlo o no tenerlo en el circuito? Para el rebote no, porque lo voy a segir eliminando con Bounce2.
En cambio el capacitor constituye un camino a tierra/GND para las altas frecuencias que pueden llegar hasta ese lugar.
Hola y Gracias a todos por vuestras contestaciones. Me han servido de mucho.
Al principio tenía conectado el pluviómetro de balancín del siguiente modo y me daba muchos problemas, tanto donde tengo la placa solar y el grupo electrógeno como en mi casa:
después de leer vuestras sugerencias, he cambiado la manera de conectar el pluviómetro:
de esta forma me seguían dando saltos pero en menor medida.
Le he añadido una resistencia más, un condensador y un diodo del siguiente modo:
de esta forma en mi casa ha dejado de generar saltos, voy a probarlo con la placa solar y el grupo electrógeno. Ya os contaré.
Ahora mismo he puesto un diodo led, que es lo que tengo a mano, pero tengo pensado cambiarlo por un 1N4148.
Hi,
Aqui lo que resolvio tu problema fue el condesador. Puedes usar el switche que te supla voltaje o que supla el .ground y te va a trabajar. Ya surbyte te recomendo que usaras el debounse y te hubiera resolto el problema. Aqui tambien hay otro problema y es que se esta usando un iman para cerrar el contacto del reed switch y en la forma en que lo hacen de poco a poco hasta que el balde se va llenado esto hace que el iman no tenga la fuerza suficiente para cerar el contacto y puede producir ruidos. Vamos a esperar que hagas laprueba con todo conectado.
surbyte:
Ok. entonces de igual modo se estan transmitiendo posibles rebotes.
Yo comenzaría con un código que use Bounce2.h y un intervalo de 50mseg a ver como se comporta. No hacen falta interrupciones para un balancin de lluvia.
Es un proceso lento aun cuando este diluviando.
Eso si no se usa DELAY en ninguna parte del código restante.
Hola surbyte
utilizo delay porque al leer datos de temperatura y humedad cada 5 min el proceso de mandar datos al servidor es lento, por lo que entiendo que este código no funcionaría. Cuando manda datos, si hay un salto por lluvia (o por ruido ), sí lo cuenta.