Радиоуправляемый самолет на ардуино » Изобретения и самоделки

Радиоуправляемый самолет на ардуино » Изобретения и самоделки Самолеты
Содержание
  1. Самодельный летающий дрон с камерой, который следует за вами на автопилоте (на основе arduino)
  2. Arduino propeller motor купить по низкой цене на aliexpress
  3. Arduino uno доска
  4. Arduino редукторный двигатель на алиэкспресс — купить онлайн по выгодной цене
  5. Rf контролируемая схема самолета
  6. Запуск и настройка устройства
  7. Значения драйвера в составе устройства и работа с ним
  8. Изготовление платформы пропеллера
  9. Используемые радиоэлементы
  10. Компоновка радиодеталей
  11. Назначение двигателя aрдуино и принцип работы
  12. Необходимые инструменты и материалы
  13. О микросхеме 74ls373
  14. Обзор
  15. Отслеживание нулевой позиции
  16. Пример использования
  17. Принципиальная схема pov
  18. Программное обеспечение
  19. Програмное обеспечение
  20. Расчет таймингов pov
  21. Сборка двигателя
  22. Сборка и тестирование
  23. Сторона передатчика
  24. Сторона получателя
  25. Тестирование pov
  26. Установка программного обеспечения
  27. Цели и задачи проекта

Самодельный летающий дрон с камерой, который следует за вами на автопилоте (на основе arduino)

В наши дни дроны – это очень популярные игрушки. На рынке можно найти профессиональные летающие дроны и дроны для любителей. У мастера, автора данной статьи, есть четыре беспилотника (квадрокоптеры и гекскоптеры), потому что он любит все, что летает, но 200-й полет не так интересен и становится скучно, поэтому он решил создать свой собственный дрон с некоторыми дополнительными возможностями. Мастер любит программировать на Arduino и проектировать схемы и гаджеты, поэтому он начал его строить. В самоделке использован контроллер полета MultiWii, основанный на чипе ATMega328, который также используется в Arduino UNO, поэтому программирование довольно простое. Этот беспилотник может быть подключен к смартфону на Android, который отправляет свои данные GPS на беспилотник, который сравнивает эти данные с его собственным сигналом GPS, а затем начинает следовать за телефоном. Поэтому, если двигаться по улице, дрон будет следует за вами. Конечно, есть много недостатков, однако дрон следит за телефоном, снимает видео, а также имеет ультразвуковой датчик расстояния, чтобы избежать препятствий в воздухе. Это особенности самодельного беспилотника.

Смотрите про коптеры:  Настройка квадрокоптера: как откалибровать квадрокоптер

Шаг 1: Основные свойства

Дрон работает почти полностью автоматически, вам не нужно управлять им, потому что он следует за вашим телефоном, который обычно находится всегда с вами, ультразвуковой датчик помогает обходить деревья, здания и другие препятствия, а GPS выдает очень точные данные о местоположении, но давайте посмотрим, что мы имеем в итоге:

– Аккумулятор 1000 мАч, хватает на 16-18 минут непрерывного полета;
– ультразвуковой датчик, чтобы избежать препятствий в воздухе;
– Модуль Bluetooth для получения данных с телефона;
– Микроконтроллер на основе Arduino;
– встроенный гироскоп;
– регулируемая максимальная высота (5 м);
– при низком заряде батареи, дрон автоматически падает на телефон; (желательно держать телефон в руках)
– затраты на постройку дрона около 100 долларов;
– можно запрограммировать на что угодно;
– с помощью GPS можно отправить беспилотник по любым координатам;
– дизайн в стиле квадрокоптера;
– оборудован 2-мегапиксельной видеокамерой 720p HQ;
– весит 109 г;

Шаг 2: Подбор деталей и инструментов

Инструменты:

– Паяльник;
– Клей-пистолет;
– резец;
– Кусачки;
– Супер клей;
– Двухсторонняя клейкая лента;
– Резинки;

Электронные компоненты:

– MultiWii 32kB Flight Conroller;
– Модуль последовательного GPS;
– Серийный I2C конвертер;
– Модуль Bluetooth;
– Ультразвуковой датчик;
– Кусок жесткой пластмассы;
– Соломинки из кафе;
– зубчатая передача;
– Двигатели;
– Пропеллеры;
– Винты;
– L293D Motor Driver (это был неудачный выбор драйвера, будет исправлено во второй версии);
– 1000 мАч литий-ионный аккумулятор;

Шаг 3: Сборка пропеллеров

Мастер купил эти пропеллеры с моторами на Алиэкспресс, они являются запасными частями для дрона Syma S5X, но они оказались полезными и для данной самоделки.

Шаг 4: Принципиальная схема

Всегда смотрите на схему во время работы и будьте осторожны со связями.

Шаг 5: Пайка двигателей к драйверу управления

Теперь вам нужно спаять все кабели от двигателей до ИС драйвера двигателя L293D. Посмотрите на картинки, они говорят гораздо больше. Вы должны подключить черный и синий провода к заземлению и положительные провода к выходам 1-4. L293D может управлять этими двигателями, но мастер рекомендует использовать силовые транзисторы, потому что этот чип не может работать со всеми четырьмя двигателями при высокой мощности (более 2 А).

Шаг 6: Сборка рамы

Пожалуйста, обратите внимание на вторую картинку, на которой показано, как оборудовать пропеллеры. Используйте крепкие трубочки-соломинки из кафе и кусок пластмассы для сборки рамы. Используйте немного горячего клея и супер клея для всех четырех винтов, затем проверьте соединения. Очень важно, чтобы пропеллеры находились на одинаковом расстоянии друг от друга.

Шаг 7: Добавление проводов к драйверу L293D

