The Ravenna Ultra-Low-Altitude Vehicle is a treehouse equipped to explore the lower frontier of the troposphere.
Read: in chronological order newest entries first
Read about: All entries Jon's build log Jeremy's electronics log Grandma Jan's flight suit
Treehouse origins
Wednesday, August 1, 2007 -- jonh

This story begins in Summer 2007. Eliot is five. Our back yard is mostly dominated by a rotting deck, and the few square feet left over for lawn are colonized by a knot of weeds. Christina decides it's time to landscape the back yard, "for the children." Christina shows me a sheet of paper with her plan for the yard: a modest set of stairs here, mostly lawn, a flower strip along the fence, and here under the trees: a treehouse for Eliot!

"Have you told Eliot about this already?" I ask, cautiously.

"Oh, yeah! He's really excited about it!" says Christina.

"Greeeeat." I say, realizing I've been committed. Then inspiration strikes. Unfunded mandate? Fine. "Okay, I'll build a treehouse, but I'm not going to spend a month just to make an ordinary pressure-treated-lumber-and-tar-paper monstrosity.

Nope, we're going to Boeing Surplus."

Before it closed at the end of 2007, Boeing Surplus was a staple in the Seattle maker world. There was a lot of junk there, but many reports of great finds by the patient scrounger. I live too far away to go often enough to get the really good stuff. But Eliot and I scored four big sheets of really cheap sheet aluminum (some polishing required), a bunch of smaller aluminum shelving, and three 24-foot thick-walled aluminum tubes. We strapped our loot precariously to the roof of the Ford Escort, and drove home on a non-freeway route, to prevent the airplane parts from become airborne before they were made into an aircraft.


The elegant design
Saturday, December 1, 2007 -- jonh

Now how would I assemble this scrap into a treehouse? Welding aluminum is probably more than I want to learn. I could bend and rivet it... I spent a bunch of time on the bus designing a geodesic structure that I could make by cutting triangles, bending flanges to make rigid edges, and riveting the flanges together.


I brazed together a sheet-metal bender at my father-in-law's shop.

I wasn't sure the design was going to be big enough to be fun to play in, so I set about building a full-scale model in the basement. Fir strips represented the edges, and zip-ties secured them at the vertices. I built one layer of the structure, and it wobbled so enthusiastically, I couldn't make it stand up. This experience made me doubt my extensive knowledge of geodesic structures (specifically, I had heard of them before), and sort of put the project on hold for a while. (I suspect that, had I completed the structure, it would have been somehow holistically rigid. But the balloon of enthusiasm had been deflated.)


The brute force redesign
Wednesday, April 1, 2009 -- jonh

A year went by. Eliot got older. People asked about the sheet aluminum in the garage, and I had to temper the story with caveats like "if I finish before he graduates college."

Somewhere along, it occurred to me that my prior plan had some unnecessary conditions: aluminum bend and rivet construction, an understanding of actual engineering. But this structure isn't actually going to get launched anywhere. Weight is not a consideration. Why not relax those constraints? How about I just weld together a rigid steel frame, rivet the aluminum onto that, and be done with it already?

With this new freedom, I broke out my python 3D model again. I built a simpler model, a series of tapered hexagonal prisms. It looks more rocket-y, less lunar-lander-y. In the model here, the the opening in the lower section is the "door" hatch, and the opening in the upper section in the "window" (to let in a reasonable amount of light for play). The topmost cone also hinges up.

The design called for creating in-plane quadrilateral surfaces on the metal frame, so that each aluminum panel can be riveted along all of its edges. Father-in-law Dick pointed out to me that the hack welder uses square tube, because it makes all the joints so much easier to assemble. So I designed each face to consist of three segments of tubing that share a plane with the corresponding aluminum panel. The fourth edge of the panel lines up with the (tilted) corner of the tube for the adjacent face; so a strip of steel is welded onto that tube to complete the quadrilateral. This made for a minimal number of components.

The next challenge was figuring out how to cut the correct angles on the ends of the tubes. I'm pretty good at working out the side-length trigonometry for the wire frame, but those compound angles really made me dizzy. I had a bill-of-materials spreadsheet that converted coarse measurements ("bottom segment has radius 24 inches") into lengths and quantites of square tube. I extended it to also tell me what compound angles to cut on the end of each tube.

The math was hard enough that I was still unconvinced that it would work on real metal, so I then built a little python script that simulated the effect of each cut on the miter saw, and emitted a PostScript page that cuts and folds into a paper model.

One tube on each face requires two compound cuts on one end, to provide clearance for the bottom edge of the adjacent face. The math was indeed hard; the paper models showed an error on pretty much every step.

I dropped a couple hundred bucks on steel at Everett Steel. I suppose this is a good place to go if you're, you know, some sort of industrialist who actually builds things with steel. The guy behind the desk always seemed to be "swamped" with work, in a union-employee sort of way that meant he could talk to me for 10-15 minutes about why he hadn't even pulled my order off the teletype yet. The yard guy, on the other hand, was much cooler; I think he enjoyed the absurdity of putting a few hundred pounds of steel on the roof of my Ford Escort and watching the suspension droop.


Cutting the compound angles was itself a trick, since my Harbor Freight metal cutoff saw offered only a simple miter fence. I solved this by building tilt jigs. I computed the compound tilt angles I'd need, collapsing a few close angles together. The angles came in complementary pairs, since the miter fence has a reasonable range of +/-45 degrees, but tilting can easily pass through all 90 degrees. For each of the four complementary angle pairs, I set the table saw tilt to the smaller of the two angles (that is, the one the saw could tilt to), and ripped a strip of 2x2 lumber so that the saw came out through the corner. The two strips could then be glued down to a flat strip of wood, leaving open a right angle tilted at the requisite angles.


I built the lid layer first, because it was the smallest, least sensitive to sloppy construction, and wasted the least steel if I blew it. I didn't quite blow it, but it certainly didn't come out very straight.

From the twisty construction of the lid, I understood my mistake. First, I'd established the angle between the edges on each individual face just by the miter angle cut into the tubes. There was enough error in this angle that, once welded, it was impossible to assemble the final 3D structure to the right shape. Second, it was hard to even hold the six faces together long enough to tack weld them; just too many moving parts. Magnets were no help, since the tubes were never coplanar or perpendicular.

So, for the next section, the lower section, I built an 8x8 platform from a couple pieces of plywood and some studs. I screwed pegs down to the panel to make a jig, holding each tube at the precise final-assembly angle, and tack-welded them in place. (I did more than tack weld, until I realized that the smoking plywood was probably interfering with the weld quality.)

Then, to solve the challenge of holding all six pieces in place simultaneously, I laid out the hexagonal base of the prism on the plywood platform, screwed in pegs around the perimeter, and propped the C-shaped faces up in the hexagon. This worked much better than trying to freehand 30 degrees of freedom. Imprecision made it inclined to pop out of shape, but my friend (no, not the first-grader pictured here) stood in the middle to hold things in place while I tacked the joints. The final assembly came together quite nicely, and we got to see the basic chassis together for the first time.


By the way, I wondered before starting this project whether I could get away with the cheeseball Harbor Freight welder that goes on sale for $90 every so often. I learned stick and gas welding in high school. A few years ago, I picked up the electrode again to make a ridiculous tandem bicycle, the local welding store rented me a Miller 110V MiG setup with gas. It was wonderful, but also wonderfully expensive; $480 back then, and already up to $700 these days. The Internet isn't kind to this welder. "Dangerous," they say (the tip is electrically hot whenever the power switch is on, not just when the trigger is pulled). "Poor duty cycle." "Ugly welds." Well, the dangerous part is right; no excusing that. So far, I've only ever tripped the thermal overload switch (amazing that it has one..) a handful of times, so the duty cycle just hasn't been an issue for my hobby-level work. The welds are indeed ugly; there's quite a lot of spatter when welding at the high-current setting. The gas-shielded MiG was quite a treat; a rank amateur could really run a decent bead with only twenty minutes' practice. The Harbor Freight welder is quite a lot messier, and you pay for it in time spent with the $15 Harbor Freight angle grinder. Still, for a guy goofing around in the garage, you can make a lot of progress for $90. (Add another $100 for a decent helmet, respirator with appropriate filters, gloves, and a high-current extension cord.) I've pushed about eight pounds of wire through my welder already.

Next was manufacturing frames for the door and window hatches, and hinges for those and the lid hatch. This took longer than you'd think for the amount of metal involved. Here's a tip when drilling: clamp that metal down really well, or you'll blast lots of drill bits apart. I welded pairs of tabs where the top and bottom segments meet, so I could bolt them together. Next, I welded 1"-wide strips of 16-gauge sheet metal onto the chassis to complete the fourth (right) edge of each planar face.


The gantry
Monday, June 1, 2009 -- jonh

Then I turned to the "gantry", the triangular pyramid that holds the rocket high off the ground. Before welding, I match-drilled each steel angle to a matched length of aluminum tube. The biggest trick, again, was building alignment jigs on the plywood platform to hold the tilted members in place while they're tack welded.
The completed frame is a rigid, gusseted triangle. The aluminum tubes bolt into the corner sleeves of angle iron. The opposite ends bolt to concrete pier blocks which will be buried, adding further rigidity.
I climbed up on the assembled gantry, and it was pretty solid. If I shake vigorously, I can get the aluminum tubes to wobble a little, but the geometry makes it pretty difficult to put them out of column or make them buckle. I think this is pretty much how NASA designed the Gemini vehicles: they'd weld something together, and then an engineer would clamber on top, wiggle around a little, make some erudite comments, and pronounce it flight-ready.

The main chassis is beginning to rust in earnest; I'm eager to complete the welding work so I can get it painted. Jeremy found me some cutoffs of thick expanded steel for only $40 on craigslist. The guy was in Bremerton, but no problem: Jeremy also flew me over to Bremerton airport (KPWT) in his Cardinal. He took the seller's kid on a trip around the pattern, then we wrapped the steel in a tarp to avoid snagging the plane's upholstery, and flew it back home. Ah, the $100 craigslist bargain. I've welded a joist across the bottom hexagon, and cut two panels of expanded steel to serve as the floor.


