Friday, March 17, 2017

Winter Projects

The '16-'17 winter was very good to the Vstrom DL 650. We tackled a number of projects (my son Caleb helped me out on each of them). Kind of short on photos, just because it was a "doers, doing" kind of series of sessions...

Gaffler Stainless Brake Lines

I added some Rox 2" bar risers late last fall, which were stretching my factory brake lines too much for my comfort. So over the winter break, my son came down and we installed shiny new Gaffler stainless steel brake lines. I've never bled brakes before, but hey... I can't be that difficult right? Spoiler: it wasn't.

The process began by draining the brake fluid. If you've read my other posts, you know the store of this bike. It's an '08 DL650, bought in Oct 2015 with 1600 miles on it <fist pump>. I did the second oil change on it, and I've done all the factory maintenance since. Every hose, every seal I've inspected, and every fluid has come out looking brand new, and the front brake fluid was no exception. But they say to change brake fluid about every season, so it'd either been 8 seasons or 3 seasons, depending on how you measure a season.

Draining the fluid isn't difficult. Pull off the master cylinder cover and open the bleed valves on each caliper. I then pulled off the lines themselves and chucked them (and in hindsight realized I might have been able to help a buddy out and offered them up on the Stromtrooper forum--sorry, pal).

I'd ordered 2" extended brake lines from Gaffler, which arrive timely and in good shape. The install was a snap, other than a mistake in routing them (I ran them too low, which interfered with a later project of installing lever guards).

Bleeding brakes is pretty intuitive, once you get the hang of it. There are several good youtube videos to get you started, I particularly liked this one; Lemmy at Revzilla does a great job: 



My son did mess up once, and allowed the reservoir to drain too far, so we had to start all over again, but no big deal. It still took well less than a single bottle of NAPA DOT3 fluid.

Sorry, only got one shot. Gaffler offers several colors, in factory lengths but with the option to go longer, for situations like mine (bar risers) or situations where you're adding clip-ons. It's a good idea to have just about the exact length needed, rather than having a lot of slack. The kits come complete with clips to hold the lines, banjo bolts, and crush washers. You do need to check your service manual to determine the appropriate torque for the banjo bolts (top and bottom).

One note for Strom owners: the factory brake lines have a single line to a T right above the fender but the Gaffler kit is two separate lines, one for each side (and very clearly labeled).


The rest of the time that evening was spent checking the air filter (no small feat on a VStrom), re-routing some wires, etc.

If you're wondering about whether you can tackle this job, just go for it. I can't imagine how someone could get this wrong if they watch a few videos and then pay attention.

Friday, September 30, 2016

Driving Lights

