Оглавление:

Плата сервопривода с Python-GUI и Arduino: 5 шагов
Плата сервопривода с Python-GUI и Arduino: 5 шагов

Видео: Плата сервопривода с Python-GUI и Arduino: 5 шагов

Видео: Плата сервопривода с Python-GUI и Arduino: 5 шагов
Видео: Управляем Arduino с компьютера. Python + PyQt5 2024, Ноябрь
Anonim
Плата сервопривода с графическим интерфейсом Python и Arduino
Плата сервопривода с графическим интерфейсом Python и Arduino

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

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

Он работает на удивление хорошо, даже с 6 сервоприводами, которые скачут из одного положения в другое в цикле.

Кроме того, это хороший проект, чтобы узнать о связи между Python-GUI и Arduino с помощью Serial.

Шаг 1. Что вам нужно…

Для этого проекта вам понадобится следующее:

Аппаратное обеспечение

  • Arduino nano с кабелем. Я использовал клон, и код Python фактически ожидает чип CH340 клона.
  • Макетная плата. 7x5 см достаточно
  • Некоторые 2, 54-миллиметровые разъемы и контакты
  • 1-6 сервоприводов
  • Электропитание сервоприводов (я использовал батарейный блок с 4 батареями)

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

  • Python 3:
  • USB-драйвер для чипов CH340: просто погуглите драйверы для драйверов CH340
  • IDE Arduino:

Шаг 2: пайка платы

Пайка платы
Пайка платы

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

  • 3-контактные ряды прикреплены к цифровым контактам 3, 5, 6, 9, 10 и 11 Arduino nano.
  • Красный провод подключен к 5-вольтовому контакту Arduino.
  • Черный провод подключен к контакту GND Arduino.
  • Пара контактов под 3-контактными рядами предназначена для подключения типичного источника питания RC-приемника, вы можете добавлять разъемы по своему усмотрению, например, винтовые клеммы, разъемы XT, JST или … или …

Лично мне нравятся строки женских заголовков для вставки Arduino, но это зависит от вас.

Обратите внимание, что закороченные женские разъемы представляют собой перемычку, которая позволяет вам питать сервопривод, используя источник 5 В от Arduino для целей тестирования. Если вы будете слишком сильно его напрягать, Arduino сбросит настройки и потеряет правильный темп. Их НЕОБХОДИМО снять перед подключением другого источника питания.

Шаг 3: настройка Arduino

Установите Arduino IDE и прошейте Arduino nano с прикрепленным скетчем.

Шаг 4: Настройка Python

Настройка Python
Настройка Python

Установите Python 3 после его загрузки. Убедитесь, что вы отметили опцию создания переменной "PATH".

Вам нужно установить еще два пакета с помощью pip. Для этого нажмите клавишу «Windows», введите «cmd» и нажмите «Enter». В командной строке введите следующие команды:

  • pip install серийный номер
  • piip установить pyserial
  • pip install tkinter

Как видите, мне нужны модули serial, а также pyserial, что, скорее всего, не самый эффективный вариант, поскольку pyserial должен заменить последовательный. Тем не менее это работает, и я только начинаю учиться;).

Откройте Python-Script в среде IDE и запустите его или запустите прямо с терминала.

В раскрывающемся меню вы можете выбрать один из двух режимов: «Вперед» и «Пинг-понг»:

  • Идти прямо: введите положение сервопривода в микросекундах в первый столбец и нажмите «Пуск», чтобы сервопривод переместился в указанное положение.
  • Пинг-понг: введите нижнюю и верхнюю границы во втором и третьем столбцах. Это нижнее и верхнее положение, между которыми сервопривод будет перемещаться вперед и назад. В столбце «Время пинг-понга» вы можете указать время в миллисекундах, в течение которого сервопривод будет ждать, когда он достигнет верхнего или нижнего положения. Нажмите «Пуск», и сервопривод начнет двигаться взад и вперед, нажмите «Стоп», и сервопривод остановится.

Шаг 5: Где происходит волшебство

И последнее, но не менее важное: я хочу указать на некоторые детали кода для тех, кто хочет немного наладить последовательную связь между Python и Arduino.

Что же происходит в программе Python?

Первым делом программа проверяет, что подключено к COM-портам в этой строке, и сохраняет в список:

self. COMPortsList = список (serial.tools.list_ports.comports ())

Затем он просматривает список до тех пор, пока не найдет печально известный чип CH340, сохраняет его, а затем устанавливает последовательное соединение после цикла for. Обратите внимание, что цикл for прерывается, как только будет обнаружен первый канал CH340.

for p в self. COMPortsList: if "CH340" in p [1]: # Ищем клон Arduino self. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)

Последовательное соединение устанавливается с COM-портом со скоростью 57600 бод.

А что делает код Arduino? Ну, так как у Arduino только один COM-порт, последовательное соединение - это только одна линия:

Serial.begin (57600);

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

Command = struct.pack ('> B', self. Place) # int-переменная "self. Place" превращается в байт

self. Ser.write (Command) # Запись байта в последовательный порт Command = int (self. ServoPos.get ()) // 10 # Чтение ввода из поля и включение int Command = struct.pack (' > B ', Command) # Превращение int в байт self. Ser.write (Command) # Запись байта в последовательный порт

Кроме того, анализ данных требует времени (например, интерпретация четырех байтов «1», «2», «3» и «0» как int 1230, а не как четыре разных символа), и лучше делать это не на Arduino.

На стороне Arduino отправляемая информация воспринимается следующим образом:

if (Serial.available ()> 1) {// Если доступны последовательные данные, то вводится цикл c = Serial.read (); // Первый байт (номер сервопривода) сохраняется в переменной Micros = Serial.read (); // Положение сервопривода сохраняется здесь Micros = Micros * 10; }

Рекомендуемые: