Управление ардуино с компьютера через usb
Монитор порта Ардуино – это утилита, встроенная в среду программирования Arduino IDE и служит она для связи компьютера с контроллером. С помощью монитора последовательного порта производится отладка прошивки микроконтроллера, получение информации о работе программы и отправка команд к микроконтроллеру по USB. Рассмотрим, как работать с утилитой: выбор скорости обмена информацией, команды в скетче для вывода текста и переменных на Serial Monitor Arduino IDE.
Пример работы
В качестве примера повторим первый эксперимент «Маячок» из набора Матрёшка. На плате уже есть встроенный пользовательский светодиод L , подключенный к 13 пину микроконтроллера.
После загрузки программы встроенный светодиод L начнёт мигать раз в секунду.
Это значит, всё получилось, и можно смело переходить к другим экспериментам на Ардуино.
Микроконтроллер ATmega328P
32 КБ Flash-памяти, из которых 0,5 КБ используются загрузчиком, который позволяет прошивать Uno с обычного компьютера через USB. Flash-память постоянна и её предназначение — хранение программ и сопутствующих статичных ресурсов.
2 КБ RAM-памяти, которые предназначены для хранения временных данных, например переменных программы. По сути, это оперативная память платформы. RAM-память энергозависимая, при выключении питания все данные сотрутся.
1 КБ энергонезависимой EEPROM-памяти для долговременного хранения данных, которые не стираются при выключении контроллера. По своему назначению это аналог жёсткого диска для Uno.
Пины питания
5V: Выходной пин от стабилизатора напряжения с выходом 5 вольт и максимальным током 1 А. Регулятор обеспечивает питание микроконтроллера и другой обвязки платы.
IOREF: Вывод предоставляет платам расширения информацию о рабочем напряжении микроконтроллера. В нашем случае рабочее напряжение платформы 5 вольт.
AREF: Пин для подключения внешнего опорного напряжения АЦП относительно которого происходят аналоговые измерения при использовании функции analogReference() с параметром «EXTERNAL».
ICSP-разъём ATmega16U2
ICSP-разъём предназначен для программирования микроконтроллера ATmega16U2. А подробности распиновки читайте в соответствующем разделе.
Прием и отправка текста на монитор порта
Для этого занятия потребуется:
Скетч. Взаимодействие Ардуино и компьютера
Пояснения к коду:
- функция Serial.available() проверяет поступление команд с компьютера;
- функция Serial.read() читает данные, поступившие в Serial monitor.
- в условном операторе if (val == '1') стоит знак двойное равенство «соответствие», а в скобках необходимо использовать одинарные кавычки.
Набор функций Serial служит для связи устройства Ардуино с ПК или другими устройствами, поддерживающими последовательный интерфейс обмена данными. Все платы Arduino имеют хотя бы один последовательный порт (UART). Для обмена данными Serial используют цифровые порты ввод/вывода 0 (RX) и 1 (TX) , а также USB порт. Важно учитывать, что если вы используете функции Serial, то нельзя одновременно с этим использовать пины 0 и 1 для других целей.
Среда разработки Arduino IDE имеет встроенный монитор порта. Для начала обмена данными необходимо запустить монитор нажатием кнопки « Монитор порта » и выставить ту же скорость связи, с которой вызвана функция begin().
Основные функции Serial
- begin()
- end()
- available()
- read()
- flush()
- print()
- println()
- write()
- peek()
В нашем примере мы рассмотрим только часть функция Serial.
Serial.write() – записывает в порт данные в двоичном виде.
Serial.print() - может иметь много значений, но все они служат для вывода информации в удобной для человека форме. Например, если информация, указанная как параметр для передачи, выделена кавычками – терминальная программа выведет ее без изменения. Если вы хотите вывести какое-либо значение в определенной системе исчисления, то необходимо добавить служебное слово: BIN-двоичная, OCT – восьмеричная, DEC – десятичная, HEX – шестнадцатеричная. Например: Serial.print(25,HEX).
Serial.println() делает то же, что и Serial.print(), но еще переводит строку после вывода информации.
SerialEvent() Автоматически вызывается при поступлении новых данных.
Serial.begin() Инициирует последовательное соединение и задает скорость передачи данных вбит/c (бод). Для обмена данными с компьютером используйте следующие значения: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200.
Первое что мы с вами сделаем это будем управлять встроенным светодиодом на плату Arduino который подключен к 13 пину.
В монитор порта ни какой информации не возвращается. Также можно вывести в монитор порта информацию полученную от Arduino.
Данный инструмент помогает при отладки программы . В монитор порта модно вывести состояние оборудования, на коком этапе выводит ошибку и пр.
Рассмотренный в статье Arduino. Управление сервоприводом, на примере SG90 скетч. По мне не очень интересен, так как не даёт полного представления о том, для чего использовать сервопривод. А серво привод это не просто туда сюда, это точные сильные движения. За одно мы рассмотрим, как взаимодействовать с платой Arduino через USB.
Рассмотрим следующий скетч:
Этот скетч будет выставлять позицию сервопривода на позицию, переданную с компьютера на плату.
Рассмотрим данный скетч:
Нам так же понадобится библиотека Servo.h
Мы объявляем так же переменные:
С объектом Servo myservo. И переменная pos в которую мы будем записывать позицию, на которую надо установить сервопривод.
Так же нам понадобится переменная
Сюда мы будем заносить данные поступающие с порта USB на плату.
Мы так же задаём, что общаться с серво приводом мы будем через 9 ножку (myservo.attach(9);)
Все действия с портом USB проходят через объект Serial. Функция объекта Serial begin() выставляет скорость передачи данных по порту usb. в нашем случае begin(9600) означает, что скорость передачи данных с портом USB будет 9600 бод(бит/c).
Дальше начинается самое интересное, блок loop:
Конструкция if(если выполняется условие). В нашем случае Serial.available() возвращает кол-во байт доступных для чтения. соответственно если их больше нуля, выполняем блок кода внутри if.
Раз у нас есть данные для чтения начнём их читать, Serial.read() — считываем 1 байт из буфера. После мы ожидаем цифровое значение для ввода позиции.. а следующие коды соответсвуют следующим цифрам на клавиатуре:
48=»0″; 49=»1″ ;50=»2″; 51=»3″; 52=»4″; 53=»5″; 54=»6″; 55=»7″; 56=»8″; 57=»9″
Откуда я взял эти значения? это просто расширенная кодировка ASCII — cp1251
соответственно если мы ожидаем только цифры и какое нибудь значение обозначающее окончание ввода, то можно из кода вводимого символа вычесть 48 и у нас будет цифровое значение.
Данное значение мы помещаем в переменную incomingByte.
То есть в переменной incomingByte будет находится либо цифра или число большее 10 или меньшее 0.
if (incomingByte>=0 and incomingByte <=9) <..>else
тоесть если incomingByte больше или равно 0 и меньше или равно 9 то это число. Рассмотрим что мы будем делать если во входящем байте закодирована цифра:
мы умножаем значение позиции pos на 10 и прибавляем знчение цифры. По сути прибавляем новое число с права. например если сейчас pos=1 и мы ввели 2 то pos=12.
Для наглядности выводим данные в переменной pos на USB порт. Для этого у объекта Serial есть функция print и println. print и println различаются тем, что по завершению вывода данных println посылает код перевода каретки на новую строку. Как то не понятно получилось…Раньше использовались два символа CR код 13 и LF код 10 .CR с кодом 13 возвращает каретку на начало строки, то есть переводит фокус ввода на начало строки. LF c кодом 10 переводит коретку на новую строку. Сейчас в основном принято при получении символа CR с кодом 13 переводить каретку на новую строку.
Рассмотрим нашу команду Serial.println(pos, DEC); в функции println у нас два параметра, первая это значение которое надо выводить, у нас там стоит переменная pos следовательно её значение и будет выводиться, вторая переменная у целых и вещественных чисел имеет разное значение. У целых чисел BYTE и BIN двоичный вывод, OCT восьмеричный вывод, DEC десятеричный вывод, HEX шестнадцатеричный вывод. У вещественных второй параметр числовой, который указывает сколько цифр после запятой выводить. В нашем случае pos целое число (тип int) и второй параметр DEC значить выводить данные мы будет в десятеричной системе исчисления.
Arduino Uno — флагманская платформа для разработки на языке программирования С++.
Uno выполнена на микроконтроллере ATmega328P с тактовой частотой 16 МГц. На плате предусмотрены 20 портов входа-выхода для подключения внешних устройств, например плат расширения или датчиков.
Порт USB Type-B
Разъём USB Type-B предназначен для прошивки и питания платформы Arduino. Для подключения к ПК понадобится кабель USB (A — B).
Шаг 1
Подключите плату к компьютеру по USB. Для коммуникации используйте кабель USB (A — B).
Видеообзор
Светодиодная индикация
Имя светодиода | Назначение |
---|---|
ON | Индикатор питания платформы. |
L | Пользовательский светодиод на 13 пине микроконтроллера. Используйте определение LED_BUILTIN для работы со светодиодом. При задании значения высокого уровня светодиод включается, при низком – выключается. |
RX и TX | Мигают при прошивке и обмене данными между Uno и компьютером. А также при использовании пинов 0 и 1 . |
Пример 2. Команды с переносом строки
Распиновка
Что-то пошло не так?
Элементы платы
Порты ввода/вывода
Пины общего назначения: 20 пинов: 0 – 19
Логический уровень единицы — 5 В, нуля — 0 В. К контактам подключены подтягивающие резисторы, которые по умолчанию выключены, но могут быть включены программно.
АЦП: 6 пинов: 14 – 19 / A0 – A5
Позволяет представить аналоговое напряжение в виде цифровом виде. Разрядность АЦП не меняется и установлена в 10 бит. Диапазон входного напряжения от 0 до 5 В, при подаче большего напряжения микроконтроллер может выйти из строя.
ШИМ: 6 пинов: 3 , 5 , 6 и 9 – 11
Позволяет выводить аналоговое напряжение в виде ШИМ-сигнала из цифровых значений. Разрядность ШИМ не меняется и установлена в 8 бит.
Serial: пины TX1/1 и RX1/0 . Контакты также соединены с соответствующими выводами сопроцессора ATmega16U2 для общения платы по USB. Во время прошивки и отладки программы через ПК, не используйте эти пины в своём проекте.
Управление Ардуино через компьютер
Функция Serial.available() получает количество байт доступных для чтения из последовательного порта. Это те байты которые отправлены с компьютера и записаны в буфер последовательного порта. Буфер Serial monitor Arduino может хранить максимум до 64 байт. Функция используется также при взаимодействии Bluetooth модуля к Ардуино и полезна при отладке устройства на этапе проектирования.
При тестировании и настройке различных устройств, управляемых через Bluetooth, например, роботом или Лодкой на Ардуино вам пригодится знание, как управлять светодиодом и сервомотором через компьютер. Поэтому рассмотрим сейчас простое управление сервоприводом через компьютер по USB кабелю. При этом через монитор можно отправлять не только цифры, но и буквы латинского алфавита.
Понижающий регулятор 5V
Понижающий линейный преобразователь NCP1117ST50T3G обеспечивает питание микроконтроллера и другой логики платы при подключении питания через разъём питания DC или пин Vin. Диапазон входного напряжения от 7 до 12 вольт. Выходное напряжение 5 В с максимальным выходным током 1 А.
Микроконтроллер ATmega16U2
Микроконтроллер ATmega328P не содержит USB интерфейса, поэтому для прошивки и коммуникации с ПК на плате присутствует дополнительный микроконтроллер ATmega16U2 с прошивкой USB-UART преобразователя. При подключении к ПК Arduino Uno определяется как виртуальный COM-порт.
Микроконтроллер ATmega328P общается с ПК через сопроцессор ATmega16U2 по интерфейсу UART используя сигналы RX и TX , которые параллельно выведены на контакты 0 и 1 платы Uno. Во время прошивки и отладки программы, не используйте эти пины в своём проекте.
Кнопка сброса
Кнопка предназначена для ручного сброса прошивки — аналог кнопки RESET обычного компьютера.
Как включить Serial Monitor Arduino
Утилита состоит из окна, разбитого на три части. В верхней части находится поле ввода, где можно с компьютера отправлять данные в последовательный порт. В центре отображаются данные, полученные из последовательного порта. В нижней части окна — меню настроек. Монитор порта Arduino может работать с одним последовательным портом, чтобы не было ошибки при загрузке скетча и открытии Serial Monitor, необходимо выбрать COM порт на котором определилась плата Arduino UNO.
Для открытия утилиты необходимо нажать на иконку в верхнем правом углу Arduino IDE, использовать комбинацию клавиш Ctrl+Shift+M или выбрать в панели меню: Сервис -> Монитор порта. По умолчанию в Serial Monitor для Ардуино установлена скорость передачи данных 9600 бит в секунду, поэтому во многих скетчах используется такая скорость. Если скорость передачи данных в скетче и в настройках монитора порта будут разные, то вся информация будет отображаться в виде иероглифов.
Подключение и настройка
Пример 1. Команды для вывода текста
ICSP-разъём ATmega328P
ICSP-разъём выполняет две полезные функции:
Используется для передачи сигнальных пинов интерфейса SPI при подключении Arduino Shield’ов или других плат расширения. Линии ICSP-разъёма также продублированы на цифровых пинах SS/10 , MOSI/11 , MISO/12 и SCK/13 .
Предназначен для загрузки прошивки в микроконтроллер ATmega328P через внешний программатор. Одна из таких прошивок — Bootloader для Arduino Uno, который позволяет прошивать платформу по USB.
Как управлять Ардуино с клавиатуры
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- светодиод и резистор 220 Ом;
- сервопривод;
- провода «папа-папа» и «папа-мама».
Остальные исполнительные устройства для Arduino UNO вы можете взять на свое усмотрение и самостоятельно попробовать управлять ими через компьютер с помощью USB кабеля. Соберите на макетной плате схему с одним светодиодом из первого занятия Что такое Ардуино и как им пользоваться, а после сборки схемы со светодиодом загрузите следующий скетч в микроконтроллер.
Пример 3. Вывод переменных на монитор порта
Шаг 2
Установите и настройте интегрированную среду разработки Arduino IDE.
Пример 4. Команды для табуляции и переноса строк
Часто в скетчах требуется отключить Serial Monitor или очистить буфер обмена последовательного порта, для этого используется команда Serial.end(); , чтобы запустить обмен информацией между Ардуино и компьютером снова выполняется команда Serial.begin(); , которую можно прописать в процедуре loop. Если у вас выводятся кракозябры и иероглифы, то проверьте скорость передачи данных, установленную в скетче, и в настройках утилиты (правый нижний угол).
Как подключить монитор порта Ардуино правильно, чтобы не выводились квадратики и иероглифы мы разобрались — это команда Serial.begin(9600); (скорость обмена данными по умолчанию). Чтобы отправлять данные в последовательный порт с компьютера и управлять Ардуино, используется команда Serial.read(); для приема данных и Serial.parseInt(); для чтения больших чисел. Использование данных команд на примере можно посмотреть здесь: Управление Ардуино с компьютера.
Как управлять Ардуино с компьютера через USB. Расскажем, как произвести включение светодиода и управлять сервомотором на Arduino с клавиатуры через функцию Serial.available() и Serial.read(). Данные функции проверяют, поступают ли какие-то команды на микроконтроллер по последовательному порту, а затем считывают поступающие команды, вводимые в Serial monitor с компьютера.
Понижающий регулятор 3V3
Понижающий линейный преобразователь LP2985-33DBVR обеспечивает напряжение на пине 3V3 . Регулятор принимает входное напряжение от линии 5 вольт и выдаёт напряжение 3,3 В с максимальным выходным током 150 мА.
Разъём питания DC
Коннектор DC Barrel Jack для подключения внешнего источника напряжения в диапазоне от 7 до 12 вольт.
Читайте также: