26 Aug

Wireless RGB Pixels

Taking a break from the hanging v-plotter we decided to work on a project that has been discussed for a long while now… The RGB Wireless Pixel.

The idea is these are self contained full colour lights that can be placed anywhere within radio range and controlled from a master. That is, we command the lights all together or individually to change colour or brightness. With that we can create a pop-up light show that could potentially be synced to music or react to passers by. It may even be possible to put them into the windows of a large building and create a massive display… all without wires!

IMG_20160714_203542179

Prototype Wireless RGB Pixels.

We currently have a working prototype based on an ATtiny85 microcontroller, an NRF24L01+ radio module that you can find on ebay for ~£1 each, a WS-2811/2812 programmable LED and some extra passive components. The circuit diagram is available on github and there are more details on our wiki.

We are calling this version 1. The idea is to get people to design their own version of the hardware for this and get PCBs (Printed Circuit Boards) manufactured. To that end we have been running kicad tutorials (kicad is an open source PCB design program) which can be supplemented with the excellent ‘Getting to Blinky‘ youtube tutorials by ‘Contextual Electronics’. Check out our meetups page for details of what we will be doing at future meetings.

Wireless RGB Pixel_ping_pong_smt

Example Wireless RGB Pixel PCB deisgn with KiCad to fit inside a ping pong ball.

When everyones PCBs are deisgned and manufactured we will then assemble, program and test them and eventually, design enclosures and at some point, if everything works, put on a few light shows somewhere!

Right now the software for v1 is pretty basic and more or less a proof of concept. I hope the software will improve as people build their own Wireless RGB Pixels and start programming them! The PoC code is also on github.

Future plans for the project  are already being discussed for v2 which will allow the use of sensors in each Wireless RGB Pixel as well as an upgraded micro-controller to allow for these and other features.

03 Jun

Polargraph/Eggbot/Spherebot Electronics v2.1

I’ve somehow managed to skip from v1 directly to v2.1 with the electronics for my Polargraph.

drv8825_arduino_pro_pcb

With this version i’ve fixed the mistakes and gotchas from v1, rearranged the component layout and changed the Arduino pins used to make routing the PCB easier (no vias!). I’ve also added a connector for an SPI SD card module. I don’t know if I will be able to use the SD card as the current firmware for ATMega328 based Arduinos is pretty much maxed out as it is, but I want to have a go at understanding the firmware and seeing if I can make it any smaller. And if I can then it is better to have a connector on the board ready, than have to add it later.

I also considered adding a connector for an SPI LCD but that would be really optimistic that I can make room for all the required libs.

After blowing up several Arduino nanos that seem to have a problem coping with external power and USB power at the same time, I’ve added a jumper to enable/disable external power to the Arduino. With external power disconnected the Arduino is powered via USB.

Boards are being manufactured by iTead using their great PCB prototyping service.

I’m also working on a better Polargraph gondola that piviots around the pen and has a quick change pen holder so I can easily do colour changes. I’ll post an update when its all done.

13 Mar

Pycupi v-plotter control software

MakeBmth held its regular monthly meeting at Eagle Labs Bournemouth on Thursday 10th March 2016. We plan to meet there once a month (the second regular monthly meeting will be held at the Uni or under the new Hilton Hotel – check the meetup group or forum for details).

IMG_7035

We spent the evening learning about Brians Python port/rewrite of Gocupi, called Pycupi.

Pycupi (and Gocupi) is a cut down firmware that implements a command queue, stepper motor and servo control functions. Along with a control application written in Python (or ‘Go’ in Gocupis case). The who thing is meant to be run on a Raspberry Pi (though you could in theory run it on any computer).

IMG_7028

Pycupi does the image processing on the Raspberry Pi and can (currently) generate simulations (jpeg images) of the expected output or it can plot that using a suitable stepper controller. The firmware in the Pycupi github repository is currently configured to work with my Eggbot/Polargraph electronics.

IMG_7034

