Welcome to Mike's Flight Deck

Mike's Flight Deck is an introduction to home cockpit building, the hobby that takes off where flight simulation game software ends. When staring at a 17" monitor on a crowded desk, and pushing, pulling and twisting a wimpy joystick just doesn't do any more, it's time to build a simulated cockpit or flight deck. This site offers information on how to do just that.

Mike's Flight Deck is also home to Mike's Flight Deck Books, a very small company that sells the books I've written about building flight simulators. So far I've written two and a half books.

Clicking on a cover image will take you to the information/order page for the respective book.

brfs_small_cover bsai_small_cover Building Immersive Display Systems

What's New:

My SF Novel Is Now Live on Amazon (14 April 2016)

My new science fiction novel Contact, Again is now available as an ebook through Amazon. Here's the description:

She chose the star long before humans knew of it, long before there was a human colony on the star's pretty blue planet, indeed, long before humankind even existed. She came from far away, traveling through the starry darkness at a fraction of the speed of light, chilled to a temperature nearing that of liquid helium. It was the Great Voyage, the trip every seed made to found a new home, to become the matriarch of a new nest. After millennia of travel she awoke to a world that was everything she might have hoped for. Except that someone had found the world before her.

Corporal Stansurulahri of Sakura Island Search and Rescue arrived with her unit at the university's open air test farm to look for a young child who had wandered into the desert. They found her remains. Then the situation really deteriorated.

Seventy years later Toss Takahashi started his job at the mothballed Alien Incursion Research Station in the high desert, a job he didn’t want, working for people who didn't want him. Years earlier the station had been the site of furious activity looking for clues of the aliens that had briefly confronted the colony. Now the station is silent and largely forgotten, simply an automated monitoring system overseen by indifferent contract employees who know there are no aliens, because anything of interest was turned into radioactive ash long ago.

Tonight that will change.


Contact, Again cover


Book Shipping Back to Normal (31 March 2016)

The shipping department is back to its normal one-business-day (usually) turnaround. All orders as of today has been shipped.

BRFS Still Available (19 March 2016)

HOWEVER, I'll be focusing on my daughter's wedding so won't be shipping books until about March 29.

Writing Milestone (17 February 2016)

I have (finally) completed the manuscript of my science fiction novel, tentatively titled Contact, Again. It's now undergoing the first of several "final" edits. Each pass through, I think "this is the last one", but there's always something else somehow. I'm sure that as beta readers send comments, there'll be more editing.

Contact, Again describes what happens seventy years after a disastrous initial contact between aliens and humans on the human colony world Sakura.

I wrote Contact, Again because I wanted a writing challenge. I wanted alien aliens that a reader could nonetheless empathize with, and I wanted a fictional world with constraints, so no FTL travel, no super powerful guns, no easy solutions. I wanted normal people, each with their own agenda. Seems to be working.


Copies of Building Recreational Flight Simulators are still available.

BRFS Still Available (23 December 2015)

Copies of Building Recreational Flight Simulators are still available.

DTS Revisited: Serial Interface (27 August 2015)

The issues with the DTS board synchronizing with an external 400 Hz power source have been laid to rest. The board automatically synchronizes, and in the absence of the 400 Hz signal, the board operates using its own internal timing. I've moved on to verifying operation of the board's serial interface.

The board has a chip location for an RS-485 receiver and a three pin header for connecting to its inputs. The receiver is optional. It's useful for long length cabling where electrical noise is a problem. The board also has a two pin header for connecting TTL-level serial data directly to the micro controller. This works well for very short connections where electrical noise has otherwise been contained, for example, an Arduino right next to the DTS board.

Arduino and DTS2

The firmware running on the DTS is based on the structure I've used in just about all my earlier micro controller FS projects. It provides a communication function that I expect to work well in this application. (And that expectation is probably why it won't.)

To test that expectation (and the anti-expectation) I've written a simple Arduino sketch that loops, setting both DTS DACs alternately to the maximum and to zero with a pause after each transition. Setting the Arduino up was generally straightforward. Likely the biggest effort was locating the stone age version USB cable that fits my old Arduino.

DTS Revisited: Synchronizing (20 August 2015)

The DTS board must be able to synchronize the 400 Hz sine waves with an external source. A synchro applies 400 Hz power to its rotor winding and the stator voltages must be of the same phase and frequency if the synchro is to operate properly.

Synchronization is a common function in many systems, so doing so here should be no problem; there's no apparent need to re-invent the wheel. However the desire to minimize cost and the choice to use a fairly low power 8 bit micro controller have made the project a bit more challenging. A phase locked loop is a common approach which would work well in other circumstances. While usually implemented with a mixture of analog and digital circuitry, it can be done completely in the digital domain. Sadly, that requires a bit more arithmetic horsepower than the DTS micro controller can bring to the task.

The lack of resources calls for a more brute force approach. The external timing reference is used to reset the micro controller code to the point at the beginning of the wave form generation process. A second bit of code has the task of adjusting the length of the generated wave form so that it matches the time between consecutive external timing pulses. This is a bit more complicated than it seems, because the external timing reference is certain to have noise on it and you really would prefer to not have the DTS outputs bouncing around in response to that noise.

The best approach so far appears to be two fold. For large changes in timing, a fraction of the difference between desired wave form length and actual length is added or subtracted from the count values controlling the micro controller timing. This is fast but to avoid responding to noise, it is designed to stop well before bringing the error to zero. A second bit of code accumulates remaining error, and when it passes a threshold, it increments or decrements the count values and zeros itself out. This is slower than the first process, but is heavily damped and doesn't respond much to noise.

