Workshop Weekend: Arduino
It felt absolutely amazing this past weekend to be so completely immersed in a project—not wanting to look away from my breadboard for a moment—that I had a silly smile on my face and forgot to have lunch.
I spent the past weekend in my absolute ideal way—intensively immersed in the thrill of rapidly tackling new concepts in programming and hardware! Thanks to the awesome WorkShop Weekend hosted at Tech Liminal in Oakland, I started Saturday morning with a shiny new kit of great Arduino tools and resources and no idea how to use them and left Sunday evening with an awesome LED Matrix Pong game and even a lesson on soldering under my belt, pages of project ideas and sketches, and full confidence in my abilities to get to the next level of electronic prototyping (with the help of the many many great online resources and Tech Liminal’s open Monday hack nights!).
Day 1 started with talks about Arduino history and basics, but we jumped right into example code immediately. Something so powerful about the Arduino is its ability to engage and educate people of almost all ages; it feels a lot like the snap-together electronic kit I had under my bed through my childhood—and proved to be just as hard to put down.
The learning from Arduino is two-fold, of course: The tool allows users to experiment both with circuitry and basic electronics as well as with the code that controls it—it really helped me isolate and merge both analog and digital concepts in my mind. And users can choose to focus on the aspects that most interest them—if it’s code (or “sketches” in Arduino [andProcessing] lingo), there are plenty of very simple sensor input setups that can be hooked up to complex and interesting Processing code or servers, and likewise very simple (or just copy/pasted) code can feed into myriad cool circuitry tricks.
Experiments in Basic Game Design: Pong!
After going through the basic tutorials, I was excited to move on to building the ‘Pong’ game project from code created by workshop facilitator J.D. Inspired by his suggested hacks for it, I set up the hardware (Arduino, LED 16x24 Matrix, two potentiometers and the usual mess of wires and resistors) and ran the code to use the potentiometer knobs to move the paddles up and down the sides of the board.
The potentiometers however, being small and tough to move quickly or with your fingers, were pretty uncomfortable and ineffective, so I began to devise ways to play with other inputs to move the paddles. At first I was set on using two buttons per side that would move the paddles when pushed, but found that the 11 pushes it would require to move the 5-pixel paddle from the top of the 16-pixel screen to the bottom too cumbersome and slow for good engaging play, and that increasing the number of pixels moved per click lost too much control.
I then heard about flexsensors—strips of a magical plastic-y material that can measure and record the amount they are bent. These inputs seemed like they could be more comfortable and intuitive joystick-like paddle controllers. Flexsensors in harnd, first I had to figure out the comfortable and relevant sensititives of the flexsensor to this project, which involved running a lot of test script on the ’duino and moving the flex sensors as joysticks to establish that a range of about 700 to 900 on the raw input readings (Analog.Read) from the sensor was an effective and intuitive range.
Another problem was that the moving ‘ball’ would sometimes get stuck into a sort of equilibrium when it was released—at the angle it was being released at, from any of the middle four y-axis pixels the game would be pretty impossible to lose for one player but require repeating the same simple motions over and over for the other. I was able to make the game more interesting by changing the slope and speed at which the ball was sent into play, again within a reasonable range determined through testing.
It was pretty cool to build and hack the game, but I’ve still got a long wishlist of hacks to figure out on this game to make it more effective, including the ability to manually set the number of points needed to win before each game, to create a “solitaire” version which tracks the amount of time a the ‘ball’ is kept in play for players playing against themselves, and to alternate which side(/player) the ball is released from each round. I’m generally fascinated by game design and want to learn more, as it feels like the closest an ‘engineer’ at my level can tangibly get to artificial intelligence—the idea of creating a game made of code that can beat me (my creation winning against its creator!) it totally awesome and kind of scary…in a good way.
I spent later Sunday afternoon working an awesome project introduced by another workshop facilitator to control a lamp switch through the internet (local network) through the Arduino, which I was excited to bring my raspberry pi into a well. The possibilities of expending this project are limitless—I can imagine my dad using it to control the lights or monitor the temperature at home while out of town, and I’d want to build something for my master-gardener mom to monitor her plants remotely with (possibly expanding from one of the incredible tweeting-plant projects online).
I was also excited to be working alongside an inspiring industrial designer who was working on such product ideas as a coffee cup/commuter mug with a liquid temperature sensor, which I was excited by for completely selfish reasons (it could really improve my morning bus-stop tea experience!). In our discussions, we realized that an actual temperature reading of the liquid (eg “70 degrees F”) would not be very useful, but rather we’d need to do sensitivity testing (for both the thermistor sensor and our tongues, unfortunately) to establish the ‘Goldilocks’ ideal warmth (or comfortable range) and at what point it becomes unpleasantly cooled or too-hot-to-handle/tongue-burning and communicate them with a lighting or display scale that’s more legible to the user. I get even more excited then dreaming up ways to actually build the rest of the prototype—could the thermistor temperature sensor be built into a glass casing built at the Crucible? Or maybe I could hack an old commuter mug, cutting holes in it to put the sensor with a basic microcontroller? Or we could 3D-print a new specialized casing?
The bottom line
The Arduino is such an incredible tool for learning and prototyping, and I’m so glad I took the time to really set out to learn it (and grateful for the opportunity from Workshop Weekend). I wish I had started learning the basics of coding/programming logic and systems thinking with these basic circuitry/computing/processing tools, as they’re so tangibly immediately gratifying—when your code works and your circuit is set up properly even in the most basic intro tutorials, you get flashing lights or music playing! Probably the most impressive super-simple tutorial I did over the weekend was building a digital “etch-a-sketch”, which was great also to dig into Processing a bit. Much more motivating for me that trying to comprehend the mysteries of how a browser reads my HTML/CSS to make my web pages display… Can’t wait to learn more, apply it to new ideas/projects and teach others! (which is dangerously easy because I’d rather play—I mean, work…?—on the Arduino than anything else right now…)
I’m considering depending how much time I have trying to hack something together from various sensor and Processing tutorials to make some upcoming hiring fairs more fun; I’ve even mapped out the circuit schematic, but we’ll see…
Getting Started with the ’Duino: A Few Great Resources
- Adafruit—LadyAda is too cool for words and my life icon. I hope little kids today are growing up with this geek goddess as role model.
- SparkFun Inventor’s Kit—lots of great intro projects with instant satisfaction (ie blinking lights and sounds!)—be sure to go to download the sketches too.
- Make:SF and other maker meetups! I can’t thank the incredible Workshop Weekend crew and everyone who answered my incessant questions for the past several days enough. So excited to continue learning with this community!
Any ideas/suggestions/resources/tutorials from anyone reading this about any of the projects/ideas described above or any more resources that could help myself and others learn more would be greatly appreciated, please be in touch and thanks for being a part of the start of my hardware hacking journey & maker life!