Make bedraad robotarm rand aan "Wireless" met DIY Arduino + XBee (14 / 15 stap)

Stap 14: Arduino Sketch & landbouwindustrie code



Hier volgen de Arduino schets en verwerking Source Code (zowel Arduino schets en verwerking zijn in hetzelfde zipbestand hieronder):

Als u van deze schets gebruikmaakt, stel de Baud-Rate van uw XBee volgens uw XBee setup.

VOID Setup {}
...
wijzigen van de Baud-Rate volgens uw XBee, plaatste ik mijn XBee tot 115200.
Serial.begin(115200);
...

}

=== Arduino Sketch

Taal: Arduino
RobotArmControl.pde
//
door Sam Thongrong Feb 26, 2012
Rev.02
controle opdrachten array:
{GripOut, GripIn, WristUp, WristDown, ElbowUp, ElbowDown,
ShoulderUp, shoulderDown, BaseCW, BaseCCW, LightOn, LightOff, Stop};
int bepaalt [13] = {0x47, 0x67, 0x57, 0x77, 0x45, 0x65,
0x53, 0x73, 0x42, 0x62, 0x4c, 0x6c, 0x58};

Base
int baseEnablePin = 3;
int basePin1 = 16;
int basePin2 = 17;

Schouder
int shoulderEnablePin = 14;
int shoulderPin1 = 2;
int shoulderPin2 = 4;

Elleboog
int elbowEnablePin = 6;
int elbowPin1 = 7;
int elbowPin2 = 15;

Pols
int wristEnablePin = 11;
int wristPin1 = 8;
int wristPin2 = 12;

Grip
int gripEnablePin = 10;
int gripPin1 = 9;
int gripPin2 = 5;

int ledPin = 13;

set een variabele op te slaan van de byte verzonden vanaf de seriële poort
int incomingByte;

VOID Setup {}
licht LED instellen
pinMode (ledPin, OUTPUT);
digitalWrite (ledPin, laag);

de SN754410-pinnen als uitgang instellen
pinMode (basePin1, OUTPUT);
pinMode (basePin2, OUTPUT);
pinMode (baseEnablePin, OUTPUT);

pinMode (shoulderPin1, OUTPUT);
pinMode (shoulderPin2, OUTPUT);
pinMode (shoulderEnablePin, OUTPUT);

pinMode (elbowPin1, OUTPUT);
pinMode (elbowPin2, OUTPUT);
pinMode (elbowEnablePin, OUTPUT);

pinMode (wristPin1, OUTPUT);
pinMode (wristPin2, OUTPUT);
pinMode (wristEnablePin, OUTPUT);

pinMode (gripPin1, OUTPUT);
pinMode (gripPin2, OUTPUT);
pinMode (gripEnablePin, OUTPUT);

beginnen met het verzenden van gegevens op 115200 baud-rate
Ik stel mijn Xbee Baud-Rate 115200 bps,
wijzigen van de Baud-Rate volgens uw XBee
Serial.begin(115200);
}

void loop {}
Controleer of er iets in de seriële buffer is
Als (Serial.available() > 0) {}
Lees de byte en sla het in onze variabele
de byte verzonden is eigenlijk een ASCII-waarde
incomingByte = Serial.read();
Opmerking de bovenste behuizing van elke letter!
elke letter wordt een motor anders.

=== Grip
Grip in
Als (incomingByte == controls[0]) {}
gripIn();
}
Greep uit
Als (incomingByte == controls[1]) {}
gripOut();
}

Pols
Als (incomingByte == controls[2]) {}
digitalWrite (wristPin1, laag);
digitalWrite (wristPin2, hoge);
wristUp();
}
Als (incomingByte == controls[3]) {}
wristDown();
}

=== Elleboog
Elleboog omhoog
Als (incomingByte == controls[4]) {}
elbowUp();
}
Elleboog naar beneden
Als (incomingByte == controls[5]) {}
elbowDown();
}

=== Schouder
Schouder omhoog
Als (incomingByte == controls[6]) {}
shoulderUp();
}
Schouders omlaag
Als (incomingByte == controls[7]) {}
shoulderDown();
}

