Sunday, August 31, 2014

Writing a WinUSB Driver (2 of ?): Fixed: WinUsb_GetAssociatedInterface fails with ERROR_NO_MORE_ITEMS when you try to open an alternate interface

This week I'm working on writing my first USB driver with WinUSB.  It's going pretty well.

I have hit two snags.  The first has to do with connecting to alternative interfaces on the device.  The second snag has to do with starting isochronous transfers.  That's a future post  (after I figure it out).

Some explanation is in order.

When you plug in a USB Device it is identified to the system by a Hardware ID.  You can see the Hardware ID in Device Manager.

Hardware Ids for the Intel Play Qx3 Microscope
There are two unique concepts for USB devices called "interfaces" and "endpoints".  We'll cover interfaces first.  Interfaces are device addresses, sort of like a computer's IP address on a network.  .  A device can have multiple "alternative" interfaces, the same way that a computer can have multiple IP Addresses.  (This will be important in a minute.)

Interfaces are only half the story.  The other half is "Endpoints".  These are analogous to "ports" in the networking world.  All devices are required to support a specific interface/endpoint called the "default".  What makes USB really fantastic is that you can ask the device for information about its other interfaces and endpoints.

One tool to query information is  USBView.  It's available free from Microsoft.  You can download it as part of the Windows SDK.  It installs to c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\usbview.exe, in case you can't find it.  Microsoft gives away the source code for this app too, if you are interested.  Here's what it looks like.

I know this is dragging on, but I'm coming to a point.  The key thing is that a single USB device can have multiple interfaces and addresses.  The documentation for my USB device says:
[After connecting the device and selecting high-power mode] For USB cameras the driver, must now select Interface #1, with the highest possible alternate setting.
The alternate settings are numbered 1-3.  Each interface has slightly different speed parameters, and it's in my best interest to pick the fastest one.  Here is a trimmed snippet from USB view.  In this you can see that the packetsize is larger on the higher alternate numbers.

          ===>Interface Descriptor<===
bInterfaceNumber:                  0x00
bAlternateSetting:                 0x01
iInterface:                        0x00
wMaxPacketSize:                  0x01C0 = 0x1C0 bytes
          ===>Interface Descriptor<===
bInterfaceNumber:                  0x00
bAlternateSetting:                 0x03
iInterface:                        0x00
wMaxPacketSize:                  0x03C0 = 0x3C0 bytes

The WinUSB documentation says the right way to accomplish is to discover all of the interfaces with WinUsb_QueryInterfaceSettings and then connect to the new interface by calling the WinUsb_GetAssociatedInterface function.  Here's my code.

if (!(WinUsb_GetAssociatedInterface(oldWinusbHandle, alternateSettingNumber, &newWinusbHandle))) { printf("WinUSB_GetAssociatedInterface failed with error code %l.", GetLastError()); return (false); //This doesn't work. :( }

Unfortunately this fails with the error code 259 "ERROR_NO_MORE_ITEMS".

This is a showstopper for me because the default interface doesn't support the endpoint required to transfer images from the camera.  Argh!

I quintuple checked all of my code against the MSDN examples before I figured it out.  What I finally realized is that WinUsb_GetAssociatedInterface opens an entirely new connection to the alternative interface.  I don't want that, and my device doesn't support more than one connection at a time.  What I want to do is change the Alternative Setting on my existing connection.

The so-simple-it-hurts solution is to call WinUsb_SetCurrentAlternateSetting instead.

// Switch to the new best alternateSetting (This works!) if (!(WinUsb_SetCurrentAlternateSetting(deviceData.WinusbHandle, deviceData.bAlternateSetting))) { printf("WinUSB_SetCurrentAlternateSetting failed with error code %l", GetLastError()); return (false); }


On a related note, after you switch this, you also have to remember to specify the new alternate setting number when you get the list of endpoints:

WinUsb_QueryInterfaceSettings(deviceData.WinusbHandle, alternateSetting, &usbInterface);

and also when you get the pipe handle for the endpoints:

WinUsb_QueryPipeEx(deviceData.WinusbHandle, alternateSetting, i, &pipe);

That's it!

For those of you following this project, it's humming along nicely.  I have working control functions written for all of the camera functions that I'll need, plus a bunch I probably won't use.  I've also written a widget to convert the images from YUYV format to RGB so I can display them.  Where I'm stuck now is that all my USB isochronous transfers fail with an error 57: ERROR_ADAP_HDW_ERR.  Without those transfers I can't get any picture data from the camera.  That's a show stopper.  Once that's fixed I can start saving the pictures to disk and the "driver" part is done.  The grand finale will be a desktop app that can view the pictures in real time with buttons for the illumination and knobs for brightness, contrast, etc.  Those are all topics for another post.  Wish me luck!

Friday, August 29, 2014

Writing a Windows 8.1 Driver for the Intel Qx3 Microscope in Visual Studio 2013 (1 of?)

I found an Intel Qx3 Play camera at Goodwill for $0.99.  I've wanted a microscope for the lab, and it's cheap!  How could I say no?  :)

