Самодельный радиоуправляемый корабль на воздушной подушке на базе Arduino
<основной класс="главный сайт" id="главный">
В этом уроке мы научимся собирать радиоуправляемый корабль на воздушной подушке на базе Arduino. Я покажу вам весь процесс его создания, начиная с проектирования и 3D-печати деталей корабля на воздушной подушке, включая пропеллеры, до подключения электронных компонентов и программирования Arduino.
Вы можете посмотреть следующее видео или прочитать письменное руководство ниже.
Обзор
Для управления судном на воздушной подушке я использовал самодельный радиоуправляемый передатчик на базе Arduino, который я сделал в одном из своих предыдущих видео. Я установил правый джойстик для управления серводвигателем для позиционирования рулей на задней стороне двигателя тяги, установил один из потенциометров для управления подъемным винтом, который на самом деле прикреплен к бесщеточному двигателю постоянного тока, и установил левый джойстик для управления движение. Итак, давайте посмотрим, что нужно для создания этого радиоуправляемого корабля на воздушной подушке.
3D-модель корабля на воздушной подушке
Для начала я спроектировал корабль на воздушной подушке с помощью программного обеспечения для 3D-моделирования.
Вы можете найти и скачать эту 3D-модель, а также изучить ее в своем браузере на Thangs.
Загрузите 3D-модель сборки на Thangs.
Файлы STL для 3D-печати:
Принцип работы корабля на воздушной подушке
Основной принцип работы корабля на воздушной подушке заключается в том, что корабль поднимается воздушной подушкой. Центральный пропеллер нагнетает воздух под аппарат, который надувает юбку из мягкого материала.
Когда давление воздуха в юбке становится достаточно высоким, корабль поднимается. Постоянно подаваемый воздух выходит из середины корабля, между юбкой и землей, что создает дополнительную подъемную силу, а также уменьшает трение между судном на воздушной подушке и землей.
После подъема с помощью второго гребного винта создается тяга, которая перемещает судно на воздушной подушке вперед.
На задней стороне винта находится простой набор рулей, которые используются для управления судном на воздушной подушке.
3D-печать
Тем не менее, как только я закончил дизайн, я начал с 3D-печати деталей.
Корпус корабля на воздушной подушке — самая большая часть для печати, и я специально разработал его для своего 3D-принтера Creality CR-10, у которого есть платформа для печати 30x30 см.
Вот ссылка на этот 3D-принтер на случай, если вы захотите его проверить.
После того, как печать завершена, пришло время сделать небольшую уборку. Основной корпус корабля на воздушной подушке или кабина были самым длинным отпечатком, на печать которого ушло около 18 часов. Из-за изогнутого дизайна и из-за того, что я хотел сделать один отпечаток, для этого оттиска использовалось много вспомогательного материала.
Тем не менее, это было действительно легко удалить, и финальная часть получилась просто идеальной. Корпус корабля на воздушной подушке был напечатан в перевернутом виде, и с него нужно было удалить лишь незначительное количество вспомогательного материала. На самом деле, мне пришлось внести некоторые коррективы в этот оттиск и вырезать часть материала из корпуса центрального вентилятора, чтобы держатель юбки мог поместиться должным образом.
Я уже обновил 3D-модель, так что этой проблемы не будет.
Некоторые круглые участки деталей были немного шероховатыми, поэтому я использовал обычную бумагу для отправки, чтобы сгладить их.
Пропеллеры не нуждались в очистке, и они работали довольно хорошо прямо из 3D-принтера.
Покраска корабля на воздушной подушке
Итак, следующий шаг — покраска 3D-печатных деталей. Раньше я не использовал грунтовку, а сразу наносил акриловую краску в виде аэрозольной краски.
В качестве первого слоя я использовала шоколадную краску для бровей. Для некоторых мелких деталей, которые на самом деле являются просто декоративными деталями, я использовал более светлый коричневый цвет.
Чтобы корабль на воздушной подушке выглядел немного круче, как только первый слой высох, я продолжил добавлять к деталям еще два цвета. Для этого я сделал несколько случайных узоров на простом листе бумаги и использовал их, чтобы сделать полосы и пятна разных цветов. Для этой цели я использовал светло-коричневый и черный цвета.
Сборка радиоуправляемого корабля на воздушной подушке Arduino
Мне очень нравится, как получились детали, поэтому, как только они высохли, я продолжил их сборку.
Я начал с установки серводвигателя, который управляет рулями, на корпус нагнетателя. Я закрепил сервопривод двумя болтами М2 и гайками.
Далее идет бесколлекторный двигатель. У меня есть конкретная модель D2830 диаметром 28 мм и длиной 30 мм, и, конечно же, корпус специально разработан для этого двигателя.
Здесь при вставке мотора сначала пришлось продеть провода через отверстия. Это немного туго, но все же можно пройти через них. Затем с обратной стороны с помощью болтов М3 прикрепил двигатель к корпусу.
Затем я могу объединить корпус тяги с основным корпусом корабля на воздушной подушке. В этой части есть отверстие, через которое могут пройти провода сервопривода и двигателя BLDC.
Используя четыре болта M3, я надежно скрепил их вместе.
Закончив с этим, я продолжил установку второго бесколлекторного двигателя на корпус корабля на воздушной подушке. Здесь я снова использовал тот же метод. Сначала я пропустил провода через отверстия, а затем с обратной стороны закрепил мотор четырьмя болтами М3.
Схема цепи
Далее идет электроника. Электронные компоненты будут размещены между корпусом и основным корпусом корабля на воздушной подушке. Но прежде чем мы это сделаем, давайте взглянем на принципиальную схему и посмотрим, как все должно быть подключено.
Итак, мозг этого корабля на воздушной подушке — плата Arduino. С Arduino мы можем легко управлять сервоприводом, а также двумя бесколлекторными двигателями, используя два электронных регулятора скорости или ESC. Для питания двигателей BLDC я буду использовать литий-полимерный аккумулятор 3S, который обеспечивает около 11 В, а для питания Arduino мы можем использовать регулируемые 5 В, которые регуляторы обеспечивают с помощью функции Battery Eliminator Circuit.
Для беспроводной связи я буду использовать модуль приемопередатчика NRF24L01, который при использовании с усиленной антенной может иметь стабильный диапазон до 700 метров на открытом пространстве. Радиоуправляемый передатчик, который я буду использовать для управления судном на воздушной подушке, я изготовил самостоятельно в одном из моих предыдущих руководств, так что вы можете проверить его, если вам нужна дополнительная информация о нем. Также есть подробные руководства по модулю NRF24l01 и тому, как использовать бесколлекторные двигатели с помощью Arduino. Тем не менее, основной принцип работы заключается в том, что передатчик отправляет данные джойстиков или потенциометров на приемник, который управляет скоростью бесколлекторных двигателей и положением сервопривода.
На этой принципиальной схеме есть еще одна маленькая деталь, и это монитор батареи. Я добавил простой делитель напряжения из двух резисторов, который подключается напрямую к аккумулятору, а его выход идет на аналоговый вход Arduino. Делитель напряжения снижает 11 вольт примерно до 4 вольт, что затем приемлемо для 5-вольтовых контактов Arduino. Благодаря этому мы можем контролировать напряжение батареи и настроить светодиод на загорание, например, когда напряжение батареи упадет ниже 11 вольт.
Компоненты, необходимые для этого руководства по Arduino, можно получить по ссылкам ниже:
- Модуль приемопередатчика NRF24L01….
- NRF24L01 + PA + LNA ………….….
- Бесщеточный двигатель ………………….……
- ESC 30A ……………………………….…..
- Литий-полимерный аккумулятор …………………………………..
- XT60 2 гнезда на 1 гнездо ………….
- Разъем XT60 …………………………
- Серводвигатель …………………………………..
- Плата Arduino …………………………
Итак, я начал соединять компоненты, как было объяснено. Для подключения двух ESC к одной батарее я использовал разветвитель для параллельного подключения батарей типа XT60.
Для добавления в проект выключателя питания я использовал еще один разъем XT60, на котором отрезал один провод и припаял туда тумблер. Итак, одна сторона идет к кабелю Y-разветвителя, а другая к аккумулятору.
Затем я поместил ESC в основной корпус и зажал их между ним и корпусом корабля на воздушной подушке. Затем, используя четыре болта М3, я скрепил две части вместе. Через верхнее отверстие кузова я вставил аккумулятор в кабину.
Затем нам нужно подключить компоненты к Arduino, и для этой цели я добавил к Arduino два штыревых разъема, которые будут служить контактами GND и 5V.
Итак, как только я подключил все к Arduino, я пропустил антенну NRF24L01, светодиодный индикатор и выключатель питания через верхнюю крышку кабины.
Тогда мне просто нужно было втиснуть все в кабину. Здесь было немного тесновато, потому что я использовал Arduino UNO, и, вероятно, вместо этого я должен был использовать Arduino Nano.
Однако мне удалось все уместить, также я прикрепил небольшую декоративную деталь к крышке, а затем просто прикрепил ее к корпусу кабины.
Продолжил установку рулевой системы. Сначала я соединил небольшое звено с рупором сервопривода с помощью болта M2 и гайки. Затем я вставил первый руль на место и прикрепил его к корпусу тяги с помощью 2-миллиметровой металлической проволоки, которая проходит через его корпус, чтобы руль мог вращаться вокруг него. Таким же образом прикрепил второй руль.
У этого руля есть дополнительный слот, поэтому мы можем подключить его к ранее вставленному звену сервопривода. Опять же, я использовал болт М2 и гайку для их крепления. И, наконец, я соединил два руля друг с другом с помощью другого звена, и на этом система рулевого управления завершена.
Далее я прикреплю эту небольшую декоративную деталь сбоку корабля на воздушной подушке. Используя дрель, я сделал отверстие, а затем прикрепил деталь к корпусу с помощью одного винта. Я разместил эти детали с обеих сторон, и я думаю, что они очень хорошо вписываются в общий вид корабля на воздушной подушке.
Хорошо, дальше я продолжил делать юбку для этого корабля на воздушной подушке. Вы можете заметить, что вокруг держателя юбки есть отверстия для крепления к корпусу.
Также есть прорези для гаек, и таким образом мы сможем легко прикрепить держатель юбки к корпусу с помощью болтов M3. После того, как я закрепил все гайки на месте, я продолжил делать юбку, для которой использовал обычный пластиковый пакет для мусора.
Итак, сначала я нанес клей AC на среднюю часть держателя и приклеил его к пластиковому пакету. Затем я смещаю периметр держателя примерно на 6 см. Я отметил несколько точек, а затем соединил их вместе.
С помощью канцелярского ножа я обрезал пластиковый пакет до нужного размера. Затем я перевернула юбку и добавила к сумке дополнительный держатель, который мы ранее приклеили с помощью клея AC.
Затем внешнюю часть пакета нужно приклеить к верхней части держателя. Опять же, я использовал для этой цели клей AC и аккуратно прикрепил к нему пластиковый пакет.
После этого юбка должна выглядеть вот так.
Затем я проделал в полиэтиленовом пакете отверстия, через которые должны пройти болты. Держатель юбки всего на 1 мм меньше корпуса катера на воздушной подушке, поэтому в сочетании с пластиковым пакетом он идеально вписывается в корпус. Для крепления юбки к корпусу я просто прикрутил болты М3 по всему периметру.
С юбкой нужно сделать еще одну вещь — вырезать центральную часть пластикового пакета.
Таким образом, половина воздуха будет непосредственно надувать юбку, а затем выходить через это отверстие, создавая дополнительный воздушный пузырь посередине.
Наконец, осталось прикрепить пропеллеры к бесколлекторным двигателям. Для этой цели я использую цангу, которая идет в комплекте с бесщеточным двигателем. Это действительно простой и эффективный способ крепления винта к валу двигателя.
Однако я потерял цангу для другого двигателя, поэтому мне пришлось напечатать другую версию пропеллера, чтобы он подходил непосредственно к валу двигателя, а именно 3,15 мм. На самом деле отпечаток получился довольно хорошим, он идеально подошел и прикрепился к двигателю даже без использования клея.
Вот и все, наш радиоуправляемый корабль на воздушной подушке наконец-то готов.
Однако в этом видео осталось взглянуть на код Arduino и на то, как работает программа.
Код Arduino RC Hovercraft
Вот код для этого самодельного проекта RC Hovercraft на базе Arduino:
/*
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 receving 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 recived 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 jas 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 singal 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 i
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)
Описание: Итак, сначала нам нужно включить библиотеку RF24 для радиосвязи, а также библиотеку сервоприводов для управления как серводвигателями, так и бесколлекторными двигателями. Затем нам нужно определить объекты радио и сервопривода, некоторые переменные, необходимые для программы ниже, а также структуру переменных, которые используются для хранения входящих данных от моего самодельного радиоуправляемого передатчика. Для получения более подробной информации о том, как работает это общение, я бы посоветовал проверить мой конкретный учебник.
В разделе настройки нам нужно инициализировать радиосвязь, а также определить контакты, к которым подключены сервопривод и ESC.
В секции цикла мы считываем входящие данные от передатчика и используем эти значения для управления сервоприводом и бесколлекторными двигателями. Таким образом, входящие данные джойстика, которые варьируются от 0 до 255, преобразуются в значения от 0 до 50, и мы используем эти значения для управления положением сервопривода.
Таким же образом мы управляем бесколлекторными двигателями с помощью ESC. Входящие данные от 0 до 255 преобразуются в значения от 1000 до 2000, и с помощью функции wirteMicroseconds() мы отправляем эти данные в ESC в качестве управляющего сигнала.
Для контроля напряжения батареи мы считываем аналоговый вход, поступающий от делителя напряжения, и с помощью простых математических операций преобразуем входные значения в реальное значение напряжения батареи. Если напряжение батареи падает ниже 11 В, мы просто загораем светодиодный индикатор.
Вот и все. Если вам нужны дополнительные сведения, вы можете ознакомиться с другими предлагаемыми руководствами, чтобы вы могли полностью понять, как все работает.
Надеюсь, вам понравился этот урок, и вы узнали что-то новое. Не стесняйтесь задавать любые вопросы в разделе комментариев ниже и проверять мою коллекцию проектов Arduino.
Производственный процесс
- Музыкальный визуализатор DIY LUMAZOID для Arduino
- Вольтметр своими руками с использованием Arduino и смартфона
- Pixie:наручные часы NeoPixel на базе Arduino
- Скейтборд виртуальной реальности «Сделай сам»
- Клеточные автоматы на основе Arduino и OLED
- Сделай сам Arduino РАДИОНИКА Лечение MMachine
- Система посещаемости на основе Arduino и Google Spreadsheet
- Самодельный двухмерный гоночный симулятор
- Smart Energy Monitor на основе Arduino
- Система безопасности на основе Arduino