Saturday, October 12, 2024

Insertomatic 6000 Part 3: Mechanical and wiring improvements

Mechanical design

The biggest part of this phase would be the mechanical design, as a number of issues had been identified and were to be improved upon.

Depth of the case

The case is slightly too deep to fit in the rack cabinet that I'd like to put it in, and as it should be possible to make everything fit in a shorter case, the case needed to be shortened.

The first step was to deal with the extruded side pieces of the case. Cutting these is easy using the metal bandsaw at the Hackspace, which achieved a perfectly straight cut in seconds. The threads for the screws were then tapped using the correct size taps.

Metal bandsaw
Extruded case offcuts

The next step was to cut the top and bottom panels, This was much trickier because the panels wouldn't fit in the metal bandsaw. They can't be cut with the laser cutter either, not even with multiple passes, but the laser cutter can at least cut a line in the paint which serves as a guide for manual hacksawing. This was done, and the results weren't very nice, as just a millimetre of deviation from the line shows up very clearly once the case is assembled, but it's acceptable. A hole was drilled in each panel for the screw which goes into the metal crosspiece near the front of the cabinet.

The internal sheet of acrylic which holds all the PCBs was also redesigned to make the parts fit more efficiently following the decision to mount the Pi Zeros on top of the VBIT-Pis.

View of the interior from above

Front panel

The design had a few imperfections; the cutout for the pushwheel switches was too big, leaving visible gaps above and below the switches. The cutouts for the three buttons weren't keyed, so the buttons could be rotated. The depth of the front panel made it difficult to plug anything into the USB port. It was also decided that wiring up the LEDs to the activity LEDs on the Pis would be too risky so the arrangement for those was also changed, reducing the number of holes needed. A new front panel was cut with all these changes made.

The LED holders are of a type which are normally secured to the panel using a nut, but in this case the diameter of the holes cut by the CNC were such that it was possible to tap a thread using an M8x0.7mm tap then screw the holders into the panel. This was just as well because the metal and laser cut panels together would have been too deep to get access to the thread of the holders to secure them with nuts.

View of the Insertomatic 6000 from the front

Electrical wiring

While working on the project, it had become clear that using "DuPont Wire" to connect all the parts together was not so convenient after all. The solution to this problem would come in the form of custom wiring harnesses, which would be assembled from IDC ribbon cable, DuPont-syle housings with the right number of pins for each connector, and proper crimps which would be crimped on by hand. This enabled each cable to be made to the exact length required, making the wiring much neater, and all the connectors being the correct size for their connectors make assembly and disassembly much easier with less chance of error.

Hackspace crimping tools

Here is one of the wiring harnesses that I made up:

Picture of one wiring harness

Controller

Channel memory

Obviously it's highly inconvenient for the modulator channels to be forgotten every time the Insertomatic 6000 is turned off, so adding this feature to the Pi Pico-based modulator controller was important.

As is common with these newfangled 32-bit microcontrollers, unlike PICs and AVRs, the Pi Pico doesn't have any EEPROM, and it is necessary to write to the FLASH instead. The main difference is that flash can only be erased a whole sector at a time, which effectively means that all data has to be written in one go rather than updating it whenever each individual setting is changed to avoid making excessive write cycles. This is solved by having a dedicated option in the menu to save the settings when the user is ready. The cycle life is quite high (10,000) and there isn't a need to change the settings often, so it was decided that it would be acceptable to not bother with any wear levelling.

A channel banks feature was added, which makes it possible to save several sets of channels for the modulators and switch between them easily. It could be used to quickly reconfigure the modulator channels when moving the Insertomatic 6000 from where it is normally installed to other places such as teletext exhibitions.

Now Playing info display

I used the Raspberry Pi Foundation's serial PIO example and expanded it to work on four pins on the Pico. I added some code to poll the FIFOs of these PIOs and process the data into some arrays for the cyclic display on the LCD. I then learnt how to control the serial port on the Pi 3 and Zeros so that data could be sent to the Pi Pico; a little bit of code was added to slideomatic.py to process the data returned by the mpc command and send this to the Pico. The data from the Pis is stored and displayed in a cycle.

Animation of the now playing info display

Power supply

The inductors on the AliExpress buck modules got rather uncomfortably hot even when the Pis were all idle, and the linear regulator the for the modulators also got very hot despite only having a 7V input voltage, and it was decided that this could be detrimental to the long term reliability of the design once the box was closed up. It was decided that a second regulator would be added and each one would only be connected to two of the Pis; the result of this was that the inductors only get slightly warm when the Pis are idle, and only get very warm under a prolonged stress test using the stress command on all the Pis simultaneously. The 7805 regulator was changed to an LDO regulator so the input voltage for that could be reduced to under 6V, and it was mounted on one of the extruded edge pieces of the case for heat sinking, and as a result, this regulator now remains cold.

Power consumption

The following command was used to stress-test the Pis:

for ((i = 0 ; i < 60 ; i++ )); do stress -c 4 -t 60s ; vcgencmd measure_temp ; done

Measured with an inexpensive plug-in power meter, the total power consumption is listed below. From 240V to 5V the power supplies are 75% efficient, which doesn't seem great but as the conversion to 5V is done in two stages, this is still equivalent to 87% per stage. 240V to 5V power supplies tend to be less efficient than those with higher output voltages, so the gain of changing to one of these would not be significant even if that didn't introduce noise issues.

  • 15.0W - all Pis idle
  • 24.0W - all Pis running the stress test
  • 0.1W - when all loads are disconnected from the mains power supply

The power consumption is quite important because the total energy consumption adds up to quite a lot over time when the device is left running 24 hours a day as is the intention. For comparison:

  • 4.0W - Single Pi 5 at idle
  • 20.0W - Ivy Bridge office desktop at idle with no spinning hard drives
  • 7.0W - Ivy Bridge laptop at idle

Next steps

The main part of the project is done, but there's still some work to be done...

The picture quality on some of the channels is still quite disappointing, particularly the channels derived from the external AV inputs. I will experiment with extra ground paths between the modulators and Pis, and find a way to disconnect the +5V power lines between the Pi 3 and three Pi Zeros, which are not helpful when the Pi Zeros have their owm direct connection to the power supply board; this will also enable the second 5V switching supply to be dedicated to the two Pi Zeros with the VBIT-Pis, allowing the lone Pi Zero to be paired with the Pi 3 on the first 5V switching supply.

Animation of the noise

Hopefully it won't come to the point of having to design a large PCB almost as big as the acrylic sheet to fit all the components and provide a nice ground plane, but at this point this could be done and it wouldn't add a massive amount of cost in the grand scheme of things.

Finally, once the Insertomatic 6000 has been installed in its rack, all that's left is to find some interesting alternative software to run on the Pi 3. It's possible to switch between the Slideomatic screen and the terminal by connecting a USB keyboard and typing Ctrl+Alt+F1 or Ctrl+Alt+F2, so the Pi 3 can be used for other things before being set back to the Slideomatic screen. Perhaps some BBC Micro and ZX Spectrum ROMs for software originally distributed via Telesoftware could be used to create a "Ceefax Game Pass" service!

Insertomatic 6000 Part 4: Finishing up

Summary of the Insertomatic 6000 One Raspberry Pi 3 + three Pi Zero 2 Ws fully networked using USB Gadget 6 analogue RF channels in t...