Sunday, October 26, 2014

Internet of Things Hackday Trip Report

Last week I attended the Internet-of-Things Hackfest at Minnetronix is the Twin Cities.


Dan McCreary working with a student on the Moving Rainbow Arduino Kit


Here is a quick summary of some of the things I learned last week:
  1. Students LOVED the new Moving Rainbow kits I built.  Although some designs worked better than others.
  2. The spark.io device is wonderful but still lacks some features that would make it easy for students to use in classrooms.
  3. Getting IoT remote devices  to work requires specialized skills (like C parsers) that many of us don't have.
  4. When students get their own ideas for projects they get laser focus
  5. Hackdays are a lot of fun!  They are great ways to meet people and learn from others.

I had two roles at the hackfest.  I helped setup and run the "Kids Room" for the hackfest and I did a (very) little work in the Lumière lighting team.

For the Lumière team I mostly helped a few people to learn how to solder wires the LED strips and use heat shrink to secure the wires.  The other two guys on my team (Daniel Feldman and Alan) had much better programming skills and experience with other platforms like the Raspberry Pi.

I did spend many hours working on building an XForms, REST, XQuery application for the spark.io.  And although I did get it working (video), it still needs a lot of polish to allow the commands to be flexible.  I also did get a few new patterns working:
  1. Larson Scanner (Cylon)
  2. Random colors
  3. Candle flicker (simulate the light flickering pattern of real candles)
  4. Up-down patterns
  5. Swipe (redraw colors one pixel at a time)
Many of these still need to be parameterized with arguments such as color and speed.  However doing a general interface still needs work.

To get the Internet-of-Things (IoT) moving rainbow kits to work we need to send a specific "change color pattern" command to each device.  Since the spark.io interface only accepts a simple string, we need to parse the strings into a pattern of colors and motion.  However none of use knew how to use the strtok_r() function so we struggled a bit.  Daniel did a great job under pressure getting one command parser working on the spark.io, however we will need to refine it a bit more over time.

The ideal long-term solution is to develop a small "Addressable LED Strip Markup Language" as a domain-specific command language and write a parser for it in C that would run on the Spark.io.  This is a non-trivial problem for people that don't write C every day.  However I hope to spend some time thinking about the pattern name, color name, delay period syntax and perhaps coming up with a small BNF grammar.

Moving Rainbow Findings

Now I want to review some of the findings around a low-cost Arduino kits for students.


One of the dongle-style Moving Rainbow designs connected to an FTDI programmer

My primary interest is to understand what can we do to get students involved in STEM and to keep them on the strong math and science tracks in high-school and college.  Each time I engage with students I look for things that get them excited and want them to return for more.

My vision is to help design low costs kits that students could take home and show their friends.  These kits should be inexpensive enough that schools, libraries, and park buildings could have them for checkout, just like any library book.  Imagine a bookshelf at the library that contained 100 different electronic kits, each with specific learning goals in mind.

My experience has shown me that with some mentoring and some good electronics kits that many students can use internet resources to do a lot of work on their own.  However some students need a bit more encouragement then others.

This was one of the first times I had my newest collection of my "Moving Rainbow" kits on display.  When the students came into the room I encouraged them to pick up each kit and play with them.  Each of them has slightly different designs, packaging and switches.  When they flick the power switch on the 12-segment RGB LED lights came on and some of the kits had nobs and sensors that change the LED patterns displayed.  I tried to pay special attention to each of the students and they came into the room.  I noted what kits they picked up and what features they were interested in.

One of the things I learned is that there was little interest in the small-versions of the kits.  These were the ones that did not have room for the 12 pixels within the box.  These had a "dongle" design where the LED strip was sticking outside the boxes.  These designs pretty much failed, and looking back I can see why.  My reason to try them was that the smaller boxes were less expensive.  The larger boxes cost $5 or $6.  However, one of the students wanted to purchase the "dongle" designs.

The other thing to remember is that the logistics of getting the Arduino drivers working on both Windows and Apple systems is very time consuming.  Much of the first hour was getting the Arduino drivers working and the FTDI drivers (required for the mini-pros)  installed.

