Category Archives: blog

3D Printing a Tool to find your Veins

I find that the best projects start with a purpose, however what most people don’t tell you is that the purpose doesn’t always have to be prophetic, necessary or groundbreaking. For a lot of people starting a project can be as simple as the intention:

“I want to blink an LED”

When I joined Leeds Hackspace this was the first concept I was introduced to, along with the Arduino platform. This small and, to me, humble beginning has led me down a path which resulted in a change of job, an introduction into an entirely new community and a world of Technological interest and learning that has took me from an interest in computing and network programming to electronics, 3D printing, scanning and more.

My recent project started with a purpose, (if you’re squeamish you may want to clench, skip a sentence or look away) when you visit the doctor for a blood test and they struggle to find a vein, usually there’s one nurse that can manage it. You don’t expect to be told:

“Usually when it’s this difficult, we would go in via your neck, but we can’t justify it for this test”

To say that’s horrifying is an understatement, so the response that came naturally was obvious to me. I must find a solution to this problem. How on earth can I make my veins easier to find so that I can prevent this in future?

Almost coincidentally, in some occurrence reminiscent of the telephone or television being invented at the same time in two sides of the world, I found my solution quickly. After exhausting the thoughts of ultrasound, radiation or other forms of potentially lethal solutions I happened upon an instructables.

3D printing is only as simple and easy as the tool that you’re using, and I quickly discovered that the printer at Leeds Hackspace required some tweaking. Those who’re familiar with their own built 3D printer will be no stranger to this concept. After a number of nights tinkering with the settings and observing the temperatures, the ‘hot end’ required cooling and the heat bed required heating. I feel that I’ve written stranger sentences.

Finally, the basis of the device is completed. However, now I have to populate it with components! Well, a few online searches and ordering later and I would have the crux of the job. LEDs of the correct wavelength to be able to be absorbed by non-oxygenated blood but reflected by the rest of my skin. Soon, I’ll be able to see my own veins.


The hardest part, I soon discovered, was that this portable design for a vein finder was not designed with an internal layout in mind. After a few rather hand-warming shorts later I managed to acquire suitable heat-shrink and seal up the device appropriately. Yes, it runs on two double-A batteries at 1.5volts (rechargeables don’t quite have the voltage/current for a setup like this, but that could be adjusted).

In the space of, consolidated, a week, I have something to take to the doctors with me the next time I visit. Thanks to the wavelength (628nm) of the red LEDs it’s difficult to capture on a digital camera, but hopefully, they won’t be going at me via the neck.

Here are some bonus pictures of the finished product in action:

Subscription or Pay as you Go Gaming ?

Edit: Called it:

Double called it:

Technically there’s no difference, I would argue anyway.

A thought struck me while I was reading that Microsoft are altering their XBox Live Gold subscriptions. They’re making them more like the Sony Playstation. You can use applications which are practically out of their control (Netflix, etc.), that you’re already paying a subscription to use, for free so long as you have the app’s subscription.

Though alike Sony’s Playstation Plus; you’ll get access to free games per month as well. However, as we all should know, there’s no such thing as a free lunch and what you’re actually doing is paying for the games as part of your subscription in some way.

So what’s my point here?

Let’s use television as an example. In the UK you pay for a television license each year, technically this covers the cost of the BBC channels but thanks to UK law it also means reception of the television broadcasts. The BBC channels do not have advertising, it’s subsidised by the television license fee, but the other channels need advertising to stay afloat.

You’re paying a subscription for the channels; if you’re using Virgin Media or Sky then you’re paying a subscription again for your cable/satellite package to be able to use the technology to view the channels and whatever exclusives the respective provider has garnered for your viewing pleasure.

Alternatively you can just buy your series/show/etc. on media, which I would consider the pay as you go option but the analogy breaks down slightly in that the money doesn’t necessarily go to the television provider unless they happen to have published the media.

Music is also, partly, using a similar model. You can go out and buy your media or download it; but services such as Spotify charge you a monthly fee if you let them to access your music conveniently. Up until recently they put limits on what songs you could access, but music being a more versatile and easier to access and duplicate beast, this model fell down somewhat and so it’s more so the service that Spotify can charge for.

How does this relate to games?

Playstation Plus and Xbox Live Gold entice you to subscribe and by part of that they give you free games per month only if you’re a subscriber. That’s effectively games on subscription, the OnLive streaming service also provides you access to games if you pay a monthly sum and the library of which extends over time.

Alternatively you can pay as you go by going into the store and picking up your media or digitally downloading and paying online.

The PC, however, if we take Valve’s Steam service is predominantly Pay as you Go. I had a thought, though. Valve do something kinda sneaky, they have regular sales.

