WB8NBS

NBS
This Blog will document projects I have
in progress or completed. You can search for my
handle on Flickr, Facebook, YouTube, or Picasa
for photos. I will link some of those here.

The Shed Project

This post is not really woodworking more like carpentry. Sheds are legal in this town as long as they are not on a permanent foundation and are at least 3 feet from a utility easement.

I bought this house in February 1999. There was a 10×12 foot shed in the back yard which was even at that time clearly deteriorating. Fast forwarding to 2015 and it had become a house for homeless rodents. The door had disintegrated and part of the floor had rotted away. I do need the storage space so I am rebuilding the underlying structure and will be replacing some of the rotted T1-11 siding on the front.

This is the patient. Note there is no transom or sill under the doorway. The front of the shed faces West and is just set on the dirt following the grade of the lot. It definitely tilts towards the back where there is a drainage swale. My measurements estimate the front is four inches higher than the rear. I believe this was a major factor in the floor deteriorating as rain falling on the door will run into the shed. I will think about raising the rear to make the structure level.

DSCF0295

 

Most of the trim is untreated pine, and the bottom front has been in contact with soil.

DSCF0296

 

Part of the floor has been removed here and the camera is inside looking at the area underneath the door. Some timber and Great Stuff there in an attempt to keep the rabbits out. The floor is 5/8 plywood and was nailed down with ten penny spikes about every 15 inches. Not fun to get up but I want to put it back down if possible after the framing is repaired.

DSCF0298

 

Transom area from the outside. This would be looking east.

DSCF0297

 

On the south side the floor has been taken up to see what structure is underneath. The shed proper is made of a set of prefabricated barn shaped 2×4 trusses. They are supported by four 4×4 timbers running east to west on a two foot spacing. I discovered that these 4x4s are in turn supported by three 4x4s running north-south set into the dirt.

DSCF0299

 

Four two foot spaced 4×4 across a ten foot shed leaves a foot extra on each side

DSCF0300

 

The plywood flooring has rotted in the area around the door. It has been replaced in pieces at least once.

DSCF0301

 

The first phase was to shore up and replace the sill under the front. Here the front of the shed has been jacked up about four inches. I obtained several two foot long 12×3″ treated cutoffs from a forest preserve project a few miles from here. Getting them home on a bicycle was interesting. My original plan was to use the cutoffs as pads underneath the 4×4 sub structure. In this photo there is a pad under each of the four members at the front.  I have a number of treated 2×6 timbers removed from a deck and I decided to put one 2×6 on top of each of the lateral 4x4s. This will raise the entire structure an inch and a half, getting it above the dirt. I hope.

DSCF0710

 

This bumper jack is raising the southwest corner. Big jack, must have been from a Buick. It will pull a fence post no problem.

I’m cutting the 2 foot pads in half which gives a piece about 11×12″ and you can see the pad in the corner.

DSCF0711

 

I have one hydraulic floor jack, and a half dozen scissors jacks accumulated in anticipation of this project.  The procedure is to dig a hole, slide the jack under a support beam and turn the cranks evenly. The floor jack worked the easiest, and the bumper jack not too difficult with the load but the scissor jacks were hard to turn their screw while the jack is in a hole. A big crescent wrench helped.

I’m also putting a pair of support pads under each side because I noticed the shed has sagged a bit in the middle.

DSCF0712

 

This photo shows the north side of the shed. Another scissors jack is helping raise the center of the structure and the front is now elevated. Pads have been placed at the front corner (left of photo) and at two spaces under the side 4×4″.  You can see a 2×6 has been slid over the front lateral and also over the lateral in the center. The barn shaped trusses are on 24 inch centers.

DSCF0713

 

The horizontal part of the bottom front truss 2×4 that formerly formed the bottom of the door frame was gone. Rather than replace it with another 2×4, I laminated a pair of 2x6s with a bit of half inch plywood to make a beam the same thickness. The vertical studs that formed the door frame are rotted at the bottom, they will be replaced when I find a suitable door.

DSCF0714

 

This is the southwest front corner after raising and placing the treated lumber pad, and installing a new beam across the front. I have screwed a short piece of 2×4 to the rotted door frame to hold it together temporarily.

DSCF0730

 

This is the north side of the door frame with a good 2×4 added.

DSCF0729

 

At this point the front had been repaired enough that I could begin at the back of the shed. The remainder of the floor was removed, the jacks moved to the back. I decided to add another three inches under the rearmost beam to make the structure more level. This is the final arrangement at the north east corner. Three 2×6 under the side beams and two of the 3 inch pads to help take the load.  I put a long lag bolt all the way through the 2×6 to tie the structure together.

DSCF0723

 

This is the opposite rear corner.

DSCF0724

 

The two middle 4x4s had to be double padded as well.

DSCF0725

 

Since I had added 3×12 pads at two points along each side, raising the rear an additional three inches required adding some additional wood to take up the space at those points.  One inch ripped from a 4×4 above the pad at the left in this photo and one inch plus a 2×6 at the right.  The center lateral beam just needed one more 2×6 to make it come out even. The center was bolted down as well.

DSCF0726

 

Now the structural repair was complete and I could start putting the plywood floor back down. It’s splintered a bit from digging out the nails but in a shed, I don’t care, I spackled the splinters.  I’m screwing everything together so it can be taken up easily at some future time.   I put down a layer of rosin paper. Don’t know if that’s necessary but I had some so I used it.

This photo is the north side corner at the rear.

DSCF0731

 

This photo is the south corner at the rear. I also squirted Great Stuff in all the spaces around where the trusses were cut out.

DSCF0732

 

 

To Do as of 8/7: Finish re-laying the floor and plan to patch the damaged part. Find an exterior door! Get a sheet of T1-11. Get a sheet of 5/8 ply to patch the floor. Get 1×4 cedar to frame the door. Figure out how to get those home. Add soffit vent screens and a screened vent at the rear near peak.

Update: Week of August 10-14

The flooring is all back in place except a 2′ x 6′ piece behind the door which was too badly rotted to reuse.

DSCF0749

 

Added four soffit vents and a 14 inch square gable vent at the top rear. Made a nice cedar frame for the gable vent.
I rented a pickup truck from Menards ($19 for 75 minutes, made it with 15 minutes to spare) and hauled the following things home:

Sheet of 5/8 exterior plywood
Sheet of T1-11 siding
Three 8 foot 1x6s
Three 7 foot 2x4s

And while I had the truck, a used exterior door from the Habitat Resale store.
So now I have no excuse for not finishing the project.
I am not very confident with the door, have to make a frame to fit it. After some drawing and math involving ugly fractions I had a plan for the frame.

The old frame is 4 1/2 inches thick. Probably made to account for a 2×4 stud wall and a half inch of wall board on either side.  I only have the stud wall to account for so have downsized the proposed frame to 3 1/2 inches wide. I bought three 2x6s to form the frame so I moved my table saw to the summer workshop (driveway) and ripped them down. Two of the waste strips were then ripped to 3/8″ thickness, one to half inch. These will form the stop moldings .  Here is the ripping work station. I use my plug in router table as an outfeed support. It plugs into channels on either side of the saw table.

DSCF0733

 

I blocked up the door on a couple of saw horses and clamped the stop molding and frame members to the sides to get an idea of what to do next. It looked good but how to align the hinges?

DSCF0734

 

The door formerly had hinges with four screw holes. Could not find hinges that matched the hole pattern though so I moved the hinges up a half inch so there was solid wood for new screws.  I decided to cut the hinges into the frame member first. I aligned them to the board edge and knifed in the hinge outline. Used a one inch chisel to further deepen the hinge outline and a small gouge to round the corners. Then wasted most of the pocket with a trim router, followed by a pass with my good old Stanley 71 router plane to clean up the edges. Hinges fit well. Now to fasten the other hinge leaves to the door.

