Stap 9: Draad van de Arduino en de code voor uw eerste test uitvoeren
Wat betreft de I/O pinnen op de Arduino, verbinden met hen de motor stuurprogramma als volgt:
PWMA zal verbinden met pin 3 op de Arduino.
AIN1 zal verbinden met 0 pin op de Arduino.
AIN2 zal verbinden met 1 pin op de Arduino.
PWMB zal verbinden met 5 pin op de Arduino.
BIN1 zal verbinden met 2 pin op de Arduino.
BIN2 zal verbinden met 4 pin op de Arduino.
STBY zal verbinden met pin 6 op de Arduino.
In de onderstaande code schreef ik een paar functies om gemakkelijker te controleren van de robot. De belangrijkste codesectie lijkt veel op de oude Logo programmeertaal.
Ik moest besteden een beetje tijd om ClusterBot te volgen rechtdoor. Ik heb geen fysieke manier om te doen een front-end-uitlijning op de robot, zodat ik de functies goForward() en goBackward() door het veranderen van de PWM-waarden totdat de bot relatief rechte bijgehouden geknepen. Het is niet essentieel dat het perfect met deze robot, maar toen ik liep eerst ClusterBot, hij in bogen in plaats van lijnen verplaatsen zou. Ik ben niet zeker als de robot niet bijhouden is recht omdat er fysiek krom, het gewicht is ongelijk verdeeld, de PWM-signalen zijn anders dan de twee pinnen op de Arduino, of als het is gewoon een kwestie van verschillende prestatiekenmerken van de twee motoren van de goedkope-o. Waarschijnlijk een combinatie van al het bovenstaande.
Ik nam ook een aantal ruwe metingen van de hoekafstand reisde als links en rechts roteren zodat ik kon gemakkelijk maken de robot zet ongeveer 90 graden, 180 graden, enz. Het probleem met dit is dat als het verlenen van de kwijting van de batterijen, de hoekige reizen zal ook afnemen. Het is slechts een ruwe schatting. Het zou niet op deze bot, maar ik zal moeten hebben encoders op mijn wielen op een bepaald punt, of gebruik gewoon stappenmotoren. Gecodeerde wielen zal waarschijnlijk wel het antwoord.
De code:
#define PWMA 3
#define AIN1 0
#define AIN2 1
#define PWMB 5
#define BIN1 2
#define BIN2 4
#define STBY 6
/ * Robot doet 27 rotaties in één minuut en
10 voeten in 25 seconden. Huidige rechte bijhouden is 233-links, 255. */
VOID Setup {}
Zet uw setup-code hier, om het eenmalig uit te voeren:
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);
}
VOID goForward)
{
digitalWrite (AIN1, hoge);
digitalWrite (AIN2, laag);
analogWrite(PWMA,234);
digitalWrite (BIN1, hoge);
digitalWrite (BIN2, laag);
analogWrite(PWMB,255);
}
VOID goBackward)
{
digitalWrite (AIN1, laag);
digitalWrite (AIN2, hoge);
analogWrite(PWMA,233);
digitalWrite (BIN1, laag);
digitalWrite (BIN2, hoge);
analogWrite(PWMB,255);
}
VOID rotateRight)
{
digitalWrite (AIN1, hoge);
digitalWrite (AIN2, laag);
analogWrite(PWMA,255);
digitalWrite (BIN1, laag);
digitalWrite (BIN2, hoge);
analogWrite(PWMB,255);
}
VOID rotateLeft)
{
digitalWrite (AIN1, laag);
digitalWrite (AIN2, hoge);
analogWrite(PWMA,255);
digitalWrite (BIN1, hoge);
digitalWrite (BIN2, laag);
analogWrite(PWMB,255);
}
VOID veerLeft)
{
digitalWrite (AIN1, hoge);
digitalWrite (AIN2, laag);
analogWrite(PWMA,190);
digitalWrite (BIN1, hoge);
digitalWrite (BIN2, laag);
analogWrite(PWMB,255);
}
VOID veerRight)
{
digitalWrite (AIN1, hoge);
digitalWrite (AIN2, laag);
analogWrite(PWMA,255);
digitalWrite (BIN1, hoge);
digitalWrite (BIN2, laag);
analogWrite(PWMB,190);
}
VOID applyBrakes)
{
digitalWrite (AIN1, hoge);
digitalWrite (AIN2, hoge);
analogWrite(PWMA,255);
digitalWrite (BIN1, hoge);
digitalWrite (BIN2, hoge);
analogWrite(PWMB,255);
}
VOID opstarten)
{
digitalWrite(STBY,HIGH);
}
VOID turnAround()
{
rotateLeft();
delay(1370);
}
VOID afsluiten)
{
digitalWrite(STBY,LOW);
}