So say for example, you’re the type that only ever buys games when you really want them and you wait until they’re sufficiently reduced. You’re possibly starting to be out of the norm for Steam users as studies claim most games in a library aren’t played. Here we possibly hit the crux and the relation to sales. Valve take a slice of every sale on Steam and by providing regular sales which people will be tempted to buy into because of either the game or the price point, they are then paying into the subscription model per month by directly and regularly paying into Steam for the games.

Steam have sales weekly and I think there’re sufficient numbers of people to contribute to make this work. What this is also showing is that the Pay as you Go mentality is also actually a subscription type of basis when you’re paying into the same system, it’s just that the payments aren’t so frequent as monthly, but you’re ensuring that there is a base amount of money coming in that can be quantified while helping to top it up now and again with those people who’re on longer subscription (pay as you go) type of plans.

Now, if we consider that most peoples libraries aren’t played; this is similar to how television is monitored as to which channels and tv shows are popular and what’s being watched. Your game time is tracked and this means that your game provider can tell which ones are popular, which ones to invest in and also push forward or not depending on if they want them to attempt to gain traction or to analyse why they’re not.

I surmise the question arising, at least to myself, is that is anything going to change? are we going to see subscription only gaming?

I don’t think we are, what we will see is a system in place to allow for the tiers of subscription to services. You will still have your pay as you go (long term between payment subscribers), your faster, monthly subscribers and those who pay a premium for instant access.

However what I think we should see to help accommodate these metrics and tempt people into them more for support, is prices coming down and doing so regularly, even EA’s Origin buckled to having sales even though initially they said that they wouldn’t. Playing off the psychology of people that they’re getting a deal and value for money.

So subscription or pay as you go ?

If you’ve bought something more than once then you’re already subscribing, the only winning move is not to pay.

Running Debian on the Atmel SAMA5D3 Board

So when I wanted to build a version of Linux for the SAMA5D3 board that wasn’t Yocto or a demonstration image, then I started to struggle to find solutions.

Then I happened upon Robert Nelson’s guide on EEWiki. However, I found that it was not as straightforward as I had hoped. A few instructions were confusing and out of order with one another.

Here I present the steps I took to have Debian working on the SAMA5D3, some are the same, others are importantly different. I also have a .IMG of the SD Card I created available.

I set this up using a laptop with Debian Linux installed; I imagine it doesn’t matter which version of Linux you have; you could probably use Cygwin on windows.

You will need:

  • An SD card (I tend to work with at least a Class 6, 8gByte)
  • An Atmel SAMA5D3 board
  • A computer with Linux (unless you’re able to translate the steps to Windows, feel free) with an internet connection
  • A Serial debug cable
  • Open up a terminal, create a directory to work in and run the following commands to grab Linaro, the ARM cross compiler:

    wget -c
    tar xf gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_linux.tar.xz
    export CC=`pwd`/gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_linux/bin/arm-linux-gnueabihf-

    Then test the version of gcc:

    ${CC}gcc --version

    Which should output something like this:

    arm-linux-gnueabihf-gcc (crosstool-NG linaro-1.13.1-4.8-2014.03 - Linaro GCC 2014.03) 4.8.3 20140303 (prerelease)
    Copyright (C) 2013 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO

    Now we need to grab U-Boot and patch it for the SAMA5D3, you will need to have GIT installed on your distribution of Linux:

    git clone git://
    cd u-boot/
    git checkout v2014.04 -b tmp
    wget -c
    patch -p1 < 0001-sama5d3_xplained-uEnv.txt-bootz-n-fixes.patch make ARCH=arm CROSS_COMPILE=${CC} distclean make ARCH=arm CROSS_COMPILE=${CC} sama5d3_xplained_mmc_config make ARCH=arm CROSS_COMPILE=${CC}

    Now time to build a kernel for the board!

    git clone
    cd armv7_devel/

    As of the time of writing the current mainline kernel was v3.14:

    git checkout origin/v3.14.x-sama5-armv7 -b tmp

    After the kernel has compiled, you’re presented with a menu config screen where you can include or build additional modules. For example, you can incorporate GSPCA webcam support.

    Now, we want to acquire the root system files for Debian, which are handily available:

    wget -c
    tar x -f debian-7.4-minimal-armhf-2014-04-01.tar.xz

    Then insert your SDCard, either using a USB SDCard reader or one on your computer if you have one. I had to use a USB SDCard reader. In Linux we can type “dmesg” at a terminal to give us the /dev/ information for the device we’ve plugged in (for example mine’s /dev/sdb), in the following examples, we use mmcblk0, so just replace it for your relevant device id.

    In the following steps we will erase the SDCard and set it up with the relevant partitions:

    export DISK=/dev/mmcblk0
    sudo dd if=/dev/zero of=${DISK} bs=1M count=16

    sudo sfdisk --in-order --Linux --unit M ${DISK} < <-__EOF__ 1,48,0xE,* ,,,- __EOF__
    If the linux system you're using identifies the device as something similar to mmcblk0 then to format and mount, execute:

    sudo mkfs.vfat -F 16 ${DISK}p1 -n boot
    sudo mkfs.ext4 ${DISK}p2 -L rootfs

    sudo mkdir -p /media/boot/
    sudo mkdir -p /media/rootfs/

    sudo mount ${DISK}p1 /media/boot/
    sudo mount ${DISK}p2 /media/rootfs/

    Else if the device identifies itself as something similar to sdb then to format and mount, execute:

    sudo mkfs.vfat -F 16 ${DISK}1 -n boot
    sudo mkfs.ext4 ${DISK}2 -L rootfs

    sudo mkdir -p /media/boot/
    sudo mkdir -p /media/rootfs/

    sudo mount ${DISK}1 /media/boot/
    sudo mount ${DISK}2 /media/rootfs/

    Note: You may not need to mount the partitions as new(ish/er) distributions tend to automatically mount partitions upon detection/insertion/creation.

    Create a text file using your editor of choice (for the record I prefer vi …) called uEnv.txt and put in it the following, the sama board uses the ‘mmc’ naming convention:

    optargs=quiet init=/lib/systemd/systemd
    mmcroot=/dev/mmcblk0p2 ro
    mmcrootfstype=ext4 rootwait fixrtc

    Now we’ll extract and copy across all of the necessary files, the locations should all be relative to the initial directory we’ve been working in and you created, they should all be executed as root/sudo:

    sudo cp -v ./u-boot/spl/u-boot-spl.bin /media/boot/BOOT.BIN
    sudo cp -v ./u-boot/u-boot.img /media/boot/

    sudo cp -v ./uEnv.txt /media/boot/

    sudo tar -xvp --same-owner --numeric-owner -f ./debian-0.4-minimal-armhf-2014-04-01/armhf-rootfs-debian-wheezy.tar -C /media/rootfs

    sudo cp -v ./armv7_devel/deploy/3.14.0-sama5-armv7-r9.zImage /media/boot/zImage

    sudo mkdir -p /media/boot/dtbs/
    sudo tar xvo -f 3.14.0-sama5-armv7-r9-dtbs.tar.gz -C /media/boot/dtbs

    sudo tar xv -f 3.14.0-sama5-armv7-r9-modules.tar.gz -C /media/rootfs

    And to setup the partition mounting (if you don’t like vi, replace with nano, emacs or whatever your preferred editor is):

    sudo vi /media/rootfs/etc/fstab

    Insert into it (in vi, press ‘i’ on your keyboard, then type it in, or copy/paste it into your terminal window):

    /dev/mmcblk0p2 / auto errors=remount-ro 0 1
    /dev/mmcblk0p1 /boot/uboot auto defaults 0 2

    Close and save the file (in vi, press ESC then type in :x and hit enter, which saves and quits).

    Then setup the network interfaces:

    sudo vi /media/rootfs/etc/network/interfaces

    With the following at the end of the file (you can use your cursor keys to navigate vi until you get to where you want to insert):

    allow-hotplug eth0
    iface eth0 inet dhcp

    allow-hotplug eth1
    iface eth1 inet dhcp

    And setup our serial line:

    sudo vi /media/rootfs/etc/inittab

    With the following at the end of the file:

    T0:23:respawn:/sbin/getty -L ttyS0 115200 vt102

    Now we want to unmount our SD Card, so close down any windows/open files that’re on the card and run the following from a terminal:

    sudo umount /media/boot
    sudo umount /media/rootfs

    Our SD Card should be setup! The only thing to do now, is remove the jumper at JP5 on the SAMA5D3 to ensure it’ll boot from the SD Card, connect a serial cable to the debug header J23 so we can see what it’s doing, with the settings in minicom/Putty/your terminal editor of choice:

    Baud: 115200
    Data Bits: 8
    Stop Bits: 1
    Parity: None
    Flow Control: None

    Then connect the USB cable to power the board, then press the reset button for good measure and watch it boot up!

    Login details:

    User: root
    Pass: root

    User: debian
    Pass: temppwd

    When I created this image from scratch initially I encountered a number of problems. The main part is that the SD Card needs to be setup as root, with the files copied over as root. This is because of the permission level required to read the SD Card when the SAMA5D3 board loads up.

    The other problem I encountered was the settings for uEnv were confusing me on the eewiki guide.

    Something that might trip up anyone following this guide word for word in future is if the kernel version increases, this will need to be altered in the filenames in the guide above. Failing that, the SD Card img I have prepared should help: (543mB)
    Debian-SAMA5D3-140409.md5 (211b)