When I caught wind that we were moving from grow-almost-anything England to rocks-are-the-indigenous-life-form New Mexico, I knew that a stereotypical garden wouldn’t work. Well maybe it would, but I don’t feel like going through the hoops of putting one in on a house that we’ll be renting for only a few years. I need to support my chile addiction, and there’s something that’s just not satisfying about buying preserved, picked-weeks-ago store-offered chiles.

I think it was somewhere in Make Magazine (or their website/news) that caught my eye for hydroponics – think: compact, self-contained gardening that you can do on Mars (which some parts of New Mexico look like!). I started doing mad research about it. Is it possible to grow chiles with hydroponics? I don’t know, but according to this guy it is.  So I set about attempting to build a system.

I have an inner-geek: I love tinkering with electronics, computers, drones, model trains… all sorts of stuff that would buy you shares of laughing-stock amongst your macho-infested friends.  So why not attempt to automate it using an Arduino or Raspberry Pi?  Something in line of what Paul Langdon did at the Maker Faire 2015 in NYC.

I then stumbled upon a more compact tower method of building over at Tomorrow’s Garden.  This is the design I want.  Further investigation led me to Mike Walker who has been experimenting with the design since about 2013.  His YouTube site has pretty much become my sole point of research and learning.  Why not build the thing from lessons-learnt that someone else has already discovered? – like don’t use a bucket due to shitty thermal insulation properties (as depicted at right), use a beer cooler; or coat the thing with truckbed liner spraypaint to prevent light in the tower leading to unwanted algae or bacteria growth.

With Mike’s videos as my guide, I set out to building my physical tower:

I used a combination of the instructions on the Tomorrow’s Garden (linked above), as well as a YouTube search on building it – I think Mike Walker has a video on the build as well.  Use those resources, as I won’t go into build details since it has already been documented pretty well elsewhere.  Of note: like Mike, I foam-insulated the top of the cooler to add additional thermal protection.  Also, the 5″ fence-post-made ‘fan enclosure’ is permanently affixed to the cooler, while I left the 4″ fence-post tower as a snug fit to the cooler allowing me to pull it out of the cooler for cleaning and maintenance.  The aluminum Fat Daddio’s pan is just snug-fit (held in place by friction) inside the gothic fence cap.



Once I had the thing mostly assembled, I started to plan out the automation-side of things.  Things can get confusing as to what goes where and does what, so I had to make a graphic flow chart (below) to keep things straight for me.  So, here’s all what I wanted for my automation:

My initial experimentation was to the tune of an Arduino with much success.  But then I started getting the idea of controlling the tower from my iPhone (the LED strand along the tower specifically) – after all, it will sit prominently on the back patio and will make a descent conversation piece when we have company over.  So I bought a Yun shield (to give the Arduino WiFi capability) and started working with that.  I barely started figuring it out when I stumbled across a little $19 Arduino-like board with WiFi and IoT (read: I can control it from anywhere in the world via internet) called the Particle Photon.  I bought one and tried it on: I was sold!  It’s about ¼ the size of the Arduino with iPhone capability automatically built in.  You just have to not mind opening an account through them (it’s free) in order to program it and propagate it throughout the ‘nets.  The other nice thing is that it uses almost the same coding as the Arduino – I got hung up a little on researching the comparable libraries for what I needed to do (it took a few weeks), but Googling “Spark Photon” (the company used to be “Spark” before they changed their name to “Particle” – you’ll have more success Googling “Spark” vice “Particle”) along with whatever issues you have can help find your answer.

So for the automation parts I ordered:

I put it all together on a 1/2 perma-proto board.  The wiring that I did is below with both Fritzing and actual pictures:


The design is simple with pins left to upgrade as required if I feel the need (ie, add in a water pH sensor in the future).  Here is the feature list for now:

  • When the water temperature goes above 24°C (~75°F), the fan turns on to cool the water (acting as a swamp cooler – one of Mike Walker’s ideas after he tried various methods to keep the water cool). The fan then turns off once the water is below 20°C (68°F).  These are the temperatures I’m walking out the door with; after a bunch of research into plant roots, hydroponics and the like, that temperature range seems to be the sweet spot.  Of course, the temperature range is software-controlled and can be amended once the whole thing has been in operation a while.
  • When the water level gets to 50% capacity, the valve will open to refill the reservoir (the Rubbermaid cooler) back to 90% capacity.  Keep in mind the fan will evaporate off the water in order to keep it cool, and I live in an arid desert environment hastening the whole evaporation process.  I bought a Reverse Osmosis filter set to use as the water source.  Overkill?  Perhaps, but I’ll be using it to supply water to two of these towers.  A cheaper option would to buy an in-line charcoal filter and an extra electronically-controlled valve: hook up the two valves in a series (one after the other, the first directing water to the outside somewhere and the second directing water into the reservoir).  When the reservoir needs refilling, the software coding opens the first valve for 60 seconds to dump the initial “charcoaled” black water outside somewhere and then closes it, with the second valve opening (upon the closing of the first valve) to refill the reservoir with the clean water.
  • Via a smartphone, set the watering percentage to keep the roots wet and fed.  Like the Arduino, the Particle Photon doesn’t have a clock (like “water the plants in the evening” or something – a Raspberry Pi would be a better option if this is the goal), it just has a running time of how long it takes to execute its program.  So assuming it takes one second to run the entire sketch, I have a counter, 0 to 99, for each time it runs prior to resetting – 100 seconds total.  So I type in 33 on my smartphone, and for 33 of 100 seconds the water pump will be on providing a rain-shower of water/nutrients to the plants.
  • Via a smartphone, control the LED tower lights as patio mood lighting.  Since it’s outside, I really didn’t intend for the LEDs to act as grow lights.  This feature is more of an entertainment “wow” factor to showcase the plants.

