Pico Powered Camera Shutter Controller

Click the image to view the video. It’s only 30 seconds…

Sometimes things work in spite of what you do, rather than because of it. With this in mind I present my PICO Powered Camera Shutter Controller. It works. It has quite a few batteries inside. It makes interesting noises when it has to work hard. I’ll show you the insides if you come to my talk at DDD North in a couple of weeks.

Sonic Super Teams is a smashing little game

Played Sonic Super Tams today. It’s a race game. First team to get all their characters around the race track and over the finish line wins. There are 8 Sonic characters in the race which are represented by beautifully made little figures. At the start of the game each player gets six move cards and a team of two characters to get to the finish line as fast as they can. Move cards apply to one particular team, so you frequently find yourself having to move your opponents pieces. The trick is to send them onto the spikes to slow them down, or get them stuck in front of a loop, while you and your teammate head off towards the double speed rings. When you’ve used up all your move cards they are dealt out again. There are also chance cards to be had which add even more variation.

With four players you play as two teams of four, which adds more fun as you try to help your teammate. Games last around half an hour, which is just the right length for a game like this. A great game with some nice strategy.

Triumph over Adversity

Today I nearly finished my camera remote control. I thought it was a simple enough project. But today, not really simple enough for me. Basically I took part in a festival of doing things wrong. The stars, in no particular order were:

  • Thinking that switching the ground power supply rail rather than the positive one was a good idea because I had an innovated (i.e. dangerous) split power delivery.

  • Building a battery pack that produces 9 volts before discovering that the servo can only handle 7 volts

  • Soldering the wrong wires on the switch

  • Soldering the right wires on the switch, but without putting the switch through the fitting hole

  • Soldering the right wires on the switch, having put the switch through the fitting hole but not added the fixing nut

  • Forgetting to connect 3.3v to the i2cv signal on the display so that I then spent 15 minutes trying to work out why the I2C lines weren’t powered properly.

  • Using == in an assignment by mistake: self.state==self.DELAY_SET compiles fine in Python, but doesn’t do what I want it to.

  • Plugging the 5V power signal onto a PICO input because a red wire looks very like an orange wire sometimes

  • Plugging the servo control signal onto the wrong PICO pin

Basically I got it right by doing everything possible wrong first. But at least it works now and I should be able to demonstrate it at DDD in two weeks time.

Combining Spreadsheet Comments for Report Feedback in Excel

If you’ve ever had to mark different sections of a student report using a spreadsheet, you’ll know the pain of writing feedback in multiple columns and then trying to combine it into one coherent message. You’d think Excel would be thrilled to help, but it turns out it has a habit of making things harder than they need to be. Fortunately, with a little Excel wizardry, we can make it work.

The Problem: Merging Feedback for Different Report Sections

Let’s say you’ve got a spreadsheet where you’ve left comments on different sections of a report:

Report Section Introduction Feedback Risk Analysis Feedback Presentation Feedback
Report 1 Clear but brief Lacks detail Well-structured

What we’d like to do is take all these comments and merge them into a single, readable feedback message. But we don’t want everything mashed together in a way that makes it impossible to read. We want nice, neat line breaks between each section.

Solution: Using Excel’s TEXTJOIN Function

The TEXTJOIN function is a bit of an unsung hero in Excel. It lets you take multiple pieces of text, stitch them together, and even throw in a separator between them. In this case, we want to use a new line (which Excel calls CHAR(10)) as our separator.

Here’s the formula you need:

=TEXTJOIN(CHAR(10), TRUE, B1, B2, C1, C2, D1, D2)

This produces a sequence of headings and comments. Let’s break this down:

  • TEXTJOIN is our function of choice for merging text.
  • CHAR(10) is the special character that represents a new line in Excel (Windows users, take note! If you’re on a Mac, you might need CHAR(13)).
  • The TRUE argument tells Excel to skip any empty cells (so you don’t end up with awkward extra blank lines).
  • B2, C2, D2 are the columns containing our feedback comments.

One More Thing: Wrap That Text!

By default, Excel doesn’t believe in displaying new lines. It just smugly ignores your CHAR(10), leaving you staring at an unhelpful string of text.

To fix this:

  1. Select the column where the merged comments appear.
  2. Click Wrap Text in the toolbar (under the Home tab).
  3. Marvel at the newfound readability of your feedback.

Copying the Comments Elsewhere

