Introduction: Wave Your Hand to Control OWI Robotic Arm... No Strings Attached

Picture of Wave Your Hand to Control OWI Robotic Arm... No Strings Attached


There are at least 4 other projects on (as of May 13, 2015) around modifying or controlling OWI Robotic Arm. Not surprisingly, since it is such a great and inexpensive robotic kit to play with. This project is similar in spirit (i.e, control the Robotic Arm with Arduino), but different in the approach. [video]

The idea is to be able to control the Robotic Arm wirelessly using gestures. Also, I tried to keep modifications of the Robotic Arm to a minimum, so it could still be used with the original controller.

Sounds simple.

What it ended up being is a three-part project:

  1. A glove fitted with enough sensors to control a LED and 5 motors
  2. An Arduino Nano based transmitter device to accept control commands from the glove and send it wirelessly to the Arm controller device
  3. An Arduino Uno-based wireless receiver and motor control device attached to the OWI Robotic Arm


  1. Support for all 5 Degrees Of Freedom (DOF) and the LED
  2. Big Red Button - to immediately stop the motors on the Arm preventing damage
  3. Portable modular design

For mobile users: the "promotional video" of this project is on YouTube here.

Step 1: Parts

Picture of Parts


You will need the following to build a glove controller:

  1. Isotoner Smartouch Tech Stretch Stitched Glove (or similar) - on
  2. Spectra Symboflex Sensor 2.2" - on
  3. GY-521 6DOF MPU6050 3 Axis Gyroscope + Accelerometer Module - on
  6. FLAT RIBBON CABLE 10 Conductor .050" Pitch - on
  7. 2 x 5mm LEDs - Green and Yellow
  8. 2 x Small Buttons
  9. Resistors, wires, needle, black thread, glue gun, soldering gun, solder, etc.


  1. Arduino Compatible Nano v3.0 ATmega328P-20AU Board - on
  2. nRF24L01+ 2.4GHz Wireless Transceiver Arduino Compatible - on
  3. Gymboss WRISTBAND - on
  4. 9V Battery Holder Box Case with Wire Lead ON/OFF Switch - on
  6. 9v battery
  7. 47uF (50v) capacitor
  8. Resistors, wires, glue gun, soldering gun, solder, etc.


  1. Arduino Compatible Uno R3 Rev3 Development Board - on
  2. Prototype Shield DIY KIT for Arduino (or similar) - on
  3. nRF24L01+ 2.4GHz Wireless Transceiver Arduino Compatible - on
  4. 3 x L293D 16-pin Integrated Circuit IC Motor Driver - on
  5. 1 x SN74HC595 74HC595 8-Bit Shift Register With 3-State Output Registers DIP16 - on
  6. 47uF (50v) capacitor
  7. Box for Arduino - on
  8. On/Off switch
  9. 2 x 13mm buttons (one Red and one Green caps)
  10. 2 x 2X7 BOX HEADER STRAIGHT - same as above on
  11. FLAT RIBBON CABLE 14 Conductor .050" Pitch - same as above on
  12. 9v battery + clip-on connector
  13. Resistors, wires, glue gun, soldering gun, solder, etc.

... and of course:

OWI Robotic Arm Edge - Robot arm - OWI-535 - on



I strongly suggest prototyping each of the controller devices before soldering all the components together.

This project uses a few challenging pieces of hardware:


Took me a while to make the two nRF24 talk to each other. Apparently neither Nano, nor Uno provide enough of stabilized 3.3v power for the modules to work consistently. A solution in my case was a 47uF capacitor across the power pins on both nRF24 modules. There are also a few quirks with using RF24 library in IRQ and non-IRQ modes, so I recommend studying the examples really carefully.

A couple of great resources:

nRF24L01 Ultra low power 2.4GHz RF Transceiver IC Product Page

RF24 Driver library page

Just googling nRF24 + arduino will produce a lot of links. It is worth researching


Not surprisingly having to control 5 motors, a LED, two buttons and a Wireless module I ran out of pins on the Uno relatively quickly. The well known way to "extend" your pin count is to use a shift register. Since nRF24 was already using the SPI interface, I decided to use SPI for shift register programming as well (for speed and to save pins) instead of the shiftout() function. To my surprise it worked like a charm from the first time. You can check it out in the pin assignment and in the sketches.

Breadboard and jumper wires are your friends.

Step 3: GLOVE

Picture of GLOVE

OWI Robotic ARM has 6 items to control (OWI Robotic Arm Edge Picture)

  1. A LED located on the GRIPPER of the device
  3. A WRIST
  4. An ELBOW - is the part of the robotic arm attached to the WRIST
  5. An SHOULDER is the part of the robotic arm attached to the BASE
  6. A BASE

The glove is designed to control Robotic Arm's LED and all 5 motors (Degrees of Freedom).

I have individual sensors marked on the pictures as well as a description below:

  1. The GRIPPER is controlled by the buttons located on the middle finger and pinky. Gripper is closed by pressing index and middle fingers together. Gripper is opened by pressing ring and pinky together.
  2. The WRIST is controlled by the flexible resistor on the index finder. Curling the finger half way makes the wrist go down, and curling it all the way makes the wrist go up. Keeping the index finger straight stops the wrist.
  3. The ELBOW is controlled by accelerometer - tilting palm up and down moves the elbow up and down respectively
  4. The SHOULDER is controlled by accelerometer - tilting palm to the right and to the left (not upside down though!) moves the shoulder up and down respectively
  5. The BASE is controlled by accelerometer as well, similar to shoulder - tilting palm to the right and to the left all the way upside down (palm facing up) moves the base right and left respectively
  6. The LED on the gripper is turned on/off by pressing both gripper control buttons together.

All button responses are delayed by 1/4 of a second to avoid jitter.

Assembling the glove requires some soldering and a lot of sewing. Basically it is just attaching 2 buttons, flexible resistor, Accel/Gyro module to the fabric of the glove and routing wires to the connector box.

Two LEDs on the connection box are:

  1. GREEN - power on
  2. YELLOW - blinks when data is transmitted to the arm control box.



The transmitter box is essentially Arduino Nano, nRF24 wireless module, flexible wire connector and 3 resistors: 2 pull-down 10 kOhm resistors for the gripper control buttons on the glove, and a voltage division 20 kOhm resistor for the flexible sensor controlling the wrist.

Everything is soldered together on a vero-board. Note that nRF24 is "hanging" over Nano. I was worried that this might cause interference, but it works.

Using the 9v battery makes the strap-on part a bit bulky, but I did not want to mess with LiPo batteries. Maybe later.

Please see the pin assignment step for soldering instructions.



Arm control box is based on Arduino Uno. It receives commands from the glove wirelessly via nRF24 module, and controls the OWI Robotoc Arm via 3 L293D driver chips.

Since almost all Uno pins were utilized, there are a lot of wires inside the box - it barely closes!

By design, the box starts in the OFF mode (as if a redstop button is pressed), giving operator time to put the glove on and get ready. Once ready, operator presses the green button, and connection between the glove and control box should be immediately established (as indicated by the yellow LED on the glove and red LED on the control box).


Connection to the robotic arm is made via 14 pin dual rows header (according to the picture above) via 14 wire flat cable.

  • LED connections are to common ground (-) and arduino pin A0 via 220 Ohm resistor
  • All motor wires are connected to L293D pins 3/6, or 11/14 (+/- respectively). Each L293D supports 2 motors, hence two pairs of pins.
  • OWI Power lines are leftmost (+6v) and rightmost (GND) pins of the 7 pin connector on the back of the yellow top. (You can see the wires plugged in on the picture above). These two are connected to pins 8 (+) and 4,5,12,13 (GND) on all three L293Ds.

