Связь между Arduino на большие расстояния с помощью модулей HC-12


В этом уроке Arduino мы узнаем, как использовать модуль беспроводной последовательной связи большого радиуса действия HC-12, который способен обеспечивать беспроводную связь на большие расстояния между несколькими платами Arduino на расстоянии до 1,8 км. Мы рассмотрим два основных примера, объясняющих, как подключить модуль HC-12 и установить базовую связь между двумя Arduino, а также дополнительный пример, где с помощью датчика акселерометра на первом Arduino мы управляем по беспроводной сети положением шагового двигателя на второй плате Ардуино.

Связь между Arduino на большие расстояния с помощью модулей HC-12

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

Также на нашем сайте мы рассматривали следующие способы беспроводной связи между платами Arduino:

Необходимые компоненты

  1. Плата Arduino Uno – 2 шт (купить на AliExpress).
  2. Модуль беспроводной связи HC-12 – 2 шт. (купить на AliExpress).
  3. Макетная плата.
  4. Соединительные провода.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Модуль беспроводной связи HC-12

Внешний вид модуля беспроводной связи HC-12

Сначала давайте подробнее рассмотрим модуль беспроводной связи HC-12. Вот его основные возможности:

  • Его беспроводной рабочий диапазон частот составляет от 433,4 МГц до 473,0 МГц.
  • Всего он имеет 100 каналов с шагом 400 кГц между каждым каналом.
  • Мощность передачи составляет от -1 дБм (0,79 мВт) до 20 дБм (100 мВт).
  • Чувствительность приема составляет от -117 дБм (0,019 пВт) до -100 дБм (10 пВт).

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

Значения чувствительности модуля беспроводной связи HC-12 в зависимости от скорости передачи данных

Модуль HC-12 имеет микроконтроллер, который фактически не требует программирования пользователем. Для настройки модуля мы просто используем AT-команды, которые можно отправлять с Arduino, ПК или любого другого микроконтроллера через последовательный порт. Для входа в режим AT-команд нам просто нужно установить вывод «Set» модуля на низкий логический уровень.

Подключение модуля HC-12 к плате Ардуино 

Теперь подключим модуль HC-12 к Arduino и сделаем первый пример. Принципиальная схема этого подключения показана на следующем рисунке.

Схема подключения модуля HC-12 к плате Ардуино 

Рабочее напряжение модуля от 3,2 В до 5,5 В и для более стабильной работы рекомендуется использовать развязывающий конденсатор и внешний источник питания. Однако я использовал USB-порт ПК в качестве источника питания для всех трех примеров в этом уроке, и у меня не возникло с этим никаких проблем.

Я подключил первый модуль к Arduino UNO, а второй модуль к Arduino MEGA, но, конечно, вы можете использовать любую плату, какую захотите.

Код Arduino для примера №1

Вот код Arduino для первого примера, базовой связи между двумя модулями с использованием последовательного монитора.

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

Структурная схема проекта для примера №1

В этом случае, как только мы подключим первый Arduino к компьютеру, нам нужно будет выбрать модель и COM-порт и загрузить код в Arduino. Затем мы подключаем второй Arduino, и нам нужно снова запустить Arduino IDE, чтобы иметь возможность выбрать другой COM-порт, к которому подключен наш второй Arduino, а затем загрузить тот же код.

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

Тестирование работы примера №1

Как работает код: Итак, как только мы введем что-то в последовательный монитор и нажмем кнопку Send («Отправить»), на первом Arduino цикл while с функцией Serial.available() станет истинным, и, используя функцию HC12.write(), мы отправим данные с последовательного монитора на модуль HC-12. Этот модуль будет передавать данные по беспроводной сети на второй модуль HC-12, поэтому на втором Arduino цикл while с функцией HC12.available() станет истинным, и с помощью функции Serial.write() данные будут отправлены на последовательный монитор.

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

Установка на контакте «Set» модуля HC-12 низкого уровня

Чтобы проверить, успешно ли мы вошли в режим AT-команд, в последовательном мониторе мы можем ввести «AT» и получить ответное сообщение «ОК». Всего существует 12 AT-команд, и они используются для изменения различных параметров, таких как скорость передачи данных, канала, мощности передачи и т. д. Например, если мы наберем «AT+B38400», скорость передачи данных модуля будет установлена ​​на 38400.

АТ-команды:

1. AT – Тестовая команда.

Пример: Отправьте «AT» модулю, и модуль вернет «ОК».

2. AT+Bxxxx – изменение скорости передачи данных последовательного порта.

Доступные скорости передачи данных: 1200 бит/с, 2400 бит/с, 4800 бит/с, 9600 бит/с, 19200 бит/с, 38400 бит/с, 57600 бит/с и 115200 бит/с. По умолчанию: 9600 бит/с.

Пример: отправьте модулю «AT+B38400», и модуль вернет «OK+B19200».