We learned about the multiple co-ordinate systems that are working together to produce a drawing.

Native: The co-ordinate system that works in motor steps.

System: The co-ordinate system that Pycupi maps to the native co-ordinates.

Image: The drawing co-ordinates which defines the drawing area.

We looked at how the native co-ordinates are not Polar (Angle and distance) but is a position triangulated based on the length of the two motor strings or chains. To calculate the position we need to know the machine width and how many mm of string or chain each step of the motor represents and finally a we need a reference or starting point (home).

coordinates

A bit of trigonometry gives us the lengths of the strings/chains for a given position.

IMG_7037

We looked at the different renderers currently avilalbe in Pycupi.

Spiral Arc: Renders an image using tiny spirals of varying size & density and the whole thing plots in on an Arc path from a corner (Defaults to top left (NW)).

renderSpiralArc(filename, x, y, image_width, pixel_size, drawing_object)

  • filename = the image to render (jpg/png/bmp)
  • x = the horizontal position of the top left of the image (bottom left if rotated)
  • y = the vertical position of the top left of the image (bottom left if rotated)
  • image_width = how many pixels wide the render should be
  • pixel_size = how big (in pixels) the spiral elements will be (bigger = less detail)
  • drawing_object = the python object you created to represent the machine

Norwegian Spiral: Renders an image using amplitude modulation along a spiral path from the centre of the image.

renderNorwegianSpiral(filename, x, y,image_width, density, maximum_density,pixel_size, drawing_object)

  • filename = the image to render (jpg/png/bmp)
  • x = the horizontal position of the top left of the image (bottom left if rotated)
  • y = the vertical position of the top left of the image (bottom left if rotated)
  • image_width = how many pixels wide the render should be
  • density = how densely packed the pixels will be
  • maximum_density = pixels will never be more densely packed than this (Need clarification on how these relate)
  • pixel_size = how big (in pixels) the spiral elements will be (bigger = less detail)
  • drawing_object = the python object you created to represent the machine

SVG: Draws vector images. Currently implements paths but not stroke or fill. Will cope with most elements of the SVG specification so it will happily draw curved paths.

renderSVG(filename, x, y, image_width, p)

  • filename = the vector image to render (svg)
  • x = the horizontal position of the top left of the image (bottom left if rotated)
  • y = the vertical position of the top left of the image (bottom left if rotated)
  • image_width = how many pixels wide the render should be
  • drawing_object = the python object you created to represent the machine

IMG_7032

A Kandinsky part way through rendering with multiple colour separations.

IMG_7029

The machine on the left is running Pycupi and has an example vector plot bottom right. The vector on the machine on the right was plotted with the Polargraph.co.uk software.

 

19 Mar

New control electronics for Pycupi

Here are two new PCBs for controlling a v-plotter. These were designed with Pycupi in mind but should be adaptable for other drawing machines.

The first is an add-on board for a Raspberry Pi 2 or 3.

pi-2-stepper-board_frontpi-2-stepper-board_back

The second is a kinda mini motherboard for a Pi Zero (the Pi Zero plugs into this board).

pi-zero-stepper-board_frontpi-zero-stepper-board_back

Both boards are currently untested and will require additional software modifications to work (either modifying the Linux install to free up the serial port or to enable comms over I2C).

A caveat with the Pi Zero board… we haven’t yet run Pycupi on a Pi Zero. It should work, but it might be slow rendering jpg representations of plots.

Both boards also supply power to their respective Raspberry Pis via the 12v DC connector using a DC to DC converter module.

Also the Arduinos on these boards are 3.3v and run at 8MHz so there may be timing issues to address.

I’ve included a ‘Master’ power switch that kills power to the Pi/Steppers and Arduino. I’ve also included a single push button that doesn’t have any specific purpose yet other than it might be useful as a shutdown button for the Pi. Or it could potentially be used as a pause button to pause a drawing.