Rust
Saturday, July 25, 2009 -- jonh

Today I used naval jelly to clean the rust off the bottom tubes of the floor section, then trimmed the expanded-steel floor panels and welded them into place. I'd done a poor job on one panel (before I figured out to test with a cardboard mockup first), leaving a half-inch gap that required some ridiculous fill-welding. After a few hours of welding, grinding, and wire-brushing, I went after the whole thing with naval jelly (sulfuric and phosphoric acid that dissolves rust). Paint paint paint, scrub scrub scrub, then a good hosing down. Wow, so shiny! Wait, what's happening? The whole thing is turning orange! Even the parts that weren't rusty before! Wait! STOP! <reverb>Nooooooo!</reverb>

I have no idea what made the chemistry go so horribly wrong. I wire-wheeled much of the light layer of orange stuff off, but with all the surface area of the expanded steel, and lots of tight corners, I pretty much destroyed the wire wheel. I decided that it would have to do, and laid down a thin coat of primer over most of the surface with a spray gun. Twenty minutes later, it began to rain. Sheesh.


Anti-rust
Sunday, July 26, 2009 -- jonh

The idea of letting the other stuff rust got to me. I started the day blowing $160 at Harbor Freight (four more pounds of weld wire, three more wire wheels, metal polishing tools...) and Home Depot (naval jelly, primer, mineral spirits, galvanized bolts). Then I cleaned the rust off the rest of the completed parts and gave them a coat of primer. There are a few places I'll have to scrape the paint off and weld in a bolt point, but better that than more rust.


Entry rope ladder
Saturday, August 8, 2009 -- jonh

And by "rope", of course, I mean "steel cable". Last week I picked up stainless steel aircraft cable from Harbor Freight. West Marine wanted $1.50 apiece for sleeves and stops in individual baggies; I ended up ordering aluminum ones by the box from McMaster-Carr. Eliot and I rode to Home Depot last night to pick up a crimper; at $30, it beat the $187 Nicopress branded crimper. How can Harbor Freight not stock this particular type of fastener?

We cut up some 3/4" steel stock and drilled them to make rungs for our "rope" ladder, and made the weld-on tabs that the ladder will hang from.


Window screen
Saturday, August 15, 2009 -- jonh

The window face will be open about nine feet off the ground, and I know that if I didn't protect it, someone would be tempted to try to climb out there. I would, if I were seven. The screen is a 3/4" steel frame around a panel cut from the last sheet of expanded steel (use the whole buffalo, I've always said).

It drops into these angle brackets and bolts in place.


Since I had the welder out, I also welded on the eye tabs that the rope ladder will hang from.


Weld-on tabs
Sunday, August 23, 2009 -- jonh

I sketched out some very rough dimensions for the astronaut couch, the paint shaker mount, and the interior ladder that leads to the upper hatch. I cut and drilled tabs for each (a total of nine tabs), and welded them on to the main chassis components. After lupper, I cut and welded together the interior ladder, too. All of today's work needs to be grounded & wire-wheeled, but once that's done, I'll be able to paint the main components "for real", which means it'll be time to rivet on the body panels! Whoo!


Primer
Sunday, August 30, 2009 -- jonh

I ground and wire-wheeled the window screen and the ladder, plus the spots on the main chassis that had tabs attached. I primered all the parts. Boring work, six hours, but important. When I got done, Jeremy had checked in with his avionics work for today, an early draft of the PCB layout.


More primer
Friday, September 11, 2009 -- jonh

Friday and Saturday: I did a bunch of priming. I discovered that the spray paint gun works a lot better when you clean it out. I think priming is finally done; Jeremy popped in, and sanded the ugly off of one of the aluminum tubes. He commented that the "electronics cabinet" was coming along nicely.


Paint
Monday, September 14, 2009 -- jonh

It's going to rain Wednesday, so I stayed home this morning and spent three hours putting on a quart of black paint -- and that's only the first side.


More paint
Tuesday, September 15, 2009 -- jonh

Got the rest of the black paint dispensed. I used a little paint thinner this time, and the paint came out of the gun much more enthusiastically. Wish I'd tried that many paint-hours ago.

Jeremy convinced me to buy from ebay a set of five electrically-triggered solenoid valves, to enable the electronics system to control the various pneumatic functions. His argument was that I'd spend almost as much rigging them mechanically anyway, and that once I attached the valve, everything on the "electrical side" becomes his problem. :v)


Solenoid valves
Friday, September 18, 2009 -- jonh

The valves came today. I tore open the box, trundled down to the garage right away, and plumbed one together. Here's a lousy video clip showing the instant gratification. This rocket is going to be sweet. Jeremy reported at work that the v1 PCBs came today, too. Yaaay!


Software: scheduler and window manager
Saturday, September 19, 2009 -- jonh

Drizzly rain kept me from cutting aluminum today, but I did spend several hours on the software, programming against Jeremy's simulator. I wrote a nice modular event scheduler (fashioned after Bill Bolosky's Farsite scheduler), and an "overlapping windows" display driver. Jeremy sent back a video of my brand new code running on the real hardware!


First rivet!
Sunday, September 20, 2009 -- jonh

Sunny again. I tidied up the code some more over breakfast, then broke out the sawhorses and started working on the aluminum panels. I test-fit with some cardboard, then cut the real thing. A lot of Formula 409 and elbow grease took care of the red "ALCOA" printing. There are lots of other ugly blemishes on the aluminum I haven't figured out how to polish out, so they're staying there. We riveted on the first panel -- a moment Eliot has been waiting for for a long time!


Prototype PCB
Friday, October 2, 2009 -- jonh

I've written quite a bit of the software stack here and there over the last few weeks. Last week, Jeremy gave me a zip-loc baggie containing one of his v1.0 rocket control panel boards, plus all the components needed to populate it. I finally had time to build mine today, just after building my adafruit AVR USB programmer dongle. It's gorgeous! I phoned Jeremy to share the joy of the "first boot" moment.


Aluminum panels, booster bracket
Saturday, October 3, 2009 -- jonh

I worked an eleven-hour day today. About eight hours went into cutting, filing, sanding, cleaning, and polishing ten aluminum panels, completing the dozen main body panels. (That leaves six small panels to go, the ones that cover the lid hatch.) They're cut but not installed; I'm expecting Eliot will want to help with riveting.

I also sanded the last aluminum leg, so I'm ready to bolt all three to the gantry and dig the concrete pads into place in the back yard.

Three more hours went to making the main booster bracket. I computed the final dimensions, cut the steel, drilled holes for bolts that attach to the paint shaker and to the tabs on the gantry, and welded it to shape. It still needs to be ground and painted, but it's far enough now that I can bolt it onto the rocket to try it out (whee!) and measure for the pneumatic plumbing.


HPAM test, riveting, and software
Monday, October 5, 2009 -- jonh

I spent this morning writing code for the rocket, mostly cleaning up the, er, video driver.

Jeremy showed up about 10:20 to test his High Power Auxiliary Module, the hand-built protoboard that takes signal-level outputs from the microcontroller board and switches transistors to drive higher current devices, like the solenoids. We tested the paint shaker (video), and got some satisfying blasts out of the thruster jets. Then I ruined one of the jets trying to "improve it" in the shop.

After Jeremy headed out, Eliot and I riveted two panels onto the lower frame.


More panels
Wednesday, October 7, 2009 -- jonh

I riveted on two lower panels before lunch.


More riveting with Eliot
Saturday, October 10, 2009 -- jonh

I picked up a new long-handled riveter this week, so Eliot would be able to pull rivets. He woke me up at 7:10 this morning to get started. We put on the last lower panel and another upper panel, and Eliot pulled almost all the rivets himself. He did a great job with a tool that's a good fraction of his own length.


More panel riveting
Thursday, October 15, 2009 -- jonh

I got back from a conference in Montana last night. Tonight, we tucked the girls in bed right after dinner, and Eliot and I headed down to the shop to rivet the rocket door -- too dark outside to work on the main chassis. Eliot measured, center-punched and pulled every rivet on the door tonight.


More panels
Saturday, October 17, 2009 -- jonh

I snuck out to the back yard after one torrential rain, and managed to put on two more panels on the upper ("torso") layer of the rocket, the biggest panels. I made a big mess with the silicone on the second one. Just as I was finishing, the next torrential downpour arrived. Whew. There's only one more of those to go, plus the window panel (which Eliot and I can do in the shop).


Assembly!
Sunday, October 18, 2009 -- jonh

A very big day today. In the morning, I riveted on the last panel on the torso section. Jeremy called to say he and Alex could come over later to help with an old-fashioned community rocket-raising. So I focused on critical jobs: I dug the holes for the footings and leveled them, and replaced the dozen leg-to-gantry bolts with 1/2"-longer ones that left room for washers. With more time left to go before they arrived, I cut and welded some extra bracing onto the paint shaker bracket, hoping to lose less vibration to the springiness of the bracket. Finally, Eliot and I riveted the last big panel onto the door for the torso hatch (aka window).
Jeremy and Alex arrived, bearing cupcakes to celebrate the momentous milestone. Eliot and I spent another fifteen minutes pulling the rivets on the window before the silicone set. Then we all went outside. We spent a few minutes trying to figure out how to actually get the 80-pound torso section onto the hip section: Should we bolt it together first and tip the entire 15-foot structure up and carry it into place? Or should we right just the legs-and-hips section, leaving us with the challenge of lifting the torso section ten feet up to its mounting spot?

We settled on the latter plan. The three of us had no problem righting the legs-and-hips section, and then trotting it across the yard to the concrete footings. We bolted the legs to the footings, and within moments Alex and Eliot had clambered into the rocket, seven and a half feet high.

Jeremy and I inverted the torso section, and held its open edge up to a matching edge of the hip section. Alex and Eliot turned a couple straps into an ersatz hinge. Jeremy ran a strap from the inverted top of the torso up to Alex. Jeremy and I swung the torso halfway up, so that it was lying sideways, then Alex pulled his strap to right it the rest of the way. We hacked a few cedar sprigs out of the way, and bolted on the torso.


I brought out the entry hatch (at the hip level), hung it on the hinges, and secured it with cotter pins. Next came the window hatch (with the silicone still wet), followed by the window screen.

Wow! It stands up nice and high, and sure looks like a rocket. What a cool treehouse. Today's a big day.



Rope ladder assembly
Monday, October 19, 2009 -- jonh

Eliot, Chase and I spent the pre-bedtime period putting together the main entry rope ladder.


Parts painting
Thursday, October 22, 2009 -- jonh

I primered the paint shaker hangar and the thruster mounting brackets. Painting just a few things is a huge hassle: 15 minutes to get everything out, and another half hour cleaning the sprayer and putting everything away; a lot of overhead for a few square inches of painting.


Ladder foundation; paint
Saturday, October 24, 2009 -- jonh

I buried the block that steadies the rope ladder, and put the paint coat on the hangar & brackets. To cut down overhead, I tried painting with a refillable spray-paint style bottle, but it "sprayed" in ridiculous big blotches rather than a fine mist. So, another hour on cleaning stuff. I think future small parts will just get the paintbrush treatment. I also got half of the aluminum skin prepped for the upper (lid) hatch.


Lid panels
Sunday, October 25, 2009 -- jonh

Enthusiastic rain kept Eliot and I in the basement, where we measured and cut the rest of the skin for the lid.


Handholds and latches
Monday, October 26, 2009 -- jonh

In the easy chair, I wrote rocket pong.

After Eliot was in bed, I went down to the shop and cut up some steel to make handholds and latches. I love making the beefy handholds from 1/2" steel rod, because step 2 is clamping rod into a vise and beating the baloney out of it with a sledge hammer. If it ends up the wrong shape, you clamp it differently and then beat the baloney out of it with the sledge hammer. It's nice when you run across problems so simple that you can fix them with a sledge hammer.


Handles, plumbing procurement
Tuesday, October 27, 2009 -- jonh

I had an unrestful night and didn't feel so good in the morning, so I stayed home today. One thing led to another, and I found myself in the shop, welding those sledge-hammered handles together and putting on a coat of primer. (I still stand by my decision, though -- I had plenty of opportunities to rest today, including in the rest-room.)

I parted with $100 (what we're coming to call a "rocket nickel") at Morgan's Plumbing, Home Depot, and Lowe's, collecting all the goofy little fittings I need to transition between 1/4" NPT air fittings, 1/2" sweated pipe (cheap!), and 3/8" compression fittings (adjustable). Strangely, one specific fitting was out of stock at all three stores. I hope no-one else is building an identical rocket just down the street.


Riveting the lid
Friday, October 30, 2009 -- jonh

Got the babies in bed, then Eliot and I scooted down to the basement. We bent up the rest of the aluminum lid skin. We read a book and tucked Eliot into bed. Chase appeared shortly thereafter, so he got pressed into rivet-pulling duty. The lid is done!


Lid installed; ladder lock
Saturday, October 31, 2009 -- jonh

In the morning, I had to retire Halloween block party duties, mowing the lawn and putting up a shelter for the cider stand. Then back to work on the rocket!

I installed the finished lid on the rocket, cotter-pinning the hinges, and made tabs for the lid-limit cable. Then I built the over-center lock for the inside ladder. That took three tries (measure thrice, cut thrice, I always say): On the first try, the linkage tried to fold itself outside the aluminum panel. I adjusted the lengths, and on the second try, it tried to fold itself the other way, through the ladder pole. The third time was a charm; it's now ready to tap, paint, and bolt into place.


Plumbing
Sunday, November 1, 2009 -- jonh

Lots done today! The entry handholds are bolted into place, so climbing into the rocket is now much easier. The entry hatch has handles to open and close it, and there's a magnetic latch to hold the main hatch shut. (Unfortunately, it's so strong that Eliot can't open it -- some adjustment will be required.)

I tapped the mounts for the over-center lock, test fit it, trimmed off the extra metal (from yesterday's fiascos), cleaned it up, and primered it. I tapped the mounts for the lid cable tabs, and primered them. That tied up a bunch of loose ends, and left me ready to start in on one of the remaining big steps...

Primary pneumatic power. The rocket uses pneumatic power for primary boost and orbit-adjustment rockets. Specifically, I'll be running a pipe from an air compressor ($90 on sale) in the shop. In the rocket, it will provide opportunities for valves, pressure gauges, and leaky-gas noises. And also, it'll power a paint shaker (also $90) bolted below the chassis, for shuddering takeoffs. (We're planning to add some suitable higher-frequency takeoff noise to go with it, in the electronics subsystem.)

Then, once in orbit, orientation and smaller adjustment burns will be provided by blasting jets ($8 each) of dihydrogen monoxide reaction mass. (This was a component I thought for sure would require custom machining, but no, Harbor Freight wins again. Early playing with these, showed that the RC delay in a 15' air hose is so great that the vapor sort of hisses slowly to a start and again to stop. To get a satisfyingly sharp retro "blast", I had proposed to connect a joystick mechanically, through bike cables, to actuate the thrusters. Along the way, Jeremy convinced me that it was much better to actuate them electrically; he found solenoids on eBay for $15 apiece.


So, today, I launched into the pneumatic plumbing. I bolted all three thrusters into place, and bolted the booster (paint shaker) hangar into place. Each thruster received its series of 1/4" NPT fittings: an elbow, a male-male coupler, a solenoid valve, and a 3/8" compression-fitting coupler. That takes the output end of the plumbing as far as I can; I'm still waiting for a fourth solenoid valve to return from Jeremy's avionics shop.

Next, I started on the distribution manifold. It begins as a 1/2" sweat-fit copper pipe, passes through the propellant master valve, and splits through a manifold to three female 1/4" NPT fittings. Each fitting feeds a regulator and pressure gauge, and terminates in a 3/8" compression fitting.

The third output is not yet soldered in place, because I need to pick up a third regulator. I have to have the whole stack of NPT fittings together to be sure that, once soldered, the stack gets tight just as the gauge is facing up.

So, I'm already most of the way through the plumbing! I'll need to add a supply pipe plus a half-dozen runs of soft 3/8" tube between the compression fittings. I confess that an important benefit of getting the plumbing so far today is that it will make Jeremy itchy anxious to start clicking those soleniods.


Pressure manifold
Monday, November 2, 2009 -- jonh

Tonight I completed and tested the pneumatic distribution manifold. Air arrives on the right, passes through a main shutoff valve, and is distributed to three regulators with gauges. The leftmost regulator's output is closed, so that its gauge always reads supply pressure. The other two regulators supply air to the thruster air circuit and booster air circuit.


Plumbing tests
Wednesday, November 4, 2009 -- jonh

Jeremy came over this morning before work. I put in the soft copper compression tubing, and we rolled out the air compressor and an extension cord for the power supply. We tested the thrusters (they're thrusty). The air system leaked quite enthusiastically, until we went around putting a bunch more torque on each fitting. We got into the rocket and fired the main booster. It was fantastic! It's the first time we've done it with the rocket's aluminum skin on -- the booster shakes everything including the skin, producing subsonic and low sonic tones that really feel blast-off-y.

I tried to mount the over-center lock, and that didn't go so well. For reasons I don't understand, the screws bound up in the tapped holes. One, when I tried to back it out, even broke off in the hole! Bummer.


Distributed systems software
Monday, November 9, 2009 -- jonh

I came down with a cold last week, which impeded my ability to get much work done, actual or rocket-wise. I did cuddle up under a blanket, heated by the waste heat from my laptop's Core 2 Duo, and tidy up the rocket software a bit.

That had a few fun components. First, somewhere along the line, the rocket became a distributed system. The Elson Avionics bus supports eight 8-digit displays per processor, and on panel design day, we ended up with a total of twelve displays. Furthermore, there will be an audio board, with its own microcontroller, to add some environmental acoustics. These three controllers will be interconnected by the "three-wire interface" (TWI), one of three bus standards implemented on the Atmega microcontroller. (TWI is a multi-master bus; SPI is a single-master bus, and UART is a point-to-point standard.)

So I implemented a TWI module in the simulator, wrote the rocket networking stack against the simulator, and wrote a bunch of modules that ship keystrokes and thruster status messages around. My first cut at the networking stack was a clumsy state machine. Jeremy, drawing on his extensive background writing little tiny network stacks, pointed out the world of software maintenance pain that I'd opened up. I started experiencing that pain within 48 hours of the first implementation, so I rewrote the stack using his recommended architecture.

Then I organized the remaining modules and filled out the remaining display functions. Mostly, this meant dragging modules from their rough prototypes to completed, integrated components. For example, when the "Launch" function is selected, it draws a giant countdown on the bitmapped display, updates the Mission Clock, and advances the speed and lunar distance displays.

I still need to implement and test the TWI stuff on real hardware, but this is all pretty satisfying: Once we build, mount, and wire the hardware, we can turn it on and start firing the thrusters with the real software.


Audio software
Thursday, November 12, 2009 -- jonh

Cold number two arrived hot on the heels of cold number one. I'm concerned that, in a Cat-in-the-Hat sort of way, observers may decide that the "colds" are implausibly convenient reasons to stay home on the sofa writing rocket code.

In any case, I used Audacity to make some rumbly rocket booster noises. I also mixed together some clangs from the web to make a docking noise, and sliced up the classic Pong beeps and boops. I wrote up the code in the simulator that will drive the audio board, and the sound stuff all works in simulation now. I still need to plumb the hardware side through (SPI to the flash chip that will hold the sample buffer, writes to the DAC that drive the amplifier, and the TWI that carries network messages among boards) and make sure it sounds good.


Reaction mass reservoir
Friday, November 13, 2009 -- jonh

My McMaster-Carr order, with parts for the DHMO Reaction Mass Reservoir, showed up early this week. Today, armored in a sweatshirt, I braved the slight cool of the basement to assemble the reservoir. Then I hung it on the rocket with zip ties and connected up the thrusters with vinyl hose and barb tees. Maybe half an hour's effort, but satisfying none the less.


Building boards
Saturday, November 21, 2009 -- jonh

Jeremy assigned me to populate four of the avionics boards; specifically, the set that make up the bitmap display. Tonight, I spent a nice evening chatting with Chase and soldering. I got two boards completed, in about 80 minutes per board.

In the photo, you can see that I'm using a rubber-jawed soldering vise. Andy, a good friend that taught me all about electronics and computers and math and pretty much everything else, loaned that to me when I was little. Andy passed away recently. Every time I solder a project with it, it's bittersweet.


Trenching; building boards
Sunday, November 22, 2009 -- jonh

I finished up the other two boards today, getting even a little faster. Part of the time Evan was here. He watched me bending the pins on the chips against the table, then poking them through the board, then flipping the board over in the vise, and then holding the chip in place upside down while I tacked its corner legs with the soldering iron. He asked why I bent the pins against the table. I explained that you had to bend them to get them into the rows of holes. Then I said that it was frustrating, but DIPs always come that way, with the pins flared out a little farther than will fit. And then I surmised that was probably because, in industry, the chips can be installed by a machine and they'll stay stuck in the board, so that when the board is manipulated before soldering, the chip won't fall out because the pins spring against the holes. And then I thought there was probably some sort of tool for holding the pins together until they're slipped through the hole, and specifically, that actual tool was probably sitting in a drawer in my basement. So I went down to the basement, got the chip inserter, and started popping chips in. They dutifully sprung into place, and soldering got a lot easier. Duh.


The cold front finally passed this afternoon. Eliot's been eagerly waiting to help dig the trench. Evan helped a bunch, too. I expected to have to route under a couple tree roots, but I was completely unprepared for one major treeway interchange we found. The choice was to settle for about a 5" burying depth, or keep digging. After an hour on hands and knees, we finally broke through our own little subterranean viaduct. I'll have to solder the pipes in situ, since the tunnel is too narrow to push a joined pipe through, and the pipe has to take a quick turn to avoid the next root underpass.

For those of you keeping track, the trench has become a Multi-Purpose Service Infrastructure Component. Here's what we're burying in it:
pipe carries for service
1/2" copper pipe compressed air booster and thruster power
3/4" PVC electrical conduit
14 ga romex 13.8 VDC avionics, lighting and electronics
Cat-5 UTP
one pair RS-232 UART network packets to house
one pair 12 VDC signal switches water supply solenoid
Cat-5 UTP spare
wire-pulling twine just in case
1/4" polyethylene tube garden spigot water thruster reservoir refill


Laying pipe
Friday, November 27, 2009 -- jonh

Eliot and I spent a very productive day in the yard today. We brazed in the copper air pipe, glued in the PVC electrical/data conduit, and pulled the polyethylene water tube through and zip-tied it to the conduit. The water filled up the reservoir just fine, and we tested the air all the way through to blast the thrusters.

One cool feature is that the water line has an air hookup: when freezing temperatures are forecast, I can close the water valve, plug the compressor into the side, and blast the water out of the buried water line through the reservoir. We tested this out, and it worked great.

JD taught me how to feed the pulling line through the conduit: tie it to a little bit of plastic bag, and suck it through with a shop-vac. That worked pretty well. Unfortunately, we weren't able to pull the 14ga power wire back through the conduit's seven (yikes!) 90-degree bends. Hopefully it'll go better on another try, with two adults working at it.

We filled the trench back in and got our yard back. I hope the conduit doesn't put up too much more of a fight!


Handles
Saturday, November 28, 2009 -- jonh

I stole a few minutes today to rivet a couple handles, onto the window and the lid hatch.


Prototype couch; ladder brace
Sunday, November 29, 2009 -- jonh

I fought Crashy Cinelerra to bring you the Trench Day video on the Nov. 27 entry.

I proofed a version of the "astronaut couch" in wood and muslin, and cut the metal for it out of the few bars still littering the shop floor. It's mostly made of 3/4" square tube, and after I cut the pieces I needed for the couch, I had left a sliver less than 1/2" wide. Whew!

The over-center brace that holds the interior ladder in place turns out to be rather wobbly from side to side. While I had the metal tools out, I cut a diagonal brace to fix it up.

Eliot showed off the thruster for his grandma today. The water supply was pretty weak and intermittent. I realized that was because I had so carefully teed all the water supply lines into a single circuit, so the thruster was drawing air out of the other two thrusters. The fix is to do the simple thing I should have done in the first place: dip three separate water pickups into the tank.


Pulling wire
Saturday, December 5, 2009 -- jonh

Jeremy showed up after breakfast to help pull wire through the conduit. We used JD's further suggestion of first pulling just a pull-wire through, with lots of wire lube, to get the conduit slippery. Then Jeremy fed the 14-2 romex through, followed by a pair of cat-5 cables. Definitely a two-person job. Complete victory this time!

Jeremy headed back home to build the power distribution board. I welded up the modified ladder over-center bracket and the metal frame for the astronaut couch. Fitting and cutting the frame's mounting brackets, drilling, welding, grinding, and wire-wheeling those parts pretty much soaked up the whole afternoon, especially with the 4:30 sunset.

At dusk, I unwrapped one of the $1.50 Harbor Freight 9-LED flashlights and tried it out in the rocket. Wow, it's going to look great!


Sourcing parts
Sunday, December 6, 2009 -- jonh

Eliot and I did some errands today, buying extension cords for Christmas lights and such. And, of course, rocket parts.

I picked up more LED flashlights. A trip to The Shack yielded a bunch of resistors to control them, plus some parts to build an audio amp. I grabbed a pair of bookshelf speakers and a pair of computer speakers from the thrift store, hoping to score an audio amplifier and maybe a speaker with enough bass to make a passable launch sound.

Another Home Depot visit netted more bolts (for the couch and mounting the flashlights). At Joann's, I got a yard of safety-orange duck cloth for the seat.

Tonight I tore apart the speakers. The bookshelf speakers are probably going to work for the bass, but something bigger would be nicer. The amplifier for the computer speakers was apparently in the subwoofer piece, which wasn't at the thrift store, so I'm still shopping.


PCB cables
Monday, December 7, 2009 -- jonh

Crimped some awful Molex connectors to make a power cable for the raster display (group of four boards), and updated makefiles to talk to the new ATMega328p chips we're using. (They're drop-in replacements Jeremy found for the ATMega8s we started with, but with lots more memory. Yes, the rocket operating system and avionics software outgrew the first chipset. :v) Unfortunately, I can't get the actual code running on the new chip yet, and it's time for bed.


Primering parts
Tuesday, December 8, 2009 -- jonh

In the hour before bedtime, Eliot and I primered the steel couch frame and the upgraded ladder bracket.


CPU upgrade
Friday, December 11, 2009 -- jonh

Since Monday, I finished getting the code fixed up for the ATmega328p. The hardware target had also rotted a little bit (as the underlying OS got updated to handle my door nametag projector board at work); I patched that up tonight. Then I lashed the boards together and played a little pong!


OS debugging; painting parts; manifold chassis
Saturday, December 12, 2009 -- jonh

Today started with some more grotty debugging. Some code that runs in the simulator crashes on the boards. I figured out a few: a 16-bit register overflow produced a negative Time, a stack overflow fixed by hiding data in program space, and a display thread hogging CPU even when invisible. There's still one module broken, though: the one that reads the joystick and fires the thrusters.

Eliot and I brushed a coat of black paint on the parts dangling from joists over the shop.


I measured in the rocket for an aluminum box (plexiglas face) to house the air manifold assembly. My first try failed in a way I hadn't experienced before: when I made the first bend in the brake, the metal was very stiff, and I heard a weird crackling or splintering sound. I pushed it the rest of the way through the 90 degree bend, and by the time I was done, the flanges had cracked along the bend about halfway along their length. Yikes! I hypothesized that it was temperature related. Seems unlikely -- I mean, it's been cold around here, but our basement isn't that much colder than normal. But I heated up the metal with a torch, and did a few more bends that came out great. Wild. So I marked up a new piece of aluminum, cut it to shape, and carefully preheated each line before bending it, getting pretty good results marred only on the second bend, where I tried to rush things a bit and apparently didn't add enough heat.


I also figured out how to mechanically wire the flashlights for external power. I found some grommets that made a tight fit to our power wire. To connect them, I found I needed to remove the bulb head from the flashlight body tube. This I achieved by the graceful method of slipping the flashlight over a piece of 1/2" PVC pipe, setting a block of wood on top, and giving it a whack with a hammer. After the switch-and-battery-ectomy, the new light has an attractive fixture and I think will retain its waterproofness.


OS bugs; flashlight mods
Sunday, December 13, 2009 -- jonh

I found and fixed the "last" bug that was crashing on the real hardware: the joystick code had local definitions pointing at hardware ports for version 1.1 boards that were interfering with my version 1.0 debug prototype.

I touched up the paint on the couch and ladder bracket.

I popped all the LED flashlights apart. I realized at one point that part of my technique involved shearing a ring from the aluminum tube. I tried to modify the technique to avoid that, but it turned out the ring was distributing the force and protecting the circuit board; two casualties resulted. I went back to the original technique, disassembling and drilling grommet holes in all of the flashlights.

I measured out a bunch of the boards, meters, and switches, and made Inkscape drawings for laser cutting the plexiglas panels they will mount to.


Plexiglas panel
Monday, December 14, 2009 -- jonh

After work, Jeremy and I visited the laser cutter in the shop and cut the first mounting panel for the avionics: the Multi-Function Display (MFD), a whopping four Elson display boards smooshed into a 256-pixel raster display. In the video, the board displays a giant countdown in 32-point URW Gothic L Semi-Bold.

The ribbon cable I have to test with precludes plugging in all four boards plus a keypad at the same time. I worked around this by creating an "Autotype" thread that just types in a given string at a given rate. It did have one funny little bug: the check for a zero terminator was incorrect, so it kept on typing out the rest of the .text section, eventually typing keypad 'D', which aborts the launch sequence.


More panels
Friday, December 18, 2009 -- jonh

I laid out two more plexiglas panels while Chase was over. He was soldering together his own Elson v1.1 PCB, which he's making into a Clock-You-Can-Never-Quite-Trust.


Flashlight fixtures
Saturday, December 19, 2009 -- jonh

I spent most of my free time today working on the family Christmas card, which, for a change, has absolutely nothing to do with the rocket except that it's an exact scale replica.

I did get a chance to sneak downstairs and bolt together the couch. I also cut wire to length and assembled the seven lighting fixtures. Man, I need a decent soldering iron.


cutting panels
Sunday, December 20, 2009 -- jonh

I laser-cut a few panels today.


New site, couch upholstery
Sunday, December 27, 2009 -- jonh

I spent some time rebuilding this blog site to make it a little easier to follow all the contributors together, to read only recent entries, or to catch up by reading the story in order.

I took the opportunity to incorporate the fantastic mission logo designed for us by Noa Dvoskin. The plan is to render it as embroidered patches to celebrate the first successful mission.

I also stitched together the fabric sling for the astronaut couch.


Installed couch, hull breach
Monday, December 28, 2009 -- jonh

Eliot had his friend over today, and while they played, I installed the couch in the rocket. While Captain Eliot and First Officer Zach flew all over the galaxy, visiting no fewer that ten alien-inhabited planets, I installed the new, more-rigid upper ladder brace, and I replumbed the thrusters so they each have their own dip tube and receive a consistent flow of dihydrogen monoxide reaction mass fluid.
Unfortunately, at one point, Captain Eliot popped open the top hatch so enthusiastically that it popped out the rivet that holds the limit cable bracket in place. The hatch continued around its pivot until it impacted the aluminum skin, cracking it. Fortunately, the cabin atmosphere leakage through the crack is minimal. We replaced the broken rivet with a through-bolt.
I also replumbed the supply side of the water line, installing the solenoid valve and a new air-purge valve to replace the one I damaged by over-torquing it.


Wiring the power board
Wednesday, December 30, 2009 -- jonh

I wired up much of the power board this evening. In the photo, you can see

  • the master switch (red),
  • the ammeter (showing barely more than 0A),
  • the green supply light on the power board,
  • the red 12V and 5V bus indicators on the power board,
  • the voltmeter (showing 5V; the switch beside it selects the bus to measure), and
  • the blue LED indicating that I'm pushing the DHMO-fill button.

    There are pigtails leading out to the HPAM boards and bringing HPAM-switched circuits back to the Hobbs hour meter and the lighting switches.


  • First electronics mounted
    Friday, January 1, 2010 -- jonh

    I built and installed two of the electronics boxes this morning. Jeremy came over and wired the trenched power to the power distribution panel.

    We tested out the power panel with the overhead light ... and the ammeter has already paid for itself: it read 3A, indicating that we'd plugged the overhead light into the 12V bus, when its resistor was configured for the 5V bus.

    Enough items on the power and HPAM panels needed tweaking that we took it back apart. Jeremy took some boards home to modify. I modified the power panel, adding connectors and rearranging a few incomplete circuits. I labeled all the circuits on the power panel to avoid a recurrence of the 12V/5V fiasco. I learned that Dymo label tape is heat sensitive, and that when shrinking heat-shrink tubing, it's really easy to set nearby tape to all ones.

    I also built more of the boxes; there are only two left to go. (Remember that I have to heat up my sheet aluminum to get it to bend without cracking? Over Christmas break, my cousin-in-law, who is a mechanical engineer and shop guy, heard about this, and immediately replied, "Oh, yeah, that's what's gonna happen with sixty-sixty-one. If you want to bend it, you should be using fifty-series." Yeah, I should. So now I know a little tiny bit more about metal alloys. (Turns out mine is 7075, which is probably even more brittle than 6061. The number 7075 is printed in 2" red letters on every square foot of the sheet...)

    Bending was getting slow tonight because my propane cylinder was almost empty; a trip to Home Depot yielded a new cylinder that heated things up much faster, including my left index finger.

    I laid out the remaining plexiglas panel (ready to laser-cut) and boxes (ready to construct in the shop).


    Lots working!
    Saturday, January 2, 2010 -- jonh

    This entry's title is a little underspecified, but that's because we got so much working today!

    I finished up all of the mounting boxes, and installed all but the one that's still missing its plexiglas panel. Jeremy came over and did some finish work on the power panel and the HPAM panel. While I was mounting boxes, he completed wiring the water fill line. Then he started routing display bus and power cables inside the rocket, while I added flashing to the lid to reduce rain ingress. I replaced some zinc hardware with stainless bolts, and Jeremy wired up the joystick and the HPAM-DA. I bent the plexiglas for a cover for the pneumatic manifold. I spliced in some of the thrusters and thruster lights. Late in the evening, we pulled the CPU 0 panel and downloaded its firmware.

    Although only two display panels and the power panel have enough wiring complete to function, the rocket has a beautiful red glow. As switches are thrown, lights show up one at a time, then twos and fours, then by the dozens. Push a switch on the panel; a blue light lights, a small click comes from across the yard, and water burbles into the thruster reservoir. Turn the master pneumatic valve; air hisses and the pressure gauges come alive. Press HPAM-DA channel 0 for the one completed thruster; a brilliant white jet of vapor blasts out and spreads out over the ground.

    It's pretty amazing. I can't wait to get the rest of the pieces wired into place!


    So much for rivets
    Wednesday, January 6, 2010 -- jonh

    I was a little concerned that the swelling action of a blind rivet would split plexiglas, but on a previous project it worked out okay. But before we go install all the placards on the plexiglas panels with rivets, I thought it would be worth a test run. Rivet #1: no problem. Rivets #2, #3, and #4 split the plexiglas like an adverb splits an infinitive. Looks like we'll need some other plan for the placards: probably just some kind of glue.


    Adaptors
    Thursday, January 7, 2010 -- jonh

    The nice new keypads have a different pinout than our earlier ones, so I made a little protoboard adaptor and mounted the keypad in its panel.

    When Jeremy wired the rocket last weekend, he found it easiest to split the Elson Parallel Bus cable at the entrance to the raster display. Splitting it is done with a male-to-male header connector. But, as far as I know, that's not a standard part. As you can see, it's not a very elegant hand-wired part, either.


    Programming pigtails
    Friday, January 8, 2010 -- jonh

    The first time we downloaded firmware to the rocket, we had to remove seven sheet metal screws, four machine screws, and two cable connectors to be able to plug the USB programmer into the CPU board. We'll need who-knows-how-many firmware updates as we work the bugs out, times three CPUs in the rocket -- that's a lot of screwing and unscrewing and potentially broken wires.

    The solution: bring each CPU's programming header out on a ten inch pigtail. When not in use, they're tucked behind the panel; for servicing, we can pull them out and plug them in.

    Jeremy had an even grander vision: use the Atmel's self-programming facility, and make them programmable over the network, via the through-the-trench UART line. Yeah, I have to admit, being able to beam software updates to the spacecraft from the living room sofa would be pretty cool. I mean, it worked for the Mars rovers!


    Some Systems Go!
    Sunday, January 10, 2010 -- jonh

    Jeremy came over this afternoon, and we got a bunch of little odds and ends wrapped up, zip tied, and soldered together:

  • Jeremy soldered all the thruster and booster solenoids and lights to their connectors, and built cables to connect them to their HPAM ports. (My soldering iron is too wimpy even for 16ga wire. Jeremy became very skilled with the little butane torch, the kind chefs use to carmelize crème brûlée, to the point that he could solder without singeing the insulation, and even shrink the shrink wrap.
  • I wired in the (still unmounted) three interior lights and the overhead light (pictured at right). Lights are a pretty simple circuit, but it's pretty delightful that two more rocker switches do something exciting now.
  • I've been visiting the rocket during rainstorms to learn where the water sneaks in. Today I squirted a thick bead of silicone around the apex of the lid.
  • I added a little aluminum flange to keep the lid's PVC strip from getting closed in the window.
  • I took the window off to add PVC strips, but ran out of PVC, and didn't make it to the store. I put it back on the rocket, since the rain is supposed to return tomorrow.
  • Jeremy helped me install the box for the flight computer panel, the last to go. No wiring on that bus yet; we're still waiting to get the TWI bus in place.
  • Jeremy crimped on another IDC, and plugged in the EPB adaptor, making the raster board come alive with the control panel text.
  • I crimped on a power connector that brought the lunar distance & speed panel online, so now all eight panels on CPU 0 are active.
  • Jeremy fixed the joystick software bug last night, so I downloaded new firmware. In this terrible video, you can see me moving the joystick, and each thruster fires in response. That was pretty satisfying!
  • Unfortunately, the programming pigtails didn't work. I made them to avoid having to unscrew and uncable each CPU to reprogram it. The pigtails also cut the 5V line, because when the laptop's 5V is connected through the pigtail, it tries to drive four amps' worth of LEDs, and the USB gives up. This they succeeded at; unfortunately, there was another problem: the SPI lines used for programming are also used to drive the Elson Parallel Bus, and now that we have ten feet of ribbon cable on that bus, the bus capacitance is way too high and scrambles the bits going into the laptop. Whoops. I could fix this with the soldering iron, adding a separate switch or header to make it easier to disconnect the EPB when programming. Or we could go all the way and figure out how to program them online, and connect to it via the TWI bus (and eventally the UART). That would be pretty keen.


  • Special effects
    Wednesday, January 20, 2010 -- jonh

    I added some visual effects to the software: A screen blanker takes over all of the LED displays (including the bright white interior lighting) to blank them when "idle", to flicker them when the booster is firing, and to flash synchronized colors in "disco" mode. In docking mode, pushing the joystick button fires the booster (including rumbling audio and light flickering). Getting this working involved transmitting new messages across the rocket's TWI network; there are now five protocols running on the intra-rocket network.

    The microcontroller boots up almost instantly, which of course will not do at all. I added a gratuitously slow bootup sequence modeled after the Bendix IFR GPS in Jeremy's Cardinal, the fanciest display in his panel, and hence the slowest to boot.

    After adding all this stuff, I realized I'd once again blown past our 2K RAM budget, so I spent a little while trimming memory, mostly convincing modules to time-share their offscreen bitmaps.


    Audio
    Thursday, January 21, 2010 -- jonh

    I worked on the audio software today on the plane home from San Diego, connecting the (simulated) flash memory through ring buffers, a stream compositor, then another ring buffer to the (simulated) output DAC. It doesn't actually work yet.


    couch & wiring
    Saturday, January 23, 2010 -- jonh

    Most of the day went into wiring. I wired up the two boxes that host the four boards on CPU 1, with an Elson Parallel Bus to connect the boards together, power from the power panel, and a TWI network cable from the CPU 0 panel. I bundled up the wiring along with wires for the lighting on that side of the rocket, and fastened it all nicely to the wall. I also tidied up the lighting and CPU 0 wiring on the other side of the rocket that Jeremy rough-fit a few weeks ago.

    This morning Eliot and I took out the window panel, drilled the rivets, and installed strips of PVC to help shed water before it leaks inside.

    I fashioned some straps and little metal brackets to fasten them to the couch frame, to make the seat more comfortable. I'll put the couch back into the rocket tomorrow.


    wiring & brackets
    Sunday, January 24, 2010 -- jonh

    Today I started laying out the joystick mount box. Eliot and I bolted the improved couch back into the rocket. Eliot made a hook to which he plans to clip flight plans, and riveted it into his rocket. I wired together the compressor relay switch and LED circuit, and installed it in the power panel. I made a little plastic standoff for the power panel that helps support it, mounts the lighting resistor breakout board, and provides a strain relief post to which incoming cables are zip-tied.

    Finally, I made these aluminum mounting brackets for the exterior thruster lights, interior lights, and interior overhead light. I've had this pack of alumiweld rods sitting around in my shop forever, waiting for a chance to try them on something with no requirements of strength, reliability, or aesthetics. It's basically solder for aluminum: it has a lower melting point, and is supposed to bond to the base metal without melting it. I think I got it to work right, but I'm glad the only thing hanging on the brackets are flashlights.


    EPB buffer
    Monday, January 25, 2010 -- jonh

    Yesterday, while Eliot and I were working in the rocket, we noticed some weird artifacts on bus 0 (the one with a running CPU): a sporadic minus sign flickered in front of the Lunar Distance readout, and some of the segments on the raster board were incorrectly lit or dark. What's going on? Why did this start now?

    And why do the symptoms change when I put my hand alongside the cable? Yikes: looks like the capacitance of the really-long Elson Parallel Bus cable has finally caught up with us. It was working fine the day before, but Sunday I rolled up the ribbon cable and stuffed it into the guide tube, a little closer to the huge conductive plane of the rocket's skin. It probably added just a bit more capacitance, enough to round off the signals' edges so the latches sometimes saw the wrong value.

    Now, flickery, slightly-incorrect displays add a certain amount of hard-core intergalactic realism, kind of like stained and marred aluminum skin. :v) But I think we'll fix this anyway; it should at least be working correctly before first launch. Jeremy suggests we can clear it up with a NOP (a "no-operation" instruction) that delays a little, giving the signal time to settle before telling the latches to accept it. I want to see the mucky signal on an oscilloscope first; I should assemble my new Sparkfun oscilloscope kit, take it out there, and check it out!

    This got me thinking again about the fact that I can't program the boards while they're plugged into the EPB. The first problem was that the USB programmer was trying to power the entire bus (seven amps worth of LEDs...), which I fixed by making pigtails that separate the 5V line, so the boards get rocket power, but data can flow from the programmer. Unfortunately, the pigtails weren't enough: The EPB reuses some of the programming pins, and the capacitance on the EPB was too high (even before Sunday's wire bundling) for the data rate used by the programmer.

    So tonight I made a new pigtail for bus 0: it has a copy of the 5V-separated programming header, and also an EPB interface with a 7407 driver (not shown in the picture -- Jeremy brought some in, but I left them on my desk) isolating the high-capacitance side of the bus from the CPU board and programming header. I sure hope it works this time!


    software & scope
    Thursday, January 28, 2010 -- jonh

    I made it out to the rocket tonight to try out the new EPB buffer. Once I had plugged the programming header in the correct direction, it worked perfectly: I can program the rocket without disconnecting the EPB.

    Unfortunately, the displays remain flickery and inconsistent, even though I tried adding NOP delays before the latch strobe. I really need to take a look at those lines with an oscilloscope. So I came inside and put together my SparkFun Jyetech scope kit.


    'scoping the EPB
    Saturday, January 30, 2010 -- jonh

    I got the Sparkfun oscilloscope working tonight. (Turns out time scale "1m" meant one minute, not one millisecond.) I scoped the EPB. I saw some mealy looking traces, but not what I was expecting: rather than every pulse drooping in a capacitative way, most of the pulses were fine, but sometimes a pulse went by looking lousy. What's going on?

    I played more with slowing down the EPB clock, and still no dice. It's surprising how consistent some of the display errors are: certain segments seem to like to light up together. Aaaarrgh.


    box plans; EPB update
    Monday, February 1, 2010 -- jonh


    I finished drawing plans in Inkscape for the aluminum box that mounts the control sidestick next to the pilot's seat. I printed out them out at 1/3 scale and made a little paper model to fold together to make sure it made sense. (Yes, I know, Brian, I should really learn SketchUp already!) It's ready to commit to aluminum.

    Over the weekend, Jeremy researched the EPB problem, which we now think is crosstalk: the wiggling address and data lines are probably coupling inductively to the STROBE line, generating spurious signals that latch incorrect segments. Jeremy found a chapter in "H&H", the canonical EE textbook, all about exactly what we were doing:

    So, I'm trying to slog through 13 complex pages but they are basically summed up by this sentence: "The signal pickup problem makes direct logic drive with bundled multiwire cables almost hopeless."

    So much for my EE degree. Every sentence of this chapter says "You know that thing you did? Don't do it."

    Jeremy and I grabbed JD today to sort things out. In classic JD form, he asked "you are alternating signal and ground on the ribbon cable, right?" Um, no. Jeremy went through all the ideas he got from H&H, and I also suggested the nuclear option: running TWI and breaking datagrams back out to EPB using a separate microcontroller at each remote panel installation.

    JD's recommendations were pretty accessible. Plan A, the easiest thing to try, is to string a separate, shielded wire for STROBE, isolating it to protect it from transients on the data channels. This involves only about five solder splices into the ribbon cable.

    If that doesn't work, we'll try Plan B: wire up a third variation on the EPB buffer board with resistors between the drivers and the long cable. The cable's capacitance together with the resistors should form a little RC circuit that limits the slew rate: how quickly the signal voltage ramps from ground up to 5V. Inductance is a function of that rate. Right now, the rate is "infinite". By tweaking resistors, we can slow things down to reduce the inductive effect, and then slow the software down to give the lines time to settle before we strobe them into the latch.

    I told Jeremy I'd run home and try Plan A right away, since it was so easy. He said no way! I must wait until he gets his new used eBay oscilloscope in the mail so we can look at the broken signals and see how things change with the new wiring. Obligingly, I worked on the sidestick box tonight instead.


    finished sidestick box
    Tuesday, February 2, 2010 -- jonh

    I made it down to the shop about 9pm, after Eliot got to bed. There waiting for me was the full-scale plan sheet for the sidestick box. Punch, scribe, drill, shear, file, heat, hammer, bend, and then rather than rivet, I went to town with the Alumi-Weld. It's lovely, by R-ULAV standards. A mere 2 1/2 hours. I'm glad there's only one aluminum box left to build, the mount for the audio amp and speakers.


    gutted speaker system
    Wednesday, February 3, 2010 -- jonh

    I gutted the Altec Lansing computer speaker system tonight, to figure out how to mount it in the rocket.

    The good: I was able to inject 12VDC after the transformer and rectifier circuits and power both the subwoofer and main speaker amp boards.

    The ugly: there are three biggish circuit boards to make all this go. It's going to take a pretty big panel to mount it all.

    The weird: when I powered it off of a wall wart, it made a quite noticeable hum. This surprises me, since I'd assume that the supply current coming from the rectifier would also be noisy; I figured that the power regulator would be downstream of where I injected my noisy DC. (Although the giant heat-sunk thing I took for a regulator might have been the final-stage power transistor, now that I think about it.) This may be a non-issue since we're feeding the rocket fairly clean power, and perhaps not dirtying it up too much with our load -- only the 5VDC switcher would likely generate much junk on the 12VDC side. We'll see.

    The bad: the speakers had pretty substantial plastic housings, with obviously deliberately-designed acoustic ports. When I pulled that all out, the woofer wasn't quite so bass-y, and was a bit more rattle-y. I'm sure my aluminum-and-plexiglas mounting box won't be acoustically decent in any regard; hopefully it still sounds rumbly when it's all assembled.

    I traced out the parts, came back upstairs, and drew everything up in Inkscape. I wanted a cool hexagonal panel for this one, but it won't all fit in a single laser cutter panel! Here's a draft drawing with two hexagons. Maybe I'll do an irregular hexagon.


    patch digitization
    Friday, February 5, 2010 -- jonh

    With mom's cool flight suits, and Noa's great logo design, how could we not have patches made? I spent a few hours with SophieSew last night and tonight, and digitized the logo into an embroidery file. I'm hoping to run it on an embroidery machine at the Portland TechShop; we'll see how that goes.

    On one hand, I'm terribly delighted that SophieSew exists: a free tool that lets you control embroidery machines, in contrast with the heinously expensive proprietary stuff from the machine manufacturers.

    On the other hand, the tool is orphaned and pretty buggy. The UI is mostly there to do tasks (spline manipulation, path operations) that other programs (inkscape) already do much more easily. It's modal, cumbersome and clumsy; just deleting objects is difficult, and undo is actually impossible. Setting the color of a stitch region is a seven click process, and you have to do each separate region one ... at ... a ... time. Aiieee.

    I finally got my design mostly done, and tried exporting it, and the export code crashes with a null-pointer exception! Oh man, is that frustrating, after hours of fiddling with the clunky UI. I suspect I'll be able to tediously copy and paste the parts out of the broken document and into a fresh document, using divide-and-conquer to take only a logarithmic number of steps, until I've eliminated the broken data structure. But what a humongous pain.

    I really hope the author chooses to open-source the app. The best outcome, I suspect, would be to rip out the file-format-export code (the "secret knowledge") and the code that fills regions with stitches, and use them to write a no-UI back-end to inkscape that consumes SVG and emits embroidery control files.

    I think Jeremy's coming over tomorrow with his new oscilloscope to debug the EPB problem. Yay!


    audio packaging
    Saturday, February 6, 2010 -- jonh

    I poked at the scavenged audio amp stack for a while, rearranging the wiring with my dremel and soldering iron, and making aluminum brackets to stack the circuit boards together. It's now ready for making a plexiglas panel and aluminum mounting box.

    I pulled the joystick out of the rocket to mount it to the sidestick mount box, and discovered that in the process of laying out the sheet metal plans, I built the box inside out, so the joystick either doesn't fit into the elegant profile I built, or points the wrong direction. Dang dang dang! I'm hoping to correct the situation without rebuilding the box by pulling the joystick apart and turning the handle around.


    embroidery fun
    Sunday, February 7, 2010 -- jonh

    I finished up the layout for the audio boards, including the plexiglas laser cutter input files and the paper templates for cutting and bending sheet metal.

    I tried to export my patch design from SophieSew, but it kept throwing an exception. I guessed that I had somehow created an object with a broken internal data structure, so I spent a delightful hour using divide-and-conquer, deleting some objects and testing to see if it would crash on export or not. Wow, I really am starting to loathe SophieSew; it makes a fun task tedious and crashy! (I don't actually loathe it; the author has done a great thing. But it desperately needs to be set loose into a community of open source hackers who will repair it.)

    I eventually got the file salvaged. Then I went through and tidied up the stitching order, and added some more design elements. Then I applied the Jeremy Elson principle: I shopped on alibaba for a bargain on an embroidery machine direct from Taiwan.


    mounting audio, fixing joystick
    Thursday, February 11, 2010 -- jonh

    I cut the audio panels on the laser cutter this afternoon. Tonight I mounted the five speakers to their panel, which mostly worked, but it turns out the bass driver's excursion is deeper than the spacer I made for it, and it rattles when playing the bassy rocket rumble. So I need to make another spacer.
    I mounted the stack of three audio circuit boards to their plexi panel. Then I alligator-clipped a wall wart onto the power input, plugged it into my computer, and started playing the brand new Majorstuen album. Man, those guys are really amazing.

    The speakers weren't too bad, either, considering the acoustic chamber was a cardboard box.
    The last thing I got done was the joystick. I had to take the joystick's guts out, rotate the handle 180°, and put it all back together. Then I screwed the joystick to the aluminum mount box. It looks good; hopefully I didn't break anything.


    EPB cured!
    Friday, February 12, 2010 -- jonh

    I some time on the Seattle side before running an errand this morning, so I went out to the rocket, snipped the STROBE line out of the ribbon cable, and spliced in the shielded wire. I did this first for the 15-foot long run of cable, put it all together, and it worked much better, but a still segments still showed noise.

    There was still a two-foot section left leading to the HPAM panel, so I opened that panel up to cut its STROBE as well. When I did so, I noticed that the board had no power attached! Hmm; maybe that was causing a little trouble, too, drawing a good part of an amp through the EPB! Yikes.

    I spliced in a shielded strobe wire, plugged in a power lead, and put everything together. It works great! I haven't seet a flickery segment yet.

    Because we're still violating twelve of the Thirteen Rules Of Ribbon Cable, there's probably still lots of ugly on the wires; perhaps Jeremy will bring the scope back and we can re-check sometime. But it's working fine now, which is good enough for a treehouse. Even a rocket treehouse.


    audio simulator fixed
    Tuesday, February 16, 2010 -- jonh

    The audio system wasn't working right in the simulator (no hardware yet), and the first problem was that I couldn't emit a smooth stream of samples. I poked at it for a frustratingly long time. As far as I can tell, the O_NONBLOCK mode of the Linux /dev/dsp driver is broken; I worked around it by forking a child process to spoon-feed audio samples to /dev/dsp using blocking writes. Now the simulator's output works correctly; I can move on to getting the actual rocket audio code debugged.

    In other exciting news, a KSEA (Seattle airport) air traffic controller has tentatively agreed to provide voice talent for the rocket, in the role of ... air traffic controller! Now I need to write a script for the part.


    audio boxes
    Saturday, February 20, 2010 -- jonh

    Four hours of shop time this morning; enough to build the aluminum boxes for mounting the audio electronics and the speakers.


    CPU1 arrives
    Monday, February 22, 2010 -- jonh

    Jeremy, having finished TWI, sent the second CPU board home with me today. After getting the girls to bed, Eliot and I went out to the rocket to install it. It's beautiful, of course!

    Unfortunately, we didn't get very far. The keypad didn't work, which seems to be because the circuit board traces peeled off my little adaptor board. Eliot went to bed, then I made a new, sturdier adaptor and replaced the resistors on the TWI hub board. Hopefully we'll have some keypad and TWI joy soon!


    Keypad and TWI working in rocket
    Tuesday, February 23, 2010 -- jonh

    This RASA update is being blogged live from the RULAV. I have made the short TWI cables, and installed them on the TWI/joystick board, and replaced it in the panel.

    I corrected a soldering error in the new keypad adaptor, and verified with Jeremy's standalone test program that the keypad is now working on its CPU.

    I installed the TWI standalone tests, and verified that TWI packets are successfully flowing in both directions across the rocket bus!

    I reflashed the rocket code into the CPUs, and unfortunately, not all is yet well.

    • First, I can't seem to flash CPU1 if CPU0 is sending anything on the TWI bus. Not sure why that is, but it can be worked around by unplugging the TWI cable during programming.
    • Second, CPU0 loops during boot if it is connected to the TWI bus board. Not even to another CPU, just the two lonely resistors are enough to send it astray. It can be worked around by pulling the TWI cable to let the boot sequence begin, then plugging it back in.
    • Third, and most sadly, even with app/rocket running on CPU0 and app/rocket1 running on CPU1, no data seems to flow: Keypress events from CPU1 don't arrive at CPU0, and screenblanker and thruster status events generated on CPU0 don't arrive on CPU1. The one mysterious exception is that if CPU1 is attached during boot, it indeed blanks its screen, as it should in response to the screenblanker message CPU0 sends to black the displays during the startup animation.
    So, another mystery or two to solve. But the unit tests show that the hardware is indeed functioning! That's really exciting.


    First patch embroidered
    Thursday, February 25, 2010 -- jonh

    I found a used, older-model personal embroidery machine on Craigslist over the weekend, and found time last night to drive the 100-mile roundtrip to pick it up in Stanwood. (Yes, I'm the guy who drives 100 miles to buy a machine for $195 to save the $150 I'd have had to spend to have the patches made professionally. Look, it's the journey, not the destination, okay?)

    I did battle over breakfast with virtual machines, Windows XP, and a USB flash programmer even more obsolete than XP. Eventually, by a complicated process involving a chain of clunky software and two separate computers, I'm able to migrate designs from SophieSew to the writable embroidery card and transfer them to the machine.


    Tonight, I came home, plugged everything in, strapped in some fabric, and threaded the machine. And, just like that, Noa's pixels rendered in threads! The color scheme on this first one didn't come out perfectly, and there are a few other little alignment problems and minor bugs, but overall, it's pretty darn neat!

    It took about an hour of machine tending to sew. I think that was about half an hour of stitching, and another half hour of thread changes; the design has a ridiculous sixteen thread colors.


    Patch embroidery; parts installed
    Sunday, February 28, 2010 -- jonh

    In Yakima for most of the weekend. Eliot and I embroidered seven mission patches plus five specialist role tags. Embroidery is really a CNC operation, which means the operator doesn't require much skill beyond threading the needle and listening for the machine to start sounding wrong. Eliot embroidered two of the patches himself.
    When we got home, Eliot and I installed the joystick mounting box.
    Then we installed the mounting brackets for the three interior lights, the top-hatch-mounted overhead light, and the three thruster lights. We pulled the extra slack out of the wires; bit-by-bit the rocket is looking tidy and finished.
    And then we flipped the propulsion circuit switch, which has absolutely nothing at all to do with the interior lighting, and the interior lights went out. What the heck? By doodling with the various switches, I could get the lights to glow brighter or dimmer. This can't be good.

    The flashlight cases are tied to the LEDs' cathodes, and mounting them tightly to the aluminum mounting blocks made good enough electrical contact to "ground" them to the rocket chassis. I use scare quotes because we don't actually deliberately ground the rocket. But anyway, why should it matter? Because the cathodes aren't actually at ground: the interior LEDs are wired common-anode, with a resistor between cathode and real ground. So the various lights were shunting random voltages to the chassis.

    I clipped the zip ties, insulated the mounting blocks with electrical tape, and zipped the lights back into place; all is better now.
    I mounted the audio circuits and the speaker box behind the couch. In so doing, I noticed that I hadn't actually connected one of the sets of speakers, and rectified that. It's a shame to hide that glorious hexagonal speaker box with its finely-laser-cut grille back there, but it really was the best spot for it in an increasingly crowded capsule cabin.

    So many loose ends tied up, let's keep going! I pulled the HPAM panel and soldered a new pigtail on the flaky thruster0 connector. (The old pigtail was made with 6" of Harbor Freight's 250-Foot Wire Storehouse, which I really cannot recommend; the insulation is way too thick for molex connectors. But if you insist, I'm sure you can find a 249½-Foot Wire Storehouse available on clearance at the Bellevue store.)

    Only one HPAM was actually connected to the Elson display board, and that with a way-too long cable; the other was hard-wired with a jumper. Jeremy had made me a replacement set of HPAM cables a couple weeks ago, but cautioned me to double-check the pinout. A good warning: they indeed didn't match the insalled cable. I poked out the molex pins and reordered them, and put the HPAM panel all back together. Unfortunately, the lights (which were hard-wired before) have stopped working, and when I plug the hobbs meter into its HPAM port, the CPU reboots. Drat! Well, by this time it's 10:30; enough for one day.


    bugs fixed
    Thursday, March 4, 2010 -- jonh

    I made a few more rocket patches with the new embroidery machine over the last few evenings.

    Tonight I got out to the rocket with the laptop and debugged a few problems.

    • Since I'd turned the joystick around physically, I had to turn the signs around in software so the correct thrusters fire.
    • We had two problems -- the booster was always on, and the lights were off -- that when described together suggest an obvious cause: the software mappings from symbols hpam_booster and hpam_lights to LEDs were incorrectly initialized. Swapping those two fixed things right up.
    • Plugging in the hobbs meter resets the CPU. This appears to be just a voltage sag from the inductance of the motor inside the hobbs meter; Jeremy thinks adding a cap to the HPAM board will clear it up. In the meantime, it doesn't keep the rocket from working, since the latch holds the meter running during the first reboot cycle, preventing a loop. Now the rocket emits a soft "tick tick tick" of the meter running.
    So the rocket is mostly back together and play-withable now. Yay! We still need to sort out the TWI bug, so that the keypad can be used to activate the various software programs.

    I did use the "autotype" module to test disco mode, which was indeed pretty down and fun-kay.


    hardware fixed
    Thursday, March 18, 2010 -- jonh

    Once Jeremy got the TWI network going, most of the rocket functionality was working. There were a few bugs, though: when the software turned the hobbs meter on, the processor reset; and when the software flickered the lights, the thrusters would randomly pulse, too.

    The first problem wasn't a big deal, because processor would turn on the hobbs, reset, then proceed normally; it wouldn't reset unless it went idle and then woke back up. The second problem was even less worrisome: everybody agreed that the little blasts of thrust kind of added to the liftoff sequence. But it still bugged me that there were (probably electrical) problems; I wanted to fix them, and then put the random blasts back, in software.

    This morning, I got out to the rocket and soldered in some big (2200µF) caps on the lighting and hobbs busses. My "clever" wiring carried only the switched ground back to the outgoing circuits, so I also added separate +12 wires. I think the caps were the important part, but both bugs are now gone.

    I also terminated the audio board and added a header to the power distribution board to power it. Now the speakers pop when the rocket is turned on, and hiss out a little noise. Jeremy's still building the board that produces the audio signal.


    birthday schedule
    Friday, March 19, 2010 -- jonh

    Nearly a year ago, Eliot asked, "I want to have a rocket birthday party. Will the rocket be ready by my birthday?"

    Ha ha ha! No, son, feature creep must run its course! But it's finally done, or done enough to have a party. Eliot made up this schedule for a birthday party that involves a rocket trip to the moon, a rocket puzzle, and of course a rocket cake.


    repaired HPAM; new knobs
    Saturday, April 24, 2010 -- jonh

    A month or so ago, HPAM 0 failed: the lights stopped turning on, and the Hobbs meter stopped working. Those were the only two occupied channels on HPAM 0, and the other two channels continued to work. The failure was weird: the indicator LEDs would come on initially, then fade back off.

    Jeremy and I discussed the possible causes at great length: did we use the wrong diode to protect the MOSFETs, and induction voltage spikes cooked them? Why both at the same time? We came up with a bunch of theories, and Jeremy gave me a little baggy with some better-chosen diodes and spare MOSFETs, plus advice to inspect the copper traces carefully.

    I poked at the board for a half an hour, replacing out the channel 3 diode and MOSFET. Things didn't get better. I poked at it some more with a voltmeter, trying to compare its behavior to the working channel 1. The indicator LED wasn't even working; could it have failed, breaking the circuit?

    I eventually noticed that one of the cuts in the protoboard went a little too far across a neighboring trace. It looked like a mere scratch in the copper, but the ohmmeter showed otherwise. Sure enough, bridging the scratch with soldered cured the board. Apparently there had been just enough copper there to conduct a little current through the LEDs, but even the 10mA of current was enough to heat it up and change its resistance it so that it no longer conducted enough current to light the LED.

    After that minor victory, I also gathered up the two quad encoder knobs, used a couple LEDs to figure out their pinouts, and made pigtails to connect them to the CPU1 board.


    new firmware; repairs installed
    Saturday, May 1, 2010 -- jonh

    A couple nights ago I hacked out the code to run the quad knobs and to encode an analog pot to generate input events, too.

    Today I got out to the rocket with Eliot and his friend. We installed the repaired HPAM and fixed a wire splice that got broken during the Great Wire Bundling.

    We chose a few nice knobs for the pots and quadrature encoders, took them back to the shop to drill them out to the right diameter, and then installed them.

    I uploaded the new software. I noticed that uploading on rocket1 is flaky; that's the CPU whose programming port doesn't have the bus isolator. The second quad knob didn't work immediately; I'd put the ground pin on the wrong side of the connect. The potsticker code had a bug or two that I diagnosed from the orange couch.

    One quadrature knob and one pot are working correctly, and now Eliot can play Pong with round knobs, as it was meant to be. I sped up pong a little, and tuned the response rate on the knobs. I arranged for the second pot to tweak the lunar velocity display.

    I also noticed that, if you bump the programming header into the rocket's aluminum skin, it gives off awesome sparks! Oh yeah -- 5V. I should insulate that.


    audio board breadboard
    Wednesday, December 1, 2010 -- jonh

    At Hallowe'en we showed the rocket off to some neighbors, and were reminded that the takeoff, while rumbly, sure could use a little more rocket-y noise. And we already have an amplifier and woofer installed! And software mostly written! And audio samples created! Eliot wondered just why we have a space in the panel marked "audio board" with no actual audio board.

    So I sat down to begin prototyping an audio board. I got partway through, and fired off a long list of questions to Jeremy. Jeremy pointed out that he'd already breadboarded much of the design last year. And hand-sketched it up on a sheet of graph paper. And scanned it. And checked it into the rocket source code repository (photo background). And maybe I ought to start with that.

    Armed with his schematic and recently-arrived Sparkfun and Digikey orders, I prototyped the 3.3v conversion and SD slot, the pieces that Jeremy hadn't yet prototyped. To be able to learn anything from the prototype, I included a CPU, programming header, MAX232 and RS232 serial output port. The only thing missing now is (a) software to talk to the SD card and (b) a serial port. I forgot that modern laptops don't have serial ports, so it's time to find a USB-serial dongle.


    audio board protoboard
    Saturday, December 11, 2010 -- jonh

    I spent the day at Jeremy's, poking at the SD card with the Atmega and peeking at it with the logic analyzer. We almost got it working, but our 8-bit SPI bytes seemed to only have 7 bits. We later figured out this was because our 5-to-3.3 volt level converter was actually emitting 2.5V; changing the resistors found the missing clock pulse.
    When I got home, I knew things were working well enough that it was safe to start melting lead. I had been layout out the protoboard on bus commutes, so I was ready to start (images at right) placing the sockets, marking the copper side for selective removal, dremeling away the unwanted copper, soldering in the sockets, and then soldering in the rest of the components.



    audio breadboard running
    Sunday, December 12, 2010 -- jonh

    Today I finished up the rest of the board. Eliot and I made a dash to Radio Shack for some very large resistors, and I had to add some bigger capacitors to the MAX232 serial driver, but otherwise the board mostly worked as it should.


    software running
    Tuesday, December 14, 2010 -- jonh

    Today I took the board and its USB cables with me on the bus. I was excited to convert from the polling-based test code to the interrupt- and continuation-driven style needed to make the SD-card stack integrate with the rest of the rocket operating system. I finally got it working today; in the screenshot, I wrote "Hello, world" to the card from my laptop, plugged the card in, and read the string back out from rocket code.


    audio is streaming
    Saturday, December 18, 2010 -- jonh

    Today I soldered in a needed capacitor for the audio output (It turns out picofarads are 10^6 smaller than microfarads, not 10^3. How embarrassing!), and getting the audio output code working. I had audio streaming off the SD card by the evening. In rocket tradition, I called Jeremy and Leisl to play the Apollo 11 countdown over the phone.


    connected to rocket
    Sunday, December 19, 2010 -- jonh

    Today I hammered out most of the rest of the software layers, wiring the audio streaming module to get called by the existing code that receives network packets telling it what should play. The main board in the rocket is already issuing these packets; it's just that for the last year they just fell out the end of the network cable and drop through the perforated floor to the dirt below.

    Today was different. There were some false starts: I needed to add a power cable to the rocket, and I spent a long time with an oscilloscope and a spare rocket board discovering that I'd just failed to set the audio board's network address (blush).

    But at 10pm, I went out to the rocket with a pair of headphones and the audio board, and plugged it in. When I turned on the master switch, I got the splash screen ... and a quindar tone! (A quindar tone is the beep that started and ended NASA Apollo transmissions. They were only heard by the viewing public, not the vehicle crew, but they're now so iconic that the R-ULAV is going to use them whenever possible.) Pong beepend and booped exactly as expected. And when I started a launch, the Apollo 11 countdown played in perfect synchronization with the giant rolling digits. Success!


    atmega flashcard toy
    Saturday, January 22, 2011 -- jonh

    I've been hacking on the audio board every so many evenings for the last couple months. I'm a little stuck; it seems to be having some analog-side problems both with the DAC audio out and the TWI sections. So I'm sitting on that until my fantastic Rigol scope shows up on the slow boat from China (literally).

    So a few other electronics treats have shown up. Jeremy and I discovered the Atmega 1284, equipped like our workhorse 328, but in a 40-pin through-hole package with a metric boatload of RAM and program flash. I also grabbed a $4.50 LCD screen from eBay. As an excuse to play with them, I came up with this little toy for Eliot.