Självbalanserande Segway Instructabot (2 / 4 steg)
Steg 2: elektronik
Hjärnan av roboten är en Arduino UNO som läser accelerometern och ger kommandon till motor controller som i sin tur driver motorerna. Arduinoen tar 10 läsningar per sekund från accelerometern och ändrar proportionellt varvtal och riktning. Arduino koden har genomgått många förändringar och tester, men du kan fortfarande behöva ändra vissa värden är förenlig med din robot. Om du vill köra roboten, koppla in alla kablar i rätt sätt och ladda upp koden nedan till Arduino. Det ska börja arbeta just där och då.
Self Balancing Instructabot 2013
Ferris
#include
int x, r, l, s, f, xa, xb, xc;
Digital stift 13 är seriell överföra stift till sabertooth
#define SABER_TX_PIN 13
Inte används men fortfarande påbörjas, Digital stift 12 är seriell får från Sabertooth
#define SABER_RX_PIN 12
Ange baudvärde för att matcha sabertooth dip inställningar
#define SABER_BAUDRATE 9600
SoftwareSerial SaberSerial = SoftwareSerial (SABER_RX_PIN, SABER_TX_PIN);
void initSabertooth (void) {
kommunicera med sabertooth
pinMode (SABER_TX_PIN, OUTPUT);
SaberSerial.begin (SABER_BAUDRATE);
}
void setup() / / kör en gång, när skissen startar
{
initSabertooth();
analogINPUTS
Serial.BEGIN(9600);
}
void set_motor() {
x = analogRead(0); Läs analog ingångsstift 0
x är om 270-400 och platt är ca 330
smidig x av i genomsnitt 3 avläsningar av x
XA = x;
fördröjning (20);
x = analogRead(0);
xb = x;
fördröjning (20);
x = analogRead(0);
XC = x;
x = (xa + xb + xc) / 3;
SABER_right_FULL_FORWARD 127
SABER_right_FULL_REVERSE 1
SABER_left_FULL_FORWARD 255
SABER_left_FULL_REVERSE 128
s = lutningen med mindre att vara mer aggressiva
s = 1,8;
f = fiffelfaktorn
f = 5;
stabil x runt 330
om ((x > 325) & & (x < 335)) {
r = 62;
l = 194;
}
driva med en jämn hastighet om framåtlutad lite 310 > x < 330
om ((x > 310) & & (x < 326)) {
r = 45;
l = 167;
}
om fallande framåt mer öka hastigheten linjärt för 279 > x < 311
om ((x > 279) & & (x < 311)) {
högre värden göra det snabbare
r = s * x - 278 + f;
l = s * x - 148 + f;
}
om full framåt x < 280
om ((x > 250) & & (x < 280)) {
r = 6;
l = 133;
}
kör med en jämn hastighet bakåt om lutar sig tillbaka lite 334 > x > 349
om ((x > 334) & & (x < 349)) {
r = 78.
l = 208;
}
om fallande backwords mer öka hastighet linjärt för 348 < x < 390
om ((x > 348) & & (x < 391)) {
lägre värden gör det snabbare
r = s * x - 270 + f;
l = s * x - 140 + f;
}
om full backwords 390 < x
om ((x > 390) & & (x < 410)) {
r = 122;
l = 250;
}
Skicka motor utgångar till sabertooth
SaberSerial.write(byte(r));
SaberSerial.write(byte(l));
}
Ogiltig loop () {
flyta nivå = 0;
int u;
set_motor();
} / / end loop