Unfortunately Intel has chosen not to make modern drivers for this 13 year old kit.  That's unfortunate, but I don't blame them.  To get it to work with their software I have to go all the way back to Windows Me or Windows 2000.  That isn't going to happen.  This thing is so old that they don't even have it on their website anymore.  I would have to download it from cNet. 

There is some good news.  The unit works with Linux.  I fired up an Ubuntu Live CD and verified that it works.  Yeah!  Unfortunately I can't use a Hyper-V VM and Ubuntu because USB passthrough only works with Windows Server 2012 and Windows 8 guest operating systems.  :/

So that sucks. 

Fine.  I'll try to get it working in Windows instead.  How hard could it be to write a USB device driver?  It's simple Algebra.
Negative - I haven't programmed in C since puberty.
Negative - I've never written a Windows driver before.

Negative x Negative = I'm POSITIVE I can do this.

This is the perfect combination of hubris and obsession for this to be an awesome project.

So I got the chip specifications and developer's guide from this page:
Ironically, that is where the Linux developers parked their stuff when they wrote this driver for Linux.

Next up I read the developer documentation on the slashdot site and started slogging through the writing a driver documentation on MSDN.  I also grabbed a copy of "Developing Drivers with the Windows Driver Foundation".  That's a link to Amazon, but I actually read it on Safari.  It's  a little light bedtime reading.

One of the first steps is choosing a driver model: MSDN: Choose a model for developing a USB client driver.  From the chip documentation I learned that I need one control endpoint and one isosynchronous endpoint.  That narrows down my choices significantly.

I had hoped to make it work with the baked-in Windows USB Video Driver module by writing an extension to usbvideo.sys but that won't work.  The camera either supports that or it doesn't.

The remaining options are writing a Kernel Mode Driver (hard) or using the generic WinUSB driver and building all of the intelligence into the application.  For now I've chosen the latter, as it is a much simpler solution.  The unfortunate bit is that this driver will only work in Windows 8.1.  It is the only OS that supports isosynchronous data transfers with winusb.

Fast forward 48 hours.  I've installed Visual Studio 2013, Update 3, and the Windows Driver Framework for Windows 8.  (This takes forever.  :D )(Seriously, you can take a nap.)  I used the Visual Studio WinUSB template to kick out the .inf for the driver and a stub application.  This MSDN tutorial is incredibly helpful: Write a Windows desktop app based on the WinUSB template.  Yesterday I got a stub application working which can identify when the device is plugged in and read the firmware version from it.  Today I moved all of the device specific code into its own class and started cranking out all of the functions needed to make to work.  It's just after midnight and I have 70% of the API written for the Control Channel.

With any luck I'll get the isosynchronous endpoint communication working tomorrow and get some data to play with.  My plan is to release the source code, driver, and completed application as open source.  This is awesome!

Useful things I've learned so far.
Windows 8.1 will not permit you to install an unsigned driver by default.
- The workaround is to reboot with "shutdown -r -o -f -t 15" and select the advanced mode that will allow you to install the driver.

The security of the sprintf command has been tightened down significantly.
- I had to switch to using sprintf_s to get past a fatal compiler warning.

Time for bed before I become more hallucinogenic/delusional from sleep deprivation.

Tuesday, August 26, 2014

Changing the Deck Belt and Blades on a 2007 42" Troy Bilt Super Bronco Lawnmower (Without an Impact Wrench)

I love my shiny red lawnmower.  I got it, not running, for $100.  :D  The carb float was stuck and the engine was full of gas.  I fixed it, and it's worked great ever since.

... until my son hit a rock and bent the blades.  :/

I straightened them so I could finish mowing, but they're borked.  Here's how to change them.

The TLDR procedure is
1. Remove the deck from the mower.
2. Remove and replace the blades.

Removing the deck on this mower is so easy.  (This is why I love this mower.)
Turn the mower off.  (I suppose you could do it with the mower running, if you had a particularly gruesome death wish.)(Need help? In the U.S., call 1-800-273-8255 for the National Suicide Prevention Lifeline)
Disengage the blades.
Lower the deck to the lowest position.
There are spring loaded handles on the left and right side of the rear of the deck.  Pull those to release the rear.

There is a bracket that holds the belt on.  There is a single bolt that holds it in place.  It comes off with a 13mm socket.   I realized after the fact that I could finagle the belt off without removing the bracket.  That will save you a little time.

