Обмен данными между двумя Arduino при помощи программного UART

Как начать работу с Arduino Uno: полное руководство для начинающих

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

Почему так актуальна эта платформа? Как начать работу с ней? Как она может улучшить ваш стиль жизни? Все эти вопросы будут рассмотрены в данной статье. Для этого мы познакомимся с установкой среды Arduino IDE на ваш компьютер и загрузим в нее небольшую программу, реализующую мигание светодиода, который мы подключим к Arduino с использованием макетной платы.

Как это работает

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

Для начала взглянем на программу мастера, который получает команды по обычному последовательному порту с компьютера и отправляет подчиненному контроллеру. В начале кода мы подключаем библиотеку SoftwareSerial.h

Дальше нам нужно объявить объект нашей библиотеки. Это делается соответственно следующему синтаксису:

SoftwareSerial softSerial(8, 9); // RX, TX

При этом будет вызвана параллельная связь, в данном случае программная. Она будет использовать вывод 8 для чтения (RX) и вывод 9 для передачи (TX). Далее подробнее остановимся на том, какие именно выводы следует выбирать.

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

В коде подчиненного контроллера использована самая простая реализация управления светодиодом командами через последовательный порт с одной только разницей, что тут используются команды с программного порта. Меняется только синтаксис и вместо привычных функций Serial.read(), Serial.available() и так далее нужно писать softSerial.read() и softSerial.available().

Программный UART имеет некоторые важные ограничения и недостатки. Вот некоторые из них.

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

Программное обеспечение, используемое для программирования Arduino, представляет собой интегрированную среду разработки Arduino IDE. IDE представляет собой Java приложение, которое работает на множестве различных платформ, включая системы PC, Mac и Linux. Она разработана для начинающих, которые не знакомы с программированием. Она включает в себя редактор, компилятор и загрузчик. Также в IDE включены библиотеки кода для использования периферии, например, последовательных портов и различных типов дисплеев. Программы для Arduino называются «скетчами», и они написаны на языке, очень похожем на C или C++.

Большинство плат Arduino подключаются к компьютеру с помощью USB кабеля. Это соединение позволяет загружать скетчи на вашу плату Arduino, а также обеспечивает плату питанием.

usb кабель

USB кабель для Arduino

Программирование Ардуино

В среде Arduino IDE необходимо создать новый проект: Файл -> Новый
Затем сохранить его: Файл -> Сохранить как…
Затем можно написать программу для микроконтроллера.
Данная программа должна через строго определенное время выполнять аналого-цифровое преобразование (АЦП) и отправлять посылку в порт по определенному выше протоколу. Внимание! Использование обычной задержки delay не обеспечивает пригодной точности задания частоты дискретизации.

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

После этого нужно подключить макет к персональному компьютеру и не забыть выбрать правильный порт Инструменты -> Порт, а также используемую версию Ардуино: Инструменты -> Плата.

Если при загрузке не возникло ошибок, можно проверить выходные данные в мониторе порта среды Ардуино (выбрать частоту передачи 19200). Должна пойти одна строчка, состоящая из непонятных символов, включая буквы «я» (это стартовые биты). Значит микроконтроллер передает данные!

Память

Микроконтроллер ATmega328 располагает 32 Кбайт флэш памяти, из которых 0.5 Кбайт используется для хранения загрузчика, а также 2 Кбайт ОЗУ (SRAM) и 1 Кбайт EEPROM.(которая читается и записывается с помощью библиотеки EEPROM).

Смотрите также соответствие выводов Arduino и ATmega328. Распиновка для микроконтроллеров ATmega8, 168 и 328 идентична.

С использованием функций pinMode(), digitalWrite() и digitalRead() каждый из 14 цифровых выводов может работать в качестве входа или выхода. Уровень напряжения на выводах ограничен 5В. Рекомендуемый ток 20 мА. Максимальный ток, который может отдавать или потреблять один вывод, составляет 40 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отключенными) номиналом 20-50 кОм.

