Controlando salida analógico por tiempos

Hola:

Usando Arduino UNO r3.

Con un potenciómetro se puede controlar la tensión de 0 V. a 5 V. Que en su entrada analógica como salida son de 0 a 1023 bytes.
Usando solo 6 pulsadores como entradas digitales. Se representa así.

Pulsador = 0 V.
Pulsador = 1 V.
Pulsador = 2 V.
Pulsador = 3 V.
Pulsador = 4 V.
Pulsador = 5 V.

Al encender Arduino, se queda en 0 V. por defecto.

Si pulso el pulsador 1 V. Tiene que tardar 3 segundos poco a poco de 0 V. a 1 V. En una salida hay un Led. Por supuesto, como máximo enciende hasta los 5 V, con sus resistencia para que no se queme el Led.

:wink:

Cuando haya llegado a 1 V. Ahora me da por pulsar el pulsador 5. Como está en 1 V. ahora llega poco a poco a 5 V. Ya que los segundos se suman, porque de un valor a otro son cada 3 segundos. En total, del paso 1 al 5 serían 20 segundos. 3 segundos por 4 pasos es igual a 20 segundos.
Por otro lado, quiero ver la agua del voltímetro analógico dc de 0 a 5 V.

Ver imagen 1.
image


Por eso el tema de que cada paso, en tres segundos se mueva la agua un poco despacio, no al instante.

¿Alguna sugerencia de hacer un buen código para este tipo de cosas?

Saludos.
 
No sé, sé me ocurre con máquinas de estado quizás probar. En cada estado poner un contador, dentro de cada contador los 3 segundos aproximados y también el aumento del registro ADC.
 
Salida analógica? la PWM?, bueno tienes poca resolución.

Se me ocurre por pasos, pero el periodo siendo bastante largo creo no te queda de otra que usar delay jaja

Un bucle donde cambies el valor y luego un pequeño delay, todo ello para durar 3 segundos.
 
¿Alguna sugerencia de hacer un buen código para este tipo de cosas?
1- Definir la velocidad de crecimiento de la tensión vs. tiempo. Es lineal? Es exponencial? Como diablos aumenta la tensión??
Ya sabemos que son 1V/3s, pero falta definir como varía en ese rango.
2-Con lo anterior, definir el tamaño del "paso" de tensión por unidad de tiempo y definir cuantos pasos son necesarios por que esto 👇
Por eso el tema de que cada paso, en tres segundos se mueva la agua un poco despacio, no al instante.
no significa nada.
3-Recien con todo esto se puede definir "el paso" de tiempo necesario (tal vez 100ms por incremento??)
4-Y recién ahora se puede pensar en el código necesario y como diseñarlo.

Moraleja: si no defines el problema a resolver, no podés pensar en resolverlo 🤷‍♂️
 
Buenas:

Tal vez no me expresé bien. Lo explico de otra manera hasta que se entienda. :)

Es como un ascensor, con la aguja de antes, ahora es todo digital, pero bueno.

Salida analógica puedes llevarlo de 0V a 5V, lo que aguanta Arduino. Y si, el voltímetro analógico lo mide.

Voy hablar del truco del ascensor. Tenemos un ascensor de 6 pisos, del 0 al 5. Cada uno con sus pulsadores. Si estoy en el piso 0, pulso el 1, tarda 3 segundos poco a poco de llegar la aguja del voltímetro del 0 al 1 un total de 3 segundos.

En caso de que esté en e piso 0 y pulso el pulsador 4, sería un total de 12 segundos, ya que por cada piso, toma 3 segundos.

Tal vez un incremente de 100 ms como nos cuenta el compañero, así se ve mover la aguja del voltímetro de 0 hasta el segundo 3.

Cualquier cosa que no se entienda, preguntar.

¿Mejor usar PWM?

Tal vez funcione mejor con PWM. Me da igual como hacerlo, si me importa que funcione.

Saludos.
 
Se entiende, como fuere análogo o PWM, el cambio de +1 o -1 van a estar separados por una pausa, ésta última puede ser con delay, siendo la forma fácil.

Si la suavidad del cambio no es problema o requisito, bastaría con un bucle. No veo mayor inconveniente.

Ejemplo con el recorrido completo 20 segundos, tendrías que separar en diferentes bucles, cada bucle se ejecuta en secuencia poniendo como límite el número de pulsador accionado...

Básicamente divides la cantidad de pasos 255, en grupos de bucles y cada bucle asociado a un pulsador. Sería una forma que se ocurre.

C++:
for (outputValue = 0; outputValue <= 255; outputValue++) {
    analogWrite(analogOutPin, outputValue);
    delay(78);  // Retraso de 78ms para un período de 20 segundos
}

Saludos
 
Me acaban de ayudar un amigo en Visual C# haciendo el dibujo con GDI+.

Captura.JPG

Le dejo la descarga para que curioseen.

Para Windows 10, framwork 4.8. Si necesitan versiones anteriores me avisan y lo compilo de nuevo.
 

Adjuntos

  • GDI circulo flecha 03.zip
    5.3 KB · Visitas: 3
Atrás
Arriba