Arduino battery capacity tester

My first Arduino project was to build a battery capacity tester. I’ve got a box of rechargeable AA batteries, and it seams they’ve been less and less effective. Since most applications require 4 batteries, invariably one problem battery makes the rest of them look bad.

The Atmel ATMega328 microcontroller has 6 analog inputs with 10-bit A-to-D converters and a external AREF that allows you to define what voltage 0×3FF represents. In other words, it’ll give you ~1.4mV precision measuring 0-1.5V when given a 1.5V analog reference. Plenty accurate for a battery capacity measurement.

The principle is fairly simple. Apply a known load to a battery, record the voltage periodically while the battery discharges, stop recording at some point, and integrate to arrive at the area under the curve in order to derive the amp-hours delivered from the battery.

Enough theory, let’s see how it works. The UI starts with a helpful message:

Insert Battery

NIKON D70, ISO 500, ƒ/2.0, 1/20sec, 50mm focal L.

While the battery discharges, the UI prints the voltage, real-time capacity measured thus far, and the duration that the measurement has been taking place.

Battery In

NIKON D70, ISO 500, ƒ/2.0, 1/25sec, 50mm focal L.

When the cut-off voltage of 0.9V has been reached, the “usable” capacity is saved at the top. The real-time data continues so the capacity below 0.9V is measured. For the NiMH batteries I’ve tested, the capacity below 0.9V is minimal (~100mAH).

After the cut-off is reached, an LED starts blinking to attract attention that the test is effectively over.

Done

NIKON D70, ISO 500, ƒ/2.0, 1/20sec, 50mm focal L.

Here’s the code (click to download as text rather than the questionable HTML translated version pasted below):

/*  Battery Characterization Tool

     11/7/2009 John Terry

     Compiled on Aurdino 0017 in 4930 bytes.

 This uses the analog in to measure the voltage of a battery under a known load and
 integrates the area under the curve to arrive at the useful capacity of the
 batterin in mAH.
*/

#include <LiquidCrystal.h>

// Set some constants -- these will need to be adjusted for your setup
//
// Connect a ~10K Ω (Rr) resistor from 3.3V supply pin to the AREF pin,
//   creating a voltage divder with the internal 32KΩ resistor on AREF.
//      aRefVoltage = supply_voltage * 32K / Rr
//   Alternatively, measure the actual AREF voltage applied with a good DMM:
//  my measured aRefVoltage = 2.62;
const float     aRefVoltage = 2.62;

// Connect a load resistor (Rl) to the battery. ~2.2 Ω restistor gives ~500mA drain which
//   is about right for a battery rated at 2500mAH.  Note, this should be a >=1W resistor!
//   Dont trust your DMM to meausre such a low resistance accurately. I measured the current
//   and back-calculated the resistance. Best just to trust rated resistance.
//   my  resistance = 2.18;
//
// The integrator works by accumulating the sampled voltage values from the start until
//   hitting a pre-determined low-voltage threshold. Since they are sampled at a
//   known period, the number of samples taken cancels out and the accumulation of all samples
//   simply needs to be scalled by a factor
//
//   Let's make some definitions to show the derivation of how this is so:
//   I = current
//   V = load voltage
//   Rl = load resistance
//   samples = number of voltage samples made
//   sensor = value read out of analog A->D
//   rate = number of samples taken per second
//
//                                     ave(V)
//   capacity = ∫I ~= ave(I) * time = -------- * time
//                                       Rl
//
//   Where:
//                ∑(V)     ∑(sensor) * aRefVoltage/1024
//     ave(V) = ------- = ---------------------------------
//              samples              samples
//
//      time  =  samples/rate
//
//   Thus:
//               ∑(sensor) * aRefVoltage     samples
//   capacity = ------------------------- * ---------
//                samples * 1024 * Rl         rate
//
//               ∑(sensor) * aRefVoltage
//   capacity = ------------------------- = ∑(sensor) * quanta
//                  1024 * Rl * rate
//
//           quanta = aRefVoltage/(1024 * Rl * rate ) * 1000/3600   // scaled for mA Hours
const double quanta = 0.00030179; // 2.62/1024/2.355/3.6