Please see the rest of pin assignment at the next step.




  • 3.3v - 3.3v to nRF24L01 chip (pin 2)
  • 5v - 5v to Accelerometer board, buttons, flexible sensor
  • a0 - flexible resistor input
  • a1 - yellow "comms" LED control
  • a4 - SDA to accelerometer
  • a5 - SCL to accelerometer
  • d02 - nRF24L01 chip Interrupt pin (pin 8)
  • d03 - open gripper button input
  • d04 - close gripper button input
  • d09 - SPI CSN pin to nRF24L01 chip (pin 4)
  • d10 - SPI CS pin to nRF24L01 chip (pin 3)
  • d11 - SPI MOSI to nRF24L01 chip (pin 6)
  • d12 - SPI MISO to nRF24L01 chip (pin 7)
  • d13 - SPI SCK to nRF24L01 chip (pin 5)
  • Vin - 9v +
  • GND - common ground


  • 3.3v - 3.3v to nRF24L01 chip (pin 2)
  • 5v - 5v to buttons
  • Vin - 9v +
  • GND - common ground
  • a0 - Wrist LED +
  • a1 - SPI SS pin for Shift Register Select - to pin 12 on Shift Register
  • a2 - RED button input
  • a3 - GREEN button input
  • a4 - direction base right - pin 15 on L293D
  • a5 - comms led
  • d02 - nRF24L01 IRQ input (pin 8)
  • d03 - enable base servo (pwm) pin 1 or 9 on L293D
  • d04 - direction base left - pin 10 on respective L293D
  • d05 - enable shoulder servo (pwm) pin 1 or 9 on L293D
  • d06 - enable elbow servo (pwm) pin 1 or 9 on L293D
  • d07 - SPI CSN pin to nRF24L01 chip (pin 4)
  • d08 - SPI CS pin to nRF24L01 chip (pin 3)
  • d09 - enable wrist servo (pwm) pin 1 or 9 on L293D
  • d10 - enable gripper servo (pwm) pin 1 or 9 on L293D
  • d11 - SPI MOSI to nRF24L01 chip (pin 6) and pin 14 on Shift Register
  • d12 - SPI MISO to nRF24L01 chip (pin 7)
  • d13 - SPI SCK to nRF24L01 chip (pin 5) and pin 11 on Shift Register


  • pin QA (15) of 74HC595 to pin 2 of L293D #1
  • pin QB (1) of 74HC595 to pin 7 of L293D #1
  • pin QC (2) of 74HC595 to pin 10 of L293D #1
  • pin QD (3) of 74HC595 to pin 15 of L293D #1
  • pin QE (4) of 74HC595 to pin 2 of L293D #2
  • pin QF (5) of 74HC595 to pin 7 of L293D #2
  • pin QG (6) of 74HC595 to pin 10 of L293D #2
  • pin QH (7) of 74HC595 to pin 15 of L293D #2



Glove sends 2 bytes of data to the control box 10 times per second or whenever a signal from one of the sensors is received.

2 bytes is sufficient for 6 controls because we only need to send:

  • ON/OFF for LED (1 bit) - I actually used 2 bits to be consistent with the motors, but one is enough
  • OFF/RIGHT/LEFT for 5 motors: 2 bit each = 10 bits

Total of 11 or 12 bits is sufficient.

Direction codes:

  • OFF : 00
  • RIGHT: 01
  • LEFT: 10

Control word looks like this (bit-wise):

Byte 2 ----------------    Byte 1----------------
15 14 13 12 11 10  9  8    7  6  5  4  3  2  1  0
 0  0  0  0 LED--  M5--    M4--  M3--  M2--  M1--
  • M1 - gripper
  • M2 - wrist
  • M3 - elbow
  • M4 - shoulder
  • M5 - base

Byte 1 could be conveniently fed directly into the shift register, since is controls right/left direction of motors 1 through 4.

A timeout of 2 seconds is enabled for communications. If timeout occurs, all motors are stopped as if a RED button was pressed.

Step 8: SKETCHES and More...

Picture of SKETCHES and More...


Glove sketch uses the following libraries:

  • DirectIO - available on Github
  • I2Cdev - available on Github
  • Wire - part of Arduino IDE
  • MPU6050 - available on Github
  • SPI - part of Arduino IDE
  • RF24 - available on Github

and three libraries developed by me:

  • AvgFilter - available of Github
  • DhpFilter - available on Github
  • TaskScheduler - available on Github

Glove sketch is available here: Glove Sketch v1.3


Arm sketch uses the following libraries:

  • DirectIO - available on Github
  • PinChangeInt - available on Github
  • SPI - part of Arduino IDE
  • RF24 - available on Github

and a library developed by me:

  • TaskScheduler - available on Github

Arm sketch is available here: Arm Sketch v1.3

Data Sheets for hardware used

May 31, 2015 UPDATE:

