Curious is an interactive installation that introduces viewers to the idea of technology having its own personality. This behaviour is achieved by making Curious interested yet timid around the viewers observing it within the gallery. Curious is composed of main sections. The first section is the frame which is suspended a couple feet below the ceiling. The frame holds the majority of the electronics along with the two required two stepper motors. The second section is a horizontal light bar that is suspended by two cables, one at each end of the light bar. Each cable is attached to the stepper motors that is located directly above the light bar attached to the installation frame. The final section is the sonar sensor array that consists of 5 sensors that are located a couple cementers off of the ground.

The default state of the light bar is suspended a few feet below the installation frame and is glowing by the one meter 60 pixel NeoPixel strip that has been feed through the acrylic tube. The light bar creates light patterns to try and generate interest from people in the gallery. This is the installations way to try and beckon the viewers towards itself. When the viewer becomes close enough to the installation the light bar start to mimic the user’s movement if they move from the left side to the right side of the bar. It essentially tries to  bond with the user through imitation in motion. If the viewer gets too close to Curious it become nervous and scared. When this happens Curious will fade it’s lights to be completely off and raise itself back up to be just under the suspended frame. Curious is  trying to hide from the unfamiliar creature, the gallery viewer. Finally, when the viewer backs away Curious starts to lower itself from above in an investigative manor. This includes lowering one side and than the other of the light bar and animating the light back and forth as the bar is being lowered as well as slow lowering of the light bar at a consistent speed while the LEDs preform a number of creative light patterns.



The frame that holds all of the electronics is held from the ceiling,  there is no guarantee for what the hight of the gallery ceiling will be. This made it pivotal to devise a solution to be able to adjust and configure Curious to be able to behave with these uncertainties. To solve the problem of not knowing how high the frame will be off of the ground and how far the motors will have to raise and lower the light bar I created different modes in the Arduino logic to set the starting position of the light bar and to adjust the steps for each motor incase they went out of sync. This communication was through the serial port or by using the HC-05 Bluetooth module. Having this configurability in a “Configure Mode” I was able to wirelessly control the motors individually to correct any errors in the motors preventing the light bar from being completely horizontal in its default state. Another state that was programmed in and controllable via serial or Bluetooth was the ability to control how the installation behaved depending on how busy the gallery is. There is a low traffic and high traffic setting to change how the installation would react to its surroundings. The low traffic mode would behave like explained above with Curious having a sudo-personality and the high traffic setting sets the light bar at a static height and illuminates the bar with glowing lights and rotating colours animating from left to right.

IMG_1970 IMG_1937


When coming up with the form and design of Curious I went through more than a couple  iterations and revisions. I sketched out my ideas and got feedback from classmates and friends on which they preferred. Below are some selected sketches to illustrate my thought process on the design before I started manufacturing the installation.

IMG_1986 IMG_1990 IMG_1989 IMG_1988


The main challenges I faced when working through the different iterations and stages of prototyping and developing Curious were:

  • getting the proper volts for the NeoPixels to run correctly
  • getting the correct volts and amps for the stepper motors to work properly without burning out the Adafruit Motor Shield and its Integrated Circuits (IC)
  • the weight of the cables and their flexibility when to winding up the light bar
  • the stepper motors axle diameter in comparison to the diameter of hole meant for the axle in the pulley
  • reading and storing returned distances from the five different sonar sensors on the sonar bar

To solve the volts issues with the NeoPixels and the stepper motors it was a matter of lots of reading and testing different circuits. I had to use a 1000uF capacitor for the NeoPixels  to work correctly. With the stepper motors, I was originally trying to use 5 volt and 1 amp to control them but that was too weak — I needed more power. I switched to trying 9 volts and 2 amps, this also didn’t work; the motors needed exactly 5 volts. With the requirement of 5 volts being required I started to use a voltage regulator which helped me get 5 volts to the motors but the regulator was overheating. The voltage regulator also would only output 1 amp, as mentioned above this wasn’t powerful enough. I still needed more amps. The solution was to use a different power supply that would output 5 volts and 3 amps. Once I had this piece of the puzzle working correctly I was in business. Even with 3 amps there was still a little bit of motor slippage which I think is that the motors can still accept more amps but the motor shield I am using can only handle 3 amps — even after I added heat sinks to the motor shield motor driver IC chips.

In the next iteration of Curious I would like to use smaller but more powerful motors that also would need fewer amps. With what I learned about stepper motors I would be able to improve greatly how they are integrated into the installation. For this current version I had to spend a lot of time figuring out the correct power and configuration to control the stepper motors.

It was a challenge to come up with a solution to connect the pulleys with a large diameter to the motor axle of the stepper motors that have a very small axle. Initially I had tape wrapped around the motor axle to increase the diameter, this became loose after the motors were running for 10 to 15 minutes. As the motors were running they heated up and the glue on the tape started melt and lost its adhesive properties. The second solution I came up with was creating an axle extender that attached to the motor axel. This was crafted out of wood. This worked but it pushed out the pulley too far from the motor which isn’t what I was looking for either. The end solution, as embarrassing as it is was to fold thin pieces of cardboard to the height of ½ the diameter of the pulleys diameter and use that to center the pulley on the axle when screwing down the pulleys axel bolt. This solution would need to be revisited in the future for a better solution. Perhaps a bushing or a piece of custom made hardware would be needed.


With my prototype I used a very flexible and lightweight rope that was connected to the pulleys on the motors to the light bar. When I was getting ready for the install in the gallery, for aesthetic purposes, I switched over to a thin cable. This was problematic due to the cable needed more weight applied to it, pulling down to keep the cable taut. The light bar did not offer enough weight. Not having enough weight also prevented the cable from winding up on the axel tightly. There was some slippage from the cable because of this. To solve this in the future I would use another form of cable or weigh down the light bar enough to keep the cables taut and wind up on the pulley nicely.

To store the sonar values I forked the Arduino Array library and updated it to work with the newer versions of the Arduino IDE as well as added the `getMinIndex` and `getMaxIndex` functions to help with Curious.

The final hiccup with the development of Curious was the way that the Ping sonar sensor library behaved when I was when trying to read the returned values from the multiple  sensors. This was an issue because I was also controlling 60 NeoPixels and two stepper motors a bluetooth chip along with the five sonar sensors. To solve the issue of inaccurate returned data and the fact that there is a delay in the Ping sonar library messing up some timing I switched over to using the NewPing library which allowed for better readings of multiple sonar sensors.

I’m looking forward to working on this project further iterating some features and functionality and fine tuning it and taking it to the next level!




Source Code