Cheerlights on the Raspberry Pi Pico

It has been a long time since I connected with the Cheerlights system, and as we’re heading towards the winter season and Christmas, it seemed appropriate to see what could be done with a WiFi connected Raspberry Pi Pico. Cheerlights is connected to Twitter, and anyone from around the world can send a Twitter message which contains a colour name. Any device can then access this and use it in a number of ways. The current colour is shown on this webpage.

Once again, I’m working with the MicroBlocks programming language and I had noticed that they have a library for connecting to WiFi as well as functions for setting up an HTTP client.

Once the WiFi connection is made, it regularly reads the colour from this link into a variable and then uses that to light up pixels n a NeoPixel grid. To make it more interesting, I flash a random pixel at 100% brightness and then revert to 20% brightness. The current colour is read every 10 seconds or so. I’ve put a video on Twitter so that you can see its sparkly goodness.

The latest version of my program is shown below, and there is a download link at the end of this article.

The Cheerlights program can be downloaded from this link (right click and save to your own computer):

Advertisement

Pi-Hut Christmas Tree

IMG_20171226_201348727_HDR[1]My son was fortunate enough to receive a Pi-Hut Christmas tree for an early Christmas present. He’s only eight, so I wanted to supervise his soldering, but I needn’t have worried – the only problem encountered was when I fitted a missing LED, fitted it to the wrong side, removed it and broke the leg. Fortunately, I had a spare lying around in the shed so it was an easy fix.

The Christmas tree is a lovely kit. Gold plating means that the soldering is effortless and the edges have also been guilded for a bit of luxury. The whole board sits rather neatly on top of a Pi Zero W. I’ve been logging in remotely with SSH, but a development I’d like to try is to use BlueDot to remote control it from a phone.

There is a set of instructions for installing the gpiozero software, although I’m unfamiliar with this – I’ve always used rpi.GPIO in the past with good success. One thing I found missing was a map of all of the LEDs. They’re all numbered, but that doesn’t relate to anything on the pin connections. Mapping the outputs (BCM or Board number) was a bit of a mission but I think I’ve succeeded.

LED

Output (BCM)

Output (Pin)

Star 2 3
1 4 7
2 15 10
3 13 33
4 21 40
5 25 22
6 8 24
7 5 29
8 10 15
9 16 36
10 17 11
11 27 13
12 26 37
13 24 18
14 9 21
15 12 32
16 6 31
17 20 38
18 19 35
19 14 8
20 18 12
21 11 23
22 7 26
23 23 16

24

22

15

The next step I’d like to try is to run this from ScratchGPIO, possibly using SID as a starter so that I can run Scratch on a laptop and transfer it over later. For the meantime, I’ve just got a couple of alternative python programs to play with.

All-in-all, this has been a lovely kit that uses loads of outputs on the PiZero. Soldering is effortless and programming with the standard program supplied was easy. One day I’ll read the docs for GPIOzero, but for now, I’ll be teaching with Scratch.

Merry Christmas and a Happy 2018 to everyone!

 

 

 

 

WS2812B LED ring driven from a Pi Zero

I’ve already written about using WS2812B RGB LEDs with the Pixel Cushion, but seeing a set of concentric circle PCBs available got me thinking. I originally used these a sort-of Superhero badge as part of a fancy-dress outfit, but they were crudely mounted onto a plastic disk with cable ties.

A bit of work with 3d software and a 3d printer produced this.

I’ve used a servo extension lead to power and control the LEDs. They’re all daisy-chained as before, starting from one of the outside LEDs and finishing on the final LED in the centre. In total, there are 61 LEDs which means that if they were run at full power, the load on the battery would be rather high (60mA per LED * 61 LEDs = 3.66 Amps). However, I’m limiting the maximum value for each LED so that they’re dimmer. An added advantage is that I can still see if I look directly at the LEDs. The overall effect is rather striking, although the camera used in the video above struggled to focus (perhaps macro might have been better) but it’s easy to see the exposure control kicking in as more LEDs are lit.