3. AT+Cxxxx – изменить канал беспроводной связи с 001 на 100.

По умолчанию: канал 001, рабочая частота 433,4 МГц. Каждый следующий канал на 400 кГц выше.

Пример: если мы хотим настроить модуль на канал 006, нам нужно отправить модулю команду «AT+C006», и модуль вернет «OK+C006». Новая рабочая частота составит 435,4 МГц.

Пример №2

Теперь давайте переместим второй пример. Здесь мы воспользуемся двумя кнопками для выбора разных каналов связи и увидим другой метод хранения входящих данных.

Тестирование работы примера с выбором каналов на модуле HC-12

Примечание. Контакты «Set» обоих модулей HC-12 подключены к контактам номер 6 двух плат Arduino, а две кнопки на первом Arduino — к контактам 4 и 3.

Первый код Arduino:

Второй код Arduino:

Описание работы кодов

Итак, сначала нам нужно задать используемые контакты и установить для вывода «Set» высокий логический уровень, чтобы модуль работал в нормальном, прозрачном режиме (transparent mode). С помощью первого цикла while мы сохраняем входящие данные в строковую переменную, чтобы потом с ними было удобнее работать.

Входящие данные всегда поступают по одному байту, поэтому, например, если мы отправим строку «Test123» со второго Arduino, этот цикл while выполнит 7 итераций. На каждой итерации, используя функцию HC12.read(), мы будем читать каждый входящий байт или символ и добавлять его в строковую переменную с именем «readBuffer».

Состояние буфера на каждой итерации при передаче строки «Test123»

Далее давайте посмотрим, как мы можем изменить канал связи с помощью первой кнопки. Поэтому, если мы нажмем первую кнопку, используя функцию HC12.print(), мы отправим строку «AT+C001» на модуль HC-12 или на второй Arduino.

Когда эта строка будет получена на втором Arduino, мы переведем модуль HC-12 в режим AT-команд, а затем запишем в него ту же строку «AT+C001», которая установит модуль на канал связи номер один.

Мы используем следующий цикл while для вывода ответного сообщения от модуля HC-12 о том, был ли канал успешно изменен.

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

В конце пользовательская функция checkATCommand() проверяет, является ли полученное сообщение AT-командой, проверяя, начинается ли строка с «AT». Если это так, модуль входит в режим AT-команд и выполняет команду.

Беспроводное управление шаговым двигателем с помощью акселерометра и модуля HC-12

Теперь давайте посмотрим на третий пример. Здесь мы контролируем положение шагового двигателя на второй плате Arduino, используя модуль акселерометра на первой плате Arduino.

Собранная конструкция проекта для примера №3

Необходимые компоненты

  1. Плата Arduino Uno – 2 шт (купить на AliExpress).
  2. Модуль беспроводной связи HC-12 – 2 шт. (купить на AliExpress).
  3. Драйвер шагового двигателя A4988 (купить на AliExpress).
  4. Шаговый двигатель NEMA 17 (купить на AliExpress).
  5. Плата GY-80 с акселерометром ADXL345 (купить на AliExpress).
  6. Макетная плата.
  7. Соединительные провода.

Схема для беспроводного управления шаговым двигателем с помощью акселерометра и модуля HC-12 представлена на следующем рисунке.

Схема для беспроводного управления шаговым двигателем с помощью акселерометра и модуля HC-12

У нас на сайте уже есть подробные руководства по подключению к плате Arduino акселерометра и шагового двигателя, поэтому в этом примере я объясню только часть кода для модуля HC-12.

Первая плата Arduino — код передатчика:

Вторая плата Arduino — код приемника:

Описание работы кодов

Итак, сначала мы определяем контакты и инициализируем модули в разделе настройки. Затем мы считываем значения осей X и Y акселерометра и сопоставляем их со значениями от 0 до 180 градусов. Значения, поступающие с акселерометра, иногда могут быть нестабильными или трясущимися, поэтому для сглаживания результата я использовал среднее значение ста показаний.

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

Здесь обратите внимание, что при отправке угла в модуль HC-12 я также отправляю символ «s» впереди и символ «e» после, что поможет мне при получении данных на второй плате Arduino.

На второй плате Arduino ждем, пока придет маркер начала «s», затем читаем значение угла до тех пор, пока не придет маркер конца «e». Таким образом мы уверены, что получим только значение угла.

Затем мы преобразуем значение в целое число и сопоставляем значение от 0 до 1600 шагов, что соответствует выбранному разрешению шестнадцати шагов в драйвере шагового двигателя A4988. Затем поворачиваем шаговый двигатель на текущий угол. Если вы не очень уверенно чувствуете себя в этих вопросах, то можете прочитать статью об управлении шаговым двигателем NEMA 17 с помощью Arduino и драйвера A4988, также более подробно можете узнать о принципах работы драйвера двигателя A4988.

Источник статьи

(Проголосуй первым!)
Загрузка...
313 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *