Introduction: Voice Activated Rocket Launcher

Picture of 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

Picture of 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

Picture of 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

Picture of 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

Picture of 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

Thank you for reading

Arden Diakhate- Palme


californiakayaker (author)2017-01-14

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.

californiakayaker (author)2017-01-13

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

californiakayaker (author)2017-01-13

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

electroman90 (author)2013-11-27

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 []


#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 ( != ':'); // 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 ( != ':');
if (distanceCm < 30)

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

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