I set the frame with hinges attached on the door. With a 3/4″ board under each one it looked like the alignment on the door was as good as it could be. Piloted the screws with a Vix bit.

DSCF0736

 

This shows one of the hinges hanging over the door edge ready to be piloted and screwed down. After running four screws in each hinge on the door side, I removed the clamps and, Moment of Truth, found the frame pivoted all the way with no binding whatsoever. Success!

DSCF0735

 

The final bit of engineering was to bridge the top of the frame. After studying the existing frame, I decided to capture this horizontal board in shallow Dados. I laid them out in pencil, cut the sides down a quarter inch with a back saw then hogged out most of the waste with a chisel. Cleaned the bottom of the dado with the Stanley 71 router plane. This is the Christopher Schwarz/ Roy Underhill method and was probably faster than setting up a jig for the little Dewalt router.

This photo shows the dado with header board inserted, glued and screwed.

DSCF0737

 

Finally I screwed a temporary header across the bottom of the frame, punched out the hinge pins and removed the door. Two temporary diagonal braces were screwed on so the frame can be safely moved.  Both the door and the frame are on the back yard deck now with a coat of paint drying. I think it will work, will find out Monday when the install is done.

 Update August 18

Howard Peterson, from the Dupage Woodworkers Club came over to help with the door. Howard is active with Habitat for Humanity and has much experience building houses. In four hours we had the door installed and the missing piece of flooring replaced.

After tearing out the old frame and the 2x4s that supported it, a framing square showed the opening was far from square, and the floor was not level. Howard ripped tapered shims from 2x4s to correct the out of square condition. Look closely at the vertical edges in the next photo, you can see the tapered bits. I would never have though of doing this, thanks Howard!

DSCF0750

 

After considerable fussing, the door fit well, and we cut a new piece to replace the open floor behind the door. The inside of the shed is now secure and usable.

DSCF0751

 

Update August 23

Next step was to replace the rotted and ant infested sections of T1-11 siding on the front. I figured I could do this with a single sheet of siding if only the bad parts were re done so ran a horizontal chalk line two feet up from the bottom and sliced off the old material with a circular saw. New sections were cut and fitted. I decided to run the new lower piece down almost to the footing to fill the open gap there and in doing so, almost ran out of the new sheet. The lower right piece was short but it turned out the pattern didn’t line up anyway so I made a five inch filler piece and it’s hardly visible.

All the new sections are fastened with screws and I put aluminum drip edge strips in the horizontal seams to keep rain out of the joint.

DSCF0752

 

And here is the repaired front side with one coat of oil stain.  Later another coat of stain was done on the entire shed. Had to caulk a number of carpenter bee holes in the left hand soffit.

DSCF0754

 

The final step was to replace the edge and door trim on the front. I had to rent the Menards truck again to bring home the half dozen cedar boards I figured would be needed.  I’m using six inch cedar trim around the door rather than brick molding plus four inch that was on the old door.

Cedar was cut and fitted for door stop moldings at this time.  This was complicated by the fact that there was a 3/4 inch warp in the front wall which cause the top left corner of the door frame to stick out farther than the right side. I couldn’t use the stop moldings I had previously made, had to make tapered stop strips out of cedar to account for the bulge.  It was a chance to use my latest secret weapon, a crude scrub plane I made out of a decrepit wooden jack plane. The blade has been ground to a radius of 8 inches so the plane takes a deep narrow cut. It hogged off the extra wood down to the line in about five minutes and I shot the edge with a long jointer plane.

DSCF0756

 

My scrub plane takes out these thick rough shavings. Doesn’t take many passes to remove a half inch of cedar.

DSCF0757

 

All the trim and stop is in place in this picture.  I installed an aluminum threshold piece which will help shed water out the front instead of running back into the shed floor.

DSCF0755

 

A major benefit of using deck screws instead of nails is you can take the project apart for painting. I painted the trim a lighter color to match the house, would have gone crazy cutting in two coats of paint around all that cedar. Here is all that carefully fitted wood painted and drying on saw horses.

DSCF0758

 

Update August 25

And this is the completed, painted restoration. Just need to add some weather stripping around the door and caulk a few gaps under the eves.

DSCF0759crop

 

I’ve been fussing inside the shed all day. It’s an interesting problem, how to best make use of a 10×12 foot space. Formerly, stuff was just piled on the floor, so usually had to crawl over some things to get to what I needed. I’m now hanging as much as I can from the back and front walls and stashing spare wood scraps in the rafters so the floor space is clear. Also thinking of a ramp up to the door. I could store the lawn mower in there if I make it easy to get in and out.

This project is considered finished now, though there will always be changes to my storage strategy. I hope it lasts another 20 years.

Rebuilding Uncle Ray’s House Number

DSCF0647crop

Sixteen years and change ago, we moved to our current location in Naperville, Illinois. As a house warming gift, Uncle Ray Lauderbach gave us an illuminated house number sign. He had made many of these for his neighbors in New Jersey. The design consisted of a wooden box about 5″ x 12″, and 3″ deep. It’s assembled using box (finger) joints.  There is a groove around the front where the number template, cut from thin black foam and glued to a sheet of textured plastic sits, along with a sheet of thin plastic as a front face plate. The back of the box is a sheet cut from a plastic mirror tile. Ray installed three 12 volt incandescent bulbs connected in series, these were powered by a 20 VAC wall wart, the undervoltage provided a dim but long lived illumination.

I screwed the box to the front of our garage.

I’ve painted the box four times and caulked the face plate but could not keep moisture out of the interior. In 2015 I could see the corners crumbling and it was clear that reconstruction was necessary. I removed it from the garage and disassembled. It’s a credit to Uncle Rays box jointing skills that I had to jack the ends apart with a reversed clamp to extract the number stencil sandwich from it’s groove. I cleaned everything and prepared to make a new wooden box.

Raw Material

Home Depot has these half inch thick Cedar fence pickets 6 inches wide and four feet long. I made a bird house out of them a few years ago and its held up well. There were three pickets lounging in my lumber stash, so this was a logical starting point. Also in this photo you can see the number sandwich and the mirrored backing plate with the electrics.

Bare Home Depot Cedar Fence Picket

Bare Home Depot Cedar Fence Picket

 

I decided to use the “Eleven Grooved Box” technique with mitered corners reinforced with splines. So I ripped the picket to 3 inches, and cross cut to about 38 inches. This was clamped in my planing board, planed smooth on one side, and readied to cut a quarter inch groove the whole length.

3 x 36 Inch Strip Ready to Plane

3 x 36 Inch Strip Ready to Plane

 

I have a beautiful, genuinely old plow plane and used it to cut the groove. I’m sure the plow plane was quicker than setting up the router table, digging out the router, finding a bit, and creating a ton of sawdust. Note to self: Cedar shavings smell good and make good mulch.

Plowing Quarter Inch Groove

Plowing Quarter Inch Groove

 

This is a close up of the finished groove in what will be the front edge of the new box. The whole 38 inches has been grooved at this point.

Finished Groove 1/4 Wide 1/4 Deep

Finished Groove 1/4 Wide 1/4 Deep

 

A test showed that the number sandwich fit well in the quarter inch groove. Also in this picture you can see one corner of the old light box.

Test Fit

Test Fit

 

Box Componants

The next step in making an Eleven Grooved Box (actually this one only needs nine grooves) is to slice the stock into 45 degree mitered side pieces. This is done using a big Stanley miter box. I used the plastic front face plate to gauge the dimensions of the pieces, leaving about an eighth of an inch extra for caulking.

Slicing the 36 Inch Strip

Slicing the 38 Inch Strip

 

With all four sides cut and checked for equal length top to bottom and side to side, I could do a dry fit using a strap clamp with the number sandwich inserted. It worked perfectly.

First Dry Fit

First Dry Fit

 