If you want to paste the merged comments into a report, Word document, or email, the new lines should carry over—unless you’re pasting into a plain text field that doesn’t respect line breaks. If that happens:

  • Try pasting into Notepad first, then copying again.
  • Use Ctrl + H (Find and Replace) in Excel to swap CHAR(10) for another separator (like a semicolon or bullet point) before copying.

Final Thoughts

This method saves a ton of time when providing feedback on different sections of a report. No more manually copy-pasting comments or trying to decipher your own mess of concatenated text. And as a bonus, you get to look like a spreadsheet wizard in front of your colleagues.

So, go forth and merge feedback with confidence! And don’t forget to turn on Wrap Text, or you’ll be staring at a very long, very unreadable single line of text, wondering where it all went wrong.

Happy grading!

Thanks to ChatGPT for help writing this.

Full Fat MIDI Cheesebox is coming

The finished version will have the lid on properly…..

I’ve been working on an upgrade for the original PICO MIDI Cheesebox. This one incorporates a MIDI sound generator and extra flashing lights. It’s been fun to make.

Maybe I should make a printed circuit board….

I’m using the PCB version of the cheesebox and connecting it directly to the light display PICO from the Chocolate Synthbox. The light display changes in time with the music. The original version of my lights responded to special messages sent from the synthesizer. I’ve changed things a bit. The latest version responds to MIDI messages. Last might at the hardware meetup I was trying to get the cheesebox to send messages out of two serial ports, one for the sound generator and the other for the light display. This turned out to be tricky because some of the serial data pins I wanted to use have been allocated to other things.

So this morning I just connected the display PICO to the same cheesebox serial output as the MIDI sound device. Sending serial data from one pin to more than one device was probably not the best way to solve the problem, but it did have the advantage of working perfectly. Then, all I’ve had to do is re-write the message code in the display PICO so that it understands MIDI and changes the lights in response. The final touch will be to get all this boxed up and working. I’ll put all the designs and software on GitHub once I’ve made them all work.

Mostly Musical Hardware Meetup

Ross with his “fillet of piano”

Another musical hardware meetup tonight. Ross brought along a demo of his amazing “piano round trip machine”. Not content with making an electronic pianola he has now added infra-red distances sensors to the piano keyboard. These generate midi notes which means you can make an old out of tune piano sound like anything. Including a new in tune piano.

Keyboards old and new

It was very impressive and opens the door on all kind of interesting stuff. You could make a piano which joins in with your playing, or plays the left hand for you.

Brian had brought along his theramin-ish machine which uses distance sensors to control sound playback.

Something else I now want to buy….

Richard brought an amazing led panel. Next time I’d like to see if we can use it in some long-exposure photographs.

This is Brian’s Pi Powered AI tracking skeletons. It was amazingly quick and didn’t slow down when more people entered the frame.

I brought along my latest non-working project and used the MakerSpace oscilloscope to prove that I really don’t know how to create a software uart using Raspberry Pi PICO state machines. But I might get it working for next time….

The next meetup is in two weeks, on the 19th of February. This one will have a photographic bent. I plan on bringing along my servo-powered cable release, among other things.

If you fancy coming along it would be lovely to see you.

Bye Bye Octopus Agile

Only a little while after I updated the Agile Octopus Display we find ourselves leaving the Agile Octopus tariff. At the start it worked well and we were able to work around the expensive parts of the day and make good use of free (or sometimes even paid to use) electricity. But we did notice that when the weather was calm and cold the price of power got unpleasantly expensive all day. Above you can see the occasion a few weeks ago when we decided to quit. For reference I think the price of power should be in the twenties.

We did the sums and concluded that we would need an awful lot of free/cheap power to compensate for these high peak prices. So for now we are on a tariff which gets cheaper overnight and we’ll be working round that.

Evercade Game Machine

Yesterday found me at the Video Game Market in Leeds It was quite a bit bigger than I expected. I thought we’d go in, spend half an hour looking around and then head out for lunch. But lunch had to be put back an hour or so because there were so many stands and so much stuff. It was busy, but not terribly so. They had phased entries at different times of the day. We were in the second sitting, starting at 12:00 so there might have been some amazing bargains that were snapped up by the 10:30 folks. But, there were also lots of things worth having.

I’ve been watching the progress of Evercade for a while. They have a mission to put classic old games into the hands of players who don’t want to have to mess around with strange hardware emulators and search for unlicenced ROM images. Their first machine was a small handset with a 4 inch screen (although you can plug it into an HDMI display if you want to). One of the stands had a one of these plus a stash of cartridges at a reasonable price so I made a carefully considered purchase….

