A Vernier Go!Link package for Mathematica

The Go! Link from Vernier Software & Technology (Vernier), is a USB adapter for their proprietary sensors which also provides some basic features such as a buffer, sensor auto-identification and raw voltage reading conversion. Vernier provides a software development kit which allows programmers to use Go! devices in their own systems. Since Wolfram’s Mathematica software became available on the Raspberry Pi, I have been thinking about how one can build a flexible sensor system using Vernier’s products and based on the inexpensive computer and the powerful data analysis and visualization tools of Mathematica. This project isn’t new, and my earlier attempts were highlighted on the Raspberry Pi blog and I recently announced a previous version of this software package. What I’m presenting now is a more user-friendly system that makes data collection easy through the device driver framework incorporated into Mathematica.

Continue reading A Vernier Go!Link package for Mathematica

C2E2 – Working on my Chicago bucket list

One of the things I absolutely had to do before leaving Chicago is to attend C2E2 – the Chicago Comic & Entertainment Expo.  Every year I’ve been here, I’ve remembered I needed to get tickets a week after the event ended!  This time, with Chicago State cancelling spring break and me having to forfeit my trip to New Mexico, I was determined not to miss the event.

Turns out I don’t know much about popular culture.

Continue reading C2E2 – Working on my Chicago bucket list

Optimizing data acquisition

This is the first of a new series (tag) Dancing with Wolfram.  Occasionally, I need to work through programming strategies in Wolfram, and I need a place to store my ideas.  Perhaps they will be useful to others.

The problem

When collecting data from a sensor, one wants to generate a list of {x, y} pairs where x is typically time and y is the sensor reading.  One way of doing this is to create an empty list and then using Mathematica’s AppendTo function to add elements to the list.  The problem with this approach, however, is that it is not very efficient.  The function call makes a copy of the original list each time, and when the list of data gets very large, the time it takes to store a data point increases.  Below, I’ve plotted the average time needed to store a datapoint as a function of the list size.  For comparison, I’ve collected data (times measured on a Raspberry Pi v2)  using AppendTo with a list (blue dots) and adding key -> value pairs to an association (orange dots).

list-association-gr1

After about 1000 data points, the AppendTo a list approach starts to take increasingly longer times.  I was unable to collect any data beyond 10,000 data points since AppendTo started running into memory issues.  It is not unreasonable to expect a sensor data set to contain in excess of 1000 data points, so the performance of AppendTo is not acceptable.

Continue reading Optimizing data acquisition

GoIOLink release candidate 1

Introduction

GoIOLink is the flagship component of a project I call VernierPiLink which seeks to provide a variety of Vernier-sensor-Raspberry-Pi integration resources.  It relies on VS&T’s Go!Link USB adapter to perform the physical connection between an analog Vernier sensor and the Raspberry Pi.  On the software side, I am using the Go! I/O software development kit also from VS&T and the Wolfram Language which comes free (for non-commercial use) on the Raspberry Pi.

Continue reading GoIOLink release candidate 1