Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (11)
Arduino Robot Ps
Seguimos con el código…
Con pequeñas variaciones vamos entendiendo el funcionamiento de la programación.
Sin modificar el chasis, intentaremos averiguar cual es la variable tiempo (delay) para conseguir el giro de 180º.
/********************************************************************************************* Tutorial: Arduino Robot Ps V1.0 Autor: Pesadillo.com Agosto 2015 http://www.pesadillo.com ********************************************************************************************/ //esto es una linea comentada (no se ejecuta en el codigo) /* Esto es una frase comentada (no se ejecutaen el codigo) */ /* En este ejercicio estudiamos el comportamiento de las variables "delay" para adaptarlas a los movimientos deseados. En este caso giros de 90º y 180º */ #define MOTOR1_CTL1 8 // I1 #define MOTOR1_CTL2 9 // I2 #define MOTOR1_PWM 11 // EA #define MOTOR2_CTL1 6 // I3 #define MOTOR2_CTL2 7 // I4 #define MOTOR2_PWM 10 // EB #define MOTOR_DIR_FORWARD 0 #define MOTOR_DIR_BACKWARD 1 int speakerPin = 13; // declare the speaker pin number void setup() { // Setup pins for motor 1 pinMode(MOTOR1_CTL1,OUTPUT); pinMode(MOTOR1_CTL2,OUTPUT); pinMode(MOTOR1_PWM,OUTPUT); // Setup pins for motor 2 pinMode(MOTOR2_CTL1,OUTPUT); pinMode(MOTOR2_CTL2,OUTPUT); pinMode(MOTOR2_PWM,OUTPUT); // set the speaker pin mode to output pinMode(speakerPin, OUTPUT); } void setSpeed(char motor_num, char motor_speed) { if (motor_num == 1) { analogWrite(MOTOR1_PWM, motor_speed); } else { analogWrite(MOTOR2_PWM, motor_speed); } } void motorStart(char motor_num, byte direction) { char pin_ctl1; char pin_ctl2; if (motor_num == 1) { pin_ctl1 = MOTOR1_CTL1; pin_ctl2 = MOTOR1_CTL2; } else { pin_ctl1 = MOTOR2_CTL1; pin_ctl2 = MOTOR2_CTL2; } switch (direction) { case MOTOR_DIR_FORWARD: { digitalWrite(pin_ctl1,LOW); digitalWrite(pin_ctl2,HIGH); } break; case MOTOR_DIR_BACKWARD: { digitalWrite(pin_ctl1,HIGH); digitalWrite(pin_ctl2,LOW); } break; } } void motorStop(char motor_num) { setSpeed(motor_num, 0); if (motor_num == 1) { digitalWrite(MOTOR1_CTL1,LOW); digitalWrite(MOTOR1_CTL2,LOW); } else { digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,LOW); } } void loop() { // usamos un bucle para hacer efecto silvido. for (int i=500; i>200; i--) { digitalWrite(speakerPin, HIGH); delayMicroseconds(i); digitalWrite(speakerPin, LOW); delayMicroseconds(i); } delay(5000); // espera 5 segundos // avance motorStart(1, MOTOR_DIR_FORWARD); setSpeed(1, 50); motorStart(2, MOTOR_DIR_FORWARD); setSpeed(2, 50); delay(1100);//2200 milisegundos = +- 1metro //paro motorStop(1); motorStop(2); delay (5000);//paramos 5 segundos // giro derecha 90g motorStart(1, MOTOR_DIR_FORWARD); setSpeed(1, 50); motorStart(2, MOTOR_DIR_BACKWARD); setSpeed(2, 50); delay(230);//= +-90g //paro motorStop(1); motorStop(2); delay (5000);//paramos 5 segundos // giro izquierda 90g motorStart(2, MOTOR_DIR_FORWARD); setSpeed(2, 50); motorStart(1, MOTOR_DIR_BACKWARD); setSpeed(1, 50); delay(230);//= +-90g //paro motorStop(1); motorStop(2); delay (5000);//paramos 5 segundos // giro derecha 180g motorStart(1, MOTOR_DIR_FORWARD); setSpeed(1, 50); motorStart(2, MOTOR_DIR_BACKWARD); setSpeed(2, 50); delay(460);//=+-180grados //paro motorStop(1); motorStop(2); delay (5000); /* motorStart(1, MOTOR_DIR_BACKWARD); setSpeed(1, 200); motorStart(2, MOTOR_DIR_BACKWARD); setSpeed(2, 200); delay(2000); motorStart(1, MOTOR_DIR_FORWARD); setSpeed(1, 140); motorStart(2, MOTOR_DIR_BACKWARD); setSpeed(2, 140); delay(2000); motorStart(1, MOTOR_DIR_BACKWARD); setSpeed(1, 140); motorStart(2, MOTOR_DIR_FORWARD); setSpeed(2, 140); delay(2000); */ }
Observese que desechamos parte del código inicial, pues tratamos de averiguar los datos necesarios para el correcto giro de nuestro prototipo.
Tuitear 1.757 Veces leído 0 comentarios |
11 septiembre 2015 en Electronica | tags: Arduino, Cursos, Electronica |