Paso 14: Arduino Sketch y procesamiento de código
Los siguientes son el Arduino Sketch y procesando código de fuente (Arduino Sketch y procesamiento en el mismo archivo zip siguiente):
Si está usando este boceto, configure la velocidad en baudios de tu XBee según su configuración XBee.
void setup() {}
...
cambiar la velocidad en baudios según tu XBee, puse mi XBee a 115200.
Serial.Begin(115200);
...
}
=== Sketch de Arduino
Idioma: Arduino
RobotArmControl.pde
//
por Sam Thongrong 26 de febrero de 2012
Rev.02
array de comandos de control:
{GripOut, GripIn, WristUp, WristDown, ElbowUp, ElbowDown,
ShoulderUp, shoulderDown, BaseCW, BaseCCW, LightOn, LightOff, parada};
int controla [13] = {0x47, 0x67, 0x57, 0x77, 0x45, 0x65,
0x53, 0x73, 0x42, 0x62, 0x4c, 0x6c, 0x58};
Base
int baseEnablePin = 3;
int basePin1 = 16;
int basePin2 = 17;
Hombro
int shoulderEnablePin = 14;
int shoulderPin1 = 2;
int shoulderPin2 = 4;
Codo
int elbowEnablePin = 6;
int elbowPin1 = 7;
int elbowPin2 = 15;
Muñeca
int wristEnablePin = 11;
int wristPin1 = 8;
int wristPin2 = 12;
Grip
int gripEnablePin = 10;
int gripPin1 = 9;
int gripPin2 = 5;
int ledPin = 13;
establecer una variable para almacenar los bytes enviados desde el puerto serie
int incomingByte;
void setup() {}
sistema luz LED
pinMode (ledPin, salida);
digitalWrite (ledPin, LOW);
establecer el SN754410 pines como salidas:
pinMode (basePin1, salida);
pinMode (basePin2, salida);
pinMode (baseEnablePin, salida);
pinMode (shoulderPin1, salida);
pinMode (shoulderPin2, salida);
pinMode (shoulderEnablePin, salida);
pinMode (elbowPin1, salida);
pinMode (elbowPin2, salida);
pinMode (elbowEnablePin, salida);
pinMode (wristPin1, salida);
pinMode (wristPin2, salida);
pinMode (wristEnablePin, salida);
pinMode (gripPin1, salida);
pinMode (gripPin2, salida);
pinMode (gripEnablePin, salida);
empezar a enviar datos a 115200 baudios
Puse mi Xbee baudios a 115200 bps,
cambiar la velocidad en baudios según tu XBee
Serial.Begin(115200);
}
void loop() {}
Compruebe que hay algo en el buffer serial
Si (Serial.available() > 0) {}
leer el byte y almacenarlo en la variable
el byte enviado es realmente un valor ascii
incomingByte = Serial.read();
Tenga en cuenta la carcasa superior de cada letra!
cada letra convierte en una manera diferente motor.
=== El agarre
Agarre en
Si (incomingByte == {} controls[0])
gripIn();
}
Agarre hacia fuera
Si (incomingByte == {} controls[1])
gripOut();
}
Muñeca
Si (incomingByte == {} controls[2])
digitalWrite (wristPin1, bajo);
digitalWrite (wristPin2, HIGH);
wristUp();
}
Si (incomingByte == {} controls[3])
wristDown();
}
=== El codo
Del codo hacia arriba
Si (incomingByte == {} controls[4])
elbowUp();
}
Del codo hacia abajo
Si (incomingByte == {} controls[5])
elbowDown();
}
=== El hombro
Del hombro para arriba
Si (incomingByte == {} controls[6])
shoulderUp();
}
Hombro hacia abajo
Si (incomingByte == {} controls[7])
shoulderDown();
}
=== La base
Base derecha
Si (incomingByte == {} controls[8])
baseRight();
}
Base izquierda
Si (incomingByte == {} controls[9])
baseLeft();
}
Luz en
Si (incomingByte == {} controls[10])
digitalWrite (ledPin, HIGH);
}
Luz está apagada
Si (incomingByte == {} controls[11])
digitalWrite (ledPin, LOW);
}
Si un O se envía a hacer que los motores estén apagados
Si (incomingByte == {} controls[12])
allStop();
}
Delay(100);
}
}
void gripIn() {}
digitalWrite (gripEnablePin, HIGH);
digitalWrite (gripPin1, bajo);
digitalWrite (gripPin2, HIGH);
}
void gripOut() {}
digitalWrite (gripEnablePin, HIGH);
digitalWrite (gripPin2, bajo);
digitalWrite (gripPin1, HIGH);
}
void wristUp() {}
digitalWrite (wristEnablePin, HIGH);
digitalWrite (wristPin1, bajo);
digitalWrite (wristPin2, HIGH);
}
void wristDown() {}
digitalWrite (wristEnablePin, HIGH);
digitalWrite (wristPin2, bajo);
digitalWrite (wristPin1, HIGH);
}
void elbowUp() {}
digitalWrite (elbowEnablePin, HIGH);
digitalWrite (elbowPin1, bajo);
digitalWrite (elbowPin2, HIGH);
}
void elbowDown() {}
digitalWrite (elbowEnablePin, HIGH);
digitalWrite (elbowPin2, bajo);
digitalWrite (elbowPin1, HIGH);
}
void shoulderUp() {}
digitalWrite (shoulderEnablePin, HIGH);
digitalWrite (shoulderPin1, bajo);
digitalWrite (shoulderPin2, HIGH);
}
void shoulderDown() {}
digitalWrite (shoulderEnablePin, HIGH);
digitalWrite (shoulderPin2, bajo);
digitalWrite (shoulderPin1, HIGH);
}
void baseRight() {}
digitalWrite (baseEnablePin, HIGH);
digitalWrite (basePin1, bajo);
digitalWrite (basePin2, HIGH);
}
void baseLeft() {}
digitalWrite (baseEnablePin, HIGH);
digitalWrite (basePin2, bajo);
digitalWrite (basePin1, HIGH);
}
void allStop() {}
digitalWrite (baseEnablePin, bajo);
digitalWrite (basePin1, bajo);
digitalWrite (basePin2, bajo);
digitalWrite (shoulderEnablePin, bajo);
digitalWrite (shoulderPin1, bajo);
digitalWrite (shoulderPin2, bajo);
digitalWrite (elbowEnablePin, bajo);
digitalWrite (elbowPin1, bajo);
digitalWrite (elbowPin2, bajo);
digitalWrite (wristEnablePin, bajo);
digitalWrite (wristPin1, bajo);
digitalWrite (wristPin2, bajo);
digitalWrite (gripEnablePin, bajo);
digitalWrite (gripPin1, bajo);
digitalWrite (gripPin2, bajo);
}
=== Extremo Arduino
Siguiente es el código de procesamiento. You'ill necesita el archivo de imagen de fondo, y archivos de imágenes de todos los botones para ver los botones de control en la pantalla.
Y todos los botones y fondo anuncio que hay en la carpeta llamada data. Usted necesitará tener esta carpeta situada en la misma carpeta del código de procesamiento (RobotArmControl.pde)
Lenguaje: procesamiento
RobotArmControl.pde
por Sam Thongrong 26 de febrero de 2012
cargar la biblioteca de serie para el procesamiento de
Import processing.serial.*;
instancia de la clase serial
Puerto serial;
array de comandos de control:
GripOut, GripIn, WristUp, WristDown, ElbowUp, ElbowDown,
ShoulderUp, shoulderDown, BaseCW, BaseCCW, LightOn, LightOff, parada
controles de int [] = new int [] {
0x47, 0x67, 0x57, 0x77, 0x45, 0x65,
0x53, 0x73, 0x42, 0x62, 0x4c, 0x6c, 0x58};
Botón de imagen.
Cargando imágenes y utilizarlas para crear un botón.
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 pausa;
Fondo
PImage bg;
definir el tipo de
PFont myFont;
void controlGUI()
{
BG = loadImage("background.jpg");
Background(BG);
int buttonSize = 44;
PImage seleccionado = loadImage("controlSel.png");
Agarre en
PImage gripInImage = loadImage("controlIn.png");
PImage gripInOver = loadImage("controlInOver.png");
GripIn = ImageButtons nuevo (30, 83, buttonSize, buttonSize,
gripInImage, gripInOver, seleccionado);
Agarre hacia fuera
PImage gripOutImage = loadImage("controlOut.png");
PImage gripOutOver = loadImage("controlOutOver.png");
GripOut = nueva ImageButtons (78, 83, buttonSize, buttonSize,
gripOutImage, gripOutOver, seleccionado);
Muñeca hasta
PImage wristUpImage = loadImage("controlUp.png");
PImage wristUpOver = loadImage("controlUpOver.png");
WristUp = nueva ImageButtons (150, 36, buttonSize, buttonSize,
wristUpImage, wristUpOver, seleccionado);
Muñeca hacia abajo
PImage wristDownImage = loadImage("controlDown.png");
PImage wristDownOver = loadImage("controlDownOver.png");
WristDown = nueva ImageButtons (198, 36, buttonSize, buttonSize,
wristDownImage, wristDownOver, seleccionado);
Del codo hacia arriba
PImage elbowUpImage = loadImage("controlUp.png");
PImage elbowUpOver = loadImage("controlUpOver.png");
ElbowUp = nueva ImageButtons (258, 83, buttonSize, buttonSize,
elbowUpImage, elbowUpOver, seleccionado);
Del codo hacia abajo
PImage elbowDownImage = loadImage("controlDown.png");
PImage elbowDownOver = loadImage("controlDownOver.png");
ElbowDown = nueva ImageButtons (306, 83, buttonSize, buttonSize,
elbowDownImage, elbowDownOver, seleccionado);
Del hombro para arriba
PImage shoulderUpImage = loadImage("controlUp.png");
PImage shoulderUpOver = loadImage("controlUpOver.png");
ShoulderUp = nueva ImageButtons (208, 160, buttonSize, buttonSize,
shoulderUpImage, shoulderUpOver, seleccionado);
Hombro hacia abajo
PImage shoulderDownImage = loadImage("controlDown.png");
PImage shoulderDownOver = loadImage("controlDownOver.png");
ShoulderDown = nueva ImageButtons (256, 160, buttonSize, buttonSize,
shoulderDownImage, shoulderDownOver, seleccionado);
Base de CW
PImage baseCWImage = loadImage("controlCW.png");
PImage baseCWOver = loadImage("controlCWOver.png");
BaseCW = nueva ImageButtons (130, 234, buttonSize, buttonSize,
baseCWImage, baseCWOver, seleccionado);
Base de CCW
PImage baseCCWImage = loadImage("controlCCW.png");
PImage baseCCWOver = loadImage("controlCCWOver.png");
BaseCCW = nueva ImageButtons (178, 234, buttonSize, buttonSize,
baseCCWImage, baseCCWOver, seleccionado);
Luz en
PImage lightOnImage = loadImage("LightOn.png");
PImage lightOnOver = loadImage("LightOnOver.png");
LightOn = ImageButtons nuevo (30, 184, buttonSize, buttonSize,
lightOnImage, lightOnOver, seleccionado);
Luz está apagada
PImage lightOffImage = loadImage("LightOff.png");
PImage lightOffOver = loadImage("LightOffOver.png");
LightOff = ImageButtons nueva (78, 184, buttonSize, buttonSize,
lightOffImage, lightOffOver, seleccionado);
}
void setup() {}
Lista de todos los puertos serie disponibles en el panel salida.
Usted tendrá que elegir el puerto que es de la placa Arduino
conectarse de la lista. Es el primer puerto en la lista
puerto #0 y el tercero en la lista es el puerto #2.
println(serial.List());
Abrir el puerto conectado a la placa Arduino
(en este caso #0)
Asegúrese de abrir el puerto a la misma velocidad que es Arduino
usando (112500bps)
puerto = serie nueva (este, Serial.list() [1], 112500);
En la ventana de PC, utilice "Saliente" del dispositivo bluetooth
Este otro para XBee
puerto = serie nueva (este, "COM30", 115200);
tamaño de la pantalla del programa
tamaño (145, 455);
tamaño (400, 300);
Smooth();
prueba de elipse
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();
}
Enviar comandos
void sendCommands() {}
Grip
{if(GripIn.pressed)}
Port.Write(Controls[0]);
println ("agarre en:" + (char)controls[0]);
}
{if(GripOut.pressed)}
Port.Write(Controls[1]);
println ("apretón hacia fuera:" + (char)controls[1]);
}
Si (ratonX > 30 & & mouseX < 129 & &
mouseY > 51 & & mouseY < 79) {}
Port.Write(Controls[12]);
println ("Agarre parada!" + (char)controls[12]);
}
Muñeca
{if(WristUp.pressed)}
Port.Write(Controls[2]);
println ("encima de la muñeca:" + (char)controls[2]);
}
{if(WristDown.pressed)}
Port.Write(Controls[3]);
println ("muñeca abajo:" + (char)controls[3]);
}
Si (ratonX > 148 & & mouseX < 248 & &
mouseY > 5 & & mouseY < 33) {}
Port.Write(Controls[12]);
println ("Muñeca parada!" + (char)controls[12]);
}
Codo
{if(ElbowUp.pressed)}
Port.Write(Controls[4]);
println ("codo de arriba:" + (char)controls[4]);
}
{if(ElbowDown.pressed)}
Port.Write(Controls[5]);
println ("codo abajo:" + (char)controls[5]);
}
Si (ratonX > 258 & & mouseX < 358 & &
mouseY > 51 & & mouseY < 79) {}
Port.Write(Controls[12]);
println ("Codo Stop!" + (char)controls[12]);
}
Hombro
{if(ShoulderUp.pressed)}
Port.Write(Controls[6]);
println ("encima de hombro:" + (char)controls[6]);
}
{if(ShoulderDown.pressed)}
Port.Write(Controls[7]);
println ("hombros hacia abajo:" + (char)controls[7]);
}
Si (ratonX > 208 & & mouseX < 308 & &
mouseY > 130 & & mouseY < 158) {}
Port.Write(Controls[12]);
println ("Hombro Stop!" + (char)controls[12]);
}
Base
{if(BaseCW.pressed)}
Port.Write(Controls[8]);
println ("Base girar CW:" + (char)controls[8]);
}
{if(BaseCCW.pressed)}
Port.Write(Controls[9]);
println ("Base girar CCW:" + (char)controls[9]);
}
Si (ratonX > 130 & & mouseX < 230 & &
mouseY > 202 & & mouseY < 230) {}
Port.Write(Controls[12]);
println ("Base Stop!" + (char)controls[12]);
}
Luz
{if(LightOn.pressed)}
Port.Write(Controls[10]);
println ("luz de:" + (char)controls[10]);
}
{if(LightOff.pressed)}
Port.Write(Controls[11]);
println ("luz apagada:" + (char)controls[11]);
}
}
void draw()
{
updateDisplay();
sendCommands();
}
Botón y ImageButtons clases
clase botón
{
int x, y;
int w, h;
color basecolor, highlightcolor;
color currentcolor;
booleano más = false;
Boolean presiona = false;
void pressed() {}
Si (sobre & & mousePressed) {}
presiona = true;
} else {}
presiona = false;
}
}
Boolean overRect (int x, int y, int ancho, int altura) {}
Si (ratonX > = x & & mouseX < = x + ancho & &
mouseY > = y & & mouseY < = y + altura) {}
verdaderas;
} else {}
devuelven el valor false;
}
}
}
clase ImageButtons amplía botón
{
PImage base;
PImage rodillo;
PImage
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;
base = ibase;
rodillo = iroll;
abajo = idown;
currentimage = base;
}
void update()
{
Over();
pressed();
{if(pressed)}
currentimage = abajo;
} else if (sobre) {}
currentimage = rodillo;
} else {}
currentimage = base;
}
}
over() vacío
{
Si (overRect (x, y, w, h)) {}
más = true;
} else {}
más = false;
}
}
void display()
{
imagen (currentimage, x, y);
}
}
Procesamiento final
Para controlar el motor del brazo del Robot, mueve el cursor hacia el botón de requerido y haga clic.
Para detener el movimiento solo funcionamiento el cursor a cualquier etiqueta. Robot se parará.
Para poder utilizar varios motores a la vez, mover el cursor a los botones necesarios y haga clic en los botones.
Pero no arrastre el cursor pase sobre las etiquetas, que hará la operación detener
Disfrutar!.