DTS Revisited: Progress (13 August 2015)

The DTS board is now producing useful output. I have the bulk of the code running and have placed some test code to exercise the core functionality of the system: making 400 Hz sine waves with varying amplitudes.

DTS digital signal and filtered output

The top trace is the "modified sine wave" signal as it comes from the DAC. The lower trace is what you get after it's been filtered. The fuzziness is due to the long exposure time coupled with the changing amplitude of the signals. The embedded test code ramps the amplitude through its full range.

The next step is adding code to synchronize the output with an external 400 Hz timing reference. For the DTS to be useful the two outputs must have the same electrical phase as the 400 Hz power applied to the synchro rotor winding. Of course, it's never quite as easy as it might seem. There is certainly no guarantee that the power will be exactly 400 Hz. So the new code must not only synchronize the phase of the outputs, it must also adjust the frequency to match.

As I began to write the code I realized I'd made a less than optimal choice of timers for establishing the core system timing, and hence the frequency of the outputs. I'd used an eight bit counter which meant I'd have fairly large steps in frequency when tracking the input timing reference. A bit of revision happened and I now have new, larger code that uses a 16 bit counter. I've tested it far enough to know that it still produces 400 Hz sine waves, but not to the point of knowing it will adjust the frequency. To do that I need to find my signal generator.

DTS Revisited: Theory & Progress (6 August 2015)

A key functionality of a digital to synchro interface is the ability to generate a pair of 400 Hz, nominally sinusodial, signals with amplitudes we can control. There are any number of ways to do that; however, a design constraint on this project is being low cost. Micro controllers are really good at making pulses with flat tops and low cost digital to analog converters are really good at controlling the amplitude of those pulses. If we spent more money on faster DACs and micro controllers we could make a fair sine wave, but it's cheaper to make something with a flat top and filter it.

The top waveform is what we're aiming for. The second waveform, a square wave, is cheap to make, and filtering it is not too difficult, but the third waveform is also pretty easy to make, and it has the advantage of being easier to filter. Square waves have a number of frequency components which are multiples of the fundamental frequency. A 400Hz square wave has the 400 Hz fundamental frequency that we want, plus 1200 Hz, 2000 Hz, 2800 Hz and so on. In fact, if the edges of the waveform are really vertical, there will be infinite odd multiples of the fundamental frequency, each with progressively smaller amplitudes.

The neat thing about the third waveform is that while it does have lots of odd multiples of the fundamental frequency, it doesn't have any of the third multiple; there's no 1200 Hz! That gives us more room to let the filter work. If we used a square wave we'd need a filter to pass 400 Hz while suppressing 1200 Hz and above. By using the third waveform we need only supply good filter suppression at 2000 Hz and above.

Harmonic waveforms

This third waveform is referred to as a "modified sine wave" by manufacturers of some types of commercial power inverters. I personally think that's vastly over selling its "virtues", but it is useful. It's possible to add strategically positioned notches to the pulses to remove higher order multiples, but that quickly begins to push the limits of the cheap microcontroller, so I'll go with the "modified sine wave" and see what I get out of the filter.

Some far I'm not seeing very much.

Zero, actually.

I just put power on the prototype today. The lack of smoke appeared to be a good sign, but only because I had not found a voltage regulator installed backward. It died quietly, with no fanfare at all. After that, it was finding out that the microcontroller configuration bits had not been set.

I'm going to halfway blame the config bits on the new IDE. I really should not have miswired that voltage regualtor (come on, the thing only has three pins, how hard could that be???), but the old IDE set the config bits for me. On the other hand, I did skip the set up wizard, so...

Progress. In fits and starts. (But no smoke.)

DTS Revisited: Assembled PC Board (30 July 2015)

The hardware is almost completely assembled. I've left off the output amplifiers so I can debug without needing a heat sink.

The board is mostly surface mount (SMD) though there are a number of through hole components. Using SMD components allowed me to keep the board small; a smaller board is a less expensive board. In some cases I went with the larger through hole components. The four blue caps at the top are an example. I could have used (slightly) smaller SMD caps, but I'd bought a bag of a hundred through hole caps a while back so through hole caps it is now. The three black TO-92 voltage regulators are through hole as well. They stick up higher but don't really take up much more (if any) board space, and once again, I already had a bunch of them. The white rectangle is an opto isolator which is available only in a through hole package.

And that orangey beige thing just above the blue widget? That's the ceramic resonator for the micro controller. I used a through hole version. I actually have an SMD version of the resonator, and the board is designed for it. But as I was assembling the board, I remembered what a pain in the butt soldering the SMD version can be. It has a large solderable contact area under the SMD package which requires getting the whole thing really hot, something my Hakko soldering iron with its teeny weenie SMD tip isn't really designed to do. So, I dug a through hole resonator out of the box, bent its leads 90 degrees and soldered it onto the board's SMD pads with zero trouble.

Assembled test board for DTS2

That empty 8 pin SMD location in the lower left corner is where the RS-485 receiver goes. RS-485 is a differential data transmission method with high noise immunity. If you're sending data over long cables, have multiple systems components with separate power supplies, or have varying or noisy electrical ground, RS-485 can side step a great many mysterious problems. Alternatively, you might have a DTS or three right next to an Arduino (with a TTL output) so you could just run a twisted pair directly to the PIC micro controller, which is pretty much what I'm planning as I debug.

