Teddy Evil

Teddy Evil is a great way to scare those you love. He was created in the Odd Lab as a training project to use the Arduino controller. Yes it may be a little twisted but we had fun!

Below is a basic guideline on how to put together a Teddy Evil. Some additional skills may be requried including soldering and handling electronic components.


Introduction

Teddy Evil is built using an Arduino Uno, Adafruit Wave Shield, some additional electronics components and an audio file.

When turned on Teddy Evil will sit quitely while the lights are on, but after it goes dark he will get a bit more sinister.

Watch the video to see how he works.


"What is wrong with you people?"

Hana - First Victim


Equipment

To make this project you will need.

  • Arduino Uno
  • Adafruit Wave Shield
  • Light Dependent Resistor
  • Small Speaker
  • Resistor
  • SD Card
  • 9v Battery Case and Battery
  • Wire
  • Soldering Iron
  • Wire Cutters

Assemble and test boards

The first step is to assemble the Adafruit Wave Shield as per the instructions that come with the components. If you did not buy a pre assembled Ardunio Uno then you will also need to asseble this as well. Ensure that all connections that you solder are clean and secure.

With the boards assembled install the Arduino software from here. and run the sample sd card test to ensure that the boards are working correctly.


Get the audio files

This step entirely depends on what you want Teddy Evil to say. There are plenty of speech samples available on the internet in MP3 format, or you could just record your own.

When you have these ready save them onto the root of the formatted SD Card.


Assemble all the components

This is actually fairly simple. The best method is to assemble them into Wave Shield and then slot the shield into the Ardunio.

The steps you need to carry out are:

  1. For each of the two connectors on the small speaker solder a wire to the connector and the other end of the wire to the holes next to the headphone jack socket.
  2. Solder a wire to pin Analog 0 on the wave shield and solder the other end of the wire to one leg of your light dependent resistor.
  3. Solder the other leg of the light dependent resistor to the normal resistor.
  4. Solder the resistor to another wire and the remaining end of that wire to the GND pin.

Write the code

The code for this project has been kept simple. It works by checking the value of the Light Dependent Resistor at a set time interval. If the LDR value is less than the expected value (i.e. darker) then it plays the audio sound.

For our application we used the following code.

#include <wavehc.h>
#include <waveutil.h>
SdReader card;    
FatVolume vol;   
FatReader root;  
WaveHC wave;      
dir_t dirBuf;     
const int LDR = 0;
void play(FatReader &dir);
void setup() {
  card.init();
  card.partialBlockRead(true);
  
  uint8_t part;
  for (part = 0; part < 5; part++) { 
    if (vol.init(card, part)) 
      break;                           
  }
  root.openRoot(vol);
}
void loop() {
  int val = analogRead(LDR);
  if (val < 85)
  {
    root.rewind();
    delay(90000);
    play(root);
  }
  
}
void play(FatReader &dir) {
  FatReader file;
  while (dir.readDir(dirBuf) > 0) {
    if (!DIR_IS_SUBDIR(dirBuf)
         && strncmp_P((char *)&dirBuf.name[8], PSTR("WAV"), 3)) {
      continue;
    }
    file.open(vol, dirBuf);
    if (file.isDir()) {                                        
      play(file);                          
    }
    else {
      if (wave.create(file)) {       
        wave.play();                       
        uint8_t n = 0;
        while (wave.isplaying) {
          delay(100);
        }
      }
    }
  }
}

To Modify this code if you goto the loop() function you can change modify the sensitivity of the sensor and the time between the track being played.

  • On the line if(val < 85) if you modify the number 85 you will modify the sensitivity of the Light Dependent Resisitor.
  • On the line delay(90000) you will change the time between the software checking the sensor and playing the audio track if it is dark enough. The value is in milliseconds.

And finally...

Have fun and experiment on what other things you can do with Teddy Evil.


Please note all instructions and code provided on this site are provided as-is without any warranty implied or otherwise. These products are often incomplete proof of concept or experimental products and as such may not fully function as expected. These are provided for entertainment and learning only and can not be sold in any form. Intelligent Labs is not responsible for any loss or damage incurred from the use of these products. Use of these products is acceptance of these terms and conditions.