BADGES? We don’t need no stinking badges!

Members of Workshop 88 makerspace have been involved with hacker conventions and badge culture where they would design, program, fabricate and distribute badges at hacker conventions like THOTCON.

These devices were made in 2014 for THOTCON 0X4

These badges each utilize an FS1000A RF transmitter and and XY-MK-5V RF receiver (similar to this) to build two way radio modem, S11145 UV Sensor, and a Funduino Pro Mini Arduino compatible micro-controller. The THOTCON 0x4 badge project including source code, libraries, PCBs, and documentation is here: https://github.com/Workshop88/thotcon0x4

Since these devices served their purpose eleven years ago and haven’t been touched since, it’s safe to assume this inventory of devices can be hacked and reused. Let’s verify we have everything needed to [re]program one of these.

The Arduino Pro Mini is a small Arduino compatible board based on the ATmega328P. It does not have a USB connector so an external serial programmer is required. Fortunately there were two in the box with the badges and the badge crafting team even fabricated a board with pogo pins for in circuit programming without soldering.

Programming was as easy as it ever is on the Arduino:

  1. Matched the markings on the Funduino to those on the serial board to connect them correctly
  2. Found an appropriate USB Mini cable in Workshop88‘s eclectic and diverse cable cabinet
  3. Downloaded and installed the Arduino IDE on the laptop
  4. Ran the Arduino IDE
  5. Loaded the Blink example
  6. Plugged the serial programmer into the laptop USB
  7. Selected the board and COM: port after letting the boards manager and libraries update
  8. Compiled and uploaded
  9. Enjoyed the satisfying blinking light

These Arduinos are are ready to be updated and re-programmed for adaptations of the THOTCON 0x4 badges or in new member projects!

If you’re interested in Arduino or hardware hacking or badge culture come visit Workshop 88 at our open house every Thursday from 7:00pm – 9:00pm

What will you make at your makerspace?

DIY Dust Collector For Cleaner Workshop Air

A lot of dust can be generated in the workshop, especially with power tools. The dust is neither healthy nor pleasant to breathe. Effective air filtration in small workshops need not be expensive or complicated, here we show how to make a cheap effective versatile air filter for dust and particles from a box fan, furnace filter(s), and 3-D printed clips (or the handyman’s secret weapon: duct tape).

For years in our wood shop we’ve used this 20″ box fan with a fine 20″ wide furnace filter taped over the back or inlet side of the fan. Having served us long and well she’s past retirement condition, so I worked in some upgrades while replacing it.

I love duct tape as much as the next hacker or DIY’er (RIP Red Green), but I never liked its permanence in this application. The fan made a great air filter but no longer could easily be used to move more air for ventilation, so I designed and 3D printed some simple brackets that allow easy placement, removal, and exchange of different filters on two of our fans. At home I also use the more fiberous high flow air filters to collect the majority of over spray when spray painting.

I designed the bracket in FreeCAD, 3D printed it and a mirror copy in Polymaker PLA on the makerspace’s Quidi 3 Plus 3D printer. The source FreeCAD file, STL, and Step files are included in this zip.

The part is simple, but I was sure to design in generous tolerances and an access hole for the screwdriver needed to install the part (two concepts I wish the VORON team had embraced as well as Prusa has).

I had to select longer sheet metal screws from the makerspace’s generous eclectic fastener collection, as the stock screws were only long enough to hold the grating on, with no length to spare.

Now filters are easily dropped into the brackets and removed. There is no need for a tight fit in the brackets as when the fan is on the filter is drawn tightly to the rear grating.

So happy with the first one, I printed and installed a second set on the other fan.

I noticed a slight difference in the dimensions of the second fans plastic grating caused the brackets to be bent outward slightly. I could have updated the dimensions of the design and printed another set, or I could have used a knife to shave a little plastic off the edge of the fan grating, but I decided the easiest thing to do would be use a heat gun to deform the brackets on the fan, which could even have been done with a hair dryer on PLA.

