Clusterbot! (9 / 11 paso)

Paso 9: Alambre el Arduino y el código para su primera prueba de funcionamiento

Conectar los cables de puente y de tu Arduino a la protoboard mini en su protoshield.  Utilizar la imagen del paso anterior para ayudar a lograr esto.

En cuanto a los pines de I/O en el Arduino, conectarlos al conductor del motor como sigue:

PWMA se conectará al pin 3 en el Arduino.
AIN1 se conectará al pin 0 en Arduino.
AIN2 se conectará al pin 1 de la Arduino.
PWMB se conectará al pin 5 en el Arduino.
BIN1 se conectará al pin 2 de Arduino.
BIN2 se conectará al pin 4 en el Arduino.
STBY se conectará al pin 6 en el Arduino.

En el código siguiente, escribí algunas funciones para hacer más fácil controlar el robot.  La sección de código principal se parece mucho al viejo lenguaje de programación Logo.

Tuve que pasar un poco de tiempo para ClusterBot a seguir recto.  Tengo no hay manera física hacerlo una alineación front-end en el robot, había retocado las funciones goForward() y goBackward() cambiando los valores PWM hasta que el bot orugas relativamente recto.  No es crucial que es perfecto con este robot, pero cuando primero ClusterBot, él se movería en arcos en vez de líneas.  No estoy seguro si el robot no está siguiendo recto porque es físicamente torcida, el peso se distribuye de manera desigual, las señales PWM son diferentes de los pasadores en el Arduino, o si es simplemente una cuestión de diferentes características de los dos motores o barato.  Probablemente una combinación de todo lo anterior.

También tomé algunas medidas ásperas de la distancia angular viajado al girar izquierda y derecha, por lo que fácilmente podría hacer el robot gire aproximadamente 90 grados, 180 grados, etc..  El problema con esto es que como la descarga de las baterías, el recorrido angular disminuirá también.  Es sólo una estimación aproximada.  Puede que no sea en este bot, pero voy a tener que tener codificadores en mis ruedas en algún momento, o utilizar motores paso a paso.  Ruedas codificadas será probablemente la respuesta aunque.

El código:

#define PWMA 3
#define AIN1 0
#define AIN2 1
#define PWMB 5
#define BIN1 2
#define BIN2 4
#define STBY 6

/ * Robot hace 27 vueltas en un minuto y
10 pies en 25 segundos.  Seguimiento recto actual es izquierda, derecha 255 233. */

void setup() {}
Pon tu código de instalación, para ejecutar una vez:
pinMode(PWMA,OUTPUT);
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
pinMode(PWMB,OUTPUT);
pinMode(BIN1,OUTPUT);
pinMode(BIN2,OUTPUT);
pinMode(STBY,OUTPUT);

}

void loop() {}

startUp();
goForward();
Delay(5500);
turnAround();
goForward();
Delay(5500);
turnAround();
goBackward();
Delay(5500);
rotateLeft();
Delay(560);
rotateRight();
Delay(560);
goForward();
Delay(3000);
applyBrakes();
Delay(2000);
}

goForward nula)
{
digitalWrite (AIN1, alto);
digitalWrite (AIN2, LOW);
analogWrite(PWMA,234);
digitalWrite (BIN1, alto);
digitalWrite (BIN2, LOW);
analogWrite(PWMB,255);
}

void goBackward)
{
digitalWrite (AIN1, LOW);
digitalWrite (AIN2, alto);
analogWrite(PWMA,233);
digitalWrite (BIN1, LOW);
digitalWrite (BIN2, alto);
analogWrite(PWMB,255);
}

rotateRight nula)
{
digitalWrite (AIN1, alto);
digitalWrite (AIN2, LOW);
analogWrite(PWMA,255);
digitalWrite (BIN1, LOW);
digitalWrite (BIN2, alto);
analogWrite(PWMB,255);
}

rotateLeft nula)
{
digitalWrite (AIN1, LOW);
digitalWrite (AIN2, alto);
analogWrite(PWMA,255);
digitalWrite (BIN1, alto);
digitalWrite (BIN2, LOW);
analogWrite(PWMB,255);
}

void veerLeft)
{
digitalWrite (AIN1, alto);
digitalWrite (AIN2, LOW);
analogWrite(PWMA,190);
digitalWrite (BIN1, alto);
digitalWrite (BIN2, LOW);
analogWrite(PWMB,255);
}

void veerRight)
{
digitalWrite (AIN1, alto);
digitalWrite (AIN2, LOW);
analogWrite(PWMA,255);
digitalWrite (BIN1, alto);
digitalWrite (BIN2, LOW);
analogWrite(PWMB,190);
}

void applyBrakes)
{
digitalWrite (AIN1, alto);
digitalWrite (AIN2, alto);
analogWrite(PWMA,255);
digitalWrite (BIN1, alto);
digitalWrite (BIN2, alto);
analogWrite(PWMB,255);
}

void Inicio)
{
digitalWrite(STBY,HIGH);
}

void turnAround()
{
rotateLeft();
Delay(1370);
}

Cierre void)
{
digitalWrite(STBY,LOW);
}

Artículos Relacionados