=== Base
Base rechts
Als (incomingByte == controls[8]) {}
baseRight();
}
Base links
Als (incomingByte == controls[9]) {}
baseLeft();
}

Licht op
Als (incomingByte == controls[10]) {}
digitalWrite (ledPin, hoge);
}
Licht uit
Als (incomingByte == controls[11]) {}
digitalWrite (ledPin, laag);
}

Als een O wordt verzonden maken zijn zeker de motoren uitgeschakeld
Als (incomingByte == controls[12]) {}
allStop();
}

delay(100);
}
}

ongeldig gripIn() {}
digitalWrite (gripEnablePin, hoge);
digitalWrite (gripPin1, laag);
digitalWrite (gripPin2, hoge);
}

ongeldig gripOut() {}
digitalWrite (gripEnablePin, hoge);
digitalWrite (gripPin2, laag);
digitalWrite (gripPin1, hoge);
}

ongeldig wristUp() {}
digitalWrite (wristEnablePin, hoge);
digitalWrite (wristPin1, laag);
digitalWrite (wristPin2, hoge);
}

ongeldig wristDown() {}
digitalWrite (wristEnablePin, hoge);
digitalWrite (wristPin2, laag);
digitalWrite (wristPin1, hoge);
}

ongeldig elbowUp() {}
digitalWrite (elbowEnablePin, hoge);
digitalWrite (elbowPin1, laag);
digitalWrite (elbowPin2, hoge);
}

ongeldig elbowDown() {}
digitalWrite (elbowEnablePin, hoge);
digitalWrite (elbowPin2, laag);
digitalWrite (elbowPin1, hoge);
}

ongeldig shoulderUp() {}
digitalWrite (shoulderEnablePin, hoge);
digitalWrite (shoulderPin1, laag);
digitalWrite (shoulderPin2, hoge);
}

ongeldig shoulderDown() {}
digitalWrite (shoulderEnablePin, hoge);
digitalWrite (shoulderPin2, laag);
digitalWrite (shoulderPin1, hoge);
}

ongeldig baseRight() {}
digitalWrite (baseEnablePin, hoge);
digitalWrite (basePin1, laag);
digitalWrite (basePin2, hoge);
}

ongeldig baseLeft() {}
digitalWrite (baseEnablePin, hoge);
digitalWrite (basePin2, laag);
digitalWrite (basePin1, hoge);
}

ongeldig allStop() {}
digitalWrite (baseEnablePin, laag);
digitalWrite (basePin1, laag);
digitalWrite (basePin2, laag);

digitalWrite (shoulderEnablePin, laag);
digitalWrite (shoulderPin1, laag);
digitalWrite (shoulderPin2, laag);

digitalWrite (elbowEnablePin, laag);
digitalWrite (elbowPin1, laag);
digitalWrite (elbowPin2, laag);

digitalWrite (wristEnablePin, laag);
digitalWrite (wristPin1, laag);
digitalWrite (wristPin2, laag);

digitalWrite (gripEnablePin, laag);
digitalWrite (gripPin1, laag);
digitalWrite (gripPin2, laag);
}

=== Arduino einde

Hier volgt de broncode voor verwerking. You'ill de achtergrond afbeeldingsbestand nodig, en alle knoppen beeld bestanden om te zien deze bedieningsknoppen op het scherm.

En alle achtergrond en knoppen advertentie er in de map met de naam gegevens zijn worden verstrekt. U zult moeten hebben deze map bevindt zich in dezelfde map van de Processing code (RobotArmControl.pde)

Taal: verwerking
RobotArmControl.pde

door Sam Thongrong Feb 26, 2012

laden van de seriële library voor verwerking
importeren van processing.serial.*;
instantie van de seriële klasse
Seriële poort;

controle opdrachten array:
GripOut, GripIn, WristUp, WristDown, ElbowUp, ElbowDown,
ShoulderUp, shoulderDown, BaseCW, BaseCCW, LightOn, LightOff, Stop

int [] besturingselementen = nieuwe int [] {}
0x47, 0x67, 0x57, 0x77, 0x45, 0x65,
0x53, 0x73, 0x42, 0x62, 0x4c, 0x6c, 0x58};