Bonus content: Big Feet

You may have noticed that we replaced our fan’s feet with boards. We find the fans are far less likely to tip, blow, or get knocked over in the shop with the broader base, which also turns out to be more durable than the stock plastic fan feet. (The first thing I ever designed for 3D printing was a replacement foot for a 20″ box fan)

Note the base extends farther from the back of the fan than the front to better handle the force of the airflow.

One fan has a base held on with zip ties, the other employs sheet metal screws.

One of the zip ties had broken, that was an easy repair. While I had the back grating off I replaced the broken zip tie through the spacer we fortunately had not lost, tightened, and cut off the plastic end with end nippers so as not to leave sharp corners.

The other fan had not yet had its base replaced but Tom and I decided to re-use the base from a fan that we wore out last year and chose to install it with more sheet metal screws. We carefully aligned the foot to the bottom of the fan and clamped the foot to the table, then punched the hole locations to the sheet metal. After drilling the pilot holes (not pictured) we selected four matching broad head short sheet metal screws and assembled the fan base.

Voila!

Two affordable versatile shop air filters with the bonus of a sturdy base.

What will you make at your makerspace?

VACU-SWEEP, Better than any dustpan!

Here’s how we threw together a quick vacuum sweeping helper to keep the workshop clean using scrap wood, screws, 3D printing, and shop tools including using four saws five ways.

A super nice thing about the makerspace is the wide variety of tools that are readily available, this project used (in order):

  • A piece of scrap plywood
  • The table saw with crosscut sled to straighten the rough cut sides of the triangle
  • A pencil, nail, and scrap wood as “Hacker’s Compass”
  • The drill press for the jigsaw starter hole
  • The jigsaw to cut the circle
  • The table saw with the fence to cut the sides of the triangle square to uniform width (height)
  • The compound miter saw to cut mitered ends on the sides
  • The Qidi X3-Plus 3D printer and PLA for the hose adapter (thanks again Canuck Creator and Polymaker for donating the 3D printer and PLA)
  • FreeCAD for the hose adapter design
  • Screws and washers
  • The laser printer for the name
  • The paper cutter and scissors to cut the name out nice and square
  • Packing tape to affix the name

It needed a 16″ wide mouth for the best results with push brooms, and a 4″ inlet for the dust collector hose. We found the perfect rough cut triangular piece of scrap plywood in Workshop 88’s ample wood supply.

The edges of the triangle were trimmed straight and square on the table saw using the crosscut sled.

We marked 4 inch diameter (2 inch radius) circle using our “Hacker’s Compass”. The “Hackers Compass” is a scrap piece of Masonite from the back of a projection TV riddled with ventilation holes that, with a nail or screw and pencil, can mark arcs and circles. The improvised compass, initially needed to draw a large circle, started as a joke but turned out to be super useful and now is an easy go-to tool hanging in the shop.

The drill press was used to drill a 5/16″ hole just inside the edge of the circle for the jigsaw blade.

The workpiece was clamped to the edge of the workbench and after ensuring the workbench was out of danger, the large circular hole was quickly cut with the jigsaw.

A 4 inch hose adapter was designed in FreeCAD and successfully 3D printed after a couple failed prints due to mistakenly loading PETG instead of PLA (Doh!).

Another piece of scrap wood was selected for the edges.

The U shaped scrap was cut into 2 irregular strips on the band saw, then cut to the roughly one inch height dimension on the table saw using the fence to guarantee both sides were the same height.

The ends were mitered and cut to length on the compound miter saw, then screwed into place. The failed 3D printed adapter in the picture illustrates where the hose adapter will screw into place.

The hose adapter was screwed into place with wood screws and washers, then finally we affixed a laser printed name with packing tape. Voila!

Live in action!

This was a fun and useful project that cost next to nothing and took almost no time to make.

