Tarba Tron – First Movement

With Adrian's help, I got a chance to test the shaft drive for the first time. I found the ideal gear motor in the Milwaukee Makerspace hack rack and decided to ditch the gear drive idea. The motor has more than enough torque. The shaft is a bit twisted but the variation is within an acceptable range.

Tarba Tron – Cam Assembly and Drive

With the help of a few awesome Milwaukee Makerspace members, I finished the first full test fit of the cam assembly. I forgot to take pictures but luckily Pete and Amy were on the ball.

There are (15) different cam shapes and I laser cut (2) of each. Every thing came together easily except that I mistakenly cut (4) of cam #11 and none for #12. I can only fit 27 cams on the shaft so I will be taking away (1) of #15, which lie smack dab in the middle, and both #1, which are located at the ends.

The next step to get this assembly spinnin'. I finished the cam shaft saddle and plate on the drive side. I have integrated the wooden gear into the support structure. I hope to finish the other side and spin it by hand this weekend.

Tarba Tron – Cam Assembly Begins

I have been refining and assembling the cam assembly for Tarba Tron. I found a light, stiff shaft in the Milwaukee Makerspace "long stock storage hack rack"! This fortunate find likely saved me $70-$80. The steel U-channel is about 9'6" long, 4" wide, and 3" high. I tested the stiffness by placing the ends on 4x4 blocks and standing in the middle. The shaft barely flexed. I only anticipate 50 pounds of load so this''ll do! Additionally, the rectangular shape will serve well as a "key" for the cams.

Tarba Tron - Cam Design

The cam design for the Tarba Tron prototype was great for a proof of concept but didn't produce the intended Sine wave. I didn't have much luck looking for a Sine wave cam model online because that is not the mathematical model it usually needs to produce. Wikipedia had a good explanation and model of a traditional application.

A cam is a rotating or sliding piece in a mechanical linkage used especially in transforming rotary motion into linear motion or vice versa. It is often a part of a rotating wheel (e.g. an eccentric wheel) or shaft (e.g. a cylinder with an irregular shape) that strikes a lever at one or more points on its circular path. Source

I set upon creating a model myself. I currently plan on using a 8 ft piece of lumber as the follower. The pivot point will be located at 1/5th of the total length or 16 inches from of the "back" end. So a deflection of 1 unit will create of 4 units of movement on the front end. In other words if the variable a in the following diagram has a magnitude of 10 inches, bwill be 40 inches.

follower_markup_resized
follower_markup_resized

So the knowns are that I would like the back end of the follower to have a total deflection (a) of 10 inches in a sine wave pattern. I plotted the sine function from 0-360 degrees in 20 degree increments with multiplier of 5. Then, I chose a minimum cam radius of 3" and used the values derived in the previous step to calculate distance from center of cam to the point where the cam contacts the follower. This is what the two values look like at different angles.

cam_model_1
cam_model_1

Since the values were calculated in 20 degree increments, I now had 19 different points that define the cam shape. The information was in Polar coordinates and was converted to Cartesian so it could imported to inventor. This is the Inventor screenshot post-import.

cam_model_2
cam_model_2

I used the spline interpolation tool and added the shaft and alignment holes to finish the cam profile!

cam_profile_3
cam_profile_3

The final dimensions are just under the 18"x24" footprint of the 60W laser cutter at the Milwaukee Makerspace. Which is great since I highly prefer using the laser cutter over the CNC router.

The concave shape at the lowest point on the cam profile will likely not touch the follower (piece of lumber) unless a small idler/bearing is added whose radius is smaller than the groove. I may have to do some experimentation on the effects on the wave shape first. Though, a lower friction contact point may be a good idea anyway.

Next step is to cut this profile out of cardboard and get a feel for the shape and size in real life.

Laser Maze Timer

Pete and I collaborated on laser maze for this year’s Maker Faire. I worked on the electronics and firmware portion of the project. You can see what Pete did herehere, and here.

Photo by Eric Schneeweis

Photo by Eric Schneeweis

