Go Down

Topic: interrupciones saltos indeseados (Read 538 times) previous topic - next topic

Bodeguero

Buenas tardes,

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).

Code: [Select]

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).

tauro0221

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. 

Bodeguero



¿te refieres a esto?

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.

espero que sea esto a lo que te refieres

gracias.

pepepotero

Hola

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.

Un saludo

Bodeguero

Hola pepepotero.

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.

tauro0221

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.

pepepotero

Bodeguero,

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).

Saludos

surbyte

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

Code: [Select]
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.

tauro0221

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.

surbyte

Tal vez solo deba leer los cambios usando millis() y poner una rutina antirebotes.
Es casi seguro que usa un reed switch.

tauro0221

#10
Sep 15, 2019, 12:33 am Last Edit: Sep 15, 2019, 12:35 am by tauro0221
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.


surbyte

No creo que tenga un opto. Poner un opto para que se use la misma alimentación es una tonteria pero bueno.. todos pues diseñar no?

tauro0221

#12
Sep 15, 2019, 01:25 am Last Edit: Sep 15, 2019, 01:26 am by tauro0221
Hi,
Ya yo creia que estaba leyendo cosa raras pero si el menciona.
Quote
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.
"

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.

tauro0221

#14
Sep 15, 2019, 04:25 am Last Edit: Sep 15, 2019, 04:27 am by tauro0221
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.



Go Up