On a recent trip, I visited the Canterbury Museum the day before the Da Vinci Mechanics exhibit opened. Fortunately, the museum entry was free and I returned the next day. Over 60 models were on loan from the Museum of Leonardo da Vinci in Florence, Italy. Da Vinci physically made very few of these models. They have been recreated from diagrams extracted from his notes.
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.
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.
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.
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.
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.
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.
I used the spline interpolation tool and added the shaft and alignment holes to finish the cam profile!
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.
I came across a description for a Kinetic Sculpture: "Sine Machine" on Instructables. This was just a proposal so I thought it would be fun to make a real-life version of this. I want to build a 10 foot wide version but first we must prototype!
I started by building a CAD model of the cam and follower in Inventor.
I exported the components and compiled them into a .DXF file to be cut by the laser cutter at the Milwaukee Makerspace. The cams have a center hole for the shaft and a second alignment hole. As you can see, the alignment holes are offset by 30 degrees to the previous one to form a wave pattern.
A healthy dose of laser cutter was applied to 5mm Underlayment from Homedepot. #8-32 threaded rod was used for the shaft. The washers used as spacers and to reduce friction ended up covering the alignment holes so I manually aligned the cams. I am glad I prototyped so I won't make this mistake the next time...hopefully.
I inserted some nylon bushings into a some plywood legs. The legs were glued to a plywood base.
And the .GIF of the mechanism in action. The cam profile is not a true sine wave and that be seen in the deflection profile.
If I keep moving forward with this project, the next version will be about 24 times larger!
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.
Code is on Gist.
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.
After the race, we drilled a hole in the tiller to accept the autopilot pin and packed up the food and other supplies.
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.
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.
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.
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
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.
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!
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!
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.
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!