Timer con potenciómetro

#1
Buenos dias gente, estoy aprendiendo a programar un poco y se me ocurrió un proyecto para automatizar una punzonadora neumatica que tengo. El tema viene cuando quiero darle un tiempo al pistón y al alimentador, pensaba leer un potenciometro con la entrada analógica y ponerle el tiempo a un delay (no necesita sensar nada mas)
Alguien tiene idea de como podria hacerlo?
Desde ya muchas gracias
 
#2
Puedes darle tiempo o hacer que en su movimiento sea el mismo el que actue, asi no necesitas ningún delay.
Podes esquematizar tu proyecto?
 
#3
Eso sería en escala de tiempo, antes lo hice con 2 555’s pero ahora es muy difícil que vengan sin problemas los integrados image.jpg
------- Mensaje actualizado: -------

Así lo haría yo en ladder image.jpg
 
Última edición:
#4
Hola, me parece que hacer un simple timer con Arduino, es un despropósito. Ahora, para aprender se justifica.
En fin, lo que debes hacer es, leer el potenciómetro mediante una entrada analógica. Luego guardas el valor en una variable, que puede ser tipo int o long.
Luego utilizas esa variable para alimentar un timer o bien un delay, del cuál éste último no es de mi agrado. Luego de cumplido el tiempo cambias de estado una salida. Y listo, con eso tienes un retardo a la conexión o desconexión, según implementes.
 
#5
Para un potenciometro su total de conversión equivadra 7 seg y en el segundo seran 10 seg
Eliges la resolucion y haces un bucle if de comparación sumando un valor para cada cierto tiempo de retardo equivalente, por la forma de trabajar podes utilizar los delay tranquilamente
 
#6
Hola, me parece que hacer un simple timer con Arduino, es un despropósito. Ahora, para aprender se justifica.
En fin, lo que debes hacer es, leer el potenciómetro mediante una entrada analógica. Luego guardas el valor en una variable, que puede ser tipo int o long.
Luego utilizas esa variable para alimentar un timer o bien un delay, del cuál éste último no es de mi agrado. Luego de cumplido el tiempo cambias de estado una salida. Y listo, con eso tienes un retardo a la conexión o desconexión, según implementes.
Ya sé que es un despropósito pero es con fines prácticos, mas tarde pienso sumarle un pirometro, un contador de piezas y un display pero por ahora estoy aprendiendo.
Por otro lado mi problema es que no se como alimentar el delay o el timer (que todavia no comprendi a usar del todo bien)
También estaba tratando de usar la función map para poder pasar esos 1023 a 5 segundos pero no lo conprendo del todo y que el timer no se vuelva a activar cuando vuelva a apretar el boton de inicio.
La otra opción que estaba pensando era comparar los niveles del pote y hacer un delay por cada nivel ( de 0 a 200, de 200 a 400 y asi hasta 1023)
 
#8
En el foro de arduino hay unos ejemplos con map, y también de un timer con potenciometro
Eso último es la que te proponía
Los ejemplos de map los encontré y desde ahí mas o menos lo se usar, aunque no te puedo decir que lo comprendo al 100% pero nunca vi un timer con potenciometro, voy a seguir buscando capaz que lo saltee.
Muchas gracias!
 
#9
La function map es ideal para lo que queres
En una variable lees el potenciómetro
En otra guardas la conversión de map y la utilizas para comparar con un bucle de tiempo con un for next
 
#10
Te doy una idea para trasladar el valor leído del potenciómetro, para llevarlo al timer o delay.


Var_pote= read_ADC; //captura valor pote
OUTPUT_A=1;. //activa salida
DELAY_ms(Var_pote*5); //temporiza valor
OUTPUT_A=0;. // Desactiva salida


Cómo verás no está escrito en ningún lenguaje en particular, sólo es a modo orientativo. Con éste ejem, el timer, trabaja en retardo a la desconexión de 0 a 5 aprox.
 
#11
Te doy una idea para trasladar el valor leído del potenciómetro, para llevarlo al timer o delay.


Var_pote= read_ADC; //captura valor pote
OUTPUT_A=1;. //activa salida
DELAY_ms(Var_pote*5); //temporiza valor
OUTPUT_A=0;. // Desactiva salida


Cómo verás no está escrito en ningún lenguaje en particular, sólo es a modo orientativo. Con éste ejem, el timer, trabaja en retardo a la desconexión de 0 a 5 aprox.
Muchas gracias, ya logré que me funcione la función map con la entrada analógica y logre uno de los timers, mañana voy a ver como hacer para que después de ese delay me haga el otro
 
#12
Podes poner tu código?,

Podes hacer lo siguiente dos varibles una para cada pote, haces como hiciste con el primero y a continuación cuando logre el tiempo que haga lo mismo con la segunda variable
 