Before getting PCBs made, I need to wait for samples of the additional components, print off a paper copy of the PCB and test for fit. If everything looks good i’ll get some sample boards manufactured and post an update.

28 Nov

Minions Operation – Finished!

The Minions Operation with Minions audio samples is finally finished. Finishing a project completely (like making enclosures and making sure things are nicely finished) is really time consuming. Still, its done now and in time for Christmas. Hopefully the Nieces and Nephews will find it amusing because I have endured hours of Minions samples doing this…

So i’ve gone from this:

IMG_20151021_194450

To this:

IMG_20151115_193011

With the electronics tucked neatly away in the 3d printed orange box.

And from the other side:

IMG_20151115_192359

Lid off, electronics exposed. Holes drilled for speaker which was glued in place with epoxy.

IMG_20151115_191527

Electronics up close:

IMG_20151117_213401

I’ve replaced the original light bulb with an LED (fore ground), the motor with a mobile phone buzzer motor (the little metal disk with the black top, middle left), a prototyping board with the Arduino Pro clone (middle) and WT588D audio board (top) and some resistors, a transistor, diode and cap.

Originally I had intended to use the buzzer motor that came with the game. It all worked perfectly when running from a power supply but as soon as I tried to run it all from 3 x AA batteries, the Arduino would reset as soon as the motor was triggered.

Testing the electronics worked (little green speaker was too quiet and was replaced with 0.5w 8ohm speaker):

IMG_20151104_212741

I added the capacitor to try and smooth out the current, but it wasn’t enough. I tried reducing the current through the transistor by increasing the resistance of the resistors feeding the transistor base, but that didn’t work until the resistance was enough to stop the motor powering up. In the end I swapped the original buzzer for a tiny version from a mobile phone (these can be found for less than a quid on ebay) and that worked happily from battery power.

More recently I have had problems with the WT588D not working after power on. It takes a few power-off/power-on attempts before it will start playing samples. The Arduino is working because the buzzer and the LED work. I plan to add a power on delay and then play a sample to confirm it is working. It should be possible to have the Arduino detect if a sample is playing by reading the ‘busy’ signal from the WT588D and resetting it if not detected during a startup routine.

Code is available from github

24 Jul

Thread Screen – cotton reel colour screen!

threadscreen1

Wired has an interesting article about the ‘Thread Screen’, a display made of hundreds of cotton reels, each with a multicolour band of material running over it, controlled by a stepper motor. The screen is 80 x 80 reel resolution and pictured above is just one of the 100 modules that go together to make this awesome screen. It was put together by creative agency ‘Breakfast‘. How the hell do you get to work on such cool projects?!? And nice touch on the cotton reel label detailing!

(Note: I was trying to find a ‘press’ image but couldn’t so if anyone objects to the use of the above image, just get in touch and we will remove it)

The screen is on display at a clothing store called ‘Forever 21’ in New York and will display select Instagram pictures tagged with #F21ThreadScreen and for the next week you can watch a live 24/7 stream of the display on youtube

04 Aug

Smartphone + CD case = Hologram

Wired have an article on creating a neat hologram effect with some bits of plastic cut from a CD case.

This is the video (by Mrwhosetheboss) linked to in the Wired article.

Anyone fancy doing this as a MakeBmth workshop?

25 May

Watering system repair

Some time ago I picked up a Draper automatic watering timer for the greenhouse. The idea was to connect it to the water butt and a micro drip watering system, basically a set of small plastic fittings connected with tubes. There are different types of fittings but the ones that do the business have very small holes, the idea is to place these close to each plant so the water goes to the roots and is not wasted elsewhere and left to evaporate. The timer opens or and closes a valve at preset times. I managed to get this working reasonably well, although I wouldn’t recommend this type of watering system unless you have a decent water pressure, it clogs far to easily with low pressure.

Watering Timer

Watering Timer

