- Модуль передатчика и приемника RF 433 МГц:
- Потребность в кодировщиках и декодерах:
- Необходимые компоненты:
- Принципиальная электрическая схема:
- Пояснение к коду:
Всем привет! Сегодня в этом проекте мы будем сопрягать модуль РЧ приемника и передатчика с микроконтроллером PIC и связываться между двумя разными микроконтроллерами pic по беспроводной сети.
В этом проекте мы сделаем следующее: -
- Мы будем использовать PIC16F877A для передатчика и PIC18F4520 для секции приемника.
- Мы соединим клавиатуру и ЖК-дисплей с микроконтроллером PIC.
- На стороне передатчика мы подключим клавиатуру к PIC и передадим данные. На стороне приемника мы получим данные по беспроводной сети и покажем, какая клавиша нажата на ЖК-дисплее.
- Мы будем использовать IC кодера и декодера для передачи 4-битных данных.
- Частота приема составит 433 МГц при использовании дешевого модуля RF TX-RX, доступного на рынке.
Прежде чем переходить к схемам и кодам, давайте разберемся, как работает ВЧ-модуль с ИС кодировщика-декодера. Также прочтите две статьи ниже, чтобы узнать, как подключить ЖК-дисплей и клавиатуру к микроконтроллеру PIC:
- Взаимодействие ЖК-дисплея с микроконтроллером PIC с использованием MPLABX и XC8
- Матричная клавиатура 4x4, взаимодействующая с микроконтроллером PIC
Модуль передатчика и приемника RF 433 МГц:
Это передатчик и приемник, которые мы используем в проекте. Это самый дешевый модуль для 433 МГц. Эти модули принимают последовательные данные в одном канале.
Если мы посмотрим на спецификации модулей, передатчик рассчитан на работу 3,5-12 В в качестве входного напряжения, а расстояние передачи составляет 20-200 метров. Он передает по протоколу AM (аудиомодуляция) на частоте 433 МГц. Мы можем передавать данные со скоростью 4 КБ / с при мощности 10 мВт.
На верхнем изображении мы видим распиновку модуля передатчика. Слева направо контакты: VCC, DATA и GND. Мы также можем добавить антенну и припаять ее в точке, обозначенной на изображении выше.
Для спецификации приемника, приемник имеет рейтинг 5 В постоянного тока и 4 мА Потребляемый ток в качестве входных данных. Частота приема составляет 433,92 МГц с чувствительностью -105 дБ.
На изображении выше мы можем видеть распиновку модуля приемника. Четыре контакта слева направо: VCC, DATA, DATA и GND. Эти два средних контакта имеют внутреннее соединение. Мы можем использовать любой из них или оба. Но рекомендуется использовать и то, и другое для снижения шумовой связи.
Кроме того, одна вещь не упоминается в таблице данных, переменная индуктивность или POT в середине модуля используется для калибровки частоты. Если мы не смогли получить переданные данные, есть вероятность, что частоты передачи и приема не совпадают. Это ВЧ-схема, и нам нужно настроить передатчик на идеальную точку передачи. Также, как и передатчик, этот модуль также имеет антенный порт; мы можем паять проволоку в спиральной форме для более длительного приема.
Диапазон передачи зависит от напряжения, подаваемого на передатчик, и длины антенн с обеих сторон. Для этого конкретного проекта мы не использовали внешнюю антенну и использовали 5В на стороне передатчика. Мы проверили с расстояния 5 метров, и он работал отлично.
Радиочастотные модули очень полезны для беспроводной связи на большие расстояния. Здесь показаны основные схемы РЧ передатчика и приемника. Мы сделали много проектов с использованием RF Module:
- Бытовая техника с радиочастотным управлением
- Игрушечная машинка с управлением по Bluetooth и Arduino
- Радиочастотные светодиоды с дистанционным управлением с использованием Raspberry Pi
Потребность в кодировщиках и декодерах:
Этот радиочастотный датчик имеет несколько недостатков:
- Одностороннее общение.
- Только один канал
- Очень шумные помехи.
Из-за этого недостатка мы использовали микросхемы кодировщика и декодера HT12D и HT12E. D обозначает декодер, который будет использоваться на стороне приемника, а E обозначает кодировщик, который будет использоваться на стороне передатчика. Эти микросхемы обеспечивают 4 канала. Также из-за кодирования и декодирования уровень шума очень низкий.
На изображении выше левый - HT12D, декодер, а правый - HT12E, кодировщик. Обе микросхемы идентичны. От A0 до A7 используется специальное кодирование. Мы можем использовать выводы микроконтроллера для управления этими выводами и установки конфигураций. Такие же конфигурации необходимо сопоставить с другой стороны. Если обе конфигурации точны и совпадают, мы можем получить данные. Эти 8 контактов могут быть подключены к Gnd или VCC или оставлены открытыми. Какие бы конфигурации мы ни делали в кодировщике, нам необходимо согласовать соединение на декодере. В этом проекте мы оставим открытыми эти 8 контактов для кодировщика и декодера. 9 и 18 контакты - это VSS и VDD соответственно. Мы можем использовать контакт VT вHT12D в качестве уведомления. Для этого проекта мы его не использовали. ТОТ штифт для передачи включить или отключить контактный.
Важной частью является вывод OSC, к которому нам нужно подключить резисторы, чтобы обеспечить колебания кодировщика и декодера. Декодер требует более высоких колебаний, чем декодер. Как правило, значение резистора датчика будет 1Meg и значение Декодер является 33k. Мы будем использовать эти резисторы в нашем проекте.
Вывод DOUT - это вывод данных RF-передатчика на HT12E, а вывод DIN в HT12D используется для подключения вывода данных RF-модуля.
В HT12E от AD8 до AD11 - это четырехканальный вход, который преобразуется и последовательно передается через радиочастотный модуль, а в HT12D происходит прямая обратная вещь : последовательные данные принимаются и декодируются, и мы получаем 4-битный параллельный вывод через 4 контакта D8-D11.
Необходимые компоненты:
- 2 - Хлебная доска
- 1 - ЖК-дисплей 16x2
- 1 - клавиатура
- Пара HT12D и HT12E
- Радиочастотный модуль RX-TX
- 1-10K предустановка
- 2 - резистор 4,7 кОм
- Резистор 1-1 МОм
- 1- 33к резистор
- 2- керамические конденсаторы по 33 пФ
- 1-20 МГц кристалл
- Bergsticks
- Несколько одножильных проводов.
- PIC16F877A MCU
- PIC18F4520 MCU
- Отвертка для управления регулятором частоты должна быть изолирована от человеческого тела.
Принципиальная электрическая схема:
Принципиальная схема для стороны передатчика (PIC16F877A):
Мы использовали PIC16F877A для передачи. Клавиатуры шестигранных подключен через PORTB и 4 -х каналов, соединенных через последние 4 бита PORTD. Узнайте больше о подключении клавиатуры 4x4 Matrix здесь.
Расплавьте следующим образом:
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
Принципиальная схема для стороны приемника (PIC18F4520):
На изображении выше показана схема приемника. LCD подключен через PORTB. Мы использовали внутренний генератор из PIC18F4520 для этого проекта. В 4 -х каналов соединены таким же образом, как мы делали раньше в цепи передатчика. Узнайте больше о подключении ЖК-дисплея 16x2 к микроконтроллеру PIC здесь.
Это сторона передатчика -
И сторона приемника в отдельном макете -
Пояснение к коду:
Код состоит из двух частей: одна для передатчика, а другая для приемника. Вы можете скачать полный код здесь.
Код PIC16F877A для передатчика RF:
Как всегда, сначала нам нужно установить биты конфигурации в микроконтроллере pic, определить некоторые макросы, включая библиотеки и частоту кристалла. AD8-AD11 порт кодировщик IC определяется как RF_TX на PORTD. Вы можете проверить все эти коды в полном коде, приведенном в конце.
Мы использовали две функции: void system_init (void) и void encode_rf_sender (char data).
System_init используется для инициализации контактных и клавиатур инициализаций. Инициализация клавиатуры вызывается из библиотеки клавиатуры.
Порт клавиатуры также определяется в keypad.h. Мы сделали PORTD как вывод, используя TRISD = 0x00, и сделали порт RF_TX как 0x00 как состояние по умолчанию.
void system_init (void) { TRISD = 0x00; RF_TX = 0x00; keyboard_initialization (); }
В encode_rf_sender мы изменили состояние 4 контактов в зависимости от нажатой кнопки. Мы создали 16 различных шестнадцатеричных значений или состояний PORTD в зависимости от ( 4x4) 16 нажатых кнопок.void encode_rf_sender (char data) { if (data == '1') RF_TX = 0x10; если (данные == '2') RF_TX = 0x20; if (data == '3') …………... …. ….
В основной функции мы сначала получаем данные о нажатой кнопке клавиатуры с помощью функции switch_press_scan () и сохраняем данные в ключевой переменной. После этого мы закодировали данные с помощью функции encode_rf_sender () и изменили статус PORTD.
Код PIC18F4520 для РЧ приемника:
Как всегда, мы сначала устанавливаем биты конфигурации в PIC18f4520. Он немного отличается от PIC16F877A, вы можете проверить код в прикрепленном zip-файле.
Мы включили заголовочный файл LCD. Определено соединение порта D8-D11 IC декодера через PORTD с использованием строки #define RF_RX PORTD, соединение такое же, как и в разделе Encoder. Объявление порта ЖК-дисплея также выполняется в файле lcd.c.
#включают
Как было сказано ранее, мы используем внутренний генератор для 18F4520, мы использовали функцию system _ init, где мы настроили регистр OSCON 18F4520 для установки внутреннего генератора на 8 МГц. Мы также устанавливаем бит TRIS для выводов ЖК-дисплея и выводов декодера. Как HT - 12D обеспечивает выход на D8-D11 портов, необходимо настроить PORTD в качестве входных данных для получения выходного сигнала.
void system_init (void) { OSCCON = 0b01111110; // 8Mhz`` intosc // OSCTUNE = 0b01001111; // включение ФАПЧ, максимальный предделитель 8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; // Последние 4 бита как входной бит. }
Мы настроили регистр OSCON на 8 МГц, также сделали порт B как выход, а порт D как вход.
Нижеприведенная функция выполняется с использованием точной обратной логики, использованной в предыдущем разделе передатчика. Здесь мы получаем такое же шестнадцатеричное значение из порта D, и по этому шестнадцатеричному значению мы определяем, какой переключатель был нажат в секции передатчика. Мы можем идентифицировать каждое нажатие клавиши и выводить соответствующий символ на ЖК-дисплей.
void rf_analysis (unsigned char recived_byte) { если (recived_byte == 0x10) lcd_data ('1'); если (recived_byte == 0x20) lcd_data ('2'); если (recived_byte == 0x30) ……. ….. …… ………..
Lcd_data вызывается из lcd.c файла.
В основной функции мы сначала инициализируем систему и ЖК-дисплей. Мы взяли переменные байты, и хранимся шестнадцатеричное значение, полученное от порта D. Затем с помощью функции rf_analysis мы можем распечатать символ на ЖК-дисплее.
void main (void) { беззнаковый байт символа = 0; system_init (); lcd_init (); в то время как (1) { lcd_com (0x80); lcd_puts ("CircuitDigest"); lcd_com (0xC0); байт = RF_RX; rf_analysis (байт); lcd_com (0xC0); } возврат; }
Перед запуском мы настроили схему. Сначала мы нажали кнопку « D » на клавиатуре. Итак, 0xF0 постоянно передается радиочастотным передатчиком. Затем мы настроили схему приемника до тех пор, пока на ЖК-дисплее не появится буква « D ». Иногда модуль правильно настроен от производителя, иногда нет. Если все подключено правильно и не отображается значение нажатия кнопки на ЖК-дисплее, то есть вероятность, что РЧ-приемник не настроен. Мы использовали изолированную отвертку, чтобы уменьшить вероятность неправильной настройки из-за индуктивности нашего тела.
Вот как вы можете связать RF-модуль с микроконтроллером PIC и обмениваться данными между двумя микроконтроллерами PIC по беспроводной сети с помощью RF-датчика.
Вы можете скачать полный код для передатчика и приемника отсюда, также посмотрите демонстрационное видео ниже.