Buen día a todos, soy de Morelos, Ing. eléctrico y nuevo en el foro e hice un circuito para lector de voltajes con pulsadores y resistencias como divisor, ya logre estabilizar las lecturas con capacitores y fuente separada para el circuito y para el arduino. El detalle que al pulsar corto o largo el botón, el rebote me causa al inicio una lectura diferente, si lo dejo pulsado es estable, Quisiera que el botón diera la misma lectura de voltaje puchandose largo o corto. he leido del debounce para entradas digitales pero no encuentro algo para entrada analógica o no se como adaptarlo. hice algunas pruebas con promedios pero supongo sirve mas cuando la lectura es fija, en este caso es momentánea.
En este caso yo ocupo los 5 vcd de salida de cada condición para activar transistores como interruptor y ocupare 12 entradas en lugar de 3.
Este es el código sencillo sacado de internet
Gracias de antemano por su apoyo
const int ledAzul = 2;
const int ledVerde = 3;
const int ledRojo = 4;
const int analogPin = 0;
void setup() {
// Pines digitales en modo salida
pinMode(ledAzul, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledRojo, OUTPUT);
// Apaga todos los LEDs
apagarLeds();
// Inicia monitor serie
Serial.begin(9600);
}
void loop() {
// Leer el pin analógico
int valorA0 = analogRead(analogPin);
// Convertir a voltios el valor analógico
float voltaje = valorA0 * (5.0/1023.0);
// Mostramos los voltios en el monitor serie
Serial.println(voltaje);
// Apagamos LEDs
apagarLeds();
// Pulsador 1
if(voltaje >= 1.25 && voltaje <2.5)
{
digitalWrite(ledAzul, HIGH);
}
// Pulsador 2
else if(voltaje >= 2.5 && voltaje <3.75)
{
digitalWrite(ledVerde, HIGH);
}
// Pulsador 3
else if(voltaje >= 3.75 && voltaje <=5)
{
digitalWrite(ledRojo, HIGH);
}
delay(150);
}
void apagarLeds()
{
digitalWrite(ledAzul, LOW);
digitalWrite(ledVerde, LOW);
digitalWrite(ledRojo, LOW);
}
hice un circuito para lector de voltajes con pulsadores y resistencias como divisor, ya logre estabilizar las lecturas con capacitores y fuente separada para el circuito y para el arduino.
Puedes compartir el esquema?
Aunque sea, hazlo a mano alzada, le tomas una foto que no supere 2MB y la supes como adjunta y luego te indico como hacer que sea visible. Lo envío x privado aunque al final de las normas del foro esta explicado.
Entiendo que tendras algun ripple o rizado importante. POr eso es importante el esquema.
Ahora bien, si solo es undebounce o rutina anti rebote te recomiendo Bounce2
Acerca de la foto, tengo 4 circuitos ya ensamblados con las 3 resistencias y conectados a tierra, por lo que tube que poner una resistencia en serie para medir el voltaje. Y puse 3 resistencias en serie en cada circuito para diferenciarlos, uno se quedo directo.
Ya le puse un delay de 200 ms antes de imprimir, funciona mejor pero mas lento, y aun así la primera lectura es la que da un pico mas alto.
El voltaje solo sirve para diferenciar la activación de cada botón, no necesariamente debe ser exacto y el si un mismo boton me da 2 lecturas puede cruzar las salidas ya que es poco margen de voltaje.
Disculpa que no pueda armar el circuito así, me limitan las resistencias ya soldadas y, la limitante de hilos del cableado, no me quedó mas que hacer este arreglo,curiosamente con el capacitor se estabiliza mejor cuando pucho los botones, si lo retiro se vuelve mas inestable.
Lo único que puedo manipular es la resistencia despues del VCC de 5vcd y anexar y una resistencia en serie para cada circuito con las 3R de 1k, 2k y 3.9k. Esas son las limitantes que tengo. Si retiro el capacitor, el circuito es similar, solo que cada salida va unida a la entrada del arduino.
Anexo nueva foto
Crees que se pueda hacer algo por software o es definitivo armar como tu diagrama. A reserva de armar el correcto divisor, el efecto del pulsador momentaneo antes del contacto pleno, es el mismo para ambos casos. Simplemente estoy cerrando un circuito en serie con 2 y 3 resistencias.
Hi,
Trata de anadirle un condesador de .1uf en paralelo con los 3 switches. Esto te te va a filtrar el ruido que se forma/produce cuando cierra/abre los switches.Tambien debes de bajar el condesador de 10ufd a uno de 1uf y que sea electrolitico. Otra cosa que veo es que las resistencias estan flotando. Deberias tenerlas con al una ground y asi el voltaje no esta flotando.
Siguiendo el razonamiento de @tauro0221 como mínimo poner las resistencias del lado GND y no del lado PIN como estan ahora.
No entiendo porqué no puedes cambiar las resistencias?
Entendí que el arreglo lo has hecho tu, de modo qué cuesta poco hacerlo de otro modo, no?
Ya leí que estan soldadas pero hablamos de 5V o sea son resistencias pequeñas.
Puedes explicar mejor que pretendes hacer? Ayudará a aconsejarte.
Re leyendo tu introducción dices:
En este caso yo ocupo los 5 vcd de salida de cada condición para activar transistores como interruptor y ocupare 12 entradas en lugar de 3.
O sea tenemos 5V de salida y donde esta el ruido que obliga poner el capacitor? O sea que tienes una mala fuente a medir?
Transistores como switches, que transistores? Hay cosas mejores para ello como llaves digitales CD4051 por ejemplo u otras que hacen eso de modo muy bueno o transitores MOSFET como un simple 2N7000.
No comparto que la fuente a leer tenga ruido y obligue a colocar filtros.
A menos que midas algo específico creo que ese punto puede mejorarse.
Con esto quiero decir que la fuente pude filtrarse antes no después.
Filtra antes y siempre estará estable, no luego del divisor cambiando los valores y agregando una constante de tiempo para alcanzar el valor esperable.
Coloca el capacitor incluso de mayor valor a la entrada. Cambia las Resistencias para que salgan de GND y que los pulsadores se unan al PIN.
La tensión estará siempre en 5V a la entrada y al conectar via pulsador la R correspondiente se leerá rapidamente el valor del divisor.
Hi,
Surbyte cuando cierras un contacto este tiende a vibrar o sea lo que se conoce como "bouncing" no es un contacto solido de primera intencion Normalmente se le anade un condesador para evitar ese ruido. Otra cosa que se puede user es usar una routina para evitar el "debouncer". Si buscas en el Arduino de los ejemplos de programacion digital tienen una routina que se llama debouncer.
Adjunto un link que explica de lo que estoy hablando
@tauro0221, disculpa pero me tomas por un novato en el tema debouncing?
Tu tienes la tendencia de no leer todos los post, lee el post#2, y dime que aconsejé?
No continúo respondiendo porque creo que te confundiste de destinatario del tema y te aseguro que no me se todo, pero rebotes/antirebotes bounce/debounce al menos se resolverlo y lo he aconsejando desde mucho antes que tu llegaras al foro EspaÑol. Con la librería Switch y ahora con Bounce2.
Pero si el NO nos dice qué pulsadores usa o si son contactos de relé como yo supongo, de qué rebote estamos hablando.
Jamas tengo rebote que afecte un sketch usando la simple tecnica que he sugerido o el uso de flancos. Claro que acá no aplica porque usa un pin analogico. Pero tampoco debería haber rebote.
Los botones del keypad LCD arduino no USAN debounce, entonces?
Hi,
surbyte ya a mi edad tengo que cojerlo bien despacio y yo no ,e enojo/ni me da coraje con nadie que me corrija por algo que hize mal. Ya a la edad que tengo me traiciona y a veces cometo erroes si darme cuenta. Asi que puedes reganarme sin problemas. Siempre seremos amigos. Algunas veces pienso en retirarme al buen vivir pero no puedo despued de 40 anos trabajando con computadoras de proceso y ahora con los micros. Ante de primera intencion podia entender como designar pero ahora me toma mucho tiempo pues mi memoria solo guarda la infomacion por una semana. Mi hijo me dice que yo uso registro en vez de memoria por eso no puedo guardar la informcion por mucho tiempo.
De toda manera el link tiene una buena tutoria en switches debouncing con la senales en el scope demostrando lo que pasa con los switches. Ojala muchos se aprovenchen de ella.
Buena noche, dandole seguimiento, arme el circuito en el protovolt que anexo (disculpen si no se visualiza, estoy batallando con pegar las imagenes), solo que puse un capacitor sin polaridad de 0.1mf en lugar del electrolitico y anexe un capacitor de 220mf a la salida de los 5vcd del arduino, funciona sin problemas.
Como lo comentaba en mi circuito original, no tengo espacio para meter el diodo y el capacitor, ya que son botoneras prefabricadas para un volante de auto, solo puedo meter un cable y los circuitos del lado boton ya están aterrizados. Así que sustituí el capacitor de polaridad de la imagen primera que anexe por el de 0.1mf, anexe el capacitor a la salida de la fuente y puse un retardo de 80ms antes de imprimir los datos. Esto retarda un poquito el programa y muy rara vez aparecen picos. Ya funciona bien salvo a veces por algún pico.
Ojala me pudieran apoyar en adaptar la función debounce de la pagina que pegaron aquí mismo, para no depender de condensadores y no hacer pausas en el programa. Yo lo estaré intentando, solo que soy nuevo en esto, de hecho es mi primer programa.
Muchas gracias a todos nuevamente
Hi,
Pregunta en el dibujo tienes la ultima resistencia floatando. Deberias de tener una que complete el circuito a ground pues al esta flotando al cerrar uno de los switches te va a completar el circuito a tierra esto te a producir ruido momentaniamente. Al tenerla a ground la corriente se estabiliza. Es solamente una sugerencia.