tag:blogger.com,1999:blog-143168322024-03-15T18:09:21.154-07:00Over EngineeredMy projects from woodworking to electronicsKenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.comBlogger111125tag:blogger.com,1999:blog-14316832.post-82738150651439810522018-01-28T07:33:00.002-08:002018-01-28T07:33:24.571-08:00Making a Traditional Joiner's Mallet<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i9.ytimg.com/vi/qcHAIS3Pfu8/default.jpg?sqp=CLzVrtMF&rs=AOn4CLB5JQCjXsjKGFD0RRZu6SmzzTmtzw" frameborder="0" height="270" src="https://www.youtube.com/embed/qcHAIS3Pfu8?feature=player_embedded" width="480"></iframe></div>
<br />
<br />
The next step of my hand tool journey was to make a traditional joiner's mallet. The joiner's mallet is obviously used for hitting things, but mainly for striking the handle of a chisel when chopping mortises.<br />
<br />
The typical style for this mallet is a rectangular head with a handle through the middle. The Woodwright's Shop has a good episode (Season 37, Episode 6) on making this type of mallet. Paul Seller's also has a <a href="https://www.youtube.com/watch?v=u31Ixu6mSHY">great series of videos</a> on making these, and that's generally the process I followed.<br />
<br />
I used <a href="https://blog.lostartpress.com/2017/06/26/the-son-of-roy-underhills-mallet/">some plans</a> that were created by Chris Schwarz based on a mallet made for him by Roy Underhill. It's based on traditional joiner's mallets that have been used for centuries.<br />
<br />
I made the mallet head from a live oak log given to me by a friend. It spent a few years drying in my garage before I started working on it. The handle is made from ash that I cut from a tree in my yard. The live oak is really difficult to work with due to its density and the interwoven grain, but it looks beautiful and is very durable. The ash was a dream to work with by contrast.<br />
<br />
I learned alot of new techniques with this project:<br />
<br />
<ul>
<li>Working with difficult grain</li>
<li>Working with very hard wood</li>
<li>Splitting logs with a wedge and sledge</li>
<li>Turning logs into lumber</li>
<li>Cutting deep tapered mortises</li>
</ul>
<div>
I'm very happy with the end result. I've been using the mallet almost every day for weeks and it's been a joy to use. I'd highly recommend this as a beginning project for new woodworkers. Not only do you learn alot in the process, but you get a new tool with a centuries-old lineage.</div>
<br />
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-53770296522458782572018-01-22T11:39:00.000-08:002018-01-22T11:39:29.467-08:00Homemade Christmas Ornament<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i9.ytimg.com/vi/DcPdwdWW_Xc/default.jpg?sqp=CLj3mNMF&rs=AOn4CLCgcaTXcGyABHuh5uoV-CFpoglg-Q" frameborder="0" height="270" src="https://www.youtube.com/embed/DcPdwdWW_Xc?feature=player_embedded" width="480"></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
My wife and I give each other Christmas ornaments every year. This year I decided to make the ornament. This was my version of <a href="https://www.youtube.com/watch?v=HpomDqYlo0Y">a design from Paul Sellers</a>. Paul's is much better than mine, but it went pretty well and was alot of fun to make. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
It's quick to make, you can use wood scraps you probably already have on hand, and it exercises several different hand tool skills.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Oh, and my wife really liked it. Thanks Paul!</div>
Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-23702559976449686612018-01-22T11:24:00.002-08:002018-01-26T18:45:20.305-08:00Tuning up a Hand Plane<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/8Du3MWgHagU/0.jpg" frameborder="0" height="270" src="https://www.youtube.com/embed/8Du3MWgHagU?feature=player_embedded" width="480"></iframe></div>
<br />
I tuned up a seldom-used hand plane recently to give to a friend. This was a plane that I had been sitting on a shelf for a number of years, and I hadn't used it mainly because I'm too picky. It's a decent plane but it has plastic handles, and I prefer wood.<br />
<br />
Then a friend started asking me questions about flattening rough lumber; the sorts of questions that make me talk for a long time. He politely listened to what I had to say and as a reward I decided that this plane would find a better home with him.<br />
<br />
So before I sent it to its new home I tuned the plane up to the best condition I could make it. The video above walks through everything I did. There are lots of different ways to rune up a plane, and this is just the steps that work for me. Your mileage my vary.Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-42433885162809754702017-11-29T21:31:00.003-08:002017-12-01T11:50:33.260-08:00A Free Bandsaw RebornI spent the last week or so cleaning up and repairing the <a href="http://sharpk60.blogspot.com/2016/08/a-free-band-saw.html">free bandsaw I got a while back</a>. It's a 12 inch Craftsman bandsaw made during the 80s.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i9.ytimg.com/vi/XmW_0rRiDKE/default.jpg?sqp=CJyw69AF&rs=AOn4CLCjNLV_NJsWdq71s2Qm_RuX_xqDiw" frameborder="0" height="270" src="https://www.youtube.com/embed/XmW_0rRiDKE?feature=player_embedded" width="480"></iframe></div>
<br />
<br />
The saw ended up being in pretty good shape, it just needed tons of cleaning. I took the entire band saw apart down to the nuts and bolts, cleaned it, and re-assembled it. The wheel bearings were in decent shape. I re-packed one of the bearings with grease since the original grease had fossilized.<br />
<br />
The original table insert had gone missing and a replacement insert costs more than I think it's worth so I made my own using a fly cutter on my drill press to cut a circular insert out of one-eighth inch hardboard.<br />
<br />
The only thing that truly needed to be replaced was the band saw tires, since they were both in some state of disintegration. The motor belt was a bit worn which I suspect was adding some additional vibration to the machine, so I replaced it as well. Even the blade wasn't in terrible shape.<br />
<br />
The final report is that it cuts pretty well even up to around 4" thick wood. I haven't tried anything thicker yet, but the motor doesn't seem to strain. All told I spent about $30 in parts. Not bad for a decent band saw.<br />
<br />
I did eventually invest in a 3tpi blade to try out the re-saw capability. The new blade cuts through wood like butter; now I just need to make a resawing sled so I can start to saw small logs into boards. But that is a post for another day...<br />
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-39145647853259104212017-11-26T06:56:00.000-08:002017-11-26T06:56:35.201-08:00A Free Roller CabinetI was walking in my neighborhood the other day and came across a decrepit roller cabinet that someone had put out for the trash. It was one of those bright red sheet metal things that mechanics use (or at least I assume mechanics use them, but maybe that's a stereotype).<br />
<br />
I had planned on building some kind of a stool or small table to hold up a toolchest that I'll also be building soon. But maybe I can use this sheet metal thing instead and save myself some effort, and keep something out of a landfill too.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i9.ytimg.com/vi/kFzhvNAhKV4/default.jpg?sqp=CLiW69AF&rs=AOn4CLCH8_fvB3jpqoYT5Cxy-KahC7X13g" frameborder="0" height="270" src="https://www.youtube.com/embed/kFzhvNAhKV4?feature=player_embedded" width="480"></iframe></div>
<br />
<br />
Before I could use it, the cabinet needed some attention. The cabinet door was included but was off its runners and just lying inside the cabinet. The drawer runners were a little mis-aligned. The bottom of the cabinet was pretty rusty. And the casters looked like they had been replaced at some point but rather than drill new holes for the casters, they had just put one bolt through one (of four) mounting holes in the caster.<br />
<br />
I worked on the drawer and cabinet door runners and got them working properly again. The casters it came with were in good shape, they just needed proper mounting holes drilled. I sanded off the rusty parts of the bottom of the cabinet and sprayed on a coat of red gloss paint for protection.<br />
<br />
It's still a little ugly but the cabinet works now and I've already found some uses for it around the shop.<br />
<br />
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-10156853367338825402017-10-01T19:40:00.001-07:002017-10-01T19:47:35.456-07:00Workbench Add-ons<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i9.ytimg.com/vi/sl3h-K7M4R0/default.jpg?sqp=CJyosc4F&rs=AOn4CLB7P_30rvjr5fH0Fm9G-5lzmW2tbA" frameborder="0" height="270" src="https://www.youtube.com/embed/sl3h-K7M4R0?feature=player_embedded" width="480"></iframe></div>
<br />
After <a href="http://sharpk60.blogspot.com/2017/06/workbench-complete.html">building my workbench</a>, I needed a few extra accessories to help out with various tasks.<br />
<br />
<b>Holdfast Pads</b><br />
I bought some <a href="https://www.toolsforworkingwood.com/store/item/MS-HOLDFAST.XX/Holdfasts_by_Gramercy_Tools">holdfasts from Gramercy</a>. Check out the video if you're unsure what a holdfast is; it will likely revolutionize your woodworking. I really like the holdfasts but if you don't put something between the foot of the holdfast and your workpiece it could dent or otherwise mar your workpiece. Most people put a small block of scrap wood between the holdfast and the work piece, but I decided to attach a permanent leather pad to the foot of the holdfast. This way I will never forget to protect the workpiece.<br />
<br />
<b>Planing Stop</b><br />
Next I created a very simple planing stop out of some oak dowels and some scrap wood. When the planing stop is dropped into a pair of holes in the bench it creates a brace for face planing a board.<br />
<br />
<b>Doe's Foot</b><br />
A <a href="https://www.popularwoodworking.com/woodworking-blogs/chris-schwarz-blog/hail-versatile-foot">doe's foot</a> is a thin batten used to secure a workpiece. I made a really simple one by cutting a 90 degree notch in a scrap of quarter inch plywood.<br />
<br />
<b>Bench Hook</b><br />
I made a bench hook based on a design by <a href="https://www.youtube.com/watch?v=-Ypbvcxb-8M">Paul Sellers</a>. This accessory is used for securely holding a workpiece while crosscutting it. This design also has the advantage of working as a shooting board which is useful for sneaking up on perfect 90 degree cuts on a workpiece.<br />
<br />
<b>Holdfast Vise</b><br />
The last piece of equipment is probably the least common one, and I'm not sure when it was invented. It's quite possible that it's a recent addition. I'm calling it a holdfast vise, and it's really a way of using two holdfasts and a block of wood to replace the face vise that workbenches usually have. The main use for it is when you want to hold a board vertically, like when you are cutting dovetails. I based my design on <a href="http://kapeldesigns.blogspot.com/2014/08/the-nicholson-bench-with-holdfast-vice.html">this one</a>.<br />
<br />
<br />
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-54970342573275998992017-08-16T07:44:00.002-07:002017-08-16T07:44:47.484-07:00Adafruit PiGRRL 2 Review<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/SOzispdv64Y/0.jpg" frameborder="0" height="270" src="https://www.youtube.com/embed/SOzispdv64Y?feature=player_embedded" width="480"></iframe></div>
<br />
Last year I got a <a href="https://www.adafruit.com/product/3014">PiGRRL 2 kit</a> as a gift and just recently assembled it. Overall, I was pretty impressed with the kit.<br />
<br />
The instructions were accurate, and very complete. Much of the assembly process involved soldering, and while I'm an experienced solderer, I think the instructions would be sufficient if you are a beginner when it comes to soldering. <br />
<br />
The kit provides nearly everything you need except for the plastic case, but Adafruit provides the files necessary to 3d print your own. I don't have a 3d printer (yet) so I had a generous friend print the case for me.<br />
<br />
My only significant complaint with the kit involves, surprisingly, the screws. The kit didn't come with the required screws, so I substituted some screws I already had on hand. I ended up having a number of problems because in some cases the screws were a little too long (and would have pushed through the case) and in other cases the heads of the screws I used were a little too wide so they didn't fit into some recesses in the 3D printed case. In the end, I was able to work around these issues by cutting off the ends of the screws and drilling out some of the recesses, but since the case was clearly designed for a specifically sized screw it would have been nice if those were included in the kit.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-w5ni7J5vtAw/WZRWtxzmkEI/AAAAAAAAD4U/R3KenfTC-vIE4kZRHgZJh5eFX5KXF1z0wCKgBGAs/s1600/IMG_20170803_212443325_HDR.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1200" data-original-width="1600" height="300" src="https://3.bp.blogspot.com/-w5ni7J5vtAw/WZRWtxzmkEI/AAAAAAAAD4U/R3KenfTC-vIE4kZRHgZJh5eFX5KXF1z0wCKgBGAs/s400/IMG_20170803_212443325_HDR.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The PiGRRL 2 without its clothes</td></tr>
</tbody></table>
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-5211093517172682092017-06-24T08:11:00.001-07:002017-06-24T08:11:41.185-07:00Workbench complete!<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/NX0_pS_sezw/0.jpg" frameborder="0" height="270" src="https://www.youtube.com/embed/NX0_pS_sezw?feature=player_embedded" width="360"></iframe></div>
<br />
<br />
I finally completed my Knockdown Nicholson workbench. I previously posted about my chicken-and-egg problems of <a href="http://sharpk60.blogspot.com/2016/11/building-workbench-without-workbench.html">building a workbench without a workbench</a>. With many projects I get to the last little bits of it and I have to drag myself over the threshold to completion as my motivation wanes, but for this project it stayed fun through the whole process so I kept making steady progress and it never felt like a chore.<br />
<br />
<a href="https://blog.lostartpress.com/2014/09/08/download-free-plans-for-the-knockdown-nicholson-workbench/">This bench</a> was designed by Chris Schwarz based on a much older design by <a href="https://en.wikipedia.org/wiki/Peter_Nicholson_(architect)">Peter Nicholson</a>. While the plans for the workbench are free, I would highly recommend getting a copy of the <a href="http://www.shopwoodworking.com/popular-woodworking-magazine-november-2015">November 2015 issue of Popular Woodworking</a>, since that has step by step instructions which will greatly simplify the process of constructing the bench.<br />
<br />
This bench has no vice and is intended to be used primarily with hand tools. An ancient tool called a <a href="https://en.wikipedia.org/wiki/Hold_fast">holdfast</a> is used to hold work pieces while you work on them. There are also a few other bench appliances that I made that help to perform various operations on the bench. I'll make a separate video on that in the future.<br />
<br />
I won't really go into detail on the construction since I think the article referenced above does a better job than I could. But I can say that I've done a bit of work on the bench now that it's finished and it's a joy to work on; everything is securely held and that just makes every operation on the bench that much more fun. It's feels like a case of having the right tool for the job; this bench is the right tool to pair with hand tools.Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-79051657478660240232017-05-30T16:59:00.000-07:002017-05-30T16:59:21.333-07:00Brewing beer with a Sous Vide cooker, Round 2<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/slekNyC0QUk/0.jpg" frameborder="0" height="270" src="https://www.youtube.com/embed/slekNyC0QUk?feature=player_embedded" width="480"></iframe></div>
<br />
<br />
I decided recently to make another go at brewing beer with my Anova Sous Vide cooker. The <a href="http://sharpk60.blogspot.com/2014/12/brewing-beer-with-sous-vide-cooker.html">first time went pretty well</a>, but I had a few new ideas I wanted to try this time around.<br />
<br />
Last time I found that the grain bag had a tendency to get pulled into the impeller on the sous vide cooker. It tended to happen slowly but I had to keep checking and move the bag away from the impeller. I thought trying to partition the brew pot with a stainless steel grate might fix this problem, so I got a stainless steel cooling rack and tied it into place in the brew pot.<br />
<br />
I also found that every time I wanted to brew with the sous vide I had to do a page of hand calculations to make sure that the batch would fit in the pot and still fall between the min and max line of the sous vide cooker after adding grains. To help with this problem I created a simple javascript calculator to do all the tedious calculations for me. The calculator is <a href="http://sharpk60.blogspot.com/p/sous-vide-brewing-calculator.html">available here</a> and is free for anyone to use. Let me know if you use it and have any feedback.<br />
<br />
The beer I brewed turned out well but the conversion efficiency was a bit low because I had too much grain in the pot. I failed to account for how little room there would be in the pot after installing the partition.<br />
<br />
I learned alot from this batch and my new ideas worked out reasonably well. The partition system worked very well besides my failure to account for the reduced grain capacity with the partition installed. To help with this in the future I added a partition percentage option to my calculator so that I can avoid having a grist to water ratio that is too high for good conversion efficiency.Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-69161454876918539912017-05-12T12:57:00.001-07:002017-05-12T12:57:43.790-07:00Donut Counting with LabVIEW and BeagleBone Black<div class="separator" style="clear: both; text-align: center;">
<a href="https://github.com/sharpk/lv-donut-counter/raw/master/donut-cntr-overview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="252" src="https://github.com/sharpk/lv-donut-counter/raw/master/donut-cntr-overview.png" width="400" /></a></div>
<br />
<br />
While creating tutorials for the LabVIEW Web Services feature of LINX, I needed a simple real-world example application. I think I came up with one of the dumbest possible projects to serve that purpose.<br />
<br />
Where I work, there is a long-standing tradition to bring in donuts when making some announcement. So when we released LabVIEW support for Raspberry Pi and BeagleBone Black devices, I wanted to combine donuts with one of those devices in some way. I also wanted to make the project electrically simple and easy from a software perspective as well.<br />
<br />
What I came up with is a BeagleBone Black serving up a web page that shows how many donuts are remaining in a donut box.<br />
<br />
The circuit is super simple, it's just a photo-resistor hooked up to one of the analog inputs of the BBB. The LabVIEW application detects that the box lid is open or closed based on reading the resistance of the sensor, and then implements a simple state machine that decrements a counter when the box lid is opened and then closed (I assume that each person is only taking one donut). The LabVIEW app then serves up a static web page that displays the current donut count that accesses the current counter value via a LV web service. There is also a LV web service method that allows you to set the current count value so you can input the initial number of donuts in the box.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://github.com/sharpk/lv-donut-counter/raw/master/circuit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="350" src="https://github.com/sharpk/lv-donut-counter/raw/master/circuit.png" width="400" /></a></div>
<br />
<br />
It's definitely a silly toy application, but I think it serves as a simple example of LabVIEW Web Services that interfaces to real-world I/O. All of the <a href="https://github.com/sharpk/lv-donut-counter">source code is available on github</a>.<br />
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-30708330168011638442017-04-02T18:01:00.002-07:002017-04-02T18:01:54.899-07:00LabVIEW Web Services on BBB/RPiIt's been some time since it released to the public but I'd like to talk through some of the technical details that make LabVIEW Web Services (LVWS) work on the Raspberry Pi and BeagleBone Black.<br />
<br />
<b>Background</b><br />
LabVIEW has had support for Web Services for many years, The basic idea is that a VI can be automatically turned into a REST interface and served up via an HTTP server built-into the LabVIEW run-time engine. This allows an easy path to creating a web-enabled LabVIEW application.<br />
<br />
Although we didn't have LabVIEW Web Services enabled in the intial release of the LabVIEW support for BBB and RPi, we knew how important it would be to have a way to create web interfaces for their embedded LabVIEW applications, which are generally headless (no local user interface). So as soon as we released LINX 3.0, we immediately started work on getting LVWS working, and after a few months of work we released the support to the community as an update to LINX. Along with that we even created <a href="https://www.labviewmakerhub.com/doku.php?id=learn:tutorials:libraries:linx:3-0:web-services">a tutorial</a> to introduce this new capability to the community.<br />
<br />
<b>Removing NIAuth</b><br />
The NIAuth system is a PAM module that allows for creating users and setting permssions through the NI Measurement and Automation Explorer (MAX). MAX isn't supported on BBB/RPi because we have a more focused Target Configuration tool which is more appropriate for these devices. We also are less focused on users and permissions for these targets so it made sense to simply remove the NIAuth tie-ins in LVWS for these devices. This proved to be more work than we thought because there were a number of assumptions in the code that depend on NIAuth being present. In the end, this was the majority of the work required to get LVWS up and running.<br />
<br />
<b>HTTPS Support</b><br />
One of the features of LVWS is the ability to enable HTTPS to allow for secure web service access. Unfortunately, the HTTPS support didn't work "for free", and so we made the decision to release LVWS support without working HTTPS support. Sorry, we tried. We'll probably get back around to this at some point but no promised ETA.<br />
<br />
In the meantime, one of my colleagues came up with a clever way to "wrap" HTTPS support on LVWS in order to get LabVIEW to work with the Amazon Alexa service. <a href="https://www.hackster.io/labview-makerhub/alexa-ask-labview-860b22">The tutorial</a> is a great one to read in general, but you can re-use the httpsHelper Node.js script to wrap your own custom LV web service.<br />
<br />
<b>A UI for your BBB/RPi</b><br />
Usually the next thing users ask when learning about LabVIEW Web Services is how to create a UI that access the LVWS. You can access the web service with a web browser (for HTTP GET methods) or the curl utility (for HTTP POST methods). This is very useful for debugging, but is probably not sufficient for a real user interface. One method is to create a static web page is using HTML and Javascript that calls your LVWS to read or write data, but many users aren't too interested in learning a text-based programming language and HTML when they're already using a graphical programming language in LabVIEW. <a href="https://www.labviewmakerhub.com/doku.php?id=learn:tutorials:libraries:linx:3-0:web-services">This tutorial</a> uses HTML and Javascript to create a web-based UI.<br />
<br />
<b>Data Dashboard</b><br />
Data Dashboard is a free mobile app available for iOS and Android (tablets, not phones) that gives you a pretty nice UI design tool. Data Dashboard can interface directly with LVWS to allow creating a mobile-friendly a UI. As a side benefit of the work we had already done to enable LVWS, the Data Dashboard app worked with Raspberry Pi and BeagleBone Black targets. This is a really nice option for users that want to avoid doing any text-based HTML or Javascript coding. We created <a href="https://www.labviewmakerhub.com/doku.php?id=learn:tutorials:libraries:linx:3-0:data-dashboard">a tutorial</a> on how to use LVWS with Data Dashboard.<br />
<br />
<b>Calling REST interface with the LV HTTP VIs</b><br />
Another way to create a web-based UI for a LabVIEW app <a href="https://www.labviewmakerhub.com/forums/viewtopic.php?f=11&t=1862">came from the Makerhub Forums</a>. The basic idea is that you create an LVWS interface for your LabVIEW app running on a RPi or BBB, and then create a client LabVIEW app on a desktop machine that interfaces to the target's LVWS interface using the LabVIEW HTTP VIs. The upside to this strategy is that you can once again avoid coding HTML or Javascript, but the downside is that you must have LabVIEW running on the client device, which precludes having this UI on devices like smartphones.<br />
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-84035634938259176602016-11-07T19:15:00.000-08:002016-11-08T10:28:42.791-08:00Building a workbench without a workbench<div class="separator" style="clear: both; text-align: left;">
I've been learning to use hand tools and I've quickly realized that a good workbench is essential. With power tools, like a table saw or drill press, the tool itself often supports the wood. But with hand tools you must have something to support the wood while you bring the tool to the wood.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
So I've started to build a workbench (more on that later). The first problem I've run into is that I'm using hand tools to build a workbench, so... Chicken or the egg...</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Here's some tricks that I've come up with to hold boards while I work on them.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-l5EWx9e0eIg/WB9yqir3GVI/AAAAAAAABNo/osz7HeBdu98nNiTW3FEmdsEnF3pSV9hVACLcB/s1600/IMG_20161106_114753820%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://3.bp.blogspot.com/-l5EWx9e0eIg/WB9yqir3GVI/AAAAAAAABNo/osz7HeBdu98nNiTW3FEmdsEnF3pSV9hVACLcB/s400/IMG_20161106_114753820%255B1%255D.jpg" width="223" /></a><a href="https://1.bp.blogspot.com/-7-eH9G16k4A/WB9ynG25f-I/AAAAAAAABNk/w-78n1blVSkbPrl6TxcIYmjN468dVhfSgCLcB/s1600/IMG_20161106_114830220%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://1.bp.blogspot.com/-7-eH9G16k4A/WB9ynG25f-I/AAAAAAAABNk/w-78n1blVSkbPrl6TxcIYmjN468dVhfSgCLcB/s400/IMG_20161106_114830220%255B1%255D.jpg" width="223" /></a></div>
The simplest trick is to use a table against a wall stud. The board butts up to the stud for face planing. The board can be offset from the wall stud with scrap wood so that you can plane up to the end of the board without running the plane into the stud. If the board is long, the far end can be supported with a sawhorse.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-WC2bSwLAYZ8/WB9ysRHqI6I/AAAAAAAABNs/I45lAxpJ8yseyjNMIxB6JRGBAQHhf3kCQCLcB/s1600/IMG_20161106_114650527_HDR%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://4.bp.blogspot.com/-WC2bSwLAYZ8/WB9ysRHqI6I/AAAAAAAABNs/I45lAxpJ8yseyjNMIxB6JRGBAQHhf3kCQCLcB/s400/IMG_20161106_114650527_HDR%255B1%255D.jpg" width="223" /></a><a href="https://4.bp.blogspot.com/-rWAjxadlO60/WB9yvycvNbI/AAAAAAAABNw/DLTfak7WY2MnUuUfgo0N_ipPVvWV8PXfQCLcB/s1600/IMG_20161106_114630015_HDR%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://4.bp.blogspot.com/-rWAjxadlO60/WB9yvycvNbI/AAAAAAAABNw/DLTfak7WY2MnUuUfgo0N_ipPVvWV8PXfQCLcB/s400/IMG_20161106_114630015_HDR%255B1%255D.jpg" width="223" /></a></div>
If the board is the same thickness or thinner than the scrap wood blocks then I've found it handy to put a small wedge under the board to raise it above the level of the scrap blocks.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-NshAR7X7r-U/WB9yk9Sn5TI/AAAAAAAABNg/dWYHsOgxxzgF8mk0fe7DH0uwoY6eKdK4gCLcB/s1600/IMG_20161106_115129961%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://2.bp.blogspot.com/-NshAR7X7r-U/WB9yk9Sn5TI/AAAAAAAABNg/dWYHsOgxxzgF8mk0fe7DH0uwoY6eKdK4gCLcB/s400/IMG_20161106_115129961%255B1%255D.jpg" width="223" /></a><a href="https://1.bp.blogspot.com/-SMd7Kxi3jyk/WB9yiVxQ9iI/AAAAAAAABNc/gtBvFRZYtWoOwHQAdfzNToh5q3l511pUACLcB/s1600/IMG_20161106_115143321%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://1.bp.blogspot.com/-SMd7Kxi3jyk/WB9yiVxQ9iI/AAAAAAAABNc/gtBvFRZYtWoOwHQAdfzNToh5q3l511pUACLcB/s400/IMG_20161106_115143321%255B1%255D.jpg" width="223" /></a></div>
The last trick is useful for edge planing a board. Turn the board on edge and butt it against the scrap wood blocks and wall stud, as before. Then to secure it in place I put more scrap wood blocks on either side of the board and clamp them in place to keep the board from tipping in either direction.<br />
<br />
These tricks work, but they're not ideal, and it's really making me look forward to when the bench will be done and ready to use.Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-46136704754375687152016-11-06T11:39:00.003-08:002016-11-06T11:44:06.789-08:00Things I've learned about the lowly block plane<br />
As part of my workbench build, I've been planing some end grain after making crosscuts on boards. The usual tool for this job is the often overlooked block plane. I've found that it's pretty hard to plane edge grain well!<br />
<br />
The problem is when planing end grain you are cutting across all the wood fibers, instead of splitting off a few long wood fibers as you do when planing with the grain.<br />
<br />
Here's that I've figured out so far:<br />
<ul>
<li>Make sure the plane blade is as sharp as possible. This is always true, but with other planes you can get by with a less than razor-sharp blade</li>
<li>Set the depth of the plane blade to take a <i>very</i> shallow cut, otherwise the plane will be hard to push and may chatter.</li>
<li>It helps to make a skew cut on the end grain (turn the plane at a 45-ish degree angle to the board)</li>
<li>Soak the end grain with a bit of alcohol to soften the wood fibers</li>
<li>Make sure you're putting enough downforce on the front of the plane. If you have too much force on the back of the plane then it may cause the blade to chatter</li>
<li>If the plane has an adjustable mouth, adjusting it to make the opening smaller helps with making shallow cuts</li>
<li>If you have one available, use a low angle plane, as the lower angle of the blade makes it significantly easier to cut end grain.</li>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-nK4zYNaNDQs/WB8tULxuaoI/AAAAAAAABMk/Sm3Vsa5GaTQD-IoeQEPKNq8WZ2eTY7jVQCLcB/s1600/IMG_20160718_213257713_HDR.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://2.bp.blogspot.com/-nK4zYNaNDQs/WB8tULxuaoI/AAAAAAAABMk/Sm3Vsa5GaTQD-IoeQEPKNq8WZ2eTY7jVQCLcB/s400/IMG_20160718_213257713_HDR.jpg" width="223" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A fine tool, but maybe not for planing end grain</td></tr>
</tbody></table>
<br />
I started off with my vintage block plane, which is basically a Sargent 306. It's a good plane but adjusting it to cut end grain well was tricky. There were several issues with that plane:<br />
<ul>
<li>The depth adjuster had alot of backlash, meaning it was hard to get a really precise depth adjustment</li>
<li>Locking the blade with the lever cap tended to change the depth and lateral adjustment of the plane a little, which usually meant it took several tries to get it properly adjusted</li>
<li>The plane is not a low angle plane</li>
</ul>
<div>
<b><br /></b>
<b>A New Plane</b></div>
<div>
Just when I was getting frustrated, I lucked out and my Mom found a vintage Stanley no. 60-1/2 low angle block plane at an antique store (Thanks Mom!). It needed a little work to tune it up, but it was in good shape.</div>
<div>
<br />
When I tune up planes I usually clean the grime and rust off, but leave some of the patina that makes it look old. This is less work and in my opinion looks better anyway. Some people prefer to make the plane look like the day it rolled out of the factory, but that's more than is required to make the plane <i>function</i> like it's brand new.<br />
<br /></div>
<div>
Here's a few before and after pictures:</div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-i6tSSGaAfmE/WB9wtfmBdLI/AAAAAAAABNA/J3sgUzClOIc1pAXMTJd4P0yAamif_x1BgCLcB/s1600/plane__overall.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="380" src="https://3.bp.blogspot.com/-i6tSSGaAfmE/WB9wtfmBdLI/AAAAAAAABNA/J3sgUzClOIc1pAXMTJd4P0yAamif_x1BgCLcB/s400/plane__overall.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Top: before, Bottom: after. Not much difference visibly except there was lots of paint and grime in the knurling and threads of the depth adjuster. I cleaned that out with a dental pick.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-ikpeXtFTDeE/WB9wuTF6gMI/AAAAAAAABNM/hSGWW5WRg9Y3FNE-QaJy1r038dtIELOOQCLcB/s1600/plane_parts.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://3.bp.blogspot.com/-ikpeXtFTDeE/WB9wuTF6gMI/AAAAAAAABNM/hSGWW5WRg9Y3FNE-QaJy1r038dtIELOOQCLcB/s400/plane_parts.jpg" width="318" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Again not much visible difference except that the blade was previously coated with lacquer or paint to protect it from rust, I guess.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-IGXdjlcjG6o/WB9wtFNU5LI/AAAAAAAABM8/RA6Z1ZPZ89cTXsNkj_QxROWAcKJrBLgNACLcB/s1600/blade_edge.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="197" src="https://4.bp.blogspot.com/-IGXdjlcjG6o/WB9wtFNU5LI/AAAAAAAABM8/RA6Z1ZPZ89cTXsNkj_QxROWAcKJrBLgNACLcB/s400/blade_edge.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The blade was sharpened with quite a bit of skew. I straightened it out on the grinder.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-4HoU0HUUNNY/WB9xYHxNopI/AAAAAAAABNQ/cOYUixenGwIR1KfhUEEc5E6WaIPqaa_rQCLcB/s1600/IMG_20161031_225652629_HDR.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://4.bp.blogspot.com/-4HoU0HUUNNY/WB9xYHxNopI/AAAAAAAABNQ/cOYUixenGwIR1KfhUEEc5E6WaIPqaa_rQCLcB/s400/IMG_20161031_225652629_HDR.jpg" width="223" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">After flattening and polishing the back of the blade. There is a bit of pitting, but nothing catastrophic.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-pUT6BS-AkXg/WB9wt-HbOHI/AAAAAAAABNI/AETQ-lhhLHE7cSq_SZijctuEleT8IdouwCLcB/s1600/plane_bed.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="178" src="https://2.bp.blogspot.com/-pUT6BS-AkXg/WB9wt-HbOHI/AAAAAAAABNI/AETQ-lhhLHE7cSq_SZijctuEleT8IdouwCLcB/s400/plane_bed.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The plane sole was in pretty good condition. I made sure it was flat and shined it up a bit.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-OaoRhBIB3B0/WB9wtoCgx8I/AAAAAAAABNE/i-M0bNw7dDQsbJ1YdJ7TQoOPBKyx-7XIwCLcB/s1600/IMG_20161102_224801538.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://2.bp.blogspot.com/-OaoRhBIB3B0/WB9wtoCgx8I/AAAAAAAABNE/i-M0bNw7dDQsbJ1YdJ7TQoOPBKyx-7XIwCLcB/s400/IMG_20161102_224801538.jpg" width="223" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The first cut: works like a champ!</td></tr>
</tbody></table>
<br />
<br /></div>
<div>
You never quite know how good a plane is going to be until you're done tuning it up, but this one turned out really well. Here's the payoff:</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/KfYve83fDY8/0.jpg" frameborder="0" height="399" src="https://www.youtube.com/embed/KfYve83fDY8?feature=player_embedded" width="480"></iframe></div>
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-74220209279726613492016-08-22T18:57:00.000-07:002016-08-22T18:57:45.706-07:00A free band sawThanks to my wife's keen eye on our neighborhood message board, I just scored a FREE band saw. It seems that someone was cleaning out their garage and just wanted to get it out of their ASAP. It's a Craftsman 12" band saw from the 80s.<br />
<br />
Check out the pictures below. It needs one new tire and a new table insert (which I might be able to make myself). It seems like the bearings are in good shape, the tensioner works, and the motor runs. So after some cleaning, lubricating, adjusting, and $30-40 in parts it should be in good shape again.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-S8bnuD_CTm4/V7t_zTIEv_I/AAAAAAAABLI/gvudFc6Q8QcvPL1_EomxZ-ku_-Z3IVkbACLcB/s1600/IMG_20160821_100525436.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://2.bp.blogspot.com/-S8bnuD_CTm4/V7t_zTIEv_I/AAAAAAAABLI/gvudFc6Q8QcvPL1_EomxZ-ku_-Z3IVkbACLcB/s400/IMG_20160821_100525436.jpg" width="223" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">This is after I brushed off the loose dirt and cobwebs</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-MgYajoWPfMs/V7t_7EkwTmI/AAAAAAAABLM/DmGwsu6PV9UxpE2cSZ0hKS98D9AB4p1RACLcB/s1600/IMG_20160821_102152885.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://4.bp.blogspot.com/-MgYajoWPfMs/V7t_7EkwTmI/AAAAAAAABLM/DmGwsu6PV9UxpE2cSZ0hKS98D9AB4p1RACLcB/s400/IMG_20160821_102152885.jpg" width="223" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">It's dirty, a little rusty, and several generations of <br />wasps have lived in there, but the bones looks <br />pretty good.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-z6pDd_LIA40/V7uAAznorQI/AAAAAAAABLQ/6vWAsZIYK6IqtOprqF4kCrPInPSO0a99QCLcB/s1600/IMG_20160821_104227657.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="179" src="https://4.bp.blogspot.com/-z6pDd_LIA40/V7uAAznorQI/AAAAAAAABLQ/6vWAsZIYK6IqtOprqF4kCrPInPSO0a99QCLcB/s320/IMG_20160821_104227657.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The motor pulley and belt need to be re-attached. No biggie.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-hhR7NTAkyxw/V7uARpKDunI/AAAAAAAABLU/wdRVYOOW0Pc7JdCGJzbOtW1nUH9oC7LTwCLcB/s1600/IMG_20160821_104110428.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="179" src="https://3.bp.blogspot.com/-hhR7NTAkyxw/V7uARpKDunI/AAAAAAAABLU/wdRVYOOW0Pc7JdCGJzbOtW1nUH9oC7LTwCLcB/s320/IMG_20160821_104110428.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">This is probably the biggest issue (which still isn't bad). The <br />top wheel needs a new tire since a section of it is missing.</td></tr>
</tbody></table>
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-91912432481432239682016-08-15T20:25:00.000-07:002016-08-15T20:25:00.733-07:00Sharpening old tools<div class="separator" style="clear: both; text-align: left;">
If you thought, based on the title of this post, that I'd be discussing refreshing some previously learned skills, you may be disappointed. Instead I'll actually be showing off how I sharpened some vintage woodworking tools.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I've recently been re-discovering my woodworking hobby, while learning to use hand tools in place of the power tools I've previously used. There are many reasons I've decided to use less electricity to make wooden objects, but I'll save all of that for another post. I'll just focus on sharpening for now.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>Rough Grinding</b></div>
<div class="separator" style="clear: both; text-align: left;">
Usually you start sharpening by rough grinding the bevel angle on the blade. This step is only required if you are setting a new bevel angle or if the blade is otherwise damaged. You can do the rough grinding by hand but I opted to use a power grinder with a 40 grit grinding wheel. So I lose some hand tool merit points for using electricity here. All of the blades I sharpened were to 25 degrees, which is pretty standard.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>Honing Methods</b></div>
<div class="separator" style="clear: both; text-align: left;">
There are tons of ways to sharpen metal blades: oil stones, water stones, diamond plates, etc. I'll be using a lesser-known method: sand paper. I learned about using sand paper from the <a href="https://lostartpress.com/products/the-naked-woodworker">Naked Woodworker</a>, but there are many people that prefer this method, often known by the name <a href="https://en.wikipedia.org/wiki/Scary_sharp">Scary Sharp</a>.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The basic requirements are three or four grits of sand paper going from around 150 grit up to 800 or 1000. Spray adhesive (or similar) is used to attach the sand paper to a flat surface like plate glass. When I went to the Home Depot to get supplies they only had very thin window glass, and I wanted something thicker. I was impatient so rather than waiting to go to a glass shop, I looked around in the tile section and found a large floor tile that was dead flat (I checked it with a straight edge). I haven't heard of anyone using floor tiles before but I can't think of a reason it shouldn't work.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
With any of these methods it's common to use a honing guide to keep the angle, though some people like to freehand the bevel angle once it's been rough ground. I used two different honing guides, an <a href="https://www.amazon.com/Robert-Larson-800-1800-Honing-Guide/dp/B000CFNCKS/ref=sr_1_1?ie=UTF8&qid=1471317486&sr=8-1&keywords=eclipse+honing+guide">Eclipse</a> and a <a href="http://www.veritastools.com/Products/Page.aspx?p=119">Veritas</a>.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>The Block Plane</b></div>
<div class="separator" style="clear: both; text-align: left;">
The first thing I tried to sharpen was an old Craftsman block plane (circa 1920). It was the first time I've use a grinder and I had a little trouble getting the tool rest set to the right angle. The end result is that the blade has two bevel angles as you can see in the photo below. Functionally it works fine, even if it's a little ugly, and after honing I can shave with it.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I tested the plane out by cutting some end grain bevels (something a block plane is ideal for). It seemed to perform pretty well even while taking a pretty aggressive cut.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-JYbYk0pWkA0/V7CAtkjJz-I/AAAAAAAABKU/cSUERwlDS5QLARmivgnTXueYfKHqAFy9wCLcB/s1600/IMG_20160718_212623615%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-JYbYk0pWkA0/V7CAtkjJz-I/AAAAAAAABKU/cSUERwlDS5QLARmivgnTXueYfKHqAFy9wCLcB/s320/IMG_20160718_212623615%255B1%255D.jpg" width="179" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/--SJ9ZnyXqZk/V7CA7APsT4I/AAAAAAAABKY/eD4kUpUsQv0X4y7CHTWtRA51IavYnf77wCLcB/s1600/IMG_20160718_213654822_HDR%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/--SJ9ZnyXqZk/V7CA7APsT4I/AAAAAAAABKY/eD4kUpUsQv0X4y7CHTWtRA51IavYnf77wCLcB/s320/IMG_20160718_213654822_HDR%255B1%255D.jpg" width="179" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>The Smoothing Plane and Chisels</b></div>
<div class="separator" style="clear: both; text-align: left;">
Next up was a nice Millers Falls Smoothing Plane. This one was straight-forward except that whoever had previously sharpened it had kind of messed it up and put quite a bit of skew on the blade (maybe it was intentional). I ground off the skew and made it straight across again. I also knocked down the corners of the blade a little to reduce tear out. After honing I was able to take paper-thin shavings which is what you need in a smoothing plane.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I also sharpened some chisels, but they were brand new and factory ground to 25 degrees to they just required a quick honing. I didn't even get any pictures of the chisels.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-PqNLjpCOfOE/V7CBOYduKMI/AAAAAAAABKc/uD5VZwyA5kcHCrg2qKOIScwgpQSPpIbQQCLcB/s1600/IMG_20160730_161751526%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-PqNLjpCOfOE/V7CBOYduKMI/AAAAAAAABKc/uD5VZwyA5kcHCrg2qKOIScwgpQSPpIbQQCLcB/s320/IMG_20160730_161751526%255B1%255D.jpg" width="179" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-TmfMquaaSRc/V7CBXECprWI/AAAAAAAABKg/Hv3tHTFF2a431Rm3lSjRyV7Sd9AykBO9gCLcB/s1600/IMG_20160730_161701906%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://2.bp.blogspot.com/-TmfMquaaSRc/V7CBXECprWI/AAAAAAAABKg/Hv3tHTFF2a431Rm3lSjRyV7Sd9AykBO9gCLcB/s320/IMG_20160730_161701906%255B1%255D.jpg" width="320" /></a></div>
<br />
<br />
<b>The Jack Plane</b><br />
I left the most difficult one for last. A jack plane is usually used for taking off lots of wood quickly. To optimize for this the blade geometry needs a little curve, which is called camber. Although the curvature is slight this allows the plane to scoop the wood out and take off much larger chips. This is really useful if the wood is twisted or cupped and you need to take off an eighth of inch or so.<br />
<br />
I wanted to take about a sixteenth of an inch off of each corner, and beyond that I just planned on free-handing it on the grinder. I got a tip from watching some YouTube videos that it easiest to take the corners off by putting the blade into the wheel at 90 degrees and then once the curve is ground the same 25 degrees bevel is established all the way across. It took a while but I eventually got the camber you can see below.<br />
<br />
Honing a cambered blade was a little trickier than a straight blade, since you need to sort of lean the blade back and forth as you hone. For this I used the eclipse guide since it has a small wheel that lets you lean the guide much easier than the Veritas guide.<br />
<br />
To test I took a fairly conservative cut, and although it may be hard to see in the photo below, it took some quite thick chips. It was interesting that I could feel the camber of the blade in the chips, in that they were quick thick in the middle but got paper thin at the edges.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-vx9UC5N6_8Q/V7CBjTOGcPI/AAAAAAAABKk/qFU1SoJdIVwe14n0cvOGD2ZCzStN70gcQCLcB/s1600/IMG_20160807_121228917%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-vx9UC5N6_8Q/V7CBjTOGcPI/AAAAAAAABKk/qFU1SoJdIVwe14n0cvOGD2ZCzStN70gcQCLcB/s320/IMG_20160807_121228917%255B1%255D.jpg" width="179" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-2FysXfVuau4/V7CByEr9IzI/AAAAAAAABKo/_BxnfJ6r5AcMA70jXTjCjym13vUmrk1JQCLcB/s1600/IMG_20160807_122001627%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://3.bp.blogspot.com/-2FysXfVuau4/V7CByEr9IzI/AAAAAAAABKo/_BxnfJ6r5AcMA70jXTjCjym13vUmrk1JQCLcB/s320/IMG_20160807_122001627%255B1%255D.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-55447293792735930132016-08-13T20:38:00.000-07:002016-08-13T20:38:12.824-07:00LabVIEW for BBB and RPi Internals: Yocto, chroot, and other strange wordsI recently helped create a toolkit to allow running <a href="http://sharpk60.blogspot.com/2016/06/introducing-labview-support-for.html">LabVIEW VIs on a BeagleBone Black (BBB) or Raspberry Pi 2 (RPi2)</a>. In this post I'd like to get into some of the technical challenges we encountered along the way.<br />
<br />
SamK, the author of the LINX toolkit, took over creating
the LabVIEW I/O library. LINX was originally written to allow LabVIEW to easily access the I/O on Arduinos and similar devices, so he naturally chose to use the same
LabVIEW API to access I/O on BBB and RPi2. The underlying implementation on the BBB/RPi2 is
fundamentally different than the normal LINX toolkit. Details on the
architecture is available <a href="https://www.labviewmakerhub.com/doku.php?id=learn:libraries:linx:misc:linx-internals">here</a>. The source code for the library is available <a href="https://github.com/MakerHub/LINX">here</a>.<br />
<b><br /></b>
<b>Issues encountered</b><br />
I worked on making the
LabVIEW run-time engine work on the BBB/RPi2. The LV run-time had
previously been ported to the ARMv7a CPU architecture and the Linux
operating system in order to enable the latest generation of NI's
CompactRIO industrial controllers. This made things way easier but
there were still some issues that had to be overcome:<br />
<ol>
<li>The run-time was already built around the fact that it was running
on the an armv7a architecture. This is fine for the CPU on the
BeagleBone Black and the Raspberry Pi 2 and 3. But the Raspberry Pi 0
and 1 use an older CPU that only supports the armv6 instruction set, so
for this reason we decided not to support the older Raspberry Pis.</li>
<li>The LV run-time usually runs on Linux in NI's own embedded Linux
distribution, but for the BBB and RPi we wanted to make LabVIEW run on
the recommended Linux distro for each of these targets which happens to
be debian based.</li>
<li>The ARM Linux versions of the LabVIEW run-time and the rest of the
NI software stack are compiled with the softfp gcc flag, while most ARM
Linux distros use the hardfp flag. Binaries built with one flag are
incompatible with binaries built with the other. These means that the
LabVIEW run-time cannot use the hardfp libc that is present on
Raspbian. That's a problem.</li>
</ol>
<b>Solutions found</b><br />
The first issue is kind of a limitation of the CPU in the Raspberry 1 and since most people are using the<br />
newer Raspberry Pi 2 or 3, we decided that the easiest way to resolve the issue was to not support the RPi 1. I know it kind of sucks for people that want to use the RPi1 they have lying in a drawer somewhere but considering how cheap RPi's are in general, it doesn't seem like such a big deal.<br />
<br />
To solve the rest of the issues, I decided to use a <a href="https://en.wikipedia.org/wiki/Chroot">Linux chroot</a>. At it's core, a chroot, or root jail, runs a process with a different root directory. That's really all there is to it, but the implications are pretty far reaching. When a process runs it loads its libraries from the /lib directory among others, so if we provide a softfp set of libraries in a different directory and chroot the LabVIEW process to that directory then we can solve issue 3. And if, also in that same chroot directory, we provide a simple Linux distro that is custom-tailored to LabVIEW, then we can solve issue 2.<br />
<br />
<b>Building chroots in Yocto</b><br />
To make this little chroot Linux distro, I used the <a href="https://www.yoctoproject.org/">Yocto project</a>, which I was already familiar with because I use it at work on a daily basis. I created a <a href="https://github.com/MakerHub/meta-labview">Yocto layer</a> that has everything needed to create chroot. The image recipe includes the <a href="https://github.com/MakerHub/meta-labview/tree/master/recipes-devtools/labview">LabVIEW run-time engine</a> and the <a href="https://github.com/MakerHub/meta-labview/tree/master/recipes-devtools/visa">VISA</a> and <a href="https://github.com/MakerHub/meta-labview/tree/master/recipes-devtools/liblinxdevice">LINX I/O</a> libraries.<br />
<br />
<b>Installing the chroot</b><br />
With the chroot image created, I needed some way to install it on a target. Since both the BBB and RPi use Debian-based Linux distros I create a <a href="https://github.com/MakerHub/lvrt-deb-pkg">deb package installer</a>. The install includes the <a href="https://github.com/MakerHub/meta-labview/blob/master/recipes-core/images/core-image-minimal-chroot.bb">chroot image</a> created using Yocto, a <a href="https://github.com/MakerHub/lvrt-deb-pkg/blob/master/src/labview.service">systemd unit file</a> to start the chroot and LabVIEW run-time at boot, a dependency to the schroot utility, and a small daemon that I'll discuss below.<br />
<br />
<b>Emulating the NI System Web Server</b><br />
On traditional NI Linux RT targets, there is a system web server which provides various system configuration services like changing the network settings. We don't support most of these system configuration services, but we do need to support restarting the LabVIEW run-time. This is needed because when deploying a LabVIEW startup app to the target, the run-time needs to be restarted.<br />
<br />
Since we only needed this service, rather than skimming though the significant codebase of the System Web Server, I instead took the tact of reverse-engineering the reboot web service using Wireshark. Basically, I ran a Wireshark capture while remotely restarting a traditional LabVIEW Real-Time target. This worked far better than I would have guessed, and soon I had <a href="https://github.com/MakerHub/lvrt-deb-pkg/blob/master/src/NISysServer.py">a small script</a> which implements a small subset of the NI System Web Server's functionality. I created <a href="https://github.com/MakerHub/lvrt-deb-pkg/blob/master/src/nisysserver.service">another systemd unit file</a> to start the script at boot time and put it all into the debian installer.<br />
<br />
<b>Security</b><br />
On important note is that the NI System Web Server does lots of work to ensure that all of it's operations are handled securely, but for my quick-and-dirty python script I did not implement any of these security features. The LabVIEW run-time is also run as the root user so that it has access to the I/O resources that it needs. On other LabVIEW Real-Time targets, and on Linux systems in general, daemons like the LabVIEW run-time do not run as root due to security concerns.<br />
<br />
The implications of these choices is that anyone with access to your local network can restart the LabVIEW daemon remotely, and can run VIs on the BBB/RPi2. This probably isn't a big deal if your network is private and has a firewall between it and the rest of the Internet, but it's still something to be aware of.<br />
<br />
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-24216515861509055702016-06-09T12:55:00.000-07:002016-06-09T13:09:19.883-07:00Introducing LabVIEW support for Raspberry Pi 2 and BeagleBone BlackFor the last 6 months, a friend and I have been working on a really cool project, and now I can finally talk about it.<br />
<br />
We've always wanted a way to use LabVIEW to program the amazing Linux-based maker devices like the Raspberry Pi and BeagleBone Black. It seems like a natural fit for programmers that are new to distributed programming, embedded devices, and Linux. LabVIEW has been an excellent way to write, debug, and deploy embedded applications over a network with the LabVIEW Real-Time module.<br />
<br />
So we set out to port the LabVIEW Real-Time module to the BBB and RPi2. Mainly this consisted of getting the LabVIEW run-time engine running on the BBB/RPi2 and writing some kind of I/O library to make it easy to do things like reading and writing digital lines, reading analog inputs, and communicating on I2C and SPI buses.<br />
<br />
In the end, we got it all working and released it to the public, and it's actually affordable as well ($50 + cost of hardware). All you need is a copy of LabVIEW 2014, the (free) LINX toolkit, and a BeagleBone Black or Raspberry Pi 2 or 3. See <a href="https://www.labviewmakerhub.com/doku.php?id=blog:users:makerhub:2016-04-07-linx-3">this link for more info</a>.<br />
<br />
We also spent some time putting together some <a href="https://www.labviewmakerhub.com/doku.php?id=learn:tutorials:libraries:linx:3-0">respectable tutorials</a> to help people get started. <br />
<br />
What will you do with LabVIEW on a BBB or RPi? I'm looking at automating the beer making process, and I've got some friends that want to use it with rockets and robots and other interesting things...<br />
<a href="https://outlook.office.com/owa/service.svc/s/GetFileAttachment?id=AAMkAGNiNzgwNjViLTViMDUtNDY1Mi1hMDNkLWY2MGQ1MmFiZGUwYgBGAAAAAACGsIbqSlkQRbzOSnbEZrECBwD%2FGXgOApKKQ7jUJhNt48VRAAAAAAEMAADXVQmAE3DlQ7u6JiLa%2B99IAAB0UkyjAAABEgAQALaLA7TeuEhAmbpioP2wjuI%3D&X-OWA-CANARY=Xu8uOpwGCE-QezHNSBnupDDEXpqbkNMYIn9F8ketwFBkPZDr9FkfRz1zoSQh1qhk8-z3BhotJGg." imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://outlook.office.com/owa/service.svc/s/GetFileAttachment?id=AAMkAGNiNzgwNjViLTViMDUtNDY1Mi1hMDNkLWY2MGQ1MmFiZGUwYgBGAAAAAACGsIbqSlkQRbzOSnbEZrECBwD%2FGXgOApKKQ7jUJhNt48VRAAAAAAEMAADXVQmAE3DlQ7u6JiLa%2B99IAAB0UkyjAAABEgAQALaLA7TeuEhAmbpioP2wjuI%3D&X-OWA-CANARY=Xu8uOpwGCE-QezHNSBnupDDEXpqbkNMYIn9F8ketwFBkPZDr9FkfRz1zoSQh1qhk8-z3BhotJGg." imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-NDeqgOt4tJo/V1nHIAlb6eI/AAAAAAAABJU/cDVIadfv340Y4FCd44qQWuvdb2UOJ1F2wCLcB/s1600/linx_screenshot.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://4.bp.blogspot.com/-NDeqgOt4tJo/V1nHIAlb6eI/AAAAAAAABJU/cDVIadfv340Y4FCd44qQWuvdb2UOJ1F2wCLcB/s400/linx_screenshot.jpg" width="500" /></a></div>
<a href="https://outlook.office.com/owa/service.svc/s/GetFileAttachment?id=AAMkAGNiNzgwNjViLTViMDUtNDY1Mi1hMDNkLWY2MGQ1MmFiZGUwYgBGAAAAAACGsIbqSlkQRbzOSnbEZrECBwD%2FGXgOApKKQ7jUJhNt48VRAAAAAAEMAADXVQmAE3DlQ7u6JiLa%2B99IAAB0UkyjAAABEgAQAJ5q8aS%2FZbNIh5LorxUcEbY%3D&X-OWA-CANARY=Xu8uOpwGCE-QezHNSBnupDDEXpqbkNMYIn9F8ketwFBkPZDr9FkfRz1zoSQh1qhk8-z3BhotJGg." imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><br />
<br />
<ol>
</ol>
Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-25174460733969151192016-03-20T07:12:00.000-07:002016-03-20T07:12:04.880-07:00Creating a customized image for BeagleBone Black or Raspberry PiRecently I wanted to create a customized image for a Raspberry Pi. Basically, I just wanted to download a stock Raspbian image, install some software, change a few configuration settings, and then put it back together just as I'd gotten from the original image.<br />
<br />
This is (or should be) pretty simple but I had trouble finding concise instructions for doing it. What I found fell into one of two categories: 1) instructions for backing up an image, or 2) really complex instructions for generating an image from scratch.<br />
<br />
At first glance the backup instructions (like <a href="http://raspberrypi.stackexchange.com/questions/311/how-do-i-backup-my-raspberry-pi" target="_blank">these</a>) seemed perfect. You run the equivalent of Linux's <a href="http://linux.die.net/man/1/dd" target="_blank">dd command</a> and end up with an image file that can be flashed to an SD card on Windows, Linux, or Mac. Perfect, right? Maybe not. Here's a scenario I ran into: I downloaded an image that would fit on a 4GB SD card, I flashed it on an 8GB card because that's what I had lying around, made my modifications, and created a backup image. The problem was the image is an image of an 8GB card, so it will no longer fit on a 4GB SD card even though the amount of actual data on the card should allow it to live on a 4GB card.<br />
<br />
So here is a process that gives us the ease of the backup process, but with the power to resize things back to the original image size:<br />
<ol>
<li>Download the latest official image for <a href="https://www.raspberrypi.org/downloads/raspbian/" target="_blank">Raspberry Pi</a> or <a href="http://beagleboard.org/latest-images" target="_blank">BeagleBone Black</a>.</li>
<li>Extract the image, flash it, and boot it.</li>
<li>Make whatever changes you want to the image (install software, change configurations, etc.). Keep all other settings to the defaults, like the hostname, users, and passwords.</li>
<li>Shutdown the target, extract the SD card, and backup the image using one of the methods <a href="http://raspberrypi.stackexchange.com/questions/311/how-do-i-backup-my-raspberry-pi" target="_blank">here</a>.</li>
<li>This will backup the entire SD card, and will likely create an image that will be much too large. You can shave off the extra unallocated space (basically restore it back to the same size as the stock image download from Step 1), using the steps in the "Shaving the Image" section of <a href="http://softwarebakery.com/shrinking-images-on-linux" target="_blank">this document</a>.</li>
<li>Zip up the finished img file.</li>
</ol>
Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-103453628998739032016-03-17T20:22:00.001-07:002016-03-17T20:22:08.288-07:00Controlling flow through a wort chiller, part 2<a href="http://sharpk60.blogspot.com/2016/01/controlling-flow-through-wort-chiller.html" target="_blank">Continuing my series of posts</a> with boring-sounding names, I've got more results from my wort chiller pump. Last time I was trying to control the flow through the wort chiller such that I can ensure that hot wort gets cooled to a reasonable temperature by the time it leaves the chiller.<br />
<br />
To that end, I made a series of flow restrictors, which are just some smaller diameter tubes I could insert in the tube between the chiller and the fermenter vessel.<br />
<br />
<b>Flow Restrictors</b><br />
I made the restrictors out of some wooden dowel rods I had lying around. Yes, I know that wood is one of the worst materials I could have used for this purpose since it's porous, and therefore could leak air and water and be a wonderful home to unwanted bacteria. I started with wood because I already had it on hand and I'm a woodworker so I'm better equipped to machine something out of wood. So if the experiment works I'll definitely be re-making the restrictor tube out of metal or food-safe plastic.<br />
<br />
To start making the restrictors I found a dowel rod that would fit snugly in the 1/4" ID hose I was using, which I think ended being a 3/8" dowel. I cut a bunch of 2 inch lengths of dowel and then picked 3 diameters I wanted to try first: 1/8", 3/32", and 1/16". I clamped each rod in a wooden clamp, checked that it was perpendicular, and used my drill press to drill straight through the center of the dowel. After that I checked each rod into the drill press and used a file to taper the ends so it would insert into the tubing more easily. They ended up coming out pretty well, but not perfectly centered which should be fine for this experiment.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-vDvOOGJPShU/Vuty7GS_qSI/AAAAAAAABIQ/LTVpGeIDFwEpQs-oFVfmu5TStLa1cX3TQ/s1600/IMG_20160227_110231187.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://4.bp.blogspot.com/-vDvOOGJPShU/Vuty7GS_qSI/AAAAAAAABIQ/LTVpGeIDFwEpQs-oFVfmu5TStLa1cX3TQ/s400/IMG_20160227_110231187.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-GPvsYyfkaes/Vuty7NBN4WI/AAAAAAAABIU/l0gX0mxVEUsDtfY8mwDfRAZRWNbKZbQlg/s1600/IMG_20160227_110357284.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://3.bp.blogspot.com/-GPvsYyfkaes/Vuty7NBN4WI/AAAAAAAABIU/l0gX0mxVEUsDtfY8mwDfRAZRWNbKZbQlg/s640/IMG_20160227_110357284.jpg" width="356" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-9otbmWXyx9o/VutzDAEs8XI/AAAAAAAABIc/p8XQ4-xydoQZD9QOnTdU0xEjiYgyiFzAA/s1600/IMG_20160227_111642284.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://4.bp.blogspot.com/-9otbmWXyx9o/VutzDAEs8XI/AAAAAAAABIc/p8XQ4-xydoQZD9QOnTdU0xEjiYgyiFzAA/s400/IMG_20160227_111642284.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-_zLcFFIVt-E/VutzDFo45QI/AAAAAAAABIY/yMHcIZC5i0Q_1Sz4-flLLMK3K-EetMPPg/s1600/IMG_20160227_112344767.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://2.bp.blogspot.com/-_zLcFFIVt-E/VutzDFo45QI/AAAAAAAABIY/yMHcIZC5i0Q_1Sz4-flLLMK3K-EetMPPg/s400/IMG_20160227_112344767.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-asT3EDxN0QM/VutzDbd4WvI/AAAAAAAABIg/KPjlys5ndPwB9T4Zw4-dBdvv1zMPC_FFw/s1600/IMG_20160227_112423687.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://4.bp.blogspot.com/-asT3EDxN0QM/VutzDbd4WvI/AAAAAAAABIg/KPjlys5ndPwB9T4Zw4-dBdvv1zMPC_FFw/s400/IMG_20160227_112423687.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<b>Measuring Initial Air Evacuation</b><br />
Before I got to testing my new flow restrictors I wanted to investigate the initial start of the pumping process. I suspected that it would take some amount of time to evacuate most of the air from the system before the liquid would start flowing. To test this I used my usual volume of 16oz. of water to pump, but before the container was empty I poured in another 16 oz. of liquid. By timing both a 16 oz. and 32 oz. sample, and subtracting the difference between them I should be able to get an idea of the amount of time required to evacuate the air.<br />
<br />
For this test I ran the pump full speed at 5 volts. Here are my results:<br />
<table border="1">
<tbody>
<tr><td>16 oz. water</td><td>0m 41s</td></tr>
<tr><td>32 oz. water</td><td>1m 06s</td></tr>
<tr><td>delta</td><td>0m 25s</td></tr>
<tr><td>air evac time</td><td>0m 16s</td></tr>
</tbody></table>
<br />
Breaking the results down a bit, this means that the time to transfer 16 oz. of water is really about 25 seconds and it takes 16 seconds to remove most of the air from the inside of the pump apparatus. For the following tests I won't be adjusting for this initialization period, but it's something good to keep in mind.<br />
<br />
<b>Full-speed Flow Measurement</b><br />
For the next round of tests, I kept the pump on full speed at 5 volts for the full duration of time it took to transfer 16 oz. of water. As you can see in the picture below, I inserted the flow restrictor in the hose that connects the output of the graham condenser to the input of the fermenting vessel.<br />
<br />
Here are my results:<br />
<table border="1">
<tbody>
<tr><th>restrictor size</th><th>16 oz. transfer time</th></tr>
<tr><td>none</td><td>0m 41s</td></tr>
<tr><td>1/8"</td><td>0m 47s</td></tr>
<tr><td>3/32"</td><td>1m 02s</td></tr>
<tr><td>1/16"</td><td>3m 20s</td></tr>
</tbody></table>
<br />
It seems that the restrictors are working though their effect is definitely non-linear.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-k_XxjTFY-R0/VutylwhjcJI/AAAAAAAABII/-e3jdCcGsI4BMrDm0M9k6AfHXiHKkPpLg/s1600/IMG_20160304_130344260.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://2.bp.blogspot.com/-k_XxjTFY-R0/VutylwhjcJI/AAAAAAAABII/-e3jdCcGsI4BMrDm0M9k6AfHXiHKkPpLg/s640/IMG_20160304_130344260.jpg" width="356" /></a></div>
<span id="goog_364016518"></span><span id="goog_364016519"></span><br />
<br />
<b>Modulating the Pump Motor</b><br />
Next I wanted to try to introduce another variable into the equation, which is to vary the on-time of the pump. In other circumstances I would use pulse-width modulation to allow a microcontrollers (like an Arduino) to control the motor, but for now I don't want to mess with setting up the motor drive circuitry. So I'm going to do "human powered" pulse width modulation and just turn the pump motor on and off in terms of seconds.<br />
<br />
Here are the patterns I came up with:<br />
<table border="1">
<tbody>
<tr><th>pattern num</th><th>init period</th><th>repeating pattern</th></tr>
<tr><td>1</td><td>0s</td><td>10s on, 10s off</td></tr>
<tr><td>2</td><td>20s</td><td>10s off, 10s on</td></tr>
<tr><td>3</td><td>0s</td><td>20s on, 20s off</td></tr>
<tr><td>4</td><td>10s</td><td>10s off, 5s on</td></tr>
<tr><td>5</td><td>10s</td><td>10s off, 3s on</td></tr>
<tr><td>6</td><td>10s</td><td>10s off, 2s on</td></tr>
</tbody></table>
<br />
Each pattern has an (optional) init period where the pump is on, with the goal of initially evacuating the air from the system. After the init period, each pattern has a repeating pattern with the goal of replicating the duty cycle and period based control used in pulse width modulation.<br />
<br />
I ran these patterns using the 3/32" restrictor since this restrictor seemed to give the best balance of hole size vs. flow restriction. I want to keep the hole size as large as possible because I'm concerned that if the hole is too small it will get clogged when I run actual wort through it.<br />
<br />
Here are my results with the 3/32" restrictor:<br />
<table border="1">
<tbody>
<tr><th>pattern num</th><th>16 oz. transfer time</th></tr>
<tr><td>1</td><td>1m 14s</td></tr>
<tr><td>2</td><td>1m 11s</td></tr>
<tr><td>3</td><td>1m 12s</td></tr>
<tr><td>4</td><td>1m 21s</td></tr>
<tr><td>5</td><td>1m 33s</td></tr>
<tr><td>6</td><td>2m 46s</td></tr>
</tbody></table>
<br />
So it seems that my simplistic pump motor modulation is working, at least enough to proceed. I could have tried a pattern with an even shorter on time than pattern 6, but a 2s on time was about the shortest amount of time that I could consistently maintain over over the course of several minutes.<br />
<br />
It's worth noting that by the end of my test runs the 3/32" restrictor was allowing a small amount of outside air to be pulled inside the tubing. I think this may change the results slightly, but I don't think it would have changed things enough to alter my conclusion that the strategy seems viable.<br />
<br />
<b>Conclusions and Future Work</b><br />
The results from using a restrictor while modulating the vacuum pump seems to show enough promise to proceed. If you multiply out the time to transfer 16 oz. of water with around a 20% duty cycle, it would probably take around 24 minutes to transfer a gallon of wort through the chiller which seems like it should be sufficient to chill down to room temperature.<br />
<br />
My next steps are to get my test rig ready to pump some near-boiling water though it, make a 3/32" restrictor out of something more durable than wood, and add some automation to control the vacuum pump motor.<br />
<br />
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-3836761272504497832016-01-21T20:25:00.002-08:002016-01-21T20:25:36.955-08:00Controlling flow through a wort chiller, part 1Now it's time to start putting together my <a href="http://sharpk60.blogspot.com/2015/12/a-non-contact-liquid-pump.html" target="_blank">last two</a> <a href="http://sharpk60.blogspot.com/2016/01/first-experiments-with-glass-wort.html" target="_blank">experiments</a> in order to control how quickly the wort flows through the chiller. This will hopefully allow me to control how quickly and efficiently the wort is chilled.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-QHd17VFzMEo/VqGsACySs3I/AAAAAAAABHw/vpU54fYAJeg/s1600/IMG_20160120_221517992.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="http://3.bp.blogspot.com/-QHd17VFzMEo/VqGsACySs3I/AAAAAAAABHw/vpU54fYAJeg/s400/IMG_20160120_221517992.jpg" width="400" /></a></div>
<br />
I've added a stainless steel racking cane as an input tube to the condenser tube. The condenser tube is now better supported with a ring clamp that allows me to keep tube properly supported at an adjustable angle. The tube that leads into the glass jug is just the right diameter to fit snugly in the output of the condenser tube.<br />
<br />
As part of this I also want to try and slow down the flow of water through the condenser tube. I took a simple approach of using a pinch clamp to see how much that restricts the flow. I then pulled 16 ounces of water and timed how long it took on a stop watch.<br />
<br />
table of data<br />
<table border="1" style="width: 100%;">
<tbody>
<tr><td>clamp gap(cm)</td>
<td>transfer time(s)</td>
</tr>
<tr>
<td>open</td>
<td>0:38</td>
</tr>
<tr>
<td>0.5</td>
<td>0:38</td>
</tr>
<tr>
<td>0.4</td>
<td>0:38</td>
</tr>
<tr>
<td>0.35</td>
<td>0:41</td>
</tr>
</tbody></table>
<br />
Based on the numbers I collected, it seems that the pinch clamp is effectively binary, all off or all on.<br />
<br />
Since the pinch clamp didn't work very well, I'm going to try inlining a smaller tube to see if that restricts the flow better.Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-62996168650501872152016-01-05T11:27:00.000-08:002016-01-05T11:27:04.217-08:00First experiments with a glass wort chillerThe reason I was messing around with vacuum pumps in my <a href="http://sharpk60.blogspot.com/2015/12/a-non-contact-liquid-pump.html" target="_blank">last post</a> is so I can pull wort through a new type of chiller. Now that I've got the pump part somewhat figured out, I did some work on the chiller part.<br />
<br />
Unfermented beer (wort) needs to be boiled and then rapidly chilled, since there are some chemicals that form in hot wort that can produce off flavors in the final beer. Ideally you want to take the wort from 220F to 80F in around 15-30 minutes. There are various methods and devices that are typically used to do this. <br />
<br />
One method that I have not seen used before is using a <a href="https://en.wikipedia.org/wiki/Condenser_%28laboratory%29#Graham_condenser" target="_blank">graham condenser</a> tube. This is usually used in chemistry labs to condense vapor into a liquid. It's basically a spiral glass tube with a larger straight glass tube on the outside. Cold water is pumped through the outer glass jacket around the inner spiral glass tube to cool it down. the vapor is passed through the inner spiral tube and it hopefully coalesces into a liquid before coming out the far end of the tube.<br />
<br />
The only difference between chilling wort and the usual use-cases for the graham condenser is that liquid, not vapor, would be the input to the inner tube of the condenser. Besides that the goals are the same: lowering the temperature of the input liquid/vapor. I bought <a href="http://www.hometrainingtools.com/graham-condenser" target="_blank">this graham condenser</a> to try.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-lmo9Pp7jtcA/VotWc1T140I/AAAAAAAABHE/ghKCMuDwSmg/s1600/IMG_20160102_223531244.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="http://2.bp.blogspot.com/-lmo9Pp7jtcA/VotWc1T140I/AAAAAAAABHE/ghKCMuDwSmg/s400/IMG_20160102_223531244.jpg" width="400" /></a></div>
Let's talk about some of the temperatures involved. As I mentioned above the input liquid to the condenser will be close to boiling, about 220F. The coolant water temp in the outer jacket of the condenser will be ice water probably around 35-40F. That's a delta of 185F between the coolant and the input wort. If you subjected a normal piece of glass from your kitchen to this kind of thermal shock it would probably shatter, but in this case the condenser is made of borosilicate glass. Borosilicate glass is special in that it is made to handle high thermal shocks like this; according to some numbers I looked up online it should be able to handle 320-330F of thermal shock so our 185F of thermal shock is probably OK. There's even a bit of wiggle room so if I decided to try something like adding salt to the coolant water to lower the temperature down to about 0F, we're still in pretty good shape.<br />
<br />
<b>Experimental Setup</b><br />
I had a cheap submersible fountain pump pushing water through condenser tube, from output to input (opposite direction to the way the hot water will go). The coolant reservoir is about 1 gallon of normal tap water. During the tests I had to tip the condenser tube at about 45 deg angle to get the input water to flow through the tube via gravity. I had several thermometers measuring the temperature of the coolant water reservoir, the temp of the input water, and the output water. I heated the input water using a tea kettle on my stove.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-DilWVmQ9Ubg/VotWe0q0eYI/AAAAAAAABHM/xhn6Ej6bHRI/s1600/IMG_20160102_223531244%2B-%2BAnnotated.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="http://4.bp.blogspot.com/-DilWVmQ9Ubg/VotWe0q0eYI/AAAAAAAABHM/xhn6Ej6bHRI/s400/IMG_20160102_223531244%2B-%2BAnnotated.jpg" width="400" /></a></div>
<b>Trial 1</b><br />
Coolant water was at 62F and input water was 126F for a delta of 64F. After passing through the condenser I got an output of 87F. The temperature delta from the input to output is about 40F. The coolant water was 64F after processing the hot water, so only a 2 degree increase in the coolant.<br />
<br />
<b>Trial 2</b><br />
Coolant water was at 64F and input water was 143F for a delta of 80F.
After passing through the condenser I got an output of 93F. The
temperature delta from the input to output is about 50F. The coolant
water was 68F after processing the hot water. <br />
<br />
<b>Trial 3</b><br />
This time I put ice in the coolant reservoir. Coolant water was at 43F and input water was 150F for a delta of 107F.
After passing through the condenser I got an output of 91F. The
temperature delta from the input to output is about 60F. The coolant
water was 48F after processing the hot water. <br />
<br />
<b>Next Steps</b><br />
Dropping 60 degrees in less than a foot with a pretty quick trip through the tube seems like a really good result! At this point the condenser is showing enough promise to keep going with the experiment. Next I'd like to tie in the vacuum pump to make it more like the final project I have in mind, and give an easier way to pull hot water through the condenser tube. As part of that I may need to put some pressure feedback in the vacuum pump line in order to tightly control how quickly the hot water flows through the tube. So I've got lots of connecting differing diameters of tubing in my future...<br />
<br />
<br />
<br />
Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com2tag:blogger.com,1999:blog-14316832.post-19000063990551168822015-12-22T14:22:00.000-08:002015-12-22T14:22:03.447-08:00A non-contact liquid pumpI came up with a way to transfer liquid from one place to another without having the liquid pass through the pump. My main goal was to come up with something I can use for homebrewing to transfer unfermented beer (wort). I need something food safe, and the easiest and cheapest way to do that is if the pump has no contact with the wort.<br />
<br />
The experiment used a sealed glass jug with a two hole stopper with a tube attached to each hole. One tube went to a glass of water, and the other was attached to an inexpensive <a href="http://www.amazon.com/gp/product/B00DYA21PU?psc=1&redirect=true&ref_=oh_aui_detailpage_o06_s00" target="_blank">vacuum pump</a>. The concept behind it is similar to sucking water through a straw. The vacuum pump lowers the pressure inside the glass jug, which pulls the liquid into the jug. Another way to look at it is the atmospheric pressure pushes the liquid into the glass jug.<br />
<br />
The experiment was a huge success! The pump transfers water quickly and I even had to stop the pump midway through since it had built up enough of a vacuum. It's important to note that there is definitely a lag between stopping the pump and when the liquid stops transferring (see the video below).<br />
<br />
I measured a few things during the experiment. Even though the pump I used was rated for 12V, I only used a 5V power supply because I was afraid of pulling the liquid too quickly. 5 volts worked just fine, and I think I'm going to stick with that. I was able to test that the pump could pull water up to 20 inches; it probably could have done more but that was the most I could test with my rig. I measured around 200-550 mA of current usage, and it definitely went up as the vacuum in the jug increased.<br />
<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/tF9OIcEVezo/0.jpg" frameborder="0" height="399" src="https://www.youtube.com/embed/tF9OIcEVezo?feature=player_embedded" width="480"></iframe></div>
<div>
<br /></div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-yqIbBqrf4I4/Vnm5artllEI/AAAAAAAABGc/D_iWKFJbjuo/s1600/IMG_20151221_132426824.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="http://4.bp.blogspot.com/-yqIbBqrf4I4/Vnm5artllEI/AAAAAAAABGc/D_iWKFJbjuo/s320/IMG_20151221_132426824.jpg" width="179" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The two hole stopper is a little ugly, but it works pretty well.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-7XYrHaU9kqI/Vnm5a-O0K2I/AAAAAAAABGg/2dncAuAN8Wg/s1600/IMG_20151221_132458106.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="http://3.bp.blogspot.com/-7XYrHaU9kqI/Vnm5a-O0K2I/AAAAAAAABGg/2dncAuAN8Wg/s320/IMG_20151221_132458106.jpg" width="179" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Boring the holes in the stopper was definitely the most difficult part.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-zxqwllZw5k8/Vnm5a4VndwI/AAAAAAAABGk/yzZ0G1j06-k/s1600/IMG_20151221_134131146.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="http://1.bp.blogspot.com/-zxqwllZw5k8/Vnm5a4VndwI/AAAAAAAABGk/yzZ0G1j06-k/s320/IMG_20151221_134131146.jpg" width="179" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Jury-rigged power supply for the pump</td></tr>
</tbody></table>
<div>
<br /></div>
Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-48036542291963692832015-11-24T11:04:00.000-08:002015-11-24T11:04:02.651-08:00Re-writing the example code from Chaos and Fractals<div class="separator" style="clear: both; text-align: center;">
<a href="https://d.gr-assets.com/books/1347705948l/371438.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://d.gr-assets.com/books/1347705948l/371438.jpg" /></a></div>
<br />
I stumbled on an interesting book on fractal algorithms: Chaos and Fractals: New Frontiers of Science. What made me take notice was that each chapter ended with a short, approachable example program that demonstrates a concept. The programs also generate some neat-looking fractal diagrams, and IMHO it's always fun to play around with algorithms that generate pictures.<br />
<br />
Another interesting point was that, in the first edition of the book, each example program was written in the BASIC programming language. The choice of BASIC doesn't seem so odd with a little historical context. The book was published in 1992, and around that time there weren't very many good cross-platform programming languages, especially when you consider cross-platform drawing libraries. But, at the time, BASIC fit the bill. It could run on DOS-based PCs and Apple IIs, which, at the time, probably covered a pretty good swath of the audience for the book. Most BASIC dialects also included the LINE and PSET functions which were all the example programs needed to draw the output of all sorts of fractal algorithms. In hindsight, BASIC seems like a decent choice. In the second edition of the book, I believe the authors switched to something else like Java applets; I was working from a first edition copy from my local library so I don't know much about the second edition.<br />
<br />
I decided it would be a fun exercise to port these example programs to javascript, since that seems to be the new cross platform language of choice in this decade. I tried to reproduce them as faithfully as possible without any attempt at further optimization, and I tried to use as few non-BASIC language constructs as possible. I say few as possible, since many BASIC language constructs don't have direct analogous constructs in javascript, for instance GOTOs and labels. So I present to you below, my implementation of these examples.<br />
<br />
I ran into a few caveats during the porting process that are worth mentioning: <br />
<br />
<ul>
<li>To view my javascript source, just choose View Page Source and you should be able to look around and find the example code.</li>
<li>Most of these algorithms are recursive and I had to get a little imaginative when converting GOTOs and GOSUBs to proper function calls.</li>
<li>For displaying the graphical output of each program, I used the HTML canvas object.</li>
<li>I tried to leave the BASIC code as comments amongst the javascript code so in case you're following along with the book you'll have some guide posts in the code.</li>
<li>The example code uses several different invocations of the LINE and PSET functions, and I had to track down some BASIC language documentation to figure out what the invocations should do. As a result, it seems that the BASIC dialect used is closest to <a href="https://en.wikipedia.org/wiki/GW-BASIC">GW-BASIC</a> and <a href="https://en.wikipedia.org/wiki/QuickBASIC">QuickBASIC</a>.</li>
<li>The output from the programs for chapters 12 and 13 did not look like the diagrams in the book and I spent quite a bit of time debugging them looking for my error. In the end I downloaded the DOSBox emulator and a copy of QuickBASIC and ran the programs there. In both cases, the BASIC code ran but outputted exactly the same result that I got from my javascript version. So I can only conclude that there is an error either in the code or the diagram printed in the book.</li>
<li>Some of the programs take a while to run (especially chapter 12 and 14), and this can lead modern browsers to display errors that the browser tab has hung or otherwise failed. In the chapter 12 code I tried to mitigate this somewhat by adding chunking code to sleep between chunks of loop iterations. It's less noticeable in chapter 14, but if you run into issues you can often get around it by just reloading the page and trying again.</li>
</ul>
<br />
<br />
<a href="http://sharpk60.blogspot.com/p/chaos-and-fractals-chapter-1.html" target="_blank">Chapter 1: Graphical Iteration</a><br />
<a href="http://sharpk60.blogspot.com/p/chaos-and-fractals-chapter-2.html" target="_blank">Chapter 2: Sierpinski Gasket</a><br />
<a href="http://sharpk60.blogspot.com/p/chaos-and-fractals-chapter-3.html" target="_blank">Chapter 3: The Koch Curve</a><br />
<a href="http://sharpk60.blogspot.com/p/chaos-and-fractals-chapter-4.html" target="_blank">Chapter 4: The Cantor Set</a><br />
<a href="http://sharpk60.blogspot.com/p/chaos-and-fractals-chapter-5.html" target="_blank">Chapter 5: Iterating the MRCM</a><br />
<a href="http://sharpk60.blogspot.com/p/blog-page.html" target="_blank">Chapter 6: Chaos Game for the Fern</a><br />
<a href="http://sharpk60.blogspot.com/p/chaos-and-fractals-chapter-7.html" target="_blank">Chapter 7: L-systems</a><br />
<a href="http://sharpk60.blogspot.com/p/chaos-and-fractals-chapter-8.html" target="_blank">Chapter 8: Cellular Automata</a><br />
<a href="http://sharpk60.blogspot.com/p/chaos-and-fractals-chapter-9.html" target="_blank">Chapter 9: Random Midpoint Displacement</a><br />
<a href="http://sharpk60.blogspot.com/p/your-browser-does-not-support-html5_22.html" target="_blank">Chapter 10: Times Series and Error Development</a><br />
<a href="http://sharpk60.blogspot.com/p/chaos-and-fractals-chapter-11.html" target="_blank">Chapter 11: Final State Diagram</a><br />
<a href="http://sharpk60.blogspot.com/p/your-browser-does-not-support-html5_58.html" target="_blank">Chapter 12: Rossler Attractor</a><br />
<a href="http://sharpk60.blogspot.com/p/your-browser-does-not-support-html5_71.html" target="_blank">Chapter 13: Julia Sets</a><br />
<a href="http://sharpk60.blogspot.com/p/chaos-and-fractals-chapter-14.html" target="_blank">Chapter 14: Mandelbrot Sets</a><br />
<br />Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com0tag:blogger.com,1999:blog-14316832.post-39268460448992064902014-12-22T07:08:00.002-08:002014-12-22T07:08:54.794-08:00Brewing Beer with a Sous Vide Cooker<br />
<div class="separator" style="clear: both; text-align: center;">
<object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="https://i.ytimg.com/s_vi/FwRJDLWagCs/default.jpg?sqp=CLyA0qQF&rs=AOn4CLBgEtYtZy8nD7WMYTPrEDRRAf3dpg" height="266" width="320"><param name="movie" value="https://www.youtube.com/v/FwRJDLWagCs?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" /><param name="bgcolor" value="#FFFFFF" /><param name="allowFullScreen" value="true" /><embed width="320" height="266" src="https://www.youtube.com/v/FwRJDLWagCs?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></div>
<br />
In beer brewing, the techniques that you use to extract the sugar that the yeast turns into alcohol are very important. Sugar is pulled from malted grain by soaking it in hot water, which is called mashing. The temperature of the water, and the length of time the grain is soaked makes a very big difference in the amount of sugar extracted. The amount of sugar received is determined by measuring the density of the resulting water using a device called a <a href="http://en.wikipedia.org/wiki/Hydrometer">hydrometer</a>. The ratio of extracted sugar compared with the theoretical maximum amount of sugar is called efficiency and is usually somewhere around 75%.<br />
<br />
In addition to getting the sugar out of the grain, soaking the grain can have other effects by breaking down various proteins which can effect the flavor, the amount of head, and other factors in the resulting beer. In order to get some of these secondary effects brewers can do multi-rest mashes where they soak the grains at different temperatures for different amount of time. If you want more homebrewing theory, check out <a href="http://www.howtobrew.com/">Palmer's excellent book</a>.<br />
<br />
All of this is difficult to do in the real world when all you are armed with is a stove with a knob that, when turned, will eventually change the temperature of the 5 or more gallons of water and grain. Basically, it turns into doing a kind of human-powered <a href="http://en.wikipedia.org/wiki/PID_controller">PID controller</a>, which is no fun at all.<br />
<br />
Being an engineer, I thought that this definitely falls under the category of a task that a computer could do better than a human. I started doing some planning in my head about what would be required for some kind of computing device to control my stove (or other heating element) so that I could set an exact temperature and let the computer worry about keeping the beer at the temperature. It turns out that it's not hard since this kind of temperature control is used in industry all the time for many purposes besides mashing beer.<br />
<br />
The auto mash temp control project was sitting solidly on the back burner in my brain when I saw that Sous Vide cookers were getting cheaper. I will spare you the details, but <a href="http://en.wikipedia.org/wiki/Sous-vide">Sous Vide cooking</a> is a method of cooking by putting food in a water bath that is kept at an exact temperature by a temperature controller.<br />
<br />
If you replace the water with wort (unfermented beer) then this sounds exactly like what I wanted to control mash temperature. Sous Vide cookers operate in the same temperature range as typical mash temperatures, are generally made from food-safe materials, and are made to attach to the sides of standard cooking pots. All of these qualities make them ideal for use with a mash.<br />
<br />
So I bought an <a href="http://www.amazon.com/Anova-Sous-Vide-Immersion-Circulator/dp/B00GT753W8/ref=sr_1_1?ie=UTF8&qid=1419260818&sr=8-1&keywords=anova">Anova Sous Vide cooker</a> and made a batch of beer, and the results were excellent. I made this <a href="https://www.brewtoad.com/recipes/ode-to-arthur-4-gal">Irish Dry Stout recipe</a>, with a mash temperature of 152 degrees F for 90 minutes, and a 170 deg mash out for 10 minutes. In the end I got 75% efficiency, and I pretty much sat back and relaxed during the mash step instead of a typical batch where I have to watch the temperature like a hawk the whole time.<br />
<br />
Footage of the mash and details and tips for using the Anova cooker with a mash are in the the video above, but the big takeaways are:<br />
<ol>
<li>The Anova cooker seems to work quite well for mashing, and I will definitely use it again.</li>
<li>Only use the cooker for fine-tuning the mash temperature. For brute force heating use your stove burner. This is to avoid caramelizing any sugars to the Anova's heating cool which would make the Anova hard to clean and may effect the flavor of the beer.</li>
<li>Use a grain bag. This keeps the grain from plugging up the innards of the Anova. Be careful about where you aim the output of the Anova's circulator such that the grain bad doesn't get pulled into the Anova's intakes.</li>
<li>Carefully calculate batch size. The liquid level must fall within the Min and Max lines on the Anova and this can be tricky to hit correctly when using a large brew pot, so do your math ahead of time to get it right.</li>
</ol>
<div>
Disclaimer: I don't know if Anova recommends using their Sous Vide cooker in this way, so I can't be responsible for any damage to the Anova cooker, problems with the resulting beer, or any other issues or problems you might encounter.</div>
<div>
<br /></div>
Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com2tag:blogger.com,1999:blog-14316832.post-71361743713944383752014-12-15T13:05:00.000-08:002014-12-15T13:05:29.155-08:00Quiz Show Buzzers<div class="separator" style="clear: both; text-align: center;">
<object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="https://i.ytimg.com/s_vi/evp41J9b5vc/default.jpg?sqp=CLzFoqQF&rs=AOn4CLD4pZQBpADmI1Zbh6gWKGTClAfEIA" height="266" width="320"><param name="movie" value="https://www.youtube.com/v/evp41J9b5vc?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" /><param name="bgcolor" value="#FFFFFF" /><param name="allowFullScreen" value="true" /><embed width="320" height="266" src="https://www.youtube.com/v/evp41J9b5vc?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></div>
<br />
<div style="text-align: left;">
Recently I got a commission to create a set of quiz show buzzers. There was nothing on the market that really fit what my client was looking for so they had me build something for them. I found <a href="http://www.instructables.com/id/Quiz-Game-Controller-using-Lights-and-Sounds-Buzz/">this instructable</a> which was similar to, but not exactly, what the client wanted so I used that project as inspiration.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I made a video above which shows some of the steps during development as well as the finished device.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
The basic requirements were:</div>
<div style="text-align: left;">
</div>
<ul>
<li>A control unit for the person running the game to see the order that players pressed their buttons.</li>
<li>Four remote units that connect to the control box. The remote unit should light up such that both the player and audience can see which player rang in first.</li>
<li>A sound should play when the first player rings in. The preference would be for the sound to be something like the Family Feud ring in sound.</li>
<li>As a bonus it would be nice to have the cables between the remote boxes and the control unit be something that is easily replaceable in case longer cable lengths are needed in the future.</li>
</ul>
<div style="text-align: left;">
<b>Software and Electronics </b><br />
I started with an Arduino because, for simple devices like this, it is the quickest way for me to get started. More specifically, I used a <a href="http://moderndevice.com/product/rbbb-kit/">RBBB</a> from Modern Device, since it is a cheap way to embed an Arduino in a project.<br />
<br />
For the LEDs, I started with some old LEDs that I had lying around, but quickly found that they weren't bright enough to use with the ping pong ball diffusers I used for this project. I ended up buying some new higher efficiency LEDs. I tweaked the current limiting resistors for each different color of LED to maximize their drive current (and therefore brightness). See the video for a demonstration of the LEDs.<br />
<br />
I hadn't ever really done much with sound on the Arduino before so this was new territory. I found that I could embed a WAV file (after re-encoding it as an array of data in the Arduino sketch), and then play it back using the <a href="http://highlowtech.org/?p=1963">PCM library</a>. I also found the ring-in sound from Family Feud on <a href="http://www.qwizx.com/gssfx/usa/index.html">this website</a>, which was really handy.<br />
<br />
I struggled a bit getting the sound hardware working. It's pretty easy to connect a speaker directly to an output pin from the Arduino, but that wasn't loud enough in my case where I wanted an entire room to hear it. So I needed an amplifier of some kind, and I tried a number of different ones, but none seemed to work very well. Eventually I found <a href="http://bryanduxbury.com/2012/01/20/one-transistor-audio-amplifier-for-arduino-projects/">this site</a> with the simplest amplifier of all, just a transistor and resistor. This worked fantastically well, and required almost no work or expense to get it going! You can see my circuit in the <a href="https://github.com/sharpk/buzzers/blob/master/hardware/schematic.jpg">schematic</a>.</div>
<div style="text-align: left;">
<br />
I whipped up some more code to time the inputs to detect which player rang in first using the pin change interrupts on the Arduino. This was easy using the handy <a href="http://playground.arduino.cc/Main/PinChangeInt">PinChangeInt library</a>.<br />
<br />
Last of all for the software, I needed to create several different blink patterns on the LEDs. Again an existing Arduino library came to my rescue in the form of the <a href="http://playground.arduino.cc/Code/TimedAction">TimedAction library</a> that allows you to setup psuedo-thread functions to run arbitrary code on a configurable time period.</div>
<div style="text-align: left;">
<br />
<b>Hardware</b><br />
The prototype was now complete but I had to assemble the final version. I decided to use headphone jacks to connect the remote boxes and the control unit together. In this way I could carry the signals I needed over an inexpensive patch cable and make the all of the boxes easily detachable for storage.<br />
<br />
As mentioned before, I used ping pong balls as inexpensive light diffusers attached through holes in the button boxes and held in place with hot glue. The large buttons were attached through a hole in the top of each button box. The speaker in the control box was attached with hot glue with a piece of screen placed in front of the speaker before gluing.<br />
<br />
Assembly was much more time consuming than I thought. Many hours of cutting, drilling, and soldering later, I had the final product which you can see in the video above. My projects always seem to take way more time in the less interesting mechanical parts than in the super-fun electronics and software parts...<br />
<br />
I got everything done in time and my client has been happily playing rounds of Jeopardy and trivia games for months now.<br />
<br />
And now you get the benefit of all that work in the form of source code and schematics:</div>
<div style="text-align: left;">
<a href="https://github.com/sharpk/buzzers">main project</a></div>
<div style="text-align: left;">
<a href="https://github.com/sharpk/buzzers/blob/master/firmware/firmware.ino">source code </a></div>
<div style="text-align: left;">
<a href="https://github.com/sharpk/buzzers/blob/master/hardware/schematic.jpg">schematic</a> (sorry, it's hand drawn) </div>
<div style="text-align: left;">
<a href="https://github.com/sharpk/buzzers/blob/master/hardware/bom.html">bill of materials</a><br />
<br /></div>
Kenhttp://www.blogger.com/profile/17915495602215138269noreply@blogger.com8