De knoop van het beeld.
Laden van afbeeldingen en het gebruik van hen om een knop te maken.
ImageButtons GripIn;
ImageButtons GripOut;
ImageButtons WristUp;
ImageButtons WristDown;
ImageButtons ElbowUp;
ImageButtons ElbowDown;
ImageButtons ShoulderUp;
ImageButtons ShoulderDown;
ImageButtons BaseCW;
ImageButtons BaseCCW;
ImageButtons LightOn;
ImageButtons LightOff;

ImageButtons Pause;

achtergrond
PImage bg;

het lettertype instellen
PFont myFont;

VOID controlGUI()
{
BG = loadImage("background.jpg");
Background(BG);

int buttonSize = 44;

PImage geselecteerd = loadImage("controlSel.png");

Grip In
PImage gripInImage = loadImage("controlIn.png");
PImage gripInOver = loadImage("controlInOver.png");
GripIn = nieuwe ImageButtons (30, 83, buttonSize, buttonSize,
gripInImage, gripInOver, geselecteerd);

Greep uit
PImage gripOutImage = loadImage("controlOut.png");
PImage gripOutOver = loadImage("controlOutOver.png");
GripOut = nieuwe ImageButtons (78, 83, buttonSize, buttonSize,
gripOutImage, gripOutOver, geselecteerd);

Pols omhoog
PImage wristUpImage = loadImage("controlUp.png");
PImage wristUpOver = loadImage("controlUpOver.png");
WristUp = nieuwe ImageButtons (150, 36, buttonSize, buttonSize,
wristUpImage, wristUpOver, geselecteerd);

Pols naar beneden
PImage wristDownImage = loadImage("controlDown.png");
PImage wristDownOver = loadImage("controlDownOver.png");
WristDown = nieuwe ImageButtons (198, 36, buttonSize, buttonSize,
wristDownImage, wristDownOver, geselecteerd);

Elleboog omhoog
PImage elbowUpImage = loadImage("controlUp.png");
PImage elbowUpOver = loadImage("controlUpOver.png");
ElbowUp = nieuwe ImageButtons (258, 83, buttonSize, buttonSize,
elbowUpImage, elbowUpOver, geselecteerd);

Elleboog naar beneden
PImage elbowDownImage = loadImage("controlDown.png");
PImage elbowDownOver = loadImage("controlDownOver.png");
ElbowDown = nieuwe ImageButtons (306, 83, buttonSize, buttonSize,
elbowDownImage, elbowDownOver, geselecteerd);

Schouder omhoog
PImage shoulderUpImage = loadImage("controlUp.png");
PImage shoulderUpOver = loadImage("controlUpOver.png");
ShoulderUp = nieuwe ImageButtons (208, 160, buttonSize, buttonSize,
shoulderUpImage, shoulderUpOver, geselecteerd);

Schouders omlaag
PImage shoulderDownImage = loadImage("controlDown.png");
PImage shoulderDownOver = loadImage("controlDownOver.png");
ShoulderDown = nieuwe ImageButtons (256, 160, buttonSize, buttonSize,
shoulderDownImage, shoulderDownOver, geselecteerd);

Base CW
PImage baseCWImage = loadImage("controlCW.png");
PImage baseCWOver = loadImage("controlCWOver.png");
BaseCW = nieuwe ImageButtons (130, 234, buttonSize, buttonSize,
baseCWImage, baseCWOver, geselecteerd);

Base CCW
PImage baseCCWImage = loadImage("controlCCW.png");
PImage baseCCWOver = loadImage("controlCCWOver.png");
BaseCCW = nieuwe ImageButtons (178, 234, buttonSize, buttonSize,
baseCCWImage, baseCCWOver, geselecteerd);
Licht op
PImage lightOnImage = loadImage("LightOn.png");
PImage lightOnOver = loadImage("LightOnOver.png");
LightOn = nieuwe ImageButtons (30, 184, buttonSize, buttonSize,
lightOnImage, lightOnOver, geselecteerd);

Licht uit
PImage lightOffImage = loadImage("LightOff.png");
PImage lightOffOver = loadImage("LightOffOver.png");
LightOff = nieuwe ImageButtons (78, 184, buttonSize, buttonSize,
lightOffImage, lightOffOver, geselecteerd);

}