As mentioned above I’ve considered a pH meter, but I can’t think of a way to reliably do anything about it.  What do I mean?  So the Photon measures a 7.0 pH.  I can either build a hugely complicated water drop dispenser system to add drops of “pH Up” and “pH Down” – that’s two dispensers!  …Or I have to adjust the pH by hand.  If I have to physically mess with the Chile Tower by hand to rectify the automated pH reading, then why not just measure the pH by hand as well?  That’s why I decided to spring for the Reverse Osmosis water supply: if I can guarantee a water source of ~7.0 pH, then I can rest easy with fewer pH checks under the assumption that the optimum pH of 5.5 to 6.5 isn’t going to aggressively change with the addition of pH-regulated water.

Below is the code that automates the Tower (click on the file name):

// libraries
    #include <WS2801.h>
    #include <DS18B20.h>
    #include <spark-dallas-temperature.h>
    #include <OneWire.h>
    #include <Arduino.h>

// Pins
    #define DEPTH A1                                // Analog pin 1 to measure the water depth
    //LED Clock (green) = A3                        // Analog Pin 3 to clock the LED strip
    //LED Data (yellow) = A5                        // Analog Pin 5 to send data to the LED strip
    #define ONE_WIRE_BUS D1                         // Digital Pin 1 to read the DS18S20 temperature
    int Valve = D3;                                 // Digital Pin 3 to relay on/off the refill water Valve
    int Pump = D4;                                  // Digital Pin 4 to relay on/off water Pump
    int Fan = D5;                                   // Digital Pin 5 to relay on/off the Fan

// Definitions
    double tempc;                                   // The displayed real-time Temperature
    double resistance;                              // The displayed waterdepth resistance; can comment out once set up
    double waterdepth;                              // The displayed waterdepth in percentage
    double ratio;                                   // how much to water
    int LEDs;
    int iteration;                                  // Integer 0-99 to operate Water Pump based on % time (0-99 loops)
    boolean LEDOp = true;                          // Flag for feedback on whether or not the LED strip is operating
    boolean FanOp = false;                          // Flag for feedback on whether or not the Fan is operating
    boolean PumpOp = false;                         // Flag for feedback on whether or not the Pump is operating
    boolean ValveOp = false;                        // Flag for feedback on whether or not the Valve is operating
    OneWire oneWire(ONE_WIRE_BUS);                  // Setup a oneWire instance to communicate with Thermometer
    #define SERIESRESISTOR 560                      // Depth meter resistor
    #define ZERO_VOLUME_RESISTANCE    298.00       // Resistance value (in ohms) when no liquid is present.
    #define CALIBRATION_RESISTANCE    675.00          // Resistance value (in ohms) when liquid is at max line.
    #define CALIBRATION_VOLUME        100.00          // Volume (in any units) when liquid is at max line.
    const int numPixel = 11;                        // Number of LEDs on the Tower
    Adafruit_WS2801 strip = Adafruit_WS2801(numPixel);