The Raspberry Pi power connections are fed directly into the GPIO connector, bypassing a somewhat delicate micro-usb port as well as ensuring that large currents for the LEDs are going to the adjacent 5v pin which is then fed out to the pixel rings.

Files for the clip-together case can be found and 3d printed from the: YouMagine Website

I suppose it would be prudent to add some sort of switch to initiate a shutdown routine, but for the moment I’ve been just pulling the plug.

Construction Brick Scratch Interface Device

SID-Lego

Lego compatible Scratch Interface Device

I’ve been thinking about this for a while. It’s all very well having a battery pack connected to some motors and LEDs with Lego, but what about making it all controllable remotely from Scratch running on a laptop or desktop?

In previous articles, I’ve looked at using the Raspberry Pi and the Lego firmly next to each other, with a wireless keyboard and mouse and that oh-so-bulky monitor cable.

Then I figured out what the implications of “Scratch Interface Device” meant when I spotted it on CympleCy’s website.

Having bundled the Raspberry Pi into the case and added a set of LEDs and switches, it was a simple job to install SID and get working. The last four digits of the Raspberry Pi are used to identify it, and these must be entered on to the PC (Or Mac, if you have one). Once this is done, starting Scratch and enabling Remote Sensor Connections allows the laptop to control the Raspberry Pi without having the bulky connections. Now it’s possible to seriously integrate Lego and intelligent control.

ChristmasLights (4)

ScratchCPIO program to run the lighting

The whole setup now runs faster as the Scratch project runs on a PC, while the Raspberry Pi handles the GPIO control remotely. I haven’t yet tried all of the functions, but all those that I’ve tried have been supported. My PiBlox case has space for the Raspberry Pi camera, so running “Broadcast Photo” causes a photograph to be taken and stored on the Pi’s SD card. At the moment, it’s directed to /home/root/photos but maybe that’s something I’ve done wrong – ScratchGPIO running directly sends the files to /home/pi/photos which is a little more convenient (more later on why…).

Now… I could have stopped here, but inspiration has now kicked in. At the time of these early experiments, I was using an external battery pack and then…

…the Raspberry Pi Zero was released!

And the reason I’m now thinking of experimenting further?

Proposed Lego compatible Scratch Interface Device:

  • PiBlox case
  • Raspberry Pi Zero… when I can get hold of one.
  • WiFi dongle – perhaps a hacked and built-in version?
  • Li-Ion battery and 5v converter/charger
  • Connector setup to suit 0.1 connectors easily at the side of the case. Digital (and analogue?) Inputs, Motors and Servos.
  • Motor and GPIO controller (Explorer pHAT or maybe PiRoCon v2 depending on the size)
  • Mini amplifier PCB and small speaker.

For now, here’s a video of some of the work in action.

Lego and Raspberry Pi controlled missile launcher

Scratch program

Scratch program for the Missile Launcher

My son has had his eye on these things called “spring shooters” for a while… and so have I. I picked up a few from BrickLink and managed to incorporate them into a little experiment I wanted to try.

This little build uses four spring shooters and two servos controlled by the Raspberry Pi. The program, written in Scratch and interfaced using CympleCy’s ScratchGPIO7 allows rapid firing of the spring shooters by dislodging each in turn. The servo has been set to nudge the end of the dart and then return to the centre position so that the dart isn’t gripped by the actuator. This seems to work well, although I had a few problems with not initially allowing enough time for the servo to travel to its full extent.
The program allows control of the panning with the arrow keys, as well as individual control of the darts by pressing 1,2,3 or 4. Alternatively, press [f] – “fire!” for a rapid salvo directed at your target. I’ve also added a couple of warning LEDs to the base. Green is safe… and Red Flashing warns people to duck. The next step is to add a PIR sensor and let Scratch handle our security needs…

I’m sure that those with experience of OpenCV will use it to track targets and deal with them automatically.

