Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование встраиваемых систем

..pdf
Скачиваний:
106
Добавлен:
05.02.2023
Размер:
4.04 Mб
Скачать

Рисунок 14.2 – Источники ИК излучения

И для уменьшения влияния в ИК приемниках используются фильтры, которые позволяют пропустить лишь сигнал с определенной частотой и тем самым убрать ИК помехи с постоянной составляющей (солнце, лампы и др.).

Данные фильтры уже не позволят ИК диоду генерировать постоянный сигнал и будут требовать генерацию сигнала с определенной частотой (~38 кГц). Данные отличия представлены на рисунке 14.3:

Рисунок 14.3 – Фильтрация ИК помех

С помощью данных действий мы сможем устанавливать верные уровни на ИК приемнике, минуя влияние ИК помех.

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

Существуют несколько протоколов для передачи данных в ИК диапазоне. Чаще всего в простых системах встречается SIRC подобный протокол (рисунок 14.4):

91

Рисунок 14.4 – SIRC подобный протокол передачи данных в ИК диапазоне

Особенность данного вида протоколов заключается в том, что 0 и 1 кодируется длительностью импульса. Где,

1 – длинный импульс (>1200 мкс);

0 – короткий импульс (<1200 мкс).

Причем правильно считать длительность импульса от момента ухода в 0, до следующего момента ухода в 0.

Для платы TUSUR_IOT_BOARD уже существуют написанные функции, которые позволяют интерпретировать сигналы с ИК пультов для управления светодиодной лентой (рисунок 1.5), а также генерировать их.

Для этого в библиотеке TIB_IR.h присутствуют следующие функции:

void TIB_IR_impuls(uint16_t microsec); - Функция для формирования импульсов с частотой 38 кГц, которая принимает на вход один аргумент – длительность данных импульсов. uint8_t TIB_IR_intrans(uint8_t value, int pin_tx, int pin_rx); - Функция, которая позволяет передавать данные, используя ИК приемник и передатчик, которые установлены на плате, с помощью UART подобного протокола. Принимает на вход значения и пины, к которым подключены ИК приемник и передатчик. Данная функция возвращает значение принятое ИК

приемником.

uint32_t TIB_IR_read(int pin); - Функция, которая позволяет считать значение отправленное ИК пультом для управления RGB лентой. На вход подаётся пни, которому подключен вывод ИК приемника. Данная функция возвращает считанное значение с ИК канала. Если же значение не было получено она возвращает -1.

void TIB_IR_write(uint32_t value); - Функция, которая позволяет передать значение по ИК каналу, используя протокол для ИК пульта для управления RGB лентой.

Практическая часть

Передачи значений, используя ИК канал на плате TUSUR_IOT_BOARD

На плате TUSUR_IOT_BOARD присутствует, как и ИК передатчик, так и ИК приемник (рисунок 14.5):

Рисунок 14.5 – Нахождение на плате ИК приемника и передатчика

92

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

Данная хитрость реализована в функции:

uint8_t TIB_IR_intrans(uint8_t value, int pin_tx, int pin_rx);

Которая находится в библиотеке TIB_IR.h.

Следовательно, она понадобится для реализации данной работы. Добавьте данную библиотеку в свой проект, как вы это делали в прошлых работах.

И вставьте в программу следующий код:

#include "TIB_IR.h" #define IR_RX PB1 #define IR_TX PB9 #define LED PC13 #define but PB4

void setup() {

// put your setup code here, to run once: 4576 - dsrk 4560 d pinMode(IR_RX, INPUT);

pinMode(but, INPUT); pinMode(IR_TX, OUTPUT); pinMode(LED, OUTPUT); Serial.begin(115200);

}

uint8_t value = 7; // Число, которое вы хотите отправить void loop() {

// put your main code here, to run repeatedly if(digitalRead(but)){

uint8_t rec_value = TIB_IR_intrans(value, IR_TX, IR_RX); // В переменной rec_value будет хранится полученное значение

