Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (13)
Arduino Robot Ps
Seguimos probando…
Una vez implementado este accesorio es hora de probarlo:
Un buen comportamiento, pero con alguna modificación de código quedaría mejor la exactitud de movimientos.
Intentando mejorar el código y simplificación de comandos he llegado a esto:
/*********************************************************************************************
Tutorial: Robot Ps
Autor: www.pesadillo.com - 12 Agosto 2015
http://www.pesadillo.com/
Implementamos altavoz para proporcionar pitidos de señalizacion. Simplificamos los giros en motores.
********************************************************************************************/
#define MOTOR1_CTL1 8 // I1
#define MOTOR1_CTL2 9 // I2
#define MOTOR2_CTL1 6 // I3
#define MOTOR2_CTL2 7 // I4
#define MOTOR_DIR_FORWARD 0
#define MOTOR_DIR_BACKWARD 1
int speakerPin = 13; // declaro pin para speaker
void setup()
{
// Setup pins for motor 1
pinMode(MOTOR1_CTL1,OUTPUT);
pinMode(MOTOR1_CTL2,OUTPUT);
// Setup pins for motor 2
pinMode(MOTOR2_CTL1,OUTPUT);
pinMode(MOTOR2_CTL2,OUTPUT);
// set the speaker pin mode to output
pinMode(speakerPin, OUTPUT);
}
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)
{
if (motor_num == 1)
{
digitalWrite(MOTOR1_CTL1,LOW);
digitalWrite(MOTOR1_CTL2,LOW);
}
else
{
digitalWrite(MOTOR2_CTL1,LOW);
digitalWrite(MOTOR2_CTL2,LOW);
}
}
//pitidos
void pitido(char pitidos_num)
{
for (int pip=0; pip<pitidos_num; pip++)
{
for (int i=300; i>0; i--)
{
digitalWrite(speakerPin, HIGH);
delayMicroseconds(200);
digitalWrite(speakerPin, LOW);
delayMicroseconds(200);
}
delay (50);
}
}
// avance
void avanza() //creamos el comando "avanza" y especificamos el comportamiento de las salidas (sentido de giro de los motores)
{
digitalWrite(MOTOR1_CTL1,LOW);
digitalWrite(MOTOR1_CTL2,HIGH);
digitalWrite(MOTOR2_CTL1,LOW);
digitalWrite(MOTOR2_CTL2,HIGH);
}
void para() //comando "para" donde dejamos de suministrar energia a los morores
{
digitalWrite(MOTOR1_CTL1,LOW);
digitalWrite(MOTOR1_CTL2,LOW);
digitalWrite(MOTOR2_CTL1,LOW);
digitalWrite(MOTOR2_CTL2,LOW);
pitido(2);
}
void girad() //giro a derecha
{
digitalWrite(MOTOR1_CTL1,LOW);
digitalWrite(MOTOR1_CTL2,HIGH);
digitalWrite(MOTOR2_CTL1,HIGH);
digitalWrite(MOTOR2_CTL2,LOW);
}
void girai() //giro a izquierda (vease que se alimenta uno de los polos de las bobinas del motor en funcion del giro deseado)
{
digitalWrite(MOTOR1_CTL1,HIGH);
digitalWrite(MOTOR1_CTL2,LOW);
digitalWrite(MOTOR2_CTL1,LOW);
digitalWrite(MOTOR2_CTL2,HIGH);
}
void atras()//atras... invertimos "avanza"
{
digitalWrite(MOTOR1_CTL1,HIGH);
digitalWrite(MOTOR1_CTL2,LOW);
digitalWrite(MOTOR2_CTL1,HIGH);
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);
}
//fin pitido
delay(5000);// espera 5 segundos
//Ejecutamos los comandos deseados llamando a los subprocesos:
avanza();
delay (2000);//paramos 5 segundos
para();
delay (5000);//paramos 5 segundos
atras();
delay (2000);//paramos 5 segundos
para();
delay (5000);//paramos 5 segundos
girad();
delay(230);//= +-90g
para();
delay (5000);//paramos 5 segundos
girai();
delay(230);//= +-90g
para();
delay (5000);//paramos 5 segundos
// giro derecha 180g
girad();
delay(460);//=+-180grados
para();
delay (10000);//paramos 10 segundos
pitido(3);//damos 3 pitidos
delay (3000);//esperamos 3 segundos
}
Un código más entendible… podéis probarlo enviando la programación a la placa para ver su comportamiento.
El próximo día seguiremos con el desarrollo y aprendizaje.
|
|
![]() | 13 septiembre 2015 en Electronica | tags: Arduino, Cursos, Electronica |




