Of course debugging assumes I have firmware running on the PIC which is not yet the case. I've succeeded in importing some old PIC code into the current version of MPLAB X, the Microchip IDE. This will help, but I've still got a lot to do, and RL is making other demands. Perhaps over the next several days or few weeks I'll have enough running to show whether or not this DTS approach will work.

DTS Revisited: PC Boards & Parts (23 July 2015)

The prototype circuits boards have arrived. They look pretty good.

DTS v2.0 PC board prototype

There's been an almost steady stream of packages arriving over the past few days, so I have most or all of what I need to assemble a working board.

Parts for the DTS project

The above is just a sample of what's come. The chip is a dual channel voltage output digital to analog converter. The resistors and capacitors are an example of me getting carried away. Rather than taking the time to track down part numbers of only what I need, I ordered assortments through Ebay. It's orders of magnitude more than I need, but it's so CHEAP. And this way I have alternatives if needed as I debug. Or maybe the truth is that even though I'm a retired engineer, I still geek out about this stuff.

I also bought an updated PIC micro controller programmer. I've used a PICKit2 for years, but that's now obsolete. Actually, it would work just fine for the PIC16F648A that I'm using, but I lost the software for it. I upgraded my computer some time back and the PICKit2 software didn't make it past the transition. After making a half hearted effort to find it, I bought the updated PICKit3 knowing that it would come with software.

PICKit3 MicroChip device programmer/debugger

Other than being red and having a "3" on the front of it, it looks pretty much like a PICKit2, though according to MicroChip, it can do more. In any case, I got one.

I also had to download the latest version of the MicroChip development environment. Naturally it has changed greatly from the version I used a couple years ago. It also came with a chunk of software to run the PICKit3, so of course now I'm wondering if it is backward compatible with the PICKit2. Hmm??

Next steps: break out the solder and magnifiers, and read the MicroChip MPLAB X IDE docs.

DTS Revisited (16 July 2015)

Okay! I have a circuit board layout for DTS 2.0.

DTS V2 printed circuit board

The design is at the dangerous stage. Everything looks finished, but it almost certainly has mistakes in it. So, tempting as it is to fire it off to a proto fab house, I need to check it again.

DTS Revisited (9 July 2015)

I now have a more or less complete schematic for a reduced cost digital to synchro converter. I've taken a different approach from my last design.

A key function of any synchro signal generator is to produce two (nominal) 400Hz signals which are electrically in phase with the synchro rotor voltage, but have different amplitudes. Variations in these amplitudes encode the synchro rotor position. Commercial synchro signal generators use high resolution digital to analog converters along with assorted electronics to control the amplitudes. Really accurate, but also really expensive.

An approach that's been used in the hobby community (myself included) is to take a sample of the 400Hz power and scale it using devices like multiplying DACs, digital potentiometers, and voltage controlled amplifiers. Using a sample of the power that will feed the synchro rotor assures that the generated synchro signals will be electrically in phase with the rotor signal. Good performance at less cost.

The approach I'm taking is to generate the 400Hz signals from scratch and use firmware to keep them in phase with the rotor power. This shifts some of the hardware complexity into software. Here's a block diagram.

DTS lite block diagram

Eight bits of resolution per DAC (digital to analog converter) will give you about one degree resolution on the synchro shaft. This is good enough for a 2 inch engine gauge, but a bit coarse for something like an ADI. Ten to 12 bits is far better if you're aiming for smooth motion. If you were looking to produce a high quality sine waveform straight out of the DACs you'd be looking at a requirement for something like 16 to 18 bits, plus you'd need a micro controller capable of pushing data to the DACs at a fair speed. Since the micro controller has other things to do as well, we'd likely need more expensive hardware.

Or we could cheat.

We can produce a 400Hz non-sine wave and filter it. That lets us use the full resolution of the DACs to control the amplitude and ignore the wave shape. So the trade off is using cheaper hardware at the expense of adding low pass filters to clean up the waveform. And what do these filters cost? About 60 or 70 cents (total for both). A quad opamp costs roughly 50 cents. the resistors and capacitors add a few more cents if you buy the huge Ebay assortments.

With the circuit drawn out the next step is to design a circuit board....

DTS Revisited (2 July 2015)

Synchros are used to send mechanical angular data across electrical wires. They are old, old tech. They are also reliable, robust, and accurate. Modern day incarnations are widely used in situations requiring reliability, robustness, and accuracy, so not too surprisingly you find them in avionics.

Also not too surprising is that flight sim enthusiasts are often interested in synchros, or at least, in the signals that make synchros do their thing. If you can make synchros operate, you can, in many cases, make real aircraft instruments operate in a simulator.

Several years ago I designed a digital-to-synchro converter that does just that. It's described in Building Recreational Flight Simulators. Recently, there has been an uptick in interest levels regarding these sorts of devices, and that has caused me to revisit my old project.

There are any number of ways to generate synchro signals, but cost easily floats to the top of the important criteria list when sorting through options. If you have a lot of real aircraft instruments, you need a lot of DTS converters, and even a moderate price becomes unappealing when you need ten or twenty of them.

In the years since designing the original DTS, micro processors have become more powerful and less costly. Other parts have become less available and more costly. Surface mounted components are a pain to work with because they are so small, but can be really cheap, plus can reduce the cost of the circuit board because it can be smaller too. Some components are only available in surface mount packages... anyway, big changes.

