Gör fast robotarm kanten till "Trådlös" med DIY Arduino + XBee (14 / 15 steg)

Steg 14: Arduino skiss & bearbetning kod




Följande är den Arduino skiss och bearbetning källkoden (både Arduino skiss och bearbetning är i samma zipfil nedan):

Om du använder denna skiss, ange baudvärde för din XBee enligt din XBee setup.

void setup() {
...
ändra baudfrekvens enligt din XBee, jag sätta min XBee till 115200.
Serial.BEGIN(115200);
...

}

=== Arduino skiss

Språk: Arduino
RobotArmControl.pde
//
av Sam Thongrong 26 Feb 2012
Rev.02
kontrollmatris kommandon:
{GripOut, låttexter GripIn, WristUp, WristDown, ElbowUp, ElbowDown,
ShoulderUp, shoulderDown, BaseCW, BaseCCW, Benny, LightOff, Stop};
int styr [13] = {0x47, 0x67, 0x57, 0x77, 0x45, 0x65,
0x53, 0x73, 0x42, 0x62, 0x4c, 0x6c, 0x58};

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

Axel
int shoulderEnablePin = 14.
int shoulderPin1 = 2;
int shoulderPin2 = 4;

Armbåge
int elbowEnablePin = 6;
int elbowPin1 = 7.
int elbowPin2 = 15.

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

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

int ledPin = 13.

Ange en variabel för att lagra den byte som skickats från den seriella porten
int incomingByte;

void setup() {
Ställ ljus LED
pinMode (ledPin, produktionen);
digitalWrite (ledPin, låg);

Ange SN754410 stiften som utgångar:
pinMode (basePin1, produktionen);
pinMode (basePin2, produktionen);
pinMode (baseEnablePin, produktionen);

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

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

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

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

börja skicka data på 115200 baud
Jag ställa min Xbee överföringshastigheten 115200 bps,
ändra baudfrekvens enligt din XBee
Serial.BEGIN(115200);
}

void loop() {
Kontrollera att det finns något i den seriella bufferten
om (Serial.available() > 0) {
Läs byten och lagra den i vår variabel
den byte som skickas är faktiskt ett ASCII-värde
incomingByte = Serial.read();
Observera det övre höljet på varje bokstav!
varje bokstav vänder sig motor annorlunda.

=== Grepp
Grepp i
om (incomingByte == controls[0]) {
gripIn();
}
Tag ut
om (incomingByte == controls[1]) {
gripOut();
}

Handled
om (incomingByte == controls[2]) {
digitalWrite (wristPin1, låg);
digitalWrite (wristPin2, hög);
wristUp();
}
om (incomingByte == controls[3]) {
wristDown();
}

=== Armbåge
Armbåge upp
om (incomingByte == controls[4]) {
elbowUp();
}
Armbåge ned
om (incomingByte == controls[5]) {
elbowDown();
}

=== Axel
Ta upp
om (incomingByte == controls[6]) {
shoulderUp();
}
Ta ner
om (incomingByte == controls[7]) {
shoulderDown();
}

=== Base
Base rätt
om (incomingByte == controls[8]) {
baseRight();
}
Base vänster
om (incomingByte == controls[9]) {
baseLeft();
}

Ljus på
om (incomingByte == controls[10]) {
digitalWrite (ledPin, hög);
}
Ljus av
om (incomingByte == controls[11]) {
digitalWrite (ledPin, låg);
}

om en O skickas göra är säker motorerna avstängda
om (incomingByte == controls[12]) {
allStop();
}

Delay(100);
}
}

void gripIn() {
digitalWrite (gripEnablePin, hög);
digitalWrite (gripPin1, låg);
digitalWrite (gripPin2, hög);
}

void gripOut() {
digitalWrite (gripEnablePin, hög);
digitalWrite (gripPin2, låg);
digitalWrite (gripPin1, hög);
}

void wristUp() {
digitalWrite (wristEnablePin, hög);
digitalWrite (wristPin1, låg);
digitalWrite (wristPin2, hög);
}

void wristDown() {
digitalWrite (wristEnablePin, hög);
digitalWrite (wristPin2, låg);
digitalWrite (wristPin1, hög);
}

void elbowUp() {
digitalWrite (elbowEnablePin, hög);
digitalWrite (elbowPin1, låg);
digitalWrite (elbowPin2, hög);
}

