First step towards the mid-term project

For the mid-term project, Mint and I decided to work on a game.
Without exposing too much about the the project – we are working on a game that will combine physical cannon, and a digital targets.

The cannon is sort of a shaker. User needs to shake to cannon to a certain point in order to shoot it. Needless to say, shaking and aiming at the same time will make the game challenging, and hopefully interesting and enjoyable.

We used the built-in accelerometer on Arduino 101, and we wrote Arduino code that will identify when user shakes the cannon, and when the cannon was shakened  long enough, and it is ready to fire.

It sounds a little abstract, but I’m sure that it will be very clear when the game will be ready.

This is what we have so far:

The making of ‘the pcomp shooter’: part 1 from Dror Ayalon on Vimeo.


This is the Arduino code we used (the examples on were very helpful):

#include "CurieIMU.h"
#include "pitches.h"

float oldx, oldy, oldz, newx, newy, newz = 0;   //scaled accelerometer values
float axp, ayp, azp;
int bullet = 0;

int bang[] = {

int noteDurations[] = {
 2, 2

void setup() {
 Serial.begin(9600); // initialize Serial communication
 while (!Serial);    // wait for the serial port to open

 // initialize device
 Serial.println("Initializing IMU device...");

 // Set the accelerometer range to 2G    -2 to 2

void loop() {

 // read accelerometer measurements from device, scaled to the configured range
 CurieIMU.readAccelerometerScaled(newx, newy, newz);

 // percentage
 axp = 100 - (oldx / newx) * 100;
 ayp = 100 - (oldy / newy) * 100;
 azp = 100 - (oldz / newz) * 100;

 // display tab-separated accelerometer x/y/z values
 Serial.print("axp: ");

 Serial.print("ayp: ");

 Serial.print("azp: ");

 Serial.print("bullet: ");

 if (( axp > -100) && ( axp < 100 )) { bullet = bullet - 0.5; } else { bullet = bullet + 4; Serial.print("SHAKING!!!"); Serial.print("\t"); } if (bullet >= 100) {

   int noteDuration = 1000 / noteDurations[0];
   tone(8, bang[0], noteDuration);
   int pauseBetweenNotes = noteDuration * 0.5;

   noteDuration = 1000 / noteDurations[1];
   tone(8, bang[1], noteDuration);
   pauseBetweenNotes = noteDuration * 0.5;

   bullet = 0;


 oldx = newx;
 oldy = newy;
 oldz = newz;


What’s next?

  • To build the graphical part of the game in p5.js.
  • To solve the sound problem: We couldn’t find a way to make the sound louder from the speaker connected to the Arduino.
  • To do some fabrication work and to make sure that the cannon has the ‘right’ feeling in the users’ hands.
  • To play the game over and over, make some changes, and make sure that it’s fun.

Device motion and orientation data

In continue to my previous post, I decided to take the first step in building my next project (more about it soon).

I  followed the Web API instructions about how to detect device’s movement (using the device accelerometer sensor) and orientation (using the device orientation sensor), and experimented with getting and presenting the this data.

You can see the end result here.

I wrote the following code for the task (This code gets the device movement and orientation data, and appends it to the DOM’s body) –

And this is the result (the changes in the blue numbers occur because I rotated my phone, while the most of the changes in the red numbers cause because the Web API library is still in beta, and doesn’t deal well enough with the device accelerometer) –

Apparently, my Macbook Pro also has an accelerometer, to protect its hard-drive while moving the laptop –

Try it yourself.

Here’s the entire code on GitHub.