Главная » Микроконтроллеры
Призовой фонд
на ноябрь 2017 г.
1. Термометр Relsib WT51
Рэлсиб
2. 1000 руб
PCBWay
3. Тестер компонентов LCR-T4
Паяльник
4. 200 руб.
От пользователей

Связь МК при помощи RF модулей

На сегодняшний день все популярнее становятся примочки, работающие с микроконтроллером по радиочастотным схемам (модулям). В статье мы постараемся разобраться как же все-таки можно работать с двумя модулями - приемником XY-MK-5V и передатчиком XY-FST (FS1000A) (такова маркировка на платах модулей). Внешне же такие модули выглядят следующим образом:

Именно эти модули работают на частоте 433 МГц, но как видно из фото, возможны конфигурации таких же модулей, работающих на частотах 315 МГц и 330 МГц. И насколько мне известно, количество конфигураций по частоте этими тремя не ограничивается. Важно отметить, что оба модуля должны быть настроены на одну и ту же частоту, в противном случае они не будут работать друг с другом. Мало ли кому-нибудь взбредет в голову. :)

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

Хочется также отметить несколько фишек таких модулей относительно вышесказанного. Если мы берем два модуля, подключаем их к питанию, к выводу данных приемника подключаем светодиод, а к выводу данных передатчика подключаем или плюс питания или минус. Как ожидается светодиод будет или гореть, или не гореть в зависимости от того куда подключен вывод данных передатчика. А не тут то было! В обоих случаях будем иметь просто хаос на выводе данных приемника, а самые наблюдательные могут заметить в начальный период подключения вывода данных передатчика к плюсу, что светодиод коротко ярко вспыхивает и снова начинает хаотически изменять яркость. Все дело в том, что в радиоэфире очень много помех, особенно в городских условиях. Теперь вы спросите и зачем же нам такое "шило"? Не стоит паниковать! Помните, в начальный момент то светодиод на долю секунда все же срабатывал как ожидалось в самом начале - горит, не горит? Так вот берем и просто увеличиваем частоту импульсов на выводе данных передатчика. Можно подключить генератор туда, а осциллографом наблюдать за состоянием вывода данных приемника. Генератор настраиваем на частоту прямоугольных импульсов от 10 Гц до 10 кГц. И на экране осциллографа происходит то чудо, которого мы ожидаем - прямоугольник, подобный тому, что на генераторе, может быть только слегка искаженный.

Забегая немного вперед, осциллограмма от приемника, передается значение в двоичном виде 1110-1110:

А если передатчик находится в состоянии покоя, данные не передаются, осциллограмма от приемника будет иметь просто хаотический набор импульсов:

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

Итак, рассмотрим параметры модулей приемника и передатчика:

Приемник:

  • напряжение питания 5 В
  • потребляемый ток 4 мА
  • частота 433,92 МГц
  • чувствительность -105дБ
  • антенна - 32 см одножильного провода

Передатчик:

  • расстояние передачи от 20 до 200 метров в зависимости от напряжения питания и условий окружающей среды
  • напряжение питания от 3,5 до 12 В
  • скорость передачи до 4 kb/s
  • мощность передатчика 10 мВт
  • частота 433 МГц
  • длинна антенны 25 см 

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

Рисуем схему электрическую принципиальную:

Схема демонстрирует связь между двумя микроконтроллерами по радио каналу по средствам модулей XY-MK-5V и XY-FST (FS1000A). Прошивка и исходный код для обоих микроконтроллеров прилагаются ниже.

Логика работы следующая - микроконтроллер Attiny13 динамически изменяет переменную и постоянно передает ее значение по радиоканалу на микроконтроллер Atmega8. Во втором микроконтроллере данные принимаются и значение переменной выводится на LCD дисплей. Ради справедливости стоит отметить, что все же иногда проскакивают помехи в полезные данные. Выше было указано, что шум как-то нужно фильтровать. Организована фильтрация так - чтобы принять полезные данные, первый байт передачи должен быть как бы адресным. Как только значение первого байта совпадет с заложенным, то второй байт можно смело принимать как полезные данные. Данные передаются несколько раз подряд для предотвращения потери данных. Все достаточно просто. Для увеличения помехоустойчивости длину адресной информации можно увеличить до двух или трех байт.

Сигнал для передатчика формируется в зависимости от числа, которое нужно передать. Число в двоичном виде представляет собой последовательность нулей и единиц. Таким образом в зависимости от состояния каждого бита в байте на передатчик подается ноль или единица - так формируется прямоугольный (цифровой) сигнал. Приемник этот сигнал принимает и также в зависимости от состояния (ноль или единица) формируется 8 бит байта и получаем переданное число и далее делаем с ним (с принятой информацией) все что нам нужно.

Для индикации используется жидко кристаллический (ЖК или LCD) дисплей. Мною использовался дисплей 2004А - 4 строки по 20 символов, однако можно применять дисплей более привычный - 2 строки по 16 символов. ЖК дисплей подключается к микроконтроллеру по четырех битной системе. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод "А" и "К" на плате дисплея. Подсветка включается через резистор, ограничивающий ток - R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Однако пренебрегать этим резистором не стоит во избежание порчи подсветки. Кнопки S1 и S2 необходимы для сброса микроконтроллеров. К выводам reset обоих микроконтроллеров подключены резисторы, подтягивающие плюс питания к выводу. Это необходимо для предотвращения самопроизвольного перезапуска микроконтроллеров в случае наличия помех или шума. 

Питается вся схема от простого модуля питания на силовом трансформаторе. Переменное напряжение выпрямляется четырьмя диодами VD1 - VD4 марки 1N4007, пульсации сглаживаются конденсаторами C1 и C2. Четыре выпрямительных диода можно заменить одним диодным мостом. Трансформатор применен марки BV EI 382 1189 - преобразует 220 вольт переменного тока в 9 вольт переменного тока. Мощность трансформатора составляет 4,5 Вт, этого вполне достаточно и еще с запасом. Такой трансформатор можно заменить любым другим силовым трансформатором, подходящим для Вас. Либо данный питающий модуль схемы заменить на импульсный источник напряжения, можно собрать схему обратноходового преобразователя либо применить иже готовый блок питания от телефона, например - все это дело вкусов и потребностей. Выпрямленное напряжение с трансформатора стабилизируется на микросхеме линейного стабилизатора L7805, ее можно заменить на отечественный аналог пяти вольтового линейного стабилизатора КР142ЕН5А, либо применить другу микросхему стабилизатора напряжения в соответствии с подключением ее в схеме (например LM317 или импульсные стабилизаторы LM2576, LM2596, MC34063 и так далее).

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

Вся схема была собрана и отлаживалась на макетных платах для микроконтроллеров Atmega8 и Attiny13:

Как видно, модули использовались без антенн, конечно же на небольшом расстоянии связь будет осуществляться, но качество связи будет хуже. Моему примеру не стоит следовать в этом плане - не ленитесь сделайте антенны для модулей и припаяйте их. Производитель указывает длину антенн 32 и 25 сантиметров для приемника и передатчика соответственно. Однако в примечании пишется, что важно использовать антенну длинной 17 см. Тут я немного и запутался какой же длинны должна быть все же антенна. Также производитель отмечает, что расположение антенны также сказывается на качестве приема сигнала. Здесь наилучшее расположение можно подобрать методом научного тыка - в каком положении лучше сигнал, там и расположить антенну. В китайских устройствах с применением подобных модулей ее делают в виде спирали и располагают просто вдоль приемника.

Несколько слов о применении - при помощи таких схем можно передавать и принимать информацию о температуре или еще о чем-нибудь в точках, отдаленных от основного микроконтроллера. Также при помощи принятого кода можно управлять какими-либо не сложными схемами дистанционно (по типу включить / выключить). Ну и вообще применять там, где только захочется.

Для программирования нужно знать конфигурации фьюз битов микроконтроллеров для Atmega8:

и Attiny13:

К статье прилагаются прошивки для микроконтроллеров, исходники в AVR studio, а также видео демонстрирующее работу схемы и передачу информации от микроконтроллера к микроконтроллеру (tiny13 считает от 0 до 255 и передает постоянно значение другому микроконтроллеру, на котором это значение отображается на экране LCD дисплея, на видео значение будет передаваться до 111 и в этот момент разъединим линию данных от модуля передатчика, цифра останется в последнем переданном состоянии - 111).

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
IC1 МК AVR 8-бит
ATmega8
1 Поиск в LCSCВ блокнот
IC2 МК AVR 8-бит
ATtiny13A
1 Поиск в LCSCВ блокнот
VR1 Линейный регулятор
L7805AB
1 Поиск в LCSCВ блокнот
VD1-VD4 Выпрямительный диод
1N4007
4 Поиск в LCSCВ блокнот
RF1 RF приемникXY-MK-5V1 Поиск в LCSCВ блокнот
RF2 RF передатчикFS1000A1 XY-FSTПоиск в LCSCВ блокнот
C1, C9 Электролитический конденсатор10 мкФ2 Поиск в LCSCВ блокнот
C2, C4-C7, C10 Конденсатор100 нФ6 Поиск в LCSCВ блокнот
C3 Электролитический конденсатор1000 мкФ1 Поиск в LCSCВ блокнот
C8 Электролитический конденсатор220 мкФ1 Поиск в LCSCВ блокнот
R1 Резистор
22 Ом
1 Поиск в LCSCВ блокнот
R2 Подстроечный резистор10 кОм1 Поиск в LCSCВ блокнот
R3, R4 Резистор
10 кОм
2 Поиск в LCSCВ блокнот
HG1 LCD-дисплей2004A1 Поиск в LCSCВ блокнот
Tr1 ТрансформаторBV EI 382 11891 220В - 9В ACПоиск в LCSCВ блокнот
S1, S2 Тактовая кнопкаTC-A1092 Поиск в LCSCВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 10.09.2014 0 2
Я собрал 0 4
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 4 чел.

Комментарии (28) | Я собрал (0) | Подписаться

0
rastamanoff #
Спасибо за статью. А вот подскажите, хочу смоделировать в Протеусе.
Подсоединяю выход attiny к входу Меги просто проводником, без RF-модулей. Подключаю ЛСД. На экране ничего, хотя видно, что активность на PB0 attiny и PC5 atmega присутствует. Далее в Студии ставлю перед while (1) на 3 секунды число. Число показалось, дальше пустой экран. Это я к тому, что библиотека ЛСД работает.
Ответить
0

[Автор]
Gauss #
В реальности так на прямую тоже не работает
Ответить
0
Petrarka #
А почему так?
Ответить
0
Сергей #
А какова дальность связи при рекомендуемых длинах антенн, из любопытства? Не экспериментировали?
Ответить
0

[Автор]
Gauss #
В пределах дома, квартиры берут на 15 метров точно, а по улице не бегал с ними.
Вообще должно быть вполне правдоподобно на 100 метров прямой видимости при питании передатчика от 12 Вольт
Ответить
0
Александр #
Здравствуйте! А подскажите, как достигается синхронизация при приеме? Смотрю исходники и не могу понять как определяется начало передаваемого байта? может ведь начать принимать со 2 бита и тогда условие if (h==0b10110010)... может вообще никогда не выполниться, хотя передатчик будет передавать исправно то что нужно? Объясните, пожалуйста - может я что-то упускаю
Ответить
0

[Автор]
Gauss #
Это же простейший пример, пока первый байт не совпадет с заданным для синхронизации, второй не принимается (надежность так себе, зато просто), посылки передаются несколько раз, чтобы не начать прием именно со второго байта, об успешности приема передатчик не узнает, так как канал односторонний
Ответить
0
Alex #
Нельзя ли эти модули по uart подключить?
Ответить
0

[Автор]
Gauss #
Можно
Ответить
0
Alex #
Тогда скажите пожалуйста, какую выбрать скорость?
Ответить
0
serfeld #
У меня тоже в Proteus сразу не запустилось. Переписал под WinAvr последовательную передачу и приём байта и ещё кое-что. Увеличил в передатчике количество посылок байтов адреса и данных до 111-меньше приводит изредка к пропуску информации. В Proteus моделируется вполне сносно. Железа пока нет в наличии.
Прикрепленный файл: mc315_hex_proteus.zip
Ответить
0
Юра #
Я купил себе этот набор радиомодулей, но пока так и не получилось принять какаю либо информацию на приемник, там все время помехи. Такое впечатление что они не на одной частоте работают.
Подскажите приемник надо как-то настраивать дополнительно? Если да, то поподробней объясните...
Ответить
0

[Автор]
Gauss #
Они должны идти настроенные комплектом на одну частоту, но если во время транспортировки была деформация катушек или всей платки, то могла уйти частота - это как вариант
Ответить
0
Zhuk #
... в примечании пишется, что важно использовать антенну длинной 17 см. Тут я немного и запутался какой же длинны должна быть все же антенна.
Длина волны (м) = 300 / Частота (МГц).
Если посчитаете для 433 Мгц, то окажется, что четверть волны как раз и составляет ~17 см.
Ответить
0
Slava #
Пожалуйста помогите сделать это с выводом не на дисплей, а в юарт
Ответить
0

[Автор]
Gauss #
Есть примеры для передачи с помощью юарт, нужно поискать
Ответить
0
Slava #
Вот нашёл прикрепил.
Прикрепленный файл: RF433.zip
Ответить
0
Slava #
Помогли бы ещё под кодвижен или авр студию переписать, чтобы в терминале печатаеш и сразу передаётся на приёмник терминала либо с буфера напечатанного по комманде ввода передавалось предложение например как чат?
Ответить
+1
Sergey Firsov #
Симулировал данный вариант в Протеусе, естественно не заработало. С помощью встроенного осциллографа пришел к выводу, что задержка у приемника должна быть около 1600 микросекунд. И если цеплять "выход-вход" проводом, то нужно резистор на 300 килоом на массу. Тогда работает отлично и очень устойчиво
Ответить
0
Сергей #
Взял себе данный комплект для проекта. Задача - сделать передатчик и приемник.
МК использую atTiny85? Программирую через Ардуину, библиотеку использую VirtualWire (манчестерская мне сложновата - ума не хватает).
Передатчик atTiny85+FS1000A работает прекрасно!
Собирал приемник на ардуине - все ловит великолепно. А вот приемник на atTiny85 почему-то не получается.
Я заливаю ардуиновский скетч в него, соответственно меняю пины, в качестве сигнализации приема выставил светодиод... И не работает... не принимает, не мигает.
В сети можно много вариантов найти atTiny85+передатчик, но вот atTiny85+приемник не могу найти.
Потому застрял. Можете подсказать, что делать?
Для понимания ситуации точнее прикрепляю схему соединения, и ниже сам скетч:
#include
int led = 4;
int radar = 2;

void setup() {
vw_set_rx_pin(radar);
vw_set_ptt_inverted(true);
vw_setup(1000);
vw_rx_start();
pinMode(led, OUTPUT);//светодиод в качестве сигнализации того, что связь есть
digitalWrite(led, HIGH);
delay (100);//светодиод оповестил о работе
}
void loop()
{
digitalWrite(led, LOW);
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
vw_wait_rx();
if (vw_get_message(buf, &buflen)) // Non-blocking
{
if (buf[0] == 'g'){
if (buf[1] == 't'){
digitalWrite(led, HIGH);//если сигнал прошел проверку, то зажигаем светодиод
delay(1000);
}
}
}
}
Надеюсь на вашу помощь и заранее благодарю.
Прикрепленный файл: atTiny85.jpg
Ответить
0

[Автор]
Gauss #
Все зависит от алгоритма работы приема
А вообще инклуд пустой, может быть нужно библиотеку подключить для этого?
Ответить
0
Сергей #
Прошу прощения. В исходном коде он конечно же есть. Здесь просто глюк был при копи-пасте.
Что значит "алгоритм работы приема?"
На ардуине данный скетч работает спокойно. Меняю пины и заливаю на atTiny и не работает.
Ответить
0

[Автор]
Gauss #
Значит стоит ознакомиться с синтаксисом той программы, в которой пишется код для мк - если работает в ардуино ide, то это далекоо не факт, что будет работать в другой программе
Ответить
0
Андрей #
А есть ли подобная штука, но передающая сигнал на 3 км в прямой видимости? Сколько смотрел, даже передатчика подходящего по дистанции не находил
Ответить
0

[Автор]
Gauss #
оно стоить будет в 50-100 раз дороже
Ответить
0
Юрий #
На али точно видел. С иис, рс232,485. Заявлено до 10км, но и выглядят серьезно. Стоят около 2-3килорублей/штука. Ищи, точно есть
Ответить
+1
Юрий #
Живы еще люди, которые пользуют студию. Еще наверное мк2 еще есть в хозяйстве, а не всякая самопальная дрянь.Однозначно, 5+ за статью
Ответить
0
Вячеслав #
Для исключения обработки принятых "порченных" ошибок эффективно использовать CRC биты.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Ветрогенератор Бокс для хранения компонентов
вверх