The plan was that laser would hit 5V solar panels. The Arduino reads the solar panel output through it’s analog port. The firmware compares the analog value at startup to the current value. If the value drops below a some value (80% of original seemed to work well during testing), the beam has been broken by the player and a penalty must be indicated and recorded.

When the massive green button is pushed by the person running the game, a 3-second countdown begins followed by a long beep indicates the timer has began. The goal of the game, besides just having fun, is to press the massive red button at the end of the course as fast as possible. If a beam is broken, an “angry” beep sounds and 5 seconds added to the timer.  There is also a “tick” sound every second. A red Adafruit 1.2″ 4-Digit 7-Segment Display w/I2C Backpack was used for time display. A Teensy 2.0 ran the show. The 2.0’s 5V I/Os made it easy to work with the display.

I must say that this system only worked well in controlled environments. Fog machines, used so the laser beams could be seen, and varying lighting conditions made the solar panel output readings very noisy. But I am sharing the information anyway in case it may serve as a good starting point for others.

 

The terminal strip on the right connects the Teensy I/O to the solar panels, speakers, and buttons. The left terminal strip accepts and distributes 5V.

The terminal strip on the right connects the Teensy I/O to the solar panels, speakers, and buttons. The left terminal strip accepts and distributes 5V.

  Bent Pins! I soldered the Vcc and the 5V together. They are the 2 pins on the left.

 

Bent Pins! I soldered the Vcc and the 5V together. They are the 2 pins on the left.

Code is on Gist.

Sailing Across Lake Michigan

I have been crewing with Joe for the past 4 years.  While racing has been a blast, we have constantly talked about sailing over to Michigan from Milwaukee. The logistics finally worked out and 3 of us took off on Allegro, a beautiful Pearson 26.

Before we set off, we had to finish the Friday night MAST race.  

Before we set off, we had to finish the Friday night MAST race.  

After the race, we drilled a hole in the tiller to accept the autopilot pin and packed up the food and other supplies.

This is the last picture before the three of us took off.

This is the last picture before the three of us took off.

Leaving McKinley Marina

Leaving McKinley Marina

The wind was very cooperative throughout the trip. We were in beam reach all the way to Whitehall, MI.  

The wind was very cooperative throughout the trip. We were in beam reach all the way to Whitehall, MI.

 

Since the original tiller was more steep than the current unit, we had to use brass fittings from the plumbing department to have the autopilot reach the tiller. When under higher than normal force, the fitting kept pulling out. So we had to resort to duct tape and zip ties to keep the pin in. It worked pretty well till the wind shifted and we had to manually change direction before resetting the autopilot. We made sure to be always ready with a pocket knife and replacement zip ties.

Since the original tiller was more steep than the current unit, we had to use brass fittings from the plumbing department to have the autopilot reach the tiller. When under higher than normal force, the fitting kept pulling out. So we had to resort to duct tape and zip ties to keep the pin in. It worked pretty well till the wind shifted and we had to manually change direction before resetting the autopilot. We made sure to be always ready with a pocket knife and replacement zip ties.

A great sunrise!

A great sunrise!

Joe is looking for land.

Joe is looking for land.

There it is.

There it is.

Approaching the channel from Lake Michigan to White Lake.

Approaching the channel from Lake Michigan to White Lake.

Bunch of nice sailboats were out. We got to Crosswinds Marine Service about mid-afternoon, grabbed a quick lunch, and instantly fell asleep after the all nighter. The original plan was to leave the next morning but the weather report predicted an all day thunderstorm. So we left around 9PM towards Ludington for another night sail.

Bunch of nice sailboats were out. We got to Crosswinds Marine Service about mid-afternoon, grabbed a quick lunch, and instantly fell asleep after the all nighter. The original plan was to leave the next morning but the weather report predicted an all day thunderstorm. So we left around 9PM towards Ludington for another night sail.

Harbor View Marina in Ludington, MI

Harbor View Marina in Ludington, MI

Allegro rests

Allegro rests

The next morning’s sail from Ludington to Manistee was all sorts of exciting. We were in 30-35 knots of wind with 40 knot gusts. The waves were in the 10-12 ft range. It was roughest conditions that Matt and I had been in. Joe hit a nasty Atlantic storm on the way back from Bermuda a while back  but this was the worst Lake Michigan has thrown at him so far. We reefed the main, put up a storm jib, and had an absolute blast. The following video was taken when the conditions had calmed down a bit.