// Define low voltage threshold where any remaining capacity is "unusable"
//        lowThreshold = 0.9V * 1024/aRefVoltage
const int lowThreshold = 354;

int sensorPin          = 0;    // select the analog input pin for the voltage measurement
int ledPin             = 13;   // select the pin for the LED
int fetGatePin         = 8;    // select the pin for the LED
int sensorValue        = 0;    // unscaled sensor output
float voltage          = 0;    // measured voltage
double mAH             = 0;    // Calculated current
long accumulator       = 0;    // sum of all unscalled sensor values sampled
int epoch              = 0;    // seconds since battery was inserted
int lowVolts           = 0;    // debounce the low voltage threshold
boolean done           = false;// Voltage has dropped below threshold
boolean batteryIn      = false;// Battery present

// initialize the the LCD library with the numbers of the interface pins
//  LCD Pins  --  RS, EN, D4, D5, D6, D7
LiquidCrystal lcd(12, 11,  5,  4,  3,  2);

void setup() {
  // declare the ledPin and fetGatePin as an OUTPUT:
  pinMode(ledPin,     OUTPUT);
  pinMode(fetGatePin, OUTPUT);  

  // set analog reference to external
  analogReference(EXTERNAL);

  // set up the LCD's number of rows and columns:
  lcd.begin(16, 2);

  // Print a helpful start-up message to the LCD.
  lcd.print("Insert battery");

  // DEBUG initialize serial communications at 9600 bps:
  // Serial.begin(9600);
}

void loop() {

  sensorValue = analogRead(sensorPin);    

  if (!batteryIn && (sensorValue > 100)) {
    // Initialize upon the insertion of a "fresh" battery
    batteryIn   = true;
    done        = false;
    epoch       = 0;
    accumulator = 0;
    lowVolts    = 0;
    digitalWrite(ledPin, LOW);
    digitalWrite(fetGatePin, HIGH);
    // clear out when LCD when starting over
    lcd.setCursor(0, 0);
    lcd.print("vlts  mAH  Time ");
    lcd.setCursor(0, 1);
    lcd.print("                ");
  }
  else if (batteryIn && done && (sensorValue <= 20)) {
    // consider the battery removed only after finishing the last measurement to
    // debounce a glitchy concact
    batteryIn=false;
  }
  else if (batteryIn) {
    // Running state during discharge state

    voltage = sensorValue*aRefVoltage/1024.0;

    // print voltage
    lcd.setCursor(0, 1);
    lcd.print(voltage);

    if (!done) {
      accumulator += sensorValue;
      // print mAH
      mAH = accumulator*quanta;
      if      (mAH <   10) { lcd.setCursor(8, 1); }  // adjust to make it perdy
      else if (mAH <  100) { lcd.setCursor(7, 1); }
      else if (mAH < 1000) { lcd.setCursor(6, 1); }
      else                 { lcd.setCursor(5, 1); }
      lcd.print(int(mAH));

    }

    // print current time
    lcd.setCursor(11, 1);
    lcd.print(epoch/60.0);
    lcd.setCursor(15, 1);
    lcd.print("m");

    if (!done) {

      // lowVolts requires 10 seconds in the last 20 before being done
      if (sensorValue < lowThreshold) { lowVolts++;}
      else if (lowVolts > 0)          { lowVolts--;}  

      // If it's below threshold for 10 of 20 samples, bail out
      if (lowVolts > 10) {
        done=true;
        digitalWrite(fetGatePin, LOW);
        lcd.setCursor(0, 0);
        lcd.print("    mAH in     ");
        lcd.setCursor(1, 0);
        lcd.print(int(mAH));

        // put the time, in minutes in the upper right
        lcd.setCursor(11, 0);
        lcd.print(epoch/60.0);
        lcd.setCursor(15, 0);
        lcd.print("m");

        // Clear out the bottom line
        lcd.setCursor(4, 1);
        lcd.print("v      ");
      }
    }

    epoch++;
  } // batteryIn -- main routine

  if (done) {
    // When done, flash the LED to get attention
    digitalWrite(ledPin, HIGH);
    delay(500);
    digitalWrite(ledPin, LOW);
    delay(499);
  } else {
    // Since the processing takes some time prior to the delay, we'll assume 1mS
    // This could stand to be improved with an interrupt routine that is kicked off
    // before all the processing starts for each loop
    delay(999);
  }

/* DEBUG

  Serial.print("\nsensor = " );
  Serial.print(sensorValue);
  Serial.print("\t lowvolrs = " );
  Serial.print(lowVolts);
*/

}

