Wednesday, August 16, 2017

Adafruit PiGRRL 2 Review



Last year I got a PiGRRL 2 kit as a gift and just recently assembled it.  Overall, I was pretty impressed with the kit.

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.

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.

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.

The PiGRRL 2 without its clothes

Saturday, June 24, 2017

Workbench complete!



I finally completed my Knockdown Nicholson workbench.  I previously posted about my chicken-and-egg problems of building a workbench without a workbench.  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.

This bench was designed by Chris Schwarz based on a much older design by Peter Nicholson.  While the plans for the workbench are free, I would highly recommend getting a copy of the November 2015 issue of Popular Woodworking, since that has step by step instructions which will greatly simplify the process of constructing the bench.

This bench has no vice and is intended to be used primarily with hand tools.  An ancient tool called a holdfast 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.

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.

Tuesday, May 30, 2017

Brewing beer with a Sous Vide cooker, Round 2



I decided recently to make another go at brewing beer with my Anova Sous Vide cooker.  The first time went pretty well, but I had a few new ideas I wanted to try this time around.

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.

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 available here and is free for anyone to use.  Let me know if you use it and have any feedback.

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.

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.

Friday, May 12, 2017

Donut Counting with LabVIEW and BeagleBone Black



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.

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.

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.

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.



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 source code is available on github.

Sunday, April 02, 2017

LabVIEW Web Services on BBB/RPi

It'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.

Background
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.

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 tutorial to introduce this new capability to the community.

Removing NIAuth
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.

HTTPS Support
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.

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.  The tutorial 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.

A UI for your BBB/RPi
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.  This tutorial uses HTML and Javascript to create a web-based UI.

Data Dashboard
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 tutorial on how to use LVWS with Data Dashboard.

Calling REST interface with the LV HTTP VIs
Another way to create a web-based UI for a LabVIEW app came from the Makerhub Forums.  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.