Припаяйте провода к оставшимся контактам микросхемы. Это поможет подключить контакты Arduino к входам / выходам. Теперь пришло время построить схему.

Шаг 8: Схема

Все модули включены в комплект контроллера полета, который мастер заказывал заранее, так что просто нужно соединить их вместе. Bluetooth идет к последовательному порту, сначала GPS в преобразователе I2C, затем в порту I2C. Теперь данную схему можно установить на свой дрон.

Шаг 9: Крепление электрической цепи к раме

Используйте двустороннюю ленту и сначала добавьте GPS. Эта губчатая лента удерживает все на месте, поэтому приклейте каждый модуль один за другим на пластиковую деталь. По окончанию следует подключить контакты привода двигателей к MultiWii.

Шаг 10: Соединение двух цепей

Входные контакты поступают на D3, D9, D10, D11, остальные должны быть подключены к контактам VCC и GND.

Шаг 11: Батарея …

Мастер использовал несколько резиновых лент, чтобы прикрепить батарею к дрону. Держится довольно крепко.

Шаг 12: Ультразвуковой датчик

Датчик гидролокатора закреплен на дроне резиновой лентой и подключен к контактам D7 и D6 контроллера MultiWii.

Шаг 13: Программирование чипа

Вы должны использовать модуль Serial FTDI для программирования чипа. В комплект чипа входит модуль программатора.

Шаг 14: Программное обеспечение

Мастер не знает, загружено ли программное обеспечение на чип или нет, но здесь он объясняет, что делать. Сначала загрузите официальную библиотеку MultiWii на свой компьютер. Извлеките файл .zip, затем откройте файл MultiWii.ino. Выберите «Arduino / Genuino UNO» и загрузите его на свой чип. Теперь ваш микроконтроллер имеет все предустановленные функции. Гироскоп, свет, Bluetooth и даже маленький ЖК-дисплей (который не используется в этом проекте) работает с загруженным кодом. Но этот код можно использовать только для проверки работоспособности модулей. Попробуйте наклонить дрон, и вы увидите, что моторы будут вращаться из-за гиросенсора. Нам следует изменить код контроллера, чтобы дрон следовал за телефоном.

Если вы можете запрограммировать Arduino или следовать инструкциям мастера, то сможете создать свой собственный дрон, который будет следовать за вами повсюду.

GitHub – ссылка на программное обеспечение

Шаг 15: Изменение кода

Мастеру пришлось изменить код датчиков и контроллера, который давал подсказки для ATMega328, но теперь модуль Bluetooth выдает три GPS-координаты, и в зависимости от них движется дрон.

Вложения

Шаг 16: Приложение для телефона

Мастер использовал приложение SensoDuino, которое можно загрузить из плей маркет гугла. Подключитесь к дрону через Bluetooth и включите GPS TX и регистрацию данных. После этого приложение телефона готово.

Шаг 17: Камера

В качестве камеры использована дешевая китайская камера. Эта камера использовалась во многих проектах мастера и всегда показывала отличные результаты. Весит она всего 15 г и может снимать хорошее видео.

Шаг 18: Тестирование …

Расстояние соединения составило около 8 м, что более чем достаточно для такого беспилотника, как этот.

Arduino propeller motor купить по низкой цене на aliexpress

arduino propeller motor хорошего качества и по доступной цене? Мы знаем, где искать! На AliExpress можно найти всё по ключевым словам, например, arduino propeller motor — вы получите выгодные предложения и сможете сэкономить. Вот краткое руководство о том, как найти самые низкие цены и качественные товары.

Используйте фильтры. На AliExpress есть широкий выбор самых разнообразных товаров. Чтобы найти товар arduino propeller motor по вашим параметрам, настройте фильтры и отсортируйте всё по соответствующим результатам, количеству заказов или цене. Вы также можете выбрать фильтры с бесплатной доставкой, быстрой доставкой или бесплатным возвратом.

Изучайте бренды. arduino propeller motor от надёжных и известных брендов, которые вам нравятся — просто нажмите логотип бренда на левой боковой панели. Это поможет вам отфильтровать результаты поиска.

Читайте отзывы. Посмотрите, нравится ли arduino propeller motor другим покупателям. Читайте реальные отзывы о товаре — вы найдёте много полезной информации, а также советы и подсказки для удобного шопинга.

Так будет проще найти arduino propeller motor по выгодной цене и воспользоваться быстрой доставкой или бесплатным возвратом товара. А новых пользователей ждут спецпредложения и подарки! Заходите на сайт AliExpress, чтобы найти и купить ещё больше товаров из категории.”

Arduino uno доска

Arduino — это платформа для создания прототипов электроники с открытым исходным кодом, основанная на гибком, простом в использовании аппаратном и программном обеспечении. Он предназначен для художников, дизайнеров, любителей и всех, кто заинтересован в создании интерактивных объектов или сред.

Рис. 2: Схема самолета, управляемого РЧ (сторона приемника)
Рис. 2: Схема самолета, управляемого РЧ (сторона приемника)

Arduino Uno — плата на базе микроконтроллера ATmega328. Он состоит из 14 выводов цифрового ввода / вывода, шести аналоговых входов, USB-соединения для программирования встроенного микроконтроллера, разъема питания, разъема ICSP и кнопки сброса.

Он работает с кварцевым генератором 16 МГц и содержит все необходимое для поддержки микроконтроллера. Он очень прост в использовании, поскольку пользователю просто нужно подключить его к компьютеру с помощью USB-кабеля или подключить к нему с помощью адаптера переменного тока в постоянный или батареи, чтобы начать работу. Микроконтроллер на плате программируется с использованием языка программирования Arduino и среды разработки Arduino.

Arduino редукторный двигатель на алиэкспресс — купить онлайн по выгодной цене