The device works well. The screen is bright and the controls are just right. Each cartridge comes with a little booklet with game details and controller info. I don’t remember “Bad Dudes” or “Karate Champ” (classics in the Data East collection that I got with the set) but I’m looking forward to giving them a spin.

Evercade are working their way through various platforms and they seem to be good at tracking down and licencing lots of classics, including ones from the Bitmap Brothers, Gremlin, Team 17 and whatnot. The cartridges are pocket money priced (if you get more than 17 pounds pocket money) and Evercade are now branching out into consoles to go under the TV and even free-standing mini-arcade machines. I’m pleased with my purchase, and I’m very tempted to try and find space for one of their little arcade machines….

Drawing Dustbin Lids with ChatGPT

I was talking to some students last week about the interview process for the marking of their project. I said that they would do fine, as long as they didn’t use the “dustbin lid defence”. I used this when I was at school. If you were being approached by the class bully (every class had one) a good trick was to point over their head and shout “dustbin lids!” as loud as you could. Then, while they were scanning the sky for lids you made good your escape. It only worked once per bully, which was a bit of a limitation, but it was on occasion very useful. It doesn’t work in assessment interviews though.

Anyhoo, I thought it might make a good blog post but it needed a picture so I asked ChatGPT to draw some dustbin lids in the sky in the style of a 1950’s UFO sighting. Turns out that ChatGPT doesn’t know what a dustbin lid is. I got lots of floating dustbins. So I uploaded a picture of a dustbin lid for reference and now ChatGPT engaged in a debate with itself as it made the pictures:

It was really interesting to watch it at work. One AI process trying to get another process to do what it wants. I’m quite happy with the final result although there is a bit of a kerfuffle with the telegraph lines in the right hand edge. It was great fun, although I do worry about just how much electricity I used up just playing with pictures.

Update: After my search for dustbin lids to get an image of a lid the internet is now convinced I need a new dustbin and keeps showing me pictures of them wherever I go. But how would I throw away the old one?

Levelled Up Servo

I really, really want to be able to control the shutter on my Polaroid camera. So I’m in the process of building an actuator which will push the plunger on the cable release. Version 1 was a bust. Almost literally. The shutter button on the camera hardly moved while the servo made some very unhappy noises.

You can see version 2 above. Considerably more beefy. This servo actually contains metal gears. I’ve done a quick test and it seems to work, which is nice. Next thing is to build a cable release holder and attach it to the actuator.

If you want to see it in action, sign up for DD North and come along to my session.

Setting Up esptool in a Python Virtual Environment

I’m trying to get into the habit of asking ChatGPT to create a blog post each time I do something I want to remember (and perhaps tell others about). I did this today to get a device ready for my shutter controller….

So, you’ve got an ESP32, and you need to flash some firmware. The official tool for the job is esptool, but before you go installing things system-wide like a reckless cowboy, let’s do it properly—with a Python virtual environment.

Why? Because keeping things self-contained means no dependency nightmares down the line. Trust me, future-you will thank present-you for this.


Step 1: Install Python (If You Haven’t Already)

First, make sure you have Python installed:

python3 --version

If that spits out a version number, you’re good. If not, go install it from python.org.

On Windows, also make sure pip is installed:

python -m ensurepip --default-pip

Step 2: Create a Virtual Environment

Now, let’s create a virtual environment so we don’t clutter up our system’s Python installation:

python -m venv esptool-env

This makes a new folder called esptool-env, which holds its own little self-contained Python world.


Step 3: Activate the Virtual Environment

Before installing anything, you need to activate the virtual environment.

  • On Windows (Command Prompt or PowerShell):
    esptool-env\Scripts\activate
  • On macOS/Linux:
    source esptool-env/bin/activate

Your terminal should now show something like (esptool-env) at the beginning of the prompt, meaning you're inside the virtual environment.


Step 4: Install esptool

Now, install esptool inside your virtual environment:

pip install esptool

To check if it installed correctly, run:

esptool --version

✅ If you see a version number, you're all set!


Step 5: Using esptool (No .py Required!)

At this point, you might be tempted to type:

esptool.py chip_id

But stop right there! On Windows (and even some Linux/macOS systems), esptool installs as an executable, meaning you don’t need the .py suffix.

Instead, just run:

esptool chip_id

Much cleaner, right?


Step 6: What is firmware.bin?

When flashing an ESP32, you need a firmware file—usually named firmware.bin. This file contains the actual program that will run on the ESP32, including:
✅ The operating system (like MicroPython or an IoT framework)
Libraries and runtime components
✅ The main application code

