Arduino Projects

Arduino bionic arm using flex sensor and micro servos

Description:

Arduino bionic arm using flex sensor and micro servos- I have been using Flex Sensor and Servos in different Arduino based projects. Today, I am going to use the Flex Sensors and Micro Servos together. In this project, we will make mechatronics system for simple bionic arm but don’t judge this as you may wonder this is different from its working compared to real bionic arms, well technically speaking the basic principles behind working will remain same but the precision levels differ.

The main reason behind this variance in precision is quality of sensor that contributes to quick and accurate response of bionic arm. Now I have given a thin later info of what actually our project is all about, but for beginners out here let me give a quick intro of what exactly bionic arm is?


what is a bionic arm?

These are one of the prosthetic devices mainly used for disabled arm or as an extra attachment (robotic arms controlled by human hand for various applications), These are devices that connect with movements

On the other hand, the types of prosthetics technology applications are limitless, we are focusing a minute portion here and will discussing about the same throughout this article.

In our project we are using a combination of flex sensors which detects various motions of hand and move the servo horns accordingly which later can be used effectively to move fingers of a bionic arm.

There are tons of 3d printed bionic arm body available to which you can connect and use this mechatronics system.



Intro to Arduino bionic arm

To begin with we are using Arduino Uno to make a functional bionic arm, this Is an wonderful Arduino project and can be said as one of the best applications of Arduino.

We are making very cost-effective prototype that can readily be used in any frame of bionic arm, you can use this to run arm of exoskeleton also, Technically speaking the application areas for this are endless, now we will move on to check the supplies that make this wonderful project.

Note: All the circuit diagrams along with codes are included in this article, make sure you use the same if you are making this project, for any other queries you can drop a comment we will resolve it as soon as possible.

Materials required to make bionic arm system

Arduino Uno

Micro servos plastic geared x5

Flex sensors x5

10k ohms resistor x5

Breadboard

Few jumper wires

Programming cable and Arduino IDE


Amazon Links:

Arduino Uno

Micro servos plastic geared

Flex sensors

Other Tools and Components:

Top Arduino Sensors:

Super Starter kit for Beginners

Digital Oscilloscopes

Variable Supply

Digital Multimeter

Soldering iron kits

PCB small portable drill machines

*Please Note: These are affiliate links. I may make a commission if you buy the components through these links. I would appreciate your support in this way!


Arduino Bionic Arm Circuit diagram:

Arduino bionic arm

The circuit diagram was made using Tinker cad software and tested via simulation and works perfectly fine

Let me give you a quick explanation from circuit diagram

Flex sensors are connected to analog pins of Arduino Uno as we are sending analog pulses to Uno.

Negative pin from flex sensor is connect to -ve rail of breadboard and positive to +ve rail on a breadboard via a resistor, whereas we get a signal pin from resistor end attached to positive terminal (upper side) and these give us deflect signals from sensor and are connect from A0 to A4

There are 5 flex sensors used in this project that controls the movement of each servo horns, many are unfamiliar with flex sensors let me give a quick overlook from flex sensors.

Flex sensor how it works

Arduino bionic arm

The working of flex sensor is very simple, Element that is sensitive to deflection or bending is used that produce changes in voltage when some external force is applied.

This change that is observed is called resistance and this element is attached to flex sensor body and covered with thin layer of plastic to prevent wear and tear during applications.

These sensors are connected to an Arduino board which calculates movements of servo as per the code and applied external force for deflection.


Micro servo or sg90 working

The working of these simple servos is pretty much similar to all electronic enthusiasts as we use this in on or the other projects

Arduino bionic arm

Here a small dc motor is attached to set of plastic gears that is similar to geared dc motor but the 2 main things that make these motors unique are degree or rotation and micro controller board

Unlike other motors, the rotation of micro servo is limited to 180 degrees that means the shaft can rotate up to 180 degrees and the movements are controlled via programs that will be sent to the microcontroller board

The microcontroller board here consists of a small amplifier that sends signals to dc motor which in turn is responsible for controlling accurate movements

To be clearer let me take an example of a mechanism where you need only 60degree of movements from micro servo in an interval of 3 seconds in this case a code is written and upload to Arduino Uno that send signals to microcontroller board of micro servo and performs the same actions

Micro servo has 3 pins 2 for +ve and -ve power supply and are connect to +ve and -ve rails on a breadboard whereas signals from D0 to D4 pins on Arduino Uno

Power supply we are using +5v pins and gnd pins of Uno board that will be connect to + and – rails on a breadboard

This was all about making the circuit for this project now to make it functional we will add codes

Code for Arduino bionic arm mechanism

#include <Servo.h>
Servo servo_1;
Servo servo_2;
Servo servo_3;
Servo servo_4;
Servo servo_5;

int flex_1 = A0;
int flex_2 = A1;
int flex_3 = A2;
int flex_4 = A3;
int flex_5 = A4;

void setup()  
{

  servo_1.attach(0);
  servo_2.attach(1);
  servo_3.attach(2);
   servo_5.attach(3);
  servo_4.attach(4);
}


