• If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Stop wasting time looking for files and revisions. Connect your Gmail, DriveDropbox, and Slack accounts and in less than 2 minutes, Dokkio will automatically organize all your file attachments. Learn more and claim your free account.



Page history last edited by Michelle 9 years, 3 months ago

Michelle Del Rosario

EE47 Final Project - Interactive Plush





Create an interactive plush that responds to how it's handled physically.



Fig. 1 - Paper Thoughts


When I first started thinking of this final project, I knew I wanted to make something involving plush work. This desire came from the fact that I am a plush-maker hobbyist, and I'm always looking for new ways to improve my craft.

My paper thoughts (Fig. 1) are snapshots of potential design ideas on how I wanted this plush to work out. Initially, I thought about imbedding an MP3 player inside a plush, but from a usability standpoint, the controls would not be very intuitive and I figured the plush would be more fun if you could interact with it in a more "play-natural" manner instead of forcing MP3-playing abilities on it.


Fig. 2 - Final Thought


With this in mind, I set out some drawings of potential chinchilla (cute, fat things <3) plush designs. I later settled on a simplified and generally round plush (Fig. 2) that I wanted to make noises based on how it was handled. This was inspired by a Pokemon Pikachu toy I saw a while ago that produces different sounds based on its acceleration. So, as a challenge to myself, I aimed to implement a rudimentary version of that toy with the Arduino, an accelerometer, and an embedded 8-Ohm speaker.






In order to get this plush working, I knew I had to do a few things:


1.) Understand and monitor the plush's orientation via accelerometer and respond accordingly

2.) Build the plush that will withstand mildly rough play and maintain the integrity of the accelerometer's idle/neutral position

3.) Think of appropriate sound tones to reflect the different changes in the plush's orientation state.


Based on a previous lab, I figured the circuitry wouldn't be very hard, so most of my time was spent reviewing mathematics and researching ways to convert the accelerometer's voltage readings to meaningful orientation data.


In addition to the circuits, I also had to plan for creating a plush with an embedded board. I've never tackled on embedding items, so researching how to use zippers (in retrospect maybe velcro would have been easier) to open and close the plush was another point on the list of things to do.



The biggest challenge in this project was understanding how to convert the accelerometer's readings from voltages to meaningful 360-degree orientations. Finding this information is not very search-friendly as I had to dig through numerous forum threads (only to find quite a few of them did not pertain to me), Instructables, and hobbyist web pages. I did come across a research paper that described in great detail how to perform the necessary conversions to unit circle measurements, but I needed to go a step further to output degrees for debugging and easier coding cases.


Outside of the electronic component, the plush itself had an interesting challenge in that I had to adjust the size to be large enough to embed the electronics but reasonably small enough to be fun to handle. I went through several iterations for the plush's pattern and a few more for a decent size. One thing that was constantly on my mind was how to embed the accelerometer such that its idle orientation was consistent and minimized the potential to get jostled and thus angled incorrectly inside the plush.



I managed to implement basic functionality and proof-of-concept with a plush prototype. Personally, I had wanted to completely polish the product, but I ran out of time and had to suffice with functionality over completeness.






Overall, the plush responds in a very basic way. It constantly monitors its current orientation and plays the appropriate sound array (constructed from the tone library) to match the plush's various tilts. I wish the speaker wasn't so muffled inside the plush, and I also wish I could have polished the plush such that it was not merely a fleece prototype but an aesthetically pleasing toy.


Future Iterations:

For the future, I would like to improve the sound quality such that the tones would be louder. Additionally, instead of simple tones, I would like to use the mp3 decoder and play more sophisticated sounds from an SD card. I think it would be beneficial to create a special fabric casing inside of the plush to house the board and keep the stuffing from mixing with the wires.






I picked up several sources of inspiration. They are mostly sound effects and observations of other interactive plush toys. Below are a few links to illustrate my point.


Interactive Pikachu Plush