Next to cut grooves in each of the eight miter faces to receive the eighth inch splines I had cut from the remaining piece of the Cedar picket. I have a jig for this, developed to hold a Stanley 45 plow plane in just the right orientation.

Plowing 1/8 Inch Grooves for Splines

Plowing 1/8 Inch Grooves for Splines

 

All four box sides have been grooved in this photo. The jig mentioned above allows a clean cut which means a tight fit for the splines that will be glued in.

Four Completed Box Sides Grooved for Splines

Four Completed Box Sides Grooved for Splines

 

Box Assembly

The number sandwich has to be inserted in the front groove as the box is glued together. I made this a two step operation by gluing up the top, bottom, and one end only first, then inserting the plastic number sandwich, then finally gluing the last end in place. This photo was taken while the first stage was setting. The second end is in place to keep the box in shape, it has no glue applied yet.

First Stage Glue Up

First Stage Glue Up

 

I applied silicone sealant to the front edge only of the groove, inserted the plastic face plate, pressed it in place against the sealant, then slid in the number stencil with it’s textured plastic backing. This seals the front tightly but will allow the number itself to breathe a little bit.

Then glue was applied to the final box side piece along with it’s two splines, sealant applied as before, the final end inserted and clamped.  The photo below was taken the rear surface planed flush and the box primed. You can see how the splines fit tightly and reinforce each corner. There is only a single joint line exposed to the weather.

Rear Surface Planed Flush

Rear Surface Planed Flush

 

At this point I fitted the rear mirror with it’s electrics to the box and tested under power. It did not light. I checked and every one of the three light bulbs were open. Apparently they did not survive the box disassembly. These were bayonet base 12 volt bulbs from Radio Shack. Radio Shack no longer exists in this area, so I decided rather than try to find replacements, to construct something with white LEDs.

On the table saw I ripped a strip from an old prototype printed circuit board. It has a single long row of tenth inch spacing holes. Note to self: wear safety glasses and use a carbide tipped blade you don’t care about. Fiberglass is very abrasive.

I have a handful of white LEDs harvested from a string I got during a post Christmas sale, and dug up a 12 volt wall wart (actually measured closer to 18 volts). I soldered eight LEDs to the PC strip, wiring them in pairs with a 1500 ohm resistor between each pair which allows about 10 milliamps. Each pair is wired to common power points in the center. I splayed alternate LEDs out a bit to spread the light more evenly.

New Light Strip

New Light Strip

 

I removed the old bulb sockets from the mirror but left the three supporting copper brackets.  With a bit of bending I was able to solder the new LED strip to the copper strips for good support. The LEDs point towards the mirror, not towards the front. I felt this would spread the light more evenly.

New Strip Soldered to Old Brackets

New Strip Soldered to Old Brackets

 

A dry fit in the box showed good even illumination. There is a slight shadow across the center due to the PC board strip but hardly noticeable.

First Test Light

First Test Light

 

Re-Installation

Back in the garage, I reattached the strip of flashing across the top rear that mounted the old box. Then I attached a strip of extruded aluminum behind the flashing. This will tilt the box forward slightly and help rain to run off. I cut a small piece of flashing and attached to the bottom of the box to make sure that edge is held tightly against the wall.

Finished Box With New Mounting

Finished Box With New Mounting

 

Here is the front view of the rebuilt box after a couple coats of paint.  Note to self: paint doesn’t stick to silicone sealant fingerprints.

Front Of Finished Box

Front Of Finished Box

 

So now it’s show time. Screw the creation back on the garage face. Since I used the original rear plate and mounting bracket, I only had to drill one new pilot hole. The power wire was routed inside across the header plate to the nearest outlet and stapled down. Power is on continuously, you can’t see the illumination in the daylight but because of Uncle Ray’s black background the numbers are very readable.

Mounted on Garage

Mounted on Garage

 

Finally the real test, how does it work at night? It’s a little bit brighter than the original setup but still not so bright it is distracting.

Night View

Night View

 

Thanks Uncle Ray!

Toastmasters Timing Light

There was a post on the Workshop88 mailing list asking for someone to construct a small manual light box for use by the timer at Toastmasters meetings. The specification was, a switched Green LED, switched Yellow LED, switched Red LED, and a fourth switch to blink all the LEDs at a 1 hz rate. The actual timing is done by a human with a stopwatch, the box just signals the speaker. The Toastmasters’ existing setup uses 110 volt incandescent lamps and is not very portable.

Much discussion ensued on the mailing list about what could be done with a Raspberry PI or Arduino, LCD screen, etc. etc. but in the end, I agreed to design and build something simple according to the original manual spec. Ultra bright LEDs could be used with a 555 timer to do the blinking. A standard MN1604 9 volt battery would easily power the LEDs for 8 – 12 hours. And I could use the standard Arduino style enclosure: and Altoids tin.

I’ve built two of these boxes. The photos on this page are from the second – but first came a prototype on a solderless breadboard.

Breadboarded Timer

Breadboarded Timer

 

On the breadboard the timer circuit was checked for reasonableness and LED illumination tested. I found with a nine volt battery I could put two LEDs in series, and with a 200 ohm limiting resistor the Red LEDs drew 15 milliamps, the Yellow 20 Ma, and a pair of Greens 12 Ma. The Red and Green were very bright, Yellow not so much. Later I checked the spec sheet on the Yellow LEDs and found they would take 50 milliamps.  I lowered the Yellow limiting resistor to 130 ohms which brought the Yellow current up to 35 Ma and then all three pairs were similarly bright.

These Ultra Bright LEDs have a clear plastic envelope with a lens formed in the end which directs most of the light straight up.  I sawed the tip of each LED off at a 45 degree angle to remove the lens. This directs more light to the front and reflects much more to the rear.

Original and Faceted LED

Original and Faceted LED

 

Here is the final schematic. This is slightly revised from the first model, the timing person wanted a separate power switch, and also wanted the blink cycle to start with LEDs on rather than LEDs off.

Toastmaster Timer Schematic

Toastmasters Timer Schematic

 

The original breadboard had all three of the grounds at the bottom of the 555 chip connected together, a switch from there to power negative activated the 555. In that configuration, the 10 microfarad capacitor started out in a discharged state which resulted in LEDs off.  Splitting that capacitor off and hard grounding it causes it to start in a charged state which turns the LEDs on. Switching the 555 pin 1 to ground starts the blinker.

I constructed the 555 module on a bit of perf board with copper pads on one side. A six hole by seven hole piece holds all the parts. This is the layout sketch I used.

Toastmaster Timer Blinker Module

Toastmasters Timer Blinker Module

 

Here is an assembled module. It measures 3/4″ by 5/8″.

Blinker Module

Blinker Module

 

With the blinker built and tested, I turned to physical construction of the box. Everything should fit in the lid.  I made an aluminum template for drilling the ten holes. In this photo, the four switches have been mounted and there are small holes drilled above the nut for the anti-rotation washer.

Altoids Lid Drilled and Template

Altoids Lid Drilled and Template

 

The LEDs don’t have any formal mounting hardware. To get maximum exposure, they are just inserted in the holes until they bottom out on the shoulder. Then a narrow strip of FR4 perf board is threaded over the leads. This photo is three strips cut from a wire wrap prototype PC board. I use a crosscut sled on a table saw for this, with a narrow carbide blade centered on the fourth row of holes.  Width of these strips is important because they help restrain the battery.

LED Retaining Strips

LED Retaining Strips

 

The fiberglass PC board strip is tacked down with bits of bent paper clip soldered to the tin lid. That paper clip in the center had to be moved later because it interfered with the battery. Soldering the LED leads in the perf board creates a very rigid assembly. I added the current limiting resistors between the LED pairs.

Switches Mounted and LED Dropping Resistors

Switches Mounted and LED Dropping Resistors

 