void setup(void) {
    sensors.begin();                                // IC defaults to 9 bit. If you have trouble consider changing to 12. 
    Serial1.begin(9600);                            // initialize 16x2 LCD Display
        Serial1.write(16);                            // 16 columns
        Serial1.write(2);                             // 2 rows
        Serial1.write(0x52);                          // autoscroll off
        Serial1.write(200);                           // Contrast
        Serial1.write(255);                           // Brightness
    Particle.variable("Resistance", &resistance, DOUBLE);// Temp Resistance exported to internet; for set up only, comment out otherwise
    Particle.variable("Depth", &waterdepth, DOUBLE);    // Water Depth exported to internet
    Particle.variable("Celsius", &tempc, DOUBLE);       // Temperature exported to internet  
    Particle.variable("Fan", &FanOp, BOOLEAN);          // Fan Operation exported to internet  
    Particle.variable("Rain Shower", &PumpOp, BOOLEAN); // Pump Operation exported to internet  
    Particle.variable("Refill", &ValveOp, BOOLEAN);     // Valve Operation exported to internet 
    Particle.variable("LEDs", &LEDOp, BOOLEAN);         // LED Operation exported to internet 

    pinMode(LEDs, OUTPUT);
    pinMode(Fan, OUTPUT);
    pinMode(Pump, OUTPUT);
    pinMode(Valve, OUTPUT);
        Particle.function("Color", color);

void loop(void) {

// Start loop count for Water Pump On percentage time through 100% (0-99)
    if (iteration < 99) {
    // Measure the water depth
        float depthvalue = analogRead(DEPTH);       // convert depth reading to resistance
        depthvalue = ( depthvalue / 1023.0) - 1.0;
        resistance = SERIESRESISTOR / depthvalue;
            waterdepth = 0.0;
        else { 
            waterdepth = (CALIBRATION_VOLUME * scale);
    // Measure the temperature of the water
        sensors.requestTemperatures();          // Send the command to get temperatures from all sensors on the one wire bus
        tempc = sensors.getTempCByIndex(0);     // 0 refers to the first IC on the wire
        while (tempc == -127.0) {               // if the anomalous -127C occurs, then get another temp reading without registering the -127
            tempc = sensors.getTempCByIndex(0);
    // Display the temp and water level on the LCD Display
        Serial1.print("Temp ");   
        Serial1.print("Lvl ");   
        Serial1.print("%  "); 
        Serial1.print((((waterdepth*0.035) + 4.3)*3.78541),1);
        // Serial1.println(iteration);

    // Flag the Fan on if temp over 24C, Flag off when below 22C
        if (tempc > 24.0) {
            FanOp = true;
        if (tempc < 22.0) {
            FanOp = false;

    // Fan operation based off of flag FanOp
        if (FanOp) {
            digitalWrite(Fan, HIGH);
        else {
            digitalWrite(Fan, LOW);

    // Flag the Valve on if Waterlevel under 74% (7gal/26L), Flag off when above 96% (7.6gal/29L)
        if (waterdepth > 96.0) {
            ValveOp = false;
        if (waterdepth < 74.0) {
            ValveOp = true;

    // Valve control based off of flag ValveOp
        if (ValveOp) {
           digitalWrite(Valve, HIGH);
        else {
            digitalWrite(Valve, LOW);
    // Flag the Pump on if Iterations are = % AND when Waterlevel is above 5gal/19L (to not cavatate the pump), Flag off when not
        if (iteration < 50 && waterdepth >8.0) {
            PumpOp = true;
        else {
            PumpOp = false;
    // Pump control based off of flag PumpOp
        if (PumpOp) {
        else {

    // LED control based off of flag LEDOp
        if (LEDOp) {
        // Rainbow lights 
            int i, j;
            for (j=0; j < 256; j++) {     // 25 colors in the wheel
          // (thats the i / strip.numPixels() part)
          // the % 96 is to make the wheel cycle around
            strip.show();   // write all the pixels out
        else {

    // Increment the iteration; if the count goes above 99, then reset to zero      
    else {
        iteration = 0;

// Internet control of the LEDs
    int ledToggle(String command) {
        if (command=="on") {
            LEDOp = true;
        else if (command=="off") {
            LEDOp = false;
// Internet control of the Pump
    int pumpToggle(String command) {
        if (command=="on") {
            PumpOp = true;
        else if (command=="off") {
            PumpOp = false;
// Internet control of the Fan
    int fanToggle(String command) {
        if (command=="on") {
            FanOp = true;
        else if (command=="off") {
            FanOp = false;
// Internet control of the Valve
    int valveToggle(String command) {
        if (command=="on") {
            ValveOp = true;
        else if (command=="off") {
            ValveOp = false;
// Internet control of the LED Tower lights
    int color(String command) {
        int red = command.substring(1,4).toInt();
        int green = command.substring(5,8).toInt();
        int blue = command.substring(9,12).toInt();
        int i;
            strip.setPixelColor(i, red, green, blue);

// Rainbow Cycle for LEDs function
    void rainbowCycle(uint8_t wait) {
        int i, j;
      // (thats the i / strip.numPixels() part)
      // the % 96 is to make the wheel cycle around
        strip.show();   // write all the pixels out

    // Color sub-function for Rainbow cycle
        uint32_t Color(byte r, byte g, byte b) {
            uint32_t c;
            c = r;
            c <<= 8;
            c |= g;
            c <<= 8;
            c |= b;
            return c;

    // Wheel sub-function for Rainbow Cycle
        uint32_t Wheel(byte WheelPos) {
            if (WheelPos < 85) {
                return Color(WheelPos * 3, 255 - WheelPos * 3, 0); } 
            else if (WheelPos < 170) {
                WheelPos -= 85;
                return Color(255 - WheelPos * 3, 0, WheelPos * 3); } 
            else {
                WheelPos -= 170; 
                return Color(0, WheelPos * 3, 255 - WheelPos * 3);}

And finally, I leave you with a video of the features in action pre-plants:

I’ll post another post with video once plants start growing.

The next morning we awoke to a light on-off drizzle with barely any wind.  A peek out the door revealed some cloud, but the sun was rearing to break out here and there.  Perhaps it won’t be as rainy as the weather guy predicted after all!


I got up and started procuring some water (from the waterfall you see behind the tent), made some coffee, and started breakfast as the rest of the crew was beginning to stir.  Moreover, some newly acquired skills were encountered this morning (does a bear shit in the woods? Why, yes it does! [think family members]).  So while we take the hour or so to pack up camp, let’s recap the past 12 hours:

With renewed determination, we retook the ridgeline that we retreated from the eve before… except once on the top, we found that the winds were still 40 gust 60 mph, trying to blow you off the ridgeline that was about 10 feet from the path.  With a white-knuckled grip on the flags of Brenden and Marissa as the wind forced its way to unfurl them, I realized my 22-mile Trotternish Ridge hike was going to change.  There’s no way I was about to take the kids on a ridge crossing in these conditions.  And then Pam’s knees buckled and down she went (not over the ridge, mind you, but she fell because she was freaked out).  A quick photo to prove that we’d made it, and backtrack we did down the ridge to find a different way forward.

Atop the Trotternish Ridge

There was a trail that was mid-ridge and went southbound towards Portree, so we followed that.  Since we were beneath the ridgeline, the winds were kept at bay for the most part.  By no means did that mean it was an easy route.


We kept each kid in front of us in case of a slip or misstep; my hand was consistently inches away from the grab-handle on their backpacks – you wouldn’t believe how mentally exhausting this can be after a few hours.

I’m really proud of the kids and Pam.  I didn’t have to resort to the kid’dle prods (candy bars), and they genuinely enjoyed the trail and scenery.  I was most surprised by my youngest, Marissa, who at 5 years old established that she was the trailblazer of the family… she always managed to find herself at the front of the pack and took pride in outpacing the rest of us.  Lead on Marissa!


Every once in a while, the wind would catch portions of the trail due to a crotch in the mountainside, but even this was handled with grace.


Where we've been
After a few waterfall crossings (trust me, these were my peak worries with the kids), a few drop offs, and about 3 miles on the trek, we came to a tourist road.  Unfortunately, some of the coolest and most extreme areas kept the cap on the camera because I was more worried about carrying on the Snakeye genes.

I looked ahead.  Our mid-ridge path met up with the (only) ridgeline path (the one I detoured due to 60 mph winds) and continued on along the ridgeline with no other alternative:


This brought us to an impasse: reacquire the plan and take the ridgeline trail south with treacherous winds, or follow the tourist road out.

To continue the Snakeye gene pool, I elected to follow the tourist road out.  So we walked another 3 miles like a hitchhiker alongside the road (only we weren’t holding out our thumbs or showing leg).  Then we stumbled across a general store (think: a trailer stocked with cheap food).  This is where the Snickers came out to hold the beasts at bay (even for Pam).

As I gazed into big-eyed stares from everybody, I finally let go of my yearning to complete the long trek into Portree.  I mean, we have no trail (ok, the road is a trail, but you know what I mean),  we have no solitude… it has now devolved into hiking down a damn road and camping on the side of it?  This plan sucks.

With visible relief broadcasted by everyone, I finally called uncle.  We hailed a taxi and went back to Portree for an Inn.  My intent was to go back out into the bush the following night, finding a different path and roundtrip to hike and camp.  But then I consulted the weather forecast.  You remember the two days of doom (that we’ve already plowed through) followed by the sun?  Yeah well, the sun apparently lost out in the interim; the forecast was for wind, rain, low cloud, and more doom for the next two days.  How awesome.  I actually want my family to enjoy camping?  So at this point, I called all my uncles.

After 24 hours, our multi-day, wild camp, through-hike experience was over.  But this is triage.  On one side, we fell way short of what I wanted to do.  But on the flip side, I can’t tell you how proud I am of everybody for doing what we did with almost zero complaints… I mean, on the second day we walked over 6 miles with packs on everyone.  We experienced the outdoors.

River Crossing near the Fairy Pools

In the end, I ask what is the true goal?  It was to brave our own way au naturel.  In 24 hours, we did that.  Had the wind and weather not put the kids in danger, I think we could’ve sustained the trail for the four days that were planned.  For me, it was a confidence builder… For the fam? Well, let’s just say they’re ready for the next outdoors experience with caveats.



Operation Overland (the concept)





C-Day minus 1




The Trotternish Trailhead




On the Trotternish Ridge






A windy night for our Big Agnes tent


Before the true wiring and programming begins, I wanted to have a cockpit design fleshed out to put some purpose behind the programming. I don’t want something exactly like the example I saw online (see last post). I want to make it better; more to real life without losing the fun factor. With all the time I’m pouring into this thing, I would heartbroken if the kids only played with it until 8 years of age. By making it more real-to-life, maybe I can increase the play age until about 13 (when, at that point, it’s becomes relatively uncool on the teen agenda list). And speaking of time, you wouldn’t believe how much brain power and time go into coming up with a design!

Of course, I borrowed alot of Jeff’s ideas, but they encompass only about 50% of the cockpit. The other 50% are stuff that I’ve come up with.

I want every switch to have purpose and logic. You flip this and leave it flipped for too long, then you trigger this. Or you turn this off, the consequence is this. You turn too many things on (or attach them to, say, Bus A), and it overloads the bus. To this end, I started with the Master Caution Panel: the panel that lights up telling you what is going wrong.

Caution #1: it was damn hard to find detailed pictures of the Apollo cockpits on the nets. I’m talking very large pictures that I can read what the switches do… then I found this open-source (read: free) space simulator game that enthusiasts contribute to. One of the contributions is an Apollo simulator. By installing and booting up the simulator, I was able to stand on top of someone else’s research and poke around the electronic cockpit they built.

I tried to use all the main Caution Lights in the real Apollo. Once I had them laid out, I then started from one caution (like the “FC1” caution light) and crafted scenarios in my head that would trigger it. With these ideas, I then designed the toggle switches and lights in the rest of the cockpit: switches that would exacerbate the problem, and switches (or patterns of switches) that would alleviate the emergency. Of help, I downloaded an old NASA pdf of the Apollo Caution and Warning System that explained, in detail, what triggered the cautions which helped influence my “play” design.

One caution light I consciously did not use was the “Crew Alert” light, which isn’t related to any of the systems on the spaceship.  It was a “call button” used by Mission Control to grab the astronauts’ attention.  With this intent, you’ll see I’ve replaced it with a “Dinner Time” light to please the wife.  To operate it, I bought an RF receiver and a key fob transmitter.  Press the button on the fob and it triggers the Dinner light and master caution.  There are three other unused buttons on the fob that I’ll probably program other emergencies into to keep the kids’ play interesting.

Since extra realism adds incomprehensibility for younger kids (I mean, do I really expect a kid to want to learn a working knowledge of all the Apollo systems in order to correctly troubleshoot a problem in this play thing?), I’ve also added an LCD display as the “CMC” (Command Module Computer) to display a checklist of actions that will correctly solve the emergencies, as well as boot-up and down the entire system.  As long as you can follow instructions (ie, the checklist), uneventful operation of the spaceship will ensue.  Obviously, freelance play is the way to go (and encouraged) for growth of the imagination, but should the chaos spiral out of control it provides a self-actioning option to get the train back on the track.  This LCD display also ties into the CMC caution light as you can imagine.  So away with the theory.

To put my ideas to paper, I used Photoshop (since I’m well versed in it) to design the panels.  I used 5″x7″ Masonite for each panel, matching the 5″x7″ canvases I was using in Photoshop .  All of my switches and lights were ordered from Newark/element 14, Adafruit, Parts Express and Sparkfun.  I used the measurements found online and produced the true-to-size circles and squares in Photoshop so I could accurately place the labels with various sized fonts.  To see what it would look like as a whole, I created a separate “cockpit layout” where each panel was added as it was finished to maintain the big picture:

Cockpit Layout

A little Photoshop rearranging to make it visually pleasing and the panels were off to the printer for 1:1 paper prints to be taped to the Masonite panels.


Building (and flying) my quadcopter has been taking up the past few weekends… until I accidentally American-Gladiatored the thing through a gauntlet of tree branches.  Oops.  They say that there are those that will crash one, and those that have crashed one; I now stand firmly in the latter group.  So, as I await the spare parts to arrive in the mail for repairs, my attention has been diverted onto the next project that’s captivated me for about six months now: a kid’s play spaceship.

I forgot what originally directed me to this back then, but I was mesmerized after stumbling across this video:

After watching this, I knew I had to build this for my own kids at some point!  This type of creativity is right up my alley, and my thorough knowledge of military fast jets can potentially make this thing better than the video above.  I credit this video (and the guy, Jeff, who made the project and video) as my single launching point into the world of micro-computing: doing cool, what you would think are beyond you, projects with the credit-card-sized Raspberry Pi and Arduino computers.

With this inspiration in the back of my mind, I’ve been slowly stockpiling the switches, LEDs, and learning books (on the coding) to eke out forward movement towards this project.  Over the months, I’ve experimented with a few blinking LEDs controlled by a few buttons (or other input sensors, like a motion detector) using either the Arduino or the Raspberry Pi to start understanding the basics of the programming code that go along with them.  Then a few times a month I get curious and pour over Jeff’s code, finding out I understand just a little more of what’s going on within it each time.

Like Jeff, I’m going to use a Raspberry Pi to deal with logics and sequences of events and switches (like a start-up sequence, a launch sequence, etc), and an Arduino to read the status of all the switches and turn on/off all the LEDs.  Essentially, the Raspberry Pi is the brain and the Arduino is the brawn.  With a yellow-belt understanding of the code (meaning: I know enough to look good but would really get my ass kicked in a street fight), I’ve broken it down into a few milestones:

  1. Coding the Master Caution system (light and button) to work exactly as I want it.  This ‘system’ is ultimately the overseer of every other system throughout the entire cockpit.  If pervades every light and switch, so it’s bound to be the most complicated to program.  This step will also tackle getting the Arduino and Raspberry Pi to speak to each other which, up until now, I know very little of how to do.  Once I get this up and running, the rest of the switches will be gravy and I can consider the first of three milestones complete.
  2. Figuring out how to I2C together all the switches.  You see, the Arduino (which is the keeper of the switches and lights) only has enough ports to handle any combination of 19 individual switches and lights.  To get this thing to work, I need to be able to control in excess of 200 switches and individual lights.  I2C using a few MCP23017 chips is apparently how to connect all this stuff in serial so only one Arduino (and its 19 ports) can handle this.  So figuring this out, and the address system that goes along with to listen to individual switches, will be the next 1/3 step forward.
  3. Figuring out how to I2C together all the LEDs/lights.  This is the same know-how from milestone 2, but whereas the switches were just figuring out the wiring and addressing issues, the additional displays coordination moves into the territory of more intense programming code.  For example, one LED number (say like the number 8) consists of something like seven different LEDs that you have to coordinate through code so your 8 doesn’t look like an upside-down U.  Like the MCP23017 chip used above, the HT16K33 LED driver chip is supposed to make all this more manageable… but you just have to figure out how it’s wired and the coding needed to make it work.  Do this, and the cockpit will be completed.

For me, figuring out the electronics that go into the cockpit is about 99% of the challenge for this entire project.  Given my woodworking experience, building and designing the wooden spaceship frame is the easiest part of the whole thing.

So this weekend was spent doing hours of Google research into Python (the language of Raspberry Pi) and Arduino coding.

I found a buzzer sound online and, using a sound editor, molded it into what I think is the perfect annoying Master Caution alarm sound.  I know the (not-so) modern day Spaceshuttle uses an almost calming airline-style ring as in Jeff’s design (the first video of the post), but I wanted a 1970’s Apollo-13-style gritty, archaic buzz for my Master Caution.  The end sound was only a ½ second long and is looped endlessly by the python code until the button is pressed.  Unfortunately, the sound lags the button by almost a second (out of sync), so I had to further modify my Arduino code by delaying the lightshow (both its start and finish) by that same amount of time… that took a few hours of trial and error to finally arrive at a solution.  Lastly, rather than a solid-lit Master Caution button, I wanted emergencies to be highlighted by something that gets your attention through both annoying light flashes and obnoxious noises (á la Eurofighter-style).  Like the sound-lag code, this flashing added hours of trial-and-error frustration as well (hint: never use ‘delay()’ in the Arduino code).  In the end, I think it turned out exactly as I wanted:

In my video, I used a little button with a 5-second delay to trigger the “emergency.”  However, once I transplant this code into the entire cockpit code, it will be switches and/or sequences of switches that will trigger the emergency and, ultimately, this annoying button.

With one of the three hurdles behind me, this is indeed one giant leap to understanding the programming and making this come together for Snakeye-kind.  To save any other beginners hours of their time, I’ve posted the Master Caution code that drives this thing on Github.

Up next: frustrating hours of trial and error to demystify the MCP23017 and reading the positions of multiple buttons and switches.

through your kid can be a slippery slope.  It all starts so innocently.  Let’s rewind a month:

It all began when I was Christmas shopping for the kids.  As the Silverback in the family, I find it so much easier to pick things out for the boy because I can personally relate to it (albeit a few decades back).  With our daughter, I find it a little tougher because when I was in my mid-‘oughts’ (like 6 years old) I really didn’t care about dress up, doll houses, or playing kitchen.  I built impregnable forts from couch cushions, established a Starways Confederacy with Space Legos, and invented the inter-house highway system with Matchbox Cars and Micro Machines (remember them?!).  Oh yeah, and every Christmas, I always always asked for a remote control airplane because that was my ‘Red Ryder’ dream.  The closest I ever got was one of those gas-powered airplanes that go in circles around a control line that you hold – with a snap of the wrist you can make it go up and down as it circled around you, but it didn’t give quite that spectacular umph that a free-to-roam R/C airplane could bring.  I must admit, years later in my teens I bought an R/C airplane kit and built it from sheets of balsa and plywood.  My parents helped the cause by awarding me a remote and engine for my effort to build it… it was finished, but alas, it never flew.  I went off to college and my parents moved away, and the plane got guillotined in the move. So I never really did get that R/C chance…

So as I’m perusing the gift ideas, I stumble across this bad boy:

Udi R/C 818

At the price of $60, it’s pretty much kid-proof (read: I won’t be heartbroken if the kid destroys it in the span of a month).  So I pulled the trigger and got it for the boy… something like this is what I had always wanted when I was his age (up through at least my mid-teens).  And in getting it, I could finally close the door on that kid-hood dream of mine by bestowing upon him something that I never had (plus, it will hopefully build his hand-eye coordination and reflexes).

Brenden learning to fly a UdiRC QuadcopterHe opened it on Christmas and thought it was cool, but a little beyond his ability. I showed him how it worked, and since then, I’ve had him fly it a few times a week in the kitchen to build his skills. We started simple by me controlling the throttle and putting it in a 2-inch hover, and him just trying to keep it there without letting it drift off. As the kid gained confidence, I let him control the throttle too. Then I’d allow him to take it a foot off the ground with a game of “try to land it on that floor mat over there.” The problem is that, somewhere in this process, I also got tangled up in the spiderweb of this little contraption (probably even more so than he did).

I wanted to see for myself what this oversized housefly could do, so I brought it outside and turned on the video (you damn well know what’s going to happen next: “hey, watch this!”).  Like Brenden, I was learning too.  It really is tough to fly this copter without ramming into things, so diving in head-first by adding outdoor wind seemed like the perfect thing to do.

A quick aside and testament to the Udi R/C 818 quadcopter: this thing is indestructible!  It’s perfect for learning or for kids.  Yes, it feels flimsy and cheap, but there lies its saving grace: that flimsy plastic bends (not breaks) when it crashes and bounces off of stuff.  Its blades take a licking and keep on ticking (due to being made of softer plastic).

And as you can guess, once I got it outside about halfway up the house, the wind wrestled control from me and away she went.  I fought to bring her back… then I lost sight as she was carried beyond the house.  I cut the motors and proceeded to spend about 15 minutes finding the thing in a tree in the next field over.  I had to pull out the BB gun to shoot and sever the twig-like branch that had skewered the propeller nacelle 25 feet up.

After that, I was hooked.  Screw this ‘vicariously through someone else’ thing; I need an adult version of one of these!!!

My upcoming birthday offered me the perfect opportunity to get a kit (along with forgiveness from Pam). I ended up getting the Discovery Pro quadcopter.  It took me a week to build this, as the learning curve can be pretty steep. Don’t get me wrong, being a pilot I know how propellers and flight work. In building computers I know how to hook up components (yes, this thing has a mini-computer with a GPS and IMU), but ensuring the circuits are properly hooked up can be a gut-check (ie, hook something that takes 5 volts to a 12-volt power supply and it’s fried – to turn the power on for the first time is often referred to as ‘the smoke test’).  A lot of Googling and internet research got the thing 100% ready to fly.  My hardest hurdle was marrying up the remote to the copter.

TBS Discovery Pro

Regardless, I did the maiden voyage around the farm yesterday.  It came out much better than the one I did with Brenden’s feather-weight flyer:

This thing is awesome. I’m now an addict.

Our greyhound who defied the odds.  She made it around 14 laps of life and never gave up… even when we made the call, she was still struggling to continue the race.

MorganWe adopted Morgan, then on her fourth lap of life, in 2004 as a remedy for Merlin.  Unlike Merlin, Morgan was fearless and full of energy.  Originally known as “Ashley Sue” from her track days in Arizona, she won 7 of 50 races, and took second place in an additional 10 of those races.  She was fast and quirky.  Chase flying kites?  Check.  Bump up against our bed to wake us up in the morning?  Check.  Get in howling competitions with us (at below)?  Check.  Eat the cat shit out of the litter box?  Unfortunately, check (but at least it kept the litter changings to a minimum…).

They say that cats have 9 lives… Morgan must’ve been part cat (maybe it’s the proverbial “you are what you eat”?).  Let’s see: she’s charged head-first into a barbed-wire fence upon hearing a gunshot (with significant blood loss), her face has ballooned after snapping at a bee, and my parents almost had to scrape her off the Texas desert after 3 days of aimless wandering once she realized their drought-ridden ranch wasn’t entirely fenced in.

The motherly instinct

It was around lap 8 that Morgan really shined through though: enter our first child.  Despite having a blood-lust for rabbits and other small animals, she never once snapped at our kids or cat.  The kids could crawl all over her and after she’d had enough, she would just get up and move.  She had a very motherly instinct to all that was “family.”

Morgan in Brugge, BelgiumI’ll admit that after laps 10 and 11, she slowed down a little… but she continued strong in the backstretch.  She’s travelled from Arizona to New Mexico, to Savannah, to Prosecco Country (Italy), through der Fahzaland (Germany), Belgium, and finally to Her Majesty’s United Kingdom.  In fact, how often do you see a 13-year-old greyhound get the best of a rabbit?  Morgan did.  Multiple times… with cataracts and a loss of hearing.

I know she’ll be missed by all who knew her.  Especially by those that participated in her howling competitions.  A 14-lap race can take it out of you… I’m already sorely missing my nightly boisterous greeting of paws on my chest followed by a three-circle spin.

So, I’ve been away with work for two months.  Pam called.  Morgan had a 3-minute seizure and has had a poor time of controlling her bowels for about a week.  Three seizures later (after watching on Skype) and I couldn’t take it: it’s time.  The vets came… she was panting and unable to stand up (despite her best effort to do so)… but still pursuing her 14th lap…

… for a little while.  And I guess it wasn’t so much “the world” per se, as more of the contiguous United States (that’s everything excluding Hawaii and Alaska).

Mt Whitney as seen from the town of Lone Pine

I had 3 dehydrated meals left over from the Yosemite excursion, so why not attempt Mt. Whitney?  Besides, over the past few years I’ve been inspired by friends of mine: Rob and Gaza.

Procrastination pays off again…

… but only during off-peak season.  Unfortunately, to get the privilege to reward yourself with hypoxia requires at least 6 months of planning. The National Park Service only allows 100 day hikers (per day) and 60 overnight hikers (um, per day).  Unlike Yosemite, there are no walk-ins.  As you could imagine, weekends get the most visitors.  However, have a look over here and you’ll notice that not all who reserve actually show up.  Any no-shows on the day-of, and you can yoink their reservations… but unlike Yosemite, it get’s even better: they’re free!  The dudes that decided to not show up already paid for them, so you don’t have too!

The Whitney Zone: here's where you officially need "wilderness reservations"I saw the gamble and took it.  We arrived at the Permit Station just prior to 11am (when they figure out how many no-shows there are).  There were 4 for this Saturday.  Luckily, I think we were the only group looking to tackle the mountain through Saturday night.  So for the 3 of us, we scored free round-trip hypoxia tickets to Mt. Whitney.  A hearty “thanks” to whoever bought these for us by deciding not to show!  (Granted, it’s only a measly $15 per person).

Where We’re Going, We Don’t Need Trees…

The start of the "No Tree Zone"... it's "Moon Surface" from here on outThe hike starts from 8,500ft (above sea level).  The air is already thinning at this point; you may not notice it standing around, but start exerting some energy (like hiking a pack up a slope) and you’ll quickly find yourself short of breath with your heart racing.  The only way to beat this and maintain consistency is a slower and very deliberate pace.  I let my heart-thump and breathing set the pace, rather than push myself to some speed-walking record of taking 10 minute breaks for every hundred feet of climb.  The philosophy worked.  As we broke through the 11,000ft barrier (where the trees call “uncle” and cease to exist), not one soul had passed us, whereas we had passed multiple people and groups.

We were making pretty good time.  Our overnight destination was the Moon landscape of Trail Camp.  We’d looked at the weather prior to kickoff: clear, slightly below freezing, and 5mph winds at most.  For that reason, we left our tents behind.  It was gonna be under the stars for tonight!  We arrived at our overnight stop just before sunset:

Setting up Base Camp at Sunset

The site was just above 12,000ft.  I guess this way we figure out who gets altitude sickness and who doesn’t.  Luckily, we were all fine (minus Figo’s hands turning into a yellow rubbery mess for about 30 minutes).  As we laid everything out, we were surprised on just how much this place was an actual base camp… just look at all the tents!

Sleeping under the stars: setting up our base camp

It was an early rise for us to tackle Whitney, so we were in bed by about 7pm.  I wish I brought my camera for this adventure (I was using Figo’s Rebel and my iPhone for this post).  Throughout the night as I stared at the Milky Way, there would be stars snaking down from the top of the mountain.  It was really cool to see… what was really happening was that we were seeing the headlamps from hikers (that had probably taken sunset photos from Whitney) snaking their way down the mountain in the dark.  It was cold, too… maybe around 25°F.  I was decently comfy in my sleeping bag, but the thin air just seemed to bite at anything exposed (like my nose).

The Summit

Benjo then announced “it’s 4:30am, time to get up” (in my best Kiwi accent) and we started fortifying ourselves from the cold as we attempted to pack up camp and get a hot breakfast.  By 5:15am, we were on the trail being guided by our own headlamps snaking up the mountain.  Nighttime mountaineering can be great because ignorance is bliss: if you can’t see the sheer drop within 2 feet of you, then it was never there!  But after about 80-some switchbacks, the sun finally started to yawn above the horizon:

People from our Base Camp rising to the sun to scale Whitney... we already had a 1hr head start

Figo standing on an almost sheer dropoffThis was about the time the “way” became interesting.  Sheer drops, windows to 4,000ft below you and gorgeous views set the precedent for the last 2 miles to the summit of Whitney.  I definitely had my vertigo kick in (ie, the sense that the wind will blow you off of a cliff) with my forced response to suppress it.

A minor headache (probably from the altitude and exertion) later, and we were up the last 100ft of Mt. Whitney.  Now, I know Mt Whitney is pennies compared to “real” mountains, but you gotta start somewhere.  What blows me away is that Everest is twice the altitude of Whitney.  Twice!  But for the time being, I’ll relish in my small victory: reaching the highest place I’ve ever set foot on.

Standing at 14,505ft (or whatever they say Whitney is)

Ah, the finish line at last:

Mt Whitney from the top (L to R): Benjo, Figo, Snakeye

Figo (middle) says he’s achieved the highest Brit in America (for the 30 or so minutes we were there), along with his colonial slaves: New Zealand (Benjo) and USA (me).  Whitney may have claimed our lungs, but she’ll never take our… ughh.  OK.  So, here I am to prove this isn’t made up:

Mt Whitney conquered

It’s just too bad I couldn’t get to Death Valley within the remaining 6 hours to score the highest and lowest points in the continental United States within the same day.  But stats aside?  I feel extremely gratified with this weekend.  Thanks all for the inspiration.



Cloud's Rest from afar

That’s where I wanted to go!

The Logistics of getting Overnight Reservations






The Onslaught











Cloud’s Rest


Cloud's Rest Trailhead



A view of Half Dome from Cloud's Rest


The Final Night and RTB


Tent from the ledgeTent from the Lake


Campfire in Yosemite


Fire TV: the only way to pass time in Yosemite


You can’t live in England without a trip to Stonehenge… at least as a visitor; half the indigenous that I work with have never seen Stonehenge!  It’s a place kinda like Pisa, Italy: you go to see the big attraction (the leaning tower) and that’s about it.  So to Stonehenge we went.

The site has been around for about 10,000 years.  10,000 years!  The site mind you, not the stones… the stones are only a paltry 5,000 years old.  I honestly think this is the oldest manmade thing I’ve ever laid my eyes on.  5,000 years ago as the stones were pulled along from a quarry 25 miles away, the human population was 15 million (to put this in perspective, this is the double the amount of people that live in New York City today… spread throughout the world, not NYC).  So in this area of ‘Stonehenge’, the population probably numbered a few thousand at best spread out amongst a bunch of little villages.  That’s the number of people that live in the current town of Olney, Texas.  Unless you live there, you’ve never heard of it… and there’s a reason why: it’s only 3,000 people strong!  This is a town where everyone knows everybody.  It just blows me away that the New York Cities of 2500 BC were only a few thousand strong… no wonder why families and genealogy was such a big deal back then!  Here’s a representation of their 2500 BC NYC flats:

The cave kids living 5000BC-style

So this small village of people got together and decided to build a cathedral of stones on the Salisbury plains.  They pulled the large stones from Marlborough, about 25 miles away, and the smaller stones from Wales, about 100+ miles away. Then they set up some sort of system to upright them and lift the top stones in place.  What’s cool, from a woodworker’s perspective, is that these cavemen used the mortise and tenon to attach the ‘roof’ to the ‘door frames’.  It got the name Stonehenge because in Medieval-speak, I guess “hang” (like by a rope) was spoken as “henge,” because of how the structure looked like a hanging gallows (or scaffold).  By the way, the monument really is larger than life.

The Snakeye's at Stonehenge

At this point in World time, Egypt had just decided to start building the pyramids.  The Parthenon of Athens was still another 2000 years out.

Throughout the ages, the ‘Henge has been well known.  During Medieval times, the peasants and nobility alike truly believed in some guy’s story of Merlin (that wizard guy that looked after King Arthur) putting Stonehenge there.  Around the 1700’s I think people started to wise up a little and call “bullshit,” but it wasn’t until pretty recently (like mid-1900’s) that people realized it was built by cavemen that actually lived on the island (rather than the Romans or some other continent-dwelling group).  Stonehenge in 1877What amazes me is apparently the structure was in pretty bad ruin by the time the 1900’s rolled around.  Stones had fallen over, others were teetering precariously and about to fall over.  So what you see today is not how the site was, say, 100 years ago.  Since then, archaeologists and philanthropists have been restoring the site back to how they believe it looked originally: righting the fallen stones, straightening the crooked ones, and concreting the ground underneath them to permanently set them in place!

Even with modern research and theories, no one really knows what the hell Stonehenge was used for, though the popular theory favors religious/astrologious (yeah, I know I made that one up) celebration.  And thanks to Kelly and Jim, as I walked around taking in the antiquity of the site, I couldn’t get this damn song out of my head:

Bearometer 6 yearsOf course, one of the reasons we went to Stonehenge was for our yearly Bearometer pilgrimage. We went “all in” with the idea that if we got there early enough, we could potentially avoid the crowds… it paid off.  We took some pretty good pictures and got to walk around in relative peace.  Brenden even got some ponder-time to figure out the meaning of Stonehenge:

When you’ve seen enough, there’s always Salisbury 8 miles down the road.  Pam and I were interested in checking out this town because of a mini-series we really enjoyed watching on Starz: Pillars of the Earth.  It’s a fictional, but semi-historically accurate (at least much more so than Braveheart) story about a stonemason that builds a cathedral in the made-up town of Kingsbridge during the 1100’s.  Of course, the mini-series is based off a book called Pillars of the Earth, which is a good read if you like the medieval time period.  Anyway, the cathedral the guy builds is based off the Salisbury cathedral (below).

The view of Salisbury, England from the fortress ruins of Old Sarum

I took that picture from a hill that’s about 2 miles away and overlooks the entire town.

Marissa shooting an arrow from Old SarumAn aside: this hill that I stood on for the picture, Old Sarum, was an Iron Age stronghold that the Roman’s took over and later, when William the Conqueror conquered, became a major strategic location for him and his armies. He built a stone castle with a moat as well as a cathedral.  The only problem?  Water was almost inaccessible from the hilltop.  So 200 years later, the dukes and lords that be decided to move the population somewhere water was more prevalent (like by a river or something).  The myth has it that they ordered their best longbowman to loose an arrow toward the river and wherever it landed would be the new location for the new cathedral and town.  So there you go… though Marissa and I, after many attempts to validate the myth, found it highly unlikely a longbow can shoot an arrow 2 miles away.

Other than it’s reference in Pillars of the Earth, the “new” cathedral (by the river this time) has a lot of other feats of accomplishment:

Salisbury Cathedral

  • It has the highest spire in all of England (which is sort of what Pillars was all about); this is pretty significant seeing that it was completed in 1258 and only took 38 years to build!
  • It has the oldest working clock built in 1358.  It doesn’t have a face and uses bells to tell the time, but to watch the naked metal gearing in action is cool… for at least a minute or two until you lose interest and move on.
  • It has on display the best-preserved copy of the original Magna Carta, only four of which are left in existence.  To us ignorant Americans, the Magna Carta was a “Constitution” that the lords and barons forced King John (you know, the evil guy in Robin Hood that teams up with that nasty Sheriff of Nottingham) to sign.  It’s “Amendments” include the right for due process for nobility (King John just can’t throw these rich guys in jail without a hearing), the guarantee of freedom for the English church, and my favorite: established the pint and quart as a standard of measure for one unit of beer or wine, respectively, to prevent merchants from ripping off people with their interpretations of what a pint was (see clause 35).  Just ingenious!

So to anyone out there looking to explore Stonehenge: there’s more to do and see in the area (that can even fill up an entire weekend) rather than wasting a round-trip taxi ride for an hour or two at the monument and heading back to London.