Bygga en Arduino Gripper Robot med en DynamixShield. (20 / 21 steg)

Steg 20: Programmera roboten.

Du kommer att behöva ladda ner källkoden för denna robot från min github förråd. Eftersom du redan tilldelat de servo-ID bör du ha biblioteken installeras på rätt plats. Vi kommer att använda den DynamixSerial och CommanderHS-klasserna. DynamixSerial används för att kontrollera Dynamixel servon, medan klassen Commander används för att bearbeta kommandon från Arbotix Commander joystick som kommer från XBee. Skissen du vill ladda finns på DynamixShield/sketches/ProbingRobot/ProbingRobot.ino. Jag kommer att gå över de viktigaste delarna av denna skiss här att förklara hur det fungerar.

1. vi börjar med inklusive rubriker för de bibliotek som behövs.

#include //include servo biblioteket att styra RobotGeek servon

#include "CommanderHS.h"

#include

2. sedan förklara vi vissa konstanter kommer vi att definierar ID: N för servon och några min och max värden för rörelser.

Servo 1: Vänster, bakre hjulet

#define LEFT_REAR_WHEEL_ID 1

Servo 2: Vänster, framhjul

#define LEFT_FRONT_WHEEL_ID 2

Servo 3: Höger, framhjul

#define RIGHT_FRONT_WHEEL_ID 3

Servo 4: Höger, bakhjulet

#define RIGHT_REAR_WHEEL_ID 4

Servo 5: Klo handled

#define CLAW_WRIST_ID 5

Standard Servo vänster klo

#define GRIPPER_SERVO_PIN 2

#define GRIPPER_MIN 0

#define GRIPPER_MAX 150

Servo gripperServo; skapa ett servo objekt för 9g FT-FS90MG micro servo

#define WRIST_POS_MIN 312

#define WRIST_POS_MAX 612

#define LEFT_CLAW_POS_MIN 412

#define LEFT_CLAW_POS_MAX 712

#define RIGHT_CLAW_POS_MIN 312

#define RIGHT_CLAW_POS_MAX 612

#define ENABLE_DEBUG 1

int wristPos = 512; int leftClawPos = 512; int rightClawPos = 512;

int gripperPos = 150; Börja på 150 grader

int gripperAdd = 0; Start vid 0 grader Lägg till

int currentLeftSpeed = 0; int currentRightSpeed = 0;

3. definiera klasserna DynamixSerial och befälhavare. Klassen DynamixSerial förutsätter att det använder Serial1 för kommunikation till Dynamixel servon. Dock om du passerar i hårdvara seriella portar här kan du åsidosätta den. Detta är så att programvaran kan användas på egna projekt som inte använder DynamixShield. För befälhavare klass måste du passera i en hårdvara seriell klass. Jag har också tagit en version av klassen Commander som låter dig använda mjukvaran följetong också. Om du vill använda detta istället då inkluderar CommanderSS.

CommanderHS kommando = CommanderHS (& Serial3);

DynamixelSerial Dynamixel(); eller Dynamixel(&Serial1);

4. i uppsättning startar vi debug seriell anslutning om debugging är aktiverad. Vi sedan starta befälhavaren på 38,400 baud, och sedan börja klassen DynamixSerial. Standardinställningen är en 1 Mbaud kommunikation hastighet och PIN-koden som används för att styra den halv duplex Dynamixel protokollet anges baserat på tavlan du använder. Så på en vederbörlig det är stift 22, men noll är det stift 2. Dock har du också möjlighet att ange dessa parametrar i anropet till metoden begin att åsidosätta vad som används för egna projekt. Efter det är gjort då samtal en metod för att konfigurera servon och commander förskjutningar. Jag går inte in dessa metoder i detalj. De huvudsakligen bara setup servon i rätt läge och återställa allt till en standardposition.

void setup() {

#ifdef ENABLE_DEBUG

Serial.BEGIN(57600);

tag (!. Seriell);

Serial.println ("starta installationsprogrammet");

#endif

Command.BEGIN(38400);

Dynamixel.BEGIN (); eller Dynamixel.begin (1000000, 22);

configureServos();

configureCommanderOffsets();

}

5. huvudloop är mycket enkel. Det kräver bara checkCommander och sedan förseningar 10 millisekunder.

void loop() {

checkCommander();

Delay(10);

}

