Tutorial for building a remote-controlled Arduino Air-Boat
Source: InternetPublisher:newrudeman Keywords: RF module wireless control Arduino Updated: 2024/12/19
In this project, we will build a remote controlled Arduino Air-Boat which can be wirelessly controlled using a 433 MHz RF radio module. We will use a homemade remote controller to control this boat by building our own 433 MHz transmitter and receiver modules. For remote controlling a device or communication between two devices , we have many options like IR, Bluetooth, Internet, RF etc. Radio communication has advantages like a wider range compared to IR communication but it does not require a line of sight connection between the transmitter and the receiver. Also, these modules can do two way communication which means it can send and receive at the same time. So using this 433MHz RF module, let's build an Arduino RC boat in this tutorial.
We have previously built many remote control projects using these 433Mhz RF modules for controlling robots like this RF controlled robot or for home automation applications to control home appliances using RF. Apart from using RF modules, we have previously built a Bluetooth controlled Raspberry Pi car and a DTMF phone controlled Arduino robot.
Components Needed for an Arduino RC Boat
433MHz Transmitter and Receiver
Arduino (any Arduino, to reduce the size I used a promini)
HT12E and HT12D
Button - 4Nos
Resistors - 1mega ohm, 47k ohm
L293d Motor Driver
9V Battery (I used a 7.4V battery) - 2Nos
7805 Regulator - 2Nos
DC Motor - 2Nos
Motor blades or propellers (I used homemade propellers) - 2Nos
.1uf Capacitor - 2Nos
Ordinary PCB
433MHz RF Transmitter and Receiver Modules
These types of RF modules are very popular among makers. Because of their low cost and simple connections. These modules are best suited for all forms of short distance communication projects. These modules are ASK (Amplitude Shift Keying) In RF modules, Amplitude Shift Keying (ASK) is a form of amplitude modulation that represents digital data as variations in the amplitude of a carrier wave. In an ASK system, the binary symbol 1 is represented by transmitting a fixed amplitude carrier wave and a fixed frequency for a bit duration of T seconds. If the signal value is 1, the carrier signal is transmitted; otherwise, a signal value of 0 is sent. This means that they generally consume no power when transmitting a logical "zero". This low power consumption makes them very useful in battery-powered projects.
433MHZ RF Transmitter
This type of module is very small and comes with 3 pins VCC, Ground and Data. Some other modules come with an additional antenna pin. The operating voltage of the transmitter module is 3V-12V and this module does not have any adjustable components. One of the main advantages of this module is the low current consumption, it requires almost zero current to send a zero position.
Arduino RC Boat Transmitter Block Diagram
In the above block diagram, there are four buttons (control buttons), these buttons are used to control the direction of the boat. We have four for forward, backward, left and right. From the buttons, we get the logic to control the boat but it cannot be directly connected to the encoder, that is why we use Arduino. You might be thinking why I am using Arduino here, it is only because we need to pull down both parallel data inputs of the encoder at the same time to achieve the backward and forward motion which is not possible with buttons alone. The encoder then encodes the upcoming parallel data into a serial output. We can then transmit that serial data with the help of an RF transmitter.
Circuit diagram of Arduino RC remote control (transmitter)
In the above circuit, you can see that one side of all four buttons are connected to four digital pins of Arduino (D6-D9) and the other four are connected to ground. That is, when we press a button, the corresponding digital pin goes to logic low. The four parallel inputs of the HT12E encoder are connected to another four digital pins of Arduino (D2-D5). So with the help of Arduino, we can decide the inputs of the encoder.
And say encoder HT12E is a 12 bit encoder and a parallel input-serial output encoder. Out of 12 bits, 8 bits are address bits which can be used to control multiple receivers. Pins A0-A7 are address input pins. In this project, we are controlling only one receiver so we don't want to change its address, so I connected all address pins to ground. If you want to control different receivers with one transmitter, you can use DIP switches here. AD8-AD11 are control bit inputs. These inputs will control D0-D3 outputs of HT12D decoder. We need to connect an oscillator for communication, the oscillator frequency should be 3KHz for 5V operation. Then the resistor value for 5V is 1.1MΩ. Then I connected the output of HT12E to the transmitter module. We have mentioned that Arduino and rf transmitter module, both devices working at 5V high voltage will kill it, so to avoid that, I added 7805, voltage regulator. Now we can connect (Vcc) 6-12volt any type of battery input.
Building the RC BOAT Transmitter Circuit
I soldered every component on a regular PCB. Remember that we are working on an RF project so there are a lot of chances for different types of interference, so connect all components as closely as possible. It is better to use female headers for the Arduino and the transmitter module. Also, try to solder everything on copper pads instead of using extra wires. Lastly, connect a small wire to the transmitter module, this will help increase the total range. Double check the voltage output by the lm7805 before connecting the Arduino and the transmitter module.
The image above shows the top view of the completed RC boat transmitter circuit and the bottom view of the completed RC boat transmitter circuit is shown below.
Building the Arduino RC Boat Transmitter Enclosure
The remote control needs a decent body. This step is about your idea, you can create a remote body with your idea. I am explaining how I did it. When making the remote control, I choose 4mm MDF board, you can also choose plywood, foam board or cardboard, then I cut two pieces from it, 10cm long and 5cm wide. Then I marked the position of the buttons. I put the direction buttons on the left side and the forward, back buttons on the right side. On the other side of the sheet, I connected the buttons to the main transmitting circuit. Remember that a normal button has 4 pins, two pins on each side. Connect one pin to the Arduino and the other pin to the ground. If you are confused about this, check with a multimeter or look at the datasheet.
After connecting all these things, I placed the control circuit between the two MDF boards and tightened it with some long bolts (refer to the picture below if needed). Once again, creating a good body is entirely up to your ideas.
433Mhz Receiver Module
This receiver is also very small with 4 pins VCC, ground and the two middle pins are data out. The operating voltage of this module is 5v. Like the transmitter module, this is also a low power module. Some modules come with an additional antenna pin, but in my case it was not present.
Block Diagram of an Arduino RC Boat Receiver
The above block diagram describes the working of the RF receiver circuit. First, we can receive the transmitted signal using the RF receiver module. The output of this receiver is serial data. But we cannot control anything with this serial data, that is why we connect the output to a decoder. The decoder decodes the serial data into our original parallel data. In this section, we do not need any microcontroller, we can directly connect the output to the motor driver.
Arduino RC Marine Receiver Circuit Diagram
The HT12D is a 12-bit decoder, it is a serial input parallel output decoder. The input pins of the HT12D will be connected to a receiver with serial output. Of the 12 bits, 8 bits (A0-A7) are address bits, and the HT12D will decode the input as long as it matches its current address. D8-D11 are output bits. To match this circuit with the transmitter circuit, I grounded all the address pins. The data output by the module is of serial type, and the decoder decodes this serial data into raw parallel data, which we output through D8-D11. To match the oscillation frequency, a 33-56k resistor should be connected to the oscillator pin. The LED at pin 17 indicates a valid transmission and will only light up after the receiver is connected to the transmitter. The voltage input of the receiver is also 6-12 volts.
To control the motors I have used L293D IC, I have chosen this IC because it reduces the size and weight and this IC is best suited for controlling two motors in two directions. L293D has 16 pins and the following image shows the pinout.
1, 9 pins are enable pins, we connect it to 5 V to enable the motor 1A, 2A, 3A and 4A are control pins. If pin 1A goes low and 2A goes high, the motor will turn right, if 1A goes low and 2A goes high, the motor will turn left. So we connect these pins to the output ps of the decoder. 1Y, 2Y, 3Y and 4Y are motor connection pins. Vcc2 is the motor drive voltage pin, if you are using a high voltage motor, connect this pin to the corresponding voltage source.
Building the Receiver Circuit for the Arduino RC Boat
Before building the receiver circuit, there are some important things you should remember. Size and weight are important because after building the circuit, we need to secure it to the boat. So if the weight is increased, it will affect the buoyancy and movement.
So, same as the transmitter circuit, solder every component in a small general purpose PCB and try to use minimum wires. I connected pin 8 of the motor driver to 5v since I am using 5V motors.
Building a Remote Control Boat
I tried different materials to build the hull. I got better results with thermocol sheets. So I decided to build the body with thermocol. First, I took a 3cm thick thermocol sheet and placed the receiver circuit on it, then I marked the shape of the boat in the thermocol and cut it. So this is how I built the boat, you can build it as you like.
Motors and propellers for Arduino air boats
Weight is important again. So choosing the right motor is important, I chose a 5 volt, N20 type common DC motor, which is small and light. To avoid RF interference, a 0.1uf capacitor should be connected in parallel to the motor input.
In the case of the propeller, I made the propeller out of a plastic sheet. You can buy a propeller from a store or make your own, both will work fine. To make the propeller, first, I took a small plastic sheet and cut two small pieces from it, then bent these small pieces with the help of candle heat. Finally, I put a small hole in the center of the motor and fixed it on the motor.
Working of Arduino RC Boat
The boat has two motors let's call it left and right. If the motors also move clockwise (which also depends on the position of the propellers), the propellers will suck air in from the front and expel it from the back. This creates forward drag.
Forward movement: If both left and right motors rotate clockwise, the movement is forward.
Backward movement: If both left and right motors rotate counterclockwise (i.e. the propellers draw air from the rear and exhaust to the front), it will move backward.
Move left: If only the right motor is rotating i.e. the boat, just drag from the right side and the boat will move to the left
Moving right: If only the left motor is spinning, the boat is getting resistance from the left side, which will move the boat to the right.
We connect the input of the motor driver to the four output bits of the decoder (D8-D11). We can control these 4 outputs by connecting AD8-AD11 to the ground of the button in the remote control. For example, if we connect AD8 to the ground it will activate D8. So we can control both motors in both directions using these 4 outputs. But we can't control both motors with just one button (we need it for forward and backward movement) and that's why we use Arduino. With the help of Arduino, we can select the input data pins as per our requirement.
Arduino Programming for RC Boat
The programming of this boat is very simple, as we only need some logic switching. We can implement everything with basic Arduino functions. The complete program for this project can be found at the bottom of this page. The explanation of your program is as follows
We start the program by defining the four input buttons and integers for the decoder input pins.
int f_button = 9; int b_button = 8; int l_button = 7; int r_button = 6; int m1=2; International square meter = 3; int m3=4; int m4=5;
In the setup section, I defined the pin modes. That is, the buttons are connected to digital pins, so these pins should be defined as inputs, and we need to get outputs for the inputs of the decoder, so we should define these pins as outputs.
pinMode(f_button, INPUT_PULLUP);
pinMode(b_button, INPUT_PULLUP);
pinMode(l_button, INPUT_PULLUP);
pinMode(r_button, INPUT_PULLUP);
pinMode(m1, OUTPUT);
pinMode(m2, OUTPUT);
pinMode(m3, OUTPUT);
pinMode(m4, OUTPUT);
Next in the main loop function, we will use the Arduino's digitalread function to read the button status. If the pin status becomes low, indicating that the corresponding pin is pressed, then we will execute the following conditional -
if (digitalRead(f_button) == LOW)
This means the forward button is pressed
{ digitalWrite(M1, LOW); digitalWrite(M3, LOW); digitalWrite(m2,h); digitalWrite(m4,HIGH); }
This will pull down m1 and m2 of the encoder, which will activate both motors on the receiver side. Similarly, for backward movement
{ digitalWri
For left shift
{ digitalWrite(M1, LOW); digitalWrite(M3,HIGH); digitalWrite(m2,h); digitalWrite(m4,HIGH); }
For the right exercise
{ digitalWrite(m1, HIGH); digitalWrite(M3, LOW); digitalWrite(m2,h); digitalWrite(m4,HIGH); }
After compiling the code, upload it to your Arduino board.
Troubleshooting: Place the boat on the water and check if it moves correctly if not try changing the polarity of the motor and propeller. Also, try balancing with your weight.
int f_button = 9;
int b_button = 8; int
l_button = 7;
int r_button = 6
; int m1 = 2;
int m2 = 3;
int m3 = 4;
int m4 = 5;
void setup() {
pinMode(f_button, INPUT_PULLUP
); pinMode(b_button, INPUT_PULLUP);
pinMode(l_button, INPUT_PULLUP);
pinMode(r_button, INPUT_PULLUP)
; pinMode(m1, OUTPUT)
; pinMode(m2, OUTPUT);
pinMode(m3, OUTPUT);
pinMode(m4, OUTPUT);
}
void loop() {
if (digitalRead(f_button) == LOW)
{
digitalWrite(m1, LOW);
digitalWrite(m3, LOW);
digitalWrite(m2, HIGH);
digitalWrite(m4, HIGH);
}
if (digitalRead(b_button) == LOW)
{
digitalWrite(m2, LOW);
digitalWrite(m4, LOW);
digitalWrite(m1, HIGH);
digitalWrite(m3, HIGH);
}
if (digitalRead(l_button) == LOW)
{
digitalWrite(m1, LOW);digitalWrite
(m2, HIGH);
digitalWrite(m3, HIGH);
digitalWrite(m4, HIGH);
}
if (digitalRead(r_button) == LOW)
{
digitalWrite(m1, HIGH);
digitalWrite(m2, LOW);digitalWrite
(m3, HIGH);
digitalWrite(m4, HIGH);
}
}
- Star-delta step-down starting control circuit for squirrel cage asynchronous motor
- Working principle of ZNB-S digital display intelligent motor protector control circuit
- Methods for Eliminating Noise of Brushed DC Motors
- Design and principle analysis of practical electric curtain remote control device
- Hydraulic control circuit design and analysis
- Light-controlled circuit design and analysis
- Do-it-yourself trial production of phase failure protection device
- Design and production of no-load automatic power-off device for household power supply
- Night dog barking anti-theft reminder circuit
- Homemade anti-theft watchdog
- Pyroelectric automatic door control circuit
- Remote control receiving circuit of Panasonic inverter air conditioner indoor unit control circuit
- Photocell trigger control circuit
- Photoelectric tracking control circuit
- Digital camera flash control circuit
- CPU input and output and memory control circuit
- Bedside touch light detection control circuit
- Automatic door detection control circuit
- Galanz rice cooker control circuit
- Control circuit of Gao Shida 25860T microwave oven turntable assembly