Беспроводная связь. Радиопередатчик и радиоприемник 433МГц подключение к Arduino

Подключение периферии

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

В первую очередь берем 2 платы Arduino и подключаем к ним приемник и передатчик, как показано на рисунке:

Подключение радиоприемника и радиопередатчика к Arduino

Перед описанием работы, нужно указать, что для полноценной работы, к модулям необходимо припаять антенну. Рекомендуемая длина антенны для прередатчикиков с частотой 433 МГц равна 17 см.

Приступим. Для управления передачей нам понадобится скачать и закинуть в папку с установленной IDEшкой библиотеку VirtualWire

Далее подключаем плату с передатчиком и заливаем следующий код:


Пример программного кода
#include <VirtualWire.h>

void setup(void)
{
  vw_set_ptt_inverted(true); // Необходимо для DR3100
  vw_setup(2000); // Устанавливаем скорость передачи (бит/с)
}

void loop(void)
{
  int number = 123;
  char symbol = 'c';

  String strMsg = "z ";
  strMsg += symbol;
  strMsg += " ";
  strMsg += number;
  strMsg += " ";

  char msg[255];

  strMsg.toCharArray(msg, 255);

  Serial.println(msg);

  vw_send((uint8_t *)msg, strlen(msg));
  vw_wait_tx(); // Ждем пока передача будет окончена
  delay(200);
}

Разберем этот код для полного понимания.

Во первых мы формируем строку strMsg. Используем тип String, т.к. с ним проще работоть (можно конкатенировать его с числами, используя оператор ‘+’).

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

Далее передадим символ ‘c’, который может означать выполнение какой-то команды и число 123, как параметр к этой команде. На практике удобно работать именно таким образом.

После этого преобразовываем тип String к стандартному массиву символов при помощи метода toCharArray и передаем его в команду vw_send.

Наш код будет отправлять строку ‘z c 123’.

Перейдем к коду приемника:

Пример программного кода

#include <VirtualWire.h>

void setup()
{
  Serial.begin(9600);
  vw_set_ptt_inverted(true); // Необходимо для DR3100
  vw_setup(2000); // Задаем скорость приема
  vw_rx_start(); // Начинаем мониторинг эфира
}

void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN]; // Буфер для сообщения
  uint8_t buflen = VW_MAX_MESSAGE_LEN; // Длина буфера

  if (vw_get_message(buf, &buflen)) // Если принято сообщение
  {
    // Начинаем разбор
    int i;
    // Если сообщение адресовано не нам, выходим
    if (buf[0] != 'z')
    {
      return; 
    }
    char command = buf[2]; // Команда находится на индексе 2

    // Числовой параметр начинается с индекса 4
    i = 4; 
    int number = 0;
    // Посколько передача идет посимвольно, то нужно преобразовать набор символов в число
    while (buf[i] != ' ')
    {
      number *= 10;
      number += buf[i] - '0';
      i++;
    }
    Serial.print(command);
    Serial.print(" ");
    Serial.println(number);
  }
}

Сообщение будет считано в буфер buf, который нужно разобрать.

В первую очередь проверяем наличие служебного символа ‘z’, затем считываем код команды и затем преобразовываем строковое представление параметра в число.

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

В данной статье рассмотрен простейший вариант общения. В идеале нужно задуматься о кодировании передаваемой информации, т.к. её будут получать не только ваши приемники.


 

P.S. Работая с данными модулями, мы наткнулись на один не приятный подводный камень, а именно конфликт, невозможность работы с библиотекой «servo.h».

Для решения этой проблемы необходимо использовать библиотеку ServoTimer2 единственным отличием которой от стандартной Servo.h является то, что в функцию write необходимо передавать количество микросекунд, подробнее о которых расписано в нашей статье о сервоприводах: Подключение сервоприводов к Arduino

 

По материалам  сайта: http://zelectro.com.ua

Метки: , . Закладка Постоянная ссылка.

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