dengan App Android
Langsung saja jangan bertele-tele, robot ini diberi nama Little army, kita bisa mengontrolnya dengan secara nirkabel dengan Bluetooth. Disini kita menggunakan aplikasi LittleArm Robot Control. Aplikasi ini bisa mengontrol semua DOF di LittleArm, bukan cuma itu, app ini juga bisa ngerekam perintah, terus memutarnya kembali.
Komponen Yang Dibutuhkan:
- Arduino UNO & Genuino UNO
- Modul Bluetooth HC-05
- Perangkat Android
- LittleArmy Kit - Lengkap
Skemanya :
Source Code:
#include <Servo.h> //arduino library
#include <math.h> //standard c library
#define PI 3.141
Servo baseServo;
Servo shoulderServo;
Servo elbowServo;
Servo gripperServo;
int command;
struct jointAngle{
int base;
int shoulder;
int elbow;
};
int desiredGrip;
int gripperPos;
int desiredDelay;
int servoSpeed = 15;
int ready = 0;
struct jointAngle desiredAngle; //desired angles of the servos
//+++++++++++++++FUNCTION DECLARATIONS+++++++++++++++++++++++++++
int servoParallelControl (int thePos, Servo theServo );
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void setup()
{
Serial.begin(9600);
baseServo.attach(9); // attaches the servo on pin 9 to the servo object
shoulderServo.attach(10);
elbowServo.attach(11);
gripperServo.attach(6);
Serial.setTimeout(50); //ensures the the arduino does not read serial for too long
Serial.println("started");
baseServo.write(90); //intial positions of servos
shoulderServo.write(150);
elbowServo.write(110);
ready = 0;
}
//primary arduino loop
void loop()
{
if (Serial.available()){
ready = 1;
desiredAngle.base = Serial.parseInt();
desiredAngle.shoulder = Serial.parseInt();
desiredAngle.elbow = Serial.parseInt();
desiredGrip = Serial.parseInt();
desiredDelay = Serial.parseInt();
if(Serial.read() == '\n'){ // if the last byte is 'd' then stop reading and execute command 'd' stands for 'done'
Serial.flush(); //clear all other commands piled in the buffer
//send completion of the command
Serial.print('d');
}
}
int status1 = 0;
int status2 = 0;
int status3 = 0;
int status4 = 0;
int done = 0 ;
while(done == 0 && ready == 1){
//move the servo to the desired position
status1 = servoParallelControl(desiredAngle.base, baseServo, desiredDelay);
status2 = servoParallelControl(desiredAngle.shoulder, shoulderServo, desiredDelay);
status3 = servoParallelControl(desiredAngle.elbow, elbowServo, desiredDelay);
status4 = servoParallelControl(desiredGrip, gripperServo, desiredDelay);
if (status1 == 1 & status2 == 1 & status3 == 1 & status4 == 1){
done = 1;
}
}// end of while
}
//++++++++++++++++++++++++++++++FUNCTION DEFITNITIONS++++++++++++++++++++++++++++++++++++++++++
int servoParallelControl (int thePos, Servo theServo, int theSpeed ){
int startPos = theServo.read(); //read the current pos
int newPos = startPos;
//int theSpeed = speed;
//define where the pos is with respect to the command
// if the current position is less that the actual move up
if (startPos < (thePos-5)){
newPos = newPos + 1;
theServo.write(newPos);
delay(theSpeed);
return 0;
}
else if (newPos > (thePos + 5)){
newPos = newPos - 1;
theServo.write(newPos);
delay(theSpeed);
return 0;
}
else {
return 1;
}
}


Tidak ada komentar:
Posting Komentar