So now I find myself revisiting the DTS project looking for cheaper ways to build it.

CNC Project: Electronics bay doors (25 June 2015)

Well, they're done. The painting is less than perfect, the simple act of my holding a spray can seems to magically attract dust from miles around. Nonetheless, both doors for the electronics bays have been fabricated, painted, and installed.

CNC bay doors

CNC Project: Annoying problems (18 June 2015)

The computer problems with the CNC machine have not gone away, but they aren't so large as to prevent me from using the machine. Basically, it seems if I run LinuxCNC long enough it will die. I think the ultimate cause is the hardware (and associated drivers) it's running on, though I'm by no means sure.

I installed the most current version of LinuxCNC which also meant moving from Ubuntu to Debian. LinuxCNC is released in many ways. The easiest for me is to download an ISO image that incorporates the operating system with LinuxCNC. So, I moved from an operating system that I know very little about to another OS I know almost nothing about. However, now I have a very clean installation. I had added various other programs and updates to the earlier installation. Now I know that any further issues are not due to random other programs. Also Debian has been a bit more friendly in providing information when problems do appear.

And appear they did. About 40 minutes into a test run, the latest, greatest LinuxCNC died.

LinuxCNC expects the computer to be running a real time operating system. Linux is supposedly pretty good at emulating that, but it's not perfect. Depending on the specific hardware in the system, the drivers may not always play well together when rapid swapping is required. I have some indications that this is the base cause of my problems, but I don't know enough about LinuxCNC or Debian (Or any Linux distro for that matter) to be sure.

I decided to use LinuxCNC because it's available for free and I had an apparently useful old computer to run it on. My focus was and continues to be learning about CNC milling. Now that the CNC machine is working, I'll put a little effort into stabilizing LinuxCNC. If that turns into too much of a time sink I'll look at other options, like running a G-code interpreter on an Arduino.

So far I haven't run into catastrophic problems with milling tasks in the 15 to 20 minute range. I successfully milled the ventilation slots into the second electronics bay door.

Milling the second electronics bay door

The material is .063" aluminum. Depth of cut per pass was .017" so four passes were required. I used a .125" carbide single flute end mill and a feed rate of 20 inches per minute.

CNC Project: Fans (11 June 2015)

Adding fans has made a world of difference. Even after a half hour of milling the motor driver heat sinks are only slightly warm to the touch. Better yet, the machine no longer appears to be dropping steps. I mounted a pair of fans on a chunk of sheet aluminum hinged at the bottom. This also supports the 12 volt power supply for the fans, as well as, the emergency stop button. This fixed the last known problem.

Fans, 12 volt power supply, and emergency stop button

It also uncovered the next.

Once the machine was able to run for extended periods of time, the computer began to shutdown my session. This appears to have something to do with the idle timeout period and screen saver. At least, setting the idle timeout threshold to two hours seems to have stopped the behavior. The confusing part is that I've had the screen saver pop up on smaller CNC runs and not had a problem, but somewhere around 15 or 20 minutes into a larger run my session would completely disappear.

I've made one 35 minute run with the 2 hour idle timeout setting, and had no problem. So, maybe the issue has been resolved. If not, I'll do a reinstall of LinuxCNC. There's a newer version and I probably should move to it anyway.

AHCP Text Success, Almost (4 June 2015)

Reducing depth of cut and feed rate made a great difference in the text quality. Using a better cutter resulted in further improvements. I can now produce excellent  engraved characters most of the time, though the poor picture quality below doesn't show it.

I experimented with .025" and .0197" carbide end mills and .015" V- groove engraving cutters. Each produced credible results under certain conditions. For the size and style I'm looking for the .0197" end mill does best.

Text engraving test on painted acrylic

The above tests were done on painted acrylic. The tests below were done on unpainted acrylic, which makes the results particularly difficult to photograph. The characters really need to be viewed though a 30X magnifier to judge the quality. When you do that you can see how straight the cuts are and how clean the grooves are.

Text engraving test on clear acrylic

What I'm working toward is duplicating the type of light plates that were made during the 1950s and 60s. These light plates had mechanically engraved characters which were backfilled with white paint. I've seen videos of the manufacturing process showing workers using a microscope and a very fine gage blunt hypodermic needle to fill the engraved characters with paint.

Sadly, I don't have the microscope or needle to do this. And, I certainly don't have the steady hands for it. Fortunately, none of those are strictly necessary if you're willing to be a little messy. I filled the "BARO, DELTA, and RADAR" text above by slopping paint on and wiping up the excess. And while you can't see it, I did the same on some of the test lines in the upper picture too.

At this point I thought I was ready to make a complete AHCP panel, so I started cutting .25" acrylic and milling holes. This is a somewhat longer process than engraving text, and I ran up against my current problem: overheating the motor drivers. At least, that's what I think is happening. Cutting starts off great, the motor drivers get hot, and the motors begin losing steps.

I'm using a Gecko stepping motor driver with heat sinks, but I don't have it oriented properly for good convection airflow. The plan was to have fans mounted on the electronics bay door to push air over the heat sinks. I just never actually got around to making the door, so the fans... well, they're nowhere near the heat sinks. Apparently this is something I need to change before I can go much further.

AHCP Text FAIL (28 May 2015)

No pictures. Too embarrassing.

