Introduction: How to Make DIY Remote Control Hoverboat at Home

About: Maker 101; Beginner and intermediate level Maker projects! You can find projects such as "How to" and "DIY" on programmable boards such as Arduino, ESP8266, ESP32 and Raspberry Pi on this channel. The projects…

In this project, I showed you how to make your own hovercraft / hoverboat from materials available at home and cheapest electronic components available online.

Step 1: Video Step by Step

I used two cheap brushless motors in this Arduino based project. I used the nRF24L01 module for wireless remote communication.

Step 2: Parts Required for Receiver (Boat)

2x Brushless Motor - https://bit.ly/2HekdSh

2x Propeller - https://bit.ly/355KMRE

1x Arduino Nano V3 - http://bit.ly/2MHVDYi

1x Motor Driver L298N - https://bit.ly/369zBJJ

1x RF Module nRF24L01 - https://bit.ly/3je3v3u

1x RF Module Power Adapter - https://bit.ly/30cFJgw

2x 3.7v Battery 18650 - https://bit.ly/2ECGb01

1x Battery Holder 18650 - https://bit.ly/30cqwMJ

1x Mini Breadboard - http://bit.ly/35cBGRm

1x Hot Glue Gun - http://bit.ly/2XM5YXc

Jumper Wires - http://bit.ly/2MtyZCX

2x Bottle
1x Water Proof Box

1x Acrylic Sheet

Step 3: Parts Required for Transmitter (Controller)

I designed a PCB controller myself for the hovercraft controller. The controller has a minimalist design, it fits in the palm of your hand and you can easily control the joystick with the thumb. As always, I chose PCBWay for PCB printing service. If you want to have this controller, you can easily order from the link below. If you are not interested in PCB, you can easily build a controller yourself.

1x Get the PCB Board - https://bit.ly/3kbfwae

1x RF Module nRF24L01 - https://bit.ly/3je3v3u

1x Arduino Pro Mini 3.3v 8MHz - https://bit.ly/2GawAy6

1x Joystick - https://bit.ly/3ka28TD

1x Programmer FTDI - http://bit.ly/2RL89st

1x Self-locking On / Off Switch - https://bit.ly/3cyEtJL

LED Kit - http://bit.ly/37OajhS

Capacitor - http://bit.ly/2s6Sonz

Resistor - http://bit.ly/2lJhi8Z

Female Header Pin - http://bit.ly/2MJtnVm

Soldering Tool Kit - http://bit.ly/2D6YbuC

Step 4: Source Code

Receiver Code:

#include <SPI.h>      //the communication interface with the modem
#include "RF24.h"     //the library which helps us to control the radio modem (nRF24L)

//define our L298N control pins
//Define enable pins of the Motors
const int enbA = 3;
const int enbB = 9;
//Motor A
const int RightMotorForward = 2;
const int RightMotorBackward = 5;
//Motor B
const int LeftMotorForward = 6;
const int LeftMotorBackward = 7;

//Define variable for the motors speeds
//I have defined a variable for each of the two motors 
//This way you can synchronize the rotation speed difference between the two motors

RF24 radio(8,10);     /*This object represents a modem connected to the Arduino. 
                      Arguments 8 and 10 are a digital pin numbers to which signals 
                      CE and CSN are connected.*/

const uint64_t pipe = 0xE8E8F0F0E1LL; //the address of the modem,that will receive data from the Arduino.

int data[1];


void setup(){
  pinMode(enbA, OUTPUT);
  pinMode(enbB, OUTPUT);
  pinMode(RightMotorForward, OUTPUT);
  pinMode(LeftMotorForward, OUTPUT);
  pinMode(LeftMotorBackward, OUTPUT);
  pinMode(RightMotorBackward, OUTPUT);
  
  radio.begin();                    //it activates the modem.
  radio.openReadingPipe(1, pipe);   //determines the address of our modem which receive data.
  radio.startListening();           //enable receiving data via modem
  }

void loop(){
  if(radio.available()){
    radio.read(data, 1);
    
    if(data[0] < 11 && data[0] > 6){
    // This is backward
    digitalWrite(enbA, HIGH);
    digitalWrite(enbB, HIGH);
    digitalWrite(RightMotorForward, LOW);
    digitalWrite(RightMotorBackward, HIGH);
    digitalWrite(LeftMotorForward, LOW);
    digitalWrite(LeftMotorBackward, HIGH);
    }
    
    if(data[0] > -1 && data[0] < 4){
    // This is forward
    digitalWrite(enbA, HIGH);
    digitalWrite(enbB, HIGH);
    digitalWrite(RightMotorForward, HIGH);
    digitalWrite(RightMotorBackward, LOW);
    digitalWrite(LeftMotorForward, HIGH);
    digitalWrite(LeftMotorBackward, LOW);
    }
    
    if (data[0] == 5){
    // Stop Motors
    digitalWrite(RightMotorForward, LOW);
    digitalWrite(RightMotorBackward, LOW);
    digitalWrite(LeftMotorForward, LOW);
    digitalWrite(LeftMotorBackward, LOW);
    }
    
    if(data[0] < 21 && data[0] > 16){
    digitalWrite(enbA, HIGH);
    digitalWrite(enbB, HIGH);
    digitalWrite(RightMotorForward, HIGH);
    digitalWrite(RightMotorBackward, LOW);
    digitalWrite(LeftMotorForward, LOW);
    digitalWrite(LeftMotorBackward, HIGH);
    }
    
    if(data[0] > 10 && data[0] < 14){
    digitalWrite(enbA, HIGH);
    digitalWrite(enbB, HIGH);
    digitalWrite(RightMotorForward, LOW);
    digitalWrite(RightMotorBackward, HIGH);
    digitalWrite(LeftMotorForward, HIGH);
    digitalWrite(LeftMotorBackward, LOW);
    }
    
    if(data[0] == 15){
    digitalWrite(enbA, HIGH);
    digitalWrite(enbB, HIGH);
    digitalWrite(RightMotorForward, LOW);
    digitalWrite(RightMotorBackward, LOW);
    digitalWrite(LeftMotorForward, LOW);
    digitalWrite(LeftMotorBackward, LOW);
    }
  }
}

Transitter Code:

#include <SPI.h>                      //the communication interface with the modem
#include "RF24.h"                     //the library which helps us to control the radio modem

//define the input pins
int Xaxis = A0;
int Yaxis = A1;

//define variable values
int xValue;
int yValue;

int data[1];

RF24 radio(8,10); //8 and 10 are a digital pin numbers to which signals CE and CSN are connected.
                                      
const uint64_t pipe = 0xE8E8F0F0E1LL; //the address of the modem, that will receive data from Arduino.


void setup(void){
  Serial.begin(9600);
  radio.begin();                      //it activates the modem.
  radio.openWritingPipe(pipe);        //sets the address of the receiver to which the program will send data.
}

void loop(){
  
  //Send X-axis data
  xValue = analogRead(Xaxis);
  xValue = map(xValue, 0, 1023, 0, 10);
  data[0] = xValue;
  radio.write(data, 1); 
  
  //Send Y-axis data
  yValue = analogRead(Yaxis);
  yValue = map(yValue, 0, 1023, 11, 20);
  data[0] = yValue;
  radio.write(data, 1);
}