//Выведите полученное значение на экран

//Если оно совпадает с тем числом, которое вы хотели

//отправить выведите на экран сообщение "Отлично!"

//В ином случае "Ошибка!"

delay(1000);

}

}

Закончите программный код реализовав задачи выделенные желтым.

После того, как проект будет закончен, докажите, что передача происходит именно по ИК каналу!

Создание системы управления устройством по ИК каналу В данной работе необходимо сделать систему, которая будет распознавать команды,

отправленные ИК пультом.

Для этого необходимо будет воспользоваться функцией:

uint32_t TIB_IR_read(int pin);

93

Которая также находится в библиотеке TIB_IR.h.

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

#include "TIB_IR.h" #define IR_RX PB1 #define LED PC13 #define fan PA1 #define zoomer PA8 void setup() {

// put your setup code here, to run once: 4576 - dsrk 4560 d pinMode(IR_RX, INPUT);

pinMode(fan, OUTPUT); pinMode(zoomer, OUTPUT); pinMode(LED, OUTPUT); Serial.begin(115200);

}

void loop() {

// put your main code here, to run repeatedly uint32_t current = TIB_IR_read(IR_RX);

if (current != 0xFFFFFFFF) { // Если что-то пришло

//Выведите значение считанной переменной

}

}

Скопируйте данный код и выполните задачу, выделенную желтым цветом.

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

Одна из команд будет:

-Включать светодиод,

-Вентилятор,

Другая будет все отключать.

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

tone(zoomer, 3000, 10); - Для включения звука tone(zoomer, 0, 0); - Для выключения звука

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

if (current == {Значение вашей команды}) {

}

94

СПИСОК ЛИТЕРАТУРЫ

1.Программирование микроконтроллерных плат Arduino/Freeduino. – СПБ.: БХВ-

Петербург, 2012. – 256 с.

2.Язык C в XXI веке / пер. с англ. А.А. Слинкина. – М.: ДМК Пресс, 2015. – 376 с.

3.Язык программирования Си.\Пер. с англ., 3-е изд., испр. – СПб.: “Невский Диалект”, 2001. – 352с.

4.Изучаем Arduino: инструменты и методы технического волшебства. 2-е изд.: пер. с англ. – СПб.: БХВ-Петербург, 2020. – 529 с.

95

ПРИЛОЖЕНИЕ А

(справочное)

Методическое пособие для создания собственного проекта

Цель работы: формирование базовых навыков создания проектов по теме «Программирование встраиваемых систем».

Задачи работы:

1)Закрепить полученные в ходе курса навыки программирования микроконтроллеров;

2)Получить навыки по созданию собственного проекта;

3)Получить навыки по представлению технических проектов.

Вспомогательный материал для реализации проекта

Для реализации проекта, необходимо подготовить:

1)Идею (название) проекта. Цели и задачи, решаемые проектом;

2)Решения, которые способны реализовать идею проекта, на базе платы

TUSUR_IOT_BOARD;

3)Программный код для реализации проекта в среде программирования Arduino IDE;

4)Отчет, который будет отражать этапы подготовки к проекту и пояснения решений для его реализации;

5)Презентация и демонстрация проекта.

Создание идеи проекта

При создании проекта необходимо определить его идею, цели и задачи. В качестве примера можно взять идею данных проектов (Таблица А.1):

Таблица А.1 – Идеи готовых проектов

Идея проекта:

Цель проекта:

 

Задачи проекта

Система авторизации

Создание

системы

1.

Создать систему проверки имени пользователя и

на

базе

UART

аутентификации

и

пароля;

 

интерфейса

идентификации

 

2.

Создать систему разграничения доступа для

 

 

 

пользователя

 

для

пользователей;

 

 

 

доступа к

некоторым

3.

Создать систему, которая позволяет сохранять

 

 

 

параметрам системы

 

пользователей в памяти устройства.

Система

КПП с

Создание

системы

1.

Создать систему считывания данных с RFID метки

регистрацией