void elbowDown() {
digitalWrite (elbowEnablePin, hög);
digitalWrite (elbowPin2, låg);
digitalWrite (elbowPin1, hög);
}

void shoulderUp() {
digitalWrite (shoulderEnablePin, hög);
digitalWrite (shoulderPin1, låg);
digitalWrite (shoulderPin2, hög);
}

void shoulderDown() {
digitalWrite (shoulderEnablePin, hög);
digitalWrite (shoulderPin2, låg);
digitalWrite (shoulderPin1, hög);
}

void baseRight() {
digitalWrite (baseEnablePin, hög);
digitalWrite (basePin1, låg);
digitalWrite (basePin2, hög);
}

void baseLeft() {
digitalWrite (baseEnablePin, hög);
digitalWrite (basePin2, låg);
digitalWrite (basePin1, hög);
}

void allStop() {
digitalWrite (baseEnablePin, låg);
digitalWrite (basePin1, låg);
digitalWrite (basePin2, låg);

digitalWrite (shoulderEnablePin, låg);
digitalWrite (shoulderPin1, låg);
digitalWrite (shoulderPin2, låg);

digitalWrite (elbowEnablePin, låg);
digitalWrite (elbowPin1, låg);
digitalWrite (elbowPin2, låg);

digitalWrite (wristEnablePin, låg);
digitalWrite (wristPin1, låg);
digitalWrite (wristPin2, låg);

digitalWrite (gripEnablePin, låg);
digitalWrite (gripPin1, låg);
digitalWrite (gripPin2, låg);
}

=== Arduino slutet

Följande är källkoden bearbetning. You'ill behöver den bakgrund bild arkivera, och alla knappar bild arkivera för att se dessa knappar på skärmen.

Och alla bakgrunden och knappar finns ad finns i mappen kallas data. Du måste ha denna mapp i samma mapp i bearbetning-koden (RobotArmControl.pde)

Språk: bearbetning
RobotArmControl.pde

av Sam Thongrong 26 Feb 2012

läsa in följetong för bearbetning
import processing.serial.*;
förekomst av klassen följetong
Seriell port;

kontrollmatris kommandon:
GripOut, låttexter GripIn, WristUp, WristDown, ElbowUp, ElbowDown,
ShoulderUp, shoulderDown, BaseCW, BaseCCW, Benny, LightOff, stopp

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

Bild-knapp.
Läsa in bilder och använda dem för att skapa en knapp.
ImageButtons låttexter GripIn;
ImageButtons GripOut;
ImageButtons WristUp;
ImageButtons WristDown;
ImageButtons ElbowUp;
ImageButtons ElbowDown;
ImageButtons ShoulderUp;
ImageButtons ShoulderDown;
ImageButtons BaseCW;
ImageButtons BaseCCW;
ImageButtons Benny;
ImageButtons LightOff;

ImageButtons Pause;

bakgrund
PImage bg;

ange teckensnitt
PFont myFont;

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

int buttonSize = 44.

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

Grepp i
PImage gripInImage = loadImage("controlIn.png");
PImage gripInOver = loadImage("controlInOver.png");
Låttexter gripIn = nya ImageButtons (30, 83, buttonSize, buttonSize,
gripInImage, gripInOver, valt);

Tag ut
PImage gripOutImage = loadImage("controlOut.png");
PImage gripOutOver = loadImage("controlOutOver.png");
GripOut = ny ImageButtons (78, 83, buttonSize, buttonSize,
gripOutImage, gripOutOver, valt);

Handleden upp
PImage wristUpImage = loadImage("controlUp.png");
PImage wristUpOver = loadImage("controlUpOver.png");
WristUp = ny ImageButtons (150, 36, buttonSize, buttonSize,
wristUpImage, wristUpOver, valt);

Handleden ner
PImage wristDownImage = loadImage("controlDown.png");
PImage wristDownOver = loadImage("controlDownOver.png");
WristDown = ny ImageButtons (198, 36, buttonSize, buttonSize,
wristDownImage, wristDownOver, valt);

Armbåge upp
PImage elbowUpImage = loadImage("controlUp.png");
PImage elbowUpOver = loadImage("controlUpOver.png");
ElbowUp = ny ImageButtons (258, 83, buttonSize, buttonSize,
elbowUpImage, elbowUpOver, valt);

Armbåge ned
PImage elbowDownImage = loadImage("controlDown.png");
PImage elbowDownOver = loadImage("controlDownOver.png");
ElbowDown = ny ImageButtons (306, 83, buttonSize, buttonSize,
elbowDownImage, elbowDownOver, valt);

