Voice Activated Rocket Launcher

Introduction: Voice Activated Rocket Launcher

This project combines an Emic 2 text- to- Speech module, a ultrasonic Ping))) distance sensor, the MAKE compressed air rocket launcher, and an Arduino Uno.
This project could be used for security, pranks, and many more fun things.  

Step 1: Materials

You will need to acquire the following materials:

-  Arduino Uno R3 (x1)

-  Breadboard (x1)

-  Emic 2 (Rev. A) Text- to – Speech module (x1)

-  PING))) Ultrasonic Distance Sensor (x1)

-  Jumper Wires

-  NPN transistor (MP 2222A) (x1)

-  100 Ohm resistor (x1)

-  8 AA battery holder (x1)

-  AA batteries (x8)

-   9V battery clip (x1)

-8 Ohm speaker (x1) (not shown)

-  Compressed Air Rocket Launcher (from Makershed) (x1)

-  Bicycle pump (x1)

-  Paper rocket

Step 2: Emic 2 Connections

1) Place the Emic 2 on the breadboard, and connect the anode and cathode of the 8 Ohm speaker to ( SP--) and (SP+) pins on the Emic 2.

2) Connect the (SIN) pin of the Emic 2 to digital pin 3 of the Arduino, and the (SOUT) pin of the Emic 2 to digital pin 2 of the Arduino. 

3) Connect the Emic 2 to the 5V and GND rail on the breadboard.

Your connections should look something like in the picture.

Step 3: Ping))) Connections

1) Connect the (5V) and (GND) pins to the voltage rail on the breadboard, and connect the voltage rail with the Emic 2 and Ping))) power inputs attached to the (5V) and (GND) pins on the Arduino.
2) Connect the (SIG) in of the Ping))) to digital pin 7 on the Arduino

The connections with the Emic 2 and Ping))) should look something like in the picture.

Step 4: Transistor Connections

1) Place the Transistor into the breadboard. MAKE SURE THE BULKY SIDE OF THE TRANSISTOR IS FACING YOU!!!, This is to make sure that you are placing the wires where you are supposed to.
2) Connect the rightmost pin of the transistor to the voltage input of the rocket launcher and to the unused (GND) pin of the Arduino.
3) Connect the middle pin of transistor to the 100 Ω resistor, and connect the resistor to digital pin 12 of the Arduino.
4) Connect the leftmost pin of the transistor to the positive wire of the 8AA battery pack (with the 9V battery clip)
5) Lastly, connect the negative wire of the 8AA battery pack (with the 9V battery clip) to the negative input of the rocket launcher

The transistor connections (without Emic 2 and Ping))) ) should look like this picture.

Step 5: Code for Arduino

Copy the attached document  for the Arduino into the Arduino IDE and upload it to your board.

1) The code first establishes an environment in which it will run and other important information it will need later in the program. 
2) In the setup() function, the program sets up the Emic 2, and other variables to be used later in the program.
3) In the loop() function, the program first checks the distance with the ping))) sensor, then calls another function called check(), this function checks if the distance is less than the limit or greater than the limit and then performs what it is asked to do.

Step 6: How to Use This Device

1) Pump your launcher to the desired psi, then load the rocket

2) Equip the Arduino with power and once you walk in front of the distance sensor, it will speak the desired text before launching the rocket.

Please use this device for good, not evil if you have any questions email me at ardendiak@gmail.com

Thank you for reading

Arden Diakhate- Palme

Be the First to Share


    • Pets Challenge

      Pets Challenge
    • Leather Challenge

      Leather Challenge
    • Digital Fabrication Student Design Challenge

      Digital Fabrication Student Design Challenge



    5 years ago

    I think I would call it Proximity activated rocket launcher. However, I like it because it shows how to get the emic2 to announce what it is reading from a sensor. Not caring too much about the rocket.


    5 years ago

    if you need data for the four pin sensor, its here



    5 years ago

    could you change the code for the four pin ultrasonic sensor ? Please ?


    8 years ago on Introduction

    There was a problem and the code for this project was not attached. I am attaching it in this comment:


    This program is based off the demonstration of the Emic 2 module by
    Joe Grand [www.grandideastudio.com]


    #define rxPin 2 // Serial input (connects to Emic 2 SOUT)
    #define txPin 3 // Serial output (connects to Emic 2 SIN)

    // set up a new serial port
    SoftwareSerial emicSerial = SoftwareSerial(rxPin, txPin);
    const int pingPin = 7;
    long int duration, distanceInches, distanceCm;
    byte LimitCm= 30;
    byte ledPin = 12;

    long microsecondsToInches(long microseconds)
    return microseconds / 74 / 2;

    long microsecondsToCentimeters(long microseconds)
    return microseconds / 29 / 2;

    void setup() // Set up code called once on start-up
    // define pin modes
    pinMode(rxPin, INPUT);
    pinMode(txPin, OUTPUT);

    // set the data rate for the SoftwareSerial port

    When the Emic 2 powers on, it takes about 3 seconds for it to successfully
    intialize. It then sends a ":" character to indicate it's ready to accept
    commands. If the Emic 2 is already initialized, a CR will also cause it
    to send a ":"
    emicSerial.print('\n'); // Send a CR in case the system is already up
    while (emicSerial.read() != ':'); // When the Emic 2 has initialized and is ready, it will send a single ':' character, so wait here until we receive it
    delay(10); // Short delay
    emicSerial.flush(); // Flush the receive buffer

    void loop() // Main code, to run repeatedly
    //check distance with Ping)))
    pinMode(pingPin, OUTPUT);
    digitalWrite(pingPin, LOW);
    digitalWrite(pingPin, HIGH);
    digitalWrite(pingPin, LOW);

    pinMode(pingPin, INPUT);
    duration = pulseIn(pingPin, HIGH);

    distanceInches = microsecondsToInches(duration);
    distanceCm = microsecondsToCentimeters(duration);



    void check()
    if (distanceCm > 30)
    while (emicSerial.read() != ':');
    if (distanceCm < 30)

    emicSerial.print("object detected. Fire.");
    while (emicSerial.read() != ':');

    digitalWrite(ledPin, HIGH);
    digitalWrite(ledPin, LOW);