способную

выполнять

2.

Создать систему записи данных на RFID метку

пользователи на базе

функционал

КПП

с

3.

Создать меню для управления КПП системой

RFID считывателя

добавлением

 

и

 

 

 

 

 

удалением

 

 

 

 

 

 

 

пользователей

 

 

 

Создание

«умного»

Создание

системы

1.

Создать систему автоматической регулировки

дома

с

контролем

«умного» дома

 

температурного режима;

температурного

 

 

 

2.

Создать систему автоматического освещения;

режима, включения и

 

 

 

3.

Создать систему освещения по «хлопку»;

выключения света по

 

 

 

4.

Связать все системы в одну.

хлопку и т.д.

 

 

 

 

 

Список используемой периферии на плате TUSUR_IOT_BOARD Список периферии, подключенной к плате представлен в таблице А.2:

96

Таблица А.2 – Устройства подключенные к плате

ВВОД

ВЫВОД

Датчик температуры

Вентилятор

 

 

Датчик давления

Светодиоды

 

 

RFID

Экран

 

 

IR приемник

Зуммер

 

 

Кнопка, переключатели

RGB сетодиод

 

 

Encoder

IR передатчик

 

 

Микрофон

Динамик

 

 

Переменный резистор

 

Фоторезисторы

 

 

 

NRF

 

WI-FI

 

 

 

Bluetooth

 

 

 

Флешка

 

 

 

Библиотеки для взаимодействия с некоторым устройствами: TIB_RFID.h – библиотека для взаимодействия с RFID модулем;

TIB_display.h – библиотека для взаимодействия с экраном с контроллера STM32; TIB_IR.h – библиотека для взаимодействия ИК каналом.

Данные, которые необходимо отразить в отчёте и в презентации

1)Название проекта, цели и задачи проекта;

2)Ход работы;

3)Исходный программный код с подробным объяснением работы алгоритмов;

4)Тестирование результатов работы проекта.

Отчёт должен быть выполнен по стандарту ОС ТУСУР.

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

97

ПРИЛОЖЕНИЕ Б

(справочное)

Установка и настройка лабораторного макета

Установка среды разработки Arduino IDE

1) Переходите по ссылке на официальный сайт поставщика ПО Arduino IDE (Рисунок Б.1) https://www.arduino.cc/en/software;

Рисунок Б.1 – Сайт ардуино.

2)В данной окне выбираете версию своей ОС и скачиваете установщик;

3)Далее запускает установщик и следуя всем инструкциям устанавливаете ПО Arduino

IDE.

Добавление платы для программирования контроллера STM в Arduino IDE

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

Но перед этим в настройках нужно указать источник откуда необходимо загрузить данные:

1) Для этого запустите Arduino IDE (Рисунок Б.2):

Рисунок Б.2 – Arduiono IDE

2) Перейдите во вкладку «Файл» -> «Настройка» (Рисунок Б.3):

98

Рисунок Б.3 – Настройки Arduini IDE

3) Далее нажмите кнопку для редактирования дополнительных ссылок для менеджера плат (Рисунок Б.4):

Рисунок Б.4 – Настройка Менеджера плат

4) И вставьте туда строки (Рисунок Б.5): https://dl.espressif.com/dl/package_esp32_index.json https://raw.githubusercontent.com/stm32duino/BoardManagerFiles/master/STM32/package

_stm_index.json http://dan.drown.org/stm32duino/package_STM32duino_index.json http://arduino.esp8266.com/stable/package_esp8266com_index.json

99

Рисунок Б.5 – Дополнительные ссылки для Менеджера плат

5) Далее перейдите в менеджер плат (Рисунок Б.6):

Рисунок Б.6 – Менджер плат

6) И скачайте следующие платы, введя их название в строке поиска (Рисунок Б.7):

Рисунок Б.7 – Загрузка плат

Программирование STM контроллера

Для программирования STM контроллера в среде программирование ArduinoIDE должны быть установлены, следующие параметры:

100