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.
|
|
![]() | 11 septiembre 2015 en Electronica | tags: Arduino, Cursos, Electronica |




