A new version of glove and arm control box sketches is available here: Glove and Arm Sketches v1.5


  • Added two more bytes to the communication structure to send requested motor speed for Wrist, Elbow, Shoulder and Base motors as a 5 bit value (0 .. 31) from the Glove proportionate to the angle of the control gesture (see below). Arm Control Box maps values [0 .. 31] to respective PWM values for each of the motors. This enables gradual speed control by the operator, and more precise arm handling.
  • New set of gestures:

1. LED: Buttons control LED - middle finger button - ON, pinkie finger button - OFF

2. GRIPPER: Flexible strip controls Gripper - half-bent finger - OPEN, fully bent finger - CLOSE

3. WRIST: Wrist is controlled by tilting palm from fully horizontal position UP and DOWN respectively. More tilt produces more speed

4. ARM: Arm is controlled by tilting palm from fully horizontal position LEFT and RIGHT. More tilt produces more speed

5. SHOULDER: Shoulder is controlled by rotating palm RIGHT and LEFT from the palm pointing straight up position. Palm is rotated along the elbow axis (as is waving your hand)

6. BASE: Base is controlled the same way as shoulder with palm pointing straight down.

Step 9: WHAT ELSE?

Picture of WHAT ELSE?


As usual with such systems, they could be programmed to do a lot more.

For instance, current design already incorporates additional abilities, not possible with the standard remote:

  • Gradual speed increase: every motor movement is initiated at a predefined minimal speed, which is increased gradually every 1 second until a maximum speed is achieved. This allows more precise control of each of the motors (especially the wrist and gripper)
  • Faster motion cancellation: when the command is received by the Arm Box to stop a motor, it momentarily reverses the motor for about 50 ms, thus "breaking" the movement, and allowing a more precise control.


Perhaps a more elaborate control gestures could be implemented. Or simultaneous gestures could be used for elaborate controls. Can the Arm dance?

If you have an idea how to re-program the glove, or have a version of a sketch you want me to test - please let me know:

Step 10: *** WE WON !!! ***

Picture of *** WE WON !!! ***

This project won First Prize in the Coded Creations contest sponsored by Microsoft.

Check it out! WOO-HOO!!!


StevenS332 (author)2017-04-19

Hi, can you tell me what you used to make the connector box on the glove? Thanks

arkhipenko (author)StevenS3322017-08-03

All parts are listed in step one. check the Transmission Strap-On Box section

Akash Sharma22 (author)2017-04-15

Hey pls send circuit diagram in email and pls send code

utnihc (author)2017-03-24

What is the maximum distance this wearable glove control can control the robotic arm ?

arkhipenko (author)utnihc2017-04-05

We didn't really tested max range. However, my daughter took the glove to a different room (about 3 - 4 meters away and a drywall in between) and started moving it thinking it was not connected anymore. But it still was and was controlling the arm.

Durgesh007 (author)2017-02-13

I want to use all five flex sensor
So what things I will have to change

arkhipenko (author)Durgesh0072017-04-05

Do you mean you want to put a flex sensor on every finger?

muneebs7 (author)2017-02-07


So the base motor goes to 11/14

can you quickly tell me where the rest of the motor's +/- go

I greatly appreciate the help


muneebs7 (author)2017-01-27


So the base motor goes to 11/14

can you quickly tell me where the rest of the motor's +/- go

I greatly appreciate the help


muneebs7 (author)2017-01-24


So the base motor goes to 11/14

can you quickly tell me where the rest of the motor's +/- go

I greatly appreciate the help


Durgesh007 (author)2017-01-23

Can I get codes

muneebs7 (author)Durgesh0072017-01-23

step 8 has them all

muneebs7 (author)2017-01-08


i have another question

  • d04 - direction base left - pin 10 on respective L293D

TO clarify it is my choice to connect eiather the positve or the negitive to eaither do4 or pin 1

arkhipenko (author)muneebs72017-01-09

Not exactly. Arduino pin D04 is connected to pin 10 of the L293D which you use to control base motor.

muneebs7 (author)arkhipenko2017-01-09

so where does the + /- of the motor go?

arkhipenko (author)muneebs72017-01-09

If you refer to the L293D datasheets (referenced by this instructable): pins 10 and 15 (aka 3A/4A) are directional pins for the right-side motor. They are attached respectively to two separate Arduino GPIOs (A4 and D4) to rotate base left/right.