Ta upp
PImage shoulderUpImage = loadImage("controlUp.png");
PImage shoulderUpOver = loadImage("controlUpOver.png");
ShoulderUp = ny ImageButtons (208, 160, buttonSize, buttonSize,
shoulderUpImage, shoulderUpOver, valt);

Ta ner
PImage shoulderDownImage = loadImage("controlDown.png");
PImage shoulderDownOver = loadImage("controlDownOver.png");
ShoulderDown = ny ImageButtons (256, 160, buttonSize, buttonSize,
shoulderDownImage, shoulderDownOver, valt);

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

Base CCW
PImage baseCCWImage = loadImage("controlCCW.png");
PImage baseCCWOver = loadImage("controlCCWOver.png");
BaseCCW = ny ImageButtons (178, 234, buttonSize, buttonSize,
baseCCWImage, baseCCWOver, valt);
Ljus på
PImage lightOnImage = loadImage("LightOn.png");
PImage lightOnOver = loadImage("LightOnOver.png");
LightOn = nya ImageButtons (30, 184, buttonSize, buttonSize,
lightOnImage, lightOnOver, valt);

Ljus av
PImage lightOffImage = loadImage("LightOff.png");
PImage lightOffOver = loadImage("LightOffOver.png");
LightOff = ny ImageButtons (78, 184, buttonSize, buttonSize,
lightOffImage, lightOffOver, valt);

}

void setup() {
Lista alla tillgängliga seriella portar i panelen Ljud ut.
Måste du välja den port som Arduino styrelsen är
ansluten till från den här listan. Den första porten i listan är
Port #0 och tredje porten i listan är port #2.
println(Serial.list());
Öppna porten som Arduino styrelsen är ansluten till
(i detta fall #0)
Se till att öppna porten med samma hastighet Arduino är
med (112500bps)
Port = ny följetong (denna, Serial.list() [1], 112500);

På fönstret PC, använda "Utgående" av bluetooth-enheten
Här en för XBee
Port = ny följetong (här, "COM30", 115200);

skärmstorleken på programmet
storlek (145, 455);
storlek (400, 300);
Smooth();

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

controlGUI();

}

void 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();
}

Skicka kommandon
void sendCommands() {

Greppet
IF(GripIn.Pressed) {
port.write(Controls[0]);
println ("grepp i:" + (char)controls[0]);
}
IF(GripOut.Pressed) {
port.write(Controls[1]);
println ("grepp ut:" + (char)controls[1]);
}
om (mouseX > 30 & & mouseX < 129 & &
mouseY > 51 & & mouseY < 79) {
port.write(Controls[12]);
println ("Grepp stopp!" + (char)controls[12]);
}

Handled
IF(WristUp.Pressed) {
port.write(Controls[2]);
println ("handled upp:" + (char)controls[2]);
}
IF(WristDown.Pressed) {
port.write(Controls[3]);
println ("handleden ner:" + (char)controls[3]);
}
om (mouseX > 148 & & mouseX < 248 & &
mouseY > 5 & & mouseY < 33) {
port.write(Controls[12]);
println ("Handled stopp!" + (char)controls[12]);
}

Armbåge
IF(ElbowUp.Pressed) {
port.write(Controls[4]);
println ("armbåge upp:" + (char)controls[4]);
}
IF(ElbowDown.Pressed) {
port.write(Controls[5]);
println ("armbåge ned:" + (char)controls[5]);
}
om (mouseX > 258 & & mouseX < 358 & &
mouseY > 51 & & mouseY < 79) {
port.write(Controls[12]);
println ("Armbåga stopp!" + (char)controls[12]);
}

Axel
IF(ShoulderUp.Pressed) {
port.write(Controls[6]);
println ("knuffa upp:" + (char)controls[6]);
}
IF(ShoulderDown.Pressed) {
port.write(Controls[7]);
println ("knuffa ner:" + (char)controls[7]);
}
om (mouseX > 208 & & mouseX < 308 & &
mouseY > 130 & & mouseY < 158) {
port.write(Controls[12]);
println ("Axel stopp!" + (char)controls[12]);
}

Base
IF(BaseCW.Pressed) {
port.write(Controls[8]);
println ("Base rotera CW:" + (char)controls[8]);
}
IF(BaseCCW.Pressed) {
port.write(Controls[9]);
println ("Base rotera CCW:" + (char)controls[9]);
}
om (mouseX > 130 & & mouseX < 230 & &
mouseY > 202 & & mouseY < 230) {
port.write(Controls[12]);
println ("Bas stopp!" + (char)controls[12]);
}

Ljus
IF(LightOn.Pressed) {
port.write(Controls[10]);
println ("ljus på:" + (char)controls[10]);
}
IF(LightOff.Pressed) {
port.write(Controls[11]);
println ("ljus ut:" + (char)controls[11]);
}
}

