Instructables

Remote Controlled Arduino Robot using Wixel Transceivers

UPDATE JAN 2012: This project was featured on Pololu's website under Resources/Community Projects.  http://www.pololu.com/resources/communityprojects

INTRODUCTION

In this project, I use two Pololu Wixel transceivers to remotely control an Arduino robot from a PC running a terminal emulator software where I use the keyboard to tell the Arduino robot, via wireless connection, which direction to move (f=forward, b=back, l=left, r=right, s=stop).



This is by far one of the simplest robots I had to put together. Mostly because I am reusing my past robot project parts and code and in no small measure due to the simplicity of the Wixel wireless solution.

ABOUT WIXEL TRANSCEIVERS

Pololu's Wixel transceivers are inexpensive and easy to deploy. I bought two for about $40 plus shipping. The transceivers come with all the applications needed to turn it into a wireless serial port. The vendor does a great job with documenting the setup of the Wixels but in a nutshell this is what's involved in setting up a Wixel:

-- Plug each Wixel into into the PC via mini-USB
-- Install the vendor's Windows drivers and configuration utility.
-- Using the Wixel Configuration Utility load the the vendor provided applet named Wixel Wireless Serial Application. Make certain the Wixels and Arduino have the same baud rate.

Once you have performed the above steps for each Wixel, you can disconnect them from the PC and they will retain their code, just like the Arduino. You now have two Wixels that will talk to each other as two serial com ports.

The simplest way to test if your Wixels are communicating with one another is to connect each to a separate PC running a terminal emulator such as TeraTerm. Set both terminal emulators serial ports and parameters to those of the attached Wixel and start typing on the keyboard. You will see what you typed on the other PC's terminal emulator screen. It's that simple.

The only downside of the Wixel is the short range. The vendor documentation says it's about 60 feet. But the simplicity of deployment compensates for the short distance. If all you need is indoors wireless functionality and ease of use, Wixel is a good choice.

No, this project is not sponsored by Pololu...blah blah blah. I am simply impressed by this well-packaged gizmo.

HARDWARE PARTS

-- Wixel Transceivers X 2. If you are not into soldering you can get the Wixels with headers ready to plug into your breadboard: http://www.pololu.com/catalog/product/1336

-- Arduino Uno: http://store.arduino.cc/ww/index.php?main_page=product_info&cPath=11_12&products_id=195

-- Arduino prototyping shield (optional)

-- Micro Servos X 2. I used the Turingy TG9e which I modified for continuous rotation. You can buy servos already modified for continuous rotation. If you already have 2 servos and wish to modify them for continuous rotation, there are plenty of tutorials if you search around the web.  I used servos instead of DC motors to drive the robot because servos can be controlled and powered from an Arduino without the complications of an h-bridge which is needed to power and control DC motors. 

-- AA X 6 Batteries

-- Breadboards and wires.

-- The robot platform is an empty 3.5 USB external drive case covered with Velcro to facilitate ease of adjustment and removal of robot parts. I am not a big fan of permanent attachments. The wheels of the robot were taken from a toy car and are connected together via mechanical construction set parts and tape and paper clips. Refer to my previous robot project on how this platform was assembled: http://www.instructables.com/id/Arduino-based-robot-with-IR-radar/

SOFTWARE DOWNLOADS

Arduino IDE 1.0 for Windows
http://www.arduino.cc/en/Main/software

Wixel Windows Drivers and Software (release 110705)
http://www.pololu.com/catalog/product/1337/resources

Wixel Wireless Serial Application
http://www.pololu.com/docs/0J46/9.b

TeraTerm Terminal Emulator (shareware)
http://hp.vector.co.jp/authors/VA002416/teraterm.html

WIRING INSTRUCTIONS

WIXEL AND ARDUINO WIRING:
Wixel  GND pin -----> Arduino GND pin
Wixel VIN  pin -----> Arduino 5V pin
Wixel TX pin P1_6   -----> Arduino Digital Pin 0 (RX)

WIXEL ON PC (COMMAND ANC CONTROL):
The Wixel on the PC needs to be connected via a mini-USB. That's all.

SERVO WIRING:
Servo Left - Signal (Yellow wire on my servo) -----> Arduino Digital Pin 10
Servo Left - GND (Black wire on my servo) -----> Arduino GND pin
Servo Left - VIN (Red wire on my servo) -----> Arduino 5V pin

Servo Right - Signal (Yellow wire on my servo) -----> Arduino Digital Pin 11
Servo Right - GND (Black wire on my servo) -----> Arduino GND pin
Servo Right - VIN (Red wire on my servo) -----> Arduino 5V pin

BATTERIES:
Battery Red wire (+) -----> Arduino VIN pin
Battery Black wire (-) -----> Arduino GND pin

ARDUINO CODE
See attached file "wixelrobot.ino"

FEEDBACK
As always, your feedback is greatly appreciated.

LINKS
I found this guide to be useful in learning more about Wixel:
http://www.instructables.com/id/Introducing-the-Wixel-USB-Wireless-Module
roger10771026 days ago

