Leer el rango de un potenciómetro con Arduino

Hola, amigos. ¿Alguien me puede ayudar en esto?
Tengo el siguiente problema:
Quiero a este programa poner las condiciones de que cuando el potenciómetro esté
en cero, los pulsos de led2 sean de 30 veces por minuto y a medida que vaya subiendo el valor del potenciómetro, vaya subiendo las repeticiones hasta un máximo de 6000 veces por minuto cuando esté al máximo el potenciómetro.

¿Dónde debo poner las condiciones, o este programa no me sirve?
De antemano, les agradezco la ayuda.
PHP:
int potPin = A0;     // Pin de entrada para el potenciómetro 

int led2Pin = 13;    // Pin de salida para el LED
void setup() { 

   pinMode(led2Pin, OUTPUT);   // Declara el pin del LED como de salida
} 
void loop()

 {
  for ( int i = 0 ;  i < 20 ; i++) 
{   

   digitalWrite(led2Pin, LOW);  // Enciende el LED  
   delay(analogRead(potPin)/5);   // Lee el valor del potenciómetro 

    digitalWrite(led2Pin, HIGH);  // Enciende el LED  
   delay(analogRead(potPin)/5);    


} 
delay(10);
}
 
Última edición por un moderador:
tenes que comparar la lectura con los valores que queres, if potpin=0.... las intrucciones para que el led parpadee 2 veces por segundo, tenes que establecer cuantos pasos queres entre el mínimo y el máximo, y a medida que los vaya alcanzando, varie la velocidad de parpadeo
 
¿Se pueden poner sólo las condiciones mínimas y la máxima y que dentro de ese rango vaya variando solo sin poner cada una?



¿Se podrá poner que en cero el potenciómetro, la salida sean 30 pulsos por minuto y al máximo el potenciómetro, los pulsos sean máximo 6000 pulsos por minuto?
 
Última edición por un moderador:
tenes que definir el rango en cuantos pasos lo vas a dividir, mostarlo en un led como parpadea no tiene mucho sentido.
Si no definis los pasos no hay forma que el valor de parpadeo varie.
Suponete que lo dividis en 10 pasos, cada 600 pulsos habra una variación, si lo dividis en 100 lo hara cada 60.
Vos tenes un potenciometro que varia entre 0 y 5, si usas un rango de 10, cada 500mv habra un aumento de 600 pulsos, si lo dividis en 100 cada 50mV habra un aumento de 60.

A lo mejor hay otra forma más sencilla, deberías describir que es lo que queres hacer y para que es
 
Puedes usar la función map() para que ella te haga la conversión, y así el resultado se lo das a delay().

map(value, fromLow, fromHigh, toLow, toHigh)
https://www.arduino.cc/en/Reference/Map

En value pones el valor devuelto por el potenciómetro. En fromLow y fromHigh pones los valores mínimo y máximo que el potenciómetro te va a devolver. Y en toLow y toHigh, pones el rango de valores que quieres obtener.

En tu caso, serían 500 para toLow y 10 para toHigh.

Quedaría algo así:

PHP:
int pot;

void loop() {
   pot = map( analogRead(potPin), 0, 1023, 500, 10 )
   
   digitalWrite(led2Pin, LOW);  // Enciende el LED  
   delay(pot);

   digitalWrite(led2Pin, HIGH);  // Apaga el LED  
   delay(pot);
}
Fíjate que el potenciómetro lo leemos una vez, y así evitamos acumular más retraso en el código (la llamada a cada analogRead() provoca un retraso de 100 µs).

Este mismo razonamiento lo puedes aplicar a salidas PWM, pero no creo que puedas aplicarlo a este problema en concreto (hacer que parpadee cada 500 ms). Repasa la documentación de analogWrite() https://www.arduino.cc/en/Reference/AnalogWrite
 
Última edición por un moderador:
quiero simular a las rpm de un auto