void draw()
{
updateDisplay();

sendCommands();
}

Knappen & ImageButtons klasser
klass knappen
{
int x, y;
int w, h;
färg basecolor, highlightcolor;
färg currentcolor;
booleska över = false;
Boolean tryckte = false;

void pressed() {
om (över & & mousePressed) {
tryckte = sant;
} annat {
tryckte = false;
}
}

booleska overRect (int x, int y, int bredd, int höjd) {
om (mouseX > = x & & mouseX < = x + bredd & &
mouseY > = y & & mouseY < = y + höjd) {
return true;
} annat {
returnera false;
}
}
}

klassen ImageButtons utökar knappen
{
PImage bas;
PImage rullen.
PImage ner;
PImage currentimage;

ImageButtons (int ix, iy int, int iw, int ih,
PImage ibase, PImage iroll, PImage idown)
{
x = ix.
y = iy;
w = iw;
h = ih;
bas = ibase;
rulle = iroll;
ned = idown;
CurrentImage = bas;
}

void update()
{
over();
Pressed();
IF(Pressed) {
CurrentImage =.
} else om (över) {
CurrentImage = rullen.
} annat {
CurrentImage = bas;
}
}

void over()
{
om (overRect (x, y, w, h)) {
över = sant;
} annat {
över = false;
}
}

void display()
{
bild (currentimage, x, y);
}
}

Bearbeta slutet

För att styra robotarm motor, flyttar du markören till önskat knappen och klicka.
För att stoppa driften bara flytta markören till någon etikett. Roboten kommer att sluta.
Flytta markören till de knappar som krävs för att driva flera motorer på en gång, och på dessa knappar.
Men dra inte markören passerar över etiketterna, som gör att driften att stoppa

Njut!.

Se Steg
Relaterade Ämnen

Förvandla en N64 styrenhet till en USB-spelkontroll med en Arduino Leonardo

Det enklaste sättet att förvandla en N64 styrenhet till en USB-spelkontroll är att köpa en N64 Controller Adapter för runt £15. Det kan emellertid också göras om du har en Arduino Leonardo eller någon annan Arduino ombord med inbyggd USB-kommunikatio...

Konvertera en fast arm quadcopter till en "ryggsäck" drone med avtagbara armar

Projektet att bygga en drone med alla funktioner av APM flyg styrenheten utanför stigen...Steg 1: Videon omfattar delarna, bygga och testa...Detta var ett projekt att skapa en prototyp för att ändra en fast arm quadcopter till en drönare som passar v...

Förvandla en gammal mobiltelefon till en data skickas enhet (med en arduino)

Vad gör denna enhet?När allt är klart kommer kombinationen av kretsar, arduino och modded cellphone kunna autonomt skicka data via texter via mobilnätet. Detta kan vara sensordata, till exempel från väder sensorer.Vad ska jag visa dig i den här guide...

Lägga till en hemlig "Tactical" huva till någon jacka med bonus överraskning

denna nya jobb jag på har rökaravdelningen mitt på parkeringen som är ungefär storleken på en fotbollsplan, och de senaste veckorna har varit extremt kallt. Jag försöker alltid att minnas min hatt men racing ut ur huset jag alltid glömmer det. Jag tr...

Papperskorgen till konstnärliga skatt med husfärg!

Detta är ett riktigt bra sätt att bli av med en liten bit av överblivna inomhus husfärg, matcha din inredning och låta barnen ha roligt om du är benägen.Den bättre nyheten är att det kan användas till nästan vad som helst om du har rätt limmet. Det k...

Rörlig robotarm med PHIRO + Arduino

Vi är tillbaka med en annan tutorial att visa dig hur du sätter PHIRO Pro till en cool mobil robotarm som kan plocka och placera saker! Liknar våra tidigare PHIRO Arduino färgsensor instructable, vi kommer att använda Pocket koden på en Android-telef...

Seriella Servo Controller w/Arduino - kontroll upp till 12 servon samtidigt med Arduino och en USB-anslutning

