This blog covers the build of my first ‘large’ and what I would consider to be ‘proper’ robot. It came about due to several factors, firstly because for a very long time I had been considering building a DALEK and decided it was time to start. Around about the same time I was (and at the time of writing, still am) in the middle of a British Computer Society Certificate in Computing part of which is a coding project for which I wanted to build a robot. Also just as I started the initial stages of the build Robot Wars was on TV and in school, where I teach, several of the children were talking about how to build a robot.
I studied peoples DALEK build on the Project DALEK forum and soon realise that building a full size DALEK is a big undertaking and to do it correctly (which I wanted to do) required a lot of tools that I just don’t have. So as I still wanted to eventually build a DALEK I settled the idea that I would build a large robot chassis that could later be used for the DALEK but in the interim would serve as a stand alone robot. Remembering something I read many years ago that said never take take apart a robot to build another one the idea would be that I would simply be adding a DALEK body over the original frame and moving some of the components around :-).
taking inspiration from some of the DALEK builds I set about constructing a frame using 2mm 20mm x 20mm boxed steel. I picked up the 3 x 2.1m lengths of box section from a metal fabrication shop on a local industrial estate for £15.
The base would initially consist of a rectangle made using 2 x 400mm and 2 x 200mm pieces of box section and would end up 400mm wide and 240mm long due to the fact that the 200mm lengths sat inside the 400mm lengths creating the extra 40mm (2 x 20mm). I cut four pieces for the first section and straightened off the edges. To help welding I also chamfered them. To ensure that the frame was straight I clamped the sections to be welded on a piece of plywood.
First I tack welded each joint so that I could check the alignment and straightness of the corners using a set square and once the frame was tacked together I seam / butt welded all of the joints. Then I dressed down the welds (not completely to maintain strength).
As I am impatient I did a test fit of the motors which were mounted by drilling our holes (two either side) through the box section. I do intend to weld a piece of flat bar onto the side pieces so that each motor will be held with four bolts. Whilst this is not necessary for this robot if I intend to sit inside the DALEK it will be needed to hold my weight.
I even wired up the original electrics to see it moving.
The next stage was to add a slightly angled front end using approx 600mm lengths (I will measure and edit this posts) your own lengths will be dependent upon your requirements. The welding process was the same using plywood to maintain alignment and spot welding all joints before going over them again.
Once the welds were dressed down I slapped on some Hammerite smooth.
All that is missing now is a castor for the front.
On reading the DALEK motorisation guide I opted to use as much of the original wiring loom as possible. On my wheel chair there is a connector between the main control box / joystick and the motor and battery connectors. I decided to cut the loom off here but still leave enough wire to reconnect the joystick (if I ever needed to use it again). It took some time to work out what each wire was for. The two large red and black wires were the battery + and – (the batteries are connected in series somewhere in the loom hence only two wires at this end). The brakes are also connected in series so again only two wires exit the loom at this end (thinnest of the lot). The remaining wires are the Left and Right Motor + and -. After working out which wires wires which I stripped the ends and put them in a terminal strip which needs to be rated for the highest amp cable being inserted.
In the picture below the cables are as follows from the left:
Red – Battery +
Black – Battery –
Brown / Purple (two wires) – Motor 1 + and –
Black – Brake + or – (polarity does not matter)
White / Green (two wires) – Motor 2 + and –
Yellow – Brake + or – (polarity does not matter)
To help work out how to wire up the Sabertooth, as well as consulting the Sabertooth Manual, I had to follow a couple of guides, one was a digital download on motorising a DALEK (Need to be a paid up member) and the other was this guide on building a Robot using an old powered wheel chair.
Fuse as recommended on some of the guides I have been looking at I installed an automotive blade fuse in line with the battery positive cable. I only had a 15Amp and a 10Amp available. The 15 Amp worked fine whilst I had the motors set to half speed but during a test I set them to full speed and after doing a couple of short turns I fried the 15Amp fuse!!
The Microprocessor(Raspberry Pi) – Initial Setup
The microprocessor chosen for the Robot was a spare Raspberry Pi 2. I decided to wipe a spare SD Card and start from scratch. Once the SD card was setup I did the following:
Installed the latest Rasbian Jessie OS.
Setup the WLAN to connect to my WiFi.
Installed ‘netatalk’ a file sharing utility that allows my Mac to access the Raspberry Pi file system making file transfer a doddle.
Downloaded and installed WebIOPi (used for serial and web control)
You need to install a patch to get WebIOPi working with Pi2 Model B.
Use the installation instructions from the WebIOPi web page for detailed instruction on how to use WebIOPi.
To use WebIOpPi you have to start the webio service, after which WebIOPi is accessible on any other device connected to your LAN by entering the following as a URL in your web browser (insert your Pis IP address):
You will then be asked for the user name and password for WebIOPi which is ‘webiopi’ and ‘raspberry’ by default.
Next to test that WebIOPi is installed and working correctly I wired up an LED to GPIO 27 and using the GPIO header GUI available when you access the WebIOPi URL above. Set the GPIO pin to OUT by clicking on it and the click on the pin number itself to activate it. If everything is working correctly your LED should illuminate 🙂 I found quite a good guide here showing most of the steps above.
The Serial Code
To initially test that I could control the motors by sending serial commands over USB I wrote a short python script using information from the webiopi tutorials. Here is a link to my script on GitHub:
N.B. you need to know the serial communications port that you have your motor driver connected to. To do this type the following at in a terminal on the Pi:
This will list all of the tty devices. Your motor driver will be towards the end. Mine was /dev/ttyACM0. To help you find it run this command before you plug it in and then again afterwards and notice any addition port listed. This will be your port number.
You can also enter the following command in terminal:
dmesg | tail
This will give you the device details in plain english.
Make sure that you study the tutorial and add the correct serial port in the DEVICES section of the webiopi config file (/etc/webiopi/config).
Advance Software Setup
Now that we know that we can send serial commands to the motor driver from the Raspberry Pi it’s time to get down to the real stuff, configuring a web based control panel to provide remote control.
To make the remote interface I installed mjpg-streamer, this is a great piece of software that I used on my Biscuit Tin Telepresence robot. A good up to date guide on how to do this is here. Once mjpg-streamer is up and running you now need to create you web interface. The interface will consist of two things:
A html script for the web interface
A python script which will interpret the commands from the web page using webiopi and send the appropriate serial command to the motor driver.
When I tried to connect the camera and the motor driver the camera stopped the Pi from sending serial commands to the motor driver.
reboot before trying to verify your device is listed in /dev
For information on how to create a bash script use this guide here.
The aim of this project is to create an In Car Entertainment (ICE) system with the ability to utilise additional technology such as web browsing, voice control, satellite navigation etc. The project is being designed for and will be installed in a classic Mini that I have recently finished rebuilding. The project build thread for the Mini is here if your interested.
Microprocessor – The main computing hardware for the project will be a Raspberry Pi 3.
Display – The display was going to use an In Car DVD player as a display however I have since bought a 7 inch touch screen display specifically for this system.
Power Supply – The power supply will be provided by a dedicated car 12v PSU.
SD Card – In order to handle large data files such as video a music a Class 10 is SDHC SD Card should be used.
At the time of writing there were several solutions of Media Centre software that could be used for this kind of project. RaspBMC, a version of XBMC for the Raspberry Pi, Open Elec, OSMC, a custom image of Rasbian and Kodi (formally known as XBMC) or Kodi installed on Raspbian Jessie.
Microprocessor and Display
The first step of the build was to setup the Raspberry Pi using a mains PSU, Keyboard, Mouse, Ethernet and standard display etc. This would ease the software installation process before fitting the touch screen. Once I had installed and configured the operating system I took the RPi out of its case and fitted it to the touch screen and then put the touch screen and RPi in the touch screen case.
Whilst looking for audio solutions for my project I found out that the audio out of the Pi 3.5mm Audio Out socket is pretty rubbish quality. The audio carried by the HDMI may be better but needs to be separated from the video signal using an HDMI splitter. When using the Display Serial Interface (DSI), which is used for the touchscreen that I am using, I do not think a HDMI will be present. You can run dual displays (I found a thread discussing it here) but I did not want to overcomplicate things. The single best solution to improving the audio is to use a Digital to Analogue Converter or (DAC) this outputs much better quality audio.
So, after doing lots of research, I decided to invest in a Digital to Analogue Converter DAC, which is designed to provide quality sound output. I opted for a pHAT DAC which is designed for a Raspberry Pi Zero but is compatible with all Raspberry Pi’s with a 40 pin header.
pHAT DAC (after soldering on the 40 Pin Header)
After the pHAT arrived I unpacked it and had a look at how it would fit. I had envisaged that it would fit inside the 7 Inch Touchscreen case but on looking I realised that this would be a problem because (a) the pHAT should sit on the GPIO headers but 3 of these are already in use and (b) if it was connected to the GPIO header the audio outputs would be difficult to access. I decided that a way to resolve this issue by connecting the pHAT to the Raspberry Pi using some ‘dupont’ header cables.
First the 40 pin header needs to be soldered onto the pHAT DAC. To help with this I followed this guide.
After soldering on the header pins and RCA socket, before connecting the pHAT DAC to the Pi using fly leads, I needed to work out which pins to connect. I managed to find information on the header pins that the pHAT uses from this post. Details on the pHAT DACE header pins can also be found here.
Here’s the pHAT DAC after soldering on the RCA connector.
Once everything was in place I connected the Raspberry Pi to the touchscreen and fired it up. However before using the pHAT DACE it needs configuring so that the Raspberry Pi uses it for sound as opposed to the built in audio. Details of how this is done can be found here.
Once everything was configured I fired up Kodi but no sound seemed to be coming out of the pHAT DAC but soon found that you had to select the DAC as an audio output device from within Kodi. BINGO High Resolution Audio (24-bits at 192KHz) booming out of my ‘Jam Touch’ speaker (the speaker I was using for testing)!! Also when a DAC is fitted such as this one the sound control options on the Desktop are disabled.
The audio output from the Pi (covered earlier) would need to be amplified and I was hoping to achieve this using the Pioneer DEH-1600R radio that came with the car. It turned out however that this model radio did not have an Aux In. I searched and found some hacks. Generally the hacks involve using the radios ability to be plugged into a CD changer but my model had no such luxury. The other hacks hack into the CD player sound output but require a CD to be inserted and played with a blank sound file. I was not a fan of this and then luckily I found another hack which uses the un-amplified sound output from the onboard Radio Tuner.
Basically this hack involves finding the pins on the PCB where the radio tuner module is fitted and then poking around to find a suitable Gnd pin (some work better than others) as well as the Left and Right channel audio. Sounded like a great idea so I gave it a go.
After reading up about the hack linked above I set about dismantling my Pioneer radio.
After removing the outer casing and CD deck I removed the main PCB. I then located the radio module and turned it over to have a look at the radio module pins. To my delight these are all labeled and clearly visible.
Back of PCB
Radio Module Pin Labels
In the picture above you can see that the bottom pin (let’s call it pin 1) is labelled Rch. This will be the Right Audio Channel. and pin 2 is the Left Audio Channel. Labelled Lch.
After temporarily wiring up the radio with only the radio and main PCB and checking that it worked I set about wiring in a 3.5mm auxiliary audio connector. I managed to pull a 3.5mm audio connector from an old CD Rom Drive and after tinning three wires I soldered them to the audio connector.
In order to have a sound source I decided to wire up the Mausberry 3A Car Switch that I had bought to intelligently turn the Pi on and off, so that I could use the Raspberry Pi. Details on how to set it up can be found here.
It all powered up fine so I connected the Raspberry Pi and played a music video. With one of the audio channel wires touching Rch an the Gnd wire touching BEGND the audio came out of one of the speakers. I also tried DGND and that worked as well.
I then soldered the aux audio connector to the back of the PCB and as there was not a lot of space I used DGND. I then re-assembled the radio with the aux audio leads trailing out of the rear and cable tied in place.
When I powered everything up again and played a video I had audio coming out of both speakers, HOORAH, but there was a heck of a lot of ground noise, possible caused by a ‘Ground Loop’.
After some more poking around and help from RetroRides Forum I found that the ground loop problem was probably caused by either using DGRND as my ground point. I disassembled the radio again and this time I soldered the Gnd wire to BEGND. This turned out to be the correct Audio Gnd and solved the ground loop problem.
After making the above changes it sound pretty good but I had to have the volume cranked up to 20/30 and when there is no audio coming from the audio source you can here the white noise of the untuned radio station in the background. There is also some slight interference which seems to be caused by the wireless keyboard?
Here is a video showing the audio quality using this hack.
CD Audio Hack
With the noise from an untuned radio station using the Radio Module Hack I opted to backtrack and try the CD audio hack. I removed the radio and disassembled it AGAIN! Once it was all apart I had a look on the main PCB where the ribbon cable from the CD mechanism connects. Sadly the audio tracks are not clearly marked. I then had a look on PCB that is mounted on the CD mechanism and low and behold the audio tracks are labelled but not particularly clearly. I then identified the correct pins and following the ribbon cable back to the main PCB identified where the corresponding lines are on the this part of the device.
I then stripped, tinned and clipped the leads from my 3.5mm audio socket and using a magnifying glass mounted on a helping hands I managed to solder on my three leads. I checked for shorts using a multimeter, cable tied the leads to the PCB and with the leads routed through the radio I re-assembled it all again.
Once it was back in the car it powered up OK (at least I hadn’t broken it). To test the Aux you need an Audio CD filled with silent music tracks. With this CD in the CD player and the unit playing the CD I connected the external audio source and it worked fine. There is still some interference but it is only noticeable when there is no sound playing. This noise interference may also be caused by the Logitech wireless keyboard that I am using as the sound increases when the mouse moves.
If like me you get really annoyed when searching for help for a project you are working on, finding what you think is a solution to your particular problem and then part way through the guy has dropped what he was doing and gone off in a different direction. Well if that’s you then I apologise because yes that’s what I have done. Although the CD hack does work fine I decided to buy a second hand radio with Aux In. So after cruising eBay looking at radios, amplifiers and speakers I ended up bidding on and winning a Sony CDX-GT26 CD / Radio. It is capable of a similar output as the Pioneer (4 x 45w) but like most Aux Inputs its on the front. Only expensive radios seem to have an Aux Input on the rear. I am not sure if I want a cable hanging out of the front so maybe I’ll hack into the aux socket from inside and run a cable out of the rear?
Whilst researching audio I have also been looking at Amplifiers and Speakers, specifically the XPLOD range, this amp and these speakers. UPDATE ended up ordering the XPLOD XM1004 but opted for some better Pioneer Coaxial Speakers. I bought the Pioneer TS-A6923i 6x9s
Here is the Amp:
And here are the speakers:
The photos are for reference only as I am not allowed to have them until Christmas!! The speakers are a lot larger than I had anticipated. I should have realised this as they are 6 x 9 inches after all!! I could fit them to the parcel shelf but this would involve chopping out some more metal. In the end I have decided to make up a speaker board and fit them under the rear seat. The amp is also quite large (34cm x 23cm) and will probably also go under the rear seat on a separate board either fixed to the floor or the underside of the seat (if there is enough room)?
Installing the Speakers
Well it turned out that the only suitable location for the speakers was under the rear seat. So I set about making a speaker board.
Installing the Amp
After trying various locations to best place I found to fit the amp was in the boot, to keep it out of the way I decided to mount it upside down under the rear parcel shelf.
There is quite a lot to consider when wiring in a system such as this with an amplifier into a Car and in order to ensure that I went in with some sort of an idea I did lots of reading on Car Audio Electronics.
Whilst you could buy all of the wiring parts individually I opted to go for a complete wiring kit (of which there are many to choose from). Being a perfectionist at heart I opted for a kit with high quality products which meant that the wiring had to be 100% Oxygen Free Copper. After lots of research looking at many of the kits on the market I eventually came across one that fitted the bill without breaking the bank. The Rockford Fosgate 8 Gauge Complete Amplifier Installation Kit. This came with power, ground and remote cables, speaker wire and RCA signal connectors as well as an inline AGU fuse.
Setting Up The Touchscreen
For this project I used the official Raspberry Pi 7 Inch Touch screen. A good guide can be found here and the PiMoroni one can be found here .
I also bought an official case for the touchscreen:
In hindsight whilst the case is really good for a stand alone inside the car it may not be a good idea. I had real trouble working out a way to secure the screen in my custom dash and after installing the system for the first time it failed and I needed to remove it. This was a real pain so I think the best option would be to fit the screen in the dash and have an extra long video cable and have the Pi mounted somewhere more accessible. This would help with things like changing SD cards and general troubleshooting etc more later in this blog.
For the software side of things, first I downloaded the latest version of Raspbian Jessie. Then I flashed the image to the SD card, as I am a Mac OSX person I used terminal to do this.
Once Rasbian (Jessie) was on the SD Card I fired up the Pi and saw for the first time the Sept 2016 edition of Jessie. Mmm not sure if I like the way this has gone, seems a little Microsoft Windows 10 for my liking!! Anyway first task with any new installation is to update it. To do this I did an update and upgrade by running the following at the terminal:
sudo apt-get update
sudo apt-get upgrade
This took about 20 minutes to complete after which it is always advisable to reboot the system so that any changes take effect. There are several ways to reboot but whilst in terminal you can simply enter:
After the reboot in the new version of Raspbian you will see a message telling you that some of your config files may have been overwritten. The message also tells you were backups of your original config files are located.
I installed netatalk to ease transfer of media files as follows:
In Terminal type – sudo apt-get install netatalk
On a Mac click the Go menu / Connect to Server
Enter afp://<ip address of your Pi>.
Click connect and you will be prompted for a user name and password, this will be the user name and password for your Pi not your Mac.
A finder window will open showing the contents of the RPi.
Rotating the screen
If you need to rotate the screen you need to edit /boot/config.txt and add the line: lcd_rotate=2 to the top.
You can do this in Terminal by entering the following:
In Terminal, type “sudo nano /boot/config.txt”
Add the line “lcd_rotate=2” to the top of the file.
Next up was the installation of Kodi which, according to the Wiki can be achieved in Raspbian by simply installing it in terminal by entering:
sudo apt-get install kodi
After Kodi was installed again it is a good idea to reboot the system as above.
Setting Up Kodi
Once kodi is installed it needs to be configured to work with your setup however, the pre car setup may be different to the incar setup (Internet access using 3g or WiFi) Hot Spots, media file locations etc). As this was my first ever build I decided to set it up to work on my LAN get to know how it works, tweak it and then make any changes necessary for use as an ICE.
You can either start Kodi from terminal or from the start menu, I used the start menu in case I missed any options?
When it first fires up it will check for updates etc. Quite often messages will appear saying XXX is broken do you want to remove it (or something like that) for now I just declined. Kodi will also do a version check and complain that you are using v15.2 when v16.1 is available. At the time of writing from what I have read Rasbian is limited to v15.2.
It all fired up fine first time however as I had no media it was a bit of a non test? Another problem is when exiting Kodi it seems to power off the Pi. This may have been due to opening Kodi from the start menu in full screen and not from the terminal as a windowed program (if this is indeed possible)?
After some looking around on the Internet I found some interesting information that I had not come across before on using Kodi in the fashion that I wanted as an ICE. The blog can be found here. However whilst I was waiting for answers to some of my enquiries I had a look at Kodi and found a skin designed for use with a Touch Screen. The skin is called re-Touched and is easily installed in the system settings.
One issue I found was that the touchscreen mouse click was not responding. After a quick search on the internet this was fixed by changing the mouse click speed in system settings.
After everything was setup there where still a few problems. After a specified time period, the screen will sleep, it can easily be woken up by touching the screen however when Kodi is running there is no such luxury, once its asleep it cannot be woken up!! I searched for a solution for ages and found that this was an issue when using Kodi on a Raspberry Pi. Kodi opens in full screen and not in a window. Eventually I was pointed to this potential solution, It worked a treat – no more sleeping.
Music and Video
As this is an entertainment system it needs some media to play. I already had loads of videos and music and to transfer it I installed netatalk on the Pi. On a Mac having netatalk installed on the Pi allows you to open an AFP connections which opens a window allowing access to folders on the Pi. You could of course simply transfer files using a USB stick.
As this is an in car system I needed a wireless setup. For this system I used Logitech wireless keyboard and mouse combination, perfect for use in the car (by the passenger of course).
As mentioned earlier in this blog I had some issues when it came to installing my setup in the custom dash that I was building. At first I tried to install the screen with the Pi fitted however this proved to be an error as after a couple of days due to a wiring problem the SD Card became corrupted and I had to remove the dash to get at it – school boy error!!!
Here is the first attempt with the Pi fitted in the touchscreen case:
And then I removed everything and fitted the extra long ribbon cable:
I decided to remove the Pi and mount it in the glove compartment making it accessible. To achieve this I bought a 75cm ribbon cable for the screen a USB to 2 x Micro USB splitter cable (one for the Pi and one for the screen) and a USB cable with a switch. The switch is needed to turn off the Pi after it has shutdown otherwise as soon as the ignition is switched on it would fire up. Sorry no pics 😦
Car Specific Wiring:
When fitting the Pi, Screen, all of the new instruments and a Radio in the car, as well as running a new dedicated power supply for the Amplifier from the battery, I opted to fit completely new wiring for the remainder.
Car radios need two 12v supplies one switched (comes on when the ignition is switched on) and one constant supply (to maintain radio stations in the radios memory etc). I ran a new 12v constant from the cars solenoid rated at 15Amp and a 10Amp rated switched supply from the cars fuse box.
The power for the instrument lighting also came from the fuse box as there was a spare connector fitted to the cars Instrument panel fuse. This meant that the instrument lights came on when the headlights were switched on.
As with the amplifier a lot of information regarding what gauge wiring and where to fit fuses came from a great website called Basic Car Electrics. Basically the wire needs to be of a suitable gauge / amperage rating for anything that it is supplying.
The Finished Article
Well it’s not actually finished but it is in and working. Here is a video showing the interior with the entertainment system working (sorry more Ironman themed AC/DC!!). Oh the engine was running that’s why the rev counter was at 1500 rpm but you can’t hear it – probably due to the music 🙂
As this is based on Raspberry Pi there are endless possibilities for addons, these could include voice control, GPS mapping etc? The voice control will be developed alongside Pi Central, which is another of my projects. The only issue I have at the moment is that I have installed the pHAT DAC using a stacking header but as the header pins have been soldered onto the pHAT DAC I cannot use any of the GPIO. I may have to go back to my original option and connect the pHAT using fly leads. I would also like to build a custom case to fit everything in.
Useful Links and Bibliography
In researching and building this project I found information from the following web sites or forum posts useful and I would like to thank everyone involved for their help.
This is an additional placeholder post. Click the Edit link to modify or delete it, or start a new post. If you like, use this post to tell readers why you started this blog and what you plan to do with it.