The base motor should be connected to 11,14 (3Y/4Y).

The battery +/- should be connected to: "+" to Vcc2 pin (8) and "-" to any of the 4,5,12,13 (I usually connect 4,5,12 and 13 together to the "ground").

Depending on which of the control pins are in HIGH state (A4 or D4), the voltage from 8 and 4,5,12,13 will be applied to 11,14 in "+/-" or "-/+" manner, thus rotating the motor left or right.

muneebs7 (author)arkhipenko2017-01-22


So the base motor goes to 11/14

can you quickly tell me where the rest of the motor's +/- go

I greatly appreciate the help


muneebs7 (author)2017-01-01


I have decided to do this project for science fair at my middle school. I am having an issue wit the L293d. In the Shift register and L293d section you have L293d#1 and L293d#2. In the UNO pinout diagram there are 3. How is that?

My second problem is that in the UNO section it says

  • d03 - enable base servo (pwm) pin 1 or 9 on L293D

What do i do here

I know it is a lot of qustions, but i WOULD greatly appresiate any help. Thank you

arkhipenko (author)muneebs72017-01-04


Question about L293Ds: There are total of 3 L293Ds since I need to control 5 motors (each of the L293D can control only 2). Two of the L293Ds are controlled via shift register, and the third is controlled directly via Arduino pins.

d03 question: The third L293D controls only 1 motor, so you have a choice of pins on it. Both pin 1 and 9 on L293D are doing exactly the same thing: one for "right" side of the chip (motor 1), and another for "left" side of the chip (motor 2). Since you only be working with one motor, you just need to decide which side (left or right) of the L293D you are going to use, and connect to appropriate pins only. So in this case you connect d03 to pin 1 of the L293D -OR- pin 9 of L293D depending on which motor control circuit you decided to use.

Hope this helps.

muneebs7 (author)arkhipenko2017-01-04

Thanks, this really helps

Muhammad_Ali (author)2016-04-19

Thanks for your help! After reading all this your instructable and your comments regarding circuit diagram and Pin Assignment. Still i didn't understand that where hav you used that shift register. A diagram will be very appreciated!!

arkhipenko (author)Muhammad_Ali2016-04-20

I wish I had time for that... Sorry.
Shift registers are used to extend the number of pins needed to control L293Ds.
We have 5 motors, so need 10 pins to control direction and another 5 PWM pins to control speed. Uno just does not have so many pins. However, one shift register (8 bit), can take care of 4 motors in terms of direction control. I updated the pin assignment, and unfortunately this is as much as I would be able to do for now.

DavidB552 (author)arkhipenko2016-11-03

IF you ever get a chance to put it up would be great otherwise thanks for the help so far.

remaa (author)2016-08-24

hi sir, i have to control the robot car project. Where the rear wheels in the form of a dc motor is controlled with flex sensors and front wheels in the form of a servo motor controlled by the accelerometer sensor. Robot controller with a car connected with nrf24l01. if one of the sensors to control I can. but if it combines both to control I can not. Both sensors transmit data simultaneously . dc motors and servo motors confused receive data so that its movement is chaotic. How should I fix this? can you help me.? Can I send my program to you and you see.? Please. My email:

arkhipenko (author)remaa2016-08-24

hi. replied via email. as a matter of fact, you can reuse a lot of the code from OWI - you need to control 2 sets of motors, while I control 5, so just use a subset.

SandeepK89 (author)2016-07-24

could it can be made by using rasberry pi

arkhipenko (author)SandeepK892016-07-25

I don't see why not! However:
1. RPi is larger than Uno, and definitely larger than Nano. If I were to redesign this I would use something even smaller and wifi enabled on the glove - esp8266 comes to mind as a good candidate. similarly, the arm control box component could be made smaller with matching esp8266, and smaller L293Ds, and shift register chip. The size of the arm control box is a lesser issue though.
2. RPi does not have analog input pins, so measuring resistance of thr elastic resistive band will require more circuits.
3. RPi seems an overkill for this in terms of performance.

other than that... :) yes.

Muhammad_Ali (author)2016-04-18

It Worked! thanks but coming out of it i still have a missing library "DigitalFilter"? You hav'nt mentioned this library in this instructable or i missed it somewhere.