Setting it up again for year 2, the timer didn’t work, displays and settings were all okay but the valve didn’t move. I took it apart to do some fault finding. I could get the valve motor to run by hooking it directly to the supply, the micro switch used as a position sensor was fine, so it was down to the electronics. Most of the work was done by an embedded micro controller, with just a handful of supporting components. It fairly easy to trace the circuit and figure out what was going on. the motor was switched by a pair of bipolar transistors, the main ‘power’ transistor was faulty. This was a surface mount pcb and the transistors were SO23 packages, very small devices, especially when I need to use glasses. In my spares box I had a selection of through hole mounted transistors, better for my eyesight but not so easy to use to replace a surface mount component. However I struggled on with an oversize soldering iron and a cheap magnifying glass and managed to get the thing fitted. All good for a couple of years, until now. Once again the timer had failed, although this time the motor was on permanently. I stripped it down again and my replacement transistor was blown. I decided to check the datasheet this time and realized that my replacement, despite being physically much bigger than the original, was rated at 100mA collector current, a cheap DC motor on 5V was likely to exceed that, so I’d been lucky it had lasted so long. I’ve now replaced it with a more suitable device, in an even bigger package. Hoping that will be the last time I need to do this but a good reminder to read the specs when selecting components.

Watering Timer

The top was glued in place but came away with a little light persuasion

Watering Timer replacement transistor

Replacement transistor, somewhat larger than the original.

11 Apr

Oscilloscope fun

Its amazing what some people do with their spare time… and this youtube video is a great example. The display is the result of plotting the left and right audio signals on a screen as x and y coordinates.

I thought I would have a go with an analogue scope in x/y mode…

There is a fair bit of noise and ringing on my scope which is likely due to the cheap probes (no decoupling).

16 May

Polargraph

A while ago I tried building a Polargraph at a hacker event. It kinda worked… but I ran out of time before I was able to get my head around the calibration. Since then the Ardunio Uno, motor driver shield and motors and sat in the bottom of a drawer, so a few months ago I decided it was time to finish this project properly.IMG_20150516_105012

After a lot of faffing with a related project (Eggbot/Shperebot) and the same electronics setup, I decided to bin the Arduino shield and switch to two stepstick motor drivers and assembled them on a mini breadboard stuck on top of the Arduino Uno.

This new setup was a massive improvement so I decided to design a PCB for it.

IMG_20150509_163916

Version 1 works but has a few mistakes and gotchas that require a few hacks. I’ll fix these issues in the v2 PCB. The PCB is sort of a mini motherboard that takes two stepper drivers (DRV8255 in the picture) and an Arduino Nano clone (using the CH430G USB to serial chip) and has connectors for the stepper motors, end stops, a servo and power to make wiring up as easy as possible.

With that done, I was able to concentrate on putting together a Polargraph.

There are plenty of Polargraph components on Thingiverse (including my first attempt at the hacker event), but most of them didn’t fit the bill or seem a bit heavy on plastics, so I designed my own motor mounts, pulley wheels, Gondola and feet to suit the parts available from Homebase (Chip board, ball chain and a 25mm dia broom handle cut up to make the feet).

IMG_20150509_163956

IMG_20150509_163828

I’ll upload the models to thingiverse once I’m happy with them. Will also upload the spherebot and polargraph firmwares (tweaked for my PCB) to github.

IMG_20150516_104914

IMG_20150516_104940

 

It has taken a while to figure out the shading calibration, but it turns out it is reasonably simple. The Polargraph controller software has a “Test pen wdiths” feature that draws 11 pixels of varying density. In my case i’m using a 0.4mm pen, so I told the controller to start as if it had a pen 0.1mm thick and increase the ‘thickness’ by 0.1mm for each pixel. This has the effect of drawing lighter and lighter pixels. I then picked the darkest pixel that wasn’t completely solid (0.3mm), told the Polargraph software that my pen wdith was 0.3mm and the square wave render of Salvador Dali is the result. (The really dark section top left is where I started this print with the pen width of 0.1mm. It wasn’t showing any difference between the dark and the really dark pixels so I canceled the print and ran this print over the top).