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.  

Remove these adsRemove these ads by Signing Up

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.

electroman90 (author) 1 year ago
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);