Recently I’ve been involved in a new project to unite all the different droid building clubs in the UK under a common umbrella. Hopefully to help share ideas and also get more than just R2 units at events.
R Series astromechs always go down well, but it would be really good to get some BB8s or MSE droids there too.
A few people have expressed an interest in my r2_control system, so I thought I’d do a post about how it works, and what it needs.
At the core is a Raspberry Pi 3B+. This runs the main code, and also any programs to interface controls (PS3, Web, Instant Messenger). It also acts as a wifi hotspot.
From this Pi you can add a Sabertooth 2×32 and Syren 10 via USBSerial to allow control of those using packet serial communications. A python library for which I have written to make things easier.
Recently, a GPIO option has been added to the core code so that you can trigger relays and other switched items directly from pins on the Pi. I use this to trigger the relays that break the connections to the foot motors and dome motor.
Lastly, an i2c connection is available for communicating with various other boards such as the Adafruit 16 Channel PWM controllers, RSeries lights, ReelTwo system, etc.
A basic system to have simple control over a droid with no opening panels and no triggering of dome light sequences can be had with just:
1 x Raspberry Pi 3B+
1 x Sabertooth 2×32
1 x Syren 10
1 x USB FTDI (For USB interface to Syren 10)
1 x PS3 controller (Or PSMove)
Whatever dome lights you wish, eg TeeCees.
Power distribution (Fuses, power switch, etc.)
2 x Drive motors (eg. 100W Scooter)
1 x Dome motor (eg. pittman)
You can run the Pi from the BEC built into the Sabertooth if you wish, but I do recommend at least a 2A buck converter on its own fuse.
If you want to run any servos, you can add the Adafruit PWM controllers onto the i2c bus, up to 6 can be added by configuring the address jumpers. One in the body and one in the dome is usually enough.
This system can of course be added to. Relay control over the motors, light sequence triggers, and other gadgets such as smoke machines.
The current state of PSI displays from the club are either simple TeeCees ones, or the VADER boards. I’ve had a couple of the VADER boards in R2 for a while, but recently I’ve had issues with some of the LEDs failing. Unfortunately, as these are WS2812 addressable LEDs which means when one fails then you can’t communicate with any further down the line. They are also all surface mounted, so not exactly easy to replace, especially as they are so closely spaced. On top of this, they are not open source so I have been unable to do any fun stuff with i2c triggers.
I wanted to build some PSIs from off the shelf parts and allow it to do some more interesting effects. After a lot of hunting, I finally found some i2c addressable 8×8 RGB Matrix displays from Seeed Studios. Couple one of these with an Arduino Pro Mini, and you have a relatively cheap PSI using standard components.
Arduino Pro Mini (https://coolcomponents.co.uk/products/arduino-pro-mini-328-5v-16mhz)
Header pins for the arduino (not necessary)
Not really much to the circuit, just using the pro mini i2c pins to talk to the rest of R2’s i2c bus, and then software i2c on another couple of pins to talk to the display. This has to be done as the displays have a fixed i2c address of 0x65, so only one can be on the bus at once. This also allows the rendering of the display to be offloaded onto the arduino.
The display comes with a short cable which you can cut the end off and solder directly to the pro mini if you wish.
Currently, when powered on the display will just do the standard left/right swipe of two colours (all configured in the arduino code). Also, two functions have been added to either pulse a heart or do a random pattern to simulate a malfunction. Others may be added at a later date, feel free to suggest ideas!
The heart doesn’t really show up too well through the diffuser, but it still looks like a pulsing pattern, so I’m happy with that.
The random malfunction will take an integer number of cycles and randomly turn pixels on to a random colour on each cycle. The number of pixels that are on will slowly reduce to zero. Ten cycles is about 1 second
To trigger these effects, you send an i2c command to the address defined in the arduino code (typically 0x06 or 0x07) with either H or M as the first character, and then a number of cycles (1-255).
I have implemented this into my r2_control software, which allows me to script actions together. The plan is to do something like trigger the malfunction sound, set the PSIs to malfunction mode for enough cycles to cover the sound, and also flap all the panels in a pseudo random way.
I have a set of Ultimate PSI Housings from IA-Parts, which hold both the standard teecees boards, and the vader ones. To fit the square peg (rgb matrix) into a round hole, I knocked up a very simple 3d print.
This clips in nicely to the PSI housings, however you may have to do your own system.
I’m actually quite pleased with these. Its really hard to find a densely packed RGB matrix as an off the shelf product. After much searching this was only one I could find. Its by no means as nice as the custom VADER boards (and I know others in the community are working on their own), but it does work and looks a lot better than the TeeCees ones (IMHO).
Not only that, its cheap too at about £25 per PSI (not including any costs for making the mount, but in my case that was a few pence for a 3d print)
Next step is to figure out some more fancy things I can do with it, and maybe add a selector jumper so that you don’t need to change the code between the front and rear PSIs. I may also do a custom board to connect it all together in a neater form factor.
The weekend actually started on Thursday morning with the usual game of tetris to fit everything in the car, followed by a fairly uneventful 5 hour drive down to London (well, Heathrow).
We got to the Renaissance hotel to discover the place had been taken over by police, blocking the way into the car park. Eventually we got to park up and discovered that it wasn’t because they’d heard there was a Starfury convention on with Eve Myles, but were there for the Royal Wedding going on that Friday.
After a quick checkin (done online, so only door keys needed) I dumped my luggage and went to unload R2. I hadn’t even got him out of the car when I had people coming up for photos! Of course, the hotel staff are used to him now and barely batted an eyelid when he came charging into the lobby.
We settled in for a chilled evening in the lobby with the other early bird convention attendees, with R2 entertaining the occasional visitor, before R2 went to bed (ie, the luggage store).
Friday was the typical lounging around the lobby waiting for people to arrive, and setting up for opening the convention. Whilst it was quite a quiet convention, the majority of the attendees were regular Starfury people, which always helps to make it a great weekend.
It was a cracking line up of guests from shows such as Dark Matter, Killjoys, Warehouse 13, and Torchwood. I went into the Meet and Greet that evening and got to chat with them all and I must say each one was absolutely awesome. All of them were up for a fun weekend and even came to party with us all a bit on the Saturday night.
I had the opportunity to get a photo with all the guests, tho of course I used my photo proxy instead and got what must be one of my all time favourite pictures for R2. Even better was that one of the guests, Jodelle, actually put a copy of the picture up on Instagram and said it was her favourite from the weekend! Eve didn’t seem to like being upstaged tho.
There are always guests who stand out at a convention that you would love to see again at another. In this case, every single one of them would be fantastic to have back, they were really that good!
Now, on top of this I had something that was actually better. I was already planning on taking R2 down to Heathrow for Invasion, but then discovered that there was a charity event on at the Terminal 5 Hilton, Dreamflight.
The 99th Garrison had been invited down to participate in the sendoff of the kids going on their special holiday on the Sunday morning, so seeing as I was in the area I put my name down. A few weeks later, the R2 Builders forum had a listing put up with an invite from the Rebel Legion/UKG for going to the Hilton on the Saturday too, to meet the kids as they turn up there from all corners of the country. So I thought, why not?
R2 and I got there on the Saturday a little early, unloaded, and went to meet the rest of the Legion. Plenty of Rebels there, and a few of the evil Empire.
The buses with the kids started showing up just after midday, with police escorts. They certainly know how to make them all feel special. The next few hours flew by with many a photo being taken. Besides us, there were also a lot of police, police dogs, and even a couple of police horses (tho they didn’t actually come into the hotel!).
Finally the last bus dropped off its passengers, and the kids were sent off to their rooms to get some rest before the day of travelling on the Sunday. R2 went to sleep (in the Hilton luggage store – he likes variety) and I went back to the Renaissance.
Sunday was an early start, off back to the Hilton to meet up with the 99th Garrison and to take the kids to the airport. It was actually arranged for R2 to ride on the bus to the airport, which was so much fun!
With one of my arms wrapped around a post, and the other around R2 to stop him rolling around, we set off. What I wasn’t expecting was for it to be a police escorted convoy! We had police on bikes riding ahead (with various cuddly toys strapped to the back of their bikes) to stop traffic and give us a none stop ride straight through to a hangar at Heathrow airport. They went all out to make the kids feel extra special, waving and saluting as the buses all went by.
We pulled up at the hangar and carefully offloaded R2. Inside it was all laid out for each of the groups of kids, with a military marching band, more police dogs, and a great view of the plane out of the big hangar doors.
R2 had a go at conducting the band, tho I think Kylo did a better job with his big glowing stick. The actual conductor started playing the Imperial March tho, which R2 took offense at and may have tried to run him over! None of that Dark Side stuff for him!
More photos, lots of smiles, and even a few requests for autographs (going to have to think of something regarding that). Finally the kids all got onto the plane and were sent off with lots of waving, despite the rain. We dragged ourselves to the buses and headed back to the hotel to dekit and relax.
I was actually expecting this weekend to be a bit heart wrenching, bearing in mind the reason for Dreamflight, but the atmosphere generated was electric and has given me such a buzz.
I’m finally home now. Starfury conventions are always fun and rewarding to work, but coupled with Dreamflight this has been such an awesome weekend. Thanks go out to 99th Garrison, Rebel Legion, and UKG for letting me come along with them. And of course, a massive shout out to the Dreamflight team. They all work so hard to organise and run this event, and whilst our work as part of the entertainment is finished, there are so many of them that are now looking after the kids in Florida, making sure they have the time of their life.
Looking forward to more charity events to raise money for next years flights, and hopefully I can make it back again to send them off.
Its been nearly two months since R2’s last outing, a much needed break to get a whole load of repairs done to him. This year has been quite hard on various parts.
So far I’ve had two sets of tyres scrubbed down to the hub at events, mainly from trying to drive on rough concrete. The Banebot wheels are great for nice smooth indoor surfaces, but definitely aren’t hard wearing. R2 now has a nice set of Colson wheels which will hopefully last a lot longer! Along with this I’ve added padding and keyhole slots to the battery boxes to reduce rattle and make removal easier.
The week before Manchester MCM, R2’s amplifier decided to stop working for some reason. Cue a quick search on eBay and Amazon to find something I could get delivered in time. Unfortunately all I could get was a 2x50W one, which turned out to be way too weak for a busy event like an MCM. Since then, I’ve got hold of a 2x100W amplifier which is now fitted and sounds great (and loud).
I’ve had no end of trouble with my dome lighting, from my first set of teecees getting failed LEDs, to a set of RSeries having the buck converter blow and melt some wiring. Oh, and my fancy VADER PSIs seem to have started failing too. So now R2 has a nice new set of RSeries, I managed to get one of the VADERs to work again for the front, and I’m going to put an old Teecees PSI in at the back.
For a long time I’ve wanted to make a much more stealthy method of control. When I first started R2, I’d considered using a Wii remote and nunchuck, but I realised that as I’d already done the PS3 controller code, it wasn’t that much different to use a PS Move navigation controller. They show up as a standard joystick in Linux, so easy to interface with.
As the code for this wasn’t going to be changing much from the ps3 code, I pretty much just copied it over to give me a foundation. Currently it only supports a single navigation controller, but the plan is to allow two controllers to give me more options and things I can trigger.
The main drawback at the moment is the lack of dome control, but that just gives me more reasons to finally get round to doing some automatic dome functionality.
Battery life is an unknown at the moment, and as with the ps3 controller it doesn’t seem to charge unless plugged into a computer.
Along with doing this code, I also worked on getting it easy to switch between the different control systems. There is now an API call to list and select a different joystick, with options to call it via both web and telegram at the moment.
So, after Legoland in May, and again at MCM Manchester, R2’s wheels have been scrubbed clean of all tread clear down to the plastic hubs. The first set of Banebot wheels lasted a year so after Legoland I just replaced like for like, thinking they’d last another year.
A lot of other builders use Colson wheels, so I went on a hunt for them. Now I’d got his center omniwheels from Vex Robotics, and they have a whole line of wheels and accessories so I went looking through their website.
What I found there was a system using hex shaped axles, rather than the current round ones. This meant a more even transfer of force from the drive cog to the wheels. With the round shaft, all the torque was through the keyway that was cut into it, but there is no need for that when the shaft is hexagonal.
A quick order online (well, two as I forgot to get new bearings) and a UPS delivery, and the new hardware was here. Everything on the drive shaft had to be replaced, including the cog, to make use of the hex shaft. It didn’t take long to press fit it all together and now R2 has a nice new drive system.
One down, one to go. Also working on a better system for having the battery boxes attached to the foot shell, as it is a real pain to remove them which is needed to get the drives out.
The last few days have been spent doing some fairly major refactoring and other code improvements. I wanted to add functionality for the FlthyMcNasty HP control systems and realised as I add extra API calls, then the main.py code would start to get a bit unwieldy.
To this end, I started learning about Blueprints in the Flask web framework I use. Blueprints allow API calls to be added functionally in a modular fashion. This meant all the API definitions and functions could be brought out of main.py and into the actual script for the device in question.
Along with this I learnt how to dynamically import code into main.py, which coupled with using blueprints has given me a much more modular approach to adding various devices.
Now, plugins can be loaded by just adding them to a line in the config file. They will then be dynamically added on startup. This is going to make it a lot easier to add the various modules such as the PSI, logics, Charge Bay, etc. to the API.
After a busy, busy May, June has been a bit more relaxing. May was filled with events, not just with R2, and pretty much drained my (and R2’s) batteries.
Got a few events coming up on the buildup to the big R2UK event in August, and a list of ideas for R2.
Until recently I was considering building another droid (as well as BB8), but with recent occurrences in my non-R2 life I’ve decided against it and have gone into a bit of a money saving mode. So, what does that mean? It means actually doing all the upgrades to R2 that I’ve been planning for ages and have all the kit for, but never got round to doing!
I at least want to get the front HP twitching, and have done a quick model to mount the servos on and printed it out. Just need to work out the linkage ideas that will survive the little darlings pulling at it at every opportunity. These should run off the same system as the HP lights, and have i2c control
Modularise the code
Currently, adding new devices (lights, servos, etc.) involves writing a library and including that in the main code. I’d like to see if I can make each device a module which can be enabled and adds the commands dynamically to the REST API. Not sure how to do this yet, but part of the reason for doing my own control system was to learn some more difficult aspects of coding.
I want to actually utilise the REST API a bit more. One thought is a wifi knock or capacitive sensor installed in the dome that connects to R2’s hotspot to detect hands or whatever and play a sound via the API.
General brain improvements
After the Legoland event, I had to totally replace (and upgrade) R2’s brain. However, I only did the bare install and didn’t set up the extras in him such as the wifi hotspot, etc. I want to get this working properly to make debugging a lot easier.
Another device for the dome, something to generate a load of smoke and that can be triggered via the API. This way I should be able to do a script to flap panels, play a sound, and release some smoke.
Theres loads of other general improvements to be made too, minor repairs and such like. I’ve also got a new set of foot shells to put on which should make swapping and maintaining the drives a lot easier than it is now.
Yes, I know I said I’m not going to build another droid. By that I meant astromech. I’ll finish off BB8’s dome at some point, with some electronics in the eyes which I’ve already got. Got ideas to extend the normal setup of electronics to make him more dynamic.
My other thought was to produce a MSE droid. Something a bit fun and a lot cheaper than a full sized astromech. I also want to add features to it that I’ve not seen on other droids such as smoke, opening doors, maybe even a bit of AI for automated roving? Still 100% on the drawing board, and plenty of other non-astromech/droid related projects to do around the house, but it is something I’d like to do.
A lot easier to transport too. 😉
Apart from all that, got other Starfury events to help out at, and that nasty thing called Real Work to do to keep the money coming in.
There are many options for a battery to power an astromech, from the tried and tested Sealed Lead-Acid, to the latest LiFePO4. This article will look at utilising the very common 18650 cells. These are used in power tools, laptops, even Tesla cars.
WARNING, this article will talk about opening old packs, harvesting their cells, soldering cells, spot welding cells, and lots of other things that could be quite dangerous.
Lithium cells of any type can heat up or burst into flames if mistreated. Only attempt the things in this article if you are entirely comfortable with any possible outcomes. Do other research, read other articles, the author accepts no responsibility for any injuries or death from the instructions given.
18650 refers to the size of the cells, 18mm x 65mm. They generally have a capacity between 1500 and 3500mAh. If you see anything saying 4000mAh or above, chances are its a scam. There are a lot of cells branded ultrafire that claim over 6000mAh capacity which is a total lie. Voltage ranges from 4.2v when full, to 3.2v when empty. These cells use Lithium-Ion technology, which is a lot safer than the Lithium Polymer that is used in many radio control devices. The drawbacks are that it has a much lower discharge rate. LiFePO4 are even safer, but are also more expensive. Li-Ion seems to be a middle ground, which is why it is used in so many places.
Generally, these cells are arranged in series/parallel to get the desired voltage and capacity. For example, a 24V battery is made of 6 cells in series. Extra capacity is added by putting more cells in parallel, so that if you use cells with 2500mAh capacity and want a 24V battery with 10Ah capacity, then you will use 4 rows of 6 cells, commonly written as 6s4p.
The current drain allowed on a battery is usually 1C, or 1*<capacity>, so in the same example 6s4p battery, you can have a maximum drain current of 10A. Doubling the battery up to be a 6s8p will give you 20Ah and a 20A potential drain. 1C is the safe limit using recycled cells. If you are using brand new cells then you may be able to get a higher current draw by checking the datasheet. For example a NCR18650B can draw 2C and a NCR18650PF can go up to 3C.
As mentioned above, 18650 cells are used in many places, and can generally be recycled. The best place I have found for second hand cells is from laptops or power tools. These battery packs can be cracked open and the cells removed. It is quite a labour intensive task, but saves a lot of money. You can pick up job lots of second hand cells from eBay, tho this is getting more expensive as more people are harvesting cells this way.
You have to force the two halves of the battery case apart, usually with a screwdriver or similar flat sharp object, and then separate the cells from the circuitry and cabling inside. Always wear heavy gloves, and take extra care when using a lot of force. Its easy to slip and damage yourself or the batteries. Also make sure to take care not to use the cells as a fulcrum as this will also damage the cell. Basically, be careful and take your time.
The drawback is that each cell is of unknown capacity and life, some cells may even be totally dead. They could already have been through a few thousand cycles. Each cell needs its capacity testing with a charger/tester such as the Opus BT-C3400. Of course, if you can ask friends and family for donations of old laptop batteries, you can save even more money. I managed to get a lot donated for free. Despite the drawbacks and amount of work required, you can end up with a battery for next to nothing that would cost a lot if you bought a ready made one. For example, I built a 24V 25Ah (approx) 6s11p for around £50 of cells, plus a few other bits.
The other option is to buy brand new cells in bulk. Either from Chinese sites such as aliexpress.com, or from other sites closer to home such as eu.nkon.nl. Chinese ones are generally a little cheaper, but you do have a long lead time and the risk they are counterfeit. A typical cell such as the NCR18650B (high capacity/average discharge rate) or NCR18650PF (medium capacity/high discharge rate) can be bought for approx £3 a cell.
As well as the actual cells, there are a couple of other essentials. These are cell spacers, which clip into various configurations to hold the cells in place, and allow air flow around them. You’ll also need nickel strip to connect all the cells together. Both of these items can be bought from aliexpress.com in bulk. If you are buying brand new batteries from NKON, they also sell nickel strips for a decent price when bought in batches of 10m.
Lastly, you’ll need battery connectors and a balance lead. The battery connector can be anything you wish, as long as it will take the current. The balance lead is a connector so you can make sure that all the series cells are at the same voltage. This is important so you don’t let one cell run down lower than the others, which will potentially damage the cell, and maybe the whole battery. You need one for the correct size of battery (eg, a 6s battery will need a 7 wire balance lead) which can be got again from aliexpress.com or ebay.
Constructing the battery
Once you have enough cells together, and all the other items, time for construction. The general process is:
Sort the batteries into parallel sets with the same total capacity. The idea is to have them well balanced before you even start. You can use a site such as repackr.com to help with that
Clip the cell spacers together in the required layout (eg 6×12 for a 6s12p), then lay the cells out. Each parallel set should be the same orientation (eg, negative to the top), but alternate them as you fill in the series set.
Once you have all the batteries in place, clip the top of the frame into place
Now its time to connect the parallel sets up. Using either a soldering iron, or a spot welder, connect strips along all the parallel sets. These are the ones that are all the same way up. What this does is create the capacity for battery pack. Be careful if soldering, don’t allow too much heat to build up on the cell, do it as quick as possible. You can get spot welders from aliexpress.com for around £200 that will do the job a lot better.
You can also get a device that will give you a full readout, just from plugging the balance connector in. They are only a few pounds from places like ebay. They will let you view the total voltage, each parallel set voltage, and also the max/min/dif between the cells.
For the initial charge you will need to use a decent balance charger, such as an imax B6. These are generally for lipo batteries, used in radio controlled quad copters or planes. The benefit of a charger like this is that it will balance the cells out and has lots of monitoring and protection built in. Follow the instructions in the charger manual closely.
Once charged, leave your pack for a while, even a month, testing the voltages periodically. If you have a dead cell, then it can manifest as one of the parallel sets slowly loosing charge. When this happens, you’ll have to dismantle the battery and retest all the cells.
If you have the time, you can also do a full discharge test with the charger on the battery to get an accurate reading of its capacity. This will take a long time if you’ve made a big battery, depending on the charger you use. If you aren’t overly bothered about an accurate capacity test, just run the battery in the droid (or whatever other use) and monitor the voltage. Don’t let the voltage go down below 3*<number in series> (eg, a 6s should never be let to dip below 18v). To prolong the life of the battery, don’t even let it go that far. Full charge/discharge cycles are the worst case for wear on them, and will shorten the lifespan. I recommend discharging it to around 40-50%, at least on the first try.
After the first discharge, check the balance of the cells again. Ideally there should be little difference between them in a fully functional battery pack. If there is significant difference (IMHO, 0.1v between the highest and lowest voltage) then you may have a bad cell somewhere. Do another balanced charge and discharge cycle and see if the same cell has troubles. If it does, rip it apart and try again.
If the battery remains balanced, then you can actually use a none balance charger (cheaper, and usually higher current for rapid charging) for most charge cycles. Tho make sure it is balanced occasionally and no harm in doing a slow balanced charge once in a while.
Using 18650 cells gives you great flexibility in not only the size (voltage and Ah), but also the shape. This example has shown creating standard blocks, but with some creativity you can make a battery that follows a certain shape (ie, follows the outer curve of an R2 unit’s interior). If you want to make use of recycled cells, then this is a very cheap option to get some very high capacity batteries built. Even buying brand new cells will still save you a lot of money.
For example, I’m currently building a 6s12p pack using NCR18650B cells. I’m getting these for approx £3 a cell. That makes the total cost of cells £216, which gets me a 24V/40Ah capacity battery in a fairly small form factor that can give out nearly 80A (my droid barely pulls 10A at full speed!). I doubt I could fit enough SLA batteries in my droid to get that, and a similar capacity of LiFePO4 would set me back about £800. Even taking into account the cost of a spot welder (which can be used many times of course) its double the price.
One thing I haven’t covered in this article is a BMS. This is a Battery Management System makes sure nothing is going wrong with it, and will cut off the output when the battery gets too low. I’m still researching these myself, and will possibly mess with them on my next pack. IMHO, if you are keeping an eye on the battery voltage during use and doing periodic balance tests and charges, then a BMS is not necessary.
Also note that capacity of the cells will drop over time, depending on number of cycles, how deeply they were charged/discharged, and how rapidly they were discharged. Take care of the battery, and it will last longer, drain it constantly at high current and it will be dead within a few hundred cycles.