Hand spåra mekanisk Arm - Pyduino + språng Motion (10 / 11 steg)
Steg 10: Träna sista kretsen
Den slutliga kretsen ser lite komplicerat men det verkligen inte. Vi har bara totalt 6 stift kopplade till vår arduino enhet när vi använder bakbord. Du kommer att ha 4 digitala stift (2,3,4,5) ockuperade och sedan en makt och marken en. På skärbräda ser du 4 huvudsakliga rader av ledningar, varje rad motsvarar en enda servo. Kraften för varje servomotor är kopplad till kolumnen makt på bakbord som är kopplad till 5V ut på arduino. Kom ihåg att sätta bakbord nära armen så kablarna anslutna till servo är tillräckligt långa för att nå. Jag litar på er killar för att kunna tråd i 4 servon, det är inte rocket science: p
Innan du kan använda Leap förslaget för att styra alla fyra servon måste vi ladda upp en ny skiss på våra Arduino enhet som vi kommer att göra. Våra nuvarande skiss just nu kan bara stödja en Bila. Kolla in skissen nedan, om du inte planerar att använda stift 2,3,4,5 för att styra din servomotorer då du kommer att behöva ändra rader 30,31,32,33.
https://github.com/theown1/pyduino_leapmotion/BLOB...
/*
* Skiss att styra de servo stiften på Arduino via seriella gränssnittet
*
*/
#include
char drift; Innehar drift (R, W,...)
char läge; Innehar läget (D, A)
int pin_number; Innehar den pin-kod
int digital_value; Håller det digitala värdet
int analog_value; Håller det analoga värdet
int value_to_write; Innehar det värde som vi vill skriva
int wait_for_transmission = 5; Försening i ms för att få den seriella data
skapa objekt för att styra en servo servo
maximalt åtta servo objekt kan skapas
Servo SERVO2;
Servo SERVO3;
Servo SERVO4;
int SERVO2_PIN = 2; Azimuth vinkel
int SERVO3_PIN = 3; höjd vinkel
int SERVO4_PIN = 4; handled vinkel
void setup() {
Serial.BEGIN(9600); Serial Port på 9600 baud
Serial.setTimeout(500); Istället för standard 1000ms, för
att påskynda Serial.parseInt()
SERVO2.attach(SERVO2_PIN);
SERVO2.write(180); Återställ till ursprungliga position
SERVO3.attach(SERVO3_PIN);
SERVO3.write(90); Återställ till ursprungliga position
servo3 gränsen 0-85
SERVO4.attach(SERVO4_PIN);
SERVO4.write(90); Återställ till ursprungliga position
}
void servo_write (int pin_number, int servo_value) {
/*
* Utför en servo skriva på pin_number med servo_value
* Värdet måste vara 0 till 180 (kan ändras beroende på servo)
*/
om (pin_number == SERVO2_PIN)
{
SERVO2.write(servo_value);
Delay(10);
}
annat if (pin_number == SERVO3_PIN)
{
SERVO3.write(servo_value);
Delay(10);
}
annat if (pin_number == SERVO4_PIN)
{
SERVO4.write(servo_value);
Delay(10);
}
}
void loop() {
Kontrollera om tecken som finns i bufferten
om (Serial.available() > 0)
{
tolka information
artighet av lekum
operation = Serial.read();
Delay(wait_for_transmission); Om inte försenas, är andra tecknet inte korrekt läsa
läge = Serial.read();
pin_number = Serial.parseInt(); Väntar på en int översändas
om (Serial.read()==':')
{
value_to_write = Serial.parseInt(); Samlar in värdet skrivs
}
om vi får rätt ingång skriva servo
om (operation == "W")
{
om (läge == 'S ")
{
servo_write (pin_number, value_to_write);
}
}
}
}