Spacing between the switches and the LED retaining strip is critical because the nine volt battery has to fit there, but not rattle around. A large paper clip was straightened out, then bent to capture the battery. A paper clip has just enough spring to hold the weight of the battery. This photo shows the battery clip soldered onto the lid. White arrows point to the four Z shaped wires holding the LED retaining strip in place. Ground leads are soldered to each switch and each has been cabled to it’s assigned LED pair.

Pins Holding LED Board

Pins Holding LED Board

 

Here is a photo with a battery installed in the clip. You have to be careful not to short the terminals on the lid lip.

Fitting the Battery

Fitting the Battery

 

At this point the lid is ready to receive the 555 timer blink module. It is mounted with two more bits of soldered paper clip, this time bent into an L shape. One clip is soldered into the ground hole of the perf board, the second in a vacant hole. White arrows in this photo point out the two module mounting clips also three of the LED restraining strip clips. Note the two retaining strip clips nearest the rim are bent parallel to the lid edge. This is to give clearance for the box bottom.

Blinker Module Installed

Blinker Module Installed

 

The last piece of hardware installed was the power switch. I used a small slide switch as that type will be less likely to accidentally turn on in somebody’s pocket.  Two eighth inch holes were drilled, then squared up with a small file. I soldered the ears of the switch to the inside of the box.

Power Switch Soldered In

Power Switch Soldered In

 

Finally the wires for power were added, everything tested, and all loose wires laced up with waxed dental floss. A bit of foam tape was added to the bottom to help make sure the battery clip doesn’t come loose. There’s a small paper clip loop soldered next to the power switch to take up strain on the wires there.

Internal View

Internal View

 

Here is the finished box with all three LED strings lit.  Note this is not a normal condition, only one color at a time should be on, mostly the Green which only draws 12 Ma (but is so bright it hurts your eyes). Blinking will draw about 60 Ma half the time. Duracell’s data sheet shows a useful life greater than 8 hours with a 50 milliamp draw so I expect this application to last considerably more than that.

Completed Toastmaster Timer

Completed Toastmasters Timer

 

This has been an interesting project that was well received by the users.  There is a short video on my Dropbox account.

Added: May 27, 2015

I needed a way to get consistent bevel cuts on the modified LED lenses using my bench grinder which is far quicker than the Dremel tool with cutoff wheel method.  The solution as any woodworker would know, is to make a jig. In this case though I was able to re-purpose a fixture I made years ago to hold hand plane irons while touching up the bevel. It’s just two pieces of 3/8″ x 3/4″ steel bar stock with half a dozen holes drilled. One piece is tapped, screws through the other then clamp the plane iron in the jig and it can be held tightly to the edge of the grinder’s tool rest.

Adapting this fixture to hold LEDs only required adding a washer slightly thicker than the LED wire leads to one end. I had to grind the underside of the threaded bar to get clearance for the grinding wheel. Two LEDs can be slid into the beveled end and clamped there by the screws. A single long screw through one of the threaded holes at the washer end provides a stop that can be held against the grinder tool rest.

LED Grinding Fixture

LED Grinding Fixture

 

I can tweak the grind angle by adjusting the tool rest, and a few passes across the grinding stone produces the consistent bevel I wnt. Just have to be careful not to grind away too much. I put a dab of nail polish on the ground surface to clean up the scratches.

 

 

Home Made Iambic Paddles

I have two homemade paddles to use with the Iambic Keyer Project.

This first example was made in the late 70s or early 80s, can’t remember exactly. I mentioned to a friend who worked in maintenance at a steel mill that I was looking for a heavy piece of metal to make paddles that wouldn’t scoot around on the desk.  We discussed some ideas and a few days later he produced the frame (all the blue parts) you see in the photo. It weighs over five pounds, it only moves if you want it to.

The arms are plexiglass fastened to short pieces of tubing. The tubing is flared at each end and each flare receives a bearing ball. Cup tipped Allen screws in the top frame and in the base capture the balls. With careful adjustment leaving a small amount of play, these bearings work well.

The rest of the paddle hardware is made of scraps from my junk box. Simple contacts made from machine screws work, but are noisy. Noise however does not bother the keyer much, as once an element is started, the paddle input is effectively debounced by dot/dash timing in the software.

Paddles Home Made About 1978

Paddles Home Made About 1978

 

My second example was made recently. I decided the blue paddles were not portable enough so I made something smaller. This set has a base of two inch steel Aux Bar scrounged from a telco installation project. The next photo shows the first iteration.

For pivot bearings I used brass thread inserts from Woodcraft. They have a 1/4-20 inside thread and a very coarse outside thread, intended to screw into a woodworking project. I filed the coarse threads off two sides of the inserts and soldered them to a strip of PC board material to form the paddle arms. The bearing for the arms is then the threads of the screws which go into threaded holes in the base plate.  Contacts are bent paper clips screwed to half inch nylon standoffs.  This works but has a terrible feel due to slop in the 1/4-20 threads.

I put a square of sticky silicone mat under the base and it stays put pretty well. The square was cut from a large mat intended to hold a wood work piece in place while you use a router on it’s edges.

Paddles Home Made February 2015

Paddles Home Made February 2015

 

The second iteration of the Aux Bar paddle is an attempt to remove some of the annoying backlash in the screw thread pivot bearings. I thought longer threads would help and got two threaded sleeves from the hardware store. These are made for joining two lengths of threaded rod. They have a #10 thread and are about an inch long. Two new paddle arms were constructed, this time with the bearings on the outside of the PC board as the sleeves are larger than the brass inserts used in the first model.

I inserted three sets of small screws into the arms to capture the tension spring which allows some adjustment. The spring shown in the photo is from an old IBM keyboard. If you part out one of those old Model M’s you have enough springs to last a lifetime. A second spring directly between the pivot points takes up some of the backlash remaining in the threads. Also the two #10 pivot screws are epoxyed into the base to eliminate that small bit of wobble. At the back of each arm where the paper clip touches, I added a drop of silver containing solder to make a better electrical contact.

This iteration has a very light touch but still too much slop in the bearings. I think with some tuning of the springs it will be very usable.

Paddles Home Made March 2015

Paddles Home Made March 2015

 

 Update 5/11/2015

Added a spring directly centered between the two pivot points. This spring is stronger than the small one separating the paddle arms, and it’s function is to take up backlash in the sloppy threads on the cheap pivot screws. I soldered cut down copper carpet tacks to the inside of the paddle arms to keep the new spring in place. The spring force is directly between the pivot points, so it does not contribute to the effort required to close the paddles unless you press hard enough to overcome it’s higher tension. It improved the feel of the Aux Bar paddles a lot.

Pivot Spring Added

Pivot Spring Added

Fun With Direct Digital Synthesis

You know that good feeling you get when a project comes together? Thats what I felt when I saw this sine wave on my oscilloscope.  It’s a Pulse Width Modulation (PWM) signal generated by an Arduino using a Direct Digital Synthesis (DDS) technique and a lookup table of amplitude values. It was the result of searching for a way to improve the tone quality of a morse code keyer project and I had gotten half wave, then quarter sine wave symmetry working in a demonstration sketch.

Quarter Wave Symmetry

Quarter Wave Symmetry
1000 Hz 256 Step Table

 

Digital to Analog Conversion is best done with optimized precision circuits. The relatively simple processor in an Arduino does not have a DAC device but it can do Pulse Width Modulation which can, in most cases, do the job adequately.

Pulse Width Modulation is widely documented. Basically it is a technique for generating an analog voltage from a digital signal. The device generates a high speed pulse train with varying pulse widths.  This is fed through a filter circuit which averages the energy in the pulses.  Fat pulses average to a higher voltage, skinny pulses average to a low voltage. By changing the pulse width over time, digital software can create a good analog representation of an arbitrary periodic signal. Other interesting applications are possible.