If you want to take a better look around Workshop 88 makerspace, see our 360° virtual tour.

What will you make at your makerspace?

2025 Workshop 88 Makerspace 360° Virtual Tour

The Makerspace

Visitors are first greeted by our charming entrance, then our charming members. Our creative and knowledgeable community is one of our greatest strengths (not pictured here).

The makerspace is divided into five areas, the first is the general meeting room. This area is primarily used for meetings, classes, laser cutting/engraving, 3D printing, crafts, and projects.

The next area is the workshop / woodshop where makers can do just about anything enabled by a wide array of hand and power tools.

At the far end of the workshop you’ll find the Shapeoko CNC machine you’ll start to see some of our metal working tools.

The electronics lab hosts tools and supplies for projects of all sizes and skill levels, from basic breadboard circuits to SMD PCB fabrication, from Arduino to Raspberry Pi and beyond. This is one of the most used areas in the makerspace.

The metal shop not only houses our Atlas lathe, SIEG manual/CNC mill, metalworking tools, and supplies but we also have a good inventory of metrology equipment for precision measurement.

And finally we come to the storage area where we keep everything that does not belong in the rest of the space. Here, members store personal supplies and projects alongside club projects and Workshop 88 surplus inventory including extra tools, equipment, 3D printers, robotic arms, CNC machines, a robot skeleton that can play a Theremin, and more.

In the rear of the storage area, Workshop 88 has a large collection of wood, plastic, glass, and other supplies available to members for projects.


How To Find Workshop 88

Workshop 88’s entrance is NOT on Main Street. Contrary to what your navigation system will tell you, do not use map apps to find the entrance.

Workshop 88’s entrance is in the public parking lot at 530 Pennsylvania Avenue, Glen Ellyn, in the back southwest corner. 

Workshop 88’s sign and entrance cannot be seen from the street. Pennsylvania Avenue is one way west, turn left (south) right after the mailbox, before Main St. There is additional street parking in the neighborhood and a free parking lot behind the fire department on the northwest corner of Pennsylvania Ave. and Main St.

Rear of the brick pedestrian walkway in the parking lot, Workshop 88’s sign can be seen from here. This is about halfway from the street to the entrance.

Rear of the paved parking lot where the gravel driveway extends to the southwest.

Workshop 88 Entrance

Welcome to Workshop 88 makerspace!

Managing fonts? There’s got to be a better way!

I frequently get new fonts for my video projects which can litter my system with tons of fonts that are no longer needed (unless I want to edit old video files).
For example I just downloaded 19 Horror font families from my favorite free fonts site 1001freefonts.com for a project which includes 129 discrete fonts including bold, italics, etc., of which I will probably use no more than 5 in the video.
I’m trying and really liking the free cross platform font manager FontBase.  I can move fonts into categories then enable and disable them as needed, so they are not all active all the time but I don’t have to manually install and uninstall them. I can locate fonts by install date too making grouping existing fonts easy. 

Applications like word processors and video editors still see a large alphabetically sorted list, rather than a hierarchical tree view, but it’s a huge improvement to be able to enable and disable fonts for projects. I feel like this is another area where modern OS’s have been negligent and are behind expectations of computers in 2025, like file sharing across devices and OS’s (see copyparty).

Staring at the sun with beer can Solarigraphy

I was inspired and guided by Karin Majoka‘s excellent beer can solarigraphy video on YouTube (thank you algorithm!). Karin explains what solarigraphy is and walks step by step through what materials are needed, how to make the cameras, how you may install them, how to collect and scan the film, and how she digitally edits her images.

I used actual German beer cans as she did, but chose to take a 6 month exposure from winter solstice to summer solstice, and did a extra planning to calculate the best orientation and pinhole location in my “beercanmeras” for 9 compositions around my property.

Preparation

Location plan