Compiles into 4930 bytes.

Hello Arduino

Success has been had … finally!

A couple of days ago, a tiny little package arrived from Sparkfun Electronics with my first Arduino kit. Valerie’s response upon finding said package in the mail box, “well, so much for seeing my husband for the rest of the week”. In all fairness, I waited till the second day (night, really) to get sucked in. I’ll be back tomorrow…

Last night, I just plugged it into the USB port and loaded a pre-canned example that made the LED blink. Did some experimenting with modulating in and out with a few for loops just to refresh my C code.

Tonight was all about getting the LCD wired in. Soldered a header onto it to mash into the bread board to keep the wiring flexible.

Opened up the LiquidCrystal tutorial and wired it all up and measured the resistance between power and ground to make sure I didn’t have any shorts. Finally plugged it in to the USB spigot and dumped the “hello, world” example program, and … nothing.

Hmmph. Take some measurements — voltages are good. Contrast voltage bias is about half-way, that ought to be close. Let’s try a little higher: nope. Lower? Nope.

OK, rip it all out and move to a different section of the breadboard. Still nothing. The LCD doesn’t so much as blink. Must be dead.

In fit of desperation, I grab pair of random resistors and jumper them across my voltage divider that’s biasing the contrast, first moving contrast closer to VDD, then moving it much closer to VSS and — presto — it was running all along.

It’s alive!

NIKON D70, ISO 500, ƒ/1.8, 1/30sec, 50mm focal L.

For the record, this particular 5-volt LCD contrast likes to biased at about 1.3 volts. 2.5 volts get’s you nothing.

My first real “project” is to build a rechargeable battery characterization tool. More on that later…

Annual trip to the pumpkin patch

Working through the picture back-log … cleared out 80+ this evening. Only 1640 left to work through. But, on a plus note, there are now 2 new photo galleries posted — Woo hoo!

The twinsoes must really hate the stroller. This is how they’ll “remember” their first visit to Spina Farms last year:

Lonely — Sleeping babes, abandoned in the stroller last year…

NIKON D70, ISO 200, ƒ/5.6, 1/320sec, 40mm focal L., map

And their second visit must have caused them déjà vu:

Starting off just like last year — That is, the twins being abandoned in the stroller.

NIKON D70, ISO 200, ƒ/6.3, 1/160sec, 50mm focal L., map

But, they quickly were set free to terrorize the pumpkins.

Maia begins the sorting project

NIKON D70, ISO 200, ƒ/4.5, 1/500sec, 50mm focal L., map

Stand in the nose — Valerie had to toddler wrangle to get this shot

NIKON D70, ISO 200, ƒ/6.3, 1/400sec, 34mm focal L., map

Self portrait. Hard to confirm the focus when you aren’t actually looking through the viewfinder.

2 out of 5 — That’s about all you can expect to look at the camera.

NIKON D70, ISO 250, ƒ/4.5, 1/500sec, 34mm focal L., map

Lots more photos posted in the gallery linked above.

Oshkosh Trip: Epilogue

For those just finding this, click to start at the begining.



[ Click to go interactive ]

Some trip facts

  • Mileage: 5230 on the odometer (GPS was almost always on, but, not quite)
  • Stops for gas: 39, or ~134 miles per tank. (F800 range: ~230 miles, Goldwing range: ~150-160 miles).
  • Gallons used: 95.25 gallons which makes for 54.9 MPG average for the trip — not shabby at all.
  • Fuel cost: $262.03, or an average price of $2.84 per gallon for mid-grade fuel.
  • States covered: 13
  • State line signs successfully captured for the ride report: 3 — and it wasn’t for lack of trying. But, I wasn’t going to stop, just to snap a photo of a sign…
  • Family feuds: about 4 minor ones over stupid trivial crap like: being too hungry to function and not stopping soon enough when I knew better (sorry Dad); or wondering: what’s the next highway number? How far till that? How far till we get to such and such? What time will we get there? Where will we stop next for gas? (“I don’t know, look at the map. I don’t know, here’s the map” …. *long pause of indignant silence* …. “Feel free to lead if you’d like” — It’s OK Dad, pay-backs are a bitch and I’m glad you didn’t give me the indignant silence when I’d ask you a bazillion questions about things as a kid :) ); or pulling away from intersections too quickly and without waiting (Really? OK, sorry Dad), or staying up too late/getting up too early (I always knew that’d be an issue!).

(Hi Dad! — Don’t let me get away without you telling your side of the story! I love you too!)

Gear that rocked

  • The Airhawk seat cushion was the best money spent on comfort mods.
  • The silly o-ring cruise control. Just engage by rolling into the crack between the bar-end weight and the throttle grip and relax the right hand! I left it “engaged” for most of the highway miles, even with both hands on the bars.
  • Mesh pants/jacket — great in the heat. Although the trip was *much* colder than I ever would have anticipated, the ability to layer a wind-proof shell outside, and warmth inside worked out very well to stay comfy.
  • My home-brew GPS setup. It’s a Garmin car GPS inside of a RAM Aquabox with a homemade bracket mounting it to the homemade “dash”. I’ve got it hard-wired into ship’s power and an audio jack by the seat to plug into headphones to listen to music as well as the turn-by-turn directions. The best part about the mounting location is that it’s in front of the bars which make a perfect arm rest to steady the hand when working the interface.

What I’d do different

  • Skip the 6K service on the road. I’d have changed the oil prior to leaving, and then had the bike serviced some place I knew I’d be stopping at for a while (like the Boise area). That half-a-day in the Nebraska dealership could have been spent doing much more interesting things.
  • The tire situation certainly could have been planned better. While I’ll never buy another tire with no tread in the middle, I’ll also be more proactive once the tire has squared off.
  • I’d pack food/snacks and stop at some roadside places to eat a snack, rather than stopping for sit-down lunch every day. Anything to make the stops more flexible is a bonus as the majority of the stops are at the least comfortable/interesting places: gas stations.

Final thoughts

This was my third multi-day trip (first, & second) on the cycle, and by far the most ambitious. The first two were definitely helpful to get things dialed in and this trip worked out amazingly well in part because of already having 5 long days in the saddle to figure things out (BTW — Thanks, Mark, for helping make both of those other trips happen!)

I’d like to have left a day earlier and taken my time along some of the route, but, the cookie didn’t crumble that way. Although, it seams that we didn’t spend any time checking the sights along the way, the reality is we spent our sight seeing time on slower roads, seeing things that wouldn’t have been possible rolling the super slab. After all, the trip was all about getting some place, seeing the sights there (airplanes!), and then getting back. The only way to really do it more leisurely is to take more time — the miles still have to be covered one way or another.

Someday I’d like to do an open ended trip with no particular time to be at no particular destination. Probably spend several days touring the Rockies, amongst other places. Definitely do some camping along the way.