Перед покупкой сравните цены на arduino редукторный двигатель, прочитайте реальные отзывы покупателей, ознакомьтесь с техническими характеристиками.

Закажите arduino редукторный двигатель онлайн с доставкой по России: товары с пометкой Plus доступны с ускоренной доставкой и улучшенными условиями возврата.

На Алиэкспресс arduino редукторный двигатель всегда в наличии в большом ассортименте: на площадке представлены как надежные мировые бренды, так и перспективные молодые.

Rf контролируемая схема самолета

На фиг.1 показана принципиальная схема стороны передатчика самолета, управляемого РЧ, а на фиг.2 показана принципиальная схема стороны приемника. Цепи построены вокруг Arduino Uno (board1 и board2), пары радиочастотных модулей 433 МГц (TX1 и RX1), модуля ESC (электронного регулятора скорости), трех серводвигателей (M1-M3), двигателя BLDC (M4) и несколько других компонентов.

Сторона передатчика приводится в действие батареей 9 В PP3, а сторона приемника — батареей 11,1 В LiPo, которая используется для питания бесщеточного двигателя постоянного тока (двигателя BLDC) через модуль ESC.

Плата Arduino1 получает питание от батареи 9 В PP3, а плата Arduino 2 — от батареи 11,1 В на соответствующие входные контакты Vin.

На стороне передатчика находятся четыре потенциометра, которые используются для передачи различных сигналов управления на сторону приемника через радиочастотные модули. Управляющие сигналы, принимаемые приемником, обрабатываются микроконтроллером в Arduino, который, в свою очередь, управляет двигателем BLDC, серводвигателями руля направления, элероном и лифтом самолета.

Запуск и настройка устройства

Для начала соединяем провода для питания и земли. На иллюстрации красный означает мощность, а черный означает заземление; они соединяются с двумя длинными вертикальными рядами на стороне макета. Это обеспечивает доступ к источнику питания и напряжению на 5 вольт.

Помещаем кнопку на макет, оседлав центр. Провод соединяет цифровой контакт 2 с одной ногой кнопки. Ножка кнопки, не подключенная к плате Aрдуино, должна быть подключена к источнику питания на 5 вольт.

Подключаем контакт или пин 9 на Arduino к базовому выходу TIP120 . Если смотрите на транзистор, чтобы металлический язычок был обращен от вас, базовый штифт находится на левой стороне транзистора. Это контакт, который управляет открытием или закрытием. Транзисторный коллектор соединяется с одним выводом двигателя.

Другой конец двигателя подключается к положительному выводу 9-вольтовой батареи. Подключаем заземление аккумулятора к земле Arduino и запускаем проект.

Значения драйвера в составе устройства и работа с ним

L298N – это двойной драйвер H-Bridge, который позволяет одновременно управлять скоростью и направлением двух приспособлений постоянного тока. Модуль может приводить в действие приборы постоянного тока с напряжением от 5 до 35 В с пиковым током до 2А.

Давайте подробнее рассмотрим распиновку модуля L298N и объясним, как это работает. Модуль имеет два винтовых клеммных блока для A и B и еще одну винтовую клеммную колодку для заземляющего контакта, VCC для двигателя и вывод 5 В, который может быть либо входом, либо выходом.

Это зависит от напряжения, используемого на двигателях VCC. Модуль имеет встроенный 5V-регулятор, который либо включен, либо выключен с помощью перемычки. Если напряжение питания двигателя до 12 В, мы можем включить регулятор 5V, а вывод 5V можно использовать в качестве выхода, например, для питания платы Arduino.

Но если напряжение двигателя больше 12 В, мы должны отключить перемычку, поскольку эти напряжения могут повредить встроенный регулятор 5 В. В этом случае вывод 5V будет использоваться в качестве входного сигнала, так как мы должны подключить его к источнику питания 5 В, чтобы IC работал правильно.

Здесь можно отметить, что эта ИС уменьшает падение напряжения примерно на 2 В. Так, например, если мы используем источник питания 12 В, напряжение на клеммах двигателей будет составлять около 10 В, а это означает, что мы не сможем получить максимальную скорость от нашего 12-вольтового двигателя постоянного тока.

Далее следуют логические управляющие входы. Для включения и управления скоростью двигателя используются кнопки включения и включения B. Если на этом контакте имеется перемычка, двигатель будет включен, и работать с максимальной скоростью, и если мы удалим перемычку, мы сможем подключить вход ШИМ к этому выводу и, таким образом, контролировать скорость двигателя. Если мы подключим этот контакт к заземлению, двигатель отключится.

Затем штифты Input 1 и Input 2 используются для управления направлением вращения двигателя A, а входы 3 и 4 – для двигателя B. Используя эти контакты, мы фактически управляем переключателями H-Bridge внутри IC L298N. Если вход 1 LOW, а вход 2 – HIGH, приспособление будет двигаться вперед, и наоборот, если вход 1 HIGH, а вход 2 LOW, агрегат будет двигаться назад. Если оба входа одинаковы, либо LOW, либо HIGH, прибор остановится. То же самое относится ко входам 3,4 прибора B.

Изготовление платформы пропеллера

На картинке ниже я собрал все детали, которые будут нужны нам для изготовления POV. Не показан только источник питания для вентилятора и ИК-диод.

Сперва мы должны прикрепить вентилятор к основе, для этого используем 4 болта и гайки.

Для этого, в основе сверлим четыре отверстия и закрепляем вентилятор в центре основы.

Прикрепляем небольшой кусок фанеры, при помощи клея или эпоксидки, к вентилятору.

Обрезаем лопасти вентилятора и прикрепляем держатель 9В батарейки.

Далее, прикрепляем при помощи болтов кусок фанеры к вентилятору.

