This consists of 4 servo motors to control base, shoulder, elbow and gripper. Later I found "MeArm Controller" android application and decided to configure arduino bluetooth module to complete my setup.
Following is the breadboard view of my configuration.
I found it bit hard to configure the android app for the first time hence decided to note down configuration steps below.
1. Turn bluetooth on and open the application.
2. Press the settings icon (triangle just below Reset button). This should take you to the following screen.
3. Press the Connectivity button.
4. Then tap on the bluetooth icon and select the correct address.
Now you should get a screen saying connected :)
5. Select the slider mode then provide Servo IDs.
6. Press OK and you should get a screen similar to the following, where you have controls to the 4 servo motors.
Here is my messy robot arm config,
Arduino sketch: (Credit to the original creator- I have only modified baudrate for the bluetooth module)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <SoftwareSerial.h> | |
#include <Servo.h> | |
Servo base; //Create an object servo base | |
Servo shoulder; //Create an object servo shoulder | |
Servo elbow; //Create an object servo elbow | |
Servo gripper; //Create an object servo gripper | |
char ServoID; //Variable for Servo ID | |
int hasilButton; //Variable button pressed results | |
int nilaiBase; //Variable servo base value | |
int nilaiShoulder; //Variable servo Shoulder value | |
int nilaiElbow; //Variable servo Elbow value | |
int nilaiGripper; //Variable servo Gripper value | |
const int increment = 5; //Increase degree (B+, S+, E+, G+) | |
const int decrement = 5; //Decrease degree (B-, S-, E-, G-) | |
String readString; //Read string values | |
SoftwareSerial BT(12,13); //Bluetooth RX TX on pins 12 and 13 | |
void setup() { | |
Serial.begin(9600); //Set the Serial Baudrate 9600 | |
BT.begin(9600); //Set Baudrate Bluetooth accordance with your bluetooth module | |
pinMode(13,OUTPUT); //Set pin 13 as output | |
base.attach(6); //Set the servo base of the pin 6 | |
shoulder.attach(9); //Set the servo shoulder of the pin 9 | |
elbow.attach(11); //Set the servo elbow of the pin 11 | |
gripper.attach(10); | |
//Set the servo gripper of the pin 10 | |
base.write(90); //Start positioning servo base to 90 degrees | |
shoulder.write(90); //Start positioning servo shoulder to 90 degrees | |
elbow.write(90); //Start positioning servo elbow to 90 degrees | |
gripper.write(90); //Start positioning servo gripper to 90 degrees | |
} | |
void loop() { | |
if (BT.available()) { //If bluetooth available | |
Serial.println("BT available"); | |
hasilButton = BT.read(); //Set hasilButton = Bluetooth Read | |
Serial.println("BT hasilButton " + hasilButton); | |
ServoID = BT.read(); //Set ServoID = Bluetooth Read | |
Serial.println("BT ServoID " + ServoID); | |
base.write(nilaiBase); //Set the degree of servo according nilaiBase | |
shoulder.write(nilaiShoulder); //Set the degree of servo according nilaiShoulder | |
elbow.write(nilaiElbow); //Set the degree of servo according nilaiElbow | |
gripper.write(nilaiGripper); //Set the degree of servo according nilaiGripped | |
if(hasilButton == 'X'){ //If the button = X (X can customize the application MeArm Controller) | |
digitalWrite(13, LOW); //Turn off the led on pin 13 | |
} | |
if(hasilButton == 'Z'){ //If the button = Z (Z can customize the application MeArm Controller) | |
digitalWrite(13, HIGH); //Turn on the led on pin 13 | |
} | |
if(hasilButton == 'a'){ //If the button = a (a can customize the application MeArm Controller) | |
nilaiBase-=decrement; //Servo base value - value decrement | |
} | |
else if(hasilButton == 'A'){ //If the button = A (A can customize the application MeArm Controller) | |
nilaiBase+=increment; //Servo base value + value increment | |
} | |
if(hasilButton == 's'){ //If the button = s (s can customize the application MeArm Controller) | |
nilaiShoulder-=decrement; //Servo base shoulder - value decrement | |
} | |
else if(hasilButton == 'S'){ //If the button = S (S can customize the application MeArm Controller) | |
nilaiShoulder+=increment; //Servo shoulder value + value increment | |
} | |
if(hasilButton == 'e'){ //If the button = e (e can customize the application MeArm Controller) | |
nilaiElbow-=decrement; //Servo base elbow - value decrement | |
} | |
else if(hasilButton == 'E'){ //If the button = E (E can customize the application MeArm Controller) | |
nilaiElbow+=increment; //Servo shoulder value + value increment | |
} | |
if(hasilButton == 'g'){ //If the button = g (g can customize the application MeArm Controller) | |
nilaiGripper-=decrement; //Servo base gripper - value decrement | |
} | |
else if(hasilButton == 'G'){ //If the button = G (G can customize the application MeArm Controller) | |
nilaiGripper+=increment; //Servo gripper value + value increment | |
} | |
if(ServoID=='1'){ //If ServoID = 1 | |
baseServo_slider(); //Call subroutine baseServo_slider | |
} | |
if(ServoID=='2'){ //If ServoID = 2 | |
shoulderServo_slider(); //Call subroutine shoulderServo_slider | |
} | |
if(ServoID=='3'){ //If ServoID = 3 | |
elbowServo_slider(); //Call subroutine elbowServo_slider | |
} | |
if(ServoID=='4'){ //If ServoID = 4 | |
gripperServo_slider(); //Call subroutine gripperServo_slider | |
} | |
} | |
} | |
void baseServo_slider(){ | |
delayMicroseconds(300); | |
while (BT.available()) { | |
char c = BT.read(); | |
readString += c; | |
} | |
if (readString.length() >0) { | |
Serial.print("Base : "); | |
Serial.println(readString.toInt()); | |
nilaiBase = (readString.toInt()); //nilaiBase = readString from android | |
base.write(readString.toInt()); //Set the degree of servo base according to the value ReadString | |
readString=""; | |
} | |
} | |
void shoulderServo_slider(){ | |
delayMicroseconds(300); | |
while (BT.available()) { | |
char c = BT.read(); | |
readString += c; | |
} | |
if (readString.length() >0) { | |
Serial.print("Shoulder : "); | |
Serial.println(readString.toInt()); | |
nilaiShoulder = (readString.toInt()); //nilaiShoulder = readString from android | |
shoulder.write(readString.toInt()); //Set the degree of servo shoulder according to the value ReadString | |
readString=""; | |
} | |
} | |
void elbowServo_slider(){ | |
delayMicroseconds(300); | |
while (BT.available()) { | |
char c = BT.read(); | |
readString += c; | |
} | |
if (readString.length() >0) { | |
Serial.print("Elbow : "); | |
Serial.println(readString.toInt()); | |
nilaiElbow = (readString.toInt()); //nilaiElbow = readString from android | |
elbow.write(readString.toInt()); //Set the degree of servo elbow according to the value ReadString | |
readString=""; | |
} | |
} | |
void gripperServo_slider(){ | |
delayMicroseconds(300); | |
while (BT.available()) { | |
char c = BT.read(); | |
readString += c; | |
} | |
if (readString.length() >0) { | |
Serial.print("Gripper : "); | |
Serial.println(readString.toInt()); | |
nilaiGripper = (readString.toInt()); //nilaiGripper = readString from android | |
gripper.write(readString.toInt()); //Set the degree of servo gripper according to the value ReadString | |
readString=""; | |
} | |
} |