Sailing up the Manistee River. We had get 2 bridges raised on our way to Manistee Lake and Seng’s Marina.

Sailing up the Manistee River. We had get 2 bridges raised on our way to Manistee Lake and Seng’s Marina.

Heading back to Wisconsin the next morning

Heading back to Wisconsin the next morning

Home at last! We were originally planning on sailing to Sheboygan, which is about 50 miles north. But the wind was coming directly from that heading so we decided to head home early. We came in at about 6AM.

Home at last! We were originally planning on sailing to Sheboygan, which is about 50 miles north. But the wind was coming directly from that heading so we decided to head home early. We came in at about 6AM.

Nerdy Derby Timer – Firmware v1

This firmware is my first attempt at classes in the Arduino environment. The code is meant for (3) track Nerdy Derby timing system. Nerdy Derby, aka “Pinewood Derby on Steroids,” will be back again at Maker Faire Milwaukee. In this event, we provide the supplies, kids make their own custom cars, and race ’em down the track.

We thought it would be nice to have a low to no management system for the kids to time themselves. Ideally, once setup, it’ll run autonomously throughout the (2) days of the Faire. Getting back to the topic at hand, object-oriented makes sense in this application since once the system works for one track, it’s trivial to keep adding tracks till your run out of pins.

Teensy 2.0 is running the show here. The MCU reads solar panel output through its analog pin. The panel is placed across the track from a red laser module to form a “trip wire”. There is a start and stop trip wire for each track. These sweet red I2C 1.2″ 4-Digit 7-Segment Displays from Adafruit are used to display the race time. While these displays can communicate at 3.3V, they require 5V power, which was convenient given that Teensy 2.0 IO pins operates at 5V as well. Except for a bad solder joint while assembling the kit (completely my fault), these displays were a breeze to get up and running.

When the Teensy turns on, it averages 10 samples of the analog signal from the panels, with the assumption that the lasers are operational and accurate. I was hoping that the laser’s contribution to the solar power production is measurably significant relative the ambient irradiation. A reading lower than 90% of the baseline has been a reliable indicator of the laser being “tripped” so far. This has been tested under a variety of lighting conditions. During Maker Faire, I will reset the system once in a while to re-calibrate the panels to the changing condiitions. Once a race is finished, the timer display stops and blinks the race elapsed time till the start sensor is tripped again. Hopefully, this setup will require minimal attention during the event and work as intended – ha!

Code is here and here.

AET

I help manage an event where the exhibitors submit information through a Google Form that feeds a Google Spreadsheet. With over 300 entries and 50+ columns, information retrieval became quite a challenge. This software is an attempt to amend that. The python script grabs information from the spreadsheet and posts it to a Mongo database. Currently, the data is bring posted to Mongolabs.

Code is on Github

The gspread library made the whole process seamless. As long as a gmail email address has access to the spreadsheet, everything falls in place.

python_logo.png

WI School District Data Web Scraper

I needed to create a list of all WI schools and their addresses. The WI DPI site had a lot of data but not what I needed. So, I acquired the necessary information by scraping www.greatschools.org.

Using the BeautifulSoup library docs as reference, I started gradually diving into the html. The hardest part is usually figuring out the sub class you need to scrape. Usually it’s several layers down.

First, I got all the links to the school district pages using the get_school_urls() function and wrote the output to a .csv file. Then the get_school_info() function grabs the names and address of all schools within the district and writes them to another .csv file.

I had to do some minor post processing in excel to improve data usability but it only took a couple of minutes. If I had to use this script more often, further refinement would have been done.

Code is on Github

Create Custom Vector Maps

I have been searching for ways to better document my travels. After looking around for a few map design inspirations, I came across the following example from a trek across Iceland.

I took about 3-4 days of searching, trial, and error before I found a solution that worked for me. I was able to create custom maps within Google Maps, Google Earth, and Open Street Maps but they all had issues. I did not like the busy look of all base maps and the Google services don’t export custom maps in a vector format. Open Street Maps can export vector maps but my requested area was exceeded their allowable limit. I tried a few JavaScript libraries as well but they all use the above mentioned services for map tiles and I wanted an independent file on my local machine.