Сверлим четыре отверстия в плате и закрепляем ее на 4-х шпильках фанеры. Стараемся соблюсти баланс.

Откручиваем плату и делаем ее прямоугольной. Затем опять прикрепляем.

Используемые радиоэлементы

PIC18F252 – микроконтроллер. Основной элемент нашего устройства.

74LS373 (отечественный аналог 555ИР22) – регистр-защелка для управления светодиодами.

Компьютерный вентилятор (3800 об/мин) – я выбрал вентилятор с встроенным контроллером скорости и питания. Для POV-эффект требуется вентилятор с скоростью вращения не менее 3600 об/мин.

Инфракрасный светодиод и фототранзистор – пара этих элементов предназначена для отслеживания нулевой точки. Когда пропеллер пересекает нулевую точку, то в микроконтроллере срабатывает прерывание, по которому программа визуализации начинается с 0°.

Также, в проекте используются:7805 5В преобразователь47мкФ конденсатор40 МГц кварц2x 330 резисторы16x зеленые LEDИК-диодФототранзисторМакетная платаСоединительные провода9В держатель батарейкиPICkit2 программатор

Компоновка радиодеталей

При компоновке деталей на плате необходимо соблюдать баланс, чтобы при вращении не было дисбаланса. Старайтесь размещать детали ближе к центру и равномерно, в дальнейшем можно для балансировки прикрепить грузики на плату (я так и сделал, закрепив две монетки).

На макетной плате я использовал монтаж накруткой, так называемый олд-скул метод. Для микросхем использовал сокеты.

Для начала я разместил все сокеты и компоненты стабилизатора.

Следующим этапом, необходимо разместить светодиоды в один ряд на противоположной стороне платы.

После того, как все установлено, скручиваем или припаиваем все выводы согласно принципиальной схеме POV

Сначала, я соединил микроконтроллер PIC и триггеры

Затем, соединил светодиоды к источнику питания и схеме управления.

Последним шагом, я закрепил инфракрасный светодиод к основе.

ИК-светодиод должен быть закреплен очень прочно

…и должен быть размещен напротив фототранзистора на плате.

Наш проект POV почти готов!

Осталось залить прошивку и протестировать

Назначение двигателя aрдуино и принцип работы

PWM или широтно-импульсная модуляция – это метод, позволяющий нам скорректировать среднее значение напряжения, которое поступает на электронное устройство, путем быстрого включения и выключения питания. Среднее напряжение зависит от рабочего цикла или количества времени, в течение которого сигнал включен, в зависимости от времени, в течение которого сигнал выключен за один промежуток времени.

Поэтому, в зависимости от размера прибора, мы можем просто подключить выход PWM Arduino к базе транзистора или к затвору MOSFET и управлять скоростью двигателя, контролируя выход PWM. Сигнал PWM с низким уровнем мощности Arduino включает и выключает затвор на MOSFET, через который приводится прибор высокой мощности. Ардуино GND и источник питания двигателя GND должны быть соединены вместе.

Необходимые инструменты и материалы

Для проекта понадобится простая схема управления, чтобы включить и выключить прибор.

Список необходимых инструментов и материалов для конструирования:

  1. Arduino Uno.
  2. Макет.
  3. Транзистор.
  4. Двигатель постоянного тока.
  5. Диод.
  6. Резистор 2,2 кОм.
  7. Переходные провода.

Для питания прибора подается 5V через него, а затем на землю. Это напряжение вращает устройства, но пользователь контролирует его. Чтобы передать Arduino управление мощностью прибора и, следовательно, вращение, устанавливается транзистор сразу после мотора.

О микросхеме 74ls373

Микросхема 74LS373 (отечественный аналог 555ИР22) представляет собой регистр-защелку с тремя состояниями выходов, содержащая в себе 8 D-триггеров. Даташит PDF.

Данную микросхему я использовал в качестве LED-драйвера. Выхода м/с включают или выключают соответствующие светодиоды. Каждая м/с имеет два входа управления: LE (Latch Enable) и OE (Output Enable). Ниже, я кратко опишу как применять эти входы в нашем проекте.

Output Enable (OE) – подключает/отключает выхода микросхемы. Вход инверсный. Если на входе 1, то выхода имеет состояние высокого сопротивления, если на входе 0, то данные передаются от входа к выходу (см. таблицу истинности в даташите).

Latch Enable (LE) – вход, в зависимости от состоянии которого м/с будет сохранять текущее состояние выходов, либо устанавливать новое состояние выходов, в зависимости от данных на входе. Если вход LE активен (логическая 1 на входе), то данные свободно передаются от входа к выходу. Если на входе 0, то данные не передаются, а выходное состояние зависит от предыдущего значения входов.

Обзор

В последнее время в радиолюбительских кругах набирает популярность такое направление, как робототехника. Платформа Arduino позволяет присоединиться к этому увлекательному процессу даже начинающих разработчиков, снижая порог вхождения в тему до приемлемого минимума.

Чтобы привести в движение шасси робота, разработчики, как правило, применяют моторы-редукторы. Они способны при небольших размерах обеспечивать достаточную силу тяги для реализации уверенного движения. Среди любительских легковесных роботов, фаворитом в этом направлении является мотор постоянного тока с редуктором 1:48, внешний вид которого показан на рисунке №1.

Рисунок №1 – мотор постоянного тока с редуктором 1:48 

Редуктор данного мотора содержит шестерни из прочного пластика. Тем не менее, для управления массивными конструкциями использовать его не рекомендуется. Силиконовый хомут не даёт двигателю выпасть из редукторного корпуса, но он может быть отстёгнут вручную. Такой подход позволяет легко заменить двигатель на аналогичный при выходе последнего из строя.

Данный класс моторов с редуктором выпускается 4-х типов, а именно:

Рисунок №2 наглядно демонстрирует разницу их конструктивного исполнения. Вне зависимости от внешнего вида, все моторы имеют одинаковые характеристики. 

Рисунок №2 – разновидности моторов с редуктором

Отслеживание нулевой позиции

Для того, чтобы наш POV-проект был более точен в отображении картинки, я использовал контроль нулевой точки при помощи ИК-светодиода и фототранзистора. После того, как точка 0° пройдена, изображение сбрасывается и начинается новый цикл.

На видео выше показан пример простой схемы с использованием ИК светодиода. Когда ИК светодиод включен, фототранзистор детектирует излучение и выключает красный светодиод. Такой же принцип и используется в нашем проекте для обнаружения нулевой позиции.

На картинке выше показано, как реализовано отслеживание нулевой точки в нашем POV-проекте. Всякий раз, когда пропеллер проходит над ИК-светодиодом, транзистор открывается соединяя 5В с коллектора к земле эмиттера. Микроконтроллер PIC обнаруживает данный переход состояния и т.о. определяет нулевую точку.

Пример использования


Опираясь на полученные в разделе №3 знания, можно собрать небольшой проект радиоуправляемой роботизированной платформы, которою будут приводить в движение два мотор-редуктора.

Так как управление платформой планируется вести по радиоканалу, необходимо иметь передатчик с пультом управления и приёмник, который будет интегрирован в робота. Наилучшим вариантом для осуществления задуманного будет использование пары радио-модулей NRF24L01. Условно, проект можно разделить на две части: создание пульта управления с передатчиком и создание шасси робота.

Создание пульта управления с передатчиком

Для передатчика актуальными командами будут следующие:


Первые 4 пункта можно выполнить при помощи тактовых кнопок, а регулировку скорости осуществлять потенциометром. Исходя из вышеизложенного, получаем схему радиопульта, показанную на рисунке №6.

Рисунок №6 – схема радиопульта для роботизированной платформы

Ниже приведён листинг программы с подробными комментариями, который будет обрабатывать команды пользователя, отсылая их в радиоэфир. В качестве дополнения, потребуется установить библиотеку
RF24. Следует заметить, что данный пульт управления довольно универсален и может быть использован в других проектах.


#include <SPI.h>  // Библиотека для работы с шиной SPI  
#include <nRF24L01.h> // Файл конфигурации для библиотеки RF24  
#include <RF24.h>// Библиотека для работы с модулем NRF24L01  
  
#define PIN_CE  10  // Номер пина, к которому подклюен вывод CE радиомодуля  
#define PIN_CSN 9 // Номер пина, к которому подклюен вывод CSN радиомодуля  
  
RF24 radio(PIN_CE, PIN_CSN);  // Создание объекта radio  
  
int data[5]; // Массив для передачи 5-ти команд в радиоэфир  
  
#define PIN_BUTTON_FORWARD  A0  // Номер пина, к которому подключена кнопка "ВПЕРЁД"  
#define PIN_BUTTON_BACK     A1  // Номер пина, к которому подключена кнопка "НАЗАД"  
#define PIN_BUTTON_RIGHT    A2  // Номер пина, к которому подключена кнопка "ВПРАВО"  
#define PIN_BUTTON_LEFT     A3  // Номер пина, к которому подключена кнопка "ВЛЕВО"  
#define PIN_SPEED           A7  // Номер пина, к которому подключен регулятор скорости  
  
void setup() {  
  // Настройка пинов кнопок и потенциометра на вход  
  pinMode(PIN_BUTTON_FORWARD, INPUT_PULLUP);   
  pinMode(PIN_BUTTON_BACK, INPUT_PULLUP);  
  pinMode(PIN_BUTTON_RIGHT, INPUT_PULLUP);   
  pinMode(PIN_BUTTON_LEFT, INPUT_PULLUP);  
  pinMode(PIN_SPEED, INPUT);  
  
  radio.begin(); // Инициализация радиомодуля NRF24L01  
  radio.setChannel(5); // Выбор канала для передачи данных 2,405 ГГц  
  radio.setDataRate(RF24_1MBPS); // Скорость обмена данными 1Мбит/сек  
  radio.setPALevel(RF24_PA_HIGH); // Установка максимальной мощности передатчика -6dBm  
  radio.openWritingPipe(0x7878787878LL); // Открытие трубы с уникальным ID  
}  
  
void loop() {  
  // Читаем состояние кнопок и потенциометра с записью данных в массив  
  data[0] = digitalRead(PIN_BUTTON_FORWARD);  
  data[1] = digitalRead(PIN_BUTTON_BACK);  
  data[2] = digitalRead(PIN_BUTTON_RIGHT);  
  data[3] = digitalRead(PIN_BUTTON_LEFT);  
  data[4] = analogRead(PIN_SPEED);  
  
  // Передача массива в радиоэфир  
  radio.write(data, sizeof(data));  
} 

В главном цикле программы постоянно опрашиваются состояния кнопок и потенциометра. Полученный результат заноситься в массив, после чего он отсылается по радиоканалу, где может быть принят и расшифрован приёмником. На этом подготовка пульта радиоуправления роботом завершена и можно переходить к следующему этапу.

Создание и программирование шасси робота

Для того, чтобы собрать роботизированную платформу нам понадобятся следующие компоненты:


На рисунке №7 показана электрическая схема будущего робота.

Рисунок №7 – схема робота

При монтаже электросхемы следует смотреть за тем, чтобы все выводы GND были соединены между собой. Также вывод GND модуля L298N желательно пустить отдельным проводом прямо к источнику питания, чтобы не пропускать большие токи через плату Arduino. Вместо 4-х пальчиковых батареек можно использовать два Li-Ion аккумулятора, соединённых последовательно. Такое соединение обеспечит достаточное напряжение для уверенного вращения мотор-редукторов.

