Go Down

Topic: Rueda dentada jeep 4.0 (Read 3774 times) previous topic - next topic

gsune

prueba


Code: [Select]
}
// the loop routine runs over and over again forever:
// 10 rpm
//1
void loop() {
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);             
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(4720);
 digitalWrite(led2, HIGH);
 digitalWrite(led, LOW);   
 delayMicroseconds(4720);

gsune

Algo así ?
Code: [Select]
int led = 13;
int led2 = 12;

// the setup routine runs once when you press reset:
void setup() {               
 // initialize the digital pin as an output.
 pinMode(led, OUTPUT);
 pinMode(led2, OUTPUT);
 
Serial.begin(9600); // solo para ver los datos en el monitor serie
}
// the loop routine runs over and over again forever:
// 10 rpm
//1
void loop() {

Pot = 5.0*analogRead(A0)/1023.0;      // convierto a Voltios valor de A0 que va de 0 a 1023
   Serial.println(Pot);

 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);             
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(4720);
 digitalWrite(led2, HIGH);
 digitalWrite(led, LOW);   
 delayMicroseconds(4720);

 // 2
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH); 
 delayMicroseconds(5560);             
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(9440);

//3
digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);             
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);             
 digitalWrite(led, LOW);   
 delayMicroseconds(9440);
//4
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);             
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH); 
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);             
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH); 
 delayMicroseconds(5560);               
 digitalWrite(led, LOW); 
 delayMicroseconds(4720);
 digitalWrite(led2, LOW);
 digitalWrite(led, LOW);   
 delayMicroseconds(4720);
//5
 digitalWrite(led, HIGH); 
 delayMicroseconds(5560);             
 digitalWrite(led, LOW); 
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH); 
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);             
 digitalWrite(led, LOW);   
 delayMicroseconds(9440);
//6
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);             
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH); 
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780);
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(9440);

}

gsune

Hola ya logré instalar proteus 7.9 sp1, le incluí las librerías, corrí el hex y vi el osciloscopio. ( mucho progreso para mi )
Ahora quisiera ayuda para agregarle el potenciometro para variar las rpms.
muchas gracias por su invaluable ayuda

surbyte

A ver si nos entendemos mejor. Necesito que me digas de donde has sacado los tiempos que has puesto y porque son esos tiempos. Los pusiste al azar? Surgen de alguna justificación matemática? 
son demasiado precisos para que sean al azar.
Si esos tiempos son 10 rpm, quiero saber como modificar esos tiempos para 20 RPM y asi.
Entonces al variar tu potenciometro sacaremos una manera de modifcar los delayMicroseconds(). Se entiende?

Porque no publicas como son las conexiones, que motor usas, etc.
Tu proyecto resulta como descolgado para los que leemos de este lado y mira como yo soy el único que te responde pero si pones mas información, mas personas responderán.

gsune

Muchas gracias por su paciencia.
no he sabido a{un como vincular fotos para poder mostrar la informacion de la rueda dentada. he tratado usando google drive y mega sin exitos, seguire tratando...

los tiempos si son precisos y corresponden al patron de la rueda de jeep 4.0 de los años 1990 al 2001 que se llama 18-2-2-2.
se refiere a 3 grupos de 4 dientes,
los grupos tienen 120 grados de separacion entre ellos.
los dientes estan  separados 20 grados unos de otros
entre un grupo y el otro hay 60 grados
si la circunferencia tiene 360 grados y la separo entre 18 da 20 grados .
el sensor de levas es una media luna en el distribuidor es decir 180 grados del distribuidor que corresponde a 360 grados del cigueñal ya que la leva gira a la mitad de las rpms del cigueñal, entonces tenemos que en 720 grados o 2 rpms se da que el sensor de levas esta 1 rpm encendido y 1 rpm apagado.
Todo esto es confuso explicarlo con letras, una imagen lo muestra mejor.
Saludos




surbyte

#23
Jan 19, 2016, 04:10 pm Last Edit: Jan 19, 2016, 04:17 pm by surbyte
Bien vamos a extrapolar los datos que has dado para 10 rpm y confiemos que sea lineal.
Ya lo hago y lo posteeo con el potenciómetro. Ojo!!! Ve conectando el potenciómetro.

Dos preguntas:
1. Entre que valores de RPM debe variar el potenciómetro?
2. Teniendo en cuenta que el potenciómetro entregará valores entre 0 y 1023, los 10 rpm que has posteado a que valor del cursor del potenciómetro corresponde?

surbyte

Code: [Select]
#define led1  13
#define led2  12

unsigned int dly556, dly278, dly472, dly944;
unsigned int Pot, var;

// the setup routine runs once when you press reset:
void setup() {               
 // initialize the digital pin as an output.
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 
Serial.begin(9600); // solo para ver los datos en el monitor serie
}
// the loop routine runs over and over again forever:
// 10 rpm
//1
void loop() {

  Pot = analogRead(A0);      // convierto a Voltios valor de A0 que va de 0 a 1023
  Serial.println(Pot);
  var = map(Pot, 0, 1023, 1, 100); //Convierto 0-1023 a 0-100 rpm x lo tanto 102 cuentas son 10 readSqwPinMode
                                   // no pongo 0 rpm porque daría una división por 0 y eso es error en Arduino.

  dly278 = 27800/var;
  dly556 = dly278*2;
  dly472 = 47200/var;
  dly944 = dly472*2;

  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);             
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly472);
  digitalWrite(led2, HIGH);
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly472);

  // 2
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH); 
  delayMicroseconds(dly556);             
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly944);

  //3
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);             
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);             
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly944);
  //4
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);             
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH); 
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);             
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH); 
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW); 
  delayMicroseconds(dly472);
  digitalWrite(led2, LOW);
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly472);
  //5
  digitalWrite(led1, HIGH); 
  delayMicroseconds(dly556);             
  digitalWrite(led1, LOW); 
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH); 
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);             
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly944);
  //6
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);             
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH); 
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly278);
  digitalWrite(led1, HIGH);   
  delayMicroseconds(dly556);               
  digitalWrite(led1, LOW);   
  delayMicroseconds(dly944);
}


