Introduction: DIY Hovercraft

As a team of five teenagers who love science and creation, Ultra Seven always tries to create interesting and cool projects. In Introduction to Engineering (Vg 100), Professor Roberto Dugnani introduced a special ship, a hovercraft. This idea inspired us because hovercrafts can travel over land, water, mud or ice. We wanted to learn the structure of this interesting ship and practice our knowledge of Arduino, so we decided to make our own good.

  • Materials: hard foam plastic blocks, one soft foam plastic piece(30cm*15cm*1cm), one hard foam plastic board(20cm*20cm*1cm), ordinary tape, electrical tape, double-sided tape, one acrylic board(7cm*7cm*0.3cm), screws and nuts, wires
  • Tools: knife, scissors, ruler, screwdrivers, electric drill
  • Components: two 64mm ducted fans(QF 2627-4800KV), two electronic regulators (Skywalker-40A) welded with T-plugs, one metal servo, one Arduino board, one Sony PlayStation2(PS2) game controller, one receiver, one 11.1V lithium battery (2200mAh 30C, 106mm*34mm*23mm)
  • Time required:Our team spent about two hours every day and finished this project within two weeks after all the materials were prepared. So people need around 30 hours to finish the DIY hovercraft if materials are prepared.
  • Difficulty level: The difficulty level of this project is medium. Most university students can make it with some basic knowledge of Arduino.
  • Budget:Around $130
  • Diagram: You can cut the board according to the diagram.

Step 1: Make the Body of the Hovercraft

  • Cut the hard foam plastic block into a 30cm*15cm*3cm board. Keep the remaining foam plastic.
  • Draw a circle on the board with a compass. The center has a distance 6cm from the short side of the board. The diameter of the circle is 65mm.
  • Cut out a circular hole with a knife. Then smooth the wall of the hole with an electric drill.

Step 2: Make the Base

  • Draw a rectangle on the 30cm*15cm*1cm soft foam plastic board. Each side of the rectangle has a distance of 1cm from the side of the foam plastic board.
  • Cut the rectangle off with a knife. Then we finish making the base.
  • Stick the base on the body with

double-sided tape. Use the electrical tape to cover the gap between the base and the body.

Step 3: Install the Fan for Lifting

  • Install the ducted fan in the circular hole on the body. The air should blow downward. Keep the wires attached to the fan above the body.
  • Warning: The bottom of the fan must be higher than the bottom of the body.

Cut small pieces of foam plastic block to make a cover on the fan. Fix the cover onto the body with electrical tape. The cover can stabilize the fan.

Step 4: Install the Servo and the Fan for Pushing

  • Use a knife to cut a small piece of foam plastic. Cut one side flat and the other side concave. Fix the side face of the ducted fan to the concave side with the electrical tape.
  • Drill 4 holes of 2mm diameter on the acrylic board of 7cm*7cm large. The positions of these holes are corresponding to the positions of the holes on the servo arms. Connect the board and the servo arms with screws.
  • Place the foam plastic on the acrylic board. Fix them with the electrical tape. Then the fan can rotate with the servo.
  • Make a groove of 2cm*4cm*3cm in the back of the body. The groove is 5cm from both the left and the right sides of the body, and 3cm from the back. Place the servo into the groove.

Step 5: Program Codes

  • Enter the websites below, download Arduino IDE and install IDE on your computer. http://arduino.cc/en/Main/Software#toc1
  • Download PS2X library and unzip the library file. Put it into the folder “libraries” in Arduino IDE folder. http://www.geek-workshop.com/forum.php?mod=attachm...
  • To setup program environment, open the IDE, click on Tools> Board and choose Arduino mega 2560. Then click on Tools> Serial Port and choose COMX (X is the largest number in the list).
  • Connect the Arduino board to your computer with the blue wire. Then copy the codes in appendix and paste the codes to the IDE. Click on the arrow icon to send codes to Arduino Mega 2560, so the Arduino Mega board can work for your hovercraft.
  • Connect one side of the two electronic regulators to the motors, and connect the other side of electronic regulators to the Arduino board. Connect 3 wires to the motor.
  • Connect one regulator to the PIN3 and the other to the PIN5 on the Arduino board with white wires.
  • Stick two black wires of the regulators together, and connect them to GND on the Arduino board. Then connect the orange wire to Vin on the Arduino board.

Step 6: Receiver of PS2 Game Controller Connection

  • Connect the Arduino board and the receiver of the PS2 game controller with 6 wires.
  • Install 2 AAA batteries(the smallest battery) into the controller.
  • Press the “start” button to connect the controller with the receiver.
  • If the signal indicator light flashes, reset the controller and check the wire connection.

Step 7: Servo Connection

  • Connect the Arduino board and the servo with 2 wires.

Step 8: Installation

  • Stick the Arduino board behind the cover. Fix the battery onto the body. Place the battery behind the Arduino board with electrical tapes.
  • Fix the electronic regulator beside the front ducted fan.
  • Stick messy wires together with the electrical tape to prevent wires from getting caught in the ducted fans.

Step 9: Debugging

  • Connect two regulators to the battery.
  • Use PS2 controller to adjust the wind velocity of both fans until the hovercraft floats and moves forward.
  • Use the PS2 Controller to adjust the rotation velocity of the servo until the hovercraft can turn well.

Warnings:

  • Do not press any button on the Arduino Mega board, including “reset”. Otherwise the hovercraft might be out of control.
  • Power off the hovercraft when you do not use it.

Step 10: Congratulations! You Have Finished Your Own DIY Hovercraft!

Feedback:

Be careful when making a turn to your hovercraft because too strong propulsion can make the hovercraft go out of control. Adjust the direction little by little.

Appendix A:

Codes for Arduino Mega 2560:

//-----------------------------------------------------------------------------------------------------------------------------

#include //for v 1.6

#include

PS2X ps2x;

Servo myservo;

Servo dservo;

Servo servo1;

int error = 0;

int p,q=0;

int i=0,d=0,m=0;

byte type = 0;

byte vibrate = 0;

int map1=48,mapp1=64;

int map2=34,mapp2=78;

int stable=144;

int val=56,val2=56;

void setup(){

servo1.attach(4);

myservo.attach(3);

dservo.attach(5);

delay(1000);

myservo.write(133);

delay(1000);

for(i=0;i<180;i++){

dservo.write(i);

delay(20);

}

Serial.begin(57600);

error = ps2x.config_gamepad(13,11,10,12, true, true); //

type = ps2x.readType();

switch(type) {

case 0:

Serial.println("Unknown Controller type");

break;

case 1:

Serial.println("DualShock Controller Found");

break;

case 2:

Serial.println("GuitarHero Controller Found");

break;

}

servo1.write(143);

}

void loop(){

error = ps2x.config_gamepad(13,11,10,12, true, true);

if(error == 3||error==1) // loop if no controller found

return;

if(type == 2){ //Guitar Hero Controller

ps2x.read_gamepad(); //read controller

if(ps2x.ButtonPressed(STAR_POWER))

Serial.println("Star Power Command");

if(ps2x.Button(UP_STRUM)) { //will be TRUE as long as button is pressed

Serial.println("Up Strum");

}

if(ps2x.Button(DOWN_STRUM))

Serial.println("DOWN Strum");

if(ps2x.Button(PSB_START)) //will be TRUE as long as button is pressed

Serial.println("Start is being held");

if(ps2x.Button(PSB_SELECT))

Serial.println("Select is being held");

if(ps2x.Button(ORANGE_FRET)) // print stick value IF TRUE

{

Serial.print("Wammy Bar Position:");

Serial.println(ps2x.Analog(WHAMMY_BAR), DEC);

}

}

else { //DualShock Controller

ps2x.read_gamepad(false, vibrate);

if(ps2x.Button(PSB_START))

Serial.println("Start is being held");

if(ps2x.Button(PSB_SELECT)){

Serial.println("Select is being held");

}

if(ps2x.Button(PSB_RED)){

servo1.write(stable);

delay(20);

p=0;

q=0;

}

if(ps2x.Button(PSB_PINK)){

stable=stable+1;

servo1.write(stable);

}

if(ps2x.Button(PSB_GREEN)){

stable=stable-1;

servo1.write(stable);

}

if(ps2x.Button(PSB_PAD_UP)) { //will be TRUE as long as button is pressed

Serial.print("Up held this hard: ");

Serial.println( error);

}

if(ps2x.Button(PSB_PAD_RIGHT)){

Serial.print("Right held this hard: ");

Serial.println( error);

}

if(ps2x.Button(PSB_PAD_LEFT)){

Serial.print("LEFT held this hard: ");

Serial.println( error);

}

if(ps2x.Button(PSB_PAD_DOWN)){

Serial.print("DOWN held this hard: ");

Serial.println( error);

}

vibrate = ps2x.Analog(PSAB_BLUE);

val=map(ps2x.Analog(PSS_LY),0,255,map1,mapp1);

myservo.write(val);

delay(20);

val2=map(ps2x.Analog(PSS_LY),0,255,map2,mapp2);

dservo.write(val2);

delay(20);

if(ps2x.Button(PSB_L1) ) {

servo1.write(stable-16); }

if(ps2x.Button(PSB_L2) ) {

p=p+1;

servo1.write(stable+5*(q-p)); }

if(ps2x.Button(PSB_R1)){

servo1.write(stable+16); }

if(ps2x.Button(PSB_R2)){

q=q+1;

servo1.write(stable+5*(q-p)); }

}

delay(50);

}

//-----------------------------------------------------------------------------------------------------------------------------

Appendix B:

Reference:

Geek-workshop[Internet]. c2012[updated 2012December4; cited 2014 June 30]. Available from: http://www.geek-workshop.com/thread-172-1-1.html