Электролитический конденсатор, ёмкостью 100 мкФ в цепи питания радиомодуля обязателен. Без него NRF24L01 будет нестабильно работать или вообще не инициализируется.


Так как моторы будут зеркально развернуты по отношению друг к другу, подключать их необходимо также зеркально. Это хорошо видно на вышеприведенном рисунке, если провести ассоциацию цветов проводов с соответствующими клеммами на двигателе.

Ниже приведён скетч управления роботом с подробными комментариями.


#include <SPI.h>  // Библиотека для работы с шиной SPI  
#include <nRF24L01.h> // Файл конфигурации для библиотеки RF24  
#include <RF24.h> // Библиотека для работы с модулем NRF24L01  
  
#define PIN_CE  10  // Номер пина, к которому подклюен вывод CE радиомодуля  
#define PIN_CSN 9 // Номер пина, к которому подклюен вывод CSN радиомодуля  
  
RF24 radio(PIN_CE, PIN_CSN);  // Создание объекта radio  
  
int data[5]; // Массив для приёма 5-ти команд из радиоэфира  
  
#define PIN_IN1 8 // Вывод управления мотором правого колеса  
#define PIN_IN2 7 // Вывод управления мотором правого колеса  
#define PIN_ENA 6 // Вывод управления скоростью правого колеса  
#define PIN_IN3 4 // Вывод управления мотором левого колеса  
#define PIN_IN4 3 // Вывод управления мотором левого колеса  
#define PIN_ENB 5 // Вывод управления скоростью левого колеса  
  
void setup() {  
  radio.begin(); // Инициализация радиомодуля NRF24L01  
  radio.setChannel(5); // Выбор канала для передачи данных 2,405 ГГц  
  radio.setDataRate(RF24_1MBPS); // Скорость обмена данными 1Мбит/сек  
  radio.setPALevel(RF24_PA_HIGH); // Установка максимальной мощности передатчика -6dBm  
  radio.openWritingPipe(0x7878787878LL); // Открытие трубы с уникальным ID    
  radio.startListening(); // Активируем прослушивание открытой трубы  
  
  // Настройка пинов для управления моторами на выход  
  pinMode(PIN_IN1, OUTPUT); digitalWrite(PIN_IN1, LOW);  
  pinMode(PIN_IN2, OUTPUT); digitalWrite(PIN_IN2, LOW);  
  pinMode(PIN_IN3, OUTPUT); digitalWrite(PIN_IN3, LOW);  
  pinMode(PIN_IN4, OUTPUT); digitalWrite(PIN_IN4, LOW);  
  pinMode(PIN_ENA, OUTPUT); analogWrite(PIN_ENA, 0);  
  pinMode(PIN_ENB, OUTPUT); analogWrite(PIN_ENB, 0);  
}  
  
void loop() {  
  if(radio.available()) { // Если из радиоэфира поступили данные  
    radio.read(&data, sizeof(data)); // Занесение принятых данных в массив  
      
    // Установка скорости движения согласно принятым данным  
    int SPEED = map(data[4], 0, 1023, 0, 255); // Масштабируем полученное значение для ШИМ  
    analogWrite(PIN_ENA, SPEED); // Задаём скорость для правого колеса  
    analogWrite(PIN_ENB, SPEED); // Задаём скорость для левого колеса  
      
    // Обработка команды "ДВИЖЕНИЕ ВПЕРД"  
    if(data[0] == 0) {  
      digitalWrite(PIN_IN1, HIGH);  digitalWrite(PIN_IN2, LOW); // Крутим правое колесо вперёд  
      digitalWrite(PIN_IN3, HIGH);  digitalWrite(PIN_IN4, LOW); // Крутим левое колесо вперёд  
    }  
    // Обработка команды "ДВИЖЕНИЕ НАЗАД"  
    else if(data[1] == 0) {  
      digitalWrite(PIN_IN1, LOW);  digitalWrite(PIN_IN2, HIGH); // Крутим правое колесо назад  
      digitalWrite(PIN_IN3, LOW);  digitalWrite(PIN_IN4, HIGH); // Крутим левое колесо назад  
    }  
    // Обработка команды "ПОВОРОТ ВПРАВО"  
    else if(data[2] == 0) {  
      digitalWrite(PIN_IN1, LOW);  digitalWrite(PIN_IN2, LOW);  // Правое колесо стоит на месте  
      digitalWrite(PIN_IN3, HIGH);  digitalWrite(PIN_IN4, LOW); // Крутим левое колесо вперёд  
    }  
    // Обработка команды "ПОВОРОТ ВЛЕВО"  
    else if(data[2] == 0) {  
      digitalWrite(PIN_IN1, HIGH);  digitalWrite(PIN_IN2, LOW); // Крутим правое колесо вперёд  
      digitalWrite(PIN_IN3, LOW);  digitalWrite(PIN_IN4, LOW);  // Левое колесо стоит на месте  
    }  
    // Обработка команды "КОМАНДА ОСТАНОВКИ"  
    else {  
      digitalWrite(PIN_IN1, LOW);  digitalWrite(PIN_IN2, LOW);  // Правое колесо стоит на месте  
      digitalWrite(PIN_IN3, LOW);  digitalWrite(PIN_IN4, LOW);  // Левое колесо стоит на месте  
    }  
  }  
}

Когда готовы схемы и программное обеспечение, можно уделить время практической сборке узлов. Чтобы легче было ориентироваться, на рисунке №8 представлен один из вариантов крепления моторов и некоторых компонентов проекта. В реальности компонентов будет больше, но здесь важна сама идея, следуя которой можно создать своего уникального робота.

Рисунок №8 – один из вариантов крепления моторов

Принципиальная схема pov