VOID Setup {}
Een lijst van alle beschikbare seriële poorten in het paneel ' uitvoer '.
U zult moeten kiezen van de poort die de Arduino board is
aangesloten op uit deze lijst. De eerste poort in de lijst is
poort #0 en de derde poort in de lijst is poort #2.
println(Serial.List());
Open de poort waarop de Arduino board is aangesloten
(in dit geval #0)
Zorg ervoor dat de poort op dezelfde snelheid die Arduino is openen
met behulp van (112500bps)
poort = nieuwe Serial (dit, Serial.list() [1], 112500);

Op venster PC, gebruik "Uitgaande" van het bluetooth-apparaat
Deze keer voor XBee
poort = nieuwe Serial (dit, "COM30", 115200);

de grootte van het scherm van het programma
grootte (145, 455);
grootte (400, 300);
Smooth();

test ellips
ellipseMode(RADIUS);
textFont (createFont ("Verdana", 14));

controlGUI();

}

ongeldig updateDisplay() {}

GripIn.update();
GripIn.display();
GripOut.update();
GripOut.display();

WristUp.update();
WristUp.display();
WristDown.update();
WristDown.display();

ElbowUp.update();
ElbowUp.display();
ElbowDown.update();
ElbowDown.display();

ShoulderUp.update();
ShoulderUp.display();
ShoulderDown.update();
ShoulderDown.display();

BaseCW.update();
BaseCW.display();
BaseCCW.update();
BaseCCW.display();

LightOn.update();
LightOn.display();
LightOff.update();
LightOff.display();
}

Opdrachten verzenden
ongeldig sendCommands() {}

Grip
if(GripIn.pressed) {}
Port.write(Controls[0]);
println ("greep In:" + (char)controls[0]);
}
if(GripOut.pressed) {}
Port.write(Controls[1]);
println ("greep uit:" + (char)controls[1]);
}
Als (mouseX > 30 & & mouseX < 129 & &
mouseY > 51 & & mouseY < 79) {}
Port.write(Controls[12]);
println ("Greep Stop!" + (char)controls[12]);
}

Pols
if(WristUp.pressed) {}
Port.write(Controls[2]);
println ("pols omhoog:" + (char)controls[2]);
}
if(WristDown.pressed) {}
Port.write(Controls[3]);
println ("pols naar beneden:" + (char)controls[3]);
}
Als (mouseX > 148 & & mouseX < 248 & &
mouseY > 5 & & mouseY < 33) {}
Port.write(Controls[12]);
println ("Pols Stop!" + (char)controls[12]);
}

Elleboog
if(ElbowUp.pressed) {}
Port.write(Controls[4]);
println ("elleboog omhoog:" + (char)controls[4]);
}
if(ElbowDown.pressed) {}
Port.write(Controls[5]);
println ("elleboog naar beneden:" + (char)controls[5]);
}
Als (mouseX > 258 & & mouseX < 358 & &
mouseY > 51 & & mouseY < 79) {}
Port.write(Controls[12]);
println ("Elleboog Stop!" + (char)controls[12]);
}

Schouder
if(ShoulderUp.pressed) {}
Port.write(Controls[6]);
println ("schouder omhoog:" + (char)controls[6]);
}
if(ShoulderDown.pressed) {}
Port.write(Controls[7]);
println ("schouder naar beneden:" + (char)controls[7]);
}
Als (mouseX > 208 & & mouseX < 308 & &
mouseY > 130 & & mouseY < 158) {}
Port.write(Controls[12]);
println ("Schouder Stop!" + (char)controls[12]);
}

Base
if(BaseCW.pressed) {}
Port.write(Controls[8]);
println ("Base draaien CW:" + (char)controls[8]);
}
if(BaseCCW.pressed) {}
Port.write(Controls[9]);
println ("Base draaien CCW:" + (char)controls[9]);
}
Als (mouseX > 130 & & mouseX < 230 & &
mouseY > 202 & & mouseY < 230) {}
Port.write(Controls[12]);
println ("Basis Stop!" + (char)controls[12]);
}