An Arduino generates PWM by setting up a timer. This is a counter with a circuit to trigger an interrupt at a specified count. The counter is incremented by the processor clock or, through a prescaler, a submultiple of the processor clock.  PWM is achieved by the Interrupt Processing Routine (ISR) manipulating the specified count at which the timer fires. DDS applications synthesize an arbitrary waveform by using a lookup table of values that the ISR accesses sequentially to change the terminal count.

Common non-DDS applications might be dimming an LED , feeding an RC servo, or controlling the speed of a motor, and the Arduino environment has a convenient analogWrite() function that handles all the details for you. Hybrid cars use PWM to control the traction motors.

I found many articles on generating DDS sound using the Arduino platform. I picked one from KO7M as a base to learn more about the method. Read Jeff’s weblog entry with source code here. His sketch sets up timer 2 for PWM with a 32 KHz base frequency.  Timer 2 is normally used by the Arduino for the tone() function and since my aim is to supersede the tone() function with something better, his example was a perfect starting point. In this article, I will only describe the changes I made in Jeff’s Interrupt Service Routine (ISR) and in the tables. Details of setting up the timers are covered in the source code and in many Internet sources. Here is a drawing of the Arduino connections:

Schematic for DDS Demo

Schematic for DDS Demo

Only five external parts needed including a button switch that stops and starts the sweep.

My test bed started out simple but it grew some (gruesome?).

Test Bed

Test Bed

Part 0: Analyzing and Parting Out the KO7M Sketch

After confirming that the sketch actually worked, I added code to sweep the frequency range from 50 to 2000 HZ so I could hear what it would sound like, and observe fidelity on my oscilloscope. Later I also added lines to generate a pulse at the start of the sine wave on a different pin. Using this pulse as an external sync source allowed the scope to display a steady waveform. I removed the sync code in the examples in this post for clarity.

This is the ISR from the original sketch (with small changes by me). TuningWord is the only parameter passed from the main part of the program. It is adjusted to set the particular PWM output frequency desired:

ISR(TIMER2_OVF_vect) {
  byte sine_table_index;
  static uint32_t phase_accumulator;
  
  // Update phase accumulator and extract the sine table index from it
  phase_accumulator += tuning_word;
  sine_table_index = phase_accumulator >> 24;  // Use upper 8 bits as index

  // Set current amplitude value for the sine wave being constructed.
  OCR2A = pgm_read_byte_near(sine256 + sine_table_index); 
}

Note Jeff is storing his sine table in flash memory. If you’re not familiar with that technique, read this tutorial. It is a good method for reducing the RAM footprint of an Arduino sketch. You can find my version of Jeff’s sketch here.  This is the 1000 Hz output from the original sketch with floating point math:

Original Floating Point

Original Floating Point
1000 Hz 256 Table

Part 1: Integer Conversion and Multiple Sine Tables

At this time, all floating point math in the example was converted to integer. To my surprise, it still works. There is more jitter on the waveforms due to integer truncation, but for keyer sidetone it is acceptable and the sketch sized dropped by about half.

I wanted to experiment with multiple lookup tables to get an idea of the minimum memory footprint possible while still producing acceptable sound. Libre Office Calc easily produced data with a 0-255 range for tables of length 256, 128, 64, 32 and 16 samples. See my spreadsheet here. Calc could also graph the tables to show how rough the waveform might be.  It was a simple matter to paste a table column into VI and join the values into C style  statements. These lines of data were inserted into the sketch and wrapped with #ifdef and #endif statements. At the top of the sketch is this code:

// Table sizes. Uncomment one and only one
//#define Table256
//#define Table128
#define Table64
//#define Table32
//#define Table16

Which allows me to choose a table size to evaluate at compile time. The wrapped tables look like:

#ifdef Table16
// 16 samples per period
#define Bits 12               // # of bits to shift 
PROGMEM prog_uchar sineTable[16] = {
  128,177,218,245,255,245,218,177,
  127,79,38,11,1,11,38,79
};
#endif // Table16

Bits is a constant definition that controls how far the ISR has to right shift the phase accumulator variable so the number that remains does not exceed the sine table size.

The interrupt handler changed little and looks like this:

ISR(TIMER2_OVF_vect) {
byte sineTableindex;
static unsigned int phaseAccumulator;

  // Update phase accumulator and extract the sine table index from it
  phaseAccumulator += tuningWord;
se
  // Right shift because we're only using the most significant bits of the INT
  sineTableindex = phaseAccumulator >> Bits;

  // Look up current amplitude value for the sine wave being constructed.
  OCR2A = pgm_read_byte_near(sineTable + sineTableindex);
}

Code for this full table sketch is here. These are waveforms from the Integer version:

Integer Version

Integer Version
Three Table Sizes

Part 2: Using Half Wave Symmetry of Sine Waves to Reduce Table Size

During my Google research I found articles pointing out that the size of the sine table could be reduced by a factor of two or four if you exploited the symmetry of a sine wave. Several pages described how to do this in FPGA hardware but I could not find a good example of symmetry use in C code and nothing at all for an Arduino. I tackled symmetry in two stages.

For half wave symmetry it is only necessary to duplicate the first half of the wave for the second half, inverting the second half as it is generated. First you need to know which half is being processed during the interrupt. The Most Signifigant Bit (MSB) of the phase accumulator variable has that information. It will be zero in the first half of the sine wave, one in the second half. I added a variable to record this bit and use a mask of 0x8000 to extract the bit. Then a new constant MSBMask was created inside the table definitions to turn off the high order MSB during table lookup. The tables now look like this example:

#ifdef Table16
// 16 samples per period
#define Bits 12
#define MSBMask 0x07
PROGMEM prog_uchar sineTable[8] = {
 128,177,218,245,255,245,218,177
};
#endif // Table16

Note the table sizes are half the original. This 16 stepe per period table is now only 8 bytes long.  The modified ISR with half wave symmetry now looks like:

ISR(TIMER2_OVF_vect) {
byte sineTableindex;                     // calculated index into sine table     
static unsigned int phaseAccumulator;    // running total of phase offset
unsigned int whichHalf;                  // for sine symmetry switching

  // Update phase accumulator and extract the sine table index from it
  phaseAccumulator += tuningWord;
  whichHalf = phaseAccumulator & 0x8000; // record which half of wave

  // Right shift because we're only using the most significant bits
  // of the INT. Leave only enough bits for one half table range
  sineTableindex = (phaseAccumulator >> Bits) & MSBMask;

  // Set current amplitude value for the sine wave being constructed.
  OCR2A = pgm_read_byte_near(sineTable + sineTableindex);

  // invert the second half of sine wave
  if(whichHalf) OCR2A = 255 - OCR2A;
}

The only additions to the ISR were the whichHalf variable, MSBMask which is defined with the sine table to remove the MSB, and the if statement at the end which does the actual inversion.

Code for the half wave symmetry version is here. These photos are from the half wave version:

Half Wave Symmetry Version

Half Wave Symmetry Version
Three Table Sizes

 

Part 3: Using Quarter Wave Sine Symmetry to Reduce Table Size

Exploiting quarter wave symmetry is more complicated. It is a left/right symmetry while half wave symmetry is up/down. First you have to know which quarter of the wave is being generated. The second most significant bit in the phase accumulator variable has this information. It will be 0 if in the first or third quarter, 1 if second or fourth. A new state variable and a mask of 0x4000 records this bit.  Since we are using less of the lookup tables, the MSBMask is smaller, it now needs to discard two MSB bits. The tables now look like:

#ifdef Table16
// 16 samples per period
#define Bits 12
#define MSBMask 0x03
PROGMEM prog_uchar sineTable[5] = {
  128, 177, 218, 245, 255
};
#endif // Table16

Note that the sixteen sample table has been reduced to five (not four) bytes. The 256 level table is only 65 bytes long! The odd byte at the end was necessary to work around a glitch – the table read from flash would look up the same value twice at the beginning and end of the even quadrant. Adding one to the index and one extra table byte solves that issue. The ISR now looks like this:

ISR(TIMER2_OVF_vect) {
byte sineTableindex;                     // calculated index into sine table     
static unsigned int phaseAccumulator;    // running total of phase offset
unsigned int whichHalf;                  // for sine symmetry
unsigned int whichQtr;                   // for sine symmetry
static boolean pulsed;                   // for unique scope sync

  // Update phase accumulator and extract the sine table index from it
  phaseAccumulator += tuningWord;
  whichHalf = phaseAccumulator & 0x8000; // record which half of wave
  whichQtr =  phaseAccumulator & 0x4000; // record which quarter of wave

  // Right shift because we're only using the most significant bits
  // of the INT. Leave only enough bits for one quarter table range
  sineTableindex = (phaseAccumulator >> Bits) & MSBMask;

  // Look up current amplitude value for the sine wave being constructed.
  if(whichQtr) {                         // in second or fourth quarter
  // +1 works around a glitch where same data at the quarter 
  // transitions was looked up twice in a row
    OCR2A = pgm_read_byte_near(sineTable + (MSBMask - sineTableindex + 1));
  } 
  else {                                 // in first or third quarter
    OCR2A = pgm_read_byte_near(sineTable + sineTableindex);
  }
  // invert the second half of sine wave
  if(whichHalf) OCR2A = 255 - OCR2A;
}

This code does quarter wave symmetry first, then wraps half wave symmetry around that for the final output.  The changes to add quarter wave are the whichQtr variable and it’s masking line, and the if(whichQtr) statement which inverts the table lookup left to right. MSBMask in in the byte read statement because it is the number of steps that exactly form a quarter of the wave form.

Code for the quarter wave symmetry sketch is here. Here are scope traces of the quarter wave symmetry version:

Quarter Wave Symmetry Version

Quarter Wave Symmetry Version
Three Table Sizes

 

Conclusion:

These changes to the original Interrupt Service Routine allowed the table sizes to be reduced by a factor of four with hopefully, not too much additional overhead. Any ISR overhead added is executed 32000 every second so you have to be conservative.  CPU time in the ISR is traded for a smaller program.

All three of these sketches can be useful for arbitrary waveform synthesis by constructing an appropriate table.  The base sketch would work for any periodic waveform, including those that have no symmetry either up/down or left/right. A sawtooth wave for example.  Half wave symmetry would be good for representing an underdamped or overdamped square wave.  Quarter wave symmetry works for sine waves, as shown here, or a triangle wave.

The oscilloscope traces are interesting by themselves. These sketches and a scope could be used to demonstrate microcontroller techniques at your local science fair. My scope is an 80’s vintage Tektronix clone. On the screen you can see the generated sine waves and by zooming in, see the artifacts of PWM happening at a 32 KHz rate. Use the coarse 16 step table and the staircase model of DDS is clear. You can view the raw PWM by simply disconnecting the 0.1 Ufd integrating capacitor from the scope input. Interesting though, disconnecting the filter capacitor does not affect the audio much because your ears can’t respond to 32 Khz sound.

DDS quantization is most visible at low frequencies, using the smaller tables. Here you can clearly see the 16 steps and 32Khz fuzz on the trace.

50 Hz 16 Step Waveforms

50 Hz 16 Step Waveforms

 

Footnote:

The 64 step sine synthesizer with quarter wave symmetry was successfully added to my keyer project.  I see no degradation of the morse timing at 50 WPM.  A brief video is here.  Also I recorded MP3s of the tone before and after.  The tone produced by the stock Ardino tone() function is here.  The tone from the 64 step (16 values) DDS function is here.

 

Arduino Based Iambic Keyer(s)

Version 1.0 – ATTiny85 Port

Richard Chapman KC4IFB published an article in the Sep/Oct 2009 QEX magazine (subscription required) for constructing an Iambic Keyer on the Arduino platform. I downloaded his code from the QEX web site (ARRL membership required) and found it worked well.  I have not been active in Ham Radio for years and my morse code is seriously rusty, so I decided to build a keyer for practice purposes and maybe to use on a real radio some day when I figure out how to get an antenna up on this small lot.  I have a WB4VVF Accu-Keyer I used with my homemade paddles long ago.  I bought the PC board from WB4VVF himself at the Dayton Hamvention.  Chapman’s keyer implementation on the Arduino Uno felt exactly the same and I had no problem getting used to it.

I wanted to see if this code would run on an ATtiny85 chip. These are beautiful little microcontrollers in an 8 pin DIP package. They have 8K of internal flash memory and with a minor bit of library downloading, are programmable via the Arduino IDE.  There is a catch though, tiny85 does not normally have bootloader code like a formal Arduino does so you need additional circuitry to burn your sketch onto the little chip. In July 2013 Jim Williams from Workshop 88 in Glen Ellyn conducted a class in tiny85 programming which I attended. At the end of the class we all had our own Arduino ISP adapter board and could burn a tiny85 by using an Arduino UNO as an intermediary.

I amped up my ISP adapter by adding a ZIF socket. It also can program the ATMega328 chips by moving five jumpers.

ISP programmer for ATtiny85 and ATMEGA328 microcontrollers

ISP programmer for ATtiny85 and ATMEGA328 microcontrollers

With the ISP programmer working, I was ready to work on the tiny85 port.  I found Chapman’s code worked but there was no side tone generated.  After a few hours debugging I noticed Chapman’s code was turning the tone on in every iteration of loop(). The tiny85 did not like that. I just added a flag so tone was turned on once, then left on, and the tiny85 port was working 100%. In the end, a very minor change.

I wanted SMALL so I added code to eliminate the speed potentiometer. In my version, you hold both paddles closed for 5 seconds and it goes into speed set mode. Dots increase the speed and dashes decrease.  Another five second Iambic squeeze and it goes back to normal mode.  Also I added a Straight Key mode. If a two conductor instead of a three conductor plug is inserted in the paddle jack it will just beep out what it sees on the dot paddle.  Good for code practice with my J38 if I can remember where I put it.

Source code for the ATtiny85 port is here. This is the finished Keyer in the mandatory Altoids enclosure (but note SMALL Altoids):

Atmel ATtiny85 based Iambic Keyer

It was a challenge to get everything in there and still have the lid close.  The speaker is from a defunct greeting card but rest of the parts were purchased from Jameco. In the end, the most expensive single component was the Altoids mints from the drug store.  The ATtiny85 chips are less than a dollar if you buy ten.

There are these few parts required:

  • speaker and 22 ohm resistor
  • 2032 battery and holder
  • two 3.5 mm jacks, one output, one paddles
  • three bypass capacitors
  • Dropping resistor and LED
  • Power switch
  • ATtiny85 chip and 8 pin socket
Interior of ATtiny85 Iambic Keyer.

Interior of ATtiny85 Iambic Keyer.

There is a short video of the keyer in action here.  So now if I spend a few minutes every day practicing I might get back to the 13 WPM I had to do to get my current license.

Version 2.0 – ATMega328 with Memories

Richard’s QEX article suggested several possible enhancements. I thought adding memories would make the device much more useful so began another journey into Arduino programming. Yes, I know there are already Arduino keyers out there. The K3NG implementation has a ridiculous number of options, but I wanted to do my own based on Chapman’s sketch in the most efficient manner possible. A schematic drawing of my completed keyer is available, and I have written a description of the functions. Source code for the sketch is here.

The PS2 keyboard requires +5 volts so I designed around a five volt Sparkfun Pro Mini board. Only ten bucks! Available here or here. The Pro Mini has an on board 150 milliamp capacity 5 volt regulator if you use a 7-12 volt power supply.

