Создание Arduino RC-аэроколясной лодки: полное 3D-печатаемое дизайн и руководство по программированию
В этом уроке мы научимся строить Arduino-базированную RC-аэроколясную лодку (hovercraft). Я покажу вам весь процесс строительства, начиная от проектирования и 3D-печати деталей аэроколясной лодки, включая пропеллеры, до подключения электронных компонентов и программирования Arduino. Вы можете посмотреть следующее видео или прочитать письменный урок ниже. Для управления аэроколясной лодкой я использовал свой DIY Arduino-базированный RC передатчик, который я сделал в одном из предыдущих видео. Я установил правый джойстик для управления сервоприводом для позиционирования рулей на задней стороне тягового мотора, установил один из потенциометров для управления подъемным пропеллером, который на самом деле закреплен на бесколлекторном двигателе постоянного тока, и установил левый джойстик для управления тягой. Так давайте посмотрим, что нужно, чтобы построить эту RC-аэроколясную лодку. Для начала я спроектировал аэроколясную лодку с помощью 3D-моделирования программного обеспечения. Вы можете найти и скачать эту 3D-модель, а также изучить её в вашем браузере на Thangs. Скачать сборку 3D-модели на Thangs. STL файлы для 3D печати: Основной принцип работы аэроколясной лодки заключается в том, что судно поднимается подушкой воздуха. Центральный пропеллер дует воздух под судно, который надувает юбку, сделанную из мягкого материала. Когда давление воздуха в юбке достаточно высокое, судно поднимается. Постоянно подаваемый воздух выходит из середины судна, между юбкой и землей, что создает дополнительную подъемную силу и также уменьшает трение между аэроколясной лодкой и землей. После подъема, используя второй пропеллер, создается тяга, которая движет аэроколясную лодку вперед. На задней стороне тягового пропеллера есть простой набор рулей, которые используются для управления аэроколясной лодкой. Тем не менее, как только я закончил дизайн, я начал 3D печать деталей. Корпус аэроколясной лодки или кокпит — это самая большая деталь для печати, и я специально спроектировал её под мой 3D-принтер Creality CR-10, у которого стол для печати 30x30 см. Вот ссылка на этот 3D-принтер, если вы хотите посмотреть. После завершения печати пришло время сделать немного уборки. Основной корпус аэроколясной лодки или кокпит был самой долгой печатью, которая заняла около 18 часов. Из-за кривого дизайна и потому что я хотел, чтобы это была одна печать, было использовано много поддерживающего материала для этой печати. Однако было действительно легко удалить его, и итоговая деталь получилась просто идеальной. Корпус аэроколясной лодки был напечатан вверх ногами и имел лишь незначительное количество поддерживающего материала для удаления. На самом деле, мне пришлось сделать некоторые корректировки к этой печати и вырезать некоторый материал из центрального корпуса надувки, чтобы держатель юбки мог подойти как следует. Я уже обновил 3D-модель, так что у вас не будет этой проблемы. Некоторые круглые области деталей были немного шероховатыми, поэтому я использовал обычную наждачную бумагу, чтобы выгладить их. Пропеллеры не требовали никакой очистки и работали довольно хорошо, выходя прямо с 3D-принтера. Хорошо, следующий шаг — покраска 3D-печатаемых деталей. Я не использовал никакой грунтовки перед этим, а прямо нанёс акриловую краску в виде аэрозольной краски. Я использовал шоколадно-коричневый цвет для первого слоя. Для некоторых меньших деталей, которые на самом деле являются просто декоративными частями, я использовал более светлый коричневый цвет. Чтобы сделать аэроколясную лодку немного круче, как только первый слой высох, я продолжил добавлением двух еще цветов к деталям. Для этой цели я сделал некоторые случайные узоры на простом листе бумаги и использовал их, чтобы сделать полосы и пятна в разных цветах. Я использовал более светлый коричневый и черный цвет для этой цели. Мне действительно нравится, как детали получились, так что как только они высохли, я продолжил их сборку. Я начал с установки сервопривода, который управляет рулями, на корпус тягового надувателя. Я закрепил сервопривод с помощью двух болтов M2 и гаек. Далее — бесколлекторный мотор. Конкретная модель, которую у меня есть, — это D2830, у которой диаметр 28 мм и длина 30 мм, и, конечно, корпус специально спроектирован под этот мотор. Здесь при вставке мотора сначала мне пришлось пройти провода через отверстия. Это немного туго, но все еще выполнимо. Затем с обратной стороны, используя болты M3, я закрепил мотор к корпусу. Далее я могу объединить тяговой корпус с основным телом аэроколясной лодки. Эта деталь имеет отверстие, так что провода сервопривода и BLDC мотора могут пройти через него. Используя четыре болта M3, я закрепил их надежно вместе. После того как я закончил это, я продолжил установку второго бесколлекторного мотора к корпусу аэроколясной лодки. Здесь снова я использовал тот же метод. Сначала я прошел провода через отверстия, а затем с обратной стороны закрепил мотор с помощью четырех болтов M3. Далее идет электроника. Электронные компоненты будут размещены между корпусом и основным телом аэроколясной лодки. Но перед этим давайте посмотрим на схему подключения и увидим, как всё должно быть подключено. Так, «мозгом» этой аэроколясной лодки является плата Arduino. С Arduino мы можем легко управлять сервоприводом, а также двумя бесколлекторными двигателями, используя два электронных регулятора оборотов (ESC). Для питания BLDC моторов я буду использовать 3S Li-Po батарею, которая обеспечивает около 11В, а для питания Arduino мы можем использовать стабилизированные 5В, которые ESC обеспечивают через свою функцию BEC (Battery Eliminator Circuit). Для беспроводного обмена я буду использовать трансиверный модуль NRF24L01, который, если используется с усилительной антенной, может иметь стабильную дальность до 700 метров в открытом пространстве. RC передатчик, который я буду использовать для управления аэроколясной лодкой, — это тот, который я сам собрал в одном из предыдущих уроков, так что вы можете проверить его, если вам нужно больше деталей об этом. Также есть подробные уроки по модулю NRF24L01 и как использовать бесколлекторные двигатели с Arduino. Тем не менее, основной принцип работы заключается в том, что передатчик отправляет данные джойстиков или потенциометров приемнику, который управляет скоростью бесколлекторных двигателей и положением сервопривода. Есть еще одна небольшая деталь на этой схеме, и это монитор батареи. Я добавил простой делитель напряжения, сделанный из двух резисторов, который подключен напрямую к батарее, и его выход идет на аналоговый вход Arduino. Делитель напряжения снижает 11 вольт до около 4 вольт, которые затем приемлемы для 5В выводов Arduino. С этим мы можем мониторить напряжение батареи и установить светодиод, чтобы он загорался, когда, например, напряжение батареи упадет ниже 11 вольт. Компоненты, необходимые для этого Arduino урока, можно найти по ссылкам ниже: Итак, я начал подключать компоненты, как объяснено. Для подключения двух ESC к одной батарее я использовал параллельный разъем-разделитель батареи, тип XT60. Для добавки выключателя питания к проекту я использовал другой XT60 разъем, на котором я перерезал один провод и припаял тумблер там. Так что одна сторона идет к Y-разделительному кабелю, а другая — к батарее. Далее я разместил ESC в основном теле и зажал их между ним и корпусом аэроколясной лодки. Затем, используя четыре болта M3, я закрепил две детали вместе. Из верхнего отверстия тела я затем вставил батарею в область кокпита. Далее нам нужно подключить компоненты к Arduino, и для этой цели я добавил два пиновых заголовка к Arduino, которые будут служить как GND и 5В выводы. Так что, как только я подключил всё к Arduino, я прошел антенну NRF24L01, индикаторный светодиод и выключатель питания через верхнюю крышку кокпита. Затем мне просто нужно было засунуть всё в кокпит. Это было немного туго здесь, потому что я использовал Arduino UNO, и, вероятно, мне следовало использовать Arduino Nano вместо этого. Однако я смог уместить всё внутрь, также прикрепил маленькую декоративную деталь к крышке и просто защелкнул её к корпусу кокпита. Я продолжил установку системы рулевого управления. Сначала я подключил маленькое звено к рожке сервопривода с помощью болта M2 и гайки. Затем я вставил первый руль на место и закрепил его к тяговому корпусу с помощью металлической проволоки 2 мм, которая проходит через его тело, и так руль может вращаться вокруг него. Того же способа я прикрепил второй руль. Этот руль имеет дополнительный слот, так что мы можем подключить его к ранее вставленному звену к сервоприводу. Опять же, я использовал болт M2 и гайку для их крепления. И наконец, я подключил два руля друг к другу с помощью другого звена, и с этим система рулевого управления завершена. Далее я закреплю эту маленькую декоративную деталь на стороне аэроколясной лодки. Используя сверло, я сделал отверстие и затем закрепил деталь к корпусу с помощью одного винта. Я разместил эти детали по обе стороны, и я думаю, они довольно хорошо подходят к общему внешнему виду аэроколясной лодки. Хорошо, дальше я продолжил изготовление юбки для этой аэроколясной лодки. Вы можете заметить здесь, что держатель юбки имеет отверстия вокруг него, и это для крепления его к корпусу. Есть также слоты для гайков, чтобы быть помещенными в них, и таким образом мы сможем легко закрепить держатель юбки к корпусу с помощью болтов M3. Как только я закрепил все гайки на месте, я продолжил изготовление юбки, для которой я использовал простой пластиковый пакет для мусора. Так что сначала я нанес цианакрилатный клей на среднюю область держателя и приклеил его к пластиковому пакету. Затем я отступил периметр держателя примерно на 6 см. Я отметил это в нескольких точках и затем соединил их вместе. Используя канцелярский нож, я вырезал пластиковый пакет до нужного размера. Затем я перевернул юбку и добавил некоторый дополнительный держатель к пакету там, где мы ранее приклеили его с помощью цианакрилатного клея. Далее внешняя сторона пакета должна быть приклеена к верхушке держателя. Опять же, я использовал цианакрилатный клей для этой цели и аккуратно закрепил пластиковый пакет к нему. Когда это сделано, вот как должна выглядеть юбка. Далее я сделал отверстия через пластиковый пакет там, где должны проходить болты. Держатель юбки всего на 1 мм меньше, чем корпус аэроколясной лодки, так что в сочетании с пластиковым пакетом он идеально вписывается в корпус. Для крепления юбки к корпусу я просто затянул болты M3 вокруг всего периметра. Есть ещё одна вещь, которую нужно сделать с юбкой — это вырезать центральную область пластикового пакета. Так, с этим половина воздуха будет напрямую надувать юбку, а затем она будет выходить через это отверстие, создавая дополнительное воздушное пузырь в середине. Наконец, что осталось сделать — это закрепить пропеллеры к бесколлекторным моторам. Для этой цели я использую зажим (collet), который идет в комплекте с бесколлекторным мотором. Это действительно простой и эффективный способ крепления пропеллера к валу мотора. Однако я потерял зажим для моего другого мотора, поэтому мне пришлось напечатать другую версию пропеллера, чтобы он напрямую подходил к валу мотора, который составляет 3.15 мм. Печать на самом деле получилась довольно хорошей, она подошла и закрепилась идеально к мотору без даже использования клея. И это всё, наша радиоуправляемая аэроколясная лодка наконец готова. Однако что осталось в этом видео — это взглянуть на код Arduino и то, как работает программа. Вот код для этого DIY Arduino-базированного проекта RC-аэроколясной лодки: Описание: Так, сначала нам нужно подключить библиотеку RF24 для радиообмена, а также библиотеку Servo для управления как сервоприводом, так и бесколлекторными двигателями. Затем нам нужно определить радио и объекты сервоприводов, некоторые переменные, необходимые для программы ниже, а также структуру переменных, которые используются для хранения входящих данных от моего DIY RC передатчика. Для более подробной информации о том, как работает этот обмен, я бы предложил проверить мой конкретный урок для него. В разделе setup нам нужно инициализировать радиообмен, а также определить выводы, к которым подключены сервопривод и ESC. В разделе loop мы считываем входящие данные от передатчика и используем эти значения для управления сервоприводом и бесколлекторными двигателями. Так, входящие данные джойстика, которые варьируются от 0 до 255, конвертируются в значения от 0 до 50, и мы используем эти значения для управления положением сервопривода. Тем же методом мы управляем бесколлекторными двигателями с помощью ESC. Входящие данные, которые от 0 до 255, конвертируются в значения от 1000 до 2000, и используя функцию writeMicroseconds() мы отправляем эти данные ESC как управляющий сигнал. Для мониторинга напряжения батареи мы считываем аналоговый вход, идущий от делителя напряжения, и с некоторой простой математикой конвертируем входные значения в реальное значение напряжения батареи. Если напряжение батареи падает ниже 11В, мы просто зажигаем индикаторный светодиод. И это всё. В случае, если вам нужны дополнительные детали, вы можете проверить другие предложенные уроки, и так вы сможете полностью понять, как всё работает. Надеюсь, вам понравился этот урок, и вы узнали что-то новое. Не стесняйтесь задавать любые вопросы в разделе комментариев ниже и проверяйте мою коллекцию проектов Arduino.Обзор

3D-модель аэроколясной лодки


Принцип работы аэроколясной лодки


3D печать






Покраска аэроколясной лодки


Сборка Arduino RC-аэроколясной лодки






Схема подключения




















Код Arduino RC-аэроколясной лодки
/* 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)
Производственный процесс
- Сделай свой LUMAZOID: DIY Arduino музыкальный визуализатор
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- Pixie: DIY-наручные часы на Arduino Pro Mini и NeoPixel — стильный светодиодный тахометр времени
- Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
- Клеточный автомат «Жизнь» Конвея на Arduino Nano с OLED 128x64
- DIY Arduino Radionics EMR Treatment Device — радионическое устройство
- Система учёта рабочего времени на RFID, Arduino и Google Таблицах
- DIY 2D гоночный симулятор движения на Arduino Nano и сервоприводах SG90
- Построение надежного умного монитора энергии на Arduino UNO – Пошаговое руководство
- Система безопасности на Arduino: обнаружение движения и тревога