Stap 2: elektronica
De hersenen van de robot is een Arduino UNO die leest de versnellingsmeter en opdrachten geeft aan de motor controller die op zijn beurt de bevoegdheden van de motoren. De Arduino neemt 10 lezingen per seconde vanaf de versnellingsmeter en proportioneel verandert de motor snelheid en richting. De code van de Arduino is gegaan door vele veranderingen en tests, maar je kan nog veranderen sommige van de waarden die compatibel zijn met uw robot. U voert de robot, alle kabels op de juiste manier aansluiten en de onderstaande code uploaden naar de Arduino. Het beginnen met werken, recht daar en dan.
Self Balancing Instructabot 2013
Ferris
#include
int x, r, l, s, f, xa, xb, xc;
Digitale pin 13 is seriële doorgeven aan sabertooth vastmaken
#define SABER_TX_PIN 13
Niet gebruikt, maar nog steeds geïnitialiseerd, Digital pin 12 is seriële Sabertooth ontvangen
#define SABER_RX_PIN 12
baudrate aan sabertooth duik instellingen instellen
#define SABER_BAUDRATE 9600
SoftwareSerial SaberSerial = SoftwareSerial (SABER_RX_PIN, SABER_TX_PIN);
VOID initSabertooth (void) {}
communiceren met sabertooth
pinMode (SABER_TX_PIN, uitvoer);
SaberSerial.begin (SABER_BAUDRATE);
}
void setup / / run eenmaal in, wanneer de schets wordt gestart
{
initSabertooth();
analogINPUTS
Serial.begin(9600);
}
ongeldig set_motor() {}
x = analogRead(0); lezen van analoge invoer pin 0
x bereik is over 270-400 en flat is ongeveer 330
soepele x door gemiddeld 3 lezingen voor x
XA = x;
vertraging (20);
x = analogRead(0);
Xb = x;
vertraging (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 = helling met minder agressief meer
s = 1,8;
f = de factor van de zachte toffee
f = 5;
stabiele x rond 330
Als ((x > 325) & & (x < 335)) {}
r = 62;
l = 194;
}
vooruit rijden met een constante snelheid als een beetje 310 voorovergebogen > x < 330
Als ((x > 310) & & (x < 326)) {}
r = 45;
l = 167;
}
als dalende voorwaartse meer snelheid lineair voor 279 verhoogt > x < 311
Als ((x > 279) & & (x < 311)) {}
hogere waarden maken sneller
r = s * x - 278 + f;
l = s * x - 148 + f;
}
als volledige voorwaartse x < 280
Als ((x > 250) & & (x < 280)) {}
r = 6;
l = 133;
}
achteruit rijden op een constante snelheid als een beetje 334 leunend > x > 349
Als ((x > 334) & & (x < 349)) {}
r = 78;
l = 208;
}
als dalende backwords meer snelheid lineair voor 348 verhoogt < x < 390
Als ((x > 348) & & (x < 391)) {}
lagere waarden maken sneller
r = s * x - 270 + f;
l = s * x - 140 + f;
}
als volledige backwords 390 < x
Als ((x > 390) & & (x < 410)) {}
r = 122;
l = 250;
}
Stuur motor uitgangen aan sabertooth
SaberSerial.write(byte(r));
SaberSerial.write(byte(l));
}
void loop () {}
zweven niveau = 0;
int u;
set_motor();
} / / einde lus