Волков И.Ю.
гр. 218
Часть 2. Разработка алгоритмов работы элементов сети и настройка аппаратной составляющей
Условно, реализацию проекта можно разделить на две части: аппаратную и программную. Программная часть будет включать в себя:
· Определение функций, возлагаемых на программную часть;
· Построение алгоритмов работы программы;
· Определение и настройка среды разработки, используемых библиотек;
· Написание программного кода;
· Оптимизация программного кода.
Аппаратная часть, кроме определения функциональной схемы и используемых компонентов (что было сделано в первой части КР [1]) будет состоять в определении назначения выводов аппаратной платформы и других элементов блоков системы, а так же в задании начальных параметров трансивера.
В данной части курсовой работы будет рассмотрены программная (до написания кода) и аппаратная части. Написание и оптимизации программного кода будет рассмотрена в следующей части КР.
Программная часть
Функции, выполняемые программной частью
Функции, возлагаемые на программную часть проекта, различаются между Мастером и Терминалом, однако среди них есть и некоторые общие (рис. 1).
Общие функции
Инициализация модулей и портов – инициализация и первичная настройка параметров аппаратной платформы и трансивера.
Прием сообщений из радиоканала включает в себя: определение факта наличия сообщения для приема, непосредственно прием сообщения, определение его типа, передачу АСК и обработку полученных команд.
Передача сообщений в радиоканал включает в себя: определение наличия данных для передачи, формирование сообщения, передача сообщения в радиоканал, прием и обработку информации содержащейся в АСК (для Мастера).
Функции Мастера
Учет активных терминалов – Мастер должен отслеживать активность терминалов и обновлять информацию об их доступности.
Обмен данными с пользовательским устройством включает в себя проверку наличия у пользовательского устройства данных для передачи, прием этих данных и обработку - определение типа данных и либо подготовка команды к передаче, либо возвращение пользовательскому устройству какой-то информации, если от пользовательского устройства был получен запрос.
Световая индикация работы – индикация того, что устройство выполняет определенный процесс (например, частое мигание светодиода – попытка передать сообщение Терминалу).
Звуковая сигнализация – если данные с датчиков достигли определенного значения (датчик и значение задаются пользователем), например, сработал датчик движения или температура окружающей среды приблизилась к критической, Мастер может подать звуковую сигнализацию для привлечения внимания пользователя.
Функции Терминала
Регистрация – регистрация Терминала у Мастера. После этой процедуры Терминал готов к приему команд.
Заполнение сообщения АСК полезной информацией – обновление информации с датчиков записанной в полезной нагрузке отчета о доставке ACK. Приоритет имеют датчики, информация с которых не поступала Мастеру дольше всего.
Контроль датчиков – мониторинг показаний датчиков и, при наступлении определенного условия указанного пользователем, внеочередная отправка Мастеру извещения об этом (например, температура достигла определенного уровня).
Рис. 1 –Функции, возлагаемые на программную часть
Алгоритмы работы программной части
Как и функции, выполняемые Мастером и Терминалом, алгоритмы работы их программной части различаются, однако между ними есть две общие черты.
Первая общая черта - процесс инициализации, включающий в себя инициализацию библиотек, констант, переменных, первичную настройку трансивера и порта для связи с ПУ, а так же первичную регистрацию (для Терминала).
Другой общей чертой является наличие зацикленного основного тела кода, в котором программа находится большую часть времени.
Алгоритмы Мастера
Обобщенный алгоритм работы (рис. 2)
Рис. 2 – Обобщенный алгоритм работы Мастера
Инициализация – инициализация библиотек, констант, переменных, включение и первичная настройка трансивера и порта для связи с ПУ. После инициализации наступает основной цикл работы программы.
Проверка условия «Радиоканал» – прослушивание радиоканала, при наличии сообщения в радиоканале запускается процедура приема и обработки сообщения.
Проверка условия «RX» – проверка наличия сообщений от пользовательского устройства (ПУ), при наличии сообщения запускается процедура его приема и обработки.
Обновление состояния терминалов – в системе предусмотрен специальный таймер - если на протяжении определенного времени какой-то из Терминалов не подавал признаков активности то Мастер «опускает» соответствующий флаг и извещает об этом ПУ.
Функция приема сообщения из радиоканала (рис 3)
Рис. 3 – Функция приема сообщения из радиоканала
Прием сообщения – прием и запись сообщения в буфер.
Определение типа сообщения – из записанного в буфер выделяется тип сообщения.
Проверка типа – возможно три типа сообщений принимаемых от Терминала: Сигнализация, Регистрация и Сообщение об изменении мощности.
Регистрация:
Поднятие флага об активности Терминал – Мастер помечает Терминала как активный.
Извещение ПУ – отправка пользовательскому устройству уведомления о регистрации нового Терминала.
Изменение мощности:
Изменение мощности сигнала для Терминала – из принятого сообщения извлекается уровень мощности на приемной стороне и Мастер корректирует мощность излучения, с которой он будет в будущем передавать сообщения этому Терминалу. Данное сообщение посылается Терминалов при (пере)регистрации [1] для первичной настройки уровня сигнала.
Сигнализация:
Определение источника – определение, от какого из подключенных к Терминалу датчиков поступила данная информация.
После определения источника выполняется проверка – есть ли для данного источника какое-то условие, за которым следует следить, при последующей проверке выясняется истинно ли это условие и если истинно принимаются соответствующие меры (извещение ПУ, включение звуковой сигнализации и др.).
Обновление показаний датчиков – Мастер обновляет сохраненную в памяти информацию о показании датчиков.
Обновление информации об активности – Мастер помечает Терминал от которого принято сообщения как активный и запускает таймер отсчитывающий время в течении которого Терминал должен передать подтверждение своей активности.
Функция приема сообщения от пользовательского устройства (рис. 4)
Рис. 4 - Функция приема сообщения от пользовательского устройства
Считывание сообщения – запись сообщения от ПУ в буфер.
Определение адресата – определение того, кому предназначается сообщение: следует ли Мастеру обрабатывать его самостоятельно или же передать его Терминалу.
Если сообщение предназначено Мастеру:
Выполнение команды – выполнение команды (например, считывание списка активных терминалов) поступившей от ПУ.
Отправка отчета ПУ – отправка результатов выполнения команды пользовательскому устройству.
Если сообщение предназначено Терминалу:
Формирование сообщения для передачи – подготовка сообщения для отправки Терминалу.
Передача сообщения по радиоканалу – включает в себя как непосредственно передачу сообщения, так и ожидание сообщения АСК и считывание из него полезной нагрузки.
Далее происходит проверка двух условий: было ли сообщение, переданное Терминалу запросом (т.е. ожидается ли какой-то ответ кроме АСК) и если да, был ли получен данный ответ. При отсутствии ответа на вопрос процедура повторяется (до 2-х раз, затем ПУ отправляетсясообщение об ошибке). Если ответ был получен, то ПУ отправляется отчет о выполнении его запроса.
Обработка полученных результатов – включает в себя обновление показаний датчиков (благодаря информации, загруженной в АСК) и, если потребуется, принятие мер по аналогии с функцией приема сообщения из радиоканала, а так же обновление списка активности Терминалов.
Алгоритмы Терминала
Обобщенный алгоритм работы (рис. 5)
Рис. 5 - Обобщенный алгоритм работы Терминала
Инициализация – аналогична такому же блоку в алгоритме Мастера;
Регистрация – процедура (пере)регистрации;
Проверка условия «Радиоканал» – прослушивание радиоканала, при наличии сообщения в радиоканале запускается процедура приема и обработки сообщения;
Снятие показаний датчиков – обновление показаний датчиков подключенных к адресной шине датчиков;
Проверка условия «Условие» – проверка на истинность условия, при котором следует известить Мастерао информации с датчиков;
Извещение Мастера – извещение о показании датчиков;
Проверка условия «Регистрация» – проверка таймера отсчитывающего время до следующей перерегистрации, если время истекло, запускается процесс перерегистрации.
Функция приема сообщения из радиоканала (рис. 6)
Рис. 6 - Функция приема сообщения из радиоканала Терминалом
Считывание сообщения в буфер – запись сообщения из радиоканала в буфер;
Выделение типа сообщения – выделения поля типа из буфера, от Мастера может прийти два типа сообщений: управление и запрос информации с датчиков.
При поступлении команды управления Терминал выполняет эту команду, передавая записанные в буфере команды управляемым устройствам.
При поступлении запрос на показания датчиков, выполняется опрос датчиков (Обновление показаний датчиков) и Передачу показаний Мастеру.
Сбрасывание таймера регистрации – т.к. Терминал подтвердил свою активность, он сбрасывает таймер отсчитывающий время до повторной регистрации;
Перезапись АСК – запись в полезную нагрузку АСК очередной порции показаний с датчиков.
Процедура регистрации (рис. 7а)
Рис. 7 – Процедура регистрации (а) и извещение Мастера (б)
Отправка сообщения о регистрации – отправка Мастеру заранее записанного в памяти сообщения о регистрации. Серым цветом блока обозначается то, что помимо повторов передачи, которые предпринимает сам трансивер в случае не удачной попытки, предусмотрен так же программный повтор.
Получение уровня сигнала из АСК – из принятого в ответ на регистрацию сообщения АСК Терминал определяет уровень принимаемого сигнала;
Отправка уровня принятого сигнала – Терминал отправляет Мастеру уровень принятого сигнала, на основании этих данных Мастер сможет скорректировать мощность излучения для повышения энергоэффективности;
Сбрасывание таймера регистрации – т.к. Терминал подтвердил свою активность, он сбрасывает таймер отсчитывающий время до повторной регистрации
Извещение Мастера (рис. 7б)
Эта процедура запускается, если показания одного из датчиков достигли определенного уровня, о котором должен быть извещен Мастер.
Формирование сообщения для передачи – формирование извещения для передачи его Мастеру.
Передача сообщения в радиоканал – передача Мастеру показаний датчиков.
Аппаратная часть
Как описывалось ранее [1], в устройстве будет использоваться следующие три модуля:
· Трансивер nRF24l01+ (рис. 9);
· Аппаратная платформа Arduino Pro Mini (рис. 8);
· Стабилизатор напряжения 3,3В.
Определим назначение выводов каждого из этих модулей (рис. 8 и 9):
· TX0, RXI – к интерфейсу обеспечивающему связь с пользовательским устройством (для Мастера);
· Для подключения трансивера выделим следующие контакты (АП - трансивер):
o 8 – CSN;
o 10 – CE;
o 11 – MOSI;
o 12 – MISO;
o 13 – SCK;
· Контакт GPIO 7 – адресная шина для подключения различных датчиков(для Терминала);
· Контакты GPIO под номерами 3, 5, 6, 9 являются ШИМ выходами (для Терминала);
· Контакты GPIO 2, 4 являются аналоговыми выходами (для Терминала);
· Контакты GPIO A0, A1 – для подключения сигнального светодиода и звукового зуммера (для Мастера).
Рис. 8 – Аппаратная платформа Arduino Pro Mini
Рис. 9 – Трансивер nRF24l01+
Таким образом, у Мастера остается большое количество не используемых контактов GPIO (рис. 8), которые в будущем можно задействовать для подключения дополнительных интерфейсов.
Следующим шагом является определение источников питания для каждого элемента устройства (таблица 1).
Таблица 1. Источники питания различных элементов (контакты VCC и GND)
Устройство |
Источник питания |
Аппаратная платформа |
Внешний источник питания |
Трансивер |
Стабилизатор напряжения |
Стабилизатор напряжения |
Внешний источник питания |
Сигнальный светодиод |
Аппаратная платформа |
Сигнальный зуммер |
Аппаратная платформа |
Теперь определим настройки и используемые функции модуля nRF24l0+ [2]:
· Тип модуляции: GFSK;
· Скорость передачи: 1 Мб/с;
· Количество попыток передать сообщения: 10;
· Время между попытками передать сообщения: 15 мс;
· Функция «Multiceiver»: Включена;
· Полезная нагрузка в сообщение ACK: Включена;
· Подтверждение приема (ARQ): Включено;
· Контрольная сумма: CRC-16;
· Номер частотного канала (по умолчанию): 76;
· Мощность излучения (по умолчанию): 0 дБм (1 мВт).
Для адресной доставки сообщений модуль nRF24l01+ оперирует так называемыми «трубами» (pipes) [2], которые по сути являются логическими каналами связи и определяются HEX-адресом и порядковым номером. Каждый трансивер использует две трубы для взаимодействия с сетью – одну трубу для приема, и другую для передачи. Номера используемых труб и HEX-адреса не изменяются и жестко «вшиваются» в узлы сети на этапе их перепрограммирования. Зададим HEX-адреса (таблица 2) и номера используемых труб (таблица 3) для всех предполагаемых узлов сети.
Таблица 2. HEX-адреса «труб»
Номер трубы |
HEX-адрес |
0 |
0xF0F1F2F3F0 |
1 |
0xF0F1F2F3F1 |
2 |
0xF0F1F2F3F2 |
3 |
0xF0F1F2F3F3 |
4 |
0xF0F1F2F3F4 |
5 |
0xF0F1F2F3F5 |
6 |
0xF0F1F2F3F6 |
Таблица 3. Распределение «труб» между узлами сети
Узел сети |
Труба передачи |
Труба приема |
Мастер |
1..6 |
0 |
Терминал 1 |
0 |
1 |
Терминал 2 |
0 |
2 |
Терминал 3 |
0 |
3 |
Терминал 4 |
0 |
4 |
Терминал 5 |
0 |
5 |
Терминал 6 |
0 |
6 |
Источники: