Arduino Nano – test

Due to piling boxes of electronic components, cables and other assorted tech stuff up on my shelf I suffered from a large amount of it sliding off and falling over my work space. One of the main victims was my Arduino Nano which had several of the header pins bent.

After straightening out I uploaded a simple test code to make sure the unit still worked:

 Turns on an LED on for one second, then off for one second, repeatedly.

This example code is in the public domain.

void setup() { 
 // initialize the digital pin as an output.
 // Pin 13 has an LED connected on most Arduino boards:
 pinMode(13, OUTPUT); 

void loop() {
 digitalWrite(13, HIGH); // set the LED on
 delay(1000); // wait for a second
 digitalWrite(13, LOW); // set the LED off
 delay(1000); // wait for a second



Christmas Fireworks

I’ve done it, I’ve actually managed to make three of those new Starburst units. They run the same code but with an additional line in each compile of the assembly to run the random number generator again.stars_tree

I’ve posted a video on Youtube here which shows the three starbursts, along with last year’s star effect (and the fact I can’t operate/edit a camera very well ! )

I hope you enjoy it.

I’m trying to make some other more basic stars to add extra colour/effect. These will be using RGB strip LED and illuminate as one single star.

I refined my build technique as they progressed and found black gloss paint was a good way to seal around the WS2812 LED PCB dies prior to mounting with clear silicone sealant…..but only the next month will prove how well that has worked.




Homemade PCB

It is possible to make quality PCBs at home for very little money, here is how I do it.

My first project was to make a UV exposure box. I used two under-counter slimline tubes lights and replaced the tubes with UV tubes. I built a plywood case based on a piece of glass that I had salvaged from an old document scanner. The dimensions were slightly too small and I had to make holes in the sides of the plywood case for the light power leads. I lined the inside of the case with tin foil and cut a thick piece of old card to seal the top (so I didn’t damage my eyesight).IMG_20161111_125923399_HDR.jpg

My first project was a PCB timer as can be seen on the side of the case in the photo above. It runs off 12v and energises the relay to switch power to the UV tubes.

Single Sided Board

I produce the artwork using Cadsoft’s fantastic Eagle PCB software and save it as a PDF (inverting the top layer). Next I print the artwork on a good quality laserprinter, which for me means a walk to my local library with a USB stick and spending 10p on an A4 printout. I make sure I have two images with a decent margin (say 1″) around the edge of both.


At home a pour a small amount of vegetable oil onto the paper and work it in carefully with a finger. I then press the artwork between kitchen paper in a heavy catalogue and leave it overnight to remove the excess oil. The oil makes the paper translucent to UV.

Whilst this is happening I often prep my pre-sensitised PCB by marking it out and cutting it with a fine hacksaw (usually over a waste bin to catch the dust and wear a dust mask ! ).

I cut the artwork leaving a large border if possible, lay one on the other and line up the images before stapling them together. Doubling upm the images makes for a really opaque to the UV (eg the areas we want to leave as copper).

Out of direct sunlight I remove the black protective film off the PCB and put it copper side down onto the toner side of the artwork – this way there is no microscopic gap that can cause the UV to undercut the image. This is also why the top layer/only layer is reversed.

Now let’s have some unknowns to deal with. The age of the board, type of photoresist, board temperature, tube strengths, paper thickness etc. You can do some tests on scrap pieces of board at this stage…in fact I recommend it initially rather than ruin your larger piece of PCB.

I clean the glass with a weak bleach solution and polish dry. Place the artwork (toner up and photo sensitive side down) onto the glass, place the thick card on top and then place a weight on that. I’ve used a container of fabric conditioner as I don’t know what else it would be useful for.

Now for my board variety and tube strength I find that 4 minutes is about right to soften the photoresist. When the time is up I quickly take the board and immerse it into a weak but fresh and warm solution of Sodium Hydroxide. (About 1 teaspoon into 1 L of water). This is where things may go wrong and where many people prefer to buy the proper developer solution but remember this is PCBs on a tight budget, so we’ll keep trying.

With a gloved hand, immerse the PCB into the solution and use a cheap old, soft bristled brush to wipe the copper. You should start to see the photo resist floating off where the UV light has attacked it. If the solution is too strong or hot there will be a few seconds between this happening and the rest of the photoresist being removed. If this happens that board is scrap (save it as you can coat it with photoresist yourself at a later date). If the solution is too weak or cold this can take a long time. There is also something else that can happen and that is that it looks like the photoresist has been removed but in reality there is still a very thin protective layer over the areas you want to remove the copper from….at this stage it is really hard to see if this is the case.

Once this is done I drill a hanging hole into one of the waste areas of the board and use a stainless steel brickwork wall tie/any other stainless wire to suspend the PCB into some hot Ferric Chloride solution. I heat the FeCl3 in a square Ikea vase into which I have placed an aquarium heater tube and an aquarium air pump. I also keep moving the board. I do this outside as the fumes from hot FeCl3 will seriously attach anything in the shed/kitchen and are also probably not good for health. I keep the whole lot in an old crate to catch the inevitable splashes and drips.


The Dirty Part – wear gloves or get yellow fingers !

I lower the board in and almost immediately take it out for a look. If the photoresist was successfully removed, those areas will be taking on a dull pink colour almost immediately. (If this isn’t the case theer may be a very thin-film of photoresist left behind in these areas. Wash the board and try dipping it in the NaOH for a bit longer/brushing while doing so). If the board was developed properly about 5 minutes in the FeCl3 and the board will be done, rinse it in a plastic bowl of fresh water to stop any chemical reactions.

Job done !


The SOIC PIC15F1509 for my Christmas Starburst

Double Sided Boards

I can also make these cheaply and of good quality for home projects. Using Eagle PCB software I print the top layer inverted and the bottom layer as normal. I do two images of each side and again oil the paper. When dry I cut the images out and double them up to make a better darker image. I then align the two sides and staple them together to make a ‘pocket’. After cutting the board I usually drill the hanging hole while the plastic film still protects the board from getting scratched (not as important when doing single side).

When ready I remove the photoresist protective film and place the PCB into the artwork pocket. I use a small piece of tape to secure the PCB into the pocket. I expose one side to the UV for ~4 minutes and then carefully flip the package and expose the other side.

Then develop and etch as before.

Sometime one side is really good and the other isn’t – this is a bit disappointing and often down to the developer stage rather than the etching. The edges of the board etch quicker than the centres so fine detail can sometimes be lost around the edge.

Most importantly – keep trying, make notes and perfect your technique based on what you can use cheaply.

A Star is Born

An LED Christmas star that is.

What Went OK ?

Following on from my previous post on christmas lights for 2016 this update should detail what I actually made. I wanted to make a light framework to mount the LED strips onto and found a bag full of old fibreglass tent poles – ideal as they are strong and lightweight. I made a hub from two discs of plywood glued together and then drilled 8x holes onto the sides for the poles.

I added some car body filler to strengthen the joints and to waterproof the plywood. The hubs were primed grey and then painted with some black gloss paint.

The WS2812 RGB LEDs came as a panel from Ebay. I had to break them apart and solder individual wires between them. I made a simple jig to hold the LEDs face down (small drill holes and a blob of Bluetack). Each of the 8 arms required a strip of 10x LEDs….each strip required 27x small pieces of wire….each cut, bared back, tinned and soldered into place. I soon doubted my I had decided to do this.

After about 5 out of the 8 strips I was managing to get the process down to about 30 minutes per strip.

Once I had all eight strips I tested them (and corrected a few soldering bridges). By now I had decided against the tubing method of protecting the lights from rain – the PVC tube was quite expensive and I wasn’t sure how I’d manage to pull the strip into place. I decided to mount the strips to the frame and use silicone sealant to waterproof the whole unit.

I put generous blobs of clear sealant on the back of each LED on a single strip and then used 100mmx2.5mm cable ties to secure the strip to one of the frame’s arms. I then added more silicone around the LED to protect the wiring and the WS2812 LED. I had also planned to glue small pieces of 10mm hot melt glue stick to each LED to act as a diffuser – but I trialed out a spare WS2812 and a blob of clear silicone. That worked really well so I added a nice silicone ‘iced gem’ to the top of each LED (see below if you don’t know what an Iced Gem is). 2p3dh3c

Nearly there now, I took a short video of a single starburst unit which you can watch here on my Youtube uploads.

I printed off my PCB design this morning at my local library – they have a well maintained laser printer and charge me 10p a sheet. The design is currently drying after being rubbed with vegetable oil ! I’ll try to expand on that in my next post.


I’ve got some electrical boxes; sanded them lightly and painted them black to hold the PCB. The whole unit should be self-contained and require just 5v to operate.

What Went Wrong ?

After sealing the WS2812 and any bare wires with clear silicone I let that dry. I then found some black silicone and thought I’d give it a second coat for added robustness. A few hours later and the black hadn’t dried….maybe it was the damp/cold evening drawing in so I brought the star inside last night. This morning – the black silicone was still uncured.

Now I had a dilemma on what to do – scrap the black silicone off ? Use a solvent to remove all traces ? That could damage the PVC cables, the clear silicone ? Use something to ‘set’ the black silicone ? Below is a test card where I tried out various household chemicals on a sample of the black silicone to see what dissolved it or made it cure. Hours later they were all fairly similar and still gungy.


So onto plan B, I daubed more clear silicone over the black, wiped it around and hopefully when that has set it will encase the bad layer. Seems OK at the moment.

Lesson learnt – old silicone can also go bad even if it is still liquid. The clear sealant was one that released acetic acid during the cure. The black silicone was a normal cure with no acetic acid – I think this tube had been affected by the cold of last winter.

Please get in contact if you have any questions on this build.

Last Year’s Christmas Star (2015)

I also want to share with you one of the decorations I made for last Christmas. It consists of two sets of 8x tubes of LED lights (bought from Ebay as Meteor Shower). They are meant to be hung in a tree as per the photo below, and for the Xmas before, that is exactly what I did.


Last year I mounted the tubes radially around an old bicycle wheel. After initially powering up with 5v I was pleasantly surprised as they started to run out of sync and produce a very effective starburst pattern….something that gave me ideas to improve on this year see Christmas 2016

I’ve also added a Youtube video here so you can see what it looks like.


The lights cost be about £12 UK per set back in 2014. One tube didn’t work and the Ebay seller gave me a good discount for that item. The line behind them is just the copper central heating pipes to my radiator.



Christmas Lights 2016

img_20161016_165807391Last year I mounted two strings of “LED Meteor Shower” (total 16x tubes) in a radial fashion on an old bicycle wheel. The effect as the individual tubes went out of sync was quite interesting and gave a nice firework/star burst pattern effect.

This year I have plans to make something similar but using Neopixels/WS2812 RGB LEDs.

I’ve made a test string consisting of 10x WS2812 LEDs, this will be one arm of the new star effect and I’d parallel up another 5-7 strings to make 6/8 in total (depending upon what is in the bank account).

I didn’t want to use an Arduino/Raspberry Pi but still wanted something that was free running – but with a degree of randomness. Hopefully with 4-5 of these stars ir would look quite good. I had planned to use FPGA/CPLD and design a WS2812 driver in VHDL but couldn’t easily find a component/development solution to meet my budget. Instead I looked again at using the Microchip PIC range to drive the WS2812 directly. Bit-Banging was out of the question as I wanted an intelligent product that had processing time available to calculate the patterns. I then found a Microchip Tec sheet AN1606 that detailed using the Configurable Logic Cells (CLCs) of their newer PIC devices. That worked well and was fairly easy to implement into a PIC16F1509 DIP device (running at 16MHz and programmed in C using the XC8 compiler).

However, delays in processing (the C overheads) caused some issues with stability. I instead decided to write the entire program in assembler. This has gone well and I now have a single strand running. There is a feed in pattern that is used to generate the LED colour/brightness in the centre, this pattern is stepped through in time. Each LED colour is automatically passed to the next LED but after it is modified to ensure it fades (just like a firework would). The time delay as the pattern steps through is also slowed as time progresses to give a more realistic slow down.

Version 1.02 can be found on my Github page Github StarBurst

I now need to:

  • Design a PCB
  • Buy components (PIC, Neopixels)
  • Buy some clear tubing to mount the WS2812 into
  • Consider controlling them with RF (868MHz) – in a similar way to the Xyloband

I’ll keep posting and will upload code/diagrams etc as I generate them. Please let me know if you enjoyed reading or wish me to explain anything further.

Starting to Think About Christmas Lights

[My Xyloband Tx circuit is busily churning away through some possible byte combinations and I’ve placed the Xyloband in from of me. If it flashes I can stop the code and see what values were being sent. As yet nothing….so while that is working away..]

I’m starting to think about my Christmas light display. Last year I built my own UDP to 8x RGB channel controller that worked off the Vixen3 software and a Raspberry Pi. This year I want to use some of the WS2812 LEDs as addressable pixels. Although the Arduino community seem to have the WS2812 RGB LEDs under control in terms of library functions there is not so much available for those programming microcontrollers like the PIC range.

There are various articles on the WS2812 but basically the datasheet is lacking detail. The protocol requires 24x bits on a NRZ line to drive a single LED and these can be daisy-chained to longer arrays. So 10x LEDs would require the serial Tx of 240x bits. The line timing is important and requires the high pulse to vary in length between 0.35us and 0.9us signifying ‘0’ and ‘1’ respectively.

Another idea was to build the entire ‘fast logic’ in an FPGA and I actually designed the circuit last year but didn’t have a suitable FPGA programmer nor could I afford one.

This year I decided to look at the specs of some of the latest PIC Microcontrollers that Microchip very kindly provided samples of to me. The PIC16F18346 has immediately caught my eye. It has an internal module known as the “Data Signal Modulator”. It looks like this might allow me to easily create the WS2812 drive signals with very little microcontroller overhead – very beneficial as the microcontroller can get on and do other stuff.

I’ll let you know how it goes when I get some code up and running [or back to the Xyloband if it flashes !]