Bygga en robotarm för Science Olympiad (10 / 14 steg)
Steg 10: P.3, kod: prata med en Servo
Starta seriell kommunikation i den Arduino setup() funktion på överföringshastighet 9600 (bitar per sekund):
Serial.BEGIN(9600);
Jag skriva brukar ut ett meddelande i slutet av funktionen setup() bekräfta att Arduino är arbetstid och redo att börja få seriell in:
Serial.println ("jag arbeta!");
Nu, i de viktigaste loop, vill vi vänta tills 3 tecken (byte) har tagits emot, funktionen Serial.available() berättar hur många byte i bufferten, så vi avsöka den tills värdet når 3:
om (Serial.available() == 3) {
... några kod...
}
För att läsa byte av bufferten, använder vi Serial.read(), som också försvinner den Läs byten av bufferten. Eftersom vi får 3 byte, innebär detta 3 samtal till Serial.read(). Varje byte representerar en siffra kodade i ASCII. Ta en titt på th
Märka något om var 0, 1, 2... är? Det är rätt! De börjar på 48, 49, 50...! Det innebär att du behöver ta ifrån 48 från ASCII-värdet att få den överförda siffran. (Tacka oss för detta, eftersom vi var illa till för om dagen, tills scolton förklarade det)
Bufferten är FIFO (först in först ut), så vi läser hundratals siffrigt första, Ten sekund, och de sista (samma ordning som de överfördes):
vinkel = (Serial.read() - 48) * 100;
Vinkla += (Serial.read() - 48) * 10;
vinkel += (Serial.read() - 48);
Nu vill vi skriva det meta till en servo - importera servo bibliotek:
#include < Servo.h >
Deklarera en servo objekt innan installationsmetoden (detta är också där du deklarera den vinkel, som bör vara ett heltal, eller en flyktig kort om du är pedantisk = P):
Servo myServo;
Slutligen Skriv mottagna vinkeln i om- Serial.available() -uttrycket:
myServo.write(angle);
Om du följde längs det sista steget (eller kompilerade exemplet), bör du ha en konsol-baserat servo controller redo att gå!
Här är en video av oss testa hela systemet. Räckvidden är övervakning servo PWM vågformen, och Tim är att ange siffror mellan 0 och 176 på Macs konsolen och Arduino är att vinkeln på en servo:
YouTube video Beskrivning:
"En kommandoradsverktyg skriven i Objective-C att styra placeringen av en servomotor med seriellt gränssnitt och en Arduino Mega 2560 - det första steget i mitt robotarm projekt."
Jag har bifogat en kopia av Arduino-side-koden så att du kan testa både sändare och mottagare. Hårdvaran är ganska enkelt, Anslut en servo signal kabel till Arduino Mega stift 50 (du kan ändra detta), ansluta marken stiftet till den Arduino marken och Anslut + 5V till en extern strömkälla med dess marken också ansluten till Arduino är marken. Det är viktigt att du använder en extern strömkälla som strömmar genom ett servo kan orsaka Arduino att brownout eller bete sig oförutsägbart.