Synkronisera robotarm handledning (17 / 17 steg)
Steg 17:
Koden
#include
Servo bas;
Servo Joint1;
Servo Joint2;
Servo gripet;
CONST int analogInPin1 = A1; Analog ingång pin som potentiometern är kopplad till
CONST int analogInPin2 = A2; Analog ingång pin som potentiometern är kopplad till
CONST int analogInPin3 = A3; Analog ingång pin som potentiometern är kopplad till
CONST int analogInPin4 = A4; Analog ingång pin som potentiometern är kopplad till
int sensorValue1 = 0; värdet läsa från potten
int sensorValue2 = 0; värdet läsa från potten
int sensorValue3 = 0; värdet läsa från potten
int sensorValue4 = 0; värdet läsa från potten
void setup() {
initiera seriell kommunikation på 9600 bps:
Serial.BEGIN(9600);
Base.attach(3);
Joint1.attach(4);
Joint2.attach(5);
Grabber.attach(6);
}
void loop() {
Läs analogt värde:
sensorValue1 = analogRead(analogInPin1);
sensorValue2 = analogRead(analogInPin2);
sensorValue3 = analogRead(analogInPin3);
sensorValue4 = analogRead(analogInPin4);
skriva ut resultatet till seriell bildskärmen:
Serial.Print ("\nBase Joint:");
Serial.Print(sensorValue1);
Serial.Print ("botten gemensamma =");
Serial.Print(sensorValue2);
Serial.Print ("övre gemensamma =");
Serial.Print(sensorValue3);
Serial.Print ("gripet =");
Serial.Print(sensorValue4);
Mappa resultaten till servo kontroll parameter
Base.write (karta (sensorValue1, 200, 500, 45, 150));
Joint1.write (karta (sensorValue2, 680, 300, 130, 50));
Joint2.write (karta (sensorValue3, 800, 400, 30, 140));
Grabber.write (karta (sensorValue4, 250, 320, 180, 80));
}
Servo kontroll biblioteket Servo.h ingår i vår kod. Eftersom vår kod omfattar endast enkla funktioner, kommer vi inte gå alltför djupt i grundläggande av språket.
Motion-mappning mekanism
Dess rörelse kartläggning mekanismen involverar 3 steg:
1. Läs spänningen över motståndet från det analoga ingångsstiftet. Behandlingen varierar från 0-1023, som anger 0-5v spänning proportionellt.
Kod:
sensorValue1 = analogRead(analogInPin1);
sensorValue2 = analogRead(analogInPin2);
sensorValue3 = analogRead(analogInPin3);
sensorValue4 = analogRead(analogInPin4);
2. baserat på den ursprungliga orienteringen av servo, mappa indatavärdet för att matcha den önskade positionen för servo på motsvarande sätt.
3. skicka parametern position till det digitala utgångsstiftet till förflyttningar av servo.
Kod:
Base.write (karta (sensorValue1, 200, 500, 45, 150));
Joint1.write (karta (sensorValue2, 680, 300, 130, 50));
Joint2.write (karta (sensorValue3, 800, 400, 30, 140));
Grabber.write (karta (sensorValue4, 250, 320, 180, 80));
Funktionen map() i koden ovan används för att mappa Läs till parametern vinkel av servo. XXX.write() funktion används för att skicka de mappade värdena till servo.
Kalibrering
Som ställning spänning förhållandet kan vara ungefär anses vara linjär, ett enkelt sätt att ställa in parametern kartläggning är att ta ner de analoga ingången avläsningarna på 2 olika positioner (här rekommenderar vi mittpunkt eller slutpunkter) och mappa dem till parametern servo position.
Därför är vårt första steg att koppla upp den kontrollerande arm till mikrokontroller genom en USB-kabel, öppna programmet Arduino IDE, kopiera koden ovan till fönstret och ladda upp den till chipet. Kontrollera att rätt chip typ och COM-port har valts.
Om allt går bra, kan spänningen i varje motstånd läsas från seriella monitor. Se till att den seriella är valt för uppgå rätt band (9600 i vårt fall).
Då, flytta var och en av gemensamt till några vissa positioner och läsa
analog input värden från seriella övervaka och vit dem ned. Sedan justera servo armen till dessa positioner och ta ner position parametrar. Slutligen, mappa indatavärdena servo ståndpunkter och skicka dessa värden via digital utgångsstift.
Spela runt kartläggning parametrarna ger dig ett bättre resultat av synkronisering rörelse.
För att ytterligare förbättra dess riktighet, kan vi även lägga till fler positioner som referens och mappa dem piecewise.