I put a lot of thought into the location and orientation plan. I selected 9 locations and orientations including the direction the can would be facing, the tilt, and the necessary hole offset from center to place the sun beams on the photographic paper. Each of the 9 locations included a thumbnail sketch of what I expected the image to look like. This plan was needed to keep track of the color of the tape used on each can, the vertical location of the pinhole in each can, and the fabrication of several mounts to hold the cans. (Sorry about the image quality, the plan has been lost and this digital image was extracted from another photo)

Sun angle SCAD

I wrote an OpenSCAD script to model the projection of the sun’s path on the photo paper in the canmera at the summer and winter solstices at different can pitches so I could plan to offset the pinhole in the can to best compose the solar traces on the photographic paper. The source code is in the appendix at the end of this article.

Pin hole locations

Canmeras facing south tilted back at a 23 degrees matching the axis of the Earth could have the pinhole located in the center of the can between the top and bottom to center the span of the sun’s paths creating an eye shaped pattern over the 6 month exposure time. If the canmera was angled back away from the south, lying more flat, the hole would need to be displaced toward the bottom of the can so the sunlight traces did not leave the top of the photo paper. Conversely the more vertical the can stood, the pinhole would need to be moved closer to the top to prevent the sun’s rays from falling off the bottom of the photo paper.

Can preparation

I found that tall Bavarian beer cans were a good fit for 5″x7″ piece of photo paper. I also found that Diet Coke can bottoms when cut at an angle were a tight fit over the beer cans making a good light tight seal.

I’d carefully rough cut the tops off all the cans with a long razor knife and then re-cut them with scissors for nice clean edges. Be careful of the sharp metal edges as well as the knife and scissors while cutting the cans.

Finally, I rinsed and dried all the can halves for the following steps.

After the can halves were dry I labeled each one with a number and indication where the hole should be. I poked the hole from the inside of the can by holding a needle in pliers (sorry, not pictured), then sanded the outside of each hole to give each pinhole a sharp edge to improve focus. I also circled the pinholes inside the can so I could find them more easily when loading them with the photo paper in the dim light.

Film loading and sealing

Under a dim red darkroom light I opened the light tight envelope of photo paper and taped a single 5″x7″ sheet into each can in landscape orientation. The paper was taped to keep the paper against the back of the can. In the future I may try to 3D print retaining rings for the top and bottom to spring load into the can to hold the paper more securely against the cylinder wall without adhesive on the film.

A piece of black electrical tape was placed over the pinhole opening of each can as a reusable shutter.

After placing the photographic paper I placed the Diet Coke can caps and sealed the cans in duct tape. I purchased brown and black duct tape to make the canmeras placed on the mailbox and backyard fence less conspicuous. Normal silver duct tape blended in pretty well with the light post those were attached to.

Mounting

I had to create several mounts to securely attach many of the canmeras at the correct angle for 6 months. This was done on the band saw and belt sander with pine and plywood scraps, all held together with my favorite fasteners, drywall screws and zip ties.

The cans were taped to the mounts and labeled to prevent hysteria and tampering by curious neighbors. I was particularly worried the 3 duct taped cylinders attached to the street light would be mistaken for some sort of threat so I labeled the pole as well.

Installation

Here is all 9 canmeras locations after about 5 months of their overall 6 months. Others place the cameras for 12 months but I only saw the need to capture 6 months from winter to summer solstice (or vise versa) as the sun retraces similar paths twice in a year. They were mounted December 28th, 2022 just a few days after the winter solstice and collected after sunset on the following Summer Solstice, June 21, 2023.

After each camera was mounted securely, I removed the electrical tape to open the shutter and attached the tape to the can below the orange label for use when I again close the shutter half a year thereafter.

Patience

The canmeras endured sun, rain, hail, snow, heat, cold, and humidity over 6 months. I gently cleared the snow off them and shooed away many squirrels and birds. I love a long term project, it’s was exciting to monitor the condition of the canmeras, week after week not knowing if my calculations and preparation would yield decent results.

Scanning