Lego – Raspberry Pi interface

Lego interface

Lego interface – a L298 H-bridge motor controller with a servo buffer board.

Here’s the current version of my Lego interface for the Raspberry Pi. It uses an L298 H-bridge motor controller (covered in a previous post) combined with another of my 74HC541 buffers to protect the Raspberry Pi when connecting LEDs and servos.

The whole thing runs from a 5v plug-top power supply which is adequate for driving the 4.5v Lego motors along with a bunch of servos.

There’s a bit of scope here for making the whole thing more compact but that’s another step once I’m happy with the design. I need to add input connections so that the Lego creations can be fully interactive.

It would be also interesting to see if I could make this into a Lego case, perhaps with a bunch of plates combined with 1 x 4 x 3 Panels.

Programming the Egg drawing robot

Scratch program for drawing squares on the egg.

The program to draw a grid of squares on the egg.

In order to program the egg drawing robot, a simple pair of loops are required. One draws the horizontal lines and the other is responsible for the vertical ones.

In this case, I’ve simply laid out a loop that:

  • Move to the left
  • Drop the pen
  • Move to the right
  • Lift the pen
  • Rotate the egg upwards slightly
  • Repeat ten times

Followed by:

  • Rotate the egg upwards to the start position
  • Move to the left
  • Drop the pen
  • Rotate the egg downwards
  • Lift the pen
  • Move the pen to the right slightly
  • Repeat ten times

In order to make the servos move over their required range, it was necessary to find out what the extremities of movement were – for example, how far can the pen be moved from left to right. This then gave a range of values. I subtracted the smaller value from the larger value. Then I needed to find the offset – the starting value. I then used a scale value to make my servos now respond to a range of 0 to 100. A bit difficult to describe, but a quick visit from the formula for a straight line: y = mx+c

Overall, the grid is fairly simple but it’s ideal for demonstrating control over movements, the resolution of the servos and the pen and just showing what can be done with some Lego and some servos.

Next up… hopefully bitmap conversion!

Egg drawing robot

I quickly knocked together this Egg drawing robot after seeing the “EggBot” somewhere online. I’ve been experimenting with building a Lego motor/switch/servo Raspberry Pi controller and it seemed like something that might demonstrate some capabilities of the various parts needed.

There are three servos: Pen Lift, Rotate egg, Side-to-side for the pen.

The servos are controlled using ScratchGPIO and to make the range of the servo match my coordinates I needed to dust off my O-level maths for the straight-line formula: y = mx + c

Ultimately, the project was a minor success. I’ve learnt that the egg needs to have warmed to room temperature otherwise the condensation makes it too slippery to grip. I also needed a sharper pen – I seem to have picked a “bluntie”.

Construction of the ScratchGPIO Dalek – Invasion part 2

Here’s the second installment of the ScratchGPIO Dalek – the first part can be found here. My apologies for the poor quality of the photos. Our camera was in use elsewhere so I only had my mobile. I’ve discovered that it can’t cope with low light and close up shots. Perhaps I should have used the Raspberry Pi camera?

MostOfTheBitsHere’s what I’m starting with. I’ve got a servo, some LEDs (red and blue), Chromed LED bezels and a few bits of plastic cut on a CAM router. The Dalek is a plastic container originally for bubble bath,but having removed the bottle it seems that there’s plenty of space for a circuit board, a servo and some odd bits of wiring.

EyeballThe eyeball LED is made from a piece of chromed brass tubing removed from an old telescopic aerial. The LED is soldered to the end of stranded wire and carefully sealed with hot glue. A clip-on LED bezel is used to complete the effect and makes for a realistic eyeball. I would have liked to add on some disks half-way along the stalk, but I didn’t really have time and perhaps it can be easily overlooked?

