Zeroshell Router

October 13th, 2012

Routerboard 532aI’ve been using Zeroshell on a Routerboard 532a as my office LAN router for over a year now. It’s one of the best router operating systems that I’ve used and it’s really easy to set up. I’ve configured an OpenVPN connection to a remote office that I work with on a daily basis, and then set routing rules for the VPN’s internal IPs so that my office LAN can connect transparently to the remote LAN. Next, I’ve set up an OpenVPN server so that I and other users can log in remotely to my own office LAN. Routing and firewalling is set up between both VPN connections. Above that, we have the usual local routing, firewalling, DHCP and caching DNS server, inbound port mapping and so on.

Zeroshell runs on a regular Linux kernel, and SSH can be opened for full shell access. It doesn’t do anything that can’t be done manually via the Linux command line, but it’s an excellent and easy to use system that gets it done far quicker. It’s also proven to be completely stable, and allows me to max out the 65mbit DSL without issue.

root@zeroshell root> uptime
18:27:36 up 257 days, 55 min,  1 user,  load average: 0.16, 0.05, 0.01

Highly recommended and only takes as long to set up as writing the image to your CF card. Also compatible with Vmware.

Rebuilding the Robot

May 1st, 2011

It had been a while since I’d worked on the robot, and I wanted to work on some movement algorithms. I’ve done some AI work lately on a separate project, and thought that this would help with the automated movement task. Unfortunately, the Robot had a little accident, namely falling out of the loft whilst I was bring it down. It’s been long overdue the removal of some of the excess hardware, and also needed some bugfixes that I now had no choice but to perform.
Read the rest of this entry »

Ethernet over mains power lines

July 26th, 2010

I’ve been using a really clever device for the last few years that a lot of people seem to be unaware exists. It’s an ethernet over powerlines adapter – one such example is the Devolo dLAN. In a nutshell, you plug it into the mains, and connect the Ethernet socket to your network device. You can then plug as many others as you like to various other powerpoints and extend your network wherever the power stretches. Devolo do ones that run up to 200mbit. It’s a theoretical maximum, although I’ve got 177mbit before which is impressive. It has a couple of downsides:

1. It won’t traverse 3 phase power. I’ve tried it, and I’ve ended up with a very weak/nonexistant signal which is probably more inductance than anything else.
2. Obviously it doesn’t handle bad cables well – it doesn’t much like extension cables either.
3. Different circuits work about as well as 3 phase power, the only signal you will get is probably inductance between the two circuits.

Some advantages:
1. It travels pretty far. I’ve had over 150mbit between adapters at opposite ends of the house.
2. No new cabling
3. Fully supports standard Ethernet so all network protocols will work just fine over it.
4. I love it

For anyone running a home or office network and not fortunate to have Ethernet points cabled in, I strongly recommend these devices, you’ll never know the difference.

Linux Controlled Door Entry

January 31st, 2010

Having recently moved to a new apartment, one of the first things that I decided to do was build an RC entry system 😉

Here’s some pictures:

Door Door

The black box at the top is a simple Velleman RC control kit and the black box below is a 240VAC->12VDC regulated converter.  The Velleman RC receiver has two relays, one connected to an electric strike lock and the other connected over the button input in the entryphone which unlocks the main door.

On the RC transmitter there are two buttons, and as they are currently connected, one opens the main door and one unlocks the electric strike on the apartment door, with a 5 second timer on each.

This works well so far and I have paired the transmitters with the receiver so that default unpaired transmitters will not activate the relays. A few weeks on, having already locked myself out once, the next step is to extend this project.

I intend to have the RC transmitter connected separately to some embedded linux board, probably the spare Alix and Phidgets boards I have from the robot I built a while ago. The linux board will signal over a separate frequency to this door entry system. The linux board will perform a variety of functions from logging entries to automated surveillance.  Additionally the linux board will have net access and possibly run asterisk. I can either SMS my way in or alternatively call in to asterisk and do some voice authentication. More to follow when I actually have time to get this done..

Embedded Linux Programmer

January 15th, 2010

As an embedded linux programmer, I’ve had the opportunity to work on a number of different platforms, MIPS being one of my favorites.

There are a few general limitations that you’ll find. You have limited CPU power available, you have very little RAM available, and for more advanced operations and optimizations, your CPU will generally have a limited function set.

The usual good programming practices apply, but are of much greater importance. Specifically, don’t allocate memory that you don’t need, and dont put the CPU under undue stress with unnecessary or badly optimized loops. Taking C syntax and some pseudo code;
Read the rest of this entry »

Using the Phidget Interface Kit under Linux

August 5th, 2009

I thought that it might be a good idea to write a quick high level overview of getting the USB Phidget Interface Kit working under Linux. In my case I am of course using 32bit Debian, however these instructions should mostly be portable to any other Linux based OS

Read the rest of this entry »

Linux and the Huawei HSDPA 3G E220 modem for mobile broadband

February 28th, 2009

Installing the Huawei E220 modem under Linux is so so easy. Probably easier than running through the Windows XP Setup tool actually!


1. Kernel version equal to or greater than 2.6.20 (There are workarounds availble for older kernels)
2. wvdial (You can use any serial dialer I guess)
Read the rest of this entry »

The Robot: Hardware working and ready to go, a few minor glitches

November 26th, 2008


Progress has as always been good lately. The robot boots up quickly and appears on the wireless LAN, with openssh running. The internal Atheros miniPCI wasn’t doing the trick and wireless performance was shaky at best. I’m using an Alfa Networks USB adapter (r8187) and an 8dBi gain antenna now, so this has some distance now!

I was also getting frustrated with the laggyness of the board while VLC was running for streaming audio and video and so I decided on an IP Camera (Edimax), which is connected directly to the LAN port on the Alix board (I don’t have any reason to use it for anything else).

The motor control script works well and the device is responsive. At this point I can drive the device around



relatively easily and accurately, stream video and audio back to my laptop, which again is connected wirelessly.

Using ‘espeak’ you can easily generate a synthesized voice to provide easy text to voice:

echo “I am a robot”|espeak

Everything is working great and I’m pleased so far. The only reason why there isn’t a video up yet is because I haven’t had the time! There will be one up shortly.
Read the rest of this entry »

Linux: AVIT Research USB to TTL Cable

November 20th, 2008

I ordered a USB to TTL Cable to control two Sabertooth 2×25 motor controllers as part of the Robot project.

I plugged it into a Windows PC, and used ‘RoboRealm’ to control the motors via the COM port that appeared. Worked perfectly. Motors, controller, USB to TTL and virtual COM port – excellent.

I then plug the cable into my Linux board and guess what, no driver claims it and I have every standard USB Serial module compiled. AVIT Research’s website also gives no help on Linux support.

The device shows up under lsusb as:
Bus 002 Device 002: ID 10c4:818b Cygnal Integrated Products, Inc.

The solution was luckily simple. After prising open the cable and doing some research, the ‘cp2101’ driver is the one that we want. I’m using but this should work for any cp2101 version.

Read the rest of this entry »

The Robot: Base, Wheels, Motors, and Sabertooth Motor Controllers

November 16th, 2008

After attaching the 4 motors and brackets to the acrylic square, I found that it started to dip slightly due to the weight, and as I’d planned to put a 1.5kg lead acid battery in the center and I realised that this needed to be addressed. Rather than another visit to Homebase for some steel reinforcement, I just stuck (melted) two pieces firmly together with polycarbonate acid glue and then trimmed the edges with an electric saw.



Here is the base, the insulation tape all over the place is to hold down the connectors that I won’t be needing. The motors all contain encoders which I didn’t just want to rip out, so I’ve preserved the connectors for future usage, and just cut the – and + cables in a way that they can easily be reconnected to the connector if I ever want to. They were expensive motors so I didn’t want to ruin them!

If anyone is wondering why I didn’t attach standoff cylinders to the controller’s super large heat sink rather than attaching it directly to the acrylic base [which would normally be a bad idea], it’s because I didn’t have any standoff’s left, and the controllers are capable of 25A per channel. I will never drive them at higher than 4A, and the motors running on 4A for 30m or 2A for 2 hours solidly as a test didn’t generate any noticeable heat on the heat sink at all. At first I had also predicted the use of a fan to suck air in from the base, but I’m not sure it will be necessary, as nothing seems to get remotely hot so far..

I’ve also slightly indented the 4 points where the acrylic cylinders will be glued, just for extra stability. The motors are all wired to the two motor controllers, which has a junction box waiting for 12v now. The picoPSU should arrive some time this week, so hopefully I can get on with it.

Omnidirectional Wheel

Omnidirectional Wheel

The wheels are omnidirectional as they contain rollers. It’s a clever design and it seems to work well. Infact, I’m pleased with the way the motors and wheels ended up. Instead of having to work with two wheels and spending time on calculating angles for servo motors and turn radius, I can just attach 4 motors instead in the configuration that I have and using omnidirectional wheels. The motors will pull a lot of weight and I only have to concern myself with backward and forward for each motor, which in any combination will allow it to move in any direction. Hey, I’m not saying that I ‘invented’ this ingenious combination, just taking the credit for a smart move in implementing it! I have connected a power source directly across each of the motors to test. They are straight, and when I turn them all in the same direction, the board rotates around a ‘very almost perfect’ fixed axis which is great. I had in mind when I was positioning these, that I didn’t want to spend a ton of time in the software compensating for wheels that aren’t straight.
Read the rest of this entry »

The Robot: A body, Sensors and Good Progress

November 14th, 2008

Progress is going really well and I’m happy so far. Unfortunately I didn’t want to show the body yet as it is so far from finished but as I haven’t posted an update in a while I decided to just go with it.





The body is ever so slightly lop sided by a few mm here and there which is a shame however from a short distance you wouldn’t notice, it stands up straight and weight distribution is equal throughout the base plate so I’m happy with it. Ok, ‘professionally’ the body’s a mess however for my zero experience in that kind of work, I’m reasonably happy.

This is the front of it, top is a mounted webcam, to the left of that is a phidgets temperature sensor and top right is a phidgets light sensor. I am waiting to add 8 colored status LEDs around a small flat panel 5v stereo speaker as a ‘mouth’ (I got it from a Nokia phone bundle).
Read the rest of this entry »

The Robot: Phidgets USB Interface Board Kit works

November 7th, 2008

The Phidget interface kit arrived and so did a few of the analog sensors that I ordered. I can’t believe just how simple they are to use and just how friendly and comprehensive their SDK is!

Here are some pictures:

Phidget Interface Kit

Phidget Interface Kit

This is the interface kit itself. It’s a regular USB device and draws minimal power. Along the top of the board are the analog sensor inputs. Each is connected via a simple 3-pin wire, ground, data and +V.  Along the right hand side are 8 simple digital on/off inputs. Along the left hand side are 8 just as simple digital on/off outputs. In this case, I have connected the Phidgets analog light sensor which you can just about see on the left of the picture. Download the Phidgets Linux SDK from their site, compile, and run the examples. The range on the light sensor is fantastic. It advertises 0 to 500 range and does indeed live up to the promise. Pitch black and the sensor reads < 5, and pushed up close against a 400W light, the sensor reads > 480. Normal light conditions and the sensor reads between 30 and 180 – very very useful.

The SDK comes with plenty of examples and is incredibly user friendly! I would recommend these all day long.. it really is plug and play.

IR Distance Sensor

IR Distance Sensor

And here’s a distance sensor. It’s a simple IR mechanism that ranges from about 1m to 10cm. There are also 10cm to 5mm sensors available. Again, works great, really reliable.

So now these work, I’ve ordered some more and they’re on their way. One temperature sensor, two voltage sensors, some sonar sensors and more IR sensors – fantastic products.

In the mean time, I’ve ordered a load of clear acrylic and plan to start putting a body together shortly.

I’m still having a little trouble talking to the motor controller so if anyone has any I2C knowledge, please please let me know. I don’t want to buy a prebuilt base.. I think it’s cheating.

Linux on a Mikrotik 532a , Part 5 Final – OpenWRT and Custom Scripts

October 19th, 2008

Follow on from:

I’ve used OpenWrt previously to this project to build some firmwards for the Linksys Router WRT54 range. OpenWrt is an incredibly powerful and small Linux distro. Although debian is probably better suited to the reasonably powerful hardware, I wanted to give OpenWrt a go anyway.

Unless you’re running a MIPS 4Kc processor on your host which I’m guessing you’re not, you’ll either need to cross compile your binaries, or just compile them natively on the device itself. Compiling on the device works fine as long as you have the relevant packages, however if I was going to build a 2.6 kernel, I’d rather do it on an x86 quad core intel host, rather than waiting a week for the device to do it. I also wanted to minimize the writes on the CF card.

OpenWrt comes with a nice buildroot environment which you can read about and download from using Subversion.

Here is a great HOWTO on getting the build root environment set up on your x86 host.

Also, see: – this is a very complete HOWTO, which is why I’ve not covered most of the installation process and just detailed customizations.

You’ll need to select the RB5xx target for the kernel. Also, run:

make kernel_config

In your build root top directory, and add USB support (as my one is modded for USB which is not RB5xx default.

While you’re there, browse to the networking options and make sure you have everything you want, specifically the schedulers for traffic shaping.

Read the rest of this entry »

Robot: Initial Hardware Order [rev 2]

October 13th, 2008

Follow on from:

I’ve given up on trying to source separate motors, motor controllers, encoders and brackets. I’m concerned that my knowledge of mechanics and motors is limited, and that I’m going to spend too much time and money trying to build a movement package myself.

I’ve decided to go for a good motor/controller/encoder package here:

Wheel Package

Wheel Package

I’ll need two of these, and will have to replace the wheels with the omni directional wheel things I found and linked to in my last post.

I’ll drill the brackets into a thin metal plate, and start building perspex on top. I don’t seem to have paid enough attention to battery/device weight/motor/power and am concerned that the motor and battery combination will not move the device. I don’t yet have an idea of how much it will weigh, but I’ve realized that the perspex is going to have to be as thin and light as possible, and I’m going to have to bear weight in mind with any unnecessary or redundant extra parts.
Read the rest of this entry »

Linux on a Mikrotik 532a, Part 4 – Customization, Debian Scripts, Shaping, Firewall, NAT, picoLCD

October 11th, 2008

Follow On From: 05 Oct 08 APNIC Box – Linux on a Mikrotik 532a, Part 3 – Installing Debian, Prebuilt Disk Image

Following on from the previous article, I’ve written some scripts which you’ll find in the /root/scripts/ directory of the prebuilt image. I’ve attached and commented them here, as they could also be useful elsewhere. #For setting up a simple bridge
Read the rest of this entry »