
Программирование встраиваемых систем
..pdf
Рисунок 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