Introduction: Straw-rocket Launcher Controlled by Arduino

About: If you want to do people to build ships,... All you need to do them to crave greatness and the vastness of the sea Antoine de Saint-Exupery

This instructable is about making a launch platform for straw-rockets in a way that kids would have great fun and older kids with help of educators could work on a STEM project (see the last step for some ideas).

The construction could be reproduced according to local market materials. The electronics are simple and based on arduino technology. This way is really a low cost project.

The presented block diagramm shows all the steps needed for the launch and measurements. In a few words: after pumping in air with a bicycle pump so to achieve a pressurre of 70 to 90psi, somebody can start a reverse counting to launch using a fancy switch. This count down includes blinking high power LEDs one after the other accompanied with annoying sound ("watch out" meaning) from the speaker. There is an escalation in blinking and sound frequency until the launch. Somebody could make his own scenario in that!

Step 1: Materials

Electronics

  1. arduino UNO X 1
  2. relay module X1
  3. transistor TIP120 X4
  4. resistor (3 Ohms / 1 Watt) X4
  5. resistor (1K /0,25W) X 5
  6. toggle switches X 2
  7. push button switch X1
  8. high power (1Watt) LEDs X4 (three red , one blue)
  9. 220 Ohm resistor X 1
  10. 8 Ohm speaker X1
  11. DC power plug for arduino 2.1mm
  12. DC power plug for the relay-electrovalve
  13. 12V battery (LiPo) for the electrovalve
  14. 12V electrovalve
  15. cables
  16. PCB prototype board or a breadboard (400)

Hydraulics

  1. manometer with scale up to 10atm
  2. tubes strong enough to endure 10 atm (yellow and blue ones in the photos)
  3. one directional valve (the air should pressed in and stay there!)
  4. metal tubes (as you see) or plastic ones that could store some air more than the tubes themselves
  5. a plastic (the white one in the photos) or metal tube that could be set in the straw-rockets (so straws should be wider than this tube)

Box

I have used two pieces of plexiglass 50,5 X 51,5 cm properly cut.

Silicone or instant strog glue.

Some screws.

Step 2: Power LEDs Circuitry

All the information needed is on the photos. I would strongly recommend the Arduino Cookbook from Michael Margolis for detailed help. This is also true the speaker circuitry.

Step 3: Speaker Circuitry

Watch out the polarity of the capacitor. With the wrong one the speaker does't ... "speak"!

Step 4: Hydraulics

The idea is simple. You pump in air checking thw manometer, until the pressure you want is reached. Then, when everybody is ready, you launch the count down and there is no way back! After about 10secs the rocket is launched.

Step 5: Bring Everything in a Box!

This particular configuration has been choosen, so that all electronic part could be easily seen and reached. The parts of plexiglass are glued with silicone or strong instant glue.

All the holes have been drilled before taking off the protective plastic membrane.

The dimensions have to do primarily with the hydraulic parts. The space is more than enough for the electronic parts. Some other hydraulic configuraton would lead to a completely different size and shape.

Step 6: The Code! (without LCD)

//with this code the duration of flight is shown on the serial screen, so in order to measure flight time you // have to have a laptop connected to your circuit

const int launchPIN = 2;
int redLED1=3; int redLED2=4; int redLED3=5; int blueLED=6; byte speaker=9; char flag=0; const int switchPin=12; int buttonState = 0; byte buttonflag=true; long startTime,duration;

void setup() {

Serial.begin(9600);

pinMode(redLED1,OUTPUT);

pinMode(redLED2,OUTPUT); pinMode(redLED3,OUTPUT); pinMode(blueLED,OUTPUT); pinMode(speaker,OUTPUT); pinMode(7,OUTPUT); pinMode(launchPIN, INPUT); pinMode(switchPin,INPUT); digitalWrite(switchPin,HIGH); pinMode(13,OUTPUT); }

void loop() {

digitalWrite(13,HIGH);

buttonState = digitalRead(launchPIN);

if (buttonState == HIGH)

{ if (flag==0)

{ delay(1000); blinkLED(redLED1,1000); blinkLED(redLED2,1000); blinkLED(redLED3,1000); for (int j=0;j<6;j++)

{ playTone(477,300); digitalWrite(6,HIGH); delay(100); playTone(15289,300); digitalWrite(6 ,LOW); delay(100); }

digitalWrite(6,HIGH); playTone(477,2000); digitalWrite(6,LOW); relayON(); startTime = millis(); flag=1; } }

else {flag=0;}

if (flag==1) {delay(300);} relayOFF(); int timestate=digitalRead(switchPin);

if (timestate==0) {duration=millis()-startTime-300; Serial.println("Rocket flight time = ");Serial.println(duration);}

}


void blinkLED(int pin,int duration)

{ digitalWrite(pin,HIGH); delay(duration); digitalWrite(pin,LOW); delay(duration); }

void relayON() { digitalWrite(7,HIGH); }

void relayOFF() { digitalWrite(7,LOW); }

void playTone(int period, int audduration) { int pulse = period /2; for (long i=0; i

Step 7: LED Straw Rocket Construction

A few words for constructing the simplest straw rocket. This one is equipped with a bright LED, something that makes it a little heavier as it should but much more attractive for night launch! The existance of the LED is only important for night flight so that the rocket could be found! This actually makes the rocket heavier and with less impressive results.

What you need is:

  1. a straw for juice (with a large enough diameter)
  2. three or four triangle shaped hard paper wings
  3. 2 X LR44 batteries placed in series
  4. some insulating tape
  5. female header
  6. a bright LED of your choice
  • You need a thick straw so that it can use as much as possible form the compressed air energy that is going to get from the platform.
  • Two LR44 batteries in series are enough to power a bright LED.
  • It's better to use a header where you can stick the LED at the last moment, so that you can easily change it and for having a circuit, where your LED would act as a switch. Pluging it in, makes the circuit ON!
  • The front part of the rocket should be well fastened because there is some probability of losing this part on launching with the result of the rocket falling one meter in front of the platform!

Step 8: Notice for Educators!

I have used a similar platform (not so fancy!) for educational reasons. The kids loved to compete one another about who could make the rocket that achieved the longer (in time) and more nice flight.

The straw rockets they used, weight 5gr the most. With an air pressure of 80psi could fly for about 4secs (15 to 20 m height). These numbers are only to have an idea what could this do.

  • The students could be asked to experiment and make graphs to relate pressure and flight duration for the same rocket or same pressure for a family of rockets that share some charactistics but differ in the examined one. For example the effect of the position of the center of mass to the flight or the number, position or shape of the little wings.
  • If someone would like to get into physics, could dare to relate flight duration to maximum height ignoring air resistance. That would introduce some inaccuracy (somebody could have the opportunity to calculate it if he could measure the height some other way) but for the kids is more inspiring the idea of maximum height than maximum flight duration!
  • The platform could be set on a leveled plane with known incline so to connect the longest distance that could be reached (same rocket, same pressure) with the angle.
  • There is freeware software to plan the orbit of a rocket from a video that could be taken. This way the flight could be better evaluated.

Step 9: Code for a Platform With an LCD Screen

//with this you use an LCD screen on the box which give you independency from a computer

#include LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

const int launchPIN = 2;

int redLED1=3; int redLED2=14; int redLED3=16; int blueLED=15;

byte speaker=19; //instead of pins 4,5,6,9 you have 14,15,16,19

char flag=0; const int switchPin=12;

int buttonState = 0, jump=1; byte buttonflag=true; long startTime,duration;

void setup() {

Serial.begin(9600);

pinMode(redLED1,OUTPUT);

pinMode(redLED2,OUTPUT);

pinMode(redLED3,OUTPUT);

pinMode(blueLED,OUTPUT);

pinMode(speaker,OUTPUT);

pinMode(17,OUTPUT); //instead of pin 7 you have 17

pinMode(launchPIN, INPUT);

pinMode(switchPin,INPUT);

digitalWrite(switchPin,HIGH);

pinMode(13,OUTPUT);

lcd.begin(16, 2); // start the library

lcd.setCursor(0,0);

lcd.print("Flight duration");

}

void loop()

{

digitalWrite(13,HIGH);

buttonState = digitalRead(launchPIN);

if (buttonState == HIGH) {

if (flag==0)

{

delay(1000);

blinkLED(redLED1,1000);

blinkLED(redLED2,1000);

blinkLED(redLED3,1000);

for (int j=0;j<6;j++)

{

playTone(477,300);

digitalWrite(blueLED,HIGH);

delay(100);

playTone(15289,300);

digitalWrite(blueLED ,LOW);

delay(100);

}

digitalWrite(6,HIGH);

playTone(477,2000);

digitalWrite(6,LOW);

relayON();

startTime = millis();

flag=1;

}

} else

{flag=0;}

if (flag==1) {delay(300);count_down();}

relayOFF();

}

void blinkLED(int pin,int duration)

{

digitalWrite(pin,HIGH);

delay(duration);

digitalWrite(pin,LOW);

delay(duration);

}

void relayON()

{

digitalWrite(17,HIGH);

}

void relayOFF()

{

digitalWrite(17,LOW);

}

void playTone(int period, int audduration)

{

int pulse = period /2;

for (long i=0; i

{

digitalWrite(speaker,HIGH);

delayMicroseconds(pulse);

digitalWrite(speaker,LOW);

delayMicroseconds(pulse);

}

}

void count_down(){

lcd.setCursor(5,1); // move cursor to second line "1" and 9 spaces over

if (jump == 1){

lcd.print(millis()-startTime-300); // display seconds elapsed since power-up

}

lcd.setCursor(0,1); // move to the begining of the second line

int timestate=digitalRead(switchPin);

if (timestate==0)

{jump = 0;}

}