On the summer solstice, just after sunset I replaced the tape shutter on each canmera, unmounted them, and collected them inside.

Before opening them I had to cover a window and dim the computer monitor to a minimum. I even tinted the monitor to the longer wavelength red the photo paper is less sensitive to. The photo paper is not really very sensitive which makes it perfect for this type of project. It does not change quickly but still should not be exposed to bright light unnecessarily. It’s also nice that the photo paper does not strictly require developing, the negative image is clearly visible and can be scanned directly, though you could fix and develop the image on the paper if you wanted to.

The moment of truth: opening the canmeras. Despite my best efforts to seal them against the weather, all the cans had water in them. I wonder if the water seeped in through the seam or through the pinhole, or if it condensed from the air inside the can. I don’t know, but I may try to incorporate a light tight drain and desiccant into future attempts. Those mounted vertically had a small pool in the bottom, those more reclined soaked the photographic paper causing extensive damage usually along the center of the image. Even though the damage was not anticipated, it added some interesting texture to some of the prints that somehow complimented the natural organic nature of the intended images.

I carefully opened each camera, removed the photo paper, blotted it dry and scanned it in a flat bed scanner. I scanned each picture in both color and black and white at fairly high resolution. I had to clean the glass of the scanner between each scan to remove residual moisture.

I made a darkened envelope by lining an envelope with black construction paper to store the original exposures. I numbered the back of each one and layered them with paper towels. When done I placed them all in the blackout envelope with some desiccant packets to dry them out. Several weeks later I re-scanned all the images but I think the originals are subjectively better.

I brought each image into Gimp photo editing tool where I cropped and oriented image, then finally got creative with color curves to achieve the final aesthetic.

Results

  1. This one was on the mailbox pitched up 15 degrees facing south. You can barely make out the boxy shadow of the house in the bottom of the image and can clearly see the trees in the foreground. I really like that in many of these photos the trees and bushes lack foliage in the winter time when the sun is low and as the sun climbs in the sky you can see the shadows of growing foliage over the spring season. Some water damage at the bottom and on the right edge compliment the presence of tape in the lower corners bringing the natural subject, the impact of the water, and the mechanical methods used to capture this print together.

2. Light pole flat facing west. These are all the sunsets looking down the street I live on. Again I like to look at the trees on the horizon and how the leaves fill in from left to right in the paths of sunlight.

3. Light pole flat facing east. Half a year of sunrises. Note the boxy shape of the street light on the pole at the top of the image I think is the shadow of the light on the bright sky.

4. Light pole facing south standing pitched back 22 degrees. Here you can clearly make out the houses at the bottom. The houses have better vertical resolution and seem blurry from left to right which I wonder is from the swaying of the pole in the breeze. There is some light leakage, maybe from the inside of the aluminum can. Maybe in the future I should paint the interior of the can flat black to prevent reflections of the bright sky off the aluminum interior of the can.

5. Back yard east fence facing south inclined 20 degrees. The water damage starts to have more of an impact giving burnt film and oil bubbles psychedelic vibes. The houses are very clear at the bottom, being mounted to a fence post appears to have been more rigid than the light pole.

6. Backyard south fence looking straight up (I think this is upside down, the sun arcs should be at the top of the picture). I really like the composition of this one with the trees radiating from both sides of the image having a nearly 180 degree view of the sky. This is one I would prefer not to have water damage on to be able to see more of the subject but I still find it artistically beautiful, and like the contrast of the glowing sun traces, the soft projection of the image, and the sharp very closeup effects of the water.

7. Backyard fence flat pointing west. The water really got into these flat cans in back on the fence.
Here you can clearly see the shadow of an obelisk in the back yard in front of the neighbors house and the traces of 176 sunsets. I don’t understand how the light shadow of the obelisk to the right formed unless it was perhaps illuminated at night can there was a consistent thermal change in position. Interesting for sure and I would like to have been able to see more.

