Bouw een Arduino-aangedreven RC Hovercraft: Volledig 3D-geprint Ontwerp & Programmeerhandleiding
In deze tutorial leer je hoe je een Arduino-gebaseerde RC Hovercraft bouwt. Ik laat je het hele bouwproces zien, beginnend met het ontwerpen en 3D-printen van de hovercraft-onderdelen, inclusief de propellers, tot het aansluiten van de elektronische componenten en het programmeren van de Arduino.
Je kunt de volgende video bekijken of de geschreven tutorial hieronder lezen.
Overzicht
Voor het besturen van de hovercraft gebruikte ik mijn DIY Arduino-gebaseerde RC-zender die ik in een eerdere video maakte. Ik stelde de rechter joystick in om de servo-motor te besturen voor het positioneren van de roerders aan de achterkant van de duwmotor, stelde een van de potentiometers in om de lift-propeller te besturen die eigenlijk op een brushless DC-motor zit, en stelde de linker joystick in om de voortstuwing te besturen. Laten we eens kijken wat het kost om deze RC-hovercraft te bouwen.

Hovercraft 3D-model
Allereerst ontwierp ik de hovercraft met een 3D-modelleringssoftware.

Je kunt dit 3D-model vinden en downloaden, en in je browser verkennen op Thangs.

Download het assemblage 3D-model op Thangs.
STL-bestanden voor 3D-printen:
Hovercraft Werkprincipe
Het basale werkprincipe van een hovercraft is dat het voertuig wordt opgetild door een kussen van lucht. De centrale propeller blaast lucht onder het voertuig, wat een zak gemaakt van zacht materiaal opblaast.

Wanneer de luchtdruk in de zak hoog genoeg is, wordt het voertuig opgetild. De constant toegevoerde lucht ontsnapt uit het midden van het voertuig, tussen de zak en de grond, wat extra lift creëert en ook de wrijving tussen de hovercraft en de grond vermindert.
Eenmaal opgetild, genereert de tweede propeller een duwkracht die de hovercraft vooruit beweegt.

Aan de achterkant van de duwpropeller zit een eenvoudige set roerders die gebruikt worden voor het sturen van de hovercraft.
3D-printen
Desondanks, zodra ik het ontwerp afhad, begon ik met het 3D-printen van de onderdelen.

De romp van de hovercraft is het grootste deel om te printen en ik ontwierp het specifiek om te passen op mijn Creality CR-10 3D-printer, die een printbed van 30x30cm heeft.

Hier is een link naar deze 3D-printer voor het geval je hem wilt bekijken.
Na het printen is het tijd voor wat opruimen. De hoofdbody van de hovercraft of de cockpit was de langste print die ongeveer 18 uur duurde. Vanwege het gebogen ontwerp en omdat ik het in één druk wilde, werd er veel support-materiaal gebruikt voor deze print.

Echter, het was heel makkelijk om te verwijderen en het eindstuk kwam perfect uit. De romp van de hovercraft werd omgekeerd geprint en had slechts een gering bedrag support-materiaal om te verwijderen. Eigenlijk moest ik wat aanpassingen maken aan deze print en wat materiaal uit de centrale blower-behuizing weghalen zodat de zakhouder er goed in past.

Ik heb het 3D-model al bijgewerkt zodat je dit probleem niet zult hebben.
Enkele ronde gebieden van de onderdelen waren wat ruw, dus ik gebruikte een simpel schuurpapier om ze glad te maken.

De propellers hadden geen opruiming nodig en werkten prima direct uit de 3D-printer.

De Hovercraft Schilderen
Ok, de volgende stap is het schilderen van de 3D-geprinte onderdelen. Ik gebruikte geen primer, maar bracht direct acrylverf in de vorm van spuitverf aan.

Ik gebruikte een chocoladebruine kleur voor de eerste laag. Voor sommige van de kleinere onderdelen, die eigenlijk alleen decoratief zijn, gebruikte ik een lichtere bruine kleur.
Om de hovercraft wat cooler te laten lijken, toen de eerste laag droog was, voegde ik twee extra kleuren toe aan de onderdelen. Daarvoor maakte ik willekeurige patronen op een simpel vel papier en gebruikte die om strepen en vlekken in verschillende kleuren te maken. Ik gebruikte lichtere bruin en zwart daarvoor.

De Arduino RC Hovercraft Monteren
Ik vind erg leuk hoe de onderdelen uitkwamen, dus zodra ze droog waren, ging ik door met het monteren.

Ik begon met het installeren van de servo-motor die de roerders bestuurt op de duwblower-behuizing. Ik bevestigde de servo met twee M2-bouten en moeren.

Vervolgens de brushless-motor. Het specifieke model dat ik heb is de D2830 met een diameter van 28mm en 30mm lengte, en de behuizing is specifiek ontworpen om deze motor te passen.

Hier bij het invoegen van de motor, moest ik eerst de draden door de openingen duwen. Het is een beetje krap, maar nog wel haalbaar. Daarna aan de achterkant bevestigde ik de motor met M3-bouten aan de behuizing.

Vervolgens kan ik de duwbehuizing met de hoofdbody van de hovercraft verbinden. Dit deel heeft een opening zodat de servo- en BLDC-motordraden erdoorheen kunnen.

Met vier M3-bouten bevestigde ik ze stevig aan elkaar.

Zodra ik dat klaar had, ging ik door met het installeren van de tweede brushless-motor aan de romp van de hovercraft. Hier weer dezelfde methode. Eerst de draden door de openingen en dan aan de achterkant de motor bevestigen met vier M3-bouten.
Schakelschema
Vervolgens komt de elektronica. De elektronische componenten worden geplaatst tussen de romp en de hoofdbody van de hovercraft. Maar voordat we dat doen, laten we eens kijken naar het schakelschema en zien hoe alles verbonden moet worden.
De "hersenen" van deze hovercraft is een Arduino-bord. Met de Arduino kunnen we de servo en de twee brushless-motoren via de twee elektronische snelheidsregelaars (ESC's) gemakkelijk besturen. Voor de voeding van de BLDC-motoren gebruik ik een 3S Li-Po accu die ongeveer 11V levert, en voor de voeding van de Arduino kunnen we de geregelde 5V gebruiken die de ESC's leveren via hun Battery Eliminator Circuit (BEC)-functie.

Voor de draadloze communicatie gebruik ik de NRF24L01-transceivermodule die, als gebruikt met een versterkte antenne, een stabiel bereik van tot 700 meter in open ruimte kan hebben. De RC-zender die ik voor het besturen van de hovercraft zal gebruiken, is degene die ik custom bouwde in een eerdere tutorial, dus je kunt die bekijken als je meer details nodig hebt. Er zijn ook gedetailleerde tutorials over de NRF24L01-module en hoe brushless-motoren met Arduino te gebruiken. Desondanks is het basiswerkprincipe dat de zender de joystick- of potentiometerdata verstuurt naar de ontvanger die de snelheid van de brushless-motoren en de positie van de servo bestuurt.
Er is nog een klein detail op dit schakelschema, en dat is de accu-monitor. Ik voegde een simpele spanningsdeler toe gemaakt uit twee weerstanden, die direct met de accu verbonden is, en de uitgang gaat naar de analoge ingang van de Arduino. De spanningsdeler verlaagt de 11 volt naar ongeveer 4 volt wat acceptabel is voor de 5V Arduino-pinnen. Hiermee kunnen we de accuspanning monitoreren en een LED laten oplichten wanneer de spanning van de accu onder de 11 volt daalt.
Je kunt de benodigde componenten voor deze Arduino-tutorial via de onderstaande links verkrijgen:
- NRF24L01 Transceiver Module….
- NRF24L01 + PA + LNA ………….….
- Brushless Motor ………………….……
- ESC 30A ……………………………….…..
- Li-Po accu ………………………………..
- XT60 2 Female to 1 Male ………….
- XT60 Connector …………………………
- Servo Motor ………………………………..
- Arduino Bord …………………………
Dus, ik begon met het verbinden van de componenten zoals uitgelegd. Voor het verbinden van de twee ESC's met één accu gebruikte ik een parallelle accu-connector-splitter, type XT60.

Voor het toevoegen van een voedingsschakelaar aan het project, gebruikte ik een andere XT60-connector, waarop ik één draad afknipte en een wisselschakelaar solsdeerde. De ene kant gaat naar de Y-splitter-kabel en de andere kant naar de accu.
Vervolgens plaatste ik de ESC's in de hoofdbody en klemde ze tussen de body en de romp van de hovercraft. Daarna bevestigde ik de twee delen met vier M3-bouten. Door de bovenste opening van de body voegde ik toen de accu in het cockpit-gebied in.

Vervolgens moeten we de componenten aan de Arduino verbinden en daarvoor voegde ik twee pinheaders toe aan de Arduino die als GND en 5V-pinnen dienen.

Zodra ik alles aan de Arduino had verbonden, leidde ik de NRF24L01-antenne, de indicator-LED en de voedingsschakelaar door het bovenste deksel van de cockpit.

Dan hoefde ik alles in de cockpit te proppen. Het was een beetje krap hier omdat ik een Arduino UNO gebruikte, en waarschijnlijk had ik een Arduino Nano moeten gebruiken.

Echter, ik wiste alles te laten passen, bevestigde ook een klein decoratief deel aan het deksel en klikte het vervolgens op de cockpit-body.
Ik ging verder met het installeren van het stuurstelsel. Eerst verbond ik een kleine link met de servo-hoorn met een M2-bout en moer. Daarna plaatste ik de eerste roer op zijn plek en bevestigde hem aan de duwbehuizing met een 2mm metalen draad die door zijn body gaat en zo kan de roer eromheen draaien. Op dezelfde manier bevestigde ik de tweede roer.

Deze roer heeft een extra sleuf zodat we hem kunnen verbinden met de eerder ingevoegde link aan de servo. Opnieuw gebruikte ik een M2-bout en moer voor het bevestigen. En ten slotte verbond ik de twee roerders met elkaar met nog een link en zo was het stuurstelsel voltooid.

Vervolgens bevestigde ik dit kleine decoratieve deel aan de zijkant van de hovercraft. Met een boor maakte ik een gat en bevestigde het deel aan de romp met een enkele schroef. Ik plaatste deze delen aan beide kanten en ik vind dat ze prima passen bij het uiterlijk van de hovercraft.

Ok, vervolgde ik met het maken van de zak voor deze hovercraft. Je kunt hier zien dat de zakhouder gaten eromheen heeft en dat is voor het bevestigen aan de romp.

Er zijn ook sleuven voor moeren te plaatsen en op die manier kunnen we de zakhouder gemakkelijk aan de romp bevestigen met M3-bouten. Zodra ik alle moeren op hun plek had bevestigd, ging ik door met het maken van de zak waarvoor ik een eenvoudig vuilniszakje van plastic gebruikte.

Eerst bracht ik AC-lijm aan op het middengebied van de houder en plakte het aan de plastic zak. Daarna zette ik de omtrek van de houder op ongeveer 6cm afstand. Ik markeerde het op verschillende punten en verbond ze daarna met elkaar.

Met een stanleymes knipte ik de plastic zak tot de juiste maat. Daarna keerde ik de zak om en voegde wat extra houder toe aan de zak waar we hem eerder met de AC-lijm hadden geplakt.

Vervolgens moet de buitenkant van de zak aan de bovenkant van de houder geplakt worden. Weer gebruikte ik AC-lijm daarvoor en bevestigde de plastic zak zorgvuldig aan hem.

Zodra dat klaar was, ziet de zak er zo uit.

Vervolgens maakte ik gaten door de plastic zak waar de bouten doorheen moeten. De zakhouder is net 1mm kleiner dan de romp van de hovercraft, dus in combinatie met de plastic zak past het perfect in de romp. Voor het bevestigen van de zak aan de romp, draaide ik de M3-bouten rond de hele omtrek vast.

Er is nog één ding te doen aan de zak en dat is het uitknippen van het centrale gebied van de plastic zak.

Zo zal de helft van de lucht de zak direct opblazen en dan door deze opening uitbloeien, wat een extra luchtbel in het midden creëert.
Tot slot, wat overblijft is de propellers aan de brushless-motoren te bevestigen. Daarvoor gebruik ik de klembus die bij de brushless-motor wordt geleverd. Het is een heel simpele en effectieve manier om de propeller aan de motoras te bevestigen.

Echter, ik verloor de klembus voor mijn andere motor, dus ik moest een andere versie van de propeller printen die direct op de motoras past, wat 3.15mm is. De print kwam eigenlijk prima uit, hij paste en bevestigde perfect aan de motor zonder zelfs lijm te gebruiken.

En dat is het, onze radiogestuurde hovercraft is eindelijk klaar.

Echter, wat er nog overblijft in deze video is om te kijken naar de Arduino-code en hoe het programma werkt.
Arduino RC Hovercraft Code
Hier is de code voor dit DIY Arduino-gebaseerde RC Hovercraft-project:
/* Arduino based RC Hovercraft == Receiver Code - ESC and Servo Control = by Dejan, www.HowToMechatronics.com Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#define led 10
RF24 radio(8, 9); // nRF24L01 (CE, CSN)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;
Servo esc1; // create servo object to control the ESC
Servo esc2;
Servo servo1;
int esc1Value, esc2Value, servo1Value;
// Max size of this struct is 32 bytes - NRF24L01 buffer limit
struct Data_Package {
byte j1PotX;
byte j1PotY;
byte j1Button;
byte j2PotX;
byte j2PotY;
byte j2Button;
byte pot1;
byte pot2;
byte tSwitch1;
byte tSwitch2;
byte button1;
byte button2;
byte button3;
byte button4;
};
Data_Package data; // Create a variable with the above structure
void setup() {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_LOW);
radio.startListening(); // Set the module as receiver
resetData();
esc1.attach(7);
esc2.attach(6);
servo1.attach(5);
pinMode(led, OUTPUT);
}
void loop() {
// Check whether we keep receiving data, or we have a connection between the two modules
currentTime = millis();
if ( currentTime - lastReceiveTime > 1000 ) {
// If current time is more then 1 second since we have received the last data, that means we have lost connection
resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone has a throttle up, if we lose connection it can keep flying away if we dont reset the function
}
// Check whether there is data to be received
if (radio.available()) {
radio.read(&data, sizeof(Data_Package)); // Read the whole data and store it into the 'data' structure
lastReceiveTime = millis(); // At this moment we have received the data
}
// Controlling servos
servo1Value = map(data.j2PotX, 0, 255, 0, 50);
servo1.write(servo1Value);
// Controlling brushless motor with ESC
// Lift propeller
esc1Value = map(data.pot1, 0, 255, 1000, 2000); // Map the receiving value form 0 to 255 to 0 1000 to 2000, values used for controlling ESCs
esc1.writeMicroseconds(esc1Value); // Send the PWM control signal to the ESC
// Thrust propeller
esc2Value = constrain(data.j1PotY, 130, 255); // Joysticks stays in middle. So we only need values the upper values from 130 to 255
esc2Value = map(esc2Value, 130, 255, 1000, 2000);
esc2.writeMicroseconds(esc2Value);
// Monitor the battery voltage
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.00 / 1023.00) * 3; // Convert the reading values from 5v to suitable 12V
Serial.println(voltage);
// If voltage is below 11V turn on the LED
if (voltage < 11) {
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
}
void resetData() {
// Reset the values when there is no radio connection - Set initial default values
data.j1PotX = 127;
data.j1PotY = 127;
data.j2PotX = 127;
data.j2PotY = 127;
data.j1Button = 1;
data.j2Button = 1;
data.pot1 = 1;
data.pot2 = 1;
data.tSwitch1 = 1;
data.tSwitch2 = 1;
data.button1 = 1;
data.button2 = 1;
data.button3 = 1;
data.button4 = 1;
}Code language: Arduino (arduino)
Beschrijving: Eerst moeten we de RF24-bibliotheek voor de radiocommunicatie includeren evenals de servo-bibliotheek voor het besturen van zowel de servo als de brushless-motoren. Daarna moeten we het radio- en de servo-objecten definiëren, enkele variabelen die nodig zijn voor het programma hieronder, evenals de structuur van variabelen die gebruikt worden voor het opslaan van de binnenkomende data van mijn DIY RC-zender. Voor meer details over hoe deze communicatie werkt, raad ik aan mijn speciale tutorial ervoor te raadplegen.
In de setup-sectie moeten we de radiocommunicatie initialiseren evenals de pinnen definiëren waaraan de servo en ESC's verbonden zijn.
In de loop-sectie lezen we de binnenkomende data van de zender en gebruiken die waarden voor het besturen van de servo en de brushless-motoren. De joystick-binnenkomende data die varieert van 0 tot 255 wordt geconverteerd naar waarden van 0 tot 50 en we gebruiken deze waarden om de positie van de servo te besturen.
Op dezelfde manier besturen we de brushless-motoren met de ESC's. De binnenkomende data van 0 tot 255 wordt geconverteerd naar waarden van 1000 tot 2000 en met de writeMicroseconds()-functie sturen we deze data naar de ESC als een besturingssignaal.
Voor het monitoren van de accuspanning, lezen we de analoge ingang die van de spanningsdeler komt en met eenvoudige wiskunde converteren we de invoerwaarden naar de echte waarde van de accuspanning. Als de accuspanning onder de 11V daalt, laten we simpelweg de indicator-LED oplichten.
En dat is het. Als je meer details nodig hebt, kun je de andere voorgestelde tutorials bekijken en zo volledig begrijpen hoe alles werkt.
Ik hoop dat je van deze tutorial hebt genoten en iets nieuws hebt geleerd. Stel gerust vragen in de reacties hieronder en bekijk mijn Arduino-projectenverzameling.
Productieproces
- Bouw Je Eigen LUMAZOID: Een DIY Arduino Muziek Visualizer
- Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
- Pixie: Een Arduino-gebaseerde NeoPixel-polshorloge – Modern, DIY LED-tijdstuk
- Bouw een DIY VR-skateboard met Arduino, Google Cardboard en Bluetooth
- Bouw Real-Time Cellulaire Automaten op Arduino met 128x64 OLED Display
- Bouw een DIY Arduino Radionica EMR Behandelapparaat
- Real-time RFID aanwezigheidssysteem met Arduino en Google Sheets
- DIY 2D Motion Racing Simulator met Arduino Nano & SG90 Servo's
- Bouw een Betrouwbare Slimme Energiemonitor met Arduino UNO – Stapsgewijze Handleiding
- Arduino Beveiligingssysteem: Slimme Bewegingsdetectie & Alarm
- Bouw een draagbare RFID-deurslot met Arduino – Stap-voor-stap handleiding