All joking aside about family feuds and such, I had a great time traveling with my father. We seamed to work well as travel buddies going down the road and our mutual love of the aviation made the destination all the more enjoyable to share with one another. This trip was too long in the making, and now I’m regretting not having purchased a bike sooner that was capable of doing the distance and joining in on past trips. Thanks, Dad, for asking if I’d like to go, year after year. It wouldn’t have happened otherwise.

Which, leads me to my lovely bride — a big thanks to her for taking care of our three kiddos for the ~2 weeks that I was gone prior to meeting in Idaho. And then having the courage to take the 3 kids on a road-trip to Idaho all by yourself — I’m just in awe of how patient you are.

To the readers that have made it this far, thank you too! I hope you’ve enjoyed reading this as much as I have putting it together. All thoughts and comments are greatly appreciated :)

– Fin –

Oshkosh Trip day 19

Day 19: The last push home — 406 miles

Sadly, this trip came to an end on this last day of travel.

The day started with a happy toddler that awoke in her giant “hooo tell” sized bed, as she likes to call it. After packing up the baby cribs and toys and other stuff you can’t live without when traveling with kids, we made a quick stop into the motel breakfast to get some food in the tiny grumbly tummies.

Maia (oldest at 3) saw the cereal bin full “multi-colored Ohhs” (ala Fruit Loops), and she was very excited and wanted to try them. She doesn’t get sugar-bomb cereal at home, and she most certainly doesn’t get it just prior to being cooped up in a car all day. Bad parent that I am, I lied to her and said it was yucky and we couldn’t eat it, but the flake cereal was OK.

With a long, dejected look of disappointed, she proffered that maybe we should try and see if it really was yucky. To which, I assured her it was yucky and prepared a bowl of corn flakes for her.

Later, Maia keenly observed someone getting a bowl of Fruit Loops and she was very concerned that other people were eating the “yucky” cereal and maybe we should throw it away to keep even more people from getting the yucky cereal. Hmmm, this is why you don’t tell “little” white lies to your kids…



[ Click to go interactive ]

Continue reading Oshkosh Trip day 19

Oshkosh Trip: day 18

Day 13-18: Hang’n around Weiser, ID and the start of the trip home. — 342 miles

Dad and I got home to Weiser on a Saturday evening. The stomach bug was working its way through my family at a rate of one person per day, starting with one of the twins. I was the last person to come down with it in the wee hours of Tuesday morning. It’d knock you down for 24 hours and then you’d be back to normal. Well, normal minus all your energy since you weren’t able to keep anything down for the previous day.

As nice as it was to be back home visiting my folks, it was mostly an exercise in disinfecting the house in hopes of keeping others from getting sick. It sort-of worked since Mom and Dad, thankfully, managed to avoid it and we also managed to avoid re-infections of those that already had it (which, sounds odd, but we’d heard anecdotal evidence that this was happening with this particular bug).

Living in the SF Bay area, it’s easy to forget about severe weather — it just happens so rarely there. This particular week, there were all sorts of evening storms that rolled through western Idaho. I could do without the fires they cause, but, I’m fascinated by lightning storms. I tried to capture it for the first time and I found it to be rather difficult to get the shot. Between the wind and the rain, I wasn’t well situated to get the best view of the most likely places it was striking. Below was from Monday night (8/3/09):

Sparks — Don’t see these often in San Jose.

NIKON D70, ISO 200, ƒ/25.0, 30sec, 27mm focal L.

Continue reading Oshkosh Trip: day 18

Oshkosh Trip: Day 12

Day 12: Butte, MT to Weiser, ID — 470 miles



[ Click to go interactive ]

Continue reading Oshkosh Trip: Day 12

Happy 5th Anniversary

(pardon the brief interruption from the Oshkosh trip to get this done while it’s fresh)