I created a more or less complete drawing file for the A-10 Armament HUD Control Panel. The text engraving is the most difficult part, so I created a G-code file of the text for use in a test. The idea was to engrave all of the text on a piece of scrap acrylic then carefully scan the results with a magnifier to judge the results.

Magnifier not needed!

The waste acrylic melted to the cutter and ruined the engraving. I was lucky to have been able to halt the test before the cutter broke.

I did find that my G-code had errors, the depth of cut was far larger than I wanted, but even so, this is unexpectedly bad.

Craft Table and Torch Clamp (21 May 2015)

I've spent the last week or so building a craft table for my wife. She's interested in lampwork beads, and that means she needs a safe place to work with molten glass. Since we didn't have any flameproof tables, I've been building one. Fortunately it doesn't need to be completely flameproof; sheet metal over a wood surface is apparently good enough.

Since she'll be using a small torch, I also built a clamp for fastening the torch securely to the table edge. The clamp that came with the torch did not inspire confidence. I used the CNC machine to cut pieces from 3/4" plywood which I glued and stacked. The clamp fastens to the under side of the table front edge. I embedded T-nuts in the edge just for this purpose, and to allow quick and easily removal.

Torch clamp

Note that the table is upside down. The wife does not normally make lampwork beads while standing on her head.

And I don't normally cut 3/4" material on the CNC machine, so I hadn't noticed that there is an apparent tilt in the Z-axis. I thought I had the Z-axis plumb to the work surface. That appears to not be the case.


CNC Project: Yet another test engraving (14 May 2015)

The CNC machine is back together, complete with the exception (predictably) of the door for the electronics bay. I really should take care of the door, but that's too much like work, no fun at all.

Instead, I did another engraving test, this time of printed circuit board stock, and (again, predictably) things didn't quite work as expected.

The reason for using PCB stock was to avoid the distraction of paint chipping at the edge of the cut. I simply wanted to see how smooth the cuts would be. I used a V-groove engraving cutter and set the depth of cut to 0.005". What I found was that my clamping method distorted the PCB stock so that the actual depth of cut varied. PCB material probably would be better held by double stick tape. I also ended up with a somewhat ragged edge to the cut. Basically. I left one problem behind and added two new ones. I should have just tested on unpainted acrylic.

Test engraving on copper circuit board stock

Still, the test wasn't a total loss. I was able to salvage it by removing the ragged bits with a bit of 600 grit sandpaper and oil. What I was particularly interested in was seeing just how straight the nominally straight cuts would be. The machine uses micro stepped stepping motors to move the cutter. The machine has a theoretical resolution of 0.001"; however, stepping motors don't always provide equal size micro steps. What I see in the test cuts are slight variations from a straight line on some of the diagonal cuts. I have to use a 30X loupe to see them, but they are there. I don't think this will be a problem. The smallest characters in the picture are 0.1", and they look pretty good. My main issue is likely to be selecting the proper cutter and speeds for clean cutting.

CNC Project: Just loose ends now (7 May 2015)

It's back together and it's cutting. I wrote a simple G-code program to mill the surface of the waste board. I started by taking it down 0.01", and was surprised when that didn't quite do it. A portion of the center was untouched. Another 0.01" took care of that, and now it looks pretty good. I did find that I'd been over conservative in placing the limit switches. I should have had 15" square of cutting area. What I've actually got is a bit under 14.5" square. Not really a problem; if I get enthusiastic I'll change it.

What's slightly more pressing is finishing the window installations on the cover. The plastic is cut to size, more or less, and should be glued in place with a bit of silicone RTV. The electronics bay, on the side of the machine, should have a door with fans, vent holes, and an E-stop button.

So, pretty much, it's done. I'm sure I'll add a few more things (like maybe some LEDs for lighting the work surface), but once these loose ends are cleared up, it's on to using the CNC rather than builidng it.

CNC machine on its cabinet

CNC Project: Adjusting (30 April 2015)

I have the CNC machine sitting on the cabinet. This has allowed me to level the bed of the machine and pour a layer of epoxy table topping.

CNC machine on cabinet

The epoxy layer forms a flat surface, much flatter than the plywood it was poured over. This gives me a reference surface for adjusting the rails. I had initially set up the machine using a tape measure and the nominally flat plywood surface. I got marginally okay results. This approach is working much better.

Rather than a tape measure, I'm now using a dial indicator. It's a cheap one from Harbor Freight, but at $15 and with 0.001" resolution, it's hard to beat. I made a stand from leftover bits from building the CNC machine. I also made a bracket that holds onto the steel rail with a magnet.

Dial indicator

The indicator doesn't tell be the absolute height of the rail from the machine floor. It shows me the differences in height among various locations along the rails. This will let me tweak the rails so that they are all parallel with the CNC floor.

CNC Project: Watching paint dry (23 April 2015)

As exciting as it sounds.

It is progress, however. The cabinet is done, with the exception of the door, which will happen when I have the material at acceptable cost. (Probably leftovers from an upcoming laundry room cabinet project.) I painted the CNC cabinet with a random, off white acrylic enamel found in a rusty can beneath a few years' accumulation of dust. It's good paint, I just want to give it adequate drying time before I plop the CNC machine on top of it. I don't want the soft paint to glue the CNC machine to the top of the cabinet.

In the meantime, I'm completing the hinged cover for the CNC machine. It provides sound isolation and dust containment. It was mostly done some time ago. I'm doing a bit of prep work before painting it which I expect to be, once again, just as exciting as it sounds.