So, I decided to create a map myself. I downloaded the following .SVG map of Scotland from Wikimedia.

Using Inkscape, I deleted other countries, external water bodies, and remote islands. I thought about a uniform border color but I ended up really liking the representation of water versus land boundaries.

Looking better already! Now, I did not want to sit down and manually trace my journey. Since this file doesn’t contain any geographical information, my best bet was to somehow get my path in a vector format and manipulate it into the same scale, plane, etc., as the map above.

I started by recreating the trip in Google maps engine. The train and bus journeys were easy to plot – it’s just like looking up directions in Google maps. Plotting a hike was a little bit more complex since I did not record my GPS location. I was lucky to find a .KML file from a better prepared hiker through a Google search and imported it into Google maps engine without any issues. I exported the .KML file when I was done.

The file was saved as a zipped .KML (.KMZ ) file so I used Google Earth to save it as a .KML. This is starting to sound like an ad for Google. I swear I am not a shill – Ask Jeeves is a much better search engine, see!

custom_vector_map_5.png

The .KML file was processed into an .SVG using my new best friend, Indie Mapper.

Since I only cared about the lines, I deleted the description and points using the menu on the left. Remember kids, always, and I mean always, read documentation. I spent a whole day scaling, rotating, skewing, bargaining, manipulating nodes, punching walls, trying to match the path output to the map from above. If I had simply read on the Wikimedia page, that the map had a Equirectangular projection and was scaled 170% in the N/S direction, I wouldn’t be writing this at 4AM in the morning. You can change the projection within Indie Mapper. Scaling was easily done in Inkscape later.

Export the file as a .SVG.

Yay! on three everyone yell, Compatible! Compatible! Compatible! Make sure you are alone.

Upon path import, the first step was to scale the height only by 170% to match the map’s relative coordinates. Then, the height and width were scaled proportionally till they “looked right.” I compared the relative location of the path to ocean and lakes (I really should say “Lochs”) in Inkscape versus Google maps so make sure everything looked right. Since I had the right relative dimensions, it only look a couple of minutes and Voila!

I manually colored the hike in green and motorized travel in red. If I decide to laser cut this file, I’ll vector “burn” the border and water bodies on lower power versus the path. I’ll keep playing around with the design and maybe add day hikes as well but I am happy with the results for now!

IBC Tote Aquaponics

A friend and I built an aquaponics system in 2012 for his basement.

Aquaponics is a mixture of hydroponics (soil-less agriculture) and fish aquaculture (hence the cat’s laser-like focus). It is a symbiotic process, where the fish’s organic waste fertilizes the plants, and in return are supplied with filtered water. The only system input is fish food.

The two (2) black plastic boxes pictured above used to be one (1) 330 gallon IBC tote, which are usually used to store and transport fluid and other bulk materials. We cut the container about two-thirds of the way up. The larger bottom tank held 40 yellow perch at the beginning – it can support about 80-90 fish. Water from the fish tank is pumped through the black pipe in 10 minute on/off cycles to the grow bed above. An Arduino housed in the blue box to the right controls the pump and also monitors water temperature. We planned on adding sensors to monitor the water chemistry (pH, nitrates, etc.) but never followed through.

aqua_3.png

The grow bed is media based. In other words, we use a mixture of rocks and expanded clay (the red stuff) to support the plant’s roots and act as a bio-filter to filter the water and convert fish waste (ammonia and nitrites) into plant food (nitrates). The filtered water falls back to fish tank through the PVC pipe (there are several small holes under the rock), which introduces oxygen via percolation and completes the mostly closed-looped cycle. A set of six (6) full spectrum T5 lamps provide the artificial light. The first crop of tomatoes, radishes, pepper, lettuce, and some wicked cucumbers is sprouting in the plastic containers and was planted within the media within a day or two.

Like most makers, the project lost our attention after it was finished. Before the system was disassembled and sold in 5-6 months, some of the crops were about 6-7 feet high!