8. Backyard south fence, 20 degrees inclined facing due south. This one is obviously dominated by water damage and includes hairlike structures.

9 Backyard south fence, 20 degrees inclined turned west. The inclination and turning to face west moved the peaks of the solar traces left towards the east. I would have liked to seen this one with the pinhole moved further up to capture more of the foreground. The lack of focus suggest that this fence post had more wobble, perhaps due to it being on a north south fence when predominant winds are west to east.

Final thoughts

This was super fun. I like the results including the surprise water incursion. I think I’ll do it again some time, I kept all the cans and mounts and have plenty of photo paper and duct tape left. Here are some improvements:

  • Spray paint the inside of the cans flat black to prevent light leakage
  • Design and 3D print “C” shaped springy paper holders for inside the can to replace tape
  • Create a drain hole in the bottom of the can and shield it from light
  • Hot glue a desiccant packet in each canmera to try to control moisture

Things I’d like to try:

  • A box pinhole camera to see the different projection.
  • Taking shorter exposures (minutes to hours) in pinhole cameras. Of particular interest is the infinite depth of field, and that moving objects will vanish in long exposures.
  • Developing the film with Caffenol using coffee or maybe more appropriately Beerenol using beer! This is still a negative process so I’d have to do a contact print to get a 100% analog positive photo print.
  • Maybe floating a pinhole camera in water for a day, or swinging on a heavy pendulum, or on a spinning windmill, to capture one days worth of chaotic solar traces, or maybe recording a day of caustics in a birdbath would illuminate statistical trends in the surface waves.

Thanks for the inspiration Karin Majoka!

Appendix: OpenSCAD program

/* 
    Beercan Pinhole camera inclination calculator
    D. Scott Williamson
    (c) 2022 All rights reserved
*/

lat=41.860985;      // Observer latitude
incl=23.5;          // Earth inclination
cand=65;            // can diameter
canh=165;           // Can height
paperw=178;         // Ilford 5"x7" photo paper
paperh=127;         // Ilford 5"x7" photo paper
holeoffset=40;       // hole offset from center

t1=.75;//abs($t*2-1);     // ping pong animation time parameter
t1=abs($t*2-1);     // ping pong animation time parameter
cana=-lat-t1*-90;   // can pitch angle from vertical
cana2=0;            // rotation around hole
lineh=14;           // height of a line of text
$fn=128;            // facets in a cylinder

// level horizon summer sun goes way off paper
holeoffset=60;
cana=90-lat-0;
cana2=0;

// horizon dips to bottom, summer sun arcs to top
holeoffset=49;
cana=90-lat-12;
cana2=0;

// Summer and winter extents, ground off bottom
holeoffset=60;
cana=90-lat-12;
cana2=0;

// horizon  to summer extents with some margin
holeoffset=30;
cana=90-lat-22;
cana2=0;

// eye of zoron
holeoffset=0;
cana=90-lat-48;
cana2=0;

// eye of zoron horizon in view
holeoffset=-20;
cana=90-lat-48;
cana2=0;

// kind of cool extra rotation
holeoffset=0;
cana=90-lat-35;
cana2=22;



holeoffset=40;
cana=90-lat-00;
cana2=20;
cana3=00;


// can and paper
rz(cana3) rx(90-lat-cana) ry(cana2) tz(-holeoffset)  
{
    color([1,1,1]) paper();
    color([1,.5,0,.25]) tz(-canh/2) cylinder(d=cand+1,h=canh);
}
// summer 
//rz(90) 
{
    color([1,.7,0,.6]) rx(90-lat-cana) ty(cand/2) rx( incl+cana) s([1.4,7.7,1]) cylinder(d=cand,h=.21);
// winter
color([.4,.6,1,.6]) rx(90-lat-cana) ty(cand/2) rx(-incl+cana) s([1.4,5.7,1]) cylinder(d=cand,h=.2);

// horizon
color([.1,.1,.1,.6]) rx(90-lat-cana) ty(cand/2) rx(cana-90+lat) s([1.4,3.7,1]) cylinder(d=cand,h=.2);
}
// text
color("white") tz(lineh*6) tx(cand) rz(90) rx(90) 
{
    ty(-lineh*0) text(str("Earth Inclination: ",incl,"°"));
    ty(-lineh*1) text(str("Latitude:",lat,"°"));
    ty(-lineh*2) text(str("Angle:",floor(90-lat-cana),"°"));
    
}