Licht
if(LightOn.pressed) {}
Port.write(Controls[10]);
println ("Light On:" + (char)controls[10]);
}
if(LightOff.pressed) {}
Port.write(Controls[11]);
println ("licht uit:" + (char)controls[11]);
}
}

VOID draw()
{
updateDisplay();

sendCommands();
}

Knop & ImageButtons klassen
klasse knop
{
int x, y;
int w, h;
kleur basecolor, highlightcolor;
kleur currentcolor;
Boole-waarde meer dan = false;
Boolean ingedrukt = false;

ongeldig pressed() {}
Als (over & & mousePressed) {}
ingedrukt = true;
} else {}
ingedrukt = false;
}
}

Booleaanse overRect (int x, int y, int breedte, int hoogte) {}
Als (mouseX > = x & & mouseX < = x + breedte & &
mouseY > = y & & mouseY < = y + hoogte) {}
return true;
} else {}
return false;
}
}
}

klasse ImageButtons breidt knop
{
PImage basis;
PImage roll;
PImage
PImage currentimage;

ImageButtons (int ix, int iy, int iw, int ih,
PImage ibase, PImage iroll, PImage idown)
{
x = ix;
y = iy;
w = iw;
h = ih;
basis = ibase;
Roll = iroll;
omlaag = idown;
currentimage = base;
}

VOID update()
{
over();
pressed();
if(pressed) {}
currentimage = beneden;
} else if (over) {}
currentimage = rol;
} else {}
currentimage = base;
}
}

VOID over()
{
Als (overRect (x, y, w, h)) {}
meer dan = true;
} else {}
meer dan = false;
}
}

VOID display)
{
afbeelding (currentimage, x, y);
}
}

Einde van de verwerking

Om te controleren de motor van de robotarm, verplaatst u de cursor naar de gewenste knop en klik op.
Om te stoppen operatie gewoon Verplaats de cursor naar elk etiket. Robot zal stoppen.
Verplaats de cursor naar de knoppen vereist te exploiteren meerdere motoren tegelijk, en klikt u op deze knoppen klikken.
Maar sleep cursor pass niet over de labels, die leiden de operatie tot zal te stoppen

Geniet van!

Gerelateerde Artikelen

Maple rand graan snijplank met eiken accenten

Maple rand graan snijplank met eiken accenten

We naderen het vakantieseizoen en wat beter moment om te maken een snijplank dan nu. Dit is een eenvoudige rand graan snijplank met accenten die gemakkelijk kunnen worden gemaakt in een weekend! Het is volledig klantgericht afhankelijk van welk hout
Beheersing van Halloween effecten met DIY Infrarood afstandsbedieningen

Beheersing van Halloween effecten met DIY Infrarood afstandsbedieningen

Halloween is de perfecte gelegenheid om het maken van leuke speciale effecten. Wanneer u zin voor zitten kundig voor rekwisieten en effecten op afstand te bedienen, is een goede optie het gebruik van een infrarood afstandsbediening. Dus in dit projec
Arduino Wirelessly met MATLAB controleren

Arduino Wirelessly met MATLAB controleren

al het zien van enkele DIYs over hoe om een communicatie tussen MATLAB toepassing en Arduino thats hardwired naar PC. Echter heb niet ik ondervonden iets waarmee Arduino via MATLAB draadloos met behulp van de compatibele ENC28J60 Ethernet-shield. In
Als aanvulling op uw Drumming met - DIY vinger Jingles

Als aanvulling op uw Drumming met - DIY vinger Jingles

Percussie toevoegen aan uw vinger drummen met DIY vinger Jingles!! Dit is een handige accessoires als u spelen de Canjo vak drum, of gewoon willen trommel op een vak hallow te jammen met vrienden die gitaar spelen.Zo verzamelen een paar bier/Coca Col
DIY Arduino robotarm

DIY Arduino robotarm

Hallo Guys and Gals,Welkom bij een ander project door mij, deze keer zullen we ons richten op het creëren van een goedkope en eenvoudige robotarm die wordt beheerd door een arduino en 3 potentiometers. Dit eenvoudige apparaat is alleen vereist 5 volt
Programmering 101 met DIY RGB LED scrolling message ticker