Схема устройства не сложная и содержит три основных компонента: преобразователь 7805 в источнике питания, микроконтроллер PIC18F252 и регистр 74LS373 для управления светодиодами и ИК-диод и фототранзистор для отслеживания нулевой точки.

Вкратце об основных модулях устройства:

Источник питанияСтандартные 5В для питания микроконтроллера получаем через преобразователь LM7805 (корпус Т220). Выходной конденсатор служит для фильтрации бросков напряжения.

Управление светодиодамиВ PIC18F252 использована 8-бит шина данных с 2 линиями управления 74LS373, которые включают или выключают светодиоды, в зависимости от пришедших данных. При данном схемотехническом решении в один момент времени возможно управление только одной микросхемой 74LS373, поэтому светодиоды загораются не со 100% синхронностью.

Отслеживание нулевой точкиСинхронизации изображения осуществляется при помощи нулевой точки, для отслеживания которой используется ИК-диод и фототранзистор. Когда свет от диода попадает на транзистор, он открывается и 5В от коллектора идут к 0В эмиттера. Контроллер PIC обнаруживает спад сигнала и отрабатывает программу возврата к нулевой точке.

Программное обеспечение

Основные функции в программе это:

-High Priority RB0 Interrupt-Low Priority Timer0 Interrupt

High Priority RB0 Interrupt

void InterruptHandlerHigh()
 {
    if(INTCONbits.INT0IF) //check if INT0 interrupt flag is set
    {
      led_count = 325;
      WriteTimer0( 0xFFE0 );
      INTCONbits.TMR0IF = 0; //Clear TMR0 Flag 
      INTCONbits.INT0IF = 0;
    }
 INTCONbits.GIEH = 1; 
 }

Работа данной функции прерывания высокого приоритета заключается в том, чтобы сбросить timer0 и начать вывод на LED с самого начала. Когда POV-эффект формируется, его отображение происходит много раз за секунду. Переменная led_count используется как счетчик прерываний таймера, чтобы знать какой выходной набор выводить на LED для отображения. INT0 также сбрасывается.

Low Priority Timer0 Interrupt

void InterruptHandlerHigh()
 {
    if(INTCONbits.INT0IF) //check if INT0 interrupt flag is set
    {
      led_count = 325;
      WriteTimer0( 0xFFE0 );
      INTCONbits.TMR0IF = 0; //Clear TMR0 Flag 
      INTCONbits.INT0IF = 0;
    }
 INTCONbits.GIEH = 1; 
 }

По прерыванию от Timer0 уменьшается переменная led_count. Условие if/else используется для вывода данных часов/текста и т.п.

Програмное обеспечение

Программное обеспечение этого проекта написано на языке программирования Arduino. Arduino UNO программируется с использованием программного обеспечения Arduino IDE. ATmega328 на Arduino UNO поставляется с загрузчиком, который позволяет загружать в него новый код без использования внешнего аппаратного программатора. Он общается по протоколу STK500.

Вы также можете обойти загрузчик и запрограммировать микроконтроллер через заголовок внутрисхемного последовательного программирования (ICSP), но использование загрузчика позволяет быстро и легко программировать. Выберите правильную плату в меню «Инструменты → Доска» в Arduino IDE и запишите программу (эскиз) через стандартный USB-порт компьютера.

Рис. 7: Односторонняя печатная плата для самолета, управляемого РЧ (сторона передатчика)Рис. 8: Компонентная схема для печатной платы (сторона передатчика)Радиоуправляемый самолет на ардуино » Изобретения и самоделки

Добавьте библиотеку ‘SoftwareServo’ в папку библиотек (arduino-0022 library) IDE Arduino перед компиляцией эскиза.

Мы использовали модуль ESC из красного кирпича. Если вы используете какой-либо другой модуль ESC, вам может потребоваться соответственно изменить задержки в коде.

Расчет таймингов pov

Для того, чтобы в определенном положении POV отображать соответствующие данные, мы должны очень точно рассчитать все тайминги и задержки. К счастью, контроллер PIC содержит встроенный таймер, который мы и будем использовать.

Частота вращения вентилятора = 3800 об/минНайдем частоту вращения в секунду 3800/60 = 63.3333 об/сек.1 полный круг = 1/63.3333 = 0.015789 секунд1° вращения = 0.015789/360 = 0.000043859 секундЧастота выполнения инструкции 40 МГц/4 = 10 МГцИнструкций на 1° вращения = 43.86 мкс/10000000 = 438.6Получается 438 инструкций на каждый
1° вращения

Т.о. зная частоту вращения вентилятора, мы можем найти время для поворота на 1°. У нас получилось значение 43.86 мкс, это будет интервал вызова прерывания микроконтроллера, по которому будет обновляться состояние светодиодов. Для получения полной картинки, нам нужно будет выводить для каждого из 360 градусов свое состояние светодиодов.

Сборка двигателя

Транзистор – это электрический выключатель, который активирует цифровые контакты или пины микропроцессора Aрдуино. В этом примере он управляется выводом 9, таким же образом, как и светодиод, за исключением того, что транзистор включает и выключает схему приспособления.

Эта схема работает, но она по-прежнему создает обратный ток из-за импульса прибора, по мере его замедления, или из-за того, что двигатель повернется другой стороной. Если генерируется обратный ток, он перемещается с отрицательной стороны и пытается найти простой путь к земле.

Маршрут проходит через транзистор или платформу, описанную выше. Невозможно точно вычислить, что произойдет, поэтому необходимо обеспечить способ контроля избыточного тока.

Чтобы обеспечить полную безопасность устройства, устанавливается диод через прибор. Диод обращен к источнику напряжения, это означает, что напряжение подается через устройство. Если ток генерируется в противоположном направлении, он блокируется от поступления в микропроцессор.

