Главная страница
Навигация по странице:


  • Интегрированная среда разработки

  • 1.2 Программирование в среде Arduino IDE

  • Формирование требований к

  • 2.2 Разработка концепции программного обеспечения подвижной платформы с манипулятором

  • 2.3 Разработка программного обеспечения для подвижной платформы с манипулятором

  • Диплом. Описание программного обеспечения 3 1 Интегрированная среда разработки 3


    Скачать 0.93 Mb.
    НазваниеОписание программного обеспечения 3 1 Интегрированная среда разработки 3
    Дата12.03.2023
    Размер0.93 Mb.
    Формат файлаdocx
    Имя файлаДиплом.docx
    ТипДокументы
    #983815

    Оглавление

    Введение 2

    Глава 1. Описание программного обеспечения 3

    1.1 Интегрированная среда разработки 3

    1.2 Программирование в среде Arduino IDE 8

    1.3 Управление модулями 12

    16

    Глава 2 Разработка программного обеспечения системы для управления подвижной платформы с манипулятором 21

    2.1 Формирование требований к программному обеспечению подвижной платформы с манипулятором 21

    2.3 Разработка программного обеспечения для подвижной платформы с манипулятором 24

    Заключение 37

    Список литературы 38

    Приложение 1 39



    Введение


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

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

    Arduino IDE — интегрированная среда разработки разработанная на Си и C ++. реда разработки Arduino состоит из встроенного текстового редактора программного кода, области сообщений, окна вывода текста(консоли), панели инструментов с кнопками часто используемых команд и нескольких меню.

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

    Для достижения поставленной цели необходимо решить следующие задачи:

    1. Сформировать требования к программному обеспечению подвижной платформы с манипулятором

    2. Разработать концепцию программного обеспечения подвижной платформы с манипулятором

    3. Разработать программное обеспечения подвижной платформы с манипулятором

    Глава 1. Описание программного обеспечения

    1.1 Интегрированная среда разработки


    Интегрированная среда разработки, ИСР (англ. IDE, Integrated Development Environment или Integrated Debugging Environment) — система программных средств, используемая программистами для разработки программного обеспечения (ПО).

    • Обычно среда разработки включает в себя:

    • текстовый редактор;

    • компилятор и / или интерпретатор;

    • средства автоматизации сборки;

    • отладчик.

    Иногда содержит также средства для интеграции с системами управления версиями и разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Многие современные среды разработки также включают браузер классов, инспектор объектов и диаграмму иерархии классов — для использования при объектно-ориентированной разработке ПО. Хотя и существуют ИСР, предназначенные для нескольких языков программирования — такие, как Eclipse, NetBeans, Embarcadero RAD Studio, Qt Creator или Microsoft Visual Studio, но обычно ИСР предназначается для одного определённого языка программирования - как, например, Visual Basic, PureBasic, Delphi, Dev-C++.

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

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

    Обычно IDE ориентирована на определенный язык программирования, предоставляя набор функций, который наиболее близко соответствует парадигмам этого языка программирования. Однако, есть некоторые IDE с поддержкой нескольких языков, такие как Eclipse, ActiveState Komodo, последние версии NetBeans, Microsoft Visual Studio, WinDev и Xcode.

    IDE обычно представляет из себя единственную программу, в которой проводилась вся разработка. Она обычно содержит много функций для создания, изменения, компилирования, развертывания и отладки программного обеспечения. Цель среды разработки заключается в том, чтобы абстрагировать конфигурацию, необходимую, чтобы объединить утилиты командной строки в одном модуле, который позволит уменьшить время, чтобы изучить язык, и повысить производительность разработчика. Также считается, что трудная интеграция задач разработки может далее повысить производительность. Например, IDE позволяет проанализировать код и тем самым обеспечить мгновенную обратную связь и уведомить о синтаксических ошибках. В то время как большинство современных IDE являются графическими, они использовались еще до того, как появились системы управления окнами (которые реализованы в Microsoft Windows или X11 для *nix-систем). Они были основаны на тексте, используя функциональные клавиши или горячие клавиши, чтобы выполнить различные задачи (например, Turbo Pascal). Использование IDE для разработки программного обеспечения является прямой противоположностью способа, в котором используются несвязанные инструменты, такие как vi (текстовый редактор), GCC (компилятор), и т.п.

    Интегрированные среды разработки также часто поддерживают пометки в комментариях в исходном тексте программ, отмечающие места, требующие дальнейшего внимания или предполагающие внесение изменений, такие как TODO. В дальнейшем эти пометки могут выделяться редакторами (напр. vim, emacs, встроенный редактор Visual Studio) или использоваться для организации совместной работы с построением тегов и задач (например, в IntelliJ). Использование комментариев с TODO так же является стандартом оформления кода на Object Pascal, Delphi. Microsoft в руководстве по Visual Studio рекомендует использовать тег TODO (наравне с HACK, UNDONE) для следующих пометок:

    • добавление новых функций;

    • известных проблем, которые нужно устранить;

    • предполагаемых к реализации классов;

    • мест размещения кода обработчиков ошибок;

    • напоминаний о необходимости переработки участка кода.

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

    Строго говоря, интегрированные среды разработки не относятся к числу средств отладки. Отладка – лишь одно из свойств интегрированных сред, которые представляют собой основу любой визуальной среды разработки или RAD-среды.

    При традиционном подходе, начальный этап написания программы строится следующим образом:

    • Исходный текст набирается при помощи какого-либо текстового редактора;

    • По завершении набора, работа с текстовым редактором прекращается и запускается кросс компилятор;

    • Как правило, вновь написанная программа содержит синтаксические ошибки, и компилятор сообщает о них на консоль оператора;

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

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

    Интегрированные среды (оболочки) разработки (Integrated Development Environment, IDE) позволяют избежать большого объема однообразных действий и тем самым существенно повысить эффективность процесса разработки и отладки позволяют, то есть они являются RAD-средами различной степени автоматизации процесса программирования.

    Работа в интегрированной среде дает программисту:

    • Возможность использования встроенного многофайлового текстового редактора, специально ориентированного на работу с исходными текстами программ;

    • Иметь автоматическую диагностику выявленных при компиляции ошибок, когда исходный текст программы, доступный редактированию, выводится одновременно с диагностикой в многооконном режиме;

    • Возможность параллельной работы над несколькими проектами. Менеджер проектов позволяет использовать любой проект в качестве шаблона для вновь создаваемого проекта;

    • Минимум перекомпиляции. Ей подвергаются только редактировавшиеся модули;

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

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

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

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

    Arduino — это универсальный комплекс аппаратно-программных средств для построения различных систем. Arduino состоит из двух частей — программной и аппаратной. Программная часть состоит из оболочки Arduino IDE, разработанной на языках программирования C++ и C. Среда разработки Arduino IDE предназначена для создания, компиляции и загрузки программ на платы Arduino.[2]




    Рис 1.Среда разработки Arduino IDE

    1.2 Программирование в среде Arduino IDE


    Среда разработки Arduino IDE является довольно простой для использования — в ней используются языки C и C++. Состоит среда разработки из текстового редактора для написания кода, поля с сообщениями, панели инструментов для общих функций и меню. Языком, из которого взят синтаксис программ для Arduino, является C++.

    Синтаксис выглядит следующим образом:

    • Тела функций заключены в фигурные скобки. — Каждая команда заканчивается точкой с запятой;

    • Методы применяются через точку;

    • Вызов функции абсолютно всегда заканчивается скобками;

    • Десятичные дроби разделяются точками;

    • Имена переменных могут содержать латинские буквы, цифры и нижнее подчёркивание, но не могут начинаться с цифры.

    Рассмотрим синтаксис и структуру программного кода . Языком, из которого взят синтаксис программ для Arduino, является C++. Синтаксис выглядит следующим образом: — Тела функций заключены в фигурные скобки. — Каждая команда заканчивается точкой с запятой. — Методы применяются через точку. — Вызов функции абсолютно всегда заканчивается скобками. — Десятичные дроби разделяются точками. — Имена переменных могут содержать латинские буквы, цифры и нижнее подчёркивание, но не могут начинаться с цифры. После изучения синтаксиса следует перейти к структуре кода. При запуске среды Arduino IDE можно увидеть заготовку в виде двух обязательных функций setup и loop.[3]

    Процедуры void loop() и void setup().

    Данные циклы должны быть в каждом скетче и вызываться только один раз, даже если один из циклов не используется. Дело в том, что при запуске микроконтроллера Arduino, начинают работать встроенные микропрограммы, которые первым делом проверяют не началась загрузка новой программы с компьютера. Если пользователь не начал прошивку, то контроллер начинает выполнять ранее загруженный скетч. Оба цикла вызываются встроенной функцией main() из файла main.cpp. При этом функция void setup () вызывается один раз, а и void loop() вызывается в цикле for бесконечное количество раз. Когда мы подключаем плату Arduino к питанию, то внутри него начинается весьма бурная деятельность встроенных микропрограмм. Микроконтроллер сконфигурирован так, что при запуске системы управление получает программа-загрузчик. Первое, что делает загрузчик – проверяет в течение 1-2 секунд, не начнется ли от пользователя отправка новой программы. Если процесс перепрограммирования начат, то скетч загружается в память и управление отдается ему. Если новых программ нет, то загрузчик выполняет ранее сохраненную программу.

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

    Функция setup()

    Функция setup в Arduino IDE имеет следующую конструкцию:




    Рис.2.Внешнйи вид функции setupe()

    Фигурные скобки указывают, где начало и конец цикла, поэтому все команды должны располагаться между ними. Если случайно удалить или поставить лишнюю фигурную скобку, то при компиляции скетча будет выходить ошибка. Процедура void setup вызывается один раз и ее используют для назначения режима работы пинов или команд, которые необходимо выполнить только в момент загрузки программы.7

    Чаще всего внутри void setup указываются следующие инструкции:

    • pinMode с указанием номера и типа пина. Это инструкция определяет режим работы пинов Arduino;

    • Serial.begin с указанием скорости (чаще всего, 9600). Эта инструкция инициализирует работы с последовательным портом на указанной скорости;

    • Инструкции подключения и инициализации различных объектов библиотек Arduino. Например, servo.atach(6) укажет библиотеке, что сервопривод мы подключили к 9 пину, и все последующие действия код библиотеки будет совершать именно с этим портом;

    • Инициализацию глобальных переменных, если мы по каким-то причинам не можем сделать это при определении переменных в глобальной области видимости;

    • Выполнение других настроек и начальных значений для переменных и объектов.

    Функция void loop()

    Функция loop это то место, куда мы должны поместить команды, которые будут выполняться все время, пока включена плата Arduino. Начав выполнение с первой команды, микроконтроллер дойдет до конца и сразу же перепрыгнет в начало, чтобы повторить ту же последовательность. И так бесконечное число раз (до тех пор, пока на плату будет подан электричество). Наиболее уместный перевод английского слова loop в даном случае – это цикл (петля).[5]



    Рис.3. Внешнйи вид функции loop()

    1.3 Управление модулями


    Управление сервоприводом

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

    Сигнал сервомоторы получают в виде прямоугольной волны, подобная PWM (англ. - pulse-width modulation, широтно-импульсная модуляция). Каждый цикл в сигнале длится 20 миллисекунд, и большая часть времени в значении LOW. В начале каждого цикла значение сигнала становится HIGH на время от 1 до 2 миллисекунд.

    При 1 миллисекунде она составляет 0 градусов, а при 2 миллисекундах - 180 градусов, а в промежутке значение от 0 до 180. Это очень хороший и надежный метод. Сервомотор имеет много встроенных деталей: двигатель, цепь обратной связи и, самое главное, драйвер мотора. Ему просто нужно дополнительно питание, земля и один контрольный пин.[6]

    Широтно-импульсная модуляция

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

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

    Рис.4.Широтно-импульсная модуляция

    На рисунке 4 видно, что для сигнала со скважностью 25% значение HIGH действует в течение четверти периода, а остальные 75% времени установлено значение LOW. Частота прямоугольной последовательности импульсов в случае Arduino составляет приблизительно 490 Гц. Другими словами, уровень сигнала меняется от высокого (5 В) к низкому (0 В) приблизительно 490 раз каждую секунду. Чтобы использовать возможности шим, рассмотрим новую функцию analogWrite().

    Функция analogWrite() принимает два аргумента: номер пина для вывода и 8 разрядное число от 0 до 255, которое будет выводиться на контакте.

    В стандартной библиотеке ардуино ide уже есть программа для демонстрации работы шим. Давайте загрузим ее и посмотрим как это работает.

    Скважность — это отношение периода повторения импульсов к длительности импульса. Чтобы лучше это понять рассмотрим графики.

    ШИМ представляет собой изменение скважности прямоугольной последовательности импульсов. Скважность можно трактовать как процент времени, когда прямоугольный импульс имеет уровень HIGH, ко всему периоду повторения. Скважность 50% означает, что половину периода сигнал имеет высокий уровень, а половину — низкий. Функция analogWrite() устанавливает скважность последовательности прямоугольных импульсов в зависимости от значения, передаваемого ей.[7]
    Управление моторами с помощь L293D Motor Shield

    Как известно, плата ардуино имеет существенные ограничения по силе тока присоединенной к ней нагрузки. Для платы это 800 mA, а для каждого отдельного вывода – и того меньше, 40mA. Мы не можем подключить напрямую к Arduino Uno, Mega или Nano даже самый маленький двигатель постоянного тока. Любой из этих двигателей в момент запуска или остановки создаст пиковые броски тока, превышающие этот предел.

    Драйвер двигателя выполняет крайне важную роль в проектах ардуино, использующих двигатели постоянного тока или шаговые двигатели. C помощью микросхемы драйвера или готового шилда motor shield можно создавать мобильных роботов, автономные автомобили на ардуино и другие устройства с механическими модулями. Модуль используется для управления шаговыми двигателями с напряжением от 5 до 35 В. При помощи одной платы L298N можно управлять сразу двумя двигателями. Наибольшая нагрузка, которую обеспечивает микросхема, достигает 2 А на каждый двигатель. Если подключить двигатели параллельно, это значение можно увеличить до 4 А.[8]

    Инфракрасный приемник и пульт

    Инфракрасный приемник на Arduino способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты.

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

    Под действием инфракрасного излучения в фотодиоде, у которого между p и n областями создана дополнительная область из полупроводника (i-область), начинает течь ток. Сигнал поступает на усилитель и далее на полосовой фильтр, который настроен на фиксированную частоту: 30; 33; 36; 38; 40 и 56 килогерц и защищает приемник от помех.



    Рис.7. Принцип работы ИК приемника. Обработка сигнала от пульта ДУ

    1.4 Библиотеки

    Библиотека Servo.h

    Arduino библиотека Servo представляет собой набор функций для управления сервоприводами. Данная библиотека дает возможность управлять сразу двенадцатью сервоприводами с помощью большинства микроконтроллеров Arduino.

    Использование библиотеки Servo накладывает некоторые ограничения. На всех платах кроме Arduino Mega, при работе с данной библиотекой, пропадает возможность использовать цифровые пины 9 и 10 в режиме ШИМ. На плате Arduino Мега режим ШИМ становится не доступен на пинах 11 и 12, только при подключении более 12 сервоприводов.

    • attach() - указывает вывод к которому подключен сервопривод.


    Синтаксис servo.attach(pin, min, max);

    • pin — Обязательный параметр. Цифровой пин к которому подключен сигнальный провод сервопривода;

    • min — Необязательный параметр. Ширина импульса в микросекундах, соответствующая минимальному (угол 0 градусов) положению сервопривода. (по умолчанию 544);

    • max — Необязательный параметр. Ширина импульса в микросекундах, соответствующая максимальному (угол 180 градусов) положению сервопривода.


    Синтаксис servo.write(angle).

    • write() - Поворачивает сервопривод на заданный угол. Для сервоприводов постоянного вращения устанавливает скорость и направление вращения;

    • angle — Обязательный параметр. Устанавливает угол от 0 до 180 градусов. При использовании сервопривода постоянного вращения значение 90 используется для неподвижного состояния. Значение 0 для максимальной скорости кручения в одну сторону, а 180 для максимальной скорости кручения в другую сторону.

    Синтаксис servo.writeMicroseconds(ms).

    • writeMicroseconds() - Поворачивает сервопривод на угол заданный в микросекундах. С сервоприводами постоянного вращения работает по таком же принципу как и функция write();

    • ms — Обязательный параметр. Значение в микросекундах.[9]



    Рис.5.Пример кода управления сервоприводами с помощью библиотеки Servo.h

    Библиотека AFMotor.h

    Библиотека AFMotor.h представляет собой набор функций для управления моторами. Эта библиотека позволяет управлять сразу несколькими моторами. с помощью микроконтроллера Arduino.

    AF_DCMotor - указывает вывод к которому подключен мотор.

    Синтаксис AF_DCMotor motorname(pin);

    • pin — Обязательный параметр. Цифровой пин к которому подключен мотор;

    • setSpeed – задаёт скорость мотора.


    Синтаксис motorname.setSpeed(0-255);

    • (0-255) - Обязательный параметр. Устанавливает скорость от 0 до 100%

    run(FORWARD / BACKWARD / RELEASE) - задаёт движение мотора вперед или назад.

    Синтаксис motorname.run(FORWARD);

    • (FORWARD) - Обязательный параметр. Устанавливает движение мотора вперед;

    • (BACKWARD) - Обязательный параметр. Устанавливает движение мотора назад;

    • RELEASE - Обязательный параметр. Останавливает движение мотора.



    Рис.6. Пример кода управления мотор с помощью библиотеки AFMotor.h


    Библиотека IRremote.h

    Для работы с инфракрасными устройствами можно использовать библиотеку IRremote, которая позволяет упростить построение систем управления.

    • IRrecv irReciver(irPin); - указывает вывод к которому подключен ИК приемник.

    Синтаксис IRrecv irReciver(irPin);

    • (irPin) - Обязательный параметр. Цифровой пин к которому подключен ИК приемник.

    • irReciver.enableIRIn(); - запускает приём данных с ИК приемника.

    • decodeIR(); - расшифровывает данные которые пришли с ИК приемника.

    • irrecv.resume(); - принимает следующий сигнал на ИК приемнике.



    Рис.7. Пример кода управления ИК приемника с помощью библиотеки IRremote.h

    Глава 2 Разработка программного обеспечения системы для управления подвижной платформы с манипулятором

    2.1 Формирование требований к программному обеспечению подвижной платформы с манипулятором


    В данной дипломной работе объектом управления являются сервоприводы и двигатели постоянного тока. Сервоприводы предназначены для управления манипулятором, а моторов постоянного тока для управления движением подвижной платформы.

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

    1. Программного обеспечения должно быть написано на микроконтроллере Arduino.

    2. Управление манипуляторам и платформой должно осуществляется дистанционно.

    3. Платформа должна осуществлять движение вперёд, назад, поворачивать в лево и право.

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

    2.2 Разработка концепции программного обеспечения подвижной платформы с манипулятором

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

    Пример кода для управления сервоприводами. В этом примере используется библиотека Servo.h. Библиотека Servo.h позволяет осуществлять программное управление сервоприводами. Здесь два сервопривода поворачиваются в разное положение 0-180 градусов.



    Рис.8. Пример кода управления сервоприводам с использованием библиотеки Servo.h.

    Пример кода для управления ИК приёмника. В этом примере используется библиотека IRremote.h. Библиотеку IRremote.h позволяет упростить построение систем управления. В этой программе включается и выключается светодиод в зависимости от полученного сигнала.




    Рис.9. Пример кода управления светодиодом с использованием библиотеки IRremote.h.

    Пример кода для управления моторами постоянного тока с использованием драйвера L298N и библиотеки AFMotor.h. Мотора постоянного тока тяжело управлять напрямую с Arduino, поэтому чтобы упростить программирование используется драйвер L298N и библиотека AFMotor.h. В примере моторы постоянного тока совершают поворот вперед, потом останавливаются и делают поворот назад.



    Рис.10. Пример кода управления моторами постоянного тока с использованием библиотеки AFMotor.h.



    2.3 Разработка программного обеспечения для подвижной платформы с манипулятором


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

    Управление сервоприводами осуществляется в помощью библиотеки Servo.h. Данная библиотека дает возможность управлять сразу двенадцатью сервоприводами с помощью большинства микроконтроллеров Arduino. Этот код позволяет поворачивать сервопривод с 0 до 180 градусов с интервалом 1 секунда. Это позволяет проверить работу манипулятора и правильность работы сервоприводов и библиотеки Servo.h.




    Рис.11. Пример кода управления сервоприводам с использованием библиотеки Servo.h.

    Далее был написан код для ИК приемника с использование библиотеки IRremote.h, которая позволяет упростить построение систем управления.

    ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты.

    Код выводит значения с пульта управления и обрабатывать инфракрасный сигнала. Эти сигналы нужны для определения значений с конкретной кнопки пульта дистанционного управления. Чтобы управлять отдельным действием подвижной платформы и манипульятора.





    Рис.12. Пример кода для считывания и обрабатывать инфракрасный сигнала с пульта управления с использованием библиотеки IRremote.h.




    Рис.13. Пример сигнала с пульта дистанционного управления.

    Послитого как получили значения с пульта дистанционного управления, можем приступать к написанию кода для управления манипулятора.

    Где каждое зажатие кнопки поворачивает сервопривод на 5 градусов.

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




    Рис.14. Первая часть кода для управления сервоприводами с помощью пульта дистанционного управления и библиотек Servo.h и IRremote.h.





    Рис.15. Вторая часть кода для управления сервоприводами с помощью пульта дистанционного управления и библиотек Servo.h и IRremote.h.






    Рис.16. Третья часть кода для управления сервоприводами с помощью пульта дистанционного управления и библиотек Servo.h и IRremote.h.

    Разработка программного управления подвижной платформы

    Далее был написан код для моторов постоянного тока с использованием драйвера L293D и библиотеки AFMotor.h. Библиотека AFMotor.h представляет собой набор функций для управления моторами.

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

    Это необходима для проверки работы конструкции подвижной платформы и корректной работы драйвера L293D и библиотеки AFMotor.h.



    Рис.17. Пример кода для моторов постоянного тока с использованием драйвера L293D и библиотеки AFMotor.h.

    После того как убедились в корректной работы драйвера L293D и библиотеки AFMotor.h, объединяем код ИК приёмника и моторов постоянного тока.

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



    Рис.18. Первая часть кода для управление моторов постоянного тока с пульта дистанционного управления с использованием драйвера L293D и библиотек AFMotor.h, IRremote.h.



    Рис.19. Вторая часть кода для управление моторов постоянного тока с пульта дистанционного управления с использованием драйвера L293D и библиотек AFMotor.h, IRremote.h.


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



    Рис.20. Первая часть кода для управление моторов постоянного тока и манипулятора с пульта дистанционного управления с использованием драйвера L293D и библиотек AFMotor.h, Servo.h, IRremote.h.



    Рис.21. Вторая часть кода для управление моторов постоянного тока и манипулятора с пульта дистанционного управления с использованием драйвера L293D и библиотек AFMotor.h, Servo.h, IRremote.h.



    Рис.22. Третья часть кода для управление моторов постоянного тока и манипулятора с пульта дистанционного управления с использованием драйвера L293D и библиотек AFMotor.h, Servo.h, IRremote.h.



    Рис.23. Четвертая часть кода для управление моторов постоянного тока и манипулятора с пульта дистанционного управления с использованием драйвера L293D и библиотек AFMotor.h, Servo.h, IRremote.h.


    Заключение



    При выполнении выпускной квалификационной работы были решены следующие задачи:

    1) Были сформированы требования к разрабатываемому программному обеспечению для подвижной платформы с манипулятором такие как:

    • Программного обеспечения должно быть написано на микроконтроллере Arduino;

    • Управление манипуляторам и платформой должно осуществляется дистанционно;

    • Платформа должна осуществлять движение вперёд, назад, поворачивать в лево и право.

    2) Была разработана концепция программного обеспечения для подвижной платформы с манипулятором;

    3) Разработка программного обеспечения для подвижной платформы с манипулятором.


    Список литературы


    1. Интегрированные среды разработки программ [Электронный ресурс] // bourabai - Режим доступа: http://bourabai.ru/einf/ide.htm - (дата обращения: 28.05.2022).

    2. Емельянов, Г. В. Программирование микроконтроллеров Arduino / Г. В. Емельянов. — Текст : непосредственный // Молодой ученый. — 2021. — № 4 (346). — С. 6-8. — URL: https://moluch.ru/archive/346/77954/ (дата обращения: 28.05.2022).

    3. Функции void loop и void setup Ардуино [Электронный ресурс] // Роботехника18 - Режим доступа: https://роботехника18.рф/процедуры-ардуино/- (дата обращения: 28.05.2022).

    4. Функции arduino void loop () и void setup () [Электронный ресурс] // ArduinoMaster - Режим доступа: https://arduinomaster.ru/program/arduino-void-loop-i-void-setup/#_void_setup- (дата обращения: 30.05.2022).

    5. Используем сервопривод для Ардуино проектов [Электронный ресурс] // АрдуиноПлюс.ру - Режим доступа: https://arduinoplus.ru/arduino-servoprivod/#i-2 (дата обращения: 30.05.2022).

    6. ШИМ СИГНАЛ [Электронный ресурс] // Arcade PUB - Режим доступа: https://arcadepub.ru/2020/03/02/шим-широтно-импульсная-модуляция/ (дата обращения: 30.05.2022).

    7.Arduino библиотека Servo [Электронный ресурс] // All-arduino- Режим доступа: https://all-arduino.ru/biblioteki-arduino/arduino-biblioteka-servo/ (дата обращения: 30.05.2022).

    8.Как подключить ИК приемник к Ардуино [Электронный ресурс] // Роботехника18- Режим доступа: https://роботехника18.рф/ик-приемник-ардуино/ (дата обращения: 30.05.2022).

    9. Драйверы двигателя L298N, L293D и Arduino Motor Shield [Электронный ресурс] // ArduinoMaster- Режим доступа: https://arduinomaster.ru/datchiki-arduino/drajver-dvigatelya-i-motor-shield-arduino/ (дата обращения: 30.05.2022).

    Приложение 1


    //FF30CF - 1

    //FF18E7 - 2

    //FF7A85 - 3

    //FF10EF - 4

    //FF38C7 - 5

    //FF5AA5 - 6

    //FF42BD - 7

    //12495 - 1

    //6375 - 2

    //31365 - 3

    //4335 - 4

    //14535 - 5

    //23205 - 6

    //17085 - 7

    //19125 - 8

    //21165 - 9

    //8925 - <<

    //765 - >>

    //-8161 - "-"

    //-22441 - "+"

    //-28561 - EQ

    //25245 - CH

    //-23971 - CH-

    #include "IRremote.h"

    #include

    #include

    AF_DCMotor motor1(1); // подключаем мотор к клеммникам M1

    AF_DCMotor motor3(3); // подключаем мотор к клеммникам M2

    Servo servo1; // Создаем объект servo1

    Servo servo2; // Создаем объект servo2

    Servo servo3; // Создаем объект servo3

    Servo servo4; // Создаем объект servo4

    int receiver = 34; /порт к которому подключен ИК

    int r,f,g,val;//переменные неоходимые для коректнной работы

    IRrecv irrecv(receiver);

    decode_results results; //Переменная для сохранения полученного кода нажатой кнопки
    void translateIR()

    {

    Serial.println(r);

    Serial.println(f);

    }

    void setup() {

    motor1.setSpeed(255); // задаем максимальную скорость мотора

    motor1.run(RELEASE); // останавливаем мотор

    motor3.setSpeed(255); // задаем максимальную скорость мотора

    motor3.run(RELEASE); // останавливаем мотор
    Serial.begin(9600);//подключаем монитор порта

    Serial.println("IR Receiver Button Decode");

    irrecv.enableIRIn(); //Включение ИК в работу

    int position = servo1.read();

    //Serial.print("Текущее положение сервопривода: ");

    //Serial.println(position); // Отправляем значение угла на запись в последовательный порт

    servo1.attach(26); // Тут укажите порт с сервоприводом. верх-низ

    servo2.attach(28); // Тут укажите порт с сервоприводом. вперед-назад

    servo3.attach(30); // Тут укажите порт с сервоприводом. поворот

    servo4.attach(32); // Тут укажите порт с сервоприводом. схват

    }

    //переменные для ограниечения поворота сервоприводов

    void loop()

    {

    if(r>175)

    { r=175;}

    if(r<5)

    {r=5;}

    if(f>175)

    {f=175;}

    if(f<50)

    {f=50;}

    if(g>175)

    {g=175;}

    if(g<50)

    {g=50;}

    //перевод значений с пульта из шеснадцатиричной в десятичную

    if (irrecv.decode(&results)) {

    if (results.value != 0xFFFFFFFF){

    val = results.value;

    Serial.println(val);

    }

    if (val == 12495){ //это первая кнопка 1 серва верх-низ

    servo1.write(r+=5);

    Serial.println(r);

    }

    if (val == 6375){ //это вторая кнопка 1 серва верх-низ

    servo1.write(r-=5);

    Serial.println(r);

    }

    if (val == 4335){ //это четвертая кнопка 2 серва вперед-назад

    servo2.write(f+=5);

    Serial.println(f);

    }

    if (val == 14535){ //это пятая кнопка 2 серва вперед-назад

    servo2.write(f-=5);

    Serial.println(f);

    }

    if (val == 17085){ //это седьмая кнопка поворот

    servo3.write(r+=5);

    Serial.println(r);

    }

    if (val == 19125){ //это восьмая кнопка поворот

    servo3.write(r-=5);

    Serial.println(r);

    }

    if (val == -26521){ //это кнопка нуль кнопка

    servo4.write(g+=5);

    Serial.println(g);

    }

    if (val == 26775){ //это кнопка 100+ кнопка

    servo4.write(g-=5);

    Serial.println(g);

    }

    //-----------------------ДВИЖЕНИЕ ВПЕРЕД--------------------------

    if (val == -22441){ //это + кнопка ДВИЖЕНИЕ ВПЕРЕД

    motor1.run(FORWARD); // задаем движение вперед

    motor3.run(FORWARD); // задаем движение вперед

    motor1.setSpeed(255); // задаем скорость движения

    motor3.setSpeed(255); // задаем скорость движения

    delay (200);

    motor1.run(RELEASE); // останавливаем мотор M1

    motor3.run(RELEASE); // останавливаем мотор M2

    Serial.println(FORWARD);

    }

    //----------------------ДВИЖЕНИЕ НАЗАД---------------------------------

    if (val == -8161){ //это - кнопка ДВИЖЕНИЕ НАЗАД

    motor1.run(BACKWARD); // задаем движение вперед

    motor3.run(BACKWARD); // задаем движение вперед

    motor1.setSpeed(255); // задаем скорость движения

    motor3.setSpeed(255); // задаем скорость движения

    delay (200);

    motor1.run(RELEASE); // останавливаем мотор M1

    motor3.run(RELEASE); // останавливаем мотор M2

    Serial.println(BACKWARD);

    }

    //------------------------ПОВОРОТ НАПРАВО-------------------------------

    if (val == 765){ //это >> кнопка ПОВОРОТ НАПРАВО

    motor3.run(FORWARD); // задаем движение вперед

    motor3.setSpeed(255); // задаем скорость движения

    delay (500);

    motor3.run(RELEASE); // останавливаем мотор M2

    }

    //-----------------------ПОВОРОТ НАЛЕВО--------------------------------

    if (val == 8925){ //это << кнопка ПОВОРОТ НАЛЕВО

    motor1.run(FORWARD); // задаем движение вперед

    motor1.setSpeed(255); // задаем скорость движения

    delay (500);

    motor1.run(RELEASE); // останавливаем мотор M2

    }

    irrecv.resume(); //сброс значения с ИК

    delay(30);

    }

    }



    написать администратору сайта