Jan 7, 2014

HC-05 Bluetooth link of 2 Arduino

In my first Arduino bluetooth experiment, I made an automatic connection between 2 Arduino using BlueSmirf modules. Based on the popularity of that post, it seems that many people are trying to do the same.

On the down side, many of the visitors are looking for a solution using the HC-05 (or other HC-XX type) modules with an AT command interface. I planned to eventually use this type of device but never got around to doing it for every bad reason imaginable including procrastination. This delay was clearly unacceptable for Lyman (one of my readers) who decided to send me 2 extra modules he could spare.

On a side note, this kind soul only has 2 followers on Twitter. Please help me fix this grievous situation.

After playing a bit with my new toy, here's what I've got:


In this first simple example, the code sets the module to be either Master or Slave, connects to one hard-coded address and starts the communication loop. While connected, the Master sends 1s and 0s to the slave who is using this 'command' to switch an LED on or off.

You can get the code on this Git repo.

Breadboard diagram (without the reset connection)

The biggest problem was to figure out how to reset the module programmatically. The [not so good] documentation explains how this can be done by cycling the power but the bluetooth chip has a reset pin that is supposed to do the same trick. I have the code to use the reset pin which I got from this blog post and I will test it soon.

On the HC-05 modules I received, the reset pin is not connected which 'forced' me into making a little hack that can barely be noticed...


The next step will be to recreate the same query and auto-connect loop that I did with the BlueSmirf. It should be straight forward since I've already tested all the necessary AT commands successfully.

Edit 1: Get some tips about using HC-05 in this video I made
Edit 2: I have a new post describing the automatic bind of 2 HC-05 module without having to write code.

Dec 31, 2013

Profiling DC motors

For the second design of the LEGO test machine #2, I stopped using rotary encoders an switched to ACS712 lowcurrent sensors.


I initially hooked them to a multimeter and an Arduino to tweak the 2 potentiometers of the sensors. Following some of the steps from this MobileAPES post, I've set the voltage (Vref potentiometer) to 2.5v without any problems but the gain (GAIN potentiometer) was initially tricky. Back when I was using the rotary encoders, I was running the motors as slow as possible (speed of 65-85) in order to not stress the parts. At those speed the current fluctuations are too large and I had to find out what is the optimal low speed of the motors.
I decided to log the data out to better see what was going on. The initial test was to log the current sensor values every 1ms while raising the motor speed from 64 to 210 by increment of 5 every 20ms. 


Yellow=speed / Blue=running freely / Red=stalled (prevented from turning)

Clearly the values I get from the motor is erratic when the speed is below ~110. So I profiled the motor again from 130 to 230.


Yellow=speed / Blue=running freely / Red=stalled (prevented from turning)

Now I know the how slow the motors can go and how to detect a stall using the current sensor. This also told me how long the motor takes to ramp up to speed when initially set at a speed of 130.

Here's the diagram of the machine made with Fritzing:


I don't have the Adafruit motor shield [fritzing] part so I used the Arduino motor shield rev3 instead. The missing details are the following: The servo is connected on SER0 (pin 9), the push-down motor is connected on M2 and the lift-arm motor is connected to M3.

The code and the Fritzing diagram for this new version are available on git.

Oct 23, 2013

Once more into the [legotest] breach

Here's a video update about the progress of the LEGOtest machine #2 (#legotest)


Here is some extra info and progress starting with something I forgot to mention in the video: the shorter lever beam.



The lever was too long and, out of sheer luck, one of the shorter beams was the exact length needed. After that, I finally strengthened the base by removing the last LEGO legs and installing the Makeblock leg I showed in the video.



Once that was done it just made sense to attach the Arduino to the front leg as you can see in this picture of the whole machine:

The Makeblock parts are provided by The Little British Robot Company

As for the double action on the new motor; it both assembles the LEGO bricks and helps disassemble them.



The two movements are difficult to perform with a single motor since assembling needs a lot of strength while disassembling is all about subtlety. The part was first designed using LEGO Technics and it took 2-3 iterations before I found a way to achieve the two movements. To better understand the motion, check out the video.



Sep 15, 2013

Unboxing and Doodle cool

The parts for LEGO Test Machine #2 have made it safely across the Atlantic.


Makeblock parts from The Little British Robot Company

You can see me open the boxes and give some initial thoughts and ideas in this video:


When opening the shipping box, I've discovered a DoodleBot which the guys from TLBRC added as a gift. It's robot that can hold a pen and use it to either draw or write. I couldn’t resist so I built it right away and tested it by trying to make it write “Thanks TLBRC”. It 'kind of' looked good on the first try but clearly there is something wrong with one of the servos or sensor. I'm pretty sure that I didn't mount the rotation sensors properly so I'll have a look at it.

Seriously, look at this little thing. How can I stay made at it?

Still it's a really cool little robot base. The Arduino board that comes with the kit contains a ton of features and most are not used by the Doodle Bot. It even has a header to plug a Bluetooth device. Needless to say that I'll most likely reuse it for a future project.

If you ever get your hand on this kit, here are a couple of tips to make it work with the current Arduino IDE. By following the kit instructions you'll get to the right drivers and select the proper board. But to open and build the code in the IDE, you can do this:
  1. Open the Doodle_Bot_Text_Demo.pde with the Arduino IDE.
  2. Click OK when prompt about creating a ''Doodle_Bot_Test_Demo” folder.\
  3. (In a file explorer) Manually copy all the other demo files into this new folder
  4. (In Arduino IDE) Manually 'Add' all those files into the project
  5. In the Alphabet and Doodle_Bot_Text_Demo files, rename all the letters functions by adding the prefix 'l'. (e.g. F() becomes lF())

That's it, you should be ready to build and upload the code to the DoodleBot.

If you have any questions let me know.

Sep 6, 2013

Inside the box

So close I can almost touch it. Parts for the LEGO Test Machine #2 are coming and I feel like a kid before Christmas. Here's some pictures taken by the guys at The LittleBritish Robot Company while boxing all the goodies.


WhoooOOOoooo motors



Looking at the content I got inspired to create a new design focus around the use of the Makeblock wheels.



The top part (1) would go back and forth to assemble the brick by compressing them together. Disassembling the bricks would be done by a claw system (2) able to twist off the bottom brick. Finally the bottom plateau (3) would go up and down using an off-centred wheel, helping in the process of assembling or releasing the parts. It's just a rough idea but feel free to leave your thoughts and suggestions.

Now, how can I make time go faster? I could go to sleep until the package arrive. Naaaaaah I'll probably wait in front of the door like Scott Pilgrim.

Added:
You can see all the 'boxing' pictures on my G+ album