Мой первый проект на Ардуино!

Это был мой первый и последний (до того, как вмешались другие вещи) проект Arduino, который я начал в 2013 году. Моей целью было запустить базовую систему и установить элементарные связи с ПК. У меня есть опыт программирования микроконтроллеров Zilog Z8 для регистраторов данных, поэтому знакомство с процессором Atmel означало стряхнуть пыль с моих знаний об этих устройствах. К счастью, для программирования платы Arduino доступны библиотеки, поэтому мне не пришлось выполнять какие-либо низкоуровневые действия, как в случае с Z8.
Проект в общих чертах разделен на две части; скетч, работающий на Arduino, и приложение, работающее на ПК (терминал Leonardo). Скетч реализует простой интерпретатор команд для платы Arduino, в частности Леонардо, а приложение для ПК представляет собой терминальную программу, которая позволяет пользователям вводить команды, которые передаются через виртуальный последовательный порт USB на плату Arduino. Эти команды предписывают микроконтроллеру устанавливать состояния цифровых выходов, генерировать и изменять рабочий цикл ШИМ-сигнала, а также считывать состояние или значение цифровых и аналоговых входов.

Эскиз

Входящие данные через последовательный порт USB передаются обратно на удаленный терминал, а также на ЖК-дисплей 16 x 2, если он используется. Каждый символ добавляется в командный буфер. При получении кода CR содержимое буфера команд анализируется для извлечения команды и ее параметров. Затем команда выполняется. Команды транслируются в функции Arduino digitalRead, digitalWrite, AnalogRead, AnalogWrite, Tone и noTone. Эскиз можно использовать с приложением Leonardoterminal VB или любой терминальной программой. Синтаксис команд, понятных интерпретатору, следующий:

DIN pin или DIN pin PU
Чтение состояния на цифровом выводе, необязательный параметр PU указывает следует использовать плату, которая подтягивает резисторы. Значение, напечатанное на ЖК-дисплее или выведенное на последовательный порт, равно 0 LOW, 1 HIGH.

Состояние контакта DOUT
Вывод на цифровой контакт. состояние 1=ВЫСОКИЙ, 0=НИЗКИЙ

Контакт AIN
Считайте значение на указанном аналоговом контакте. Отображение на ЖК-дисплее и вывод на последовательный порт

Значение вывода AOUT
Реализует ШИМ на указанном выводе, диапазон значений 0–255. Частота ШИМ-сигнала составляет приблизительно 490 герц

Длительность шага вывода TONE
шаг в герцах, длительность в миллисекундах

NOTONE pin
Отключает звуковой сигнал на указанном контакте.

Терминал Леонардо

Приложение, работающее на ПК, было написано на Visual Basic 2008. Это приложение представляет собой простую терминальную программу, которую можно использовать для связи с платой Arduino или любым другим последовательным устройством. Данные вводятся в текстовое поле, а в соседнем текстовом поле отображаются полученные данные. Два текстовых поля позволяют отправлять строки данных при нажатии кнопок «отправить». Следующие функции в форме относятся к плате Arduino:

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

Цифровой вход монитора
Отображает «HIGH» или «LOW» в зависимости от состояния указанного контакта. Результаты обновляются каждую секунду

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

Команды, введенные в текстовое поле «Отправленные данные», преобразуются в функции Arduino digitalRead, digitalWrite, AnalogRead, AnalogWrite, Tone и noTone.
Однако данные можно записать в файл Excel. у вас должен быть установлен Excel, чтобы это работало. Я только реализовал регистрацию данных на выбранном аналоговом канале. Файлы можно добавлять или перезаписывать.
Программное обеспечение определяет подключение USB-кабеля и обновляет список доступных портов. Когда кабель отключен, список заполняется заново.

Улучшения

  • В коде есть много возможностей для улучшения. Вместо использования текстового протокола для запроса и установки состояний контактов данные можно отправлять и получать пакетами в двоичном формате. Вместо использования digitalRead, AnalogRead и других функций Arduino для получения/установки состояний выводов регистры можно было считывать напрямую, а результаты отправлять в виде блока данных. Преимущество текстового протокола, однако, заключается в том, что любую терминальную программу можно использовать для проверки/установки контактов без необходимости кодирования/декодирования данных.
  • Проверка ошибок не реализована. Контрольные суммы могут быть добавлены к отправленным и полученным командам/ответам для базовой проверки достоверности данных.
  • Приложение Leonardo Terminal получает и устанавливает только один контакт за раз. Будущие версии позволят контролировать весь спектр входов/выходов на плате. Так, например, пользователь может выбрать, является ли контакт входным или выходным, выходом PWM и должен ли он регистрироваться.

Требуемые детали

Соединения с макетной платой

Макет платы был составлен с помощью Fritzing.

Я использовал плату Uno вместо платы Leonardo при рисовании схемы во Fritzing, однако соединения контактов остались прежними.

5 вольт и земля от Leonardo питают две верхние направляющие макетной платы. Только 4 линии данных ЖК-дисплея должны быть подключены к Arduino. Потенциометр 10k используется для регулировки контрастности ЖК-дисплея.
В этом руководстве содержится дополнительная информация о подключении Arduino к дисплею 1602.

Терминал Леонардо в действии

Я переименовал Терминал Леонардо в Терминал Комдуино. Последняя версия позволяет настраивать режимы выводов и отображать статус выводов (высокий или низкий) или аналоговый уровень. Прошло 8 лет с тех пор, как я работал над этим приложением, и с тех пор многое произошло. Надеюсь, когда-нибудь я вернусь к программированию!