module paper()
{
    canc=cand*PI;
    papera=360*paperw/canc;
    openinga=360-papera;
    t=.1;
    tz(-paperh/2) difference()
    {
        cylinder(d=cand,h=paperh);
        tz(-1)
        {
            cylinder(d=cand-t*2,h=paperh+2);
            rz(90)hull()
            {
                rz(-openinga/2)cube([cand,1,paperh+2]);
                rz(openinga/2)ty(-1)cube([cand,1,paperh+2]);
            }
        }
        
    }
}

module t(t) {translate(t) children();}
module tx(t) {translate([t,0,0]) children();}
module ty(t) {translate([0,t,0]) children();}
module tz(t) {translate([0,0,t]) children();}
module r(r) {rotate(r) children();}
module rx(r) {rotate([r,0,0]) children();}
module ry(r) {rotate([0,r,0]) children();}
module rz(r) {rotate([0,0,r]) children();}
module s(t) {scale(t) children();}
module sx(t) {scale([t,1,1]) children();}
module sy(t) {scale([1,t,1]) children();}
module sz(t) {scale([1,1,t]) children();}
module c(c) {color(c) children();}

Dust be GONE! Makerspace woodshop gets a new dust collector.

Workshop 88 would like to extend a heartfelt thank you to Karl P. who generously donated a Grizzly 1HP dust collection system complete with the dust collector, bag, chip/dust separator, hoses, clamps, quick fittings, and mounting hardware. This addition is sure to benefit our wood shop users for years to come.

Karl is himself and accomplished woodworker whose beautiful work with reclaimed lumber can be seen on his Facebook page. https://www.facebook.com/reclaimedtreasuresllc
But that’s not all, he also builds custom unique shuffleboard games from reclaimed bowling alley lanes, worth checking out. https://www.shufflegamesllc.com/

Thanks Karl!

SONOS speaker API overcomes app limitations (Updated 2/27/25)

What are SONOS speakers?

I have several Sonos brand speakers in several rooms around my house. Sonos speakers are small, LAN based devices. There’s a Sonos app for your phone or computer.  With the app, you can control what sound files play on the speakers. The files can come from a streaming service like Spotify, an Internet radio station, an audio book service like Audible and Libby, and just plain, old music tracks that you downloaded or ripped from vinyl, cassette, and CD (follow the links if you’re too young to know what those are).

The speakers provide a flexible listening experience. You can group speakers together so that all the speakers are playing the same thing — in perfect sync! You can have multiple groups — e.g., one playlist running on the 2nd floor speakers, a different playlist simultaneously running on the 1st floor and a third running in the basement. Speakers can either be a mono or paired together into stereo left and right. You can even play a separate playlist on each speaker. This is all controlled via the app.

What’s not to like?

As much as I like Sonos, I don’t like the app. It’s difficult to find the functions I want to perform. Certain functions are missing. To wit: Every speaker can be set to a different volume level, but there are times when I want to set the volume on all speakers to the same value. For example, when I want to play soft background music during a house party. The app requires that I set the volume for each speaker individually. I’d much prefer a button that says “Set the volume on all the speakers in <<group>> to the same level as the group’s softest/loudest speaker.”

What to do?

So I searched for “Is there an API to control SONOS speakers?”. It turns out there is! But it’s quite complex. So I asked, “Is there a Python library for the API?” AND THERE IS! It’s called soco and was written by a group of SONOS fans.

