Close
0%
0%

HULL/20: a flying saucer for a driveway spaceport

A 7-foot flying saucer with 1,406 LEDs, built in a driveway with my tiny flight engineer, for a Halloween spaceport.

Similar projects worth following
0 followers
Every October I build something in the driveway. This year it's a 7-foot flying saucer: an 87-inch octagon of 2020 aluminum extrusion with a clear dome, an inflatable alien pilot and 1,406 LEDs on an Arduino Nano ESP32. It idles like a turbine, looks around with a big eye in its belly, and every few minutes runs an 11-second abduction. It faces the street, so nothing on it flashes faster than three times a second.

It's part of HULL/20 Spaceways, a made-up 1964 airline with one gate in our driveway. There's a 1,500-LED departures board over the garage, LED eyes in the garage door, a Gate 20 kiosk with announcements, and websites for the neighbors: an airline site, a passport office for kids, and a Santa depot for December.

I built it with my son Linux, my tiny flight engineer. He's three, he has a say in every creative decision, he's fluent in planetary nomenclature, and he can't stop laughing at Uranus. He did the final flight check and then made first contact.

I do something big in the driveway every October. Last year it was a banner of 1,500 LEDs over the garage and a small saucer. This year the saucer got serious: an 87-inch octagon of 2020 extrusion with 1,406 LEDs, and the garage got a fake 1960s airline built around it, HULL/20 Spaceways.

This page is the technical side: the frame and cut list, how the LEDs are wired, the controller, the show logic, the flash-rate math, and the OTA problem that took me a while to figure out. The project logs have the build in date order. If you want the version without any wiring, there’s one at spaceport.neighb.io/build.

What’s in the driveway

  • Saucer: an octagon of 2020 aluminum extrusion, 87⅛ in across the flats, a clear 24 in dome, an inflatable alien pilot, and 1,406 LEDs on four data lines from an Arduino Nano ESP32.
  • Banner: 1,500 WS2812B (300 x 5, serpentine) on a Seeed XIAO ESP32-C6 over the garage. Quiet scenes most of the year, a departures board in October.
  • Garage eyes: two 16x16 WS2812B panels behind two of the garage door windows, on their own XIAO ESP32-C6.
  • Gate 20: a Raspberry Pi 4 and a 15.6 in USB monitor, held up by an inflatable alien. In the second half of October it gave out passport stamps, a different planet every hour.
  • Mission control: a web page and a phone app I run the yard from (scenes, brightness, floodlights).

3,418 LEDs total: banner 1,500; saucer 440 + 115 + 480 + 241 + 128 + 2 = 1,406; eyes 2 x 256 = 512.

The websites

The sites took about as much work as the hardware, and for a lot of the neighbors they’re the main event.

spaceport.neighb.io is the airline, written as a 1964 airline ad for flights to the planets (“Saturn by Saturday”). The split-flap departures board runs on the visitor’s own phone clock, with a departure every twelve minutes from dusk to 11 pm, so there’s always something about to board. There are destination posters, a fare table where every flight number is a date, a crew page and a cabin menu. Baggage allowance is one towel.

planethopper.neighb.io is the passport office, for the kids. You pick one of nineteen destinations and get a passport. In October the stamps came from a code on the Gate 20 screen that changed every hour, so you had to actually come by. Right now it gives you a new star each night you open it. It all stays in the phone’s browser. Nothing gets uploaded, and if you share a link, the passport is in the link itself.

sleighport.neighb.io is the holiday version, Santa’s Space Cargo Depot. Its depot board uses the same 5 x 4 grid as the garage door windows. From 1 to 24 December kids can post letters to Santa at Gate 20, either in the real mailbox or by drawing one in Planet Hopper and scanning the screen, and the saucer picks up the mail at 7 and 8 pm. Letters drawn in Planet Hopper never leave the phone.

spaceport.neighb.io/pass goes with the boarding pass PCB (more on that below). Plug the pass into a phone charger, touch both halves of the gold disc and the beam lights up. The page explains why: two transistors stacked for a gain of about 10,000, running on the tiny current through your finger.

spaceport.neighb.io/build has this write-up in two versions, one with no wiring at all and an engineer’s version with the drawings and the math. /build/3d has next year’s refit as a 3D model you can take apart.

The phone app is styled like the Gate 20 departures hall too.

Simulate first