#13
Si solo vas a hacer una cosa con delays vas bien. Si luego quieres contar piezas, poner displays etc vas a tener problemas.
Mejor usa la librería flexitimer que facilita el uso de los timers.

Respecto a si es conveniente o no usar un arduino para hacer un temporizador, no lo tengo claro que sea inconveniente; si se hacen bien las cuentas no es mucho mas caro y si que es mucho mas versátil.
 
#14
Si solo vas a hacer una cosa con delays vas bien. Si luego quieres contar piezas, poner displays etc vas a tener problemas.
Mejor usa la librería flexitimer que facilita el uso de los timers.

Respecto a si es conveniente o no usar un arduino para hacer un temporizador, no lo tengo claro que sea inconveniente; si se hacen bien las cuentas no es mucho mas caro y si que es mucho mas versátil.
Cuando llegue a casa subo lo que tengo hasta ahora
En cuanto a usar el arduino para hacer timers no creo que sea un desperdicio, hacer una plaqueta con los 555 lleva tiempo, diseño, muchos 555 fallados y ganas, en cuanto al arduino sale $100 y ya viene todo listo
 
#16
Hola, si quieres ambicionar un poco con el programa, pues entonces puedes usar un sólo potenciómetro para programar ambos tiempos, salvo de que necesitas un pulsador para almacenar T1 y T2.
El problema es que el tiempo que va a estar el piston abajo no es el mismo que el tiempo que va a correr el alimentador.

Dejo lo que tengo hasta ahora, no sabría con que función seguir para agregar el nuevo timer después de éste

const int pote = A0;
int salida = 13;
const int boton = 8;
int valbot;
int valorPote;
int timer;


void setup() {

pinMode(salida, OUTPUT);

pinMode(boton, INPUT);

Serial.begin(9600);

}


void loop() {

valorPote = analogRead(pote);
valbot = digitalRead(boton);
Serial.println(valorPote);
delay (1);

if (valbot == HIGH) {
digitalWrite(salida, HIGH);
timer = map(valorPote, 0, 1023, 3000, 20000);
delay(timer);

}
else{
digitalWrite(salida,LOW);
}
}
 
#17
Cuando llegue a casa subo lo que tengo hasta ahora
En cuanto a usar el arduino para hacer timers no creo que sea un desperdicio, hacer una plaqueta con los 555 lleva tiempo, diseño, muchos 555 fallados y ganas, en cuanto al arduino sale $100 y ya viene todo listo
Por el precio que mencionas estamos hablando del nano, que es una excelente herramienta para muchas cosas.
Lo bueno de tener dos potenciometros es tener un Dial graduado y tener la somera idea de que tiempos se estan trabajando.

En el mismo "else" llama a la otra rutina, ponela con una etiqueta, una vez que termine ira a la otra, y cuando esa termine que llame a la primera
 
#18
Por el precio que mencionas estamos hablando del nano, que es una excelente herramienta para muchas cosas.
Lo bueno de tener dos potenciometros es tener un Dial graduado y tener la somera idea de que tiempos se estan trabajando.

En el mismo "else" llama a la otra rutina, ponela con una etiqueta, una vez que termine ira a la otra, y cuando esa termine que llame a la primera
Exactamente, el uno lo seguiria usando para jugar por un rato mas y de paso me compro el mega


Por otro lado esto estaria bien? no tengo la plaqueta encima para probarlo

const int pote = A0;
const int pote2 = A1;
int solenoide = 13;
int alimentador = 12;
const int boton = 8;
int valbot;
int valorPote;
int timer;
int timer2;

void setup() {

pinMode(solenoide, OUTPUT);
pinMode(alimentador, OUTPUT);
pinMode(boton, INPUT);

Serial.begin(9600);

}


void loop() {

valorPote = analogRead(pote);
valorPote2 = analogRead(pote2);
valbot = digitalRead(boton);
Serial.println(valorPote);
delay (1);

if (valbot == HIGH) {
digitalWrite(solenoide, HIGH);
timer = map(valorPote, 0, 1023, 3000, 20000);
delay(timer);

}
else{
digitalWrite(solenoide,LOW);
delay(500);
digitalWrite(alimentador,HIGH)
timer2 = map(valorPote2, 0, 1023, 3000, 20000);
delay(timer2);
digitalWrite(alimentador,LOW)
}
}
 
#19
Si podes ponerlo dentro del else
Lo interesante del uno que viene con chip dip y zócalo que se pueden hacer experiencias varias con el chip sin botloader.
El mega es muy bueno sobre todo por la cantidad de puertos y funciones, lo tengo con un shield que tiene las salida para cada función lo que lo hace práctico y modular para hacer prueba y ensayos
Pone la variable del pote2, en las declaraciones
 
Arriba