la señal amarilla de la foto que adjunto es la que quiero sacar pero con 30 pulsos y una pausa de apadado de dos pulsos en la posicion minima de potenciometro



la idea es poner esta senal en una memoria de carro y simularlo que esta enviando las señal el motor del auto y poder ver si funciona ...
 

Adjuntos

  • dpo3000 2.jpg
    dpo3000 2.jpg
    40.8 KB · Visitas: 15
Última edición:
Vos queres simular la polea dentada del motor? si es asi hay que hacerlo de otra forma
Si es así deberian ser 60 pulsos menos 2 para la marca de referencia.
Siempre son esa cantidad de pulsos lo que varía es cuantas veces por minuto se producen un tren completo.
60pulsos son 1RPM la velocidad de ralentí de un auto son 600RPM por lo tanto 600x60=36000 pulsos y cada 1000 RPM tenes 60.000 pulsos por minuto visto de otra forma son 600Hz para 600RPM y 1Khz para cada 1000RPM
El sensor debe recibir esa cantidad de pulsos para que la ECU funcione bien
sensor-inductivo.png

Arduino trae un ejemplo de un motor paso a paso, que por un lado se fijan los pasos y por otro se varia la velocidad con un potenciometro.

Pero recuerda si lo quieres aplicar a un carro si cuando baje de las 600RPM el motor se detiene.
Para llevarlo a cabo tendras que definir un tiempo T1 que es la duración de un pulso tedras que enviar 58 T pulsos + 2T los primeros tendran un valor alto, los últimos 2 un valor bajo y repetir.
Tu potenciometro ahora definira el tiempo T de cada pulso el valor mínimo de Tmax debe estar acorde para 600 RPM, y Tmin para las máximas RPM que desees simular.
 
Última edición:
¿Este programa me sirve para lo que deseo hacer, o estoy más perdido que al inicio?
PHP:
int pot;
int potPin = A0;     // Pin de entrada para el potenciómetro 
int led2Pin = 13;    // Pin de salida para el LED

void setup() 
{ 
 pinMode(led2Pin, OUTPUT);   // Declara el pin del LED como de salida
} 


void loop() 
{
 pot = map( analogRead(potPin),0, 1023, 1, 50);

   digitalWrite(led2Pin, LOW);  // Enciende el LED  
   
delay(pot);

 digitalWrite(led2Pin, HIGH);  // Apaga el LED  
  
 delay(pot);
}

Aquí le puedo dar los pulsos positivos pero los negativos le meto cabeza y no sé dónde poner el delay.
N
o soy experto en arduino, disculpen mi curiosidad.



Exactamente lo que dice el amigo pandacba, es lo que necesito pero no sé por dónde iniciar.
nme un empujón.
 
Última edición por un moderador:
Ten un poco de paciencia...
Mientras pensalo así, no significa que asi deba quedar, es solo para que entiendas como debería ser aproximadamente, un contador que cuente hasta 60 y empiece de nuevo, pero que con la particularidad, que cuando llegue el puslo 59 y 60 tensa las salidas bajas,
eso por un lado, una variale asociada al potenciometro que servira para indicar cunto dura cada pulso...

lee un poco de estohttps://playground.arduino.cc/ArduinoNotebookTraduccion/Appendix3
 
Última edición:
en pwm


void loop() {
analogWrite(digPin,127); // Señal PWM a 50% en el PIN 10
}

osea esta parte la salida sera 490hz/2 aproximadamente eso es como entiendo es as?
 
Siendo T el tiempo total de un pulso, T1 sera el tiempo bajo y T2 el tiempo alto, por tanto T=T1 + T2.
Sabemos que son 600RPM eso implica que la rueda dara 10 vueltas segundo y si tenemos 60 pulsos por cada vuelta nos dara 600 pulsos por segundo es decir por lo tanto T sera=1/600=0.00016s.
este sera el tiempo minimo.
Ahora calcula el tiempo para 1000RPM y para unos 4000RPM
 
Atrás
Arriba