Walking Sound Effects





Fig 3. Use Cases and State Diagram


The basic functionality of the plush involved several orientation states:

1.) On feet

2.) Tilt Forward

3.) Tilt Backward

4.) Tilt/step Left

5.) Tilt/step Right

6.) On Side

7.) On Face

8.) On Back

9.) On Feet


For each of the states, you could jump to the next state. Ideally, I wanted to code up complex sound effects based on a combination of states. For example, if you switch between step left and step right, you would initiate a brief few seconds of walking sound effect.


Needed Parts:

Pretty straight forward parts - accelerometer, speaker, resistor for speaker, Arduino, and an external battery source to power the accelerometer while it is embedded in the plush.



This was a tricky situation in that I needed to make sure the accelerometer's orientation inside the plush would never shift otherwise it could potentially flip upside down and "ruin" the specified state threshold settings (making up seem like down, etc.).



I wanted to do a polished plush with very nice fabric and a inner fabric covering to separate the stuffing from the board, but I settled on a fleece proof-of-concept.



Circuit & Pin Setup:

Fig. 4 - Circuit on perfboard




8-Ohm Speaker

100-Ohm Resistor (for speaker)

Accelerometer (MMA7361 in this case)

Arduino (Nano in this case)

3.3v-5v battery holder



analog 0: accelerometer self test

analog 1: z-axis

analog 2: y-axis

analog 3: x-axis

analog 4: ground

analog 5: vcc


digital 8: 8-ohm speaker

Speaker should have 100-Ohm resistor attached to one end and the other end put to Ground

Battery holder should be attached to Vin and Ground


Orientation Algorithm:




Fig 5. Initial drafts to understand orientation

Fig 6. Second draft of orientation configuration



Figuring out the algorithm and mathematical understanding to create meaningful orientation data in 360 degrees was a bit of a tough task. As you can see from my initial (Fig. 5) and secondary (Fig. 6) attempts to map out these orientations, I first tried to map voltage readings into orientation. This wasn't very easy to discern the difference between different states, so I scoured the web for a better way to represent my orientation.



Fig 7. Final draft of orientation understanding

Fig. 8 - 3Axis and World representations of Idle/Neutral orientation


I came across this paper (http://cache.freescale.com/files/sensors/doc/app_note/AN3461.pdf) that explains, albeit somewhat heavily-ladled with jargon, its conversion procedure. This was great for getting readings in terms of -PI to PI, but still not very intuitive for me. I then stumbled onto Bildr's code (http://bildr.org/2011/04/sensing-orientation-with-the-adxl335-arduino/#) and modified it to suit my needs. From this new understanding, I updated my orientation drafts (Fig. 7) to make more sense to me (Fig. 8) as I figured out what values should correspond to the physical representation of the accelerometer.


Plush Pattern

Fig. 9 - Plush iterations and pattern


The pattern is fairly simple, using darts and modified sphere pieces to make a rounded plush with a flat face. Here you can see the three variations from right to left of my initial, secondary, and tertiary plush prototypes. I had to increase the size each time as I tried to embed my device. Honestly, the reason the plush gets bigger is because the container I used to shield my device from static electricity and breakage from rough play was slightly larger than the interior had space to allow.





8-Ohm Speaker

100-Ohm Resistor (for speaker)

Accelerometer (MMA7361 in this case)

Arduino (Nano in this case)

3.3v-5v battery holder



analog 0: accelerometer self test

analog 1: z-axis

analog 2: y-axis

analog 3: x-axis

analog 4: ground

analog 5: vcc


digital 8: 8-ohm speaker

Speaker should have 100-Ohm resistor attached to one end and the other end put to Ground

Battery holder should be attached to Vin and Ground



interactivePlush.pde (outdated, but neat if you want to check some of the initial conversion algorithms I used)












Modified from the following code source examples:





Further reading:







Comments (0)

You don't have permission to comment on this page.