also i hav some list of errors too mentioned in the attached snapshots. Kindly help to resolve them.

arkhipenko (author)Muhammad_Ali2016-04-18

Updated the download link: this (Glove and Arm Sketches v1.5) should work with the two libraries mentioned in the main Github section:

  • AvgFilter - available of Github
  • DhpFilter - available on Github

Additionally all callback method prototypes have to be declared prior to being used in the Task declaration as of IDE 1.6.6

I believe 1.5 has that already.

Muhammad_Ali (author)2016-04-17

Hey, Every time when i m trying to add a DirectIO master library into arduino it gives a error ( zip file does not contain a valid library). I'm using 1.6.6 version of Arduino.

Kindly Help!!

arkhipenko (author)Muhammad_Ali2016-04-18

You should be able to download a zip file from the Github (link above), and unzip it into your arduino "libraries" folder. Please note that the zip file has a folder staructure inside it. IDE expects the library to be in a separate folder, with a certain structure.

In case of Direct IO, it is not structured 100% per IDE expectations, so you need to rename: 'libraries\DirectIO-master\DirecIO' folder into 'libraries\DirectIO-master\src' OR move the contents 'libraries\DirectIO-master\DirecIO' folder into 'libraries\DirectIO-master' folder.

Either way should do the trick.

DavidB552 (author)2016-03-21

sorry if I have missed it some where could you show us a circuit diagram of the 3 compnents ?

arkhipenko (author)DavidB5522016-03-21

Unfortunately I did not create one for this project. Until I find time to do so, you will have to go by pin assignment description. Apologies.

sudevsudhakaran (author)2016-01-19

how can i install the code into the arduino nano, and arduino uno r3

hi. based on your comments you probably want to start with Arduino tutorials and simpler projects, and then move to more complex projects. good luck.

sudevsudhakaran (author)2016-01-18

can i get the code of the robotic

Sure! Step 8 of this instructable has it all.

sudevsudhakaran (author)2016-01-18

can i get the code of the robotic

Applied Electronics (author)2015-12-13

Awesome work :)

KeshawnM (author)2015-11-27

I want to build this but I don't understand the wiring and the codeing and expechally the use of the sketches

arkhipenko (author)KeshawnM2015-11-28

If you are new to Arduino and electronics in general, I would not recommend starting with a complex project like this one. Start with something easier, build up your confidence, and then get back to more complicated projects.

Having said that, I do not have wiring diagrams, but you should be able to build them from the pin assignment step. Don't forget that your LEDs should be connected via 220 Ohm resistors. Start with a breadboard design, and move to soldering only when you are sure all your components work together.

Atarus (author)2015-10-28

I'm kinda confused on what on/off switch to use..

arkhipenko (author)Atarus2015-10-28

If the question is about the arm control box (step 5), then there are 3 switches: one power switch on the side, one red button that cuts the transmission between box and glove off, and one green button that turns the transmission between box and glove on.

Atarus (author)arkhipenko2015-10-30

Thanks, I didn't see the power switch at first.

adirsingh96 (author)2015-09-06

Can you mail me tha codes

arkhipenko (author)adirsingh962015-09-12

Step 8 has links to all sketches and libraries used in the project.

INNOVATOR560 (author)2015-08-16

How were you able to increase the amount of bytes used for communication??

arkhipenko (author)INNOVATOR5602015-08-16

Not exactly sure what is the question... From the wireless communication perspective, this particular device supports up to 32 bytes buffer transmission, so I still had (and have) plenty of space. From the C++ perspective I just added additional fields to the comms structure on both ends: the glove and the arm box code. You would have to compare sketches v1.3 and v1.4 to see what was done.

zmcddn (author)2015-08-08

Great project and well done! Congrez!

Can you let me know which MPU6050 did you use for this project? I found quite a few on GitHub. Thanks a lot!

arkhipenko (author)zmcddn2015-08-12

Thanks :). I honestly don't remember which particular library it was. Why don't you send me an email to and I will email it to you?

About This Instructable



More by arkhipenko:Ping Pong Faulty Serve DetectorIoT APIS V2 - Autonomous IoT-enabled Automated Plant Irrigation SystemInteractive Halloween Pumpkin (Arduino based)
Add instructable to: