Подключение радиочастотного модуля 433 МГц к STM32F103C8 (Blue Pill)


Беспроводные технологии играют важную роль в жизни современного общества. К подобным технологиям можно отнести Bluetooth, WiFi, радиочастотные модули 433 МГц (433 MHz RF) и т.д. Каждая из этих технологий имеет свои преимущества и недостатки по скорости, дальности, стоимости и т.п.

В данной статье мы рассмотрим подключение радиочастотного модуля 433 МГц (RF Module 433Mhz) к плате STM32F103C8, также известной под названием STM32 Blue Pill ("синяя таблетка"). В передающей части нашего проекта передатчик будет подключен к плате STM32F103C8 (Blue Pill), а в приемной части проекта приемный радиочастотный модуль будет подключен к плате Arduino Uno.

Внешний вид подключения радиочастотного модуля 433 МГц к STM32F103C8

В данном проекте мы с помощью радиочастотных модулей будем передавать два значения: измеренное с помощью ультразвукового датчика расстояние и значение, считанное с потенциометра (изначально оно в диапазоне 0-4096, но мы его будем преобразовывать в диапазон от 0 до 100). Приемная часть проекта на основе платы Arduino будет принимать эти значения и выводить их на экран ЖК дисплея 16x2.

Также на нашем сайте вы можете посмотреть другие проекты с использованием радиочастотных модулей:

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

  1. Отладочная плата STM32F103C8 (STM32 Blue Pill) (купить на AliExpress).
  2. Плата Arduino Uno (купить на AliExpress).
  3. Радиочастотные модули 433 МГц (передатчик и приемник) (купить на AliExpress).
  4. Ультразвуковой датчик HC-SR04 (купить на AliExpress).
  5. ЖК дисплей 16x2 (купить на AliExpress).
  6. Потенциометр 10 кОм (купить на AliExpress).
  7. Макетная плата.
  8. Соединительные провода.

Приемный и передающий радиочастотные модули 433 МГц

В данном проекте мы будем использовать гибридные передатчики и приемники с амплитудной манипуляцией (ASK Hybrid Transmitter and receiver), работающие на частоте 433 МГц. В своем составе они содержат кварцевый генератор для поддержания хорошей стабильности частоты. В нашем проекте нам понадобится всего одна внешняя антенна для этого модуля. Внешний вид данных модулей представлен на следующем рисунке.

Внешний вид гибридных передатчика и приемника с амплитудной манипуляцией

Также широко распространены варианты не с 8 контактами у приемника (как на рисунке), а с 4.

Данные модули достаточно дешево стоят, что обусловило их широкое применение в разнообразных устройствах.

При максимально возможном напряжении питания дальность связи этих радиочастотных модулей составляет примерно 100 метров, при использовании напряжения питания 5 В и простой штыревой антенны длиной 17 см дальность связи с помощью данных модулей составит примерно 50-60 метров.

Технические характеристики радиочастотного передатчика:

  • рабочая частота: 433 МГц;
  • выходная мощность: 4-16 дБм;
  • дальность связи: 3 метра (без антенны), 100 метров (с антенной);
  • метод модуляции (манипуляции): амплитудная (Amplitude shift keying, ASK);
  • скорость передачи: 10 кбит/с
  • напряжение питания: 3-5 В постоянного тока.

Назначение контактов (распиновка) модуля передатчика:
1. GND – общий провод (земля).
2. Data In – по этому контакту модуль принимает последовательные данные от кодера (encoder).
3. Vcc – на этот контакт подается питающее напряжение +5 В.
4. Antenna – к этому контакту подключается внешняя антенна.

Технические характеристики радиочастотного приемника:

  • чувствительность: -105 дБм;
  • промежуточная частота: 1 МГц;
  • низкое потребление энергии;
  • потребляемый ток: 3,5 мА;
  • напряжение питания: 3-5 В.

Назначение контактов (распиновка) модуля приемника:
1. GND – общий провод (земля).
2. Data In – по этому контакту передаются последовательные данные декодеру.
3. Data In – по этому контакту передаются последовательные данные декодеру.
4. Vcc – на этот контакт подается питающее напряжение +5 В.
5. Vcc – на этот контакт подается питающее напряжение +5 В.
6. GND – общий провод (земля).
7. GND – общий провод (земля).
8. Antenna – к этому контакту подключается внешняя антенна.

Схема проекта

Передающая часть

Схема подключения передающего радиочастотного модуля 433 МГц к STM32F103C8 (Blue Pill) представлена на следующем рисунке.

Схема подключения передающего радиочастотного модуля 433 МГц к плате STM32F103C8 (Blue Pill)Схема соединений между радиочастотным модулем и платой STM32F103C8 приведена в следующей таблице.

Плата STM32F103C8 Радиочастотный модуль
5V VDD
GND GND
PA10 DATA
NC ANT

Схема соединений между ультразвуковым датчиком и платой STM32F103C8 приведена в следующей таблице.

Плата STM32F103C8 Ультразвуковой датчик
5V VCC
PB1 Trig
PB0 Echo
GND GND

Внешний вид собранной конструкции передающей части проекта представлен на следующем рисунке.

Внешний вид собранной конструкции передающей части проекта

Приемная часть

Схема подключения приемного радиочастотного модуля 433 МГц к плате Arduino Uno представлена на следующем рисунке.

Схема подключения приемного радиочастотного модуля 433 МГц к плате Arduino Uno

Схема соединений между радиочастотным модулем и платой Arduino Uno приведена в следующей таблице.

Arduino Uno Приемный радиочастотный модуль
5V VDD
GND GND
11 DATA
NC ANT

Схема соединений между ЖК дисплеем 16х2 и платой Arduino Uno приведена в следующей таблице.

ЖК дисплей 16х2 Плата Arduino Uno
Ground (Gnd) Ground (G)
VCC 5V
VEE к среднему контакту потенциометра для регулировки контрастности
Register Select (RS) 2
Read/Write (RW) Ground (G)
Enable (EN) 3
Data Bit 4 (DB4) 4
Data Bit 5 (DB5) 5
Data Bit 6 (DB6) 6
Data Bit 7 (DB7) 7
LED Positive 5V
LED Negative Ground (G)

Внешний вид собранной конструкции приемной части проекта представлен на следующем рисунке.

Внешний вид собранной конструкции приемной части проекта

Объяснение программы для платы STM32 (передающая часть)

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В передающей части нашего проекта расстояние до препятствия в сантиметрах, измеренное с помощью ультразвукового датчика, и значение с потенциометра, преобразованное в диапазон 0-100, мы будем передавать с помощью радиочастотного модуля, подключенного к плате STM32F103C8.

Первым делом скачайте библиотеку Radiohead по следующей ссылке. Данная библиотека использует амплитудную манипуляцию (Amplitude Shift Keying Technique, ASK) для передачи и приема сигналов. С помощью этой библиотеки программирование работы с радиочастотными модулями становится достаточно простым занятием. Скачанную библиотеку вы можете подключить в Arduino IDE используя пункт меню Sketch->include library->Add .zip library.

Затем подключим использование этой библиотеки в программе.

Укажем контакты платы STM32F103C8, к которым подключены контакты trigger и echo ультразвукового датчика.

Создадим объект rf_driver для работы с радиочастотным модулем. В качестве параметров для него укажем скорость (2000), контакт RX (PA9) и контакт TX (PA10).

Объявим ряд строковых переменных.

Далее, в функции void setup(), инициализируем объект rf_driver.

Затем инициализируем последовательную связь со скоростью 9600 бод и установим режимы работы используемых контактов (на ввод или вывод данных).

Далее в функции void loop() мы будем считывать значение с выхода АЦП контакта PA0, к которому подключен потенциометр. Оно в будет в диапазоне от 0 до 4095 поскольку АЦП платы STM32 имеют разрешение 12 бит. После этого мы будем конвертировать считанное значение в диапазон от 0 до 100 с помощью функции map и записывать его в переменную pwmvalue.

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

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

Затем определенное значение расстояние и переменную pwmvalue (значение с потенциометра) мы будем преобразовывать в строки и записывать их в строковые переменные.

Далее полученные две строки мы объединяем в одну строку, разделив их значения запятой (“,”).

Затем мы эту строку преобразуем в символьный массив.

Далее мы передаем эти данные и ждем пока передача не будет закончена.

Также передаваемую строку мы будем выводить в окно монитора последовательной связи (Serial Monitor).

Объяснение программы для платы Arduino Uno (приемная часть)

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

Первым делом в программе подключим использование библиотеки RadiohHead.

Также подключим библиотеку для работы с ЖК дисплеем.

Затем укажем контакты платы Arduino Uno, к которым подключен ЖК дисплей.

Далее объявим необходимые строковые переменные.

Затем создадим объект для работы с радиочастотным модулем.

После этого в функции void setup() установим для ЖК дисплея режим 16x2 и покажем на его экране приветственное сообщение.

Далее инициализируем объект для работы с радиочастотным модулем.

Затем объявим массив buf[] с размерностью 7 байт – это длина передаваемой нами с помощью радиочастотного модуля строки (с учетом символа “,”).

Если передаваемая строка доступна в приемном радиочастотном модуле мы проверяем ее размер и выполняем функцию rf.recv(), которая используется для приема данных.

Переданную строку мы приняли в массив buf, теперь этот массив символов мы преобразуем в строку и сохраним ее в переменной str_receive.

Затем в цикле for мы разделим эту строку на две строки при помощи нахождения в ней разделительного символа ‘,’.

Далее эти две строки мы преобразуем в символьные массивы.

После этого конвертируем их в числа целого типа (integer) с помощью функции atoi().

Затем мы отобразим эти числа на экране ЖК дисплея 16х2.

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

После загрузки кодов программ в платы STM32 и Arduino передаваемые передающей частью проекта данные будут отображаться на экране ЖК дисплея в приемной части.

На следующем рисунке показан пример работы нашего проекта при значении с потенциометра, равного 0, и расстояния до препятствия, равного 6 см.

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

Аналогичный пример при значении 47 с потенциометра и расстоянии 3 см.

Тестирование работы проекта (эксперимент № 2)

Исходный код программы (скетча)

Передающая часть (плата STM32F103C8)

Приемная часть (плата Arduino Uno)

Видео, демонстрирующее работу проекта

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

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

Ваш адрес email не будет опубликован.