Valerie worked out a deal for our 5th anniversary that we could get 36 contiguous hours of baby sitting (some paid, some graciously offered by family) which would give us a night away from our 3 lovely kiddos and enough daytime to travel away and get back whilst actually sleeping in and enjoying a morning! Don’t have to twist my arm, let’s go!

Valerie has been wanting to ride with me on the motorcycle ever since we’d met nearly 10 years ago. My previous 2 bikes were small “beginners” bikes, and I really wasn’t all that keen on 2-up riding with them. But, the real kicker was I insisted that she needed all the gear in order to go. Fast forward 9 nears, and I have a bike well capable of going double and all the gear, but, we just couldn’t get away with 3 kids (oldest is 3, plus 1 year old twins). Finally, this is our chance to hit the road together.

The other nagging issue is that in my 12 years of riding road bikes, I’d yet to ever carry a passenger. I got some helpful pointers from folks here. A bit of nay saying about the length of the trip, and needing practice (how exactly *do* you “practice” 2-up riding, without actually, ya know riding 2-up?!?), and stories of trips gone bad … it all had me slightly spooked that the motorcycle would be the thing that spoiled this getaway trip. But, Valerie is not your average chica and I had a good feeling that it’d all work itself out just fine.

Enough yack’n, lets get started …




[ click to go interactive ]

The destination is Anchor Bay, up Highway 1 — a “short” 180 mile trip.

The trip begins

DMC-ZS3, ISO 100, ƒ/4.5, 1/60sec, 25.9 mm focal L., map

I actually wanted to get some slow-speed practice since we’d be heading through San Francisco. We bopped around our local neighborhood looking for a good window to snap a photo in. It was great surface street and parking lot practice to get the feel for the bike with twice the accustomed passenger load on it. I was feeling good. Valerie was anxious to get some miles behind us. A quick 1 hour burn up 101 and we arrived at the Ferry Building in San Francisco.

I think the lane splitting might have been a bit much for the first trip out — she said it was fine. The pick-up truck that was hot-boxing (seriously it was skunky!) down the freeway was a little bit freaky, but, we got around them OK.

Not being stuck in the Embarcadero gridlock through San Francisco — priceless!

Rock star parking — Stopped at the San Francisco Ferry Building to get some treats to “picnic” on later that night by the fire.

DMC-ZS3, ISO 80, ƒ/5.0, 1/400sec, 4.1 mm focal L. ~48mi from prev photo, map

Elvis impersonator — OK, maybe that’s stretching it, but, his lip sync routine was largely Elvis.

DMC-ZS3, ISO 125, ƒ/4.4, 1/400sec, 18.2 mm focal L. ~1ft from prev photo, map

With about 50 miles under our collective belts, the cycle was working out well for both of us. It’s kinda hot seeing Valerie in gear…

All smiles

DMC-ZS3, ISO 100, ƒ/3.3, 1/60sec, 4.1 mm focal L. ~6ft from prev photo, map

The SF Ferry Building is (now) a collection of boutique food shops. Meats, cheese, chocolate, bread, pastries, restaurants, ohh, and a farmers market on the weekends. Since we knew we’d be eating a later lunch (more on that later…), we gathered the fix’ns for a “picnic” dinner to enjoy by the fireplace in our room.

Crowded — We’re heading for the Cowgirl Creamery for cheese.

DMC-ZS3, ISO 100, ƒ/3.3, 1/30sec, 4.1 mm focal L. ~0ft from prev photo, map

Personalized queso tasting — Too many choices of yummy stinky cheese

DMC-ZS3, ISO 125, ƒ/3.4, 1/30sec, 4.7 mm focal L. ~13ft from prev photo, map

It was unseasonably warm downtown. All the squids were running around in tank tops and shorts on their scooters — we must have looked as funny to them as they looked to us.