Features in the keyer sketch now include:

  1. Memory or keyboard characters are buffered in an asynchronous circular queue so memory buttons or keyboard characters can be “typed ahead”.
  2. PS2 and serial terminal keyboards supported.
  3. Paddle generated morse is interpreted and printed as ASCII letters on the serial terminal.
  4. Four programmable memories with 50 character capacity each.
  5. Memories programmable from the keyboards or from the paddles.
  6. Random code practice modes, letters, letters and numbers, letters, numbers, and punctuation.
  7. Sending speed settable 10 to 45 WPM. Limits can be changed by recompiling.
  8. Sidetone frequency settable 100 to 1500 hz. Limits easily changed by recompiling.
  9. Commonly changed default settings are in a separate header file (Canned.h).
  10. Message strings, sending speed, and sidetone frequency are stored in EEPROM and easily reset to defaults.

The sketch requires five I/O connectors:

  1. A 3 conductor jack for the paddle or straight key. Connect dot paddle to tip, dash paddle to ring. Use a 2 conductor plug for a straight key in the same jack.
  2. A 3 conductor jack for transmitter keying. A 2N2222 open collector output is on the tip. Line level sidetone is connected through a 5k resistor to the ring so you can connect an external amplifier if you need louder audio.
  3. A power jack for either a 5 volt or 7 -12 volt wall wart supply. Consult the Sparkfun documentation for which Pro Mini pin to use for power.
  4. A six conductor mini DIN connector for the PS2 keyboard. See Canned.h for information on the four leads needed.
  5. A connection for programming, and TTL serial terminal through an FTDI adapter. This can also power the unit instead of the wall wart.

There are six push button switches and a volume control needed:

  1. A reset button for the Arduino.
  2. A Function button.
  3. Four push buttons to activate individual memories.
  4. The volume control feeds a one transistor buffer for the internal speaker. It does not affect the level on the line output connection.

Operation:

Pressing reset momentarily has different effects depending on what other switches are closed. A processor reset normally takes a few seconds, when finished three mid tone beeps will be heard.

  • Press the reset button alone to restart the Arduino. This is also the only way to exit code practice mode.
  • Press the reset button while holding the function button down until three low tone beeps sound will restore the four message memories and code speed to defaults. Default messages, speed, and sidetone frequency are set at compile time from the file canned.h. You must do this action when loading the sketch for the first time into a new Arduino to initialize the EEPROM.
  • Press the reset button with a 2 conductor straight key plug inserted and the keyer enters straight key mode where the sketch generates tone and output simply follows the key closures.
  • Press the reset button while holding down one of the memory buttons starts random code practice. Characters will be generated in five character groups and echoed on the serial port.
  1. Memory 1: letters only
  2. Memory 2: letters and numbers
  3. Memory 3: letters and numbers
  • Pressing reset while holding Memory 4 enters sidetone frequency set mode. The dot paddle increases frequency, dash paddle decreases. Press M4 again to exit set mode.

The function button has three duties:

  • Reset to default messages as mentioned above. You must hold the function button down until you hear 3 low tone beeps.
  • Holding function alone down triggers speed change mode. While function is held, the dot paddle increases speed, dash paddle decreases speed.
  • Holding function down and then momentarily pressing a memory button allows programming that memory. After programming, press function again to return to normal.

New memory messages may be entered from the PS2 keyboard, the serial port keyboard, or from the paddles.

Pressing a memory button by itself transmits the programmed message.

Serial or PS2 keyboards have a command mode, entered by typing a back slash followed by a single character. Commands implemented are:

  1. \+ increase sending speed one Word Per Minute
  2. \- decrease sending speed one Word Per Minute
  3. \u increase sidetone frequency by 5%
  4. \d decrease sidetone frequency by 5%
  5. \w save current sidetone frequency and WPM to EEPROM memory
  6. \1, \2, \3, \4 send a message as though a memory button was pressed.

The keyboard translation table (AtoM.h) includes all the characters shown in the Wikipedia article on Morse Code except the underscore and the dollar sign. Typing an unsupported character echos “x” on the serial port and will be ignored by the morse interpreter.

Version 2.0 Hardware Implementation

Here is a photo of my 2.0 construction. There are three jacks on the left for power, paddles and transmitter keying. PS2 keyboard jack on the right, small volume control and send monitor LED on the front. Not visible is the six pin serial connector on the rear.

On the lid of the S.A.E. you can see a small speaker through the holes around the center. Round holes were made with a heavy duty paper punch. For buttons, I used 6 mm square through hole PCB mount switches with four pins, the kind everybody uses on their solderless breadboard. I bent the pins on one side back so they could be soldered directly to the Altoids lid. Quarter inch square holes for the buttons were punched with a hollow chisel mortiser bit which worked quite well.  I made labels by placing the lid in a scanner, adding text to the scan in GIMP, then printing a 1:1 image of the labeled lid on photo paper. I cut the letters out and glued them to the Altoids lid. This technique produces text labels with the original Altoids artwork underneath. I coated each label with clear nail polish for protection.

Arduino Memory Keyer Exterior

Arduino Memory Keyer Exterior

With the box opened you can see the small Sparkfun Pro Mini board. It is mounted by a pair of L shaped wires cut from a paper clip. These are soldered in the Mini’s two ground pins and then soldered to the Altoids tin. A rectangular hole in the back of the tin provides access to the six pin serial connector. All the in use Arduino inputs have 9.8 k pull up resistors added, and are bypassed at the switch with a small capacitor. The outer end of the pullup resistors are soldered to a narrow bit of PC material wired to Vcc.

Three jacks on the left are epoxyed in place. The PS2 jack on the right, which was salvaged from a defunct USB-PS2 adaptor, is held by a narrow copper strap soldered to the jack and to the Altoids tin. A small perf board at the front holds most of the ancillary components for keying and the audio control. I mounted the perf board using more stiff wire cut from the paper clip.

There is a strip of thin PC material laid across the button switches to add more physical support. The two switch pins not soldered to the Altoids lid are bent over the strip and soldered. Notches filed in strategic places across the copper isolate each switch, and I added the necessary 0.1 uFd capacitors at this point.  The speaker is tucked under one of the PC strips and epoxyed in a couple of places. A short piece of flexible solder wick bonds the box lid to the bottom.

Arduino Memory Keyer Interior

Arduino Memory Keyer Interior

Future Enhancements

Add a FTDI USB to Serial adapter inside the box. It would allow a more graceful connection to a host computer running a serial communication program. Or build another unit with a USB integrated chip.

Add a 16×2 LCD display. Code would be trivial, but will probably have to find a bigger box.

Expand to six or eight memories. My sketch is compiling in about 13 k of flash, and has over 1500 bytes of ram free plus the Pro Mini has eight analog inputs so easily done. But how many memory messages can the average ham keep track of? I think four is a good number and I love the Altoids tin paradigm.

 

Credits

Many thanks to Richard Chapman KC4IFB whose February 2009 QEX article provided the inspiration and base for this sketch. His iambic keyer sketch feels exactly like my original WB4VVF Accukeyer. A version of his sketch with instrumentation added so you can see the state changes is here. Also see Rarons Blog  for a discussion of the tree method for decoding and encoding morse characters. Would you believe 300 WPM full duplex?  I did not use his library but his work was very helpful in building efficient translation tables. The circular queue was implemented with help from examples from the Embedded Systems Journal.

 

Revision History

V2.0.0 Initial coding to implement fully asynchronous event loop.
All delay() and spin waits removed from the main loop path.
Remove numbers only practice. Change eeprom order. Add change sidetone.
https://dl.dropboxusercontent.com/u/40929640/ArduinoMorseCode/MemoryKeyerV2.0.zip

V2.0.1 Minor tuning space generation in doIambic.
https://dl.dropboxusercontent.com/u/40929640/ArduinoMorseCode/MemoryKeyerV2.0.1.zip

V2.0.2 Converted sidetone generation to DDS/PWM sine wave with help from
http://ko7m.blogspot.com/2014/08/direct-digital-synthesis-dds.html