Помимо этого, некоторые выводы Arduino Uno могут выполнять дополнительные функции:

  • Последовательный интерфейс: выводы 0 (RX) и 1 (TX). Используются для получения (RX) и передачи (TX) данных по последовательному интерфейсу. Эти выводы соединены с соответствующими выводами микросхемы ATmega8U2, выполняющей роль преобразователя USB-UART.
  • Внешние прерывания: выводы 2 и 3. Могут служить источниками прерываний, возникающих при фронте, спаде или при низком уровне сигнала на этих выводах. Для получения дополнительной информации смотри функцию attachInterrupt().
  • ШИМ: выводы 3, 5, 6, 9, 10 и 11. С помощью функции analogWrite() могут выводить 8-битные аналоговые значения в виде ШИМ-сигнала.
  • Интерфейс SPI: выводы 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). С применением библиотеки SPI данные выводы могут осуществлять связь по интерфейсу SPI.
  • Светодиод: Встроенный светодиод, подсоединенный к выводу 13. При отправке значения HIGH светодиод включается, при отправке LOW — выключается.

TWI: вывод A4 или SDA и вывод A5 или SCL. С использованием библиотеки Wire данные выводы могут осуществлять связь по интерфейсу TWI.

В Arduino Uno есть 6 аналоговых входов (A0 — A5), каждый из которых может представить аналоговое напряжение в виде 10-битного числа (1024 различных значения). По умолчанию, измерение напряжения осуществляется относительно диапазона от 0 до 5 В. Тем не менее, верхнюю границу этого диапазона можно изменить, используя вывод AREF и функцию analogReference().

Помимо перечисленных на плате существует еще несколько выводов:

  • AREF. Опорное напряжение для аналоговых входов. Может задействоваться функцией analogReference().
  • Reset. Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера. Обычно этот вывод служит для функционирования кнопки сброса на платах расширения

Управление Ардуино через компьютер

Функция Serial.available() получает количество байт доступных для чтения из последовательного порта. Это те байты которые отправлены с компьютера и записаны в буфер последовательного порта. Буфер Serial monitor Arduino может хранить максимум до 64 байт. Функция используется также при взаимодействии Bluetooth модуля к Ардуино и полезна при отладке устройства на этапе проектирования.

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

Arduino Bluetooth Control

Сокращенное название — ABC. Управляет и контролирует основные возможности API. Используется в мониторинге контактов через Bluetooth. Работает в автономном режиме. Приобщение к работе производит строго из Ардуино.

  • Metrics – передает показатели о сбоях и изменениях. Те, свою очередь, приходят на телефон в виде сообщения об остановке работы. Это подобие функции, где встряхнув гаджет можно отправить данные.
  • Клавиши с указателями – служат для отправки информации.
  • Терминал – варьирует информацией с временными показателями по назначению.
  • Accelerometer – управление жестами. Смартфон превращается в механизм для регулирования машины.
  • Голос – создает речевые команды. Доступно голосовое общение с роботом.
  • Кнопки – функционируют 6 штук в горизонтальном положении. Используются для доставки информации на Arduino.

Управление проектами в дистанционном и удаленном виде стало частой необходимостью. ABC подходит для этих целей на 100%. UART (Serial) предназначается для беспроводного соединения Ардуино и PC. Данное подключение не нуждается в библиотеках и схемах.

Arduino Bluetooth Controller

Следующая программа в нашем списке – удачно названный Контроллер Arduino Bluetooth. Это приложение имеет большую значимость относительно триггеров на изменения в загруженных скетчах, и меньшую значимость для программирования Arduino. Контроллер Arduino по Bluetooth посылает данные на вашу плату по Bluetooth, что дает вам возможность послать серийные данные нажатием кнопки. Вам потребуется модуль Bluetooth для вашей платы, хотя модуль HC-06 широко используется и доступен всего лишь за $3.

Заслуживает упоминания тот факт, что программа загружается на английском языке, хотя на картинках Play Store указан итальянский язык!

Мы пропустили инструмент?

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

Как вы разговариваете со своей платой Arduino? Вы всегда используете компьютер? Есть ли хитрый способ поговорить с нашими досками, которые мы здесь пропустили? Дайте нам знать в разделе комментариев ниже !

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector