La programación de la placa Arduino que gobierna el brazo robótico es bastante sencilla.
Se compone de:
1.- Una librería de comunicación SoftwareSerial.h Utilizamos habitualmente esta librería para dejar libres los pines 0 y 1 para la comunicación "serial".
2.- Una rutina que analiza la señal recibida por Bluetooth. Discrimina que la señal sea mas grande que de un dígito, y si es cierta, la descompone para mover los diferentes servos. Por ejemplo: desde el Smartophone, utilizando cualquiera de las dos app que hemos desarrollado (KuriArm1 y KuriArm2), se envía la orden de mover la base del brazo a la posición de 45 grados, realmente la orden que se envía es el número 1045, este número lo recibe la placa Arduino a través del Bluetooth, el programa descompone el número y mueve el servo nº 1 a la posición de 45º.
PROGRAMA
/*KURIARM
* Control de un brazo robotico de 4 ejes
* Controlado mediante la aplicación creada con AppInventor: KuriArm1 y KuriArm2
*/
#include <SoftwareSerial.h>
#include <Servo.h>
Servo myservo1, myservo2, myservo3, myservo4;
int bluetoothTx = 10;
int bluetoothRx = 11;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup()
{
myservo1.attach(3);
myservo2.attach(5);
myservo3.attach(6);
myservo4.attach(9);
//Se ponen los servos en posición de reposo o neutra
myservo1.write(90);
myservo2.write(90);
myservo3.write(90);
myservo4.write(90);
//Configura la conexión serial usb con el ordenador
Serial.begin(9600);
//Configurar la conexión serie de Bluetooth con Android
bluetooth.begin(9600);
}
void loop()
{
//Recepcion de la orden por Bluetooth
if(bluetooth.available()>= 2 )
{
unsigned int servopos = bluetooth.read();
unsigned int servopos1 = bluetooth.read();
unsigned int realservo = (servopos1 *256) + servopos;
Serial.println(realservo);
if (realservo >= 1000 && realservo <1180){
int servo1 = realservo;
servo1 = map(servo1, 1000,1180,0,180);
myservo1.write(servo1);
Serial.println("servo 1 ON");
delay(10);
}
if (realservo >=2000 && realservo <2180){
int servo2 = realservo;
servo2 = map(servo2,2000,2180,0,180);
myservo2.write(servo2);
Serial.println("servo 2 On");
delay(10);
}
if (realservo >=3000 && realservo < 3180){
int servo3 = realservo;
servo3 = map(servo3, 3000, 3180,0,180);
myservo3.write(servo3);
Serial.println("servo 3 On");
delay(10);
}
if (realservo >=4000 && realservo < 4180){
int servo4 = realservo;
servo4 = map(servo4, 4000, 4180,0,180);
myservo4.write(servo4);
Serial.println("servo 4 On");
delay(10);
}
}
}