https://dl.dropboxusercontent.com/u/40929640/ArduinoMorseCode/MemoryKeyerV2.0.2.zip

Quarter Wave Symmetry

Quarter Wave Symmetry
1000 Hz 256 Step Table

V2.0.3 Changed sine table to half step offset. Saves one byte.
https://dl.dropboxusercontent.com/u/40929640/ArduinoMorseCode/MemoryKeyerV2.0.3.zip

V2.0.4 Added sidetone envelope shaping. Required several other changes.
https://dl.dropboxusercontent.com/u/40929640/ArduinoMorseCode/MemoryKeyerV2.0.4.zip

Shaped Dits at 45 WPM

Shaped Dits at 45 WPM

V2.0.4.1 Bug fix was dropping dits on a long string of upper case “H”s. Disable interrupt while changing sine tables.
https://dl.dropboxusercontent.com/u/40929640/ArduinoMorseCode/MemoryKeyerV2.0.4.1.zip

V2.0.5  Changed AtoM table from prog_uint16_t to char to save memory, which created bug where setup does gratuitous write to A6 and A7. Fixed problems when compiling under Arduino IDE 1.6.1, did not accept typedefs in pgmspace.h. Fixed bug in initByte, 1.6.1 did not like  aaByte = aByte -= 0x20;  Compiled size is 2k smaller in 1.6.1 and no more bogus compiler warnings!
https://dl.dropboxusercontent.com/u/40929640/ArduinoMorseCode/MemoryKeyerV2.0.5.zip

April 30 – Have not changed the V2.0.5 sketch but did redo the audio section of the Altoids keyer. I found the single transistor audio buffer was not satisfactory, distorting badly when driven by a sine wave. Also it was drawing 50 milliamps at idle. I removed the transistor and connected an LM386 amplifier – much better sound and very little current draw when idle. A revised schematic is at:
https://dl.dropboxusercontent.com/u/40929640/ArduinoMorseCode/MemoryKeyerV2.0.5Schematics.zip

Notes

20 March 2015  —  The keyer sketch was developed with Arduino 1.0.6. Recently I downloaded the latest Arduino IDE 1.6.1 and discovered the keyer sketch will not compile. It appears the newer version of GCC will not accept the typedefs used in the pgmspace.h library. I will upload a 1.6.1 release as soon as I figure out what’s going on. FIXED see V2.0.5 above.

24 March 2015  — Was shopping in Frys and bought an inexpensive (< $3) adaptor, is USB A female to PS2 male, is about the same size as the two connectors placed end to end.  It was made by Shaxon Industries in guess where. To my complete surprise it works. Using the adaptor I can connect any USB keyboard to the keyer which is good news, as PS2 keyboards especially compact ones, are getting hard to find. I measured power supply current with the adaptor, it does not add significant drain over the 25 Ma the keyer itself draws. The small USB keyboard I tried added only about 3 milliamps when not typing. I did find the transistor I used to buffer the speaker draws 25 milliamps itself, will have to find a more efficient amplifier.

Offset Flip Top Table

This article describes a two foot square mobile cabinet, with a pivoting top so two tools can be supported. These are known as “Flip Top Tables” but my version uses an offset pivot point so a much taller drill press sits lower when it is rotated up.

Cost was about $130.

My design was featured in “Americas Best Home Workshops 2009”, a Wood Magazine publication.

 

The Problem

In early 2008 I upgraded a generic 10 inch drill press to a new Delta DP300 benchtop version. The Delta took up about a quarter of my work area. It is 34 inches tall and weighs about 80 pounds. Not exactly portable.

Drill Press

New Drill Press

 

Later that spring, an Ebay opportunity resulted in acquiring this DeWalt 733  planer.

Planer

New Dewalt 733

 

But my shop is in one corner of a garage and I didn’t have a place to store the planer. It is 21 inches tall and weighs about 84 pounds.

 

The Solution

Put the planer and the drill press in the same space.

Table

Flip Top Table

 

A few hours of sketching and arithmetic showed that my drill press on a conventional flip top pivoting at the table surface would put the table 42 inches from the floor. The press chuck would be above eye level, too high for comfortable work.

So after many paper designs, I had the idea of making the top as a tray, with pivot points offset four inches vertically from the tray surface. This allows the drill press to sit eight inches lower when it is rotated up.

Since this tray style design obviously cannot have a solid pivot axle from side to side as most fliptops use, I made sturdy hinges from 1/4 inch plate and half inch carriage bolts. There is a short length of 3/8 pipe slipped around the bolt that acts as a spacer and also forms the pivot bearing surface with the smaller steel plate.

Pivot Prototype

Assembled Pivot Hinge

 

Here is the prototype hinge mounted in scrap plywood. It proved to be extremely rigid and easily handles the bending moment of the loaded tray.

Hinge

Prototype Hinge

 

This photo shows the drill press attached to the finished pivoting tray. I added two small bolts at the rear of the cast iron foot as I thought the strain of supporting the drill press head might be too much when the machine was leaned over.

One of the four bolts holding the planer to the other surface is visible.

Press Mounting

Drill Press Mounting

 

There is a lock screw at either side of the tray at front. They are big star knobs with 3/8″ threaded shafts running through to T-nuts inset in the cabinet side.

Front Tray Lock

Front Tray Lock

 

Note how the front edge of the tray is cut away around the cabinet support gussets. When the top begins to pivot, the cut away allows clearance for the tray to rotate.

Tray at Start of Pivot

Tray at Start of Pivot

 

The next detail shows the rear of the tray as it begins to pivot. The back is *not* cut away around the gussets, instead the gussets form a positive stop for the rear structure. Thus the tray will only pivot in one direction, and only 180 degrees.

There are T-nuts installed at the rear of the cabinet sides for the lock bolts when the planer is rotated up.

Rear View

Tray at Start of Pivot – Rear View

 

I used 3 inch casters to make the cabinet mobile. The bottom plate is a double layer of 3/4 plywood and there is an additional 3/4 block at each corner where the casters bolt through.

The entire cabinet is screwed together. I was going to do a dry fit, take it apart and glue everything, but it is very rigid as is, I don’t think glue is necessary.

Caster Mounting

Caster Mounting

 

This shows the table with drill press up.  Note the base of the press is now 4 inches below the pivot points.

Drill Press Proud

Drill Press Proud

 

I was surprised to find that the planer and drill press balance each other very well.  It takes only one hand to rotate the tray, which is carrying over 160 pounds.  I did not think this would be the case as the drill carries most of it’s mass at the top, but the 4 inch offset evens out the weight distribution nicely.

Table Rotating

Table Rotating

 

This shows the table with planer up. The rear face of the tray is now sitting on the front gussets which positively stop the rotation.

Planer Proud

Planer Proud

 

This shows the rear of the cabinet. I had to cut away the rear gussets to clear the planer handles. I could have mounted the planer sideways for more clearance, or removed the handles. Also you can see a section of plywood added across the bottom for lateral stiffness.

Note in this position, the top is four inches above the pivot point. The planer is a bit high for a large, heavy board but at least it has a home, and I use the drill press a lot more than the planer.

The lock knobs have been inserted at the rear in this picture.

Planer Locked

Cabinet Rear View

 

Here is a rough drawing of the cabinet. The dimensions are for my build, if you decide to make a table like this, you will need to work out sizes for the tools you plan to mount. The limiting measurement for my table was the height of the tallest tool, the drill press.

Basic Dimensions

Basic Dimensions

Basic Dimensions

Basic Dimensions

 

There is a short video on YouTube.

My offset cabinet has been very successful. I generally wheel it out in the driveway to use the planer, my dust collection consists of a broom and a leaf blower. It takes only about a minute to stow the drill press cord and lamp and then flip the top.

Follow

Get every new post delivered to your Inbox.