Jerusalem Makers Meet ng-simon
ng-simon takes a trip to the Jerusalem Mini Maker Faire
The Jerusalem Mini Maker Faire is a two-day event where makers, artists, and inventors gather at the Jerusalem Science Museum to show their stuff and share what they’ve been working on with the community. I had brought my angular-powered Simon game to ng-conf last May, and I thought it would be fun to bring it to the Mini Maker Faire and share it with other makers and the families and children that attended the event. My girlfriend and I attended both days of the event, and had a great time showing off ng-simon and seeing what other neat things people had built.
(It was also — so far as I know — the first time in history that an Angular 2 application made it into in a museum :)
ng-simon was on display for two days, and we had hundreds of people playing the game. Overall, there were 1274 games played on Simon. The high score was 21 (we were there when it was made, and my girlfriend asked for the boy’s age: the high score was made by a 7 years old!).
While children of all ages played the game, we observed that 4 year old children seemed to be the youngest capable of actually understanding what they have to do (so: ng-simon, fun for all ages 4 and up!). Younger children simply hit the button randomly, or would repeat the last button lit.
There was one remarkable case of a 3 year old toddler who was able to get the idea behind the game and actually repeat the sequence. True, his father kept explaining the idea behind the game and repeatedly played with him until the toddler was able to play on his own , but still: pretty impressive! Although he scored only 3 or 4 points in each game, it was obvious that he understood how to play the game.
Another thing we noticed is that children were much more engaged by the game than the adults at the faire. The children played multiple games, and we saw some of them coming back several times, determined to practice and improve their skill, while most adults played once or at most twice, had fun and then moved away.
One more interesting thing we observed was that there was an interesting distribution of the color button that players chose to start the game with. You’d maybe think, there being four buttons, that each button would be pressed about a quarter of the time. Instead we saw this distribution:
While the Red and Blue are where used roughly quarter of the time, the use of green and yellow were notably different. You would maybe expect that, if they weren’t going to be used evenly, the green button would be pushed more often, as green usually means “Go!” However, you can see that Yellow was the most popular, and green was the least. Any UX experts in the audience that can come with an hypothesis why? (Oh, and yes: the sample size was statistically significant).
I had a lot of fun talking to people attending the faire. They all complimented the awesome enclosure my talented sister Noa designed, and they asked a lot of interesting questions about ng-simon.
One of the questions I was repeatedly asked by other makers was why I chose Raspberry Pi as the brain of the game.
If you google it a little, you will find that a simple Arduino is sufficient for running a Simon game — in fact, the original Simon game was based on a TMS1100 Microprocessor, which has much lower specs than the ATmega328P processor used by the Arduino Uno.
The Raspberry Pi is more than 2 orders of magnitude faster than the Arduino, but the Arduino is still more than 3 orders of magnitude faster than the TMS1100. So yes, you can definitely use an Arduino to build a Simon game:
So why did I go with the extra processing power of the Raspberry Pi? There were several reasons.
First and foremost, the Raspberry Pi, being a fully featured Linux system, is remotely controllable — you can use an SSH client to open a command line on the Raspberry Pi over either a Wi-Fi or a Bluetooth connection, and run commands and change the configuration as necessary.
For example, when we were setting up the game for display, there was a lot of noise around from other people setting their work up for display, so we set the volume on the game to REALLY LOUD. When people started to come in, we saw that when little children stood next to their parents or elder brothers playing the game, they covered their ears. Perhaps the reason was that their ears were the same height as the game, so they had the sound right in their ears, or that young children are more sensitive to certain sounds — but I knew we had to fix it.
I fired up an SSH connection to the Raspberry Pi, and adjusted the volume level. It was fascinating to see how the toddler stopped covering his ears the moment we lowered the volume, all while his brother was in the middle of a game. So using the Raspberry Pi allowed us to control the characteristics of the game (volume) remotely — while people were playing and without having to tear apart the hardware to physically plug into a micro-USB port — and find the sweet spot to make the game more toddler-friendly.
In addition to being able to remotely control the hardware characteristics of the device, being able to SSH into the Raspberry Pi also lets us deploy new features to the game itself on the fly.
We were seeing that, in some cases, players just left the game in the middle (as there were a lot of distractions around), making it confusing for the player that tried to play next next. We decided to add a timeout feature: if the game hasn’t been touched for 20 seconds, simply stop the game.
Fortunately, because Angular — the framework used to build ng-simon — was originally designed as a web technology (which has since expanded to mobile and physical devices as well), I was able to quickly prototype and test the new timeout feature in the web browser of my laptop, and then deploy it to the Raspberry Pi where it worked straight away.
When I built ng-simon for ng-conf, I’d originally wired the game to Firebase, a real-time cloud database service. Real-time here means that it keeps the data synchronized between different clients — kind of like Dropbox, but for data instead of files. I put Firebase there in order to display the current game status and high score on screen.
Unfortunately, the dashboard actually distracted the players at ng-conf from the game itself, so this time we ditched it.
We did, however, build a quick dashboard for us at the Jerusalem Mini Maker Fair — we wanted to know how many games were played so far, what the high score was , and what the current game score was. This allowed us to monitor the game while walking around and enjoying the other Faire attractions. Using the Raspberry Pi made it super-easy to connect to cloud services, such as Firebase, and report the score in real time. I also published the link to this dashboard on twitter, so others could see the game status in real time.
Firebase made it super easy to build the ad hoc dashboard: a few lines of code was all it took to connect to the server and update the data in real time. What you can see on the left-hand side below is all it took!
Finally, the Raspberry Pi, as a full-computer, is capable of playing sound files. We logged into it several times and started playing animal sound files in order to attract players (we found that cat sounds were really good at attracting toddlers).
However, I think that the biggest advantage of using the Raspberry Pi and working with Firebase was the ability to collect some statistics after the event finished. There were hundreds of projects and demos presented, but I believe none of them had the privilege of knowing how and when they were used. Here are some of that stats we collected:
All in all, the Maker Faire was a lot of fun, and it was really cool to see such a wide range of users play the game.