A trip over the Golden Gate Bridge got us out of the city and a brief respite of cooler air. But, heading through Fairfax was much warmer than I’d been expecting. Sir Francis Drake Blvd gave both Valerie and I a taste of the twisties that were in our route ahead of us — traffic kept the speeds very nicely tempered as we both explored the bike’s handling with 2 people. Valerie experimented with following my leans and realized it was much more comfortable than trying to stay rigid with the bike.

Our lunch destination was the Station House Cafe, in Pt Reyes Station. Being sans-children meant appetizers; oysters and a Martini, but only a few sips for me.

Kumamoto Oysters — Stopped for lunch at the Station House Cafe, a favorite of ours.

DMC-ZS3, ISO 80, ƒ/3.3, 1/60sec, 4.1 mm focal L. ~34mi from prev photo, map

The rest of the route took us north up CA-1. It’s a route I’d driven before and always wanted to take the cycle up. The weather was sunny and warm along the coast (2 rarities), and being a weekend, the traffic was moderate, but tolerable. We both settled into a nice groove making decent time after getting around some of the slowest cages.

During one particularly tasty stretch of maybe dozen connected “slalom” turns with unrestricted visibility throughout all the corners, my right hand kept getting heavier and heavier as we flicked the bike over side to side, making quick carving cuts. After about the 8th corner, I get a gentle pat on the side — we’d reached the Speed-o-Valerie, and I cooled it down a bit.

After 180 miles in the saddle for the day, we were both reaching that, “it’s a good time to stop” feeling — any further and it truly would have been too much for our first trip.

Settling in — We stayed at the Whale Watch Inn — it’s not crazy fancy, but, it made a nice retreat for us.

DMC-ZS3, ISO 400, ƒ/3.3, 1/30sec, 4.1 mm focal L. ~74mi from prev photo, map

The Whale Watch Inn was a great retreat. It’s not uber luxury; the decor is dating itself. However, the seclusion, private beach access, a real fireplace in the room, and a private hot-tub on our deck with an ocean view, all at a fair price — let’s just say decor was the farthest thing from our minds…

Private hot-tub with an ocean view on our deck. — Ohhhh, yeaaaahh.

DMC-ZS3, ISO 100, ƒ/3.3, 1/30sec, 4.1 mm focal L. ~0ft from prev photo, map

View from the cliff

DMC-ZS3, ISO 80, ƒ/4.0, 1/160sec, 4.1 mm focal L. ~0ft from prev photo, map

We took advantage of the wine and vittles in the common room while we chatted with some of the other guests. Then a short walk down to the beach.

My Purple haired vixen

DMC-ZS3, ISO 200, ƒ/3.3, 1/30sec, 4.1 mm focal L. ~0ft from prev photo, map

Use at your own risk — There was literally a sign posted. It was quite stable…

DMC-ZS3, ISO 250, ƒ/3.3, 1/30sec, 4.1 mm focal L. ~0ft from prev photo, map

When I went to start the fire, I was greeted by shredded paper with easy burning sap wood arranged nicely atop it. I reckon they’ve had too many city slickers come in that think fireplaces are “turned on” with a switch.

What’s the fun in that? — Just add a match.

DMC-ZS3, ISO 100, ƒ/3.3, 1/125sec, 4.1 mm focal L.

No phones in the room. No cell service. No computers. No TV. No clock. No kids (nor worries about them; they were in good hands). Tasty treats acquired and a bottle of Cava (sparkling wine, !champagne) … yeaaaahh, it was a very relaxing evening.

Heading home

DMC-ZS3, ISO 80, ƒ/5.0, 1/400sec, 4.1 mm focal L. @42 MPH,, map

The nice thing about riding the cycle — the trip home isn’t just about traveling; it’s half the fun and we were both happy to get on the road as check-out time approached.

Long line of cars

DMC-ZS3, ISO 125, ƒ/5.0, 1/400sec, 4.1 mm focal L. @44 MPH, ~993ft from prev photo, map