Think of it as the brain of your ESP32—it tells the chip what to do when it powers on.

If you’re installing MicroPython, you’ll need to download the latest ESP32 firmware from the official site:

🔗 Download MicroPython Firmware

Make sure you get the correct version for your ESP32 model (ESP32, ESP32-C3, ESP32-S3, etc.).


Step 7: Flashing MicroPython to an ESP32

Once you have the firmware.bin file, you can flash it using esptool.

1️⃣ Erase the Existing Flash Memory

Before installing new firmware, it’s a good idea to wipe the existing flash:

esptool --port COM3 erase_flash

(Replace COM3 with your actual serial port. On Linux/macOS, it might be something like /dev/ttyUSB0.)

2️⃣ Flash the MicroPython Firmware

Now, install MicroPython by flashing the .bin file:

esptool --port COM3 --baud 460800 write_flash -z 0x1000 firmware.bin

🛠 Breaking this down:

  • --port COM3 → Specifies the serial port
  • --baud 460800 → Speeds up flashing (can be lowered if issues arise)
  • write_flash -z 0x1000 firmware.bin → Writes the firmware at the correct address (0x1000)

When it’s done, MicroPython is now installed! 🎉


Step 8: Connecting to MicroPython

Once the firmware is flashed, you can connect to the ESP32 using a serial terminal program:

1️⃣ Install a terminal program like PuTTY, screen, or minicom
2️⃣ Connect using the correct port and baud rate (115200 baud)
3️⃣ Press Enter, and you should see the MicroPython REPL (interactive shell)

Alternatively, use Thonny (a beginner-friendly Python IDE) to interact with MicroPython.


Step 9: Deactivating the Virtual Environment

When you're done, exit the virtual environment with:

deactivate

The next time you need to use esptool, just reactivate the environment and you’re good to go:

esptool-env\Scripts\activate  # Windows
source esptool-env/bin/activate  # macOS/Linux

Final Thoughts

By using a virtual environment, you've kept your system clean and organized—no global Python clutter, no version conflicts. And remember:

🔥 Just type esptool, no .py needed!
🔥 MicroPython firmware is just a .bin file that needs to be flashed to your ESP32!

Now, go forth and flash those ESP32s like a pro. 🚀

Remote Camera Control Fun at DDD North 2025

It would be lovely if it worked…

I want to take pictures of folks at my DDD North Session next month. And not just with any camera. I want to use my “self-fogging” Polaroid Camera. You’ll find out how to build your own if you come along. Snag is I don’t want to have to press the shutter button myself. I mean I could, but I really want to control the camera for a brief timed exposure (around half a second or so) for each shot and I’d love them all to be totally consistent.

I found a design for a remote controlled camera release which looked like a good starting point so last night I printed out the actuator and today I printed the box. I then put it all together, connected a microcontroller and fired it up.

It doesn’t work. Not a problem with the device itself, it can trigger the shutter on a lot of my cameras. But not on my “self-fogger”. The shutter on early Polaroid cameras is cocked as you press it. This makes the mechanism simpler and less prone to wear, but it means that you have to work quite hard to push the button down. Something which my little 9gm servo is just not equal to. So I’ve switched to a much beefier servo. We’ll see how it goes.

If you want to find out out how it all turns out, and maybe even get a ready fogged snap of yourself, make sure to sign up for DDD North on the 22nd February and come along to my session.

Adventures with old digital camera backs

Now that I’ve got a very old digital back for my very, very old camera I thought it was time to take some pictures with it. I’m a bit constrained, in that the camera has to be connected to the computer when I use it, but this is still much easier and cheaper than using film.

The digital back that I’m using has a sensor which is around the size of a 35mm frame. This means that I’m only capturing the centre of the picture, but I’m not unhappy with the results.

It’s been great fun walking around the house and taking pictures of stuff. It has allowed me to practice focusing and framing without spending a fortune on film. I’m really looking forward to taking some portraits with the setup. The absolute picture quality is pretty good. I know that modern cameras, and even phones, can produce images which seem sharper and brighter, but that’s not the point. I love the filmic quality of the results I get from this kit.

If you have an old computer (and you will need an old one - new ones are no good) that you can dedicate to the project and you happen to have an old film camera that will work with a digital back you should definitely have a go.

DeepSeek Ai

Well, it certainly passes my Ego test