The banner firmware compiles against a stubbed FastLED and runs in a browser simulator that also models wire time. A WS2812B bit is 1.25 µs, so 30 µs per LED, and 1,500 LEDs on one line is 45 ms plus the latch, about 21 fps max. I’d rather find that out at a desk than up a ladder. The same engine runs on the board, in the sim and in the phone app’s preview, and the preview caught a real bug before it shipped: after the overnight sleep, the autopilot never woke back up.

The saucer show went the other way. I wrote it in JavaScript first, as pure...

Read more »

  • 20 × 2020 aluminum T-slot extrusion 1,220 mm bars
  • 8 × 135-degree corner brackets 2020
  • 88 × M6 tapped ends M6 screws as needed
  • 920 × WS2812B LEDs 60/m IP67 strip (440 rim, 480 spokes; reused)
  • 115 × RGBW LEDs warm white strip (dome lip; reused)

View all 21 components

  • 6 November: holding up, OTA fixed, ready for the holidays

    0xdxn • 3 hours ago • 0 comments

    Quick status update. Since Halloween the saucer has been through heavy rain and wind with no problems.

    OTA works again. The Wi-Fi out at the saucer drops packets for one to three seconds at a time, and the updater was giving up before the link came back. It now waits up to 10 seconds, and this week's faster candy cane pattern went up over the air without me getting the ladder out. If a new build can't get back online within ten minutes, the board rolls back to the previous one by itself.

    It's running the holiday look now: red and white candy cane stripes, a gold glow in the belly, and holiday animations in between. The yard floods have a fall set and a holiday set, so it's ready for both.

    Supercon is in Pasadena this weekend and I'm in town too. Tickets sold out before I got one, so I can't get in unless Hackaday opens up another spot, but if you're around and want to talk saucers, send me a message.

  • 1 November: it's staying up

    0xdxn • 3 hours ago • 0 comments

    People keep telling me this is a lot of detail for something temporary. It isn't coming down. The saucer is staying up through the holidays.

    Next year it gets a new skin: sixteen frosted polycarbonate panels top and bottom, each on stainless standoffs with an 8 mm gap to the next, lit from inside. Aluminum plates replace the ¾ in plywood ones, and the dome lip bolts straight to the deck.

    Before cutting anything I modelled the whole ship to scale. Every panel and plate is traced from its cut file, and the frame is drawn from the one flying now. You can take it apart, put it back together in build order, cut it in half through a spoke, or turn the lights off at spaceport.neighb.io/build/3d. It runs in the browser, nothing to install.

  • 31 October: Halloween night, in the rain

    0xdxn • 3 hours ago • 0 comments

    It rained on Halloween. The saucer ran all night without a glitch. I'd put a bead of silicone on every wiring joint during the build, and it paid off.

    The Gate 20 screen didn't do as well. Around 8 pm, right when people were walking up, it went to "delayed" and the QR code disappeared.

    What happened: the Pi lost its IPv4 lease but kept its IPv6 address. NetworkManager still considered the connection up, because it was allowed to come up on IPv6 alone, so it never asked for a new lease. Without IPv4 the fetcher couldn't reach the server and no new codes came in, and after five minutes without one the page stops showing a code it can't verify. That part worked as designed.

    I fixed it remotely, so I didn't have to carry a keyboard out into the rain. The connection now requires IPv4 and retries forever, and a small watchdog checks once a minute and brings the connection back up if there's been no IPv4 default route for two checks in a row.

  • 30 October: announcements

    0xdxn • 3 hours ago • 0 comments

    A spaceport without announcements is just a driveway with ambitions, so it got eight voices: a gate agent, Captain Vrell, passport control, a purser, the adverts, paging, a robot called NAV-20 and the tower. Each has its own chime. They're all generated locally with Kokoro TTS and run through a filter chain meant to sound like a 1960s terminal PA (narrow band, a horn resonance, slap-back echo).

    Under them there's a 27 second HULL/20 theme I synthesised in Python with numpy and scipy, no samples: theremin, walking bass, brushes and FM electric piano at 100 BPM.

    There are 36 announcements. Pluto is still a planet. Flights to Andromeda are cancelled, because Andromeda is coming to us. Lost and found is holding one towel.

    I ran every line through Whisper with the music underneath to check it was understandable. It heard "Hall 20" for HULL/20, so the script now spells it "Hull, twenty,". It also kept dropping the s on "Spaceways" until I slowed the line down and ducked the music harder.

    In the yard it plays through a wired speaker on the Gate 20 Pi's headphone jack: a quiet background bed with the saucer idling, an announcement every minute or two, and "Lights down at eleven" at 11 pm. The film on spaceport.neighb.io/build has the sound.

  • 29 October, night: maiden flight

    0xdxn • 3 hours ago • 0 comments

    Maiden flight tonight, in the rain. It hung over the garage lit from below, with the banner and the eyes behind it, and every few minutes it ran an abduction.

    That night I held Linux up under the saucer and he reached up and touched it.

    First contact.

    He has since been abducted by the maker bug.

  • 29 October, morning: OTA keeps failing

    0xdxn • 3 hours ago • 0 comments

    Eleven OTA updates in a row stopped partway, each at a different point. The board is inside an aluminum frame, an aluminum box and shade cloth. The only one that ever landed out there had USB power plugged in as well. For now updates go over the cable, and the current firmware turns Wi-Fi power saving off. Each build prints its build id at boot, so I know exactly what's running. In space, no one can hear your Wi-Fi.

    Update, 6 November: fixed. See the latest log.

  • 27 October: keeping it under 3 flashes a second

    0xdxn • 3 hours ago • 0 comments

    The saucer faces the street, so I wanted nothing on it flashing more than 3 times a second. My first version flickered at 16 to 30 Hz in places and looked more like a nightclub than a UFO. I wrote a flash counter and ran it across 300 random seeds. It found one I hadn't noticed: each of the eight portholes flashed slowly, but the ring as a whole pulsed 12 times a second. A ((1 + cos φ) / 2)^4 brightness lobe fixed it, because summed over eight evenly spaced windows its harmonics cancel and the total stays flat. The math is in the project details. Now 0 of 300 seeds go over.

  • 26 October: first light

    0xdxn • 3 hours ago • 0 comments

    The next night it lit up in the garage, all 1,406 LEDs. The firmware's count agreed with mine.

    At idle the rim turns like a turbine, with the occasional comms burst, search sweep or sputter. Every 2.5 to 4 minutes it does an approach and an 11.2 second abduction.

  • 25 October: final flight check

    0xdxn • 3 hours ago • 0 comments

    The frame came together on the driveway. Linux, my tiny flight engineer, did the final flight check on the dome. He's three, and he's had a say in the design from the start. The skin went on the same week: Aluminet top and bottom, pulled tight from the rim to the hub.

    That evening I soldered the controller, a Nano ESP32 and a 74AHCT125 on two stacked protoboards. I wrote it out as 35 steps, one wire per step, and skipped screw terminals. I also cut the fog machine and the beam pods from the plan that day. Fewer parts, fewer things to fail at 8 pm with kids watching.

    On the bench three of the four lines lit first time. The rim stayed dark. I went down the chain with a meter, found the problem at the first resistor, and after that everything lit.

  • 15 to 17 October: Gate 20 opens, then a red flag

    0xdxn • 3 hours ago • 0 comments

    Gate 20 is a Raspberry Pi and a 15.6 in screen, held up by an inflatable alien. Each evening the screen shows a code for that hour's planet, and scanning it puts a stamp in your passport with the date and time. The planet changes every hour, so a different night gets you a different stamp, and you have to actually be there to get one. No remote stamping. We run a serious spaceport.

    The next day high winds brought a red flag warning, so the screen switched to RED FLAG WARNING, FLIGHTS HELD. Passport control stayed open, because paperwork waits for no weather. The warning lifted at 8 pm on the 17th.

View all 16 project logs

  • 1
    Draw it before you cut it

    Draw the whole frame first: an octagon of 2020 extrusion, eight spokes to a hub ring on short posts, a small core ring, the dome on a deck plate. Keep every joint square or at 135 degrees and let the skin make the slope. It's stiffer, there's nothing to set by eye, and it's cheaper.

  • 2
    Cut by letter, not by bar

    Pack every piece into twenty 1,220 mm bars on a cut sheet (allow 3 mm kerf). At the saw, set the stop block once per letter and cut every piece of that letter before moving it. Tape-label each piece as it comes off. Matching lengths within a letter matter more than the exact number.

  • 3
    Tap, drill, deburr

    Tap the ends that take a screw M6, 25 mm deep (88 ends here). Drill 6.5 mm clearance holes on the center line with a drill guide; mark bracket holes through the brackets themselves. Deburr every cut straight away; the chips get everywhere.

View all 10 instructions

Enjoy this project?

Share

Discussions

Does this project spark your interest?

Become a member to follow this project and never miss any updates