Here are some of the functions:

  • Get a list of all speakers/groups
  • Get a list of playlists
  • Get the list of tracks queued for a speaker/group
  • Send a playlist to a speaker’s/group’s queue
  • Get/Set the volume on a speaker
  • Play/Pause the queue of a group/speaker

I quickly wrote code on my laptop to implement my “volume” function. But I wanted more.

What else?

My wife wants to blast her workout playlist when she’s in the home gym. But she struggles with the app more than I do and usually has to ask me to do it for her. So I wanted to give her a button on the wall of the gym that she could push. The button would send her workout playlist to the “Gym” group (clearing whatever might have been queued there previously), shuffle the queued list, turn up the volume and starting playing. It didn’t take long to complete the code on my laptop. But how to run this from a button press on the wall?

My first attempt was to migrate my “workout” code from my laptop to a Pico W. Total failure. The Pico runs micro-python or CircuitPython — neither of which can support the soco library which has a very deep dependency list.

Attempt 2: Migrate to Raspberry Pi Zero W. That actually worked, but, as small as it is, the Zero wouldn’t lend itself to a button on the wall.

Attempt 3: I recently learned how to use MQTT and I have a broker running. So I figured to use the Pico W for the button on the wall. On push, it would publish a “sonos/play” message. The MQTT broker sends that message to the RPI Zero W subscriber. The RPI Zero then makes the calls to the SONOS. That worked wonderfully. The only thing that remains is getting the subscriber on the Zero to start up and stay active after a reboot and to make a container for the Pico/button.

Let the music play!

Enclosure

After several prototypes using card stock, I made a case for the circuit. I used the free BOXES.COM tool. Once you choose the kind of enclosure, (closed box, hinged box, drawer box, etc.) you fill out a form with the box dimensions. I picked a closed box and set height, width and depth measurements in millimeters. There are a few other options that deal with kerf, material thickness, etc. Then I downloaded a cut sheet in .svg format and fine tuned it in Inkscape. Fine tuning consisted of adding labels and cutouts for the components. I sent the .svg to the laser cutter and ended up with:

a finger joint box. Of course, it wasn’t until after everything was cut that I noticed the knot right where the title is.

While I was at it, I created boxes for my CO2 monitor and my display that cycles between outside temperature and wind chill.

One simple organizational trick will invert how you see boxes

Make empty boxes go from the one on the left to the one on the right!

I’ve been obsessed with this simple trick for reusing empty boxes to hold small pieces around my home workshop. I have always tried to hang on to sturdy boxes (shoe boxes, for example) to repurpose, but I was never happy with how visually cluttered shelves would be with the various box colors, labels, and logos.

Then I realized that many boxes can be unfolded and then inverted! Here’s how I did it with boxes for 3D printer filament:

This style of box is sometimes referred to as a top tuck shipping carton. The key feature is that the box uses no glue to hold it together. There is a slot on each side of the bottom of the carton. You can see in the first photo that I’m using a screwdriver to push the tab out of the slot without bending the cardboard too much. After releasing both tabs, it is just a process of completely unfolding the box and then refolding the box with the printing on the inside of the box.

After you try this a few times, you will see boxes you can reverse everywhere!

You will also be annoyed when you find boxes that have been glued together and cannot be so easily inverted.

Polymaker Sponsors Workshop 88 Makerspace

We’d like to welcome Workshop 88‘s newest sponsor: Polymaker!


We’d like to thank Polymaker for helping Workshop 88 makerspace achieve our mission of providing tools and technology access to makers. Watch for ingenious new Workshop 88 projects using Polymaker 3D printing filaments.

https://polymaker.com/
Polymaker is a developer and manufacturer of 3D printing materials committed to innovation, quality and sustainability. Its award-winning product portfolio has enabled numerous individuals and companies to better create and make.
US Store: https://us.polymaker.com/
Canada Store: https://ca.polymaker.com/