A ver como va. 
Repito, el potenciómetro va de 0 a 1023 cuentas. 
Supuse que tu potenciómetro regula de 0 a 100 RPM para 1023 pasos.
Si 10 RPM te dan 2780 useg y 4720 useg que son los dos patrones repetidos, los otros dos son multiplos de éstos.
Entonces paa 1 RPM tendremos 27800 useg y 47200 useg. 
El resto surge como cociente de estos valores x la velocidad que diga el potenciómetro.
Lo único no muy bonito desde la programación es que se lee el potenciómetro, se hace toda una secuencia y si modificas el potenciómetro no lo sabremos hasta el próximo ciclo.

gsune

Disculpa esas 10 rpms se me fugaron en el codigo. no estoy seguro si corresponda

gsune

Los valores que necesito para el potenciometro es entre 0 y 5 volt o de 0 a digamos tentativamente 5.000 rpms

gsune

No se mucho de programación, pero voy a tratar de explicarme un poco.

Tenemos que en 360 grados = 1rpm
"yo" estoy colocando que una rpm dura 60 segundos ( demasiado lento pero era para poder observar los leds)
entonces 1 rpm = 60 sec
donde se separa en 2 tiempos apagado de 4.72 seg
2 tiempos apagado de 9.44 seg
9 tiempos apagado de 2.78 seg
12 tiempos encendido de 0.556 seg

quisiera poder variar las rpms con um potenciometro de 5k para que coincida con el tps de los jeep con un rango entre 0 y 5 volt

muchas gracias
 

surbyte

#28
Jan 19, 2016, 06:22 pm Last Edit: Jan 19, 2016, 06:28 pm by surbyte
Bueno si encuentra a que RPM corresponden esos tiempos porque esa es la CLAVE.
modifica en map esto


Code: [Select]
var = map(Pot, 0, 1023, 1, 5000);

Repito que puse 1, 5000 porque si pones 0 dará error la cuenta.
Pero era basado en los supuestos 10 RPM ahora dices que no lo son, asi que establece o mide las RPM y dime esos tiempos a cuantos RPM corresponden.

Estos cambios deberían generalizar tu problema
Code: [Select]

#define led1  13
#define led2  12
#define Ref   1000 // Referencia será el valor para el cual gira con 2780 y 4720 useg
                          // cambia este valor por el que midas con los delayMicroseconds que ya tienes

unsigned int dly556, dly278, dly472, dly944;
unsigned int Pot, var;

// the setup routine runs once when you press reset:
void setup() {               
 // initialize the digital pin as an output.
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 
Serial.begin(9600); // solo para ver los datos en el monitor serie
}
// the loop routine runs over and over again forever:
//1
void loop() {

  Pot = analogRead(A0);      // convierto a Voltios valor de A0 que va de 0 a 1023
  Serial.println(Pot);
  var = map(Pot, 0, 1023, 1, 5000); //Convierto 0-1023 a 0-100 rpm x lo tanto 102 cuentas son 10 readSqwPinMode
                                   // no pongo 0 rpm porque daría una división por 0 y eso es error en Arduino.

  dly278 = 2780/var*ref;
  dly556 = dly278*2;
  dly472 = 4720/var*ref;
  dly944 = dly472*2;


Go Up