void loop()
{
  int flex_1_pos;  
  int servo_1_pos;  
  flex_1_pos = analogRead(flex_1); 
  servo_1_pos = map(flex_1_pos, 800, 900, 0, 180); 
  servo_1_pos = constrain(servo_1_pos, 0, 180);  
  servo_1.write(servo_1_pos);

  int flex_2_pos;  
  int servo_2_pos;  
  flex_2_pos = analogRead(flex_2); 
  servo_2_pos = map(flex_2_pos, 800, 900, 0, 180); 
  servo_2_pos = constrain(servo_2_pos, 0, 180);  
  servo_2.write(servo_2_pos);


  int flex_3_pos;  
  int servo_3_pos;  
  flex_3_pos = analogRead(flex_3); 
  servo_3_pos = map(flex_3_pos, 800, 900, 0, 180); 
  servo_3_pos = constrain(servo_3_pos, 0, 180);  
  servo_3.write(servo_3_pos);


  int flex_5_pos;  
  int servo_5_pos;  
  flex_5_pos = analogRead(flex_5); 
  servo_5_pos = map(flex_5_pos, 800, 900, 0, 180); 
  servo_5_pos = constrain(servo_5_pos, 0, 180);  
  servo_5.write(servo_5_pos);

  int flex_4_pos;  
  int servo_4_pos;  
  flex_4_pos = analogRead(flex_4); 
  servo_4_pos = map(flex_4_pos, 800, 900, 0, 180); 
  servo_4_pos = constrain(servo_4_pos, 0, 180);  
  servo_4.write(servo_4_pos);
delay(100);
}



Arduino bionic arm Code explanation:

Since we are using Servos in this project, so we will need to include the Servo.h library. I just started off by adding the Servo.h library because without it you won’t be able to control the servos.

#include <Servo.h>

We are using a total of 5 servos, so I fined 5 of these.

Servo servo_1;
Servo servo_2;
Servo servo_3;
Servo servo_4;
Servo servo_5;

Next, I named all the 5 Flex sensors and these are connected with the Analog pins A0 to A4.

int flex_1 = A0;
int flex_2 = A1;
int flex_3 = A2;
int flex_4 = A3;
int flex_5 = A4;

So, after defining all the pins and variables. Next, it’s time to enter into the setup() function.

void setup()  
{

  servo_1.attach(0);
  servo_2.attach(1);
  servo_3.attach(2);
   servo_5.attach(3);
  servo_4.attach(4);
}

The code inside the loop() function, executes repeatedly.

void loop()
{

For storing the flex sensor value, we will need to define a variable.

  int flex_1_pos;


Next, I will need a variable that will hold the value, this is the value that we will send to the Servo to set the angle.

  int servo_1_pos;

Now, first, we read the Flex Sensor using the analogRead() function. 

 flex_1_pos = analogRead(flex_1);

Then we will have to map this value because the servo movement is from 0 to 180.

 servo_1_pos = map(flex_1_pos, 800, 900, 0, 180); 
 servo_1_pos = constrain(servo_1_pos, 0, 180);

Finally, we use this value to set the servo angle.

servo_1.write(servo_1_pos);

Now, if you look at the flowing code, you will see, I am using the same concept. Just the variable names are different.

  int flex_2_pos;  
  int servo_2_pos;  
  flex_2_pos = analogRead(flex_2); 
  servo_2_pos = map(flex_2_pos, 800, 900, 0, 180); 
  servo_2_pos = constrain(servo_2_pos, 0, 180);  
  servo_2.write(servo_2_pos);


  int flex_3_pos;  
  int servo_3_pos;  
  flex_3_pos = analogRead(flex_3); 
  servo_3_pos = map(flex_3_pos, 800, 900, 0, 180); 
  servo_3_pos = constrain(servo_3_pos, 0, 180);  
  servo_3.write(servo_3_pos);


  int flex_5_pos;  
  int servo_5_pos;  
  flex_5_pos = analogRead(flex_5); 
  servo_5_pos = map(flex_5_pos, 800, 900, 0, 180); 
  servo_5_pos = constrain(servo_5_pos, 0, 180);  
  servo_5.write(servo_5_pos);

  int flex_4_pos;  
  int servo_4_pos;  
  flex_4_pos = analogRead(flex_4); 
  servo_4_pos = map(flex_4_pos, 800, 900, 0, 180); 
  servo_4_pos = constrain(servo_4_pos, 0, 180);  
  servo_4.write(servo_4_pos);
delay(100);
}


Steps to upload code

  1. Connect Arduino Uno board to the computer using programming cable and open Arduino IDE
  2. Just copy and paste this on your Arduino ide
  3. Before clicking on upload make sure to check the port number
  4. Upload the code and wait for some time to get it uploaded

Now our project is ready for use I will be adding a 3d printed arm for this in the coming days, if you already have an arm for this you can install it and let me know how it works, hope you liked this project, make sure to check out our other interesting articles.

Engr Fahad

My name is Shahzada Fahad and I am an Electrical Engineer. I have been doing Job in UAE as a site engineer in an Electrical Construction Company. Currently, I am running my own YouTube channel "Electronic Clinic", and managing this Website. My Hobbies are * Watching Movies * Music * Martial Arts * Photography * Travelling * Make Sketches and so on...

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button