My wife's biggest concern about me riding is the safety aspect - namely that others can't necessarily see (or register that they're seeing) me on the bike. I wear a bright yellow jacket, and add a reflective vest at night, but that's just not quite enough. After setting up my auxiliary power circuit (http://k7jto.blogspot.com/2016/09/auxiliary-power-mod.html), I decided to tackle driving lights.

I'm not a cheapskate, but I don't like to spend money where it's not needed. So while my first thought was to spring for a set of Denali driving lights (north of $200), I decided to give something more affordable a try, first. Enter the Lylla headlamp: $26 on Amazon.com. The lamp ships with a switch (which I've set aside and saved for another project) and two LED lamps. A few days after I ordered, the lamps arrived. They were, well, larger than I expected!




As always, the first challenge was where to install the lamps. They ship with a bracket, but the default configuration requires the bracket be mounted to a round bar which is perpendicular to the direction of travel. It meant I couldn't use the engine guards, and the generous fairing on the Strom also meant I couldn't use the handlebars. Eventually I realized the fender bolt would be perfect:



With the destination selected, the next step was to slightly modify the bracket--the shoulder on the fender bolt is a tiny bit larger than the hole at the base of the light frame:


The benefit of cheap Chinese metal is that it files quickly.

Once I modified the base of the bracket, it was simple to get installed:


With the frame mounted, it was a simple matter of installing the light and closing up the frame:




 Finally, I wired up everything to a power lead I pulled up from the fuse block in the back, and presto - there was light!












Auxiliary Power Mod

I wanted to add a variety of auxiliary power components to my '08 Suzuki V-Strom (DL650), way back when I bought it. I've been sitting on this project ever since - here's the write up (with a few photos).

The V-Strom has one or two spare, switched circuits (with an amperage rating of 10 amps or so). On a bike that'll eventually have driving lights, USB power, 12v power, GPS, perhaps heated grips and/or seat, that extra circuit or two won't go far - you'll end up making a choice: "Do I want warm hands, or do I want my GPS?" I don't believe in a world of 'or' - I'm always living life in a world of 'and' (it drives my wife crazy sometimes). So I quickly recognized a separate series of circuits would be necessary in order for me to stack on new features. And thus my project was born.

I started out by buying a marine-grade fuse block. My first was a 12-circuit block, which I quickly realized was going to be too big (I had originally planned on installing the block near the battery under the seat). So I downsized to the six circuit fuse block:


I bought this back in February, and it's sat unused taking up room in my drawer ever since.

Next, I knew the fuse block had to be direct-connected to the battery. It couldn't pull power for everything it'd support from any existing circuits. But I also knew I didn't want to risk parasitic (or accidental) power drains and a dead battery, so I knew it had to be 'switched' with the motorcycle's ignition. Therefore, my next requirement was clear: I needed a relay connected to the ignition, which would close the circuit from the block to the battery.

A Little Bad Weather Can Be a Good Thing

In late September, my wife had a trip scheduled with some friends. I planned to take my own trip, riding the Strom down to Canyonlands, then returning to Salt Lake via Colorado and Dinosaur National Monument. As the trip date neared, the weather forecast worsened. While my destination basked in 80-degree sunshine, the route there was experiencing Utah's version of biblical floods (ie, 2" of rain in a 24-hour period). I chose not to go (and I was grumpy!). As Saturday passed, the weather cleared and I hopped on the bike to visit my friend and "elmer" (amateur radio speak for 'mentor'). Chuck and I tackled the install, and I'm tickled pink with the results.

The Install

Fuse Block Location

Our first task was to find a location for the fuse block. I ultimately chose to put it where the factory tool bag is stored. It's accessible, but well-secured:


Relay Setup

After choosing the location for the fuse block, our next task was picking a circuit to power the relay with. It could honestly be any circuit, but we noticed in the fuse box that there is a "spare" circuit which is actually wired and functional (as opposed to just being an empty space in the fuse box):


We pulled the fuse box out, removed the fuse box for the starter motor so we had some room to work, and simply tee-ed off the "spare" wire and ran that to the relay. We ran a wire from the relay to ground, flipped the ignition, and heard that beautiful sound of the relay closing. Successful step 1!

Putting it Together

Finally, we needed to get the actual power from the battery to the fuse block. We connected a second ground and ran it straight to the fuse block's ground pole. We then ran power from the battery to the relay and from the relay to the fuse block's power pole. It looks a bit confusing, but again - it works.


Here's a shot of the fuse block (no fuses installed and nothing connected - but it powers up great):


And again - the final installation:



Thursday, September 29, 2016

Happy Trails Center Stand

I've had my eye on a Murph's Kit center stand (http://www.murphskits.com/), but he stopped carrying them (to his credit, he recently pointed me elsewhere, but I'd already purchased one elsewhere). With SW Motech and other stands coming in well over $200 (as much as $280) for my '08 Wee, I started hunting the forum. I came across a reference to Happy Trails (http://www.happy-trail.com/), which is located just north of me in beautiful Boise, Idaho.


I put my order in for their affordable center stand on Monday - it arrived today and was installed in about 20 min over my afternoon work break. Here's my report.

Installing is literally a snap. Four bolts, some spacers and a few washers. The directions are well-written and it's easy to follow along (provided you are even somewhat mechanically inclined). The only thing I recommend is to dry-fit each of the four bolts. My Wee had paint and grime in the lower bolt holes, which made threading the bolt a bit difficult. Also keep in mind that the top bolt on the right side is simply a beast to get to. Accept it--as the Tao says, take the path of water... Some patience and you'll get it.

The item was well-packaged and arrived without damage and with all of its parts. Unlike some center stand kits, the springs are pre-installed, making the overall installation quick and (relatively) easy. Once the bolts were sorted out (large 10mm bolt on bottom, smaller Allen-head 8mm bolt on top on both sides), I performed the install.

Oh--unless you like redoing things, I recommend some blue Thread-Lok on the bolts.

LEFT SIDE
The left side is the side recommended to start with. It went pretty easy, once I learned to pre-thread the bolts. I started with the top bolt, then installed the bottom bolt. Snugged everything up real tight.



RIGHT SIDE
Here's where patience comes in. Start with the bottom bolt, and add both of the extra washers for spacing. Snug it up, but not too tight - you want the bottom bolt to align the bracket, but not to hold it too rigidly.

Next, carefully insert your left hand into the miniscule space between the wheel and the exhaust pipes (obviously don't do this while the pipes are hot). Slide the 8mm bolt in through its hole, then carefully slide each washer and the spacer over it. Align the bolt and through some sort of voodoo, start threading it. I used a very long 7mm allen wrench. It didn't align well, so I went carefully. If you have a wobble-head (round-head) allen wrench, all the better. I've yet to invest...



As you can see, the "fit" is tight (it's not really a fit - had to pull the allen wrench out with vice grips). But eventually you'll get that top bolt tightened. Grab your torque wrench and torque everything down (BTW: 17 foot pounds is 23.5 NM and 34 foot pounds is 46.5 NM).



Next up: learning the balance point. It was a struggle to get this on the stand the first time. I'm glad I have it now - lubing the chain should be a lot easier (instead of chasing it all around the garage and driveway).


Happy Trails Center Stand

I've had my eye on a Murph's Kit center stand (http://www.murphskits.com/), but he stopped carrying them (to his credit, he recently pointed me elsewhere, but I'd already purchased one elsewhere). With SW Motech and other stands coming in well over $200 (as much as $280) for my '08 Wee, I started hunting the forum. I came across a reference to Happy Trails (http://www.happy-trail.com/), which is located just north of me in beautiful Boise, Idaho.


I put my order in for their affordable center stand on Monday - it arrived today and was installed in about 20 min over my afternoon work break. Here's my report.

Installing is literally a snap. Four bolts, some spacers and a few washers. The directions are well-written and it's easy to follow along (provided you are even somewhat mechanically inclined). The only thing I recommend is to dry-fit each of the four bolts. My Wee had paint and grime in the lower bolt holes, which made threading the bolt a bit difficult. Also keep in mind that the top bolt on the right side is simply a beast to get to. Accept it--as the Tao says, take the path of water... Some patience and you'll get it.

The item was well-packaged and arrived without damage and with all of its parts. Unlike some center stand kits, the springs are pre-installed, making the overall installation quick and (relatively) easy. Once the bolts were sorted out (large 10mm bolt on bottom, smaller Allen-head 8mm bolt on top on both sides), I performed the install.

Oh--unless you like redoing things, I recommend some blue Thread-Lok on the bolts.

LEFT SIDE
The left side is the side recommended to start with. It went pretty easy, once I learned to pre-thread the bolts. I started with the top bolt, then installed the bottom bolt. Snugged everything up real tight.



RIGHT SIDE
Here's where patience comes in. Start with the bottom bolt, and add both of the extra washers for spacing. Snug it up, but not too tight - you want the bottom bolt to align the bracket, but not to hold it too rigidly.

Next, carefully insert your left hand into the miniscule space between the wheel and the exhaust pipes (obviously don't do this while the pipes are hot). Slide the 8mm bolt in through its hole, then carefully slide each washer and the spacer over it. Align the bolt and through some sort of voodoo, start threading it. I used a very long 7mm allen wrench. It didn't align well, so I went carefully. If you have a wobble-head (round-head) allen wrench, all the better. I've yet to invest...



As you can see, the "fit" is tight (it's not really a fit - had to pull the allen wrench out with vice grips). But eventually you'll get that top bolt tightened. Grab your torque wrench and torque everything down (BTW: 17 foot pounds is 23.5 NM and 34 foot pounds is 46.5 NM).



Next up: learning the balance point. It was a struggle to get this on the stand the first time. I'm glad I have it now - lubing the chain should be a lot easier (instead of chasing it all around the garage and driveway).


Tuesday, August 9, 2016

Tablet as GPS

I've been building up a stock 2008 Suzuki VStrom 650, into a more comfortable, better equipped adventure bike. One of the modifications I have made is to add the ability to use an old Nexus 7 wifi tablet as my GPS unit. I'm kind of a cheap guy, so as usual that means I've needed up spending more than necessary, in an effort to keep the investment cheap.

The first need was power. You can't take a multi-day ride with a tablet on maximum brightness and not have aux power. I purchased what looked like a rugged 12v USB socket from Amazon--unfortunately, it died before I could use it (no clue why--the wires show no sign of heat damage, the inline fuse is fine, and it has never been wet because I garage my bike at all times). At the time of this writing, I am back to the drawing board on this step.

The next challenge was the mount--how to secure a tablet to the bike. The tablet I have chosen, the Nexus 7 wifi, is really light. I purchased a rugged case for it, but even then it's well under a pound. My first effort was to try to hack a cup-holder phone cradle to work--I tore it apart till I just had the stem, but couldn't find a way to install it without 1) compromising safety and 2) damaging the very visible cockpit area. Finally, I bit the bullet and purchased a RAM Mount marine mount as well as and Adventure Tech GPS mount (http://www.adventuretech.biz/over-the-dash-gps-mounts.html) The mount install was painless and the RAM mount seems really secure. (NOTE: I had to push the photos quite a bit to get them lit up enough to see, so they're grainy):

  

The next challenge was mounting the tablet to the RAM Mount. The case I purchased has a rubber cover for the tablet, with a hard plastic back which separates from the rubber cover. I matched up the RAM mount mounting plate holes to the vertical and horizontal center of the rigid plastic back, drilled holes, and used some flathead automotive mounting posts to fix the plastic to the mounting plate.





Now I have a ruggedized tablet fastened to a RAM Mount, just above my instruments, which it is visible but not distracting. Using Bluetooth, I can connect my Sena headset to the tablet, where I receive turn-by-turn directions as well as music (the Sena can connect multiple devices, so I also have my phone connected, in order to take calls).

 

Why a tablet, instead of the Garmin GPS most riders carry? Price, convenience, and functionality.
  • The Garmin GPS is $500-$600 new. I already own the tablet.
  • The tablet has a camera which will take shots (still and video) right through the windscreen, so it's a great way to capture snippets from the road.
  • The tablet allows me several options in terms of GPS apps.
  • I can run Rever on my tablet, which is how I plan, track, and share rides with others.
  • The tablet also allows me to write and assemble blog entries.
  • With the tablet, I can connect to and pull content off my Nikon J5 as well as my GoPro, to enhance blog entries.
  • The tablet is lighter than a Garmin, but has a larger screen and much higher resolution.
  • With an Android device, I can keep in touch via social media whenever I stop. If I'm not somewhere where there is wifi, I can use my phone as a hotspot.
I proved this out on the road recently, riding from Salt Lake City to Ely, NV to Wendover and back to Salt Lake City. The tablet is a bit heavy - the VStrom fairing moves quite a bit already, but it's obvious there's additional weight on it. Nonetheless, the system worked quite well. Once I get the power issue resolve, this will be a great solution.

Friday, April 1, 2016

IoT Excitement - NodeMCU Pushes the Weather

If you read my previous post, you know I've been messing around trying to decide what IoT stack to use as I build out a variety of projects. I've  been messing with NodeMCU a lot lately, in fact I've been able to connect it to a BMP085 sensor and publish intranet web pages with temperature and barometric pressure.  In the process, I've learned a few things about NodeMCU (a few additional things).

Basically, I find NodeMCU to be great at doing very little. No, I mean that literally - if there's something IoT really small you need to do, NodeMCU might be the right device. Might...

  • Ironically, in my previous post I discussed how NodeMCU could be programmed via Arduino. I was worried it might take up more memory, though, than programming in Lua. According to this blog, however, the opposite is true. Lua, being an interpreted language, sucks up tons of memory. I found that to be true - my original code attempted to open two connections in the same function. It couldn't run due to memory errors. 
  • I've mentioned before, but using NodeMCU is a kludgey experience. The device is awesome in principle, and it's only in its infancy, but connecting and disconnecting the USB cable to reset the device time after time... It gets old after a while. 
  • Lua is a relatively straightforward language, but it has its drawbacks (including taken up memory for comments).It took me two separate evenings to figure out how to successfully make an http connection. 
Regardless, let's jump in... The mission was to connect my IoT device to the cloud. The goal was to publish data to Weather Undeground - goal achieved: https://www.wunderground.com/personal-weather-station/dashboard?ID=KUTWESTJ26

I decided to connect to Adafruits IOT site, as well, just to make a little spiffy control out of it: https://io.adafruit.com/johnover/weather

To upload data, I'm using a simple init.lua script, then the bmp180.lua script (standard), then the wu_lite.lua script I wrote:


-- BMP085 and NodeMCU Weather Underground
-- Submits temp and pressure to WUnderground

--**************************************************************
   alti=1509 -- set correction for your altitude location in meters
--**************************************************************
   wifi.setmode(wifi.STATION)
   wifi.sta.connect()
   sda=4   -- GPIO2 connect to SDA BMP180
   scl=3   -- GPIO0 connect to SCL BMP180
   pres=0    -- pressure
   temp=0    -- temperature
   oss=0   -- over sampling setting

--load BMP module and read sensors
function ReadBMP()
   bmp180 = require("bmp180")
   bmp180.init(sda, scl)
   bmp180.read(oss)
   pres = (bmp180.getPressure()/100+alti/8.43)/33.86388667
   temp = ((bmp180.getTemperature()/10)*9/5+32)
   --fare = (temp*9/5+32)
   --print("Pressure:    "..string.format("%.1f",pres).." inches")
   --print("Temperature: "..string.format("%.1f",temp).." deg C")
   --print("Temperature: "..string.format("%.1f",fare).." deg F")
   --print(" ")

   -- push to WUnderground
   host = "rtupdate.wunderground.com"
   param = "/weatherstation/updateweatherstation.php?ID=<WU_ID>&PASSWORD=<wu_password&" ..
 "dateutc=now&tempf="..string.format("%.1f",temp).."&baromin="..string.format("%.1f",pres) ..
      "&softwaretype=NodeMCU%20version%20.01&action=updateraw&realtime=1&rtfreq=2.5"

   print(host .. param)
   sendRequest(host, param)
   
   -- host = nil
   -- param = nil
   
   
   -- ******************************************************************
   -- adafruit io
   -- create http client http://benlo.com/esp8266/esp8266QuickStart.html
   -- ******************************************************************
   host = "io.adafruit.com"
   param = "/api/groups/weather/send.json?x-aio-key=<Adafruit_IO_key&temperature="
           ..string.format("%.1f",temp).."&pressure="..string.format("%.1f",pres)
   
   sendRequest(host, param)
  
   -- release module
   bmp180 = nil
   package.loaded["bmp180"]=nil
end



function sendRequest(host, param)
   conn = nil
   conn = net.createConnection(net.TCP, 0)
   conn:on("receive", function (conn, payload)
               success = true
      print(payload)
   end)
   
   -- once connected, request page
   conn:on ("connection", function(conn, payload)
print('\nConnected')
   conn:send("GET " .. param.. " HTTP/1.1\r\nHost: " ..host.. " Connection: close\r\nAccept: */*\r\nUser-Agent: Mozilla/5.1 (compatible; esp8266 Lua; Windows NT 5.1)\r\n\r\n")
   end)
      
   conn:on("disconnection", function(conn, payload) print(' \nDisconnected') end)
           
   conn:connect(80, host)
   
   -- release connection objects
   conn = nil
   payload = nil
   --host = nil
   --param = nil

end
-- First reading data
ReadBMP()
-- Periodic reading of the sensor
tmr.alarm(1,300000,1, function()ReadBMP()end)

I had a lot of logic issues as I went along, then ran into memory issues which forced me to refactor (which in and of itself wasn't necessarily bad - I drove some efficiency into my programming).

The next step is to set this up outdoors and let it roll for a day or to. Then I need to figure out how to insert a time stamp (Adafruit's IO site doesn't calculate it for you). Once I'm done with that in Lua, I'll build the same functionality in Arduino and see how much better it runs.