Внимание! Если поместить диод неправильно, ток обходит двигатель и происходит короткое замыкание. Короткое замыкание пытается заземлить весь доступный ток и может сломать USB-порт или, по крайней мере, отобразить предупреждающее сообщение, информирующее вас о том, что USB-порт потребляет слишком много энергии.

Сборка и тестирование

Односторонняя печатная плата для схемы передатчика воздушного судна, контролируемого РЧ, показана на рис. 7, а компоновка ее компонентов — на рис. 8. Печатная плата для схемы приемника показана на рис. 9, а компоновка ее компонентов — на рис. 10.

Рис. 9: Односторонняя печатная плата для самолета, управляемого РЧ (сторона приемника)Рис. 10: Компонентная схема для печатной платы (сторона приемника)Радиоуправляемый самолет на ардуино » Изобретения и самоделки

Сторона передатчика

Контакт 12 платы 1 соединен с контактом данных 2 радиочастотного передатчика (TX1). Выводы от A0 до A3 платы 1 соединены с четырьмя 10k предустановками (от VR1 до VR4). VR1, VR2, VR3 и VR4 используются для управления BLDC (см. Рис. 4), рулем направления, элероном и лифтом соответственно.

Рис. 5: модуль ESC
Рис. 5: модуль ESC

Сторона получателя

Контакт 11 платы 2 соединен с контактами данных (6 и 7) радиочастотного приемника (RX1). Контакты 12, 10, 8 и 9 платы соединены с сигнальным контактом серводвигателей M1 (руль высоты), M2 (руль направления), M3 (элерон) и модуля ESC (см. Рис. 5) соответственно. Некоторые из основных частей тела типичного самолета RC показаны на рисунке 6.

Мотор BLDC используется в качестве пропеллерной системы самолета. Пропеллер или воздушный винт преобразуют вращательное движение от двигателя для обеспечения движущей силы. Это самая важная часть самолета. Пропеллер установлен на лицевой стороне самолета.

Руль используется для управления самолетом, который движется через воздушную среду, контролируя направление, в котором направлен самолет. Это плоская плоскость или лист материала, прикрепленный шарнирами к корме, хвосту или после конца корабля.

Элерон представляет собой шарнирную поверхность управления полетом, обычно прикрепленную к задней кромке каждого крыла самолета. Элероны используются попарно для управления самолетом по крену или движением вокруг продольной оси самолета.

Лифты — это поверхности управления полетом, обычно сзади самолета, которые контролируют продольную высоту самолета. Положение лифта контролирует, направлен ли нос самолета вверх или вниз и, таким образом, движется вверх или вниз. Лифты обычно крепятся на петлях к неподвижной или регулируемой задней поверхности.

Входной провод питания ESC соединен с аккумулятором 11,1 В. Три выходных провода ESC соединены с трехфазными входами двигателя BLDC (M4).

Тестирование pov

Мы подошли к заключительному этапу нашего проекта POV. Осталось запустить все и наслаждаться POV-эффектом. В клипе ниже, вы можете видеть все этапы конструирования и тестирование пропеллера-часов.

Интервалы в 1° легко успевает отрабатывать 40 МГц МК. Т.о. можно выводить как графическую информацию, так и текст, флэш памяти микроконтроллера я думаю хватит для любых паттернов

В заключении хотелось бы сказать, что это очень простой POV проект, который вы можете взять за основу для каких-либо своих улучшенных POV. А улучшать тут есть что: это может быть использование RGB-светодиодов для получения цветного изображения, или использование одного источника питания для всей системы и т.д. Данный пропеллер от 9В батарейки работает всего несколько часов

Установка программного обеспечения

Постройте схему, как показано на рисунке, и откройте новый эскиз Arduino. Выберите кнопку «Сохранить» и сохраните эскиз с запоминающимся именем, например myMotor; введите следующий код:

int motorPin = 9;
void setup (){
pinMode (motorPin, OUTPUT );
}
void loop () {
digitalWrite (motorPin, HIGH);
delay(1000); 
digitalWrite (motorPin, LOW );
delay(1000);
}

После того, как вы набрали эскиз, сохраните его и нажмите кнопку «Скомпилировать», чтобы проверить свой код. Arduino Environment проверяет ваш код на любые синтаксические ошибки (грамматику для вашего кода) и выделяет их в области сообщений. Наиболее распространенные ошибки включают опечатки, отсутствующие точки с запятой и чувствительность к регистру.

Если эскиз скомпилирован правильно, нажмите «Загрузить», чтобы загрузить эскиз на микропроцессор. Вы должны видеть, что ваш двигатель вращается в течение одной секунды и останавливается в течение одной секунды.

Если это не так, вам следует дважды проверить свою проводку:

  1. Убедитесь, что вы используете вывод № 9.
  2. Убедитесь, что ваш диод обращен правильно, при этом лента обращена к соединению 5v.
  3. Проверьте соединения на макете. Если провода или компоненты не подключены с использованием правильных строк в макете, они не будут работать.

Цели и задачи проекта

Целью данного проекта является создание часов-пропеллера, использующих один цвет, с использованием POV-эффекта для создания оптической иллюзии. Устройство должно отображать изображение (точнее его часть в определенной точке) по всей окружности от 0° до 360° с точностью 1°. ИК-передатчик в паре с ИК-приемником, образуют нулевую точку для отслеживания местоположения пропеллера.

В нашем POV-девайсе используется два источника питания: один находится на плате пропеллера, второй управляет моторчиком, который вращает пропеллер. Принцип работы POV будет следующий: старт с нулевой точки, затем каждый 1° светодиоды будут загораться в зависимости от местоположения пропеллера в круге 360°.

Оцените статью
Радиокоптер.ру
Добавить комментарий