There’s been a lot of chatter about this new AI called DeepSeek. I had a little go with it this afternoon. I gave it a programming problem and it acquitted itself quite well. I couldn’t distinguish the replies from the ones I got from ChatGPT, although it did stop talking to me after a couple of questions. They say that DeepSeek is smaller and more efficient and all the code is open source.

I can remember back to the time when it was really cool to have a computer of your own running at home. The way things are going, the next cool thing will be to have your own AI running at home.

We do live in interesting (and a bit scary) times.

Updating a Polaroid Wink Light

it is in good condition for its age

I’ve been messing around with Polaroid Land cameras for a while. Today I thought I’d do something with their flash lights. The Polaroid Wink light was created to add a bit of extra light to your pictures. If you buy a second hand Polaroid outfit you will frequently find one included in the package.

YOu can’t get 45 volt batteries any more. And this is a good thing.

Above you can see inside the light. The silver thing at the back is a capacitor which is charged up from the battery before the shot is taken. When the shutter is fired the charge in the capacitor is sent into the bulb producing a bright “wink” of light. The bulb in a wink light was made for use in cars which have a 12 volt power supply. The wink light sends 45 volts through the bulb making it get extra bright for a short time. If you want even more light you can plug a little holder into the side of a wink light which holds a “proper” flash bulb. These bulbs contain fine magnesium wire which burns with a really bright light - although you can only use each bulb once.

Anyhoo, I wanted to make the wink light actually do something. I had a number of ideas but in the end I decided to see if I could fit a standard G4 lighting led into the light. These use a 12 volt power supply. The most I could get from my batteries was 6 volts so I dug out a little voltage converter which steps this up to 12 volts.

The power switch is in the case at the bottom left hand side

Above you can see what I ended up with. There are two battery holders, each of which contains 2 AA batteries. They are connected via a switch to a “buck converter” which steps their 6 volts up to the 12 volts the bulb likes. I’m not planning on making the light switch on when the camera takes a picture. I’m a bit concerned that it might take too long for the circuit to fire up. Instead I’m going to leave the light on all the time while I take pictures. This also gives me a bit more light to focus with, which is nice.

Ready for action

Above you can see the light on the camera as it is meant to be used. The next step is to take some test pictures and get a feel for the exposure settings it needs. This was a fun way to spend a Sunday.

DDD North Schedule and Registration Now Available

I might bring the duck along if I can think of a reason to….

DDD North is an awesome conference hosted at Hull University on Saturday 22nd February. It’s been going for ages and is always wonderful. You can find the schedule here. And you can register for tree here. I’m on with all my toys in the first slot, 9:30 in Lecture Theatre A. I really like this timing, it means that I can get my session out of the way and then go and see lots of other stuff.

I look forward to seeing you there.

Plumbing the depths

I don’t usually wake up and think “Perhaps I’ll do some plumbing today”. But this morning the decision was taken out of my hands, what with the water cascading down the side of the house and all. I had a pretty good idea what the problem was, and a trip into the loft confirmed it. The float valve on the water tank had failed. The split pin that holds the ball cock had rusted through and the whole assembly had broken free, leading the valve to fill the tank forever. The good news was that the overflow was working perfectly, and all the excess water was being directed out of the house. The bad news was that I had to fix it.

I’ve been here before, around twenty years ago when pretty much the same thing happened. That time I didn’t have the luxury of a tap to turn off the water supply. Well, actually I did have a tap, it’s just that when I turned it the top came off in my hand. On that occasion (and I’m rather proud of this) I came home from work in my lunch hour, turned on all the cold-water taps, flushed the toilets and then managed to swap the broken assembly while the water pressure was reduced. I hardly made any mess. Then I ate a bag of crisps and went back to work. But of course, I was much younger then.

Today I turned the water off and then headed off to ToolStation to get a replacement (£7.98). Fun fact. If you search for ToolStation the first hit you get is for ScrewFix. And if you search for ScrewFix the first hit you get is ToolStation.

ScrewFix and ToolStation are competing building supply companies in the UK. In Hull their depots are actually next to each other. I have this idea that on Christmas Eve, when all is peace and goodwill, the staff from the two depots meet in the car park for a football match while someone plays the mouth organ and all talk is of “When will this war all be over….”. But I digress.

The fixing process was actually quite painless. Fortunately I’ve kept my big spanners. For me the worst part was seeing the corroded and aged part and remembering back to when I fitted it as a brand new shiny one. I don’t think I’ll be replacing this the next time it wears out.

Anyhoo, we now have running water in all the right places.

I found this awesome sticker on my toolbox…