Several of the students did a "color wheel" lab where they had to mix the red, green and blue values together to make purple, yellow and orange colors appear on the LED strip.  The look on their faces when the strip turned either the right or wrong colors was priceless.  These were fantastic teaching moments!  On my TODO list is a "cheat sheet" for the color functions with pictures of color wheels.  This guide would start with functions to set a pixel to a specific RGB value and draw colors within for loops.

The moving color labs was a bit harder.  I need to continue to find good simple examples of lights moving up and down and get them pre-installed in the Arduino Examples area.  This is a great way to teach for loops and if/then/else logic.  As my sister and brother have told me, teacher prep makes a huge difference in students understand and lowering frustration levels.

One incident was that the students really loved the idea of creating a small wearable designs.  I had my "Altoids" example necklace as a demo to show them.  A few of them wanted to make Halloween costumes out of them.  And they were VERY motivated once they realized they could create their own costumes out of them.  At our final presentation to the entire group, two of them came to the front of the group to show their creations.  One of the students specifically thanked me in front of the entire group.  I wish all the students were this polite!

One idea is to have a "Arduino wearables" hackday around the same time next year.  This would require a lot of planning and some volunteer work by people with sewing machines.

What this taught me was that once students get their own idea of a creation it is like a fire-bolt of energy gets lit in them.  Their distractions disappear and they become laser focused on their task.  They seek whatever resources they can get to reach their goals.  Helping each student find their project is what these hackfests is all about!

I also met a few other people that might help us lower the costs of the packaging and find lower costs of the Moving Rainbow kits.  I still have more work to do to learn about placing larger quality orders for components and packaging on volume discount sites such as alibaba.com.

I want to reach out and thank everyone that made the meetup possible.  The sponsors and the people at Minnetronix should get a special thanks!



Monday, October 13, 2014

Motors for Arduino Labs

This week I went through many of the SparkFun Inventor's Kits that we use in our CoderDojo Arduino labs and realized that the kids have been loving our little DC mini-motors to death.  As you can see in Figure 1 over half of the wires had broken off!

Figure 1: DC Motors with most connector broken off


The ones supplied in the SparkFun Inventors kits have small delicate wires on them that break off easily. Since the motor circuit lab is a popular lab we need reliable DC motors!

It was pretty easy to solder the wires back on.  However, I wanted to make sure they didn't get pulled off again.  So I have replaced the old thin wires with some thinker 22 gauge stranded wire. I then use heat shrink and some cable ties to bind the wires to the case of the motors. You can see the heat shrink just before I applied the heat in Figure 2.

Figure 2: DC motors with heat shrink

Next I used some small cable ties (see Figure 3) to firmly secure the wires to the motors.  So if the kids pick up the motor by the wires it will not strain the solder joints.


Figure 3: DC with cable tie


Viewing Motor Direction (Optional)


I also realized that some of the motors don't have gears on them so it is difficult to tell what direction they are spinning.  In our labs (not in the Sparkfun Inventors Kit) we need to show both clockwise and counterclockwise directions in the labs. The direction of rotation is used in the motor labs that use the motor driver H-bridge chips like the popular L293D. So I have added a small drop of hot-glue on the end of the motor spindle and then added a Golden Spiral sticker to help the students see the direction of rotation. I also put a ring of hot-blue around the base and then used a felt pad so that the motor could stand upright.

Figure 4: Motor on base with Golden Spiral label on motor spindle.  The wires are multi-stranded 22 gauge but have a 1/2 inch solid gage at each end to work with the breadboard.



Figure 5 has the artwork from the Golden Spiral Label. This is one of may favorite designs.
Figure 5: Golden Spiral Label to indicate rotation


As an aside, some of you may know that spirals are painted on jet engines like in Figure 6 to indicate that the engine is rotating and give the viewer some indication of direction.

Figure 6: Golden Spiral Graphic painted on jet engine to show motion

A discussion of the golden spiral is also a change to discuss the beauty of mathematics. A PDF file that can be used print out the designs on sheet of labels is here. Let me know if you want the source PPT file. I am not artist and others might have a better spiral design. An SVG image might be a bit smoother.

So some of you might be thinking that this is a lot of detail for a just one lab! You would be right! However, I think that the care and attention to detail we give each of these labs help the kids get quickly to the next level. This principal helps us apply the theory of Constructivism to our labs. Once kids know they can change motor direction directly from within their Arduino code they can then make the logical next step to seeing how they can turn a robot car direction by having one wheel motor go backwards. Each of these are small logical learning steps we need to keep kids coming back to our STEM classes.

In a busy noisy class with 20 students jumping around we don't want to have to search through 20 kits looking for a motor that has the wires attached. This takes time away from our learning objectives.

With a good solid supply of motors that will last through a year of labs like in Figure 7 you will be ready to help all your students get to the really fun parts - building their own Arduino powered robot!

Figure 7: Motors ready for the kids!

We will hear more about this and the learning steps to building robots in future blog posts.

References


Thursday, October 09, 2014

Spark.io Core Evaluation

Last week at the Minnesota Arduino meeting I met the team from Spark.io.  They make a low cost (under $15 in quantity) device that you can program like an Arduino, but it has a full WiFi stack running on it and works with an optional cloud-based service.  They gave me (free) a device to evaluate.  So here is a first look.


The device came in a small box with a half breadboard and a USB connector.  You plug it in and it starts flashing a color that indicates it is "listening for a WiFi login".  If I had a smartphone it would have been easy to give it my WiFi ssid and password, however I did figure out how to give it the credentials using a Windows serial port (putty).  The serial port is not a full unix-like shell, but it got the job done.


Once it got on the local WiFi I went to the spark.io web site and "claimed" my device by putting in its device ID (which I also got via the Windows serial interface).  I could then use a web-based IDE to download the standard Arduino "Blink" app.  I also found the NeoPixel library and ported over some of my Moving Rainbow demos. Here is the spark core running one of the rainbow patterns:





It is interesting to note that you can't use many Arduino Libraries alone.  Someone needs to port them.  However I think that most of the common libraries that students would need are there.


What I really liked about the device is that the cloud interface give each device a REST interface.  For example if I put the following into my browser (or use the UNIX curl), I can get my device status:




We can get the status of our device in a JSON format:


[
 {
   "id": "1234...",
   "name": "dan-test-1",
   "last_app": null,
   "last_heard": "2014-10-10T04:19:08.528Z",
   "connected": true
 }
]


If you have a smartphone there is a nice app you can use to setup the spark core (wifi and password) and do some basic programming.  However I also want to make sure that I can figure out how to make the spark core work in a teaching setting similar to the CoderDojo meetings.  This is where kids come in with Windows PCs and hook up the Arduino to the USB and fire up the Arduino IDE.  I also think that schools may purchase Chromebooks that they also want to use in the labs.  So I still have a bit more learning to do to see if I can create a full Internet-of-things lab that kids with a low-cost Windows PC can really use.


I like the fact that the spark.io system seems pretty open and all the code is on github.  The ARM processor also is a LOT more powerful than the Arduino controller.  The cost is also very low when you consider that a WiFi Arduino shield alone is $90 which is 3x more expensive than the entire device.  The spark.io Internet of Things "starter kit" is currently $39.00.  They have another version with many sensors for $99.00 which seems like a good deal.


My initial impressions are that if you have a Linux or Mac and can run node.js from the command line that you should have very few problems.  That is clearly their target developer audience. However many kids don't have access to a smartphone and a $1,000 Mac.  However, having a low cost Windows computer and using an simple Eclipse-like IDE is still something I hope we can have in the future.


I have started to create a simple web-front end and have some basic unit tests running.  I am using Bootstrap 3 and eXist (my favorite NoSQL database) with a few simple XQuery functions to build the URLs. My initial tests allow you to store the device ID and Access codes in a config file and I have a set of functions that convert the JSON responses into pretty HTML pages.  Next I want to be able to change the colors and light patterns using a web form.  I hope that I have something to demo for the Luminarie team at the hackfest a week from Saturday!

Overall rating 5 out of 5 stars!