CNC Project: Cabinet, etc. (16 April 2015)

Not a very productive week. House related projects and jury duty muddied my focus.

The cabinet is missing doors and paint, but is otherwise complete. I have parts cut for a removable shelf which was to hold the computer monitor; however, I've changed my plans. The shelf was to hook onto a pair of brackets on the side of the cabinet, but I like the otherwise clean lines of the cabinet, I don't want the brackets ruining that when I take the shelf off. Yeah, I know. Pretty lame for a shop base cabinet built mostly of leftovers that'll never leave the garage, but Hey! It's my cabinet and my garage. So, now I'm going with a pair of 1/4"-20 bolts to fasten the shelf to the cabinet side. When I remove the shelf there'll only be a pair of small holes.

CNC Project: Cabinet (9 April 2015)

The CNC cabinet is very nearly complete. I'm waiting for the glue to dry on the keyboard tray, the last major item to assemble. There are a few smaller things to glue together, but nothing big, just little, time consuming things that I don't have enough clamps to do all at once. I haven't decided what to do about painting. Maybe I'll stick with the "build it out of leftovers" and use whatever I find lurking in the corner.

I made the adjustable feet yesterday using  bolts, nuts, washers, and scrap wood.

DIY adjustable foot

The hardest part was drawing the hexagon for the pocket to accept the bolt head, which is to say, having the CNC machine made the whole process pretty painless.

CNC Project: Cabinet (2 April 2015)

The CNC machine is a "table top" unit. Building the machine presupposes having a "table" to put the machine on "top" of.

Houston, we have a problem.

I don't have a clear spot large enough for the machine. It's currently sitting on a pallet of boxed books. Before that, it was on the table saw. I can just barely operate the CNC machine where it is, but can't get access to put some finishing touches on it. The current position also restricts access to the radial arm saw. So, I've finally taken the time to build a base for the CNC machine.

Shop base for the CNC macbine

It will have a pair of side by side drawers, a full width keyboard/mouse tray, and space for the computer. There will be some sort of removable/foldable/??? shelf on the side for the monitor. The whole thing will be supported by adjustable feet for leveling, or castering wheels when the feet are lifted. As much as possible, I'm making it out of left overs from other projects. I did have to buy the wheels, but I'll probably make the adjustable feet.

CNC Project: More engraving (26 Mar 2015)

 The .021" end mills have apparently not been shipped yet, but a few .0231" end mills did show up so I'm working with them. I created a basic single stroke font and ran it with pretty good results.

.19" single stroke font test

This was a quick and dirty font build. In fact, it's not really a font, per se. It's simply a collection of lines and arcs that generate G-code for single stroke characters. The image here makes the stroke weight appear heavier than the actual engraving looks. I'm quite happy with the outcome.

The characters in the top line are about .19" tall. I recall reading somewhere that most labels on military light plates are .1875" tall. (I'm at the point where I need to dig up the real numbers and make sure.)

The characters to the right are multi-stroke, and are clearly too heavy. The test pattern is the same as used before (single stroke).

This engraving was done on an area that was not sanded as well in preparation for painting. I notice a slight tendancy for the paint to fracture at the edge of the grooves. So, although the paint used claims to adhere well to plastic, proper surface preparation still pays off.

CNC Project: Engraving plastic (19 Mar 2015)

One of the goals for the CNC machine is using it to produce light plates. Cutting acrylic plastic to shape and making holes are not problems. The real challenge is producing good quality text. I've done  several tests to find the best cutters and machine operation to do that.

Engraving tests using acrylic

The bottom line of ABCs is the first test. It was cut with a standard V-groove engraving bit with a .015" tip. The test material is acrylic plastic with a coat of white paint covered by two coats of black. I had lightly sanded the plastic under running water to aid in paint adhesion. Depth of cut was .015" while feed rate was 30 ipm.

The good news is that the characters look good (not great) from a distance. They are quite legible and the islands of black in the A and B are all fully intact.

The bad news is that there is a significant amount chip re-welding in the grooves, and there are wiggles in edges that should be straight.

Chip re-welding is often caused by feed rate being too low and/or cutter speed being too high. Wiggles in what should be straight cutter movement can be caused by too high a feed rate given flexibility or looseness in the structure holding the spindle, or crap on the X or Y rails, or ???

The middle line is the second test. I created a simple test pattern to look at basic cutter motion, and I reduced the size of the characters to make them more difficult to cut well. I also dropped the feed rate to 10 ipm. While cutting, I directed compressed air over the bit to aid clearing the chips from the groove.

The diagonal lines in the test pattern were used to show any issues in the capability of the stepping motors to move the spindle. The configuration of pulleys, timing belts and microstepping in the CNC machine provides a resolution of .001" in the X-axis and Y-axis. However, there's no guarantee that actually gets delivered to the spindle. What the diagonal cuts show is quite pleasing. While the cuts are not perfect, I can only see the imperfections by using a 30X magnifier.

The quality of the characters to the right of the test pattern show the benefit of the lower feed rate and the use of compressed air. The character shape is better and the re-weld problem has been substantially reduced.

The third test, the top line, replaced the V-groove engraving tool with an end mill cutter. My expectation that the end mill would clear chips better was shown to be true. Unfortunately I only had a .031" end mill so the character stroke width is too great.

I have some .021" end mills on order, and that will be my next step.

CNC Project: Inching up the learning curve (12 Mar 2015)

Reducing the feed rate when milling small holes using an end mill has resolved the out-of-round issue. I've moved on to making more parts, some out of aluminum, and discovering more issues.

Parts for a simple gauge

The two pieces on the lower right are the lens and spacer for a basic single pointer gauge. The piece at the top right is a circuit board prototype from a few years back that supports an automotive, stepping motor style pointer movement. The board has a surface mount micro controller, an RS-485 transceiver, and a motor driver on the back. The three pieces on the left are the aluminum faceplate, legend deck, and rear plate. These pieces stack together with a few off-the-shelf threaded spacers to form the gauge.

A basic single pointer gauge

The four screws holding the front together are supposed to be countersunk flat head types, but I didn't have any on hand when I was taking pictures. Aaand... there are a few parts missing as well. But, the intent here isn't to make an instrument; it's to discover pitfalls while using the CNC machine to make flight sim parts.

The most recently discovered pitfall is that the CNC machine work surface isn't properly aligned with the cutter horizontal motion.

Okay, well, I knew that. I just sort of forgot.

I could have milled the spoil board flat, but I decided to wait until I did a final leveling of the CNC floor. The construction directions call for using epoxy table coating to form a flat surface. I skipped that because of cold weather. Alignment of the machine is supposed to be done in reference to this gravity flattened surface. Well, that hasn't happened quite yet.

When I cut the aluminum gauge pieces, cuts on one end of the stock cut just barely through, as I'd intended. At the other extreme, cuts were almost there, but still far enough short to be a real pain. I can certainly increase the depth of cut, but that solves only this type of work.

I also plan of using the CNC to do rotary engraving. Depth of cut is critical for good engraving so I'll need to resolve this issue. In the short term, I'll shim the spoil board. When the weather warms a bit more, I'll mix up some epoxy.

CNC Project: Somewhere on the learning curve (5 Mar 2015)

Acrylic instrument lens

This is maybe not the most awe inspiring thing to be made on a CNC router, but it's a step further along the learning curve. If you look closely you'll notice that the holes are slightly out of round. This is something of a mystery, but I think I have an explanation.

The holes should be 5/32" in diameter. The narrower dimension is pretty close, but the hole is not round.

The software that creates the tool paths generates a downward helical path so that an end mill can carve out a hole larger than its own diameter. One of the parameters that the software uses is a feed rate which it tries to maintain.

The CNC machine is a gantry type. One horizontal axis moves the spindle along a rail bolted to the gantry. The other horizontal axis moves the gantry. That means one axis moves the mass of the spindle while the other moves the mass of the gantry PLUS the mass of the spindle. The same type of motor and timing belt is used on both.

The CNC machine will cut a large radius curve with no problem; however, cutting a small radius curve at the same feed rate doesn't works as well. The forces needed to move the spindle through a curve go up as the curve gets tighter. The timing belts stretch slightly as the motors accelerate and move the spindle. Because the motors are moving different amounts of mass, the amount of stretch on each axis differs. As the curves get tighter and the forces on the belts grow, the difference in stretch becomes significant, and, so the theory goes, holes become increasingly out of round.

A next step is to cut some small holes at lower feed rates and see what happens.

CNC Project: Software (26 Feb 2015)

The CNC hardware is now functional. I'm sure to be tweaking and adjusting, but the machine fundamentally works. I can jog the tool position from the keyboard and clean the fault when I run up against the limit switches. The focus now moves to software.

I'm using LinuxCNC as the machine controller. Mach 3 was another option, but LinuxCNC has the advantage of being free. As long as it does what I need it to do, there's little reason to change. My goals with CNC currently are cutting and engraving plastic, and light machining of aluminum. It looks like LinuxCNC can handle that. If my goals change, I may look to other machine controlling options. For the time being I'll invest the time learning LinuxCNC.

LinuxCNC takes G-code as its input to direct the CNC activity. While it's possible to write G-code by hand, that get real old very fast. The productivity boost from using good CAM software is far too valuable to ignore. I'm leaning toward CamBam. I might be able to get away with a simple G-code interpreter munching on DWG drawing files, but the more integrated approach offered by CamBam has more appeal for me. I like that I can import or create, and edit the drawings then direct the creation of tool paths before generating the G-code.

At this point I have only a cursory understanding of LinuxCNC or CamBam. I need to change that.

CNC Project: Motor driver (19 Feb 2015)

I'm using a Gecko G540 microstepping motor driver. I chose to buy rather than build the electronics because one of my goals with this project was to learn about CNC, and I didn't want to get distracted. Buying the G540 let me focus on stuff new to me.

The G540 is a nice compact package which will run fairly well as is, but adding heatsinks is recommended if you plan on pushing the drivers near their limits. The three heat sinks stick on the bottom with thermally conductive adhesive pads.

Gecko G540 microstepping motor driver

At this point everything critical in the CNC box is together. I'll eventually finish the top for noise and dust control, but first I'll pull the computer together that will run LinuxCNC and control the machine.

Wired CNC machine

I'll also need to add a door with fans over the electronics bay. The bay is not quite big enough to mount the G540 with the heat sinks vertical which is seriously non-optimal for air movement over the heat sink fins. The door will also provide a mounting surface for the emergency stop button.


CNC Project: clamps & cables (12 Feb 2015)

The work piece hold down approach uses aluminum C-channels within the spoil board to hold the heads of 1/4"-20 bolts.

C-channel clamping

You can use fancy threaded knobs,

C-channel clamping

or if space is limited, a standard nut will do.

C-channel clamping with nut

Aluminum C-channel is widely available, standard fare. I picked this stuff up through Ebay.

Wiring is the primary remaining task. I'm making progress, but there's more to it than simply making electrical connections. It's more an issue of cable management.

CNC motor cables

Two of the stepping motors, the spindle motor, and several limit switches are mounted on a moving gantry. The cables connecting them must be supported so they don't get in the way of gantry movement or get hung up on the work piece. This has been somewhat complicated by the fact that the stepping motors have short leads with a molded plug. I suppose I could have cut the plugs off and extended the motor cables, but I chose to use ready made extension cables, and add a few tweaks to support the joined plugs.

A secondary issue is that since the gantry moves, the cables must be rated for continual flexing. Standard stranded wire will tolerate flexing while being installed, but will break if flexed enough. Unfortunately, the wire I was planning on using to connect the limit switches falls within the "standard stranded" category. I have some microphone cable on order which will work well for this, but until it shows up, I won't be able to complete the wiring.

CNC Project (5 Feb 2015)

The Z axis limit switch has been mounted.

Z axis limit switch

And the power entry entry module has a mounting plate.

Power entry module

Wiring is an obvious next step, but I took a detour and have been working on the spoil board and work-piece hold down clamps. The weather warmed up enough to open the garage door and use the table saw, so I took advantage of the opportunity. The spoil board is more than just a chunk of wood under the material you're carving up with the CNC. It has five "C" cross section extrusions embedded in it which can hold the heads of 1/4" bolts used to clamp the work piece. It's a nice improvement over simply using wood screws.

CNC Project (29 Jan 2015)

I've been nibbling away at the remaining unfinished items of the project. Four of the limit switches are in place as is the cable support which is just barely visible behind the gantry. In the side view you can see the power supply and motor driver. There is, however, a notable lack of wiring.

CNC router on Jan 2015

CNC router project Jan 2015

I need to mount the Z axis limit switch, make mounting brackets for the motor driver, and do a bit of wiring. Rather than just connect a power cord to the power supply, I've decided to use a power entry module with a switch and fuse. I've had a couple in the junk box for some time, but using one will require cutting a slightly larger hole in the back of the box. Eventually I'll need a door for the electronics bay, and a fan, and a power supply for the fan, and I'm sure other stuff.

None of this is hard. It's just time consuming and annoying, particularly so given that the project looks to be virtually finished, but really isn't.

Oh, and then there's the spoil board and clamps...

CNC Project (22 Jan 2015)

Some small but nontrivial progress on the CNC project: it's now beginning to look like a CNC machine.

CNC project on 22 Jan 2015.

Actually, the mechanical structure is 99% complete. I need to fabricate mounting brackets for the limit switches, but it's very nearly ready for wiring the electronics. There's a cover for controlling dust and noise, but I'll get to that later.

Writing and Still Here (11 Jan 2015)

RL somehow continues to make its demands. SLOW progress writing.

Still shipping copies of Building Recreational Flight Simulators.

Writing and CNC (24 July 2014)

Still alive, still writing, albeit not very fast or about flight sim.

I'm writing science fiction.

I'm writing a story that takes place on Sakura, a colony world several dozen light years from Earth. Sakura was settled by a robotic ark carrying frozen human genetic material on a very long voyage. No FTL travel in this story; these people are on their own. But that's okay, because they're doing just fine. They've made great progress adapting earth agriculture to Sakura's biome, they're well fed, and their population has grown enough to be counted in the millions (just barely). It's true they had a slight hiccup seventy years earlier when some nasty aliens began munching people at an agricultural research station, but three very clean, moderate yield nuclear sterilization devices put a stop to that. Now the incident's just an entry in their history books. Mostly.

One of the main characters is named Toss. Toss is a graduate student, an unhappy, underfunded graduate student. In fact he's so underfunded he's been forced into taking a lonely night job at an all but abandoned military research station on the edge of a nuclear blight, which is his initial reason for being unhappy.

Another main character doesn't have a name, doesn't even have a body you'd recognize. You could look right at her and not know it. Yes, "her", because she's a bringer of life (when she feels like it). Let's call her "Mama".  Long ago Mama decided to make Sakura her home, but when she finally arrived she found others living there. She reached out to these others, but she was not well received. After seventy years she's going to try again.

You may think this is an obvious setup for one of those clichéd "don't go into the dark basement" horror stories, but it's not. The basement lights work great.

This is a story about several reasonably intelligent individuals each trying to do the proper thing, so everything should turn out fine…


Progress? Well, much further than my earlier efforts at fiction. The story's mapped out and the manuscript's approaching 50,000 words. Notes add several thousands more words. Call it half way to a first pass.


The CNC project is still alive though real life has conspired to bury it under assorted unidentified stuff in my work area. A bit of excavating and I should be able to resume assembling it.

Writing Fiction (24 April 2014)

I've been writing fiction on and off for years. Haven't managed to finish anything as yet. In part that's because there are so many really neat ideas to write about. I have bits and pieces of six novels, enough words to account for a good size novel, but unfortunately spread across a half dozen separate stories.

I decided to focus my efforts on one story to bring it to a close, which is what I'm doing these days. Since the weather is warming up, I'll perhaps also spend some time in my unheated workshop area completing my CNC project, and of course, I'm still shipping copies of Building Recreational Flight Simulators.

Older Entries