AssemblingTheHead
The head lights are made from blue LEDs soldered to the end of stranded wire and then pushed into some chrome LED bezels that were in my parts stock. At first, the LEDs were difficult to see as they are so directional and the bezel tended to shield the light coming out sideways. The solution? Fill the bezel with hot glue (in fact, overfill it) and then let it cool without disturbance. This created a slightly domed translucent light which can be seen from all angles. For such a simple solution, I’ve been really impressed with the result. And I didn’t burn my fingers. The domed lights are then pushed into the head. The slightly rubbery nature of the head means that I’m unlikely to need to put the nuts on the other side of the bezels. I don’t think I’d succeed either!

BufferboardThe bufferboard is one of my own designs (more information here) that I produced a while ago. I use it as I managed to kill a couple of Raspberry Pi computers while experimenting with servos. I’m not sure whether it’s a faulty servo that did it, but ever since I’ve been quite nervous to work without this board in the way. It also level shifts the outputs to 5v instead of 3.3v, making the LEDs (particularly the blue LEDs) able to run at their full brightness. Having said all that, I’ve used a 330Ω resistor in series.

ServoWheelThis part is a simple three-spoke wheel that fits on top of the servo horn. The outside diameter has been chosen to fit the inside hole under the dalek head. The three spokes gives plenty of space for the wires to pass upwards from the base. I had pondered how to get the servo horn to stay attached as I’ve found hot-glue to be a bit unreliable on these and there wasn’t really room for the M2.5 screws that I usually prefer. Cable ties to the rescue! They hold well, especially as I filed a few little slots in the servo horn. Simple and effective.

DalekbaseFitting the servo up inside the base was a bit more tricky. There are quite a few obstructions up inside the base which have to be taken care of. In the end, I cut out the top section carefully and then used added a foamed pvc plate which carries the servo. After nearly exhausting my supply of M3 screws, the servo was mounted and the horn fitted.

TwoPartsOfDalekHere are the final two parts ready for fitting together. The cables will pass down through the wheel into the base where they are then connected to the buffer board with 330Ω resistors. The servo is also connected. I ran a little test routine from Scratch to ensure that the servo can reach both extremes and also find the centre. Once this was done, a few blobs of hot glue ensures that the head and the wheel are joined.

Coming up… programing the Dalek with ScratchGPIO (and Python eventually).

Invasion of the ScratchGPIO Dalek

ScratchGPIO controlled Dalek

The finished Dalek – Blue and Red LEDs with a standard servo

I found a Dalek model in the local recycling centre and, along with a few other items, was able to take it home in return for a few coins. Disassembling it that evening revealed that it was a very elaborate bottle holder, and I’m guessing that the original contents were something like shampoo. Wow… all of that detail for a simple product.

It didn’t take me long to realise that it wouldn’t take long to make this into a simple model that could be controlled by a Raspberry Pi, using a servo for rotating the top half. I also considered moving up and down the antenna stalk, but there wasn’t really enough space to fit the kind of mechanism I had in mind. Overall, I wanted to keep it simple.

I had to do quite a lot of cutting and filing to fit a servo inside, using a small piece of foamed PVC board as a servo mount, along with a custom made “wheel” that fitted the servo horn and the inside of the top.

The electronic interfacing was taken care of by using one of my previously tried and tested buffer boards using a 74HC541 which protects the Raspberry Pi to some extent. I’ve added a standard sized budget servo, two blue LEDs on the head and a red LED on the antenna.

From a software point-of-view, I’m testing using the wonderful “ScratchGPIO”. A couple of scripts are responsible for flashing the LEDs in a menacing manner and a simple loop makes the Dalek rotate back and forth using the Servo7 variable. I like using ScratchGPIO as it gives me a chance to check all of the outputs easily without having to refer back to my syntax cheat sheets. Eventually I’ll probably move the control to Python and use ServoBlaster directly.

Ultimately, this may become an information Dalek. I’m hoping I can get it to pick information out of Twitter, read the news and weather and perhaps announce incoming mail. Watch this space!

I’ve put the second part online now and I’m working on developing the third part of the documentation.