Go Down

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

gsune

Hola amigos tengo un taller mecánico de jeep y un banco de pruebas de pcm y necesito reproducir el patron de la rueda dentada la cual es 18-2-2-2.
Estuve preguntandole a la gente de ardustim pero no he recibido respuestas satisfactorias ni ayuda.
no soy programador pero puedo aprender, poseo la arduino UNO y ya hice un código que funciona pero no se como agregarle un potenciometro para variar las rpms.
quisiera saber si uds pueden ayudarme al menos en decirme que tipos de comandos usar en el código...
muchas gracias desde VENEZUELA

gsune

#1
Jan 17, 2016, 05:44 pm Last Edit: Aug 06, 2016, 11:08 am by gsune
Code: [Select]
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);
}
// the loop routine runs over and over again forever:
// 10 rpm
//1
void loop() {
 digitalWrite(led, HIGH);   
 delay(5.56);             
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(4.72);
 digitalWrite(led2, HIGH);
 digitalWrite(led, LOW);   
 delay(4.72);

 // 2
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH); 
 delay(5.56);             
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(9.44);

//3
digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);             
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);             
 digitalWrite(led, LOW);   
 delay(9.44);
//4
 digitalWrite(led, HIGH);   
 delay(5.56);             
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH); 
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);             
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH); 
 delay(5.56);               
 digitalWrite(led, LOW); 
 delay(4.72);
 digitalWrite(led2, LOW);
 digitalWrite(led, LOW);   
 delay(4.72);
//5
 digitalWrite(led, HIGH); 
 delay(5.56);             
 digitalWrite(led, LOW); 
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH); 
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);             
 digitalWrite(led, LOW);   
 delay(9.44);
//6
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);             
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH); 
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78);
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(9.44);
 
}
 



gsune

<https://drive.google.com/open?id=0ByTqMTU7OnezTU9xTjJFUl9qcGs>

surbyte

Para comenzar controla tu impaciencia y lee las Normas del foro sobre como postear enlaces, códigos e imágenes.
Luego te comento que delay solo maneja números enteros de modo que si usas 2.75 leerá 2 y será una demora de 2 mseg nada mas.
puedes usar delayMicroseconds(us) 
en lugar de lo que usabas
Entonces
Code: [Select]
delay(2.75);
 cambia a

Code: [Select]
 delayMicroseconds(2750); // pero ahora expresado en usegundos



 Los códigos se suben a este blog, no se ponen enlaces para descargarlos y que además requieren acceso personalizados.
Para resolver tu problema con el potenciómetro deberías decirnos a que posición del mismo le corresponde el código que  has posteado.

gsune

Muchas gracias Surbyte por guiarme y pido disculpas por lo que hice indebido.
Lo del potenciometro no tengo la menor idea de como agregarselo al código que he hecho y quisiera que uds me ayuden, Muchas gracias

gsune

con respecto a las normas del foro si las leí y trate de insertar las imágenes y códigos con el formato específico pero no veía en mi navegador las herramientas . ya lo solucione cambiando de navegador.
 muchas gracias por su comprensión

surbyte

repito para que nos entendamos.
Tu código muestra una serie de delays que en conjunto te darán una velocidad. Dime cual es?
Para usar un potenciómetro necesitas esto

Code: [Select]
void setuup() {
     Serial.begin(9600); // solo para ver los datos en el monitor serie
}

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


Este simple programa lee un potenciómetro conectado entre +5V y GND con el cursor a A0 del Arduino.
La salida se ve en el monitor Serie.

gsune

#9
Jan 18, 2016, 01:22 am Last Edit: Aug 06, 2016, 11:09 am by gsune
Code: [Select]
Mi código es experimental y ahorita le puse estos tiempos sólo para observar físicamente los led en la arduino:

Code: [Select]
<digitalWrite(led, HIGH);   
  delay(55.6);               
  digitalWrite(led, LOW);   
  delay(278);
  digitalWrite(led, HIGH);   
  delay(55.6);               
  digitalWrite(led, LOW);   
  delay(278);
  digitalWrite(led, HIGH); 
  delay(55.6);             
  digitalWrite(led, LOW);   
  delay(278);
  digitalWrite(led, HIGH);   
  delay(55.6);               
  digitalWrite(led, LOW);   
  delay(944); >

esto es para representar la gráfica ( la cual no puedo insertar en este momento porque no veo las herramientas en este editor )

gsune

#10
Jan 18, 2016, 01:28 am Last Edit: Jan 18, 2016, 01:54 am by gsune

gsune

#11
Jan 18, 2016, 02:00 am Last Edit: Aug 06, 2016, 11:09 am by gsune
Code: [Select]
Traté de hacer el código en microsegundos así:

Code: [Select]
<void loop() {
  digitalWrite(led, HIGH);   
  delayMicroseconds(55600);             
  digitalWrite(led, LOW);   
  delayMicroseconds(278000);
  digitalWrite(led, HIGH);   
  delayMicroseconds(55600);               
  digitalWrite(led, LOW);   
  delayMicroseconds(278000);
  digitalWrite(led, HIGH);   
  delayMicroseconds(55600);               
  digitalWrite(led, LOW);   
  delayMicroseconds(278000);
  digitalWrite(led, HIGH);   
  delayMicroseconds(55600);               
  digitalWrite(led, LOW);   
  delayMicroseconds(472000);
  digitalWrite(led2, HIGH);
  digitalWrite(led, LOW);   
  delayMicroseconds(472000); >


y ahora obtengo muchos errores:


F:\ARDUINO\microsecond\microsecond.ino: In function 'void loop()':

F:\ARDUINO\microsecond\microsecond.ino:17:27: warning: large integer implicitly truncated to unsigned type [-Woverflow]

   delayMicroseconds(278000);

                           ^

surbyte

Esta es mi última respuesta hasta no ver que usas los tags para insertar códigos. 

Pero porque pones números tan altos?
5.56 mseg son 5560 useg 
delay(5.56);   cambia a delayMicroseconds(5560);
delay(2.78);cambia a delayMicroseconds(2780);
no hay ningun número posible como 
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);
}
// 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);

 // 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

ok allí anda bien.

quisiera saber si existe algún simulador de arduino y si existe la posibilidad de ver en la pc con un osciloscopio virtual el patrón de ondas de la salida del arduino ?
muchas gracias

surbyte

Si. claro pero gratis no. El mejor para mi se llama Proteus.

Go Up