Can the code used for wixels be used for xbee
pleasasee help me I 'm in middle of my project and can't figure the code right

tonda234 months ago

Hi, please I will like to know if the wixel transceiver can be replaced with the HC-05 bluetooth transceiver to achieve the same results. Need your assistance please.

dentalan2 years ago
High. This is a very helpfull tutorial. I am trying to reproduce it. In fact I just received the two tranceivers which work great. I have a question about wiring. In the arduino-wixel connection I see a wixel_TX pin connection to Arduino_RXpin and do not see the reverse connection (Arduino_TX to Wixel_RX). Don't you need it too to have a complete serial connection?
thank you
techbitar (author)  dentalan2 years ago
Thanks. Arduino_TX to Wixel_RX should be connected only if you need 2-way communications. On the robot side, the Wixel was receiving commands from the PC via wireless then sending those commands to the Arduino (Wixel TX pin P1_6 to Arduino Digital Pin 0 which is the RX pin too). There was no need for the Wixel on the robot to receive any info from the Arduino. if I needed to send info from the Arduino (robot) back to the PC then I would need to pass that infor to the Wixel by closing the RX/TX loop.
Thank you
You should also note that the Wixel is a 3.3 volt device and the Arduino (this version) is 5 volt. So if you want to have Arduino_TX to Wixel_RX you need to have a voltage divider, otherwise you will burn a Wixel pin.. See Polulo doco for details.
Thanks for the advice
But, as I can see from the diagram, techbitar connects it directly, with no voltage divider.I also managed to make all the connections creating a small pan/tilt mechanism, with an arduino nano, 2 servos and and the wixels, and it worked. At least form 10 minutes. After that I disconnected them. I hope I didn't burn anything.
Something strange, is that I was doing all these, for the first time since I got the wixels, at about the time you messaged me. Isn't that strange? I hope you where not spying on me :)))

techbitar was connecting the Wixel 3.3 volt OUTPUT to the Arduino INPUT, 3.3v is still a HIGH to the 5v Arduino so that is OK.

Connecting Arduino OUTPUT at 5v to Wixel INPUT (rated 3.3v) for two way communication, and setting the OUTPUT pin HIGH will send 5V to the Wixel.

I also mistakenly did so for < aminute and the Wixel was OK, but it is specifically mentioned in the Pololu doco not to do so.

and it was the Wixel spying on you... ;) they are wireless after all.

ps You can also use something like this;
http://www.sparkfun.com/products/8745
techbitar (author)  Michael_oz2 years ago
Thanks for the input, Michael_oz.
Nice instructions, and in fact EXACTLY what I was planning to do! But on this 5v vs 3.3v thing: the Uno DOES actually fire up with 5v on its Rx pin, that later gets pulled low to 0 with a start bit and would then sit at 0 or 3.3 under Wixel Tx control. Presumably, since Wixel Tx is an output it doesn't ever "see" that 5v since it's not "looking"? Reason I'm asking is that the schematic for the Pololu Wixel shield for Uno shows a load of electronics (2x mosfets) between those pins so I wondered if that was to take care of that Uno Rx 5v at startup which could be seen by the Wixel Tx?
I can't see a RX (arduino) input pin having 5v.
I (without pulling the datasheets out) understand pins would not be output & high by default. At most it would float high, which would have no current of note to be a concern for the Wixel.
I'll have to look at the Wixel Shield, but not right now, to see what you're talking about...anyone else feel free to jump in.
Two different Arduino boffins on the Arduino Forum explained that the Rx pin IS high to start with. In their words "The Tx and Rx pins are high because it's TTL serial. A low is a 1 bit, so the start bit is when it's driven low, for example." and ""idle" is high" respectively; so I accept that it's high by design not floating high.
http://arduino.cc/en/Reference/Constants explains High/Low, Input/Output it well.

The Rx pin is High because of the pull-up, in a high-impedance state there is small (trivial) current flow via the 20K resister (high resistance means low current), it is not being Driven High (by the Arduino). So yes it is technically at 5V. The 5V vs 3V is only a concern when high (in CMOS terms) current is involved, current kills.

I just looked at the Wixel Shield, the Mosfets do seem overkill. Technically the Arduino Rx 5V pulled-up would flow trivial current to the Wixel Tx pin when it is Low (ie driving the voltage to 0). I can't see that being a problem, but I'm not an Electrical Engineer.

I suspect it is protection for when someone unintentionally (or bugily) causes the Arduino RX pin set to Output/High, that would be bad for the Wixel. In other words, good design.

The point is in is an INPUT pin, it may have a pull-up resister making it high, but it is not driven high by the Arduino, ie it is not putting any current out, no current and the Wixel is not damaged. But I'll have a look at the datasheet.
OK, I understood. Thank you

I firstly used 2 way communication. I hopr I did not burn anything