We hit slow-poke traffic backing up a dozen cars. I hit the “detour” function on the GPS, and it happily routed us through Annapolis. The post office is about all there is in Annapolis, CA. I kid you not, there’s a 30MPH sign a few hundred yards on either side of the post office and an odd house or two visible from the road, and that’s it.

Why the USPS loses money

DMC-ZS3, ISO 100, ƒ/4.0, 1/125sec, 4.1 mm focal L. ~7.4mi from prev photo, map

But, the road was all kinds of fun and almost completely empty of other vehicles. Pavement was in decent shape and fairly smooth considering all the patchwork that makes up large sections of the road. We worked on braking technique, and I realized that I needed to be smoother on the brakes leading up to corners. Valerie was really good about anticipating it, but, I don’t think it was very relaxing for her.

Annapolis Rd

DMC-ZS3, ISO 100, ƒ/5.6, 1/640sec, 4.1 mm focal L. @37 MPH, ~2.4mi from prev photo, map

Annapolis Rd ends at this bridge. The GPS suggested I turn right and head back to CA-1 — uhm, no thanks, I’ll go left onto Stewart Point Skaggs Spring Rd (say that 5-times, fast). This was equally as empty, and sufficiently maintained that we made fairly good time.

And then, the road widened and had proper markings and an actual shoulder. It was smooth, fast, sweeper after sweeper after sweeper. Valerie was following my leans and the two of us just connected with the machine and chewed up the corners. One of the best stretch of roads I’ve had the pleasure of riding. The only bummer is the damn road is posted at 35-40MPH. We weren’t setting any speed records, yet were rarely under 55. I saw quite a few sport bikes heading in that general direction on our way to Healdsburg; I wonder how frequently it’s patrolled…

Time to go — Don’t want traffic to pass us by…

DMC-ZS3, ISO 100, ƒ/4.0, 1/320sec, 4.1 mm focal L. ~3.6mi from prev photo, map

We had just enough time to get some lunch at fantastic brewery we found many years ago in Healdsburg: Bear Republic Brewery. It brought back fond memories of when we first started dating…

Bear Republic Brewery — A favorite of ours in Healdsburg.

DMC-ZS3, ISO 200, ƒ/3.3, 1/30sec, 4.1 mm focal L. ~31mi from prev photo, map

We took some real goat trails east of Santa Rosa that turned out to be a waste of time. Rough roads with lots of traffic. You win some; you lose some.

Rolling through Glen Ellen, we couldn’t place our finger on what was so unusual about the town. Valerie thought it must’ve been ex-military, but, it just wasn’t right for that. Turns out it was an institution built in the late 1800’s where people dumped there learning impaired children.

Glen Ellen — Weird vibe from all the buildings that look the same.

DMC-ZS3, ISO 100, ƒ/4.0, 1/250sec, 4.1 mm focal L. @21 MPH, ~30mi from prev photo, map

And from there, we just made our way back to San Jose. The kids were very awfully happy to see us and the chaos of our regular life resumed as if we’d never set foot out of the house.

I later asked Valerie if she thought she’d had had more fun on the trip by taking the cycle — unequivocally, she agreed it was perfect for such a trip. I think she’s hooked :)

Oshkosh Trip: Day 11

Day 11: Bowman, ND to Butte, MT — 522 miles



[ Click to go interactive ]

We got out of Bowman early as we had a fairly full day’s worth of miles to cover to get to Butte.

Continue reading Oshkosh Trip: Day 11

Oshkosh Trip: Day 10

Day 10: Watertown, SD — Bowman, ND — 360 miles



[ Click to go interactive ]

We got a fairly latish start, getting out of the motel about 0930 local time — which could only be my doing as Dad’s an early bird. Of course, no sooner than we’re out the door, we have to make the mandatory Starbucks run, and I can’t remember why Dad wouldn’t have gotten his fix already, given the hour.

Continue reading Oshkosh Trip: Day 10