Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (14)
Arduino Robot Ps
Seguimos probando…
Siguiendo con el objetivo de simplificar las ordenes de mando para nuestro pequeño robot, nos hemos puesto las manos a la obra y hemos llegado a una simplificación interesante:
/*********************************************************************************************
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.
Simplificamos codigo enviando a los subprocesos los tiempos de ejecución del comando.
********************************************************************************************/
#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(int avanza_num) //seguimos con el SUBPROCESO "avanza" al que le pedimos un valor numerico (INT)
{
digitalWrite(MOTOR1_CTL1,LOW);
digitalWrite(MOTOR1_CTL2,HIGH);
digitalWrite(MOTOR2_CTL1,LOW);
digitalWrite(MOTOR2_CTL2,HIGH);
delay (avanza_num);//Aplicamos el valor numerico obtenido entre parentesis
}
void para(int para_num)
{
digitalWrite(MOTOR1_CTL1,LOW);
digitalWrite(MOTOR1_CTL2,LOW);
digitalWrite(MOTOR2_CTL1,LOW);
digitalWrite(MOTOR2_CTL2,LOW);
pitido(2);
delay(para_num);
}
//giro derecha
void girad(int girad_num)
{
digitalWrite(MOTOR1_CTL1,LOW);
digitalWrite(MOTOR1_CTL2,HIGH);
digitalWrite(MOTOR2_CTL1,HIGH);
digitalWrite(MOTOR2_CTL2,LOW);
delay (girad_num);
}
//giro izquierda
void girai(int girai_num)
{
digitalWrite(MOTOR1_CTL1,HIGH);
digitalWrite(MOTOR1_CTL2,LOW);
digitalWrite(MOTOR2_CTL1,LOW);
digitalWrite(MOTOR2_CTL2,HIGH);
delay (girai_num);
}
//atras
void atras(int atras_num)
{
digitalWrite(MOTOR1_CTL1,HIGH);
digitalWrite(MOTOR1_CTL2,LOW);
digitalWrite(MOTOR2_CTL1,HIGH);
digitalWrite(MOTOR2_CTL2,LOW);
delay (atras_num);
}
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 silvido
delay(5000);// espera 5 segundos
//He aqui el código simplificado con los comandos del anterior desarrollo:
avanza(2000);//enviamos cuanto avanza
para(2000);//enviamos cuanto para
atras(2000);//enviamos cuanto atras...
para(2000);
girad(230);//= +-90g
para(2000);
girai(230);//= +-90g
para(2000);
girad(460);// giro derecha 180g
para(2000);
//Final
// Como se observa muchisimo mas simple
pitido(3);
delay (3000);
}
El próximo día rizaremos más el rizo y conseguiremos un nuevo objetivo.
|
|
![]() | 14 septiembre 2015 en Electronica | tags: Arduino, Cursos, Electronica |




