So these wixels are big brother's machines. I knew it.
And this is a reason to avoid 2 way communication, not the 5volts:))
dentalan2 years ago
I managed to make it work. I used USB connections for power and putty.exe to send commands via wixels to the serial port of the arduino. But, there is always a but
When I try to power all these using a battery something goes wrong.
I have the servos (9g mini servos) get power from the 5v of arduino, and I connect the Vin of Arduino(nano) with 9.6volts batteries. When I use the batteries I have random moves from the servos and they do not respond as they should to the commands from Putty.
I do not understand what I am missing.
The batteries I am using is a 9.6 volts reschargeble pack (800mHh) from a R/C car
techbitar (author)  dentalan2 years ago
The Arduino Uno R3 uses the NCP1117 power regulator which supports about 1A. Of course the calculations are a bit more involved since they take into consideration the voltage setting of the regulator. According to the Arduino Uno R3 schematic the 5V pin goes directly to the power regulator.

The Arduino Uno R3 schematic:
http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf

To be on the safe side, I assume the max that can be drawn from the Arduino Uno's 5V pin is about 500mA (which is the USB supplied current limit for the Arduino before the resettable polyfuse kicks in) . That should be enough for a setup like mine in this project since each of my servos have about 60mA current draw.

But if you start pulling more current through the Arduino 5v pin than it can handle, at some point the Arduino will reset. I don't know at what current/voltage point the 5V pin will fry but play it safe. The Arduino 5V pin was not designed to supply high current.

The other thing to consider is adding 0.1uf caps across the GND and Vin of the servo pins. Maybe your servos are noisy and that can cause resets.

Finally, you can always power the servos separately by pulling the power directly from the battery and into the servos instead of going via the Arduino 5V pin. Just check your servo voltage specs to make sure you are withing range of your power brick.

here's some discussion about this:
http://arduino.cc/forum/index.php?topic=53379.0
The current must be in safe limits, since it works when powered from USB. Perhaps it has to do with noice. I will try the caps solution and see if it works
Thank you
bhavyamadan2 years ago
Hello techbitar

I am a beginner in robotics so i needed some help from you I was wondering if you could make the code a little easy to read so i can understand it.

Thanks For Your Help,
Bhavyamadan
veri_tas2 years ago
This is great! but question: how can I avoid using the computer, yet still have a rich range of commands? I would like to just have say, 4 buttons that i have connected to the first wixel that encode F,B,D...etc. does anyone know how to do this?

thank you for your time,
veritas
techbitar (author)  veri_tas2 years ago
There is more than one way to do this. If you have 2 Arduinos, you can use one for the transmitter. So instead of sending commands via a terminal emulator running on a PC connected to a Wixel, you can write a simple Arduino program to read buttons and send commands to the Wixel transmitter. http://arduino.cc/it/Tutorial/Button
brainsfried2 years ago
I've been tryin to figure out how to get into building aurdinos thanks for the instructable!
techbitar (author)  brainsfried2 years ago
Glad you found it useful.
ashwinj922 years ago
hello i felt this tutorial to be very usefull as am trying the exact same thing
my doubt is about tera term terminal emulator how to use it as the link provided by you takes me to the webpage and after downloading it............. how to run this
am using windows 7 on my laptop so how do i use the terminal emulator as am finding a set of files in this folder but not able to run this terminal emulator so please guide on how to run this on my windows 7 computer
techbitar (author)  ashwinj922 years ago
If TeraTerm is not working for you try some of the other choices suggested by Pololu http://www.pololu.com/docs/0J46/6.b
yes there is putty and br@y yes i will try them
and thanx for that info
but my second question on serial communication you are using arduino for controlling the robot right
so why are u not using arduino's serial monitor by selecting wixel plugged to computer that is wixel plugged in-->computer say its name is COM3 select this in arduino serial monitor and send data is this possible with wixel or no
or u are deliberately using terminal emulator due to some reason .....so thats not clear to me so
techbitar (author)  ashwinj922 years ago
There are many possible configurations for each project. Give it a try and let us know how it turns out.
hi techibitar


i have already done that and it worked well but the problem is hitting the enter buton every time to send a controll that makes it a bit ugly ....... can u tell me how terminal emulator is different from arduino's monitor .....if u would like to share it.....
this is a nice tutorial whose trying to do this kinda projects ill like to thank u for your effort to make this tutorial:)
techbitar (author)  ashwinj922 years ago
Thanks! I am glad you found the guide useful. As for the serial monitor, my guess is that this is a design decision by the Arduino IDE team. But I am sure there are workarounds, such as using a terminal emulator :). Better yet, a user-friendly interface can be developed in any GUI programing language to create a remote-control like screen. I have seen this in other wireless projects. This I might do in a future project. For this guide, I was aiming for a bare-bone solution so other hackers can decipher and modify easily. Looking forward to your completed project.
yes am doing one for my self using vB ........:) and would give thumbs up to all your projects ill next try the image processing one which you have done its amazing........ using arduino and open cv that is actually amazing
am actually getting my fire fighting robot ready for a competition which uses computer control i am right know working on the mechanical aspects of the robot once it is fully ready ill post a link to you tube showing my robots video.........