Проектирование программного обеспечения приемника для опроса датчиков параметров жизнеобеспечения. КП2-1. Реферат Объем курсовой работы составляет 29 страниц
Скачать 1.05 Mb.
|
Реферат Объем курсовой работы составляет 29 страниц. Ключевые слова: Arduino, приемник, жизнеобеспечение, nRF24L01, LCD 1602. Объектом исследования является приемопередатчик в системе жизнеобеспечения. Цель курсового проекта – создать устройство, выводящее данные о состоянии пульса человека и температуре в комнате. Для достижения цели курсового проекта и решения поставленных задач был проведён анализ технического задания, изучена элементная база созданного устройства, проведено макетирование узлов устройства и устройства в целом. Содержание Введение…………………………………………………………………….5 Анализ технического задания………………………………………….6 Общие сведения……………………………………………….…….6 Используемые модули и их характеристики……………….……..6 Требования к системе………………………………………………7 Структурная схема устройства………………………………………...8 Элементная база………………………………………………………...9 Описание элементов системы……………………………………...9 Проектирование программного обеспечения приёмника…………..13 Этапы разработки программного обеспечения……….…………13 Описание библиотек………………………………………………16 Алгоритмы……………………………………………………………..18 Макетирование………………………………………………………...19 Формат получаемых данных………………………………………… 20 Заключение………………………....……………………………………..21 Список использованной литературы…………………………………….22 Приложение А – Подключение LCD 1602………………...………….....23 Приложение Б – Подключение nRF24L01…………………………..…..25 Приложение В – Код программы……………….………………...……..26 Приложение Г – Структурная схема устройства………………...……..28 Приложение Д – Блок-схема алгоритма………..………………...……..29 Введение Жизнеобеспечение – комплекс систем и мероприятий, обеспечивающих сохранение и нормальное протекание жизни человека в космическом полете или других экстремальных ситуациях. В настоящее время важность системы жизнеобеспечения не подвергается сомнению. Возьмем, например, такую отрасль как космонавтика. Пребывание человека в космосе, особенно длительное, должно быть безопасным и комфортным. Это является одним из важнейших условий успешного выполнения любой программы. В состав системы жизнеобеспечения космонавта входят следующие системы: - система обеспечения газового состава; - система водообеспечения; - система санитарно-гигиенического обеспечения; - системы обеспечения питанием; - система обеспечения теплового режима и т.д. Так же без нее не обходится и медицина. Каждая современная больница оснащена аппаратами, предназначенными поддерживать жизнь человека, находящегося в критическом состоянии. Предусматриваются такие функции, как искусственная вентиляция легких, измерение пульса и т.п. В данном курсовом проекте разрабатывается система жизнеобеспечения, предназначенная для наблюдения за состоянием и поддержанием комфортного нахождения человека в больничной палате. Анализ технического задания Общие сведения Необходимо создать устройство, выводящее на табло данные, информирующие о состоянии пульса человека и температуре в комнате. Данное устройство можно использовать для отслеживания состояния пациента в больничной палате и поддержания комфортной для него температуры воздуха. Используемые модули и их характеристики Радиомодуль NRF24L01 Технические характеристики радиомодуля: - частота передачи/приема: 2.4ГГц; - расстояние передачи/приема: до 100м, в помещении - до 30 м; - скорость передачи: 250kbps, 1Mbps и 2Mbps; - модуляция: GFSK; - чувствительность приемника: -82 dBm; - максимальная выходная мощность: 0 dBm; - коэффициент усиления антенны: 2dBm; - количество каналов: 126; - интерфейс: SPI; - напряжение питания: 3.3В. Дисплей LCD 1602 Технические характеристики дисплея: - символьный тип отображения, есть возможность загрузки символов; - светодиодная подсветка; - контроллер HD44780; - напряжение питания 5В; - формат 16х2 символов; - диапазон рабочих температур от -20С до +70С, диапазон температур хранения от -30С до +80 С; - угол обзора 180 градусов. Требования к системе В соответствии с техническим заданием необходим создать устройство, которое будет выводить данные на дисплей, а так же разработать программу для приема информации от передатчика. Для реализации данного задания используются микро ЭВМ Arduino Nano, дисплей LCD 1602, радиомодуль nRF24L01. Так как проектируемое устройство является самостоятельной, конструктивно и функционально законченной единицей, то его сборка предполагается в отдельном корпусе, в котором смонтированы все элементы. Разработка программного обеспечения производится в среде IDE Arduino. Структурная схема устройства В приложении 3 и на схеме ниже представлена структурная схема устройства. На схеме изображён узел связи. Основным управляющим элементом является Arduino Nano, к нему подключен радиомодуль nRF24L01, который принимает данные от передатчика, и дисплей LCD 1602, который выводит эти данные. Элементная база Правильно выбранная элементная база [1] обеспечивает снижение вероятности появления неполадок, высокие результаты и надежность функционирования. Модули, использованные в данном случае, имеют определенные условия эксплуатации и ряд технических характеристик, приведённых в таблице ниже. Таблица 1 – Условия эксплуатации элементов системы
Описание элементов системы Управляющая плата Arduino Nano Построена на микроконтроллере ATmega328, имеет 32 кБ флеш-памяти для хранения кода программы (2 кБ используется для хранения загрузчика), 2 кБ оперативной памяти. Arduino Nano может получать питание через подключение Mini-B USB, или от нерегулируемого 6-20 В (вывод 30), или регулируемого 5 В (вывод 27), внешнего источника питания. Платформа программируется посредством ПО Arduino. Рисунок 1 – Внешний вид Arduino Nano Радиомодуль nRF24L01 На плате nRF24L01 [2] встроен демодулятор, синтезатор частот и усилитель сигнала. Дальность действия модуля Arduino nRF24L01 до 30 метров, а в версии с усилителем и антенной до 1000 метров в прямой видимости. Модуль может использовать 127 каналов связи, отличающихся частотой сигнала — от 2,4 ГГц до 2,483 ГГц. Скорость беспроводного соединения можно настраивать: 250kbps, 1Mbps или 2Mbps. С помощью nRF24L01 можно создать многоканальную связь. Т.е. можно объединить в общую сеть до 7 устройств, которые могут одновременно принимать и отправлять сигнал. Модуль работает по интерфейсу SPI, соответственно подключать модуль nRF24L01 следует к определенным портам микроконтроллера. Для наладки связи между двумя Ардуино, потребуется, как минимум два беспроводных радио модуля. Одну плату нужно настроить, как приемник сигнала (receiver), а вторую, как передатчик (transmitter). Рисунок 2 – Внешний вид nRF24L01 Дисплей LCD 1602 Жидкокристаллический дисплей (Liquid Crystal Display) LCD 1602 является хорошим выбором для вывода строк символов в различных проектах. Основывается на базе контроллера HD44780. Размерность - 16x02 (т.е. по 16 символов в двух строках). Разрешение же самих символов - 5x8 точек. Большинство дисплеев не имеют поддержку кириллицы, имеют её лишь дисплеи с маркировкой CTK. Данную проблему можно попытаться частично решить через создание собственных символов и использования кодировок. Рисунок 3 – Внешний вид LCD 1602 Проектирование программного обеспечения приёмника Этапы разработки программного обеспечения Разработка программного обеспечения проводилась в три этапа и рассматривалось на примере подключения к Arduino Uno. Первый этап – подключение дисплея к плате Arduino и проверка его работоспособности. Плата Arduino подключается к компьютеру через USB провод. Все операции производятся в среде разработки Arduino IDE. Рисунок 4 – Пример подключения LCD 1602 Схема подключения приведена в приложении 1. Код программы для вывода на экран фразы «Osnovy progr v IK» (См. ниже). #include LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup(){ lcd.begin(16, 2); // Задаем размерность экрана lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки lcd.print("Osnovy progr"); // Выводим текст lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки lcd.print("v IK"); // Выводим текст } void loop(){ } Второй этап: подключение и тестирование радиомодуля nRF24L01. Рисунок 4 – Пример подключения nRF24L01 Схема подключения приведена в приложение 2. Код программы для общения между приемником и передатчиком (См. ниже). #include #include // создаем экземпляр класса для трансивера: RH_NRF24 nrf24; void setup() { Serial.begin(9600); while (!Serial); // ждем подключения последовательного порта if (!nrf24.init()) Serial.println("init failed"); // "инициализациянеудалась" if (!nrf24.setChannel(1)) // установка канала Serial.println("setChannel failed"); // "не удалось выполнить функцию setChannel()" if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm)) Serial.println("setRF failed"); // "не удалось выполнить функцию setRF()" } void loop() { Serial.println("Sending to nrf24_server"); // "Отправкаданныхна nrf24_server" // отправляем сообщение на nrf24_server: uint8_t data[] = "Hello World!"; // "Привет, мир!" nrf24.send(data, sizeof(data)); nrf24.waitPacketSent(); // теперь ждем ответа: uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (nrf24.waitAvailableTimeout(500)) { // ответное сообщение уже должно прийти: if (nrf24.recv(buf, &len)) { Serial.print("got reply: "); // "получилиответ: " Serial.println((char*)buf); } else { Serial.println("recv failed"); // "не удалось выполнить функцию recv()" } } else { Serial.println("No reply, is nrf24_server running?"); // "Ответа нет, nrf24_server вообще запущен?" } delay(400); } Третий этап: сборка конечного устройства. Схемы подключения приведены в приложении А и приложении Б. Текст программы приведен в приложении В. Описание библиотек Библиоткека LiquidCrystal Данная библиотека [3] позволяет Ардуино управлять различными жидкокристаллическими дисплеями (LCD). Функции: LiquidCrystal - Создает переменную типа LiquidCrystal. Управление LCD-экраном может осуществляться по 4-х или по 8-проводной схеме. В первом случае следует пропустить параметры d0-d3, оставив соответствующие выводы не подключенными. Вывод RW можно также не подключать к Ардуино и соединить его напрямую с землей. В этом случае параметр rw в функции можно не указывать. begin() - инициализирует интерфейс для взаимодействия с LCD-экраном и задает размеры (ширину и высоту) области вывода экрана. При работе с LCD-дисплеем, функция begin() должна вызываться первой и предшествовать другим командам из библиотеки LiquidCrystal. setCursor() - Позволяет задать позицию курсора на LCD-экране; т.е. устанавливает позицию, в которой будет выводиться последующий текст. print() - выводит текст на LCD-экран. Библиотека SPI Последовательный периферийный интерфейс (SPI) - это синхронный протокол последовательной передачи данных, используемый для связи микроконтроллера с одним или несколькими периферийными устройствами. Интерфейс SPI отличается относительно высокой скоростью и предназначен для связи близко расположенных устройств. Он также может использоваться для взаимодействия двух микроконтроллеров. Библиоткека RadioHead Функции: nrf24.init() – вызов функции инициализации. nrf24.setChannel() – выбор канала. nrf24.setRF() – настройка скорости обмена. nrf24.send(data, sizeof(data)) – отправление в эфир сообщения из «data», имеющее его собственный размер. nrf24.waitAvailableTimeout() – устанавливает промежуток между сигналами. nrf24.waitPacketSent() – ожидание отправления пакета. Алгоритмы Программа содержит секции (модули) setup() и loop(). В секции setup(): - задается скорость обмена данными; - задается номер канала и проверяется его работоспособность. В секции loop(): - задается размерность экрана; - проверяется, передается ли сигнал; - выполняется вывод информации на дисплей; - устанавливается время промежутков между сигналами. Блок-схема алгоритма приведена в приложении Д. 1 и 2 элементы блок-схемы относятся к секции setup(). Остальные – к секции loop(). Макетирование Макетирование происходило в несколько этапов. На первом этапе производилось подключение дисплея LCD 1602 к Arduino Nano на макетной плате по схеме, приведенной в приложении А. Так же производилось тестирование работоспособности дисплея. На втором этапе к Arduino был подключен радиопередатчик nRF24L01 по схеме, приведенной в приложении В. Рисунок 5 – Фото готового устройства Формат получаемых данных Информационная посылка для получения данных о температуре имеет вид: Таблица 2 – Информационная посылка «Температура»
Здесь верхняя строка содержит нумерацию байтов, а нижняя –расшифровку их смыслового наполнения: Z – знак температуры (+ или -); Т1, Т2 – символы, отображающие температуру. Информационная посылка для получения данных о пульсе имеет вид: Таблица 3 – Информационная посылка «Пульс»
Расшифровка наполнения нижней строки: P1, P2, P3 – символы, отображающие пульс. И в первом, и во втором случае для передачи необходимо подготовить информационный пакет, содержащий 3 байта. Заключение В результате выполнения курсового проекта были выполнены задачи, поставленные в техническом задании. Было создано устройство, способное выводить на дисплей данные, полученные от передатчика. Система, разработанная в рамках курсового проекта, является прототипом системы жизнеобеспечения. Расширение функциональных возможностей может быть осуществлено путем добавления новых датчиков и модулей. Список использованной литературы 1. Платформа Arduino [Электронный ресурс]. URL: http://arduino.ru/ 2. Описание модуля nRF24L01 [Электронный ресурс]. URL: http://wikihandbk.com/wiki/Arduino:Примеры/Гайд_по_использованию_радиочастотного_трансивера_nRF24L01_(2,4_ГГц)_с_Arduino 3. Подробное описание библиотек Arduino [Электронный ресурс]. URL: https://doc.arduino.ua/ru/prog/Libraries 4. Сайт Arduino-DIY [Электронный ресурс]. URL: http://arduino-diy.com/ Массимо, Б. Arduino для начинающих волшебников [Текст]/Б. Массимо- М.:VSD, 2012. – 128 с.
Приложение А – Подключение LCD 1602 Таблица 4 – Подключение LCD 1602 Cхема подключения 1
+5V Приложение Б – Подключение nRF24L01 Таблица 5 – Подключение nRF24L01
Cхема подключения 2
Приложение В – Текст программы #include #include #include LiquidCrystal lcd(7,6,5,4,3,2); // (RS, E, DB4, DB5, DB6, DB7) RH_NRF24 nrf24; void setup() { Serial.begin(9600); while (!Serial); if (!nrf24.init()) Serial.println("init failed"); if (!nrf24.setChannel(5)) // установка канала Serial.println("setChannel failed"); // ошибка if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm)) Serial.println("setRF failed"); } void loop() { { lcd.begin(16, 2); // Задаем размерность экрана Serial.println("Sending to nrf24_server"); uint8_t data[] = "zapros t"; nrf24.send(data, sizeof(data)); nrf24.waitPacketSent(); uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (nrf24.waitAvailableTimeout(5000)) { if (nrf24.recv(buf, &len)) { lcd.setCursor(0, 0); lcd.print("temperatura:"); lcd.println((char*)buf); Serial.println((char*)buf); } else { Serial.println("recv failed"); } } else { Serial.println("No reply, is nrf24_server running?"); } delay(1000); } { lcd.begin(16, 2); // Задаем размерность экрана Serial.println("Sending to nrf24_server"); uint8_t data[] = "zapros puls"; nrf24.send(data, sizeof(data)); nrf24.waitPacketSent(); uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (nrf24.waitAvailableTimeout(5000)) { if (nrf24.recv(buf, &len)) { lcd.setCursor(0, 1); lcd.print("puls:"); lcd.println((char*)buf); Serial.println((char*)buf); } else { Serial.println("recv failed"); } } else { Serial.println("No reply, is nrf24_server running?"); } delay(1000); } } Приложение Г – Структурная схема устройства Приложение Д – Блок-схема алгоритма |