The last thing to remove is the front support.  To do this, raise the deck as high as possible.  (Just move the control lever.  The deck won't move, you disconnected it.)  Then roll the mower backwards a couple of inches.  The bar lifts right out and you can slide the deck out the right side of the mower.

The deck is still connected to the blade engagement lever by a cable, which I chose not to remove.  It is possible to unhook this with a cotter key and removing one spring, if you want to completely remove the deck.  I just pulled it out and propped it up to change the blades.

Changing the blades is -really easy- if you have an impact wrench and air compressor.  Most people don't.  That makes the process a little more complicated.  The big nuts on the bottom of the blades fit a 24mm socket.  The trick is keeping the blade and spindle from turning while you undo the nut.

My solution is to use a piece of 2x4 to hold the blade.  This works great!

This first blade came off really easily.  The second one did not.  When this happens, you can use a pipe for leverage.

Trivia: This Pipe's name is "Piper Something".  It's named in honor of my Brother-in-Law, who used to constantly ask me to "Go get a pipe or something."

Very rarely you'll have a blade where the spindle turns after you get the nut backed away from the blade.  This happened on the other blade.  If you had another 24mm socket or wrench (because those just grow on trees) you could put that on the spindle nut to keep it from turning.  I didn't have this option, so I put a pipe wrench on it.  This is not a good or elegant solution. :/

Putting it back together is straightforward.  You don't need to get the blade nuts insanely tight, as they will self-tighten as you mow.

Bonus content:
While you have the deck off, it's a good time to change the belt.  I don't have a good picture of this, but can give you the process.  On the top of the deck there are two safety covers (left and right.)  Both are held on with 3 13mm head bolts (in Red).  Remove them.  Also remove the two center idler pulleys (Blue) with a 14mm wrench and socket.  Route the belt according to the sticker and put it all back together.

I bought my belt and blades locally from Tractor Supply.  Don't be like me.  You can save more than half with Amazon. Here are links to the parts I _should_ have bought. :(
754-04045, 954-04045, Replacement belt made with Kevlar. For Troy Bilt...
Set Of 2, Made In USA Replacement Mulching Blades For MTD 742-0616, 942-0616

Monday, August 25, 2014

Not Fixed: Repairing Nx8500 Helicopter (4 of ?): The non-turning tail rotor mystery

Ug.  Helicopter Ug.

Tired of it being disemboweled on kitchen table. ug.

Tired of working on it. Ug.

The Tail rotor is belt driven.  If I hold the tail rotor and turn the main rotor I can see that the main gear is turning, the tail rotor gear is turning, but the belt pulley (on the same shaft) isn't moving.  Crap.  Either the shaft is broken or the gear is stripped.


Took apart Heli.
Removing Raw Friction NX8500/Trex-450 Tail Drive Assembly

Tail rotor drive assembly.

Gear is spinning on shaft.

Roughed up shaft with knife and put CA glue on it.  Sprayed gear with CA Kicker.  Reassembled.

Ready for another test flight.

(Ready for another project, honestly.)

Test "Flight" 
Clicky servo can't tilt rotor at all.  Tail rotor works fine now. Must buy stronger servos.  Get paid next week.  :/  Long sigh.

I talked to a friend that has been in RC for a long time.  He said it looks good, except I have the blades a little too loose.  I'll add it to the list.  Waiting on the Gyro and servos now.

Sunday, August 24, 2014

Not Fixed: Repairing Nx8500 Helicopter (3 of ?): Installing New Servos and programming the radio with t6config

We tested the helicopter, and hit another snag.  The left servo is completely dead, and the right side is really twitchy.  That sucks.  I don't know if it's the new rotor head or damage from the crash, but either way we are going to need some new servos.

I went to our local hobby shop, Family Hobbies, to get some new ones.  Unfortunately I have no idea what the spec on the old servos are.  They are literal black boxes with no specs at all.  I got 3 new 9 gram servos from the shop to try.

Note: You should also buy some small zip ties to keep the cables tidy.

Update: One of these has started twitching, so 9 grams are probably not strong enough.  I'm going back for stronger ones.

Replacing these has two big parts.  Installing the servos (making new servo arms) and re-leveling the swash plate.

The easy part is physically installing the new servos.
1. Unsnap the servo ends of the linkages.
2. Unscrew the screws holding the the servo arms and remove them.
3. Unscrew the two screws  holding each servo on.
4. Remove the wire ties holding the receiver and servo cables in place.
5. Note the channels where the servos plug in.  Mine was 1,2, and 6.
6. Remove the old servos.
7. Make new servo arms.  If your old arms fit the new servos, great!  Skip this step.

My servo arms didn't fit, so I had to mod the arms that came in the box to work.  I cut the new arm to size and drilled the hole out to 1/16th inch.  Finally I rounded off the edges to clean it all up.

8. Move the linkage balls from the old servo arms to the new arms.
9. This is really important.  Hook the servos up to the receiver and center them before you put the arms on.  If you don't do this now, you will probably have to do it later.
10.  Put it back together.
Be careful routing the wiring for the servos.  You want to make sure they don't abrade or get caught on any of the gears.
The next part is getting the new servos to work with the receiver and leveling out the swash plate.  When I tested this, the servos moved backwards.  Up was down and left was right.  That's not great.  As it turns out, not all servos rotate in the same direction.  I had no idea.  This helicopter came with a computer controlled reprogrammable transmitter, so this can be fixed.  I pulled out the USB cable and hooked it up.

Windows Device manager detected the radio as 
todo: verify
a silicon graphics C2100 Serial UART.  You can download the driver for tthat dhere.
todo: driver

Once the driver was installed I went back to device manager and saw that the radio was assigned to COM4.  The radio came with the configuration program t6config on CD.  I installed it.

To run t6config on Windows 7, click start -> run -> Browse and navigate to c:\Program Files(x86)\t6config.  Then select t6config.exe and press Ok Twice.

To run t6config on Windows 8, click the button formerly known as the start button, wait for the start screen to slide up, type t6config, wait for it to find it, and click the program in the search box.

Once t6config is running, click Settings and select the COM port that showed up in device manager.  Once it successsfully connects you should be able to see the slider bars on the screen change when you move the knobs on the controller.  Immediately save the configuration so you'll have a known good/working copy.

Then I opened up the "Revserve" button (This program is full of typos.  It's hilarious) and reversed my servo channels.  Now they move the right way!  Perfect.

I also checked to make sure the swash plate was reasonably level.  It was.  If it wasn't, I could fine tune it in t6config.  I didn't have to change anything here because I was really careful putting the arms on in the right position.

I saved a copy of the new config and went out for our next test flight.

During the test not-flight the new servos worked okay, but one of them has developed a twitch.  I don't think they are strong enough.  That's frustrating.

I think I found the cause of the original crash as well.  The tail rotor isn't turning properly.  When you spin up the main rotor it turns, but any rudder input causes it to stop turning.

Figuring that out will be the next and please-oh-please-oh-please let it be last post in this series.

Saturday, August 23, 2014

Not Fixed: Repairing Nx8500 Helicopter (2 of ?): How to install a Flybarless Metal Main Rotor Head & 3 Blades for Align T-REX 450 Helicopter RH450 on a Raw Friction Nx8500 Helicopter

Yeah!  The new rotor kit came with the rotor head, a new swash plate, three blades, linkages, and no instructions.  (CRAP!)  I'm figuring this out as I go.  Replacing the rotor and swash plate was pretty easy once I knew how.  Here are the instructions I wish were in that package.

How to install a Flybarless Metal Main Rotor Head & 3 Blades for Align T-REX 450 Helicopter RH450 on a Raw Friction Nx8500 Helicopter to convert it from 2 blade to 3 blade.

Update: The stock servos are not strong enough for the upgrade from 2 blade to 3 blade.  You need something stronger than 9 gram servos.  I'm still testing to see what works.

1. Pop the canopy off the helicopter and pull the battery.
2. Unscrew the one bolt and nut that holds the rotor head on.
3. Remove the two allen bolts that hold the behind-the-swash-plate plastic alignment thingie.

3. Pop off the swash plate side of the three linkages that connect the servos to the swash plate.

4.  The old rotor, linkages, swash plate, washout arm fragments, and washout base will come out as an assembly.  Magic.

Too bad I didn't do that.  I disassembled half the heli trying to get the main shaft out to replace it with the new one.  The new one wasn't long enough, so I disassembled it AGAIN to put the old one back in.   Sigh.  Did I mention there were no instructions?

5. Assemble the three new linkages that come with the kit, making them all the same length.
6. Put the new linkages on the inner ring of the shiny new swash plate.
7. Connect the new washout arm to the odd (not evenly spaced like the other 3) pin on the outer part of the washout arm.
8. Slide the new swash plate on the shaft with the washout arm.
9. Snap the servo linkages on the swash plate, and tighten down the washout arm.
10. Reinstall the behind-the-swash-plate plastic thingie.

You'd think that now you put the rotor head on.  No.  Before you do that, you want to make sure the swash plate is reasonably level.  It should be, since you are reusing the old heli linkages.  I missed this step, but it didn't hurt anything.

11. Slide on the new rotor head with the control arms pointing in the direction of rotation.  Install the allen bolt and nut that holds the rotor head on.

Curious trivia.  On big helicopters this is referred to as the Jesus nut.  i.e. If it fails, you meet Jesus.

12. Snap on the linkages from the inner part of the swash plate to the rotor head.  If you were careful to make them the same length, it will be level now too.  Magic!
13. Loosen the one allen bolt on on the washout arm, and rotate it so that the linkages point straight up and down, instead of being at an angle.

14. Check the new blades to make sure they are balanced.  Mine were.

15. Install the new rotor blades, with the fatter edge pointing at the direction of rotation.  The nuts should be snug, but the blades should be able to move freely back and forth.

More trivia.  If performed while tired, it is possible for a reasonably intelligent person to put 2 of these on the right way, and one backwards.  (Insert emoticon for shame here.)
16.  That's it.  You are ready for a test flight!
Wait a second!

When we tested it, one of the servos was really jittery, and another was dead.

The new rotor head is much heavier than the old one AND has no flybar.

Did he kill them in the crash?  Did I kill it during the repair?  Is the new rotor too heavy for the stock servos?  I have no idea.

I think the crash broke them, but I'm not sure.  Let me get some new servos and I will be the guinea pig.  I'll write about it in my next post.

Update: I installed 3 new 9 gram servos and one started twitching within minutes.  The stock servos are NOT strong enough for this rotor head and must be upgraded when you change the rotor head.

Friday, August 22, 2014

Not Fixed: Repairing Crash Damage on the NX8500 Helicopter (1 of ?):

My son spent his Birthday money this year on an RC Helicopter.   He bought a Raw Friction Nx8500 from eBay.  It is a 6 channel T-Rex 450 clone, and he's done great with it.

He's been flying it every day for over a month, but last week (much to his vigorous dismay) he crashed.  He says that it started spinning out of control and it wouldn't take any rudder input at all.

That sucks. 

This would be a good place to put the obligatory photo of the damaged heli, but I can't find it on my phone anywhere.

So I took it apart to see how bad it was.  The Rotor Head was broken clean off, one of the blades was cracked, and both of the washout arms broke.  Bad times.

I priced the Trex parts for it, and it came to $60 for blades, a new metal rotor head and washout arms.  Unfortunately, my favorite shop has the rotor head on backorder until god knows when.  That's a problem.

We could have waited for those parts and put it back together, but what fun would that be?

So...I ordered a Tri-Blade flybarless Rotor Head Kit from eBay!

Installing that is my next post.

Review: HobbyKing T-45 Goshawk R/C 64mm EDF Jet EPO Plug-n-Fly

I try not to complain about the failures of others.  This post is an exception to that rule.

My son saved his lawn mowing money and just bought a Plug-N-Fly Radio Controlled T-45 Goshawk EPO Jet from HobbyKing.  I am stunningly disappointed with his purchase.

Before I go into the box, let me clarify what Plug-N-Fly means.  Plug (in the receiver and battery) and Fly.   Are we clear on that?  You should be able to remove a plug-n-fly from the box, attach the wings (With a rubber band, clip, or screw), install a receiver and battery, and fly.

This plane is far far far from meeting that definition of PnF.  It requires a minimum of 2-3 hours of assembly before it will be ready to fly.

The plane comes in a roughly 4 foot x 18 inch x 12 inch box.   That is a standard letter size  piece of paper for size reference.

Inside the box is the glued-together fuselage with the motor and 3 servos installed.  Everything else requires assembly.  There is no manual in the box.  (Failure)  There is a PDF scan of the manual for the RTF version of this plane on the HobbyKing website, but no official assembly instructions.  I've tried to supply instructions inline in this post for anyone else who needs them. 

To complete this plane you need CA Glue, Kicker, a Xacto or razor knife, Two or Three servo extension cables, a receiver, battery, transmitter, and Velcro to mount the receiver, ESC, and battery.

The servo extension cables are required because the servo leads are not long enough to reach each other at any point on the aircraft.  I'm mounting the receiver in the center top of the fuselage behind the canopy, so I need an extension for both the nosewheel and the elevator servo.  I'm going to glue one in the side of the fuselage for the ailerons too so I don't have to mess with the receiver if I take the wings off.

The canopy is an uncut piece of vacuformed plastic.  You have to cut off the forming bezel, trim it to shape, and glue it to the inner cockpit.  (Failure)  Here is the bit I cut off.

 The inner cockpit is a flimsy piece of black plastic held to the fuselage by 4 washers, double-stick tape, and 4 magnets.  It is removable.  When I removed it, the double-stick tape failed and left one washer stuck to the magnet in the fuselage. (Failure)  The other three magnets pulled right out.  The aren't glued in.  (Failure)

To assemble the canopy:
  • Carefully trim the upper canopy near the cut line, leaving some excess for trimming
  • Put the Seat Cushion and control panel stickers on the lower.  The larger ones go in the rear.
  • Pull off the metal washers (you can see the one that didn't fail in the picture) and magnets.
  • Scrape the sticky tape off of the washers.
  • Rough up both the canopy and washer gluing areas with sandpaper.
  • Spray the washers with CA Kicker, and dot CA Glue on the canopy.
  • Put the washers on, holding until they are firmly stuck.
    • Do not glue your fingers to the canopy or washer.
  • Pop the remaining magnets out of the fuselage.  (There are 4 total.)
  • Spray the magnets with CA Kicker.
  • Put CA glue in the magnet holes.
  • Gingerly put the magnets in.  (Not to tall, not too deep.)
  • Let the Glue set.
  • Put the lower canopy (black) on.
  • Spray the gluing areas of the upper canopy with CA Kicker.
  • Put CA glue around the perimeter of the lower canopy at regular intervals.
  • Put the upper and lower canopy together on the plane.  You get one shot at this, so make sure they line up neatly.
  • Note: You have to do it on the plane or the flimsy lower canopy will deform and not fit the fuselage.  Bad times.
  • Once dry, do final trimming of the canopy assembly.
The nose cone is also a piece of thin vacuformed plastic that needs to be cut and trimmed to shape.  There are no provisions to attach it to the plane, so I'm going to glue it in place.  I'm going to cast a pattern from it first because it will inevitablty get crushed and HobbyKing doesn't sell a replacement.

You will also have to cut a channel in the underside of the cone for the nosewheel.

This is a 4 Channel Jet.  Traditionally in RC 4 channels indicates Ailerons, Rudder, Horizontal Stabilizer and Throttle.  Not on this jet.  There is no rudder control.  That channel controls the steerable nosewheel instead.  I accept the blame for this failure as I should have noticed it before helping him place the order.

To install the steerable nosewheel you have to drill out the hole in the servo arm to accept the landing strut with a 3/32" drill bit.  You also have to studiously pick out all of the expanding foam glue that is stuck in the bracket from the "Manufacturing" process.  I spent at least a half hour getting this cleaned up and assembled  The gear is held on by a plastic cap and two screws.  The PnF version includes two lengths of screws.  Use the shorter ones for this.

Note:  Make sure you center the servo before you clip in and screw the wheel retainer.  All 3 of my servo arms were installed off-center and had to be repositioned.  Fix this now, as it will be a pain to disassemble.  Here is what the Steerable nose looks like assembled.  The plastic clip will eventually snap in once you get all the glue cleaned out.

There are two plastic covers to reinforce the leading edge of the turbine intakes on the left and right of the fuselage.  These pop on, with a little work.  I installed them and then dribbled CA Glue in, as there was no way to install them quickly (before glue set) or remove then once installed.

There are two preinstalled white plastic bubble mini-airscoops behind the canopy.  These need gluing as well, or they will fly out under pressure.  These feed air into the channel where the ESC mounts for cooling.

Next stop is the Wing.  The Aileron Linkages are not assembled and have to be screwed together.  (Failure)  The control horns are not installed and must be glued and screwed in place.(Failure)  This servo also had the servo arm installed off-center.  (Failure)  The servo arm holes are not large enough for the linkages and must be drilled out with a 1/16" bit.  Once you have this assembled the wing is held in place by a mounting tab and a single Phillips head screw.

(I neglected to get a picture of this.)

The next piece of assembly is the elevator.  This is made of two pieces of foam covered in thin plastic, that get glued to the fuselage only on one side.  I consider these the "Most likely to fail" on this aircraft.  I've traced the outline of mine so I can make new one-piece unit out of fiberglass covered balsa when that happens.  You also have to glue & screw the control horns, assemble the linkages, drill out the servo arm, and assemble.  For all of the control horns use the longer screws that come in the box.  Here is the completed assembly.

The next stop is the rudder.  It too is plastic covered foam.  It is fixed, not controllable, and gets glued in a slot on the tail cover.  Once glued in, the tail cover is held in place by a tab and a single Phillips screw.

The last piece of assembly is the remaining landing gear.  These slide into the plastic pockets already glued to the wings.

I'm waiting on the servo extension cables so I can button this up.  I'll post again with CG information and test flight results as soon as they come in.

I attempted to post this review at HobbyKing to warn others, but only gold customers can post reviews.  That caps it all.

Canning Garden Tomatoes

I'm getting a lot of tomatoes out of my vegetable-infested weed patch.  Many more than I could possibly eat or force-feed to the kids.  So today I'm canning chopped tomatoes.  We'll use these in chili, stew, and salsa this winter.

In a nutshell the process is:
Peel them, chop them up, put them in clean jars with 1/4 teaspoon citric acid (or some lemon juice),  and pressure can them for 15 minutes at 5 PSI.

The slightly longer version of this is below.

I used:
  • Tomatoes
  • Citric acid
    • I got mine from All Season's Gardening & Brewing Supply Co on 8th in Nashville.
    • You can also use Lemon juice
  • Pint Mason Jars with bands and new lids
  • A pot of boiling water for peeling tomatoes
  • A large bowl of icy water for cooling tomatoes
    • (and extra ice)
  • A jar-filling funnel
  • A Slotted spoon
  • A chef's knife and cutting board.

The process is

Get some Tomatoes!  These are a little sad because we've been short on rain but that is okay.

Pick through and chuck any icky ones to the compost bucket.
Next, Peel them.  Here is how to peel a Tomato really fast.
  • Boil a pot of water.
  • Drop in a dozen or so tomatoes.
  • Wait 20 seconds.
  • Quickly get all of them out with a slotted spoon and drop them into a bowl of icy water.
  • Repeat this process until your bowl of icy water is full of tomatoes.
  • Wait a bit for them to cool.
  • Put the now-cold tomatoes out on paper towels to drain while you are peeling.
    • This helps to get less water on your juice covered cutting board.
  • With your left hand, grab a tomato by the stem end and move to the cutting board.
  • With the knife in your right hand, cut it almost in half laterally just below the stem.
  • Pull back the peel with your left tomato holding hand.
  • Cut the stem and peel off with the knife hand.
  • With 5 minutes practice you can do a tomato in seconds.
    • When you run out of cold tomatoes, refill your ice bowl and start again.
    • If the skins aren't loose enough, make your boiling time longer.
    •  If the fruit is mushy, you boiled it too long or it was overripe.
Chop them, if you want chopped tomatoes.  If you have OCD, you'll line them all up on the cutting board in neat little rows and cut a half dozen tomatoes with one pass of the knife.
Slide the cut tomatoes off into a bowl and keep peeling and cutting.
When your bowl is full, arrange your jars in neat rows, and measure in 1/4 Teaspoon of Citric Acid into each one.

Ladle the cut/peeled tomatoes into clean jars with the jar funnel, prodding them with the ladle or a spatula handle to make sure they pack in efficiently leaving some space at the top.  The official book says 1/4 inch.  I leave it so they are below the flange below the threads at the top of the jar.

 When your bowl is empty, wipe off the jar tops with a paper towel and screw on a lid and band.

Repeat until all of your tomatoes are done or you run out of jars.  Whichever comes first.

Note: My canner is grossly oversized and takes -forever- to come to a boil, so I  add 4-5 inches of water and put it on to boil with the lid on but not clamped down about 25 minutes while I'm peeling tomatoes. When all the tomatoes are jarred, lidded, and banded I put them in the canner where the water should be already boiling.

Then I put the lid on and clamp it down, but don't put the weight on yet.

As an aside, I have this really nifty pressure canner regulator weight I got from Ace Hardware in Smyrna, TN.  It is in three pieces, and will automatically (within reason) maintain the canner pressure where you want it depending on how many weights you put on it.

Amazon has these if you want one. Link: Presto Pressure Canner Pressure Regulator
I wait ~10 minutes for it to start steaming really well, and then put the weight on.  5 minutes later it is up to pressure and I start the 15 minute cooking timer. 

When the timer goes off I move the canner off the heat, but don't take the weight off.  If you do, the still-really hot stuff in the jars will boil, expand, push the lids off, make a mess, and ruin your day.  In a half hour (or the next morning) it will have cooled and then you can safely pull the jars out.  (With tongs, if it's hot.)

Note: It's normal if the tomatoes separate into a not pretty clear yellow broth, and tomato chunks.  (Censored picture of ugly tomatoes.) Shake them up to make them pretty again.  Check to make sure the lids are popped in before you store them. 

All done!

Note: After peeling tomatoes for an hour,  you'll probably not want to see a tomato for several days.  That's okay.  These will stay good until next years tomatoes come in from the garden.

Monday, August 18, 2014

So then I read: "The Knowledge: How to Rebuild our world from scratch" by Lewis Dartnell

I just finished "The Knowledge" by Lewis Dartnell.

(Amazon Link)

This book gives the basic information that you would need to re-industrialize society after a major catastrophe.  If you have seen the TV show Jeremiah where people are scrounging and scraping to put together a working steam engine from scrap, this book is for them.  The topic is huge, but the author makes it engaging enough that it is readable.  He covers many topics from basic agriculture and making common industrial chemicals to steam power and electricity generation.  He repeatedly brings up the scientific method of observing, predicting, and testing.  This last bit is huge, as all of modern science is built on it.

When I build a time machine, I will put a copy of this book in the emergency box along with a copy of caveman chemistry.  I would want copies of both if I were stuck on a deserted island.

I would liked it if the book had more pictures.  I also would prefer it if it were more specific about some of the processes.  As an example, the text's explanations of a spinning wheel were fantastic, but I could not construct one.  I simply do not understand the hook-twisting mechanism.  In the author's defense, the book's guiding principle is not to give you all the answers, but to give you the must-have information and get you asking the right question.  I think he succeeds in that regard.

I would also have liked to see a section on mathematics, but I suspect that this chapter would have scared off many readers.  I understand his decision not to put it in.

This was a library check-out for me, but I will purchase a copy.  It is that good.

Monday, August 11, 2014

Sometimes you just have to get out and push your spacecraft.

My son asked me to set up Kerbal Space Program for him, and I've gotten back into playing it.  This game is so addicting.  I love it.

I had a couple of craft that ran out of fuel before re-entering Kerbin's atmosphere.  I thought long and hard about how to get them back home.  Finally I found the KISS solution. 

In this picture Jebediah Kerbin is on an EVA, free falling in space.  What do you do when your ship runs out of gas?  It's simple.  Put on your Jetpack, hop out, and push the spacecraft retrograde at periapsis (the lowest point in your orbit.)  Magic.  Rocket science at its finest. 

That's Kerbal space program... because sometimes you have to hop out and push your spaceship.  I love this game.


Busy Weekend.. Read a book, fixed the van, canned some chicken.

This has been a fun weekend.  Lots of stuff in this post.

I finished Chris Kyle's book, American Sniper.  I enjoyed his stories.  The book felt conversational, not like a strict autobiography.  Here is the best quote from the book.

You know how Ramadi was won?
We went in and killed all the bad people we could find.
When we started, the decent (or potentially decent) Iraqis didn’t fear the United States; they did fear the terrorists. The U.S. told them, “We’ll make it better for you.”
The terrorists said, “We’ll cut your head off.”
Who would you fear? Who would you listen to?
When we went into Ramadi, we told the terrorists, “We’ll cut your head off. We will do whatever we have to and eliminate you.”  Not only did we get the terrorists’ attention—we got everyone’s attention. We showed we were the force to be reckoned with.  That’s where the so-called Great Awakening came. It wasn’t from kissing up to the Iraqis. It was from kicking butt. 
The tribal leaders saw that we were bad-asses, and they’d better get their act together, work together, and stop accommodating the insurgents. Force moved that battle. We killed the bad guys and brought the leaders to the peace table.
That is how the world works.
I also worked on the Van some more, finishing the mile-long to-do list.  I installed a new power window motor and regulator on the driver side.  Ty is ecstatic.  Now we can get the mail and order at a drive-through again.  Yeah!  I also replaced the rear brake pads, rear calipers, and changed the brake fluid.  When we were driving back from vacation the rear brakes started dragging.  By the time we noticed the driver's rear wheel was hot enough to boil water.  I seriously thought the tire was going to catch on fire.  Not fun stuff.

To change the window regulator remove three Phillips screws from the door panel.  One is in the door opener handle behind a plastic cover.  One is in the hand grip on the arm rest.  The last one is near the bottom of the door about 3/4's of the way forward from the door edge.  Pop out the power window switch assembly with a knife or screwdriver and disconnect.  Pry off the door panel.  Disconnect the door handle rod, entry light, and power lock switch.  Remove the Speaker (4 screws).  Remove the rubber door moisture barrier gingerly.  Tape the window to the door frame so it doesn't fall in the door.  Remove the two window-to-regulator clips.  Loosen the 4 T-35 Torx screws that hold the regulator frame in.  Finally remove the bolts that hold the motor to the door.  On the other door these are attached via a little rubber bushing that disintegrated when I tried to remove it.  On this side it was held on by nigh-indestructible plastic one-way clips.  I had to resort to violence to remove them.  :/

Next take off the weather stripping between the inner door panel and the glass.  Now the regulator can come out with a small game of Twister.  Installation is pretty straightforward.

Changing the rear brake calipers is really easy.  You need four tools to do it. (Not counting the jack, jack stand, and lug wrench  to remove the wheels.).  You need a 3/8" wrench for the bleeder screw, a 17mm wrench for the brake line fitting, a 7mm Allen wrench for the guide pins, and 3/8" tubing to bleed the brakes.  Two guide pins hold on the calipers.  These have a 7mm Allen head.  I bought a 3/8" drive Allen-head socket set ($13 @ Home Depot) and these came out without issue.  There is also a 17mm head banjo bolt holding the brake line on.

Bad times.  My wrench set doesn't include 1 17mm wrench and a socket won't fit.  A 5/8 wrench fits very closely and I used that instead.  (Full disclosure, I actually used a 5/8" crowfoot socket because my 5/8 wrench is AWOL.  Dammit.

Installation:  I bought loaded calipers that came with new pads and pins already installed.  I put it in place, bolted it in, and bleed the brakes.  Magic.

Don't give me a hard time about the rusty brake rotors.  They met the spec for runout and thickness.  I checked.

Changing the Brake Fluid
This van is scraping up on 2000k miles, and the brake fluid has probably never been changed.  I siphoned as much as possible out of the master cylinder and refilled it with new DOT 4 fluid.  Then I bled the rear brakes until new clear fluid came out.  Total I extracted 22 ounces of the old fluid.  It was a dark red-black color and had unknown particles in it.  I do not regret changing it.

I bought an Auto-Zone one-(wo)man brake bleeder kit for this project.  It was around $10 and it's trash.  The adapter that connects to the bleeder screw broke after I did just one side and the magnet on the bottle is too weak to hold paper, much less a bottle of brake fluid.  I had to hop in the other car and go get some 3/8" vinyl tubing to bleed the other side.  Bad times.

Note the dark color of the brake fluid.  It's supposed to be clear.  :(

I got the window and brake parts from Rock Auto.  I'm happy with their performance so far.  I have to figure out how to return the brake cores this week.  hopefully that won't be a PITA.

Finally, this morning I canned 11 pints of chicken for the pantry.  This is one of our convenience foods.  It's really nice to be able to pull a jar of chicken and have a meal ready in under 10 minutes.

Raw Pack Chicken Pressure Canning:
Put 4" of water in the pressure canner and start heating (with the lid off.)
Chop up chicken
Put in Jars.  A pint jar usually holds a large Zaycon chicken breast.  Leave an inch between the top of the meat and the top of the jar.
Use a tool (i.e. a spatula handle) to poke out the air bubbles.

(I used 12 breasts in 11 jars.)
Optionally add 1/2 teaspoon of salt to each jar.  (I've had it with and without, it's better with.)
Wipe of the jar tops.
Put the Lids and finger tight bands on the jars.
Put jars in the canner.
Bring the canner up to 15 PSI and process for 75 minutes for pints.
Let the canner cool down to room temperature.
The next day take the bands off and store your jars.  All done.  Chicken can be eaten right from the jar.

Bedtime, have to be back up for work in 6 and-a-half hours.  Merp.