jag kommer att visa dig hur du använder din Arduino för att styra upp till 12 servon på en gång med minimal jitter. Med ett enkelt seriellt gränssnitt kan du kontrollera positionen för upp till 12 servo kanaler. Upp till 10 ögonblicksbild positioner...

Lägga till knappar i din X52-Pro Joystick med en Arduino mikro

Jag har en Saitek X52-Pro HOTAS setup som jag använder för Elite: farligt. Det är en fantastisk joystick men det kan göra med bara några fler knappar. Med en Arduino Micro kan du utöka detta (eller någon annan) joystick för alla spel som kommer att s...

Hur till hacka en Wifi med Kali Linux 2.0

Hur till hacka en wifi med kali linux 2.0. Denna handledning l visar dig hur till spricka wifi lösenord med hjälp av en ordlista i Kali Linux 2.0.Steg 1: Kontrollera hur till hacka denSteg 2: stegVälkommen att lämna en kommentar & förslag (T.ex. Vide...

Hur till skydda din usb med ett lösenord

hur du lösenordsskyddar din hårddisk och USB blixt driva utanprogramvara. Denna video visar dig hur man låser pen-drive utan programvara. Hur man säkert USB-enheter och andra bärbara lagringsenheter. hur du lösenordsskyddar alla dina filer på din Fla...

Hur du sätter din dator (eller annan enhet) till en Retro Arcade med Lakka

Om du letar efter ett roligt sätt för att använda en gammal PC, Lakka kan förvandla det till en fantastisk retro gaming maskin. Denna lätt installation kräver inte någon avancerad Linux kunskap, och du kan även använda de domänkontrollanter som du re...

Göra en Normal bild till en Halloween bild med PIXLR

Hej,I detta Instructable ska jag visa er hur man förvandlar en Normal bild till en Halloween bild med PIXLR.Detta instructable är också en handbok att använda PIXLR en online redigering sida.Steg 1: Val av bild 1. det första att börja redigera är att...

Klädd till Im-kringla Cookie (med Pretzels, jordnötssmör och choklad)

jordnötter och pretzels är muttrar och skruvar av ett parti. Kasta i vissa bitar o ' choklad och piska dem i en cookie. KABLAM, det ultimata partyt behandla med lite salt, en splatter av söt och en dos av gooeyness. Konstruktionen är en ganska rättfr...

Trimma gurka till blomma hemlagad tomat Rose DIY röda blommor Garnera

Trimma gurka till blomma hemlagad tomat Rose DIY röda blommor garnera, måste du förbereda följande material:-1 färsk gurka, 1 liten morot-Knivar trimning-1 vit plattaGurka tvätta, klippa kort sedan halverade på längden, med en kniv som skär i tunna s...

Lägga till Text som vattenstämpel till din YouTube-videor med AVS Video Editor 7.1

Lägga till text som vattenstämpel till din YouTube-videor med AVS Video Editor 7.1...

Snabb Digital termometer med billiga USB till TTL omvandlare och DS18B20 - utan Arduino eller Raspberry Pi

I min tidigare instructable jag gav en introduktion till Digital termometer med DS18B20 och ESP8266 nodemcu ombord med SPI OLED-skärm och programmering använder Arduino IDE. Det krävs kunskaper i programmering, grundläggande elektronik och krävs lite...

Löd rubriken stift till en 1602A LCD med en skärbräda

Titta på videoSteg 1: IntroLöd rubriken stift till en 1602A LCD med en skärbrädaHej sparsam Nation jag ska visa dig hur du löda header pins till din 1602A LCD med en skärbräda!IntroJag började genom att infoga sidhuvud stiften i bakbord och sedan bör...

Skicka sensordata (DHT11 & BMP180) till ThingSpeak med en Arduino, använder ENC28J60 Ethercard

Obs: Detta instructable är för gamla ENC26J60 Ethershield och ethercard. Om du har den moderna WIZ5100 baserade Ethernetshield eller en ESP8266 gå besöka min andra instructable som jag nämner nedanOm ett och ett halvt år sedan jag publicerade baserat...

Hur man gör LED blixt till musik med en Arduino

detta är en guide till gör en LED blinkar krets som "slår" mp3-fil på din dator, som kan lägga en awesome effekt till vilken enhet som helst med ljudet, eller ens ditt rum (om du utvidgar begreppet LED drivrutiner eller gott om motstånd/transist...