Разработка комплекса приложений по обеспечению безопасности и управлению событиями
Существующие системы автоматизации и обеспечения безопасности и их методы реализации. Современные микроконтроллеры и их анализ для построения прототипа системы. Разрабатываемые методы, их реализация и особенности использования для управления событиями.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.08.2018 |
Размер файла | 1,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Для реализации данной возможности необходимо сделать пульт дистанционного управления. Возможность использования пульта на основе инфракрасного излучения, не может быть реализованная, т.к. ограничивается зона действия. Использование пульта на основе передачи по радиоканалу, возможно на различных частотах, от 315МГ до 5ГГ. Некоторые из этих частот, очень сильно нагружены в частности 2.4ГГ, 5ГГ сетями WIFI. Оптимальная частота для использования является 433МГ, она обладает достаточной приникающей силой, и может обеспечить работу дистанционного пульта в любом месте помещения. Канал будет выбран на основе сканирования занятости данной частоты и будет фиксирован. Необходимо обеспечить помехоустойчивую передач данных, во избежание случайного воздействия из вне. Передача данных будет обеспечена с использованием проверки целостности данный при помощи алгоритма контрольной суммы, в частности циклически избыточного кода (Cyclic redundancy check, CRC).
Зарезервируем каналы для:
1. Поканальное включения освещения
2. Отключение автоматического режима освещения
3. Отключение всех источников освещения.
4. Отключение автоматического режима управления механизированными занавесками.
5. Ручной режим управления занавесками
Использования радио пульта, сильно упростит взаимодействие с системой, т.к. не нужно использовать только стационарно установленный, главный пульт. Обработку данных, расчет контрольной суммы и отправку по радиоканалу можно реализовать на микроконтроллере с небольшими характеристиками и низким энергопотреблением т.к. важную роль играет автономность дистанционного пульта. ATmega32U4 подходит по всем параметрам.
Система сигнализации
Важную роль в системе обеспечения безопасности играет сигнализация. Она помогает в автоматическом режиме отслеживать несанкционированное проникновение и осуществлять контроль доступа к данному помещения.
Работа данный системы базируется на датчиках движения, которые должны быть размещены к каждом контролируемом помещении и герконовых концевиках на окнах и дверях, которые могут быть соединены в параллельном режиме.
Постановка на сигнализацию и снятие с неё будет реализована при помощи NFS меток или ввода пароля. NFS метка является пассивным устройством и работает без питания, она должна попасть в область видимости приёмника для активации. Она может обеспечить достаточную стойкость к взлому, каждая из них содержит уникальный номер и определенное количество информации, которое считывается бесконтактным путём. Существует несколько типов меток, отличаются они размером хранимой информации и скоростью её передачи. Организация памяти осуществлена по типу секторов с фиксированной длинной. Первый сектор содержит в себе уникальный номер карты, размещение контрольной информации в последующих нескольких секторах, обеспечивает быструю скорость чтения. Для создания концепта применим упрощенную систему проверки уникального номера карты. NFS приёмник должен быть установлен перед входом в помещение. Главный пульт и клавиатуру необходимо установить внутри помещения. Таким образом реализуется возможность отключение режима охраны либо при помощи NFS метки, либо с клавиатуры, но в этом случае будет срабатывание системы на предмет проникновения. Она даст определенную задержку (не более 15 секунд) для того чтобы отключить режим охраны при помощи ввода пароля с главного пульта. Попытки на ввод верного пароля, будет всего лишь три, после чего система переходит в режим полной блокировки, срабатывает звуковая индикация, и разблокировка система будет возможна только при помощи специальной тревожной метки NFS которая должна хранится в защищенном месте. Сигнализация должна содержать звуковую сирену (звуковая индикация), которая должна срабатывать при активации режима тревога.
Данное исполнение системы является классическим, может быть совместимо и подключено на пульт вневедомственной охраны. Достаточно простая схема и низкая цена реализации может конкурировать с более дорогими аналогами, представленными на рынке.
Главный пульт
Наличие главного пульта необходимо. С помощью него, можно контролировать различные функции системы и осуществлять ввод пароля для снятия\установки систему в режим охраны. Функциями главного пульта являются:
1. Ввод пароля для активации, деактивации режима охрана
2. Управление автоматическим освещением
3. Автоматическое управление механизированных штор
4. Отключение режима обнаружения протечки
5. Смена основного пароля
6. Отображение состояние системы, температуры на улице.
Главный пульт представляет из себя клавиатуру размером 4х4 и дисплеем с параметрами шестнадцать символов на две строки. В режиме ожидания на первой строке постоянно отображается текущее время. На второй строке, в режиме очереди, отображаются параметры системы. При длительном нажатии на клавишу «#» система входит в режим установки пароля, охранного режима.
Обнаружение газов
Утечка бытого газа может оказать негативные последствия, вплоть до его воспламенения. Современные кухонные, бытовые приборы, которые работают с бытовым газом, при отсутствии горения, самостоятельно перекрывают подачу, но если утечка образовалась на магистрали до прибора, то никак идентифицировать её невозможно. Ощущение наличия в помещение запаха бытового газа, говорит о большой его концентрации и требует немедленного проветривания помещения. Система обнаружения газов идентифицирует наличие в воздухе даже малой концентрации.
В прототипе системы мы будем использовать датчик, построенный на основе газоанализатора MQ2. Он позволяет обнаружить наличие в окружающем воздухе углеводородных газов (пропан, метан, н-бутан), дыма (взвешенные частицы, являющиеся результатом горения), водорода. Таким образом так же можно обнаружить наличие задымления в помещении, что может свидетельствовать о пассивном неконтролируемом горение. Работа датчика основывается на химической реакции, которая проходит при температуре 50 градусов Цельсия. Для его разогрева используется нагревательный элемент, который в течении нескольких десятков секунд подготавливает датчик. В это время его показания отличаются от истинных, поэтому на момент нагрева система не работает. Отключение данной системы не предусмотрено.
Выбор главного контроллера
Проанализировав системы, которые требуют реализации можно предположить, что микроконтроллер типа ATmega2560 будет иметь достаточную мощность и количество портов ввода\вывода, интерфейсов для реализации системы. Можно выбрать отладочную плату компании Arduino MEGA (Рис 1.4) которая базируется на выбранном микроконтроллере, а также имеет встроенные преобразователь уровня логического сигнала. Плата имеет 54 цифровых входа/выходов (14 из которых могут использоваться как выходы ШИМ), 16 аналоговых входов,4 последовательных порта UART, кварцевый генератор 16 МГц, USB коннектор, разъем питания, разъем ICSP и кнопка перезагрузки. Размер flash памяти составляет 256Кбайт (из которых 8Кбайт занимает программный загрузчик), 8Кбайт оперативной памяти и 4 Кбайта энергонезависимой памяти.
Рис 1.4 - Отладочная плата Arduino на базе микроконтроллера ATmega2560
Модель системы
На основе типового плана помещения и описания всех модулей системы необходимо построить наглядную графическую модель отображающую все компоненты системы и возможное их размещение. Подключение всех модулей предполагается проводным путём, т.к. размер системы достаточно мал. Предполагается использование модели для построения макета и проверки работоспособности, отказоустойчивости системы. На данной схеме (Рис 1.5) наглядно видно фактическое размещение всех компонентов системы на типовом плане.
Рис 1.5 - Физическое возможное расположение элементов
безопасность управление событие микроконтроллер
4. Разработка программного обеспечения
Разделим этап программирования, на реализацию методов и сведение их в единую систему. Написание программного обеспечения для микроконтроллера производится на языке С++. Программного обеспечения представляет собой бесконечный цикл, который постоянно будет выполняться на микроконтроллере. Для упрощения чтения кода, воспользуемся файлами, которые идут в комплекте к отладочной плате Arduino.
Охранная система
Для создания метода, который должен включаться по условию создадим переменную логического типа. Изменение данной переменой влияет на запуск метода охранной системы в теле общего цикла bool sign_status;
Необходимо задать пароль для первоначально запуска системы, для этого создадим массив с типом byte, количество элементов будет являться размерностью пароля. В последствие данный пароль можно будет изменить.
byte password[4] = { 9, 8, 3, 0};
Количество символов фиксировано.
Для чтения NFS меток, необходимо задать массив, в котором будет храниться значение, записанные в шестнадцатеричной форме, уникального номера карты UID.
byte uidCard[4] = {0x00, 0x54, 0x7C, 0x51};
При блокировке системы потребуется специальная карта, значения её UID которой, будет храниться в массиве.
byte reservcarduid[4] = { 0x00, 0x54, 0x7C, 0x55 };
Функция охраны, заключается, в постоянной проверке состояние сигнала с датчиков движения и герконовых концевиков. Для активации режима тревоги создана переменная alert типа bool.
Для удобства обращения к конкретным портам микроконтроллера, которые идут от датчиков движения и геконовых концевиков, опишем их.
//пины датчиков движения
#define hollpirpin 22 // коридор
#define livingpirpin 23 //гостиная
#define kitchenpirpin 24 //кухня
#define bathpirpin 25 //санузел
#define gerkonpin 26 //параллельное соединение герконовых концевиков
Опишем непосредственно сам метод проверки.
bool alert;
if (digitalRead(hollpirpin) == HIGH || digitalRead(livingpirpin) == HIGH || digitalRead(kitchenpirpin) == HIGH || digitalRead(bathpirpin) == HIGH || digitalRead(gerkonpin) == HIGH)
{
alert = true;
mainlcd.setCursor(0, 0);
mainlcd.print("Alert is on");
Функция digitalRead описывается в файле wiring_digital.c, производит чтение напряжения с порта микроконтроллера, в диапазоне от 0 до 254. Номер порта необходимо ей передать, и возвращает значение типа int.
Используем её для проверки наличия логической единице на контактах датчиков движения. Поскольку датчик при обнаружении движения выдаёт логическую единицу с определенной задержкой, это исключает вариант пропуска сигнала микроконтроллером. После чего активируется режим тревоги.
Объект mainlcd класса LiquidCrystal_I2C является основным дисплеем, расположенным на главном пульте вместе с клавиатурой. При создании объекта необходимо передать адресс дисплея на шине I2С, колличество символов в строке и колличество строк
LiquidCrystal_I2C mainlcd(0x3F, 16, 2);
Функция SetCursor, устанавливает курсор на определенную позицию дисплея. Ей необходимо передать номер строки и номер символа.
Функция print печатает символы на выбранном объекте класса, передаётся как строка, так и ссылка на переменную.
Данные функции описываются в файле LiquidCrystal_I2C.cpp
При активации режима тревоги запускается таймер на 10 секунд, за время которого необходимо ввести пароль при помощи клавиатуры на главной панели.
if (alert == true && timer < 10) {
if (millis()%1000==0) {
timer++;
}
Переменная timer объявлена ранее
byte timer = 0;
Функция millis возвращает значение типа long а именно количество миллисекунд с момента начала выполнения программы на микроконтроллере. При работе микроконтроллера непрерывно в течение 30-50 дней, данное значение обнуляется.
Если значение таймера истекло, то включается режим паники и активируется сирена.
if (alert == true && timer >= 10) {
syslock();
}
Функция syslock блокирует систему.
{
mainlcd.clear();
mainlcd.noBlink();
mainlcd.setCursor(0, 0);
mainlcd.print("System LOCK");
bool passcorrect = false;
while (passcorrect == false)
{
tone(beeppin, 500);
if (!mfrc522.PICC_IsNewCardPresent()) {
return;
}
if (!mfrc522.PICC_ReadCardSerial()) {
return;
}
if (reservcarduid[0] == mfrc522.uid.uidByte[0] && reservcarduid[1] == mfrc522.uid.uidByte[1] && reservcarduid[2] == mfrc522.uid.uidByte[2] && reservcarduid[3] == mfrc522.uid.uidByte[3])
{
passcorrect = true;
noTone();
}
}
}
Функция clear, вызванная через объект mainlcd, выключает на дисплее главного экрана все ранее задействованные пиксели.
Функция noBlink, вызванная через объект mainlcd, останавливает мерцания пикселей
Далее запускается цикл проверки совпадения записанного уникального номера экстренной карты и карты, которая была поднесена к приёмнику
Выход из данного цикла осуществляется по условию если passcorrect равно логической истине.
Объект nfsreader класса MFRC522 является считывателем NFS меток, который устанавливается перед входом в помещение. Модуль MFRC522 подключается к микроконтроллеру, через интерфейс SPI. Функция PICC_IsNewCardPresent проверяет считанную карту на предмет ранее считанных карт. PICC_ReadCardSerial считывает уникальный номер UID в массив uid.uidByte. После производится по элементное сравнение массивов и, если они одинаковы это подтверждается логической единицей и цикл прекращается. Снимается блокировка системы и требуется повторное введение пароля на клавиатуре, если повторно будет ведено 3 раза подряд неверный пароль, система вновь перейдёт в режим блокировки.
Для проверки ввода пароля необходимо на главной панели нажать на определённую клавишу, если система не находится в режиме блокировки, тогда будет исполнена функция проверки пароля checkpassword. Она реализует 3 попытки на ввод верного пароля, если количество превышает, то система переходит в режим блокировки, если пароль верный, то система снимает охрану с помещения и запускаются функции автоматизации. Таким образом невозможно заблокировать систему за пределами контролируемого помещения и существует защита от случайной блокировки.
Необходимо было реализовать отмену операции ввода пароля, при случайном нажатие клавиши, активирующей ввод.
int pressKey = customKeypad.getKey();
if (pressKey == '*')
{
mainlcd.clear();
mainlcd.setCursor(0, 0);
mainlcd.print("Cancel");
delay(500);
passcorrect = true;
mainlcd.noBlink();
mainlcd.clear();
}
Это реализовано при помощи клавише на клавиатуре, которая не участвует в вводе пароля. Более подробно о главной панели и клавиатуре будет изложено в соответствующем разделе.
Как только массив с введенными, с клавиатуры, знаками заполняется, выполняется проверка соответствия каждого элемента массива текущему паролю.
if (n == 4 && i < 4) {
if (enterpassword[0] == password[0] && enterpassword[1] == password[1] && enterpassword[2] == password[2] && enterpassword[3] == password[3])
{
mainlcd.clear();
mainlcd.setCursor(0, 0);
mainlcd.print("Password OK");
delay(500);
mainlcd.clear();
passcorrect = true;
sign_status =!sign_status;
mainlcd.noBlink();
delay(10000);
} else
{
mainlcd.clear();
mainlcd.setCursor(0,0);
mainlcd.print("Wrong Password");
delay(500);
mainlcd.clear();
mainlcd.setCursor(0,0);
mainlcd.print("Press Password");
n = 0;
i++;
}
}
Если пароль верный, то на экран выводится подтверждение, изменяется статус режима охраны, далее контроллер ожидает 10000милисекунд (10 секунд) и прекращает выполнение этого цикла. Задержка добавлена для того чтобы после активации режима охраны, было время для того чтобы покинуть контролируемое помещении. Если введенный пароль неверен, то на дисплее появится соответствующее уведомление, система будет ожидать ввод нового или отмены текущей операции, при этом счётчик попыток увеличивается. Если число попыток превысило три, то включается режим блокировки, описанный выше. Счетчик попыток обнуляется, позволяя после снятия блокировки вновь ввести пароль.
if (i == 3)
{
syslock();
i = 0;
passcorrect = true;
}
Для смены основного пароля предусмотрена функция setpassword.
Функция поддерживает установки пароля как из чисел, так и из символов, предусмотренные клавиатурой, кроме «*», т.к. данный символ отвечает за отмену текущей операции.
bool passok = false;
mainlcd.clear();
mainlcd.setCursor(0,0);
mainlcd.print("Set Password");
byte n = 0;
while (passok == false)
{
mainlcd.setCursor(n, 1);
mainlcd.blink();
int pressKey = customKeypad.getKey();
if (pressKey == '*')
{
mainlcd.clear();
mainlcd.setCursor(0, 0);
mainlcd.print("Cancel");
delay(500);
passok = true;
mainlcd.noBlink();
mainlcd.clear();
}
if (pressKey && n < 4)
{
mainlcd.setCursor(n, 1);
mainlcd.print("*");
pressKey = pressKey - '0';
password[n] = pressKey;
n++;
}
if (n == 4)
{
passok = true;
mainlcd.noBlink();
mainlcd.setCursor(0, 1);
mainlcd.print("Done");
delay(500);
mainlcd.clear();
}
}
После начало функции, выполняется цикл, условием выходом из которого является успешная операция ввода нового пароля, либо отмена действия. После установки пароля, система уведомит об успешной операции при помощи дисплея. Так же для удобства реализована возможность отображения позиции вводимого знака в пароле при помощи функции blink объекта mainlcd.
Управление светом
Для автоматического управления светом, создадим проверку статуса включения в основном цикле.
if (autolight == true)
{
autoLight();
}
Активация функции проверяется состоянием переменной типа bool.
bool autolight = false;
После запуска микроконтроллера статус системы: выключена.
Создадим переменную типа int для хранения показаний с датчика уличной освещенности.
int countlight = analogRead(lightres);
Функция analogRead производит чтение напряжения с порта микроконтроллера и выдаёт его в диапазоне от 0 до 1023 типа int. Номер передаётся функции. Производим сравнение значения с датчика освещенности и верхнего порога освещенности. Управление замыканием, размыканием контактов сети 220 Вольт осуществляется при помощи электромагнитного реле с гальванической развязкой. Реле переходит в положение включено если на сигнальный контакт подать логический ноль. При логической единице реле отключается.
if (countlight > max_light)
{
if (digitalRead(kitchenpirpin) == HIGH)
{
digitalWrite(kitchenlight, LOW);
} else {
digitalWrite(kitchenlight, HIGH);
}
if (digitalRead(livingpirpin) == HIGH)
{
digitalWrite(livinglight, LOW);
} else {
digitalWrite(livinglight, HIGH);
}
}
Верхняя граница указывается ранее.
int max_light = 100;
Если значение с датчика больше неё, микроконтроллер начинает автоматическое управление в помещениях с окнами. Функция digitalWrite позволяет подавать на порт микроконтроллера напряжение, для этого необходимо передать номер порта и напряжения заданное от 0 до 254 (от 0 до 5 воль соответственно). Параметр LOW означает логический ноль или 0 для функции. Параметром HIGH обозначается логическая единица или 254 для функции. Если значение меньше верхней границы, то источники света, в помещение с окнами, отключаются. Управление источниками света, актуально только в помещении с окнами на улице, поэтому санузел и коридор не зависит от уличной освещенности.
if (digitalRead(hollpirpin) == HIGH)
{
digitalWrite(holllight, LOW);
} else {
digitalWrite(holllight, HIGH);
}
if (digitalRead(bathpirpin) == HIGH)
{
digitalWrite(bathlight, LOW);
} else
{
digitalWrite(bathlight, HIGH);
}
При переходе системы в ручной режим, управление осуществляется с дистанционного радио пульта описывается в соответствующем разделе.
Система слежения за утечки газа
За статус системы отвечает переменная типа bool. Изменить состояние можно только с главного пульта.
bool autowatertap = false;
За текущее положение кранов отвечает переменная типа bool.
bool watertap = false;
При первоначальном запуске микроконтроллера, необходимо вручную перевести краны в состояние закрыто
int countwater = digitalRead(watersensor);
if (countwater < 200 && watertap == true)
{
digitalWrite(openwatertap, LOW);
delay(10000);
watertap = false;
digitalWrite(openwatertap, HIGH);
}
if (countwater > 200 && watertap == false)
{
digitalWrite(closewatertap, LOW);
mainlcd.setCursor(0, 1);
mainlcd.print("Water leak!");
tone(beeppin, 500);
delay(10000);
watertap = true;
digitalWrite(closewatertap, HIGH);
}
Изначально производиться чтение с датчика протечки. После идёт сравнение с определенным значением, которое обозначает наличие воды на датчике, полученным при калибровке. При обнаружении утечки, система информирует об этом при помощи дисплея, и если состояние крана «Открыто», то система подаёт сигнал на электромагнитное реле и сервопривод начинает движение на закрытие. В функции предусмотрена задержка перемещения привода между крайними положениями, которая указывается в документации к механизированному крану.
Управление механизированными занавесками
Для управления механизированными занавесками необходимо описать функцию управления шаговым двигателем. Особенность шагового двигателя в подаче напряжения на одну определенную катушку. Направление движения возможно изменить путём смены последовательности работы катушек.
Для работы с шаговом двигателем необходимо создать объект класса.
AccelStepper blindstepper(50, 47, 49, 46, 48);
В передаваемых параметрах содержится информация о количестве шагов в одном полном обороте двигателя и контактов микроконтроллера к которым подключены сигнальные провода управляющего драйвера. Так же необходимо задать переменную, которая будет отвечать за выполнение автоматического регулирования и текущее положение.
bool blindposition = false;
bool autoblind = false;
Её проверка будет описано в теле главного цикла. Всего реализовано 3 режима работы по датчику освещенности.
Режим, когда прямые солнечные лучи попадают на датчик, в этом случае шторы закрываются. Проверка значения полученного с датчика освещенности осуществляется в сравнение с заранее заданными параметрами верхне границы освещенности и нижней. Верхняя это граница, между прямыми попаданиями солнечных лучшей и просто светового потока в светлое время суток. Нижняя это граница между сумерками и обычной освещенностью.
int min_light = 500; // нижний порог освещенности
int countlight = analogRead(lightres);
if (countlight < max_light && blindposition == false)
{
blindstepper.enableOutputs();
blindstepper.runToNewPosition(50);
blindstepper.disableOutputs();;
blindposition = true;
}
if (countlight < min_light && countlight > max_light && blindposition == true)
{
blindstepper.enableOutputs();
blindstepper.runToNewPosition(0);
blindstepper.disableOutputs();
blindposition = false;
}
if (countlight > min_light && blindposition == false)
{
blindstepper.enableOutputs();
blindstepper.runToNewPosition(50);
blindstepper.disableOutputs();
blindposition = true;
}
Функция enableOutputs объекта blindstepper активирует пины обозначенные в объекте, как выхода, runToNewPosition активирует движение шагового двигателя на определённое количество шагов. В данном случает количество равно полному обороту двигателя. Функция disableOutputs отключает взаимодействие микроконтроллера с пинами, таким образом драйвер отпускает катушку.
Тело главного цикла
Работа микроконтроллера, осуществляется при помощи главного цикла, который будет выполняться всё время, пока есть питание.
Самым первым алгоритмом, который выполняется в главном цикле идёт проверка нажатия на клавиатуру на главном пульте. При нажатие определённой клавиши происходит действие и уведомление при помощи дисплея.
char pressKey = customKeypad.getKey();
if (pressKey) {
switch (pressKey)
{
case 'A':
checkpassword();
break;
case 'B':
if (sign_status == false)
{
autolight =!autolight;
if (autolight == true)
{
mainlcd.clear();
mainlcd.setCursor(0, 0);
mainlcd.print("Autolight is ON");
delay(500);
mainlcd.clear();
}
else
{
mainlcd.clear();
mainlcd.setCursor(0, 0);
mainlcd.print("Autolight is OFF");
delay(500);
mainlcd.clear();
}
}
break;
case 'C':
if (sign_status == false)
{
autoblind =!autoblind;
if (autoblind == true)
{
mainlcd.clear();
mainlcd.setCursor(0, 0);
mainlcd.print("Autoblind is ON");
delay(500);
mainlcd.clear();
}
else
{
mainlcd.clear();
mainlcd.setCursor(0, 0);
mainlcd.print("Autoblind is OFF");
delay(500);
mainlcd.clear();
}
}
break;
case 'D':
if (sign_status == false)
{
autowatertap =!autowatertap;
if (autowatertap == true)
{
mainlcd.clear();
mainlcd.setCursor(0, 0);
mainlcd.print("AutoWTap is ON");
delay(500);
mainlcd.clear();
}
else
{
noTone(beeppin);
mainlcd.clear();
mainlcd.setCursor(0, 0);
mainlcd.print("AutoWTap is OFF");
delay(500);
mainlcd.clear();
}
}
break;
case '*':
setpassword();
}
}
Далее идёт проверка функций автоматизации на активацию и выполнение их.
if (autolight == true)
{
autoLight();
}
if (sign_status == true)
{
signalise();
}
if (autoblind == true)
{
autoBlind();
}
if (autowatertap == true)
{
autoWatertap();
}
После идёт работа функции анализатора утечки газа. Так как работа датчика основывается на химическом реакции, протекающей при 50 градусах, датчику нужен нагрев. Он производится автоматически при подключении питания, в течении определенного времени. В период нагрева датчик выдаёт некорректные показания, поэтому на время нагрева датчика, данная функция не работает. Время нагрева 180 секунд. По истечении время таймера, показания с датчика сравниваются со значением, полученным при калибровке датчика. Если значение выше, активируется сирена с периодичностью, переданной третьим параметром функции tone.
if (timermq2 < 180) {
if (millis() %1000==0) {
timermq2++;
}
} else {
int countmq2 = analogRead(mq2sensor);
if (countmq2 > 420) {
tone(beeppin, 500, 90);
}
}
Далее выполняется работа радио приёмника. Создание объекта radioRX класса iarduino_RF433_Receiver radioRX(3);
В качестве параметра, передаётся номер пина на который подключен приёмник. Функция available проверяет наличие в буфере информации с радиоканала, read производит чтение данной информации в массив определенной размерности. После, согласно нажатой на радио пульте клавиши выполняется определенное действие.
if (radioRX.available()) {
byte rRX;
radioRX.read(&rRX, 1);
Serial.println(rRX);
switch (rRX)
{
case 1:
if (digitalRead(kitchenlight) == HIGH)
{
digitalWrite(kitchenlight, LOW);
} else {
digitalWrite(kitchenlight, HIGH);
}
break;
case 2:
if (digitalRead(bathlight) == HIGH)
{
digitalWrite(bathlight, LOW);
} else {
digitalWrite(bathlight, HIGH);
}
break;
case 3:
if (digitalRead(holllight) == HIGH)
{
digitalWrite(holllight, LOW);
} else {
digitalWrite(holllight, HIGH);
}
break;
case 4:
if (digitalRead(livinglight) == HIGH)
{
digitalWrite(livinglight, LOW);
} else {
digitalWrite(livinglight, HIGH);
}
break;
case 5:
if (autolight == false)
{
autolight = true;
} else {
autolight = false;
}
break;
case 6:
if (autoblind == false)
{
autoblind = true;
} else {
autoblind = false;
}
break;
case 7:
digitalWrite(kitchenlight, HIGH);
digitalWrite(holllight, HIGH);
digitalWrite(livinglight, HIGH);
digitalWrite(bathlight, HIGH);
break;
case 8:
if (blindposition == false)
{
blindposition = true;
}
if (blindposition == true)
{
blindposition = false;
}
break;
}
}
И в заключение вывод часов на дисплей. Задержка при помощи функции delay нужна, чтобы не выводить информация несколько раз за мили секунду.
if(millis()%1000==0){ mainlcd.setCursor(0,0);
mainlcd.print(time.gettime("H:i:s"));
delay(1);
}
Радио пульт
Создание радио пульта, будет базироваться на отдельном микроконтроллере и предполагает использование передатчика на частоте 433мГц и клавиатуры. Для создания прототипа была использована клавиатура, размерностью 4 строки на 4 столбца. Задействовано будет 8 кнопок. Описание назначения кнопок производилось ранее. Сначала создадим экземпляр класса iarduino_RF433_Transmitter, и передадим параметром номер порта, к которому подключен передатчик.
iarduino_RF433_Transmitter radioTX(4);
Далее укажем количество строк и столбцов
const byte ROWS = 4;
const byte COLS = 4;
Создадим экземпляр класса, KeyPad
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
В переданных параметрах указывается: матрица символов, количество строк, количество столбцов и номера портов.
Создадим массивы, в которых будут хранится данные о подключение клавиатуры к портам микроконтроллера.
byte rowPins[ROWS] = {3, 2, 1, 0};
byte colPins[COLS] = {7, 6, 5, 4};
Далее необходимо указать скорость передачи и номер канала передачи. Частота 433мГц предполагает наличие 69 каналов, от 433.075 МГц до 434.775 МГц с шагом в 25кГц. На основе сканирования радио эфире, был выбран 5 канал с частотой 433.175 МГц. Скорость передачи для выбранного модуля оптимальна в пределах 1000 бит\сек.
radioTX.begin(1000);
radioTX.openWritingPipe(5);
Функция begin, инициализирует работу передатчика на определенно заданной скорости, которую передаём параметром. Функция openWritingPipe с пероеданным параметром, задаёт номер канала.
char customKey = customKeypad.getKey();
customKey = customKey - '0';
if (customKey){
radioTX.write(&customKey, 1);
delay(200);
}
}
При обнаружении нажатия на клавиатуру, микроконтроллер сопоставляет строку и столбцом с матрицей получает значение, которое необходимо отправить. Отправка осуществляется при помощи функции write. Для передачи необходимо указать ссылку на передаваемый объект и размерность объекта, в моем случае мы передаем один байт информации. Данная функция оснащена алгоритмом дополнения кода на основе избыточности, что позволяет исключить ложные срабатывания системы, от различных радио помех.
Заключение. Результат работы
В результате проделанной работы получилось реализовать методы системы автоматизации и обеспечения безопасности жилого помещения, на их базе создать программное обеспечение для микроконтроллера ATmega2560, которое полностью реализует поставленные задачи. Для проверки работоспособности и отказоустойчивости был собран макет системы и проведены различные тесты. Данная система разработана под конкретное помещение, но может быть интегрирована в похожее. Разработанный прототип можно по функционалу сравнить с уже существующими описанными системами.
Результатом выполнения выпускной квалификационной работы явилось программное обеспечения написанное на языке C++ для микроконтроллера семейства AVR, компании Atmel, позволяющее осуществлять алгоритмы автоматизации и обеспечения безопасности над помещениями.
Разработка данного программного обеспечения и практическая работа с ним позволяют сделать следующие выводы:
· Язык C++ удобен при программировании микроконтроллеров
· Имеется большой выбор используемых датчиков для работы в данной системе
· Низкое энергопотребление в режиме ожидания
Данная системе на основе составленного плана, может быть интегрирована в жилое помещение. При изменение некоторых параметров она может быть перенесена в помещение с большим количеством комнат.
Размещено на Allbest.ru
Подобные документы
Сущность информации, ее классификация. Основные проблемы обеспечения и угрозы информационной безопасности предприятия. Анализ рисков и принципы информационной безопасности предприятия. Разработка комплекса мер по обеспечению информационной безопасности.
курсовая работа [28,2 K], добавлен 17.05.2016Модель обеспечения информационной безопасности в сфере обороны РФ. Оценка состояния систем защиты информации в правоохранительной и судебной сферах, рекомендации по их обеспечению. Анализ угроз информационной безопасности России и рисков от их реализации.
курсовая работа [57,4 K], добавлен 13.11.2009Анализ инфраструктуры ООО магазин "Стиль". Создание системы информационной безопасности отдела бухгалтерии предприятия на основе ее предпроектного обследования. Разработка концепции, политики информационной безопасности и выбор решений по ее обеспечению.
курсовая работа [2,2 M], добавлен 17.09.2010Проектирование системы управления базами данных. Особенности реализации в MS SQL. Разработка пользовательского интерфейса. Тестирование и отладка приложения. Руководство пользователя и системного администратора. Анализ и методы разработки приложений.
курсовая работа [867,9 K], добавлен 16.07.2013Категории действий, способных нанести вред информационной безопасности, методы её обеспечения. Сфера деятельности фирмы и анализ финансовых показателей. Система информационной безопасности фирмы и разработка комплекса мероприятий по её модернизации.
дипломная работа [1,1 M], добавлен 15.09.2012Понятие и основные задачи информационной безопасности. Разработка и реализация политики ИБ в компании Microsoft. Виды угроз безопасности. Современные средства физической, аппаратной, программной защиты информации в локальном домашнем и офисном компьютере.
курсовая работа [107,6 K], добавлен 09.04.2014Правовое регулирование защиты персональных данных. Общий принцип построения соответствующей системы. Разработка основных положений по охране личных документов. Подбор требований по обеспечению безопасности персональных данных в информационных системах.
дипломная работа [1,3 M], добавлен 01.07.2011Цель, критерии и ограничения создания автоматизированной системы. Разработка элементов информационного обеспечения информационной системы общежития. Рекомендации по выбору комплекса технических средств для автоматизации задачи учета реализации товара.
курсовая работа [920,8 K], добавлен 11.11.2022Обзор требований проблемной области. Особенности управления задачами. Исполнительные системы реального времени. Программирование на уровне микропроцессоров. Модели и методы предметной области. Реализация прототипа системы реального времени.
курсовая работа [263,1 K], добавлен 15.02.2005Использование операционных систем. Контрольно-испытательные методы анализа безопасности программного обеспечения. Логико-аналитические методы контроля безопасности программ и оценка технологической безопасности программ на базе метода Нельсона.
контрольная работа [22,6 K], добавлен 04.06.2012