Programmering 101 met DIY RGB LED scrolling message ticker

Wat?Video met een voorbeeld de eersteVideo met een voorbeeld de tweedeDit bericht ticker heeft 64 kleuren LEDs in een 8 x 8 raster. Het bericht dat wordt weergegeven zonder de hercodering van om het even wat kan worden veranderd en kan oplopen tot ee
Knoppen toevoegen aan uw X52-Pro-joystick met een Arduino Micro

Knoppen toevoegen aan uw X52-Pro-joystick met een Arduino Micro

Ik heb een Saitek X52-Pro HOTAS setup die ik gebruik voor Elite: gevaarlijk. Het is een fantastische joystick maar het kon doen met slechts een paar meer knoppen. Met een Arduino Micro kunt u uitbreiden deze (of enige andere) joystick voor elk spel d
Maak je eigen spel van Simon Says met DIY Electro deeg en Arduino!

Maak je eigen spel van Simon Says met DIY Electro deeg en Arduino!

Aan de slagHet doel van dit Instructable is om te zetten uw electro deeg in een Capacitieve touch-knop met Arduino met behulp van de bibliotheek van de arduino CapSense en vervolgens met het maken van een Simon Says spel. We gebruiken een capacitieve
Zelfgemaakte Mini Grinder riem wiel met DIY hoofden spindel met oude Motor Hand Drill

Zelfgemaakte Mini Grinder riem wiel met DIY hoofden spindel met oude Motor Hand Drill

Zelfgemaakte Mini Grinder riem wiel met DIY hoofden spindel met oude motor Hand boorZelfgemaakte Mini Grinder riem wielen onder het Frame hier:En meer materialen:1 PC's motor 50 watt nemen van oude rot boor1 stk L-beugel montage Mount 42 serie Steppe
Zelfgemaakte Mini Grinder riem wiel met DIY hoofden spindel met Hand Drill

Zelfgemaakte Mini Grinder riem wiel met DIY hoofden spindel met Hand Drill

Zelfgemaakte Mini Grinder riem wiel met DIY hoofden spindel met hand boor2 stuks speciale ronde stalen buizen 50 x 40 mm1 stk Aluminium 300 x 110 x 12 mm voor bed1 stk Aluminium 300 x 20 x 12 mm1 PC's oude rot boor mooi werkMeer Homemade Mini Robotic
Zelfgemaakte Mini Grinder riem wiel met DIY schuren slijpen hoofd spindel

Zelfgemaakte Mini Grinder riem wiel met DIY schuren slijpen hoofd spindel

Zelfgemaakte Mini Grinder riem wiel met DIY schuren slijpen hoofden spil zeer goedkoop en gemakkelijk doen in huisMeer goede projecten zelfgemaakte Nice Work voor DIY Handmade hier:De krachtige 100 watt motor nemen van oude rot boor op deze gordel sa
Zelfgemaakte Mini Grinder riem wiel met DIY hoofden spindel van 2 oude Motor

Zelfgemaakte Mini Grinder riem wiel met DIY hoofden spindel van 2 oude Motor

Zelfgemaakte Mini Grinder riem wiel met DIY hoofden spil van 2 oude motorDit is een mijn mini riem Grinder gemaakt van 2 oude stap motor nemen van gebroken fotokopie machine. Ik niet de zand riem produceren maar snel ziek, maar het project is volgen:
PWM dimmer NE555 en MOSFET met DIY aluminium koffer.

PWM dimmer NE555 en MOSFET met DIY aluminium koffer.

een low-cost PWM dimmer NE555 en MOSFET met DIY aluminium koffer.Stap 1: aluminium behuizing van aluminium Square-beeldbuis. aluminium behuizing heeft een dubbele rol.Ten eerste is een beschermhoes.en ten tweede is koellichaam voorMOSFET.Stap 2: Gate
Motor van de controle met DIY tastbare Interfaces

Motor van de controle met DIY tastbare Interfaces

We gebruiken de MakeyMakey-boards op het Children's Museum of Houston om kinderen te leren de basisconcepten achter circuits en micro-controllers. Als u de MakeyMakey-website bladert, ziet u hoe het gebruikt kan worden om gemakkelijk omzetten elke ie