6. kärnan i metoden checkCommander visas. Det kontrollerar först om kommandot har fått några meddelanden. Om den har kontrolleras det om knappar för en snabb sväng har drabbats. Om inte, då den behandlar knapparna för att flytta hjulen. Det bearbetar sedan knapparna för handled och gripare.

void checkCommander() {

IF(Command. ReadMsgs() > 0) {

Om vi vänder snabbt sedan använda den till kontroll

hjulen. Annars använda vanliga joystick.

IF(!processFastTurns()) {

processWheels();

}

processWrist();

processGripper();

7. du kan använda de sex knapparna på ovansidan av befälhavaren för att göra roboten vända på plats. De tre knapparna på höger sida kommer att snurra höger vid olika hastigheter, medan de tre knapparna till vänster gör det snurra vänster vid olika hastigheter. Också, höger och vänster knapparna på framsidan av befälhavaren gör det snurra höger och vänster på snabbaste hastigheten. Vi kan se detta nedan där vi ställa in vänster och höger hjulen att snurra i motsatta riktningar med olika hastighet värden beroende på vilken knapp är hit.

bool processFastTurns() {

om (command.buttons & BUT_R1 ||

Command.buttons & BUT_RT) {

setLeftWheels(1023);

setRightWheels(-1023);

return true;

}

annars om (command.buttons & BUT_L6 ||

Command.buttons & BUT_LT) {

setLeftWheels(-1023);

setRightWheels(1023);

return true;

}

annars om (command.buttons & BUT_R2) {

setLeftWheels(512);

setRightWheels(-512);

return true;

}

annars om (command.buttons & BUT_L5) {

setLeftWheels(-512);

setRightWheels(512);

return true;

}

annars om (command.buttons & BUT_R3) {

setLeftWheels(256);

setRightWheels(-256);

return true;

}

annars om (command.buttons & BUT_L4) {

setLeftWheels(-256);

setRightWheels(256);

return true;

}

returnera false;

}

8. om du inte är i snabbt vända läge, sedan kontrollerar den om du använder joysticken för att kontrollera förflyttning av roboten. metoden processWheels gör detta genom att hitta omfattningen och vinkel av rörelsen av promenad joysticken. Promenad joysticken är vänstra av commanderen. Dessa värden används för att bestämma att använda vänster och höger motor rusar.

void processWheels() {

Först kan hitta den totala längden av walkV vektorn

Detta kommer att kontrollera den totala hastigheten

int hastighet = sqrt ((command.walkV*command.walkV) +

(command.walkH*command.walkH));

flyta speedNorm = (float) hastighet / (float) 144,0;

int leftSpeed = 0, rightSpeed = 0;

Vinkeln på vertikalt till horisontellt kommer att kontrollera hur mycket tur det är

om (hastighet > 0) {

float ratio = (float) (command.walkV)/ hastighet;

flyta leftRatio = 0, rightRatio = 0;

om (command.walkH > 0) {

leftRatio = sign(ratio) * speedNorm;

rightRatio = förhållandet * speedNorm;

}

annat {

rightRatio = sign(ratio) * speedNorm;

leftRatio = förhållandet * speedNorm;

}

De värden som anges tillbaka från den arbotix befälhavaren är inte cirkulär

De är mer rektangulär. Så om du normalisera det sedan på max

vanliga och omvända inställningar är det endast på ca 70% styrka. Detta

multiplikatorn hjälper till att få max hastighet när du går framåt eller bakåt.

flyta multiplikator = 1;

om (((ratio > = 0,90) & & (förhållandet mellan < = 1,0)) ||

((förhållandet mellan < =-0.90) & & (ratio > =-1.0))) {

multiplikator = 1.4141f;

}

leftSpeed = 1023 * leftRatio * multiplikator;

rightSpeed = 1023 * rightRatio * multiplikator;

setLeftWheels(leftSpeed);

setRightWheels(rightSpeed);

}

9. nästa, vi kontrollerar handleden i metoden processWrist. Det tar titt joystick vertikala signalen att styra upp/förflyttningar av gripdon armen. Joysticken Titta är den till höger av commanderen.

void processWrist() {

int wristAdd = karta (command.lookV,-102, 102, -10, 10);

om ((wristPos + wristAdd > = WRIST_POS_MIN) & &

(wristPos + wristAdd < = WRIST_POS_MAX)) {

wristPos += wristAdd;

}

om (wristAdd! = 0) {

Dynamixel.moveSpeed (CLAW_WRIST_ID, wristPos, 700);

Delay(10);

}

}

10. så vi kolla om någon försöker stänga griparen genom att titta på den horisontella titt signalen.

void processGripper() {

int gripperAdd = karta (command.lookH,-102, 102, -10, 10);

om (gripperAdd! = 0) {

gripperPos += gripperAdd;

IF(gripperPos > GRIPPER_MAX) {

gripperPos = GRIPPER_MAX;

}

annat if(gripperPos < GRIPPER_MIN) {

gripperPos = GRIPPER_MIN;

}

gripperServo.write(gripperPos);

}

}

11. Slutligen, här är en beskrivning av setRightWheels. Denna metod styr rätt hjul för roboten att få dem att flytta. SetLeftWheels är ungefär samma, men styr hjulen på andra sidan.

void setRightWheels (int hastighet) {

om (hastighet! = currentRightSpeed) {

currentRightSpeed = hastighet;

om (hastighet > 0) {

om (hastighet > 1023) {

hastighet = 1023;

}

Dynamixel.turn (RIGHT_REAR_WHEEL_ID, 1, hastighet);

Delay(10);

Dynamixel.turn (RIGHT_FRONT_WHEEL_ID, 1, hastighet);

Delay(10);

}

annat {

om (hastighet <-1023) {

hastighet =-1023;

}

Dynamixel.turn (RIGHT_REAR_WHEEL_ID, 0,-hastighet);

Delay(10);

Dynamixel.turn (RIGHT_FRONT_WHEEL_ID, 0,-hastighet);

Delay(10);

}

}

}

Och det är det. Det finns vissa andra saker i skissen jag inte diskutera här, men det är främst för felsökning ändamål. Du kan aktivera felsökning av uncommenting //#define ENABLE_DEBUG 1 linje överst. Detta kommer att skriva ut vad som händer när du kör skissen. Använda Arduino IDE för att programmet du skissen till din microcontroller och sedan kan köra vår nya robot!

Se Steg
Relaterade Ämnen

BYGGA din egen INSEKT ROBOT med hjälp av ARDUINO och SERVO

Hej är, jag tillbaka med en mer instructalble. Jag kommer att lära dig att bygga en insekt roboten genom att använda Arduino och servomotorer. Låter coolt, rätt?. Vad du tycker om användningen av denna robot? På grund av sin kompakta storlek de kan a...

Med en Arduino ritning Robot med timme av koden Tutorials

Jag skapade en Arduino ritning robot för en workshop för att hjälpa tonåring flickor få intresserade av STEM ämnen (se). Roboten var avsedd att använda sköldpadda stil programmering kommandon som forward(distance) och turn(angle) för att skapa intres...

ANPASSADE bygga 4WD BLUETOOTH RC ROBOT med PVC

Hej killar detta är mitt andra projekt gjort av pvc, du kanske undrar varför välja pvs byggt mina projekt, coz jag har massa pvc som är resterna av mitt hus plumping arbete och jag inte vill slösa dem.PROJEKTINFORMATIONDetta är en enkel Bluetooth bas...

Arduino 4wd robot med ping sensor "J-Bot"

erfarenhetsnivå: Intermediate (kräver lödning)Tid som behövs för: 3-5 timmar beroende på erfarenhetJ-BOT Kit JamecoNågon nämnde att Jameco behövs en robotic maskot. Jag har alltid varit ett snille, särskilt med radiostyrda elektronik och så jag frivi...

Arduino-baserad robot med IR radar

robot prototypen i detta Instructable är min andra Arduino-baserad "slumbot" som är en autonom robot. Den är kopplad med husgeråd och skrotar. Roboten ser"" med en IR-scanning sensor roteras ett servo. Det ser vänster, framåt, och rätt...

Baserade Arduino humanoid robot med servomotorer

Hej alla,Detta är min första humanoid robot, gjord av tjock plast ark som jag inte vet namnet på bladet. Den finns i olika tjocklek. Här, använde jag 0,5 mm. Vid nu denna robot kan bara gå när jag bytte ON. Nu jobbar jag på att koppla Arduino och mob...

Mobil drivs arduino Uno robot med hjälp av DTMF

HejDetta är min första instructable. Så skulle jag försöka få dig att förstå hur man gör det. Nuförtiden, vill vi Visa våra vänner hur intelligent kan vi vara så detta är en perfekt modell måste du göra. Det är inte en autonom robot men du kan kalla...

Bygga en Robot med Perler pärlor

Inte du hatar när en rubrik lovar du något som författaren inte kan leverera senare? Jag antar att jag är skyldig till att. Naturligtvis bygga du inte en robot med perler pärlor. Men du kan bygga något som ser ut som en robot. Så här går vi:Steg 1: V...

Gör en Wi-Fi styrd Robot med en LinkIt

Här är en steg för steg guide som hjälper dig bygga första robot och lägga till komplexitet, som du följa med. Förutom bygga ett grundläggande hinder att undvika robot med hjälp av en UltraSonic sensor och Sparkfun motor driver , kommer du också lära...

Pipe-Bot - en smart arduino bluetooth robot

Detta är min första instructables. Här visar jag hur man gör en billig två hjulförsedda arduino bluetooth robot, med PVC-rör och dess leder (för att göra kroppen). Det är enkelt att göra och lätt att programmet. Det har mycket roligt att spela med de...

Bygga en 5-axlig robotarm med Arduino och DynamixShield

I detta instructable jag kommer att visa dig hur du snabbt och enkelt skapa en 5-axlig robotarm med kommersiella off-the-shelf komponenter och kontrollera den med en Arduino med en DynamixShield. DynamixShield är ett nytt tillägg för antingen Arduino...

Bygga din Internet kontrollerad Video-Streaming Robot med Arduino och Raspberry Pi

< the Instructable och koden är redo. Njut! Lämna en kommentar med du feedback! >Jag är (aka LiquidCrystalDisplay / Itay), en 14 år gammal student från Israel lärande i Max Shein Junior High School för avancerad vetenskap och matematik. Jag gör dett...

Bygga en enkel Robot med hjälp av en Arduino och L293 (H-brygga)

Hej gott folk, detta är min första instructable, och jag är här för att visa hur man bygger en enkel robot med lite Arduino programmering oroa inte dig, jag har bifogat kodfilen nedan, du kan använda den som referens.De som har ingen aning om en Ardu...

Bygga en liten Robot: gör världen är minsta hjul Robot med en gripare.

Bygga en 1/20 kubiktum robot med en gripare som kan plocka upp och flytta små objekt. Den styrs av ett Picaxe mikrokontroller. Vid denna tidpunkt, tror jag detta kan vara världens minsta hjulförsedda robot med en gripare. Som utan tvekan kommer att f...

2-wheel Self Balancing Robot med hjälp av Arduino och MPU6050

2-Wheel Self Balancing Robot med hjälp av Arduino och MPU6050.Använda Arduino som controller och sensor MPU6050 för att styra balansen. Bara lägga till en enkel seriell Bluetooth-modul och använda en Bluetooth Serial Controller APP för Android-telefo...

Grundläggande raden efter Robot med Arduino

09/07/2015Det har varit några år eftersom vi Ursprungligen postat denna grundläggande linje följande Robot med Arduino handledning, och det verkar så många människor tyckte att det bra att vi ska skicka en uppdatering som löper nuvarande Arduino bibl...

Trådlöst styr en Robot med hjälp av Arduino och RF-moduler!

/*Redigera 05/05/2016Hej killar, jag har varit upptagen med college och kunde inte svara på commments. De flesta av y'all ville koden och scheman gjort lite bättre så jag har gjort scheman på Eagle 7.2.0 och laddat upp allt på Github.Här är länken: h...

Styra din Robot med en Wii Nunchuck (och en Arduino)

efter bär själv spela Wii boxning jag måste tänka vore det inte bra om jag kunde använda detta för att styra min robot, (ser att min vänstra hand).Titta runt på internet hittade jag en uppsjö av människor som gör liknande saker, (länkar till alla bar...

Arduino-baserad rad efterföljare robot med hjälp av Pololu kvart-8RC line sensor

uppdatering FEB 2012: denna guide är med på Adafruits blogghttp://www.adafruit.com/blog/2012/02/14/Arduino-based-line-Follower-robot/Detta är Faz3a II, min första linje-efter roboten, vilket jag hoppas också att använda för labyrint-lösa. Jag använde...