Showing posts with label L9110s. Show all posts
Showing posts with label L9110s. Show all posts

Tuesday, May 7, 2019

Some tips on using the Smart 2 Wheel Arduino Robot chassis

I'm a big fan of these basic 2 wheel chassis.  They're cheap to buy.  I've seen them on eBay for less than £6.00 without the batter holder.  There is enough space on them an Arduino or PiZero with a motor controller alongside the battery pack.
2 wheel smart robot chassis
They're usually listed as "2 Wheel Smart Robot" with the word Arduino added in there somewhere even thought they are not Arduino specific.  I think it's there to improve SEO for all the people making their first robot using an Arduinio.  Also, they are not smart, there is no intelligence provided.  They usually come with  tachometer encoders for the wheels, but you need extra electronics to read them.

I've used these chassis a few times and these are some gotchas that I'd to figure out.

1. The perspex is clear
If the perspex is opaque or brown in colour then this is a layer that can be pealed off.  It's there to protect the perspex.  You can leave it on but it's supposed to come off.

2.  The caster goes to the back.
Even though most of the pictures you see show the caster wheel at the front this is really a drag wheel and should be at the back of the bot.
The fact the caster spins means if it is put at the front then you're pushing against the caster when turning.  It's like having a wobbly shopping trolley.  Easier to pull behind you than push in front. Also, you can see from the image the (correct) front has more mounting options for sensors which makes sense.

3.  The battery box can be screwed on the underside
All pictures I've seen always have the AA battery box on the top.  Makes sense as gravity will keep the batteries in.  But, if needed the battery box can be screwed to the underside of the deck giving more real estate on the top for other components.

4.  The connections on the motors are very fragile
Where you solder the wires to the motors is very fragile and prone to snapping off if put under any strain.  So, it's best to put in place some strain relief.
The easiest and without needing any additional hardware is to knot the two wires around the plastic fastener holding the motor in place.  In this way if someone pulls on a wire or it gets snagged it doesn't put any pressure on the actual connection on the motor.

Strain relief on the motor wiring

Some final thoughts

I've used these motors with L298N as well as L9110s motor controllers.  Both work great.  The L298N is bigger and really over specced for these little motors so the L9110s is more than capable of driving them.
The cheap L9110s board only has one GND connection and assuming using a different power supply for the motors and the controller (Pi/Arduino) you'll need to tie the GND from the different power supplies, the controller and the L9110s together.  I usually use one of the additional GND pins on the controller.  Arduino Uno has three GND pins, the Arduino Nano has 2 and the Raspberry Pi has 8.

L9110s - only one GND connection


I've heard reports that as the gears are plastic they can be shredded.  A lot of fast reversing with a decent power supply can put the cogs under a lot of strain.  This is one of the main compromises for the price.  So, either limit the speed at which the motors can change direction or be ready to replace the motors.

These little yellow motors look like they're all the same, but the gearing inside them can be different.  If you do need a replacement motor you may not get the same gearing ratio which would affect the ability of your robot to go in a straight line or just move consistently.

Even with all this I think these kits are a great start.  They're easy to put together.  Reliable (enough), powerful (enough) and cheap so a great place to start.
Add an Arduino Nano and an L9110s with a small breadboard to connect everything together and you have a capable platform to develop from for less than £10.00.
You can then add ultra-sonic sensors, line following sensors, infra-red remote control, Bluetooth interface, or even the tachometers to measure speed and lots more...
Giving an easy and cost effective introduction to robots.
This may not be the chassis you finish with but it's definitely a good place to start.
And if you're already thinking of upgrades there is a 4 wheeled version as well for not much more.

4 Wheel Smart Chassis

Happy roboting.








Tuesday, July 19, 2016

Toy crane controlled from Raspberry Pi Zero with SenseHat using Scratch


Since the micro:bit was launched one of the demos that I kept seeing was the toy crane controlled using the motion sensing in the micro:bit.  The kids loved it and was very interactive.

Since the SenseHat on the Raspberry Pi has the motion sensors built in I thought this would a good project for a Raspberry Jam.

So, off I went to Home Bargains and bought a crane. From the picture, definitely the right age for me.  This crane is normally controlled using two levers on the hand controller. It can rotate and raise/lower the bucket.

Didn't come with the hard hat
First order of business was to figure out the wiring and cut the cable as the final build would be battery powered to work the same as the micro:bit version.


Cut the red wire

From above the wiring is:
VCC - Red wire
GND - Brown wire (not black)

Rotate motor 
Orange and Yellow

Crane lift motor
Blue and Green.

For turning and crane the direction it goes depends on how you wire it up and how your code works so some adjusting may be needed later.

To make sure I had this right I tested by touching Red to Orange and Brown to Yellow. Crane rotated one way. Swapped wires around and crane rotated the other way.
Red to Blue and Brown to Green, Bucket went down. Swapped wires around and bucket went up.

Wiring confirmed and tested.

As the Raspberry Pi isn't designed to control motors directly I needed a small motor controller.
The L9110s looked perfect for the job. Smaller than the L298N that I usually use so would be easier to accommodate in the final box.

L9110s motor controller
The 2 terminal blocks on the left in the image are for the motors.
On the right are the control pins and power.
Top 2 connections are control for Motor A
Bottom 2 connections are control for Motor B
Then in the middle are VCC and GND

NOTE: A really important thing is to make sure when using multiple boards that all the GND lines are tied together so that all the voltages have the same base reference.  Otherwise strange things can happen.

I wired up the motors. Turning uses GPIO 5 and GPIO 6 on the Raspberry Pi and Motor B on the L9110s while lifting uses GPIO 27 and GPIO 17 and Motor A.

Again did some simple code to see if it would work from Scratch. Initially manually moving with the keyboard.  It worked great and I brought it along to the Egham Jam in April 2016.  As the organiser of the Jam I was a bit delinquent in taking pictures so the only one I have is of the crane, bottom left in the booth of the car before I went to the event. I promise the kids loved it and it was a massive hit, really. Actually, I had a different project called ZeroBall that was finished so it took most of my time.

Bottom leftis the crane
There were two technical reason I didn't have it all set up with motion sensing and coded in Scratch for the Jam.

  1. The SenseHat covers all the GPIO pins meaning I couldn't get at the pins to attach the wires for the motor controller.  So, I could get the readings from the SenseHat but couldn't control the motors.
  2. The Scratch at the time had a problem whereby it didn't support AddOn board. 


The first problem was solved with Stacking Headers and great tutorial from Keith's Pi Tutorials even has a video.
Also, a great reference site for Raspberry Pi board pin usage is pinout.xyz.  They have loads of boards listed and this is where I got the details for the pins used on the SenseHat

Stackable Headers. Note the high tech blutac for holding it all in the tub


The second problem of Scratch not working at all with AddOn boards was reported and fixed in the May 2016 Raspbian update.

With the purchase of Stackable Headers from The Pi Hut and a freshly imaged SD card both of these technical problems were overcome and the way forward was sorted for the SenseHat to be used to control the crane.

Since I wanted it to be battery powered the Raspberry Pi Zero was the obvious choice as it is low power. Only thing is Scratch is a GUI program and so I needed a desktop environment to run it (If you can run Scratch code without a GUI I'd love to know, but I suspect it kind of defeats the purpose of a drag and drop interface if you run it from the command line)

To overcome this I used a USB wifi dongle to connect over the network to the PiZero and then on a laptop used RealVNC to get a desktop. Since this was going to be shown at the first Wimbledon Raspberry Jam I didn't know if I would have a wifi network to connect to so I brought my own in the shape of a VoCore. A one inch cubed wireless router running openWRT.  I backed this as a crowdfunding thing a while back and all I've used it for it to create a local wifi hotspot.  At the Jams I can even power it from a powered Raspberry Pi USB port.

Side Notes:
I think the number is the manufacturing order of the original batch and I've never seen one with a number lower than 26.
The VoCore is only the top layer. The rest is an add-on that gives you USB, Ethernet, microUSB power socket and a microSD slot.  IT also has it's own GPIO pins so can be used for embedded projects.

Vocore. Basically, the guts of a wifi router
Obviously, as this was going to be standalone it had to be battery powered. I'd been picking up these 18650 Lithium Ion batteries in Poundworld and thought 4 of these in a case would make a decent power supply for the day.  No idea why when I cracked them open one was pink.  The battery case was from eBay and it all snapped together really easily.
The case has 2 USB ports for power so could power the Raspberry Pi and the VoCore at the same time.

Batteries in their original cases

Batteries in their new case


I mentioned above that all the Grounds need to be tied together.  In this instance I have 3 circuits that need to all have the same GND. Crane, L9110s and Raspberry Pi Zero (The SenseHat is take care of through the Pi Zero)
I tied the Crane GND (Brown wire directly to Pin 39 on the Raspberry Pi, then the GND pin on the L9110s was tied to Pin 6 on the Raspberry Pi.  In this way all 3 had a common GND.

It's good to be aware that in a circuit all GND can usually be treated as the same point. Especially for such low power and low frequency signals.  If this was a high power high frequency circuit then the trace length between the different GND points could case harmonics.  I cannot think of a project using the Pi that I would do where the length of the trace between GND pins would be a problem


So, now I have power, local network, a way to run Scratch so people can see the code and all the bits wired up. Last of all was the actual Scratch code.

From the image you'll see the code isn't very complex.  The main thing I'd to figure out was which one of the sensors I needed to read. It's the Accelerometer.
I believe the range is -4095 to + 4095 on each axis.
When the program is run a base "flat' reading for Lifter and Turning is taken so any movement in the sensor doesn't carry from one person to the next.  This is what the middle block of code does.
The block of code on the right is there if it all goes wrong and I can just press [space] to turn off the motors.

Th middle block is where the magic happens.  It checks if Accelerometer X is 1000 less or 1000 more than the flat reading for Lifter and/or Turning and then activates the appropriate motor to either turn the crane or raise/lower the bucket.

Not shown below is a second costume for the crane that just says "Put Pi on a flat surface" at the start of the calibration.


If you're not up for trying to copy the code from the image you can download the Scratch code from GitHub.

To make it hand held I stuffed all the bits in to a plastic Chinese takeaway box.  You can see the L9110s on the left, wifi dongle on a short microUSD to USB cable and the SenseHat with the Stackable Headers so the wires for the motor controller can could be added.

Finally, here is a boy totally engrossed in playing with the crane at the Wimbledon Jam.  It all ended really well.

Hours of fun transporting monkey from one place to another