Микропроцессорная система оповещения о возможных чрезвычайных ситуациях

Особенность изучения входов и выходов микроконтроллера. Исследование разработки программного обеспечения. Осуществление связи с компьютером, другими устройствами Arduino. Физические характеристики платы. Исследование алгоритма работы сигнализации.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 17.02.2019
Размер файла 467,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Федеральное агентство железнодорожного транспорта

Омский государственный университет путей сообщения

Пояснительная записка

МИКРОПРОЦЕССОРНАЯ СИСТЕМА ОПОВЕЩЕНИЯ О ВОЗМОЖНЫХ ЧЕРЕЗВЫЧАЙНЫХ СИТУАЦИЯХ

Студент

А.А. Молчанов

Омск 2016

Реферат

УДК 681.324

Курсовая работа содержит страниц, рисунков, таблиц, формул, источника.

Объектом рассмотрения является сортировочная станция, уровень железнодорожной автоматики.

Пояснительная записка выполнена в программе Microsoft Word 2010.

Введение

Целью курсового проекта является проектирование системы оповещения о возможных ЧС.

Для достижения поставленной цели необходимо решить следующие задачи:

- изучить отличительные особенности здания

- провести аналитическое исследование систем

- разработать набор механизмов, обеспечивающих выполнение требований, предъявляемых к системе

- осуществить проектирование системы.

1. Arduino

Arduino Uno контроллер построен на ATmega328. Платформа имеет 14 цифровых вход/выходов (6 из которых могут использоваться как выходы ШИМ), 6 аналоговых входов, кварцевый генератор 16 МГц, разъем USB, силовой разъем, разъем ICSP и кнопку перезагрузки. Для работы необходимо подключить платформу к компьютеру посредством кабеля USB, либо подать питание при помощи адаптера AC/DC или батареи.

Рисунок 1 - Внешний вид Arduino Uno

1.1 Характеристики

Arduino Uno контроллер построен на ATmega328. Платформа имеет 14 цифровых вход/выходов (6 из которых могут использоваться как выходы ШИМ), 6 аналоговых входов, кварцевый генератор 16 МГц, разъем USB, силовой разъем, разъем ICSP и кнопку перезагрузки.

Микроконтроллер

ATmega328

Рабочее напряжение

5 В

Входное напряжение (рекомендуемое)

7-12 В

Входное напряжение (предельное)

6-20 В

Цифровые Входы/Выходы

14 (6 из которых могут использоваться как выходы ШИМ)

Аналоговые входы

6

Постоянный ток через вход/выход

40 мА

Постоянный ток для вывода 3.3 В

50 мА

Флеш-память

32 Кб (ATmega328) из которых 0.5 Кб используются для загрузчика

ОЗУ

2 Кб (ATmega328)

EEPROM

1 Кб (ATmega328)

Тактовая частота

16 МГц

Для работы необходимо подключить платформу к компьютеру посредством кабеля USB, либо подать питание при помощи адаптера AC/DC или батареи.

Рисунок 2 - Принципиальная схема

1.2 Обеспечение питания

Arduino Uno может получать питание через подключение USB или от внешнего источника питания. Источник питания выбирается автоматически.

Внешнее питание (не USB) может подаваться через преобразователь напряжения AC/DC (блок питания) или аккумуляторной батареей. Преобразователь напряжения подключается посредством разъема 2.1 мм с центральным положительным полюсом. Провода от батареи подключаются к выводам Gnd и Vin разъема питания.

Платформа может работать при внешнем питании от 6 В до 20 В. При напряжении питания ниже 7 В, вывод 5V может выдавать менее 5 В, при этом платформа может работать нестабильно. При использовании напряжения выше 12 В регулятор напряжения может перегреться и повредить плату. Рекомендуемый диапазон от 7 В до 12 В.

Выводы питания:

- VIN. Вход используется для подачи питания от внешнего источника (в отсутствие 5 В от разъема USB или другого регулируемого источника питания). Подача напряжения питания происходит через данный вывод.

- 5V. Регулируемый источник напряжения, используемый для питания микроконтроллера и компонентов на плате. Питание может подаваться от вывода VIN через регулятор напряжения, или от разъема USB, или другого регулируемого источника напряжения 5 В.

- 3V3. Напряжение на выводе 3.3 В генерируемое встроенным регулятором на плате. Максимальное потребление тока 50 мА.

- GND. Выводы заземления.

1.3 Память

Микроконтроллер ATmega328 располагает 32 кБ флэш памяти, из которых 0.5 кБ используется для хранения загрузчика, а также 2 кБ ОЗУ (SRAM) и 1 Кб EEPROM.

1.4 Входы и Выходы микроконтроллера

Каждый из 14 цифровых выводов Uno может настроен как вход или выход, используя функции pinMode(), digitalWrite(), и digitalRead(), . Выводы работают при напряжении 5 В. Каждый вывод имеет нагрузочный резистор (по умолчанию отключен) 20-50 кОм и может пропускать до 40 мА. Некоторые выводы имеют особые функции:

- Последовательная шина: 0 (RX) и 1 (TX). Выводы используются для получения (RX) и передачи (TX) данных TTL. Данные выводы подключены к соответствующим выводам микросхемы последовательной шины ATmega8U2 USB-to-TTL.

- Внешнее прерывание: 2 и 3. Данные выводы могут быть сконфигурированы на вызов прерывания либо на младшем значении, либо на переднем или заднем фронте, или при изменении значения. Подробная информация находится в описании функции attachInterrupt().

- ШИМ: 3, 5, 6, 9, 10, и 11. Любой из выводов обеспечивает ШИМ с разрешением 8 бит при помощи функции analogWrite().

- SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Посредством данных выводов осуществляется связь SPI, для чего используется библиотека SPI.

- LED: 13. Встроенный светодиод, подключенный к цифровому выводу 13. Если значение на выводе имеет высокий потенциал, то светодиод горит.

На платформе Uno установлены 6 аналоговых входов (обозначенных как A0 .. A5), каждый разрешением 10 бит (т.е. может принимать 1024 различных значения). Стандартно выводы имеют диапазон измерения до 5 В относительно земли, тем не менее имеется возможность изменить верхний предел посредством вывода AREF и функции analogReference(). Некоторые выводы имеют дополнительные функции:

- I2C: 4 (SDA) и 5 (SCL). Посредством выводов осуществляется связь I2C (TWI), для создания которой используется библиотека Wire.

Дополнительная пара выводов платформы:

- AREF. Опорное напряжение для аналоговых входов. Используется с функцией analogReference().

- Reset. Низкий уровень сигнала на выводе перезагружает микроконтроллер. Обычно применяется для подключения кнопки перезагрузки на плате расширения, закрывающей доступ к кнопке на самой плате Arduino.

1.5 Обеспечение связи

На платформе Arduino Uno установлено несколько устройств для осуществления связи с компьютером, другими устройствами Arduino или микроконтроллерами. ATmega328 поддерживают последовательный интерфейс UART TTL (5 В), осуществляемый выводами 0 (RX) и 1 (TX). Установленная на плате микросхема ATmega8U2 направляет данный интерфейс через USB, программы на стороне компьютера "общаются" с платой через виртуальный COM порт. Прошивка ATmega8U2 использует стандартные драйвера USB COM, никаких сторонних драйверов не требуется, но на Windows для подключения потребуется файл ArduinoUNO.inf. Мониторинг последовательной шины (Serial Monitor) программы Arduino позволяет посылать и получать текстовые данные при подключении к платформе. Светодиоды RX и TX на платформе будут мигать при передаче данных через микросхему FTDI или USB подключение (но не при использовании последовательной передачи через выводы 0 и 1).

Библиотекой SoftwareSerial возможно создать последовательную передачу данных через любой из цифровых выводов Uno.

ATmega328 поддерживает интерфейсы I2C (TWI) и SPI. В Arduino включена библиотека Wire для удобства использования шины I2C.

1.6 Разработка программного обеспечения

Платформа программируется посредством ПО Arduino. Из меню Tools > Board выбирается «Arduino Uno» (согласно установленному микроконтроллеру). Подробная информация находится в справочнике и инструкциях.

Микроконтроллер ATmega328 поставляется с записанным загрузчиком, облегчающим запись новых программ без использования внешних программаторов. Связь осуществляется оригинальным протоколом STK500.

Имеется возможность не использовать загрузчик и запрограммировать микроконтроллер через выводы ICSP (внутрисхемное программирование).

1.7 Автоматическая (программная) перезагрузка

Uno разработана таким образом, чтобы перед записью нового кода перезагрузка осуществлялась самой программой Arduino на компьютере, а не нажатием кнопки на платформе. Одна из линий DTR микросхемы ATmega8U2, управляющих потоком данных (DTR), подключена к выводу перезагрузки микроконтроллеру ATmega328 через 100 нФ конденсатор. Активация данной линии, т.е. подача сигнала низкого уровня, перезагружает микроконтроллер. Программа Arduino, используя данную функцию, загружает код одним нажатием кнопки Upload в самой среде программирования. Подача сигнала низкого уровня по линии DTR скоординирована с началом записи кода, что сокращает таймаут загрузчика.

Функция имеет еще одно применение. Перезагрузка Uno происходит каждый раз при подключении к программе Arduino на компьютере с ОС Mac X или Linux (через USB). Следующие полсекунды после перезагрузки работает загрузчик. Во время программирования происходит задержка нескольких первых байтов кода во избежание получения платформой некорректных данных (всех, кроме кода новой программы). Если производится разовая отладка скетча, записанного в платформу, или ввод каких-либо других данных при первом запуске, необходимо убедиться, что программа на компьютере ожидает в течение секунды перед передачей данных.

На Uno имеется возможность отключить линию автоматической перезагрузки разрывом соответствующей линии. Контакты микросхем с обоих концов линии могут быть соединены с целью восстановления. Линия маркирована «RESET-EN». Отключить автоматическую перезагрузку также возможно подключив резистор 110 Ом между источником 5 В и данной линией.

Токовая защита разъема USB

В Arduino Uno встроен самовосстанавливающийся предохранитель (автомат), защищающий порт USB компьютера от токов короткого замыкания и сверхтоков. Хотя практически все компьютеры имеют подобную защиту, тем не менее, данный предохранитель обеспечивает дополнительный барьер. Предохранитель срабатывает при прохождении тока более 500 мА через USB порт и размыкает цепь до тех пока нормальные значения токов не будут восстановлены.

1.8 Физические характеристики платы

Длина и ширина печатной платы Uno составляют 6.9 и 5.3 см соответственно. Разъем USB и силовой разъем выходят за границы данных размеров. Четыре отверстия в плате позволяют закрепить ее на поверхности. Расстояние между цифровыми выводами 7 и 8 равняется 0,4 см, хотя между другими выводами оно составляет 0,25 см.

2. Описание микроконтроллера ATmega328

2.1 Особенности микроконтроллера

Высокая производительность, низкое энергопотребление и улучшенная RISC-Архитектура:

- 131 мощная команда - большинство которых выполняется за один такт ЦПУ

- 32 x 8 регистра общего назначения

- Полностью статическая операция

- Производительность до 20 МИЛЛИОНОВ КОМАНД В СЕКУНДУ на 20 МГЦ ЦПУ

- Внутрикристальный 2-цикловый множитель

Энергонезависимая память данных и программ:

- 4/8/16/32 кБ внутрисистемной энергонезависимой ФЛЭШ-памяти программ

- 256/512/512/1 кБ EEPROM ПЗУ

- Количество циклов запись/стирание: 10,000 Flash/100,000 EEPROM

- Хранение данных: 20 лет при температуре 85 °C, 100 лет при температуре 25 °C

- Дополнительный загрузочный раздел независимыми блокировочными битами

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

2.2 Периферийные характеристики

- Два 8-битных Таймера/Счетчика с Отдельным Предделителем частоты и Режимом сравнения

- Один 16-битный Таймер/Счетчик с Отдельным Предделителем частоты и Режимом сравнения и Режимом захвата

- Счетчик реального времени с отдельным генератором

- Шесть ШИМ-каналов

- 8-канальный 10--разрядный АЦП в корпусах TQFP и QFN/MLF

- Программируемый последовательный интерфейс USART

- Последовательный интерфейс SPI Master/Slave

- Байтно-ориентированный последовательный интерфейс (совместим с I2C Philips)

Программируемый Сторожевой Таймер со встроенным Генератором

- Встроенный аналоговый компаратор

- Прерывание и пробуждение по изменению на выводах

Дополнительные характеристики микроконтроллера:

- Схема сброса при подаче питания и программируемое обнаружение провалов по напряжению

- Внутренний калиброванный генератор

- Шесть режимов сна: холостой ход, снижение шумов АЦП, экономии энергии, выключение питания, режим ожидания и расширенный режим ожидания

Ввод/вывод и типы корпусов:

- 23 программируемые линии ввода/вывода

- Корпус PDIP 28 выводов, корпус TQFP 32 вывода, корпус QFN/MLF с 28 и 32 выводами

- Рабочее напряжение - от 1.8 до 5.5 В

- Температурный диапазон - от -40°C до 85°C

Производительность:

- 0 -- 4 МГц при 1.8 -- 5.5 В, 0 -- 10 МГц при 2.7 -- 5.5 В, 0 -- 20 МГц при 4.5 -- 5.5 В

Потребляемый ток при 1 МГц, 1.8 В, 25 °C

- Активный режим: 0.2 мА

- Режим отключения: 0.1 мкА

- Режим энергосбережения: 0.75 мкА (Включая 32 кГц RTC)

3. Реализация системы

Перед тем как начать делать курсовую работу, необходимо учесть факторы расположения места управления, внутренний климат и другие характеристики охраняемого помещения. В моей системе предполагается обеспечить возможность управления сигнализацией удалённо. Было решено обойтись одной Arduino и в охраняемое помещение вывести лишь длинный провод с датчиками, и вот почему: во-первых, расстояние до помещения не превышает 50 метров, что не так много для ощутимого затухания сигнала в линии и вполне реализуемо по затратам кабеля.

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

Всю систему можно разбить на три части: это пульт управления, та, что стоит в охраняемом помещении (датчик Холла и пр.), и та, что связывает эти части (витая пара).

Схема подключения всей системы выглядит так:

Рисунок 3 - Схема подключения

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

Алгоритм работы сигнализации можно представить такой блок-схемой:

Рисунок 4 - Блок-схема

Заключение

В ходе выполнения курсовой работы была собрана и изучена информация о работе с Arduino Uno. Произведено описание алгоритмов и структуры программы. Разработана система оповещения о ЧС на основе Arduino.

Библиографический список

1. СТП ОмГУПС-1.2-2005. Работы студенческие учебные и выпускные квалификационные: общие требования и правила оформления текстовых документов. - Омский Государственный Университет Путей Сообщения, Омск, 2005. 28с.

Приложение

Листинг:

#define DELAY_CLOSE 180000 //время на покидание помещения и закрытие двери (3 минуты - 180 сек)

#define DELAY_OPEN 30000 //время на нажатие кнопки после открытия двери (30 сек)

#include <Wire.h>

#include <LiquidCrystal_I2C.h> //библиотека для LCD экрана

#include "DHT.h" //библиотека для работы датчика температуры и влажности

#define DHTPIN 3 //датчик подключен ко входу 3

#define DHTTYPE DHT22

LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей

float temph[2]; //массив для температуры и влажности

volatile unsigned long int timer = 0; //переменная для таймера кнопки

volatile unsigned long int clock = 0; //переменная для сохранения значения таймера кнопки

volatile boolean timerOn = 0; //переменная для включения таймера кнопки

volatile unsigned long int alarmTimer = 0; //переменная для таймера включения/выключения сигнализации

volatile unsigned long int alarmClock = 0; //переменная для сохранения значения таймера

volatile boolean alarmTimerOn = 0; //переменная для запуска/остановки таймера

volatile unsigned long int tempTimer = 0; //переменная для таймера обновления показаний температуры и влажности

volatile unsigned long int tempClock = 0; //переменная для сохранения значения таймера

volatile boolean tempTimerOn = 0; //переменная для запуска/остановки таймера

int hollaState; //переменная для хранения показания с датчика Холла (0-1024) - аналоговый вход

boolean buttonState; //хранение значения кнопки (нажата/отпущена)

DHT dht(DHTPIN, DHTTYPE); //настройка датчика температуры и влажности

ISR (TIMER0_COMPA_vect) //функция, вызываемая таймером-счетчиком каждые 0,001 сек

{

if(timerOn == 1) //если таймер включен

{

timer++; //увеличение значения таймера на +1 каждые 0,001 сек

}

if(alarmTimerOn == 1)

{

alarmTimer++;

}

if(tempTimerOn == 1)

{

tempTimer++;

}

}

void setup()

{

Serial.begin(9600);

lcd.init(); //инициализация дисплея

lcd.backlight(); //подсветка дисплея

lcd.setCursor(0, 0); //установка курсора на нулевую строку и нулевой столбец

lcd.print("Hello user :) "); //приветственное сообщение (здесь и далее пробелы нужны для стирания возможных оставшихся символов)

lcd.setCursor(0, 1); //установка курсора на первую строку и нулевой столбец

lcd.print("Alarm OFF ");

dht.begin(); //инициализация датчика температуры

pinMode(8, INPUT_PULLUP); //пин 8 как вход с подтягивающим резистором (для кнопки)

pinMode(11, OUTPUT); //пин 11 как выход для пьезо-пищалки

digitalWrite(11, LOW); //устанавливаем нулевой уровень 11 вывода

pinMode(A3, OUTPUT); //А3 используется как дополнительный выход +5В - просто мне так было удобнее при пайке проводов :)

digitalWrite(A3, HIGH);

pinMode(9, OUTPUT); //пин 9 как выход для пьезо-пищалки (можно было оставить один 11й выход, но мне, опять же, так было удобнее при пайке) микроконтроллер плата программный сигнализация

digitalWrite(9, LOW);

//Настройка таймера на срабатывание каждые 0,001 сек

TCCR0A |= (1 << WGM01);

OCR0A = 0xF9; //начало отсчета до переполнения (255)

TIMSK0 |= (1 << OCIE0A); //Set the ISR COMPA vect

sei(); //разрешить прерывания

TCCR0B |= (1 << CS01) | (1 << CS00); //установить делитель частоты на 64

//теперь каждые 0,001 сек будет вызываться функция ISR (TIMER0_COMPA_vect)

digitalWrite(9, HIGH); //приветственный "пик"

digitalWrite(11, HIGH);

delay(200);

digitalWrite(9, LOW);

digitalWrite(11, LOW);

delay(200);

}

void loop() //главная циклическая функция

{

readState(); //считывем значение с датчиков (кнопка, температура, влажность, датчик Холла)

if(!buttonState) //если кнопка нажата

{

timerOnNull(); //обнуляем и запускаем таймер кнопки

while(!buttonState) //пока конпка нажата

{

readState(); //считывем значение с датчиков (кнопка, температура, влажность, датчик Холла)

cli(); //останавливаем прерывания

clock = timer; //сохраняем значения с таймера кнопки

sei(); //возобновляем прерывания

if(clock >= 3000) //если кнопку удерживают больше 3-х секунд

{

cli(); //останавливаем и обнуляем таймер

timerOn = 0;

timer = 0;

clock = 0;

sei();

startAlarm(); //переходим в функцию запуска сигнализации

}

if((buttonState) && (clock >= 1000)) //если кнопку отпустили раньше времени

{

cli(); //обнуляем и останавливаем таймер, ждем повторного нажатия и удержания кнопки

timerOn = 0;

timer = 0;

clock = 0;

sei();

}

}

}

}

void readState() //функция считывания датчиков

{

temp(); //считывание показаний с датчика DHT

buttonState = digitalRead(8); //считывение кнопки

int val = analogRead(0); //считывание показаний датчика Холла

if((val >= 490) && (val <= 650)) //если показание находится в пределах от 490 до 900 (магнит поднесен)

{

hollaState = 1; //фиксируем что дверь закрыта

}

else

{

hollaState = 0; //иначе дверь открыта (нет магнитного поля, обрыв витой пары, КЗ на землю)

}

}

void startAlarm() //функция включения и опрашивания датчиков

{

digitalWrite(11, HIGH); //звуковое уведомление - один "пик"

digitalWrite(9, HIGH);

delay(100);

digitalWrite(11, LOW);

digitalWrite(9, LOW);

lcd.setCursor(0, 1);

lcd.print(" Alarm wait..");

alarmtimerOnNull(); //обнуление и старт таймера для задержки перед включением опрашивания датчика Холла

if (delayBeforeInclusion() == 1) //если задержка не была выдержана и кнопка была нажата,

{

return; //то выключаем сигнализацию и переходим в начало алгоритма

}

readState(); //после выдержки времени считываем показания с датчиков

if(alarmON() == 1) //переходим в функцию постоянного считывания кнопки и датчика Холла

{

return; //если будет нажата кнопка, то выключаем сигнализацию и переходим в начало алгоритма

}

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

if(!buttonState) //если запала кнопка, говорим что бы ее отпустили

{

lcd.setCursor(0, 1);

lcd.print("Release button! ");

for(int i=0; i<3; i++)

{

digitalWrite(11, HIGH);

digitalWrite(9, HIGH);

delay(500);

digitalWrite(11, LOW);

digitalWrite(9, LOW);

delay(100);

}

}

if(!hollaState) //если сработал датчик - дверь открыта

{

lcd.setCursor(0, 1);

lcd.print("Press unblock! "); //то пишем "Нажмите разблокировать"

if(delayBeforeSignal() == 1) //ожидаем разблокировки в течение 30 секунд

{

return; //если кнопка была нажата, выключаем сигнализацию и возвращаемся в начало алгоритма

}

if(alarm() == 1) //переходим в функцию звукового оповещения и находимся в ней до тех пор, пока не будет нажата кнопка

{

return;

}

}

}

int alarmON() //функция считывания кнопки и датчика Холла

{

while(buttonState && hollaState) //пока кнопка не нажата и дверь закрыта, считываем показания датчиков

{

lcd.setCursor(0, 1);

lcd.print(" Alarm ON! ");

readState();

if(!buttonState) //если кнопка нажата

{

lcd.setCursor(0, 1);

lcd.print("Hold the button! ");

timerOnNull();

while(!buttonState)

{

readState();

cli();

timerOn = 1;

clock = timer;

sei();

if(clock >= 2000)

{

cli();

timerOn = 0;

timer = 0;

clock = 0;

sei();

stopAlarm(); //функция остановки работы сигнализции

return 1;

}

if((buttonState) && (clock >= 100))

{

timerOnNull();

}

}

}

}

}

int delayBeforeSignal() //задержка после открытия двери при работающей сигнализации

{

alarmtimerOnNull();

while(alarmClock <= DELAY_OPEN) //время на нажатие кнопки после открытия двери (30 сек)

{

//Serial.println(alarmClock);

cli();

alarmTimerOn = 1;

alarmClock = alarmTimer;

sei();

readState();

if(!buttonState) //если кнопка нажата

{

timerOnNull();

while(!buttonState)

{

readState();

cli();

timerOn = 1;

clock = timer;

sei();

if(clock >= 2000)

{

cli();

timerOn = 0;

timer = 0;

clock = 0;

sei();

stopAlarm();

return 1;

}

if((buttonState) && (clock >= 100))

{

timerOnNull();

}

}

}

}

cli();

alarmTimerOn = 0;

alarmTimer = 0;

alarmClock = 0;

sei();

}

void stopAlarm() //функция уведомления об остановке

{

lcd.setCursor(0, 1);

lcd.print("Alarm OFF! ");

for(int i=0; i<3; i++)

{

digitalWrite(11, HIGH);

digitalWrite(9, HIGH);

delay(100);

digitalWrite(11, LOW);

digitalWrite(9, LOW);

delay(100);

}

return;

}

int alarm() //функция оповещения об открытии двери (при выдержанной задержке на включение)

{

lcd.setCursor(0, 1);

lcd.print("Door is open! ");

while(buttonState)

{

digitalWrite(11, HIGH);

digitalWrite(9, HIGH);

delay(40);

digitalWrite(11, LOW);

digitalWrite(9, LOW);

delay(40);

readState();

if(!buttonState) //если кнопка нажата

{

timerOnNull();

while(!buttonState)

{

readState();

cli();

timerOn = 1;

clock = timer;

sei();

if(clock >= 2000)

{

cli();

timerOn = 0;

timer = 0;

clock = 0;

sei();

stopAlarm();

return 1;

}

if((buttonState) && (clock >= 100))

{

timerOnNull();

}

}

}

}

}

void temp() //функция считывания показаний датчика DHT22

{

cli();

tempTimerOn = 1;

tempClock = tempTimer;

sei();

if(tempClock >= 1000)

{

cli();

tempTimerOn = 1;

tempTimer = 0;

tempClock = 0;

sei();

float t = dht.readTemperature();

float h = dht.readHumidity();

temph[0] = float(t);

temph[1] = float(h);

lcd.setCursor(0, 0);

lcd.print(temph[0]);

lcd.setCursor(5, 0);

lcd.print("C ");

lcd.setCursor(7, 0);

lcd.print("|| ");

lcd.setCursor(10, 0);

lcd.print(temph[1]);

lcd.setCursor(15, 0);

lcd.print("H");

}

if(temph[0] >= 60)

{

lcd.setCursor(0, 1);

lcd.print("Attantion, fire! ");

digitalWrite(11, LOW);

digitalWrite(9, LOW);

delay(40);

digitalWrite(11, HIGH);

digitalWrite(9, HIGH);

}

}

int delayBeforeInclusion() //функция здержки перед включением считывания двтчика Холла

{

while(alarmClock <= DELAY_CLOSE) //время на покидание помещения и закрытие двери (3 минуты - 180 сек)

{

//Serial.println(alarmClock);

cli();

alarmClock = alarmTimer;

sei();

readState();

if(!buttonState) //если кнопка нажата

{

timerOnNull();

while(!buttonState)

{

readState();

cli();

timerOn = 1;

clock = timer;

sei();

if(clock >= 2000)

{

cli();

timerOn = 0;

timer = 0;

clock = 0;

sei();

stopAlarm();

return 1;

}

if((buttonState) && (clock >= 100))

{

timerOnNull();

}

}

}

}

cli();

alarmTimerOn = 0;

alarmTimer = 0;

alarmClock = 0;

sei();

}

void timerOnNull() //функуия обнуления и запуска таймера кнопки

{

cli();

timerOn = 1;

timer = 0;

clock = 0;

sei();

}

void alarmtimerOnNull() //функция обнуления и запуска таймера задержек на включение/выключение

{

cli();

alarmTimerOn = 1;

alarmTimer = 0;

alarmClock = 0;

sei();

}

Размещено на Allbest.ru


Подобные документы

  • Теоретические принципы разработки микропроцессорной системы охраны и сигнализации. Разработка графа и таблицы переходов состояний МПСО, его аппаратного и программного интерфейса, управляющих программ режимов и специального программного обеспечения.

    курсовая работа [37,0 K], добавлен 12.05.2012

  • Разработка принципиальной схемы. Стабилизатор напряжения для опорных входов. Разработка блока вывода управляющего воздействия. Блок сопряжения с компьютером. Назначение программного обеспечения. Описание алгоритма подпрограмм, динамическая индикация.

    курсовая работа [635,6 K], добавлен 28.12.2012

  • Разработка и выбор функциональной схемы датчика электромагнитного расходомера. Формирование и исследование аналоговой, цифровой схемы. Расчет блока питания устройства. Порядок разработки алгоритма работы и программного обеспечения микроконтроллера.

    курсовая работа [1,9 M], добавлен 19.08.2012

  • Устройства, оперирующие с двоичной информацией. Отсутствие цепей обратной связи с выхода на вход. Число входов и выходов шифратора. Последовательные и параллельные сумматоры. Структура пирамидального дешифратора. Преобразование параллельного кода.

    лабораторная работа [1,5 M], добавлен 02.07.2009

  • Разработка структурной функциональной схемы устройства, его аппаратного обеспечения: выбор микроконтроллера, внешней памяти программ, устройства индикации, IGBT транзистора и драйвера IGBT, стабилизатора напряжения. Разработка программного обеспечения.

    курсовая работа [495,1 K], добавлен 23.09.2011

  • Описание алгоритма работы и разработка структурной схемы микропроцессорной системы управления. Разработка принципиальной схемы. Подключение микроконтроллера, ввод цифровых и аналоговых сигналов. Разработка блок-схемы алгоритма главной программы.

    курсовая работа [3,3 M], добавлен 26.06.2016

  • Упрощенная модель системы регулировки. Стандартный конструктив Ардуино с платами расширения. Внешний вид Ардуино Uno. Среда разработки Arduino. Встроенный текстовый редактор программного кода. Программа управления шаговым двигателем в однофазном режиме.

    курсовая работа [4,5 M], добавлен 02.06.2015

  • Монтаж и пуско-наладка системы охранно-пожарной сигнализации и речевого оповещения в нежилом здании торгового центра. Технические характеристики цифрового совмещенного пассивного инфракрасного оптико-электронного извещателя с акустическим датчиком.

    курсовая работа [1,4 M], добавлен 21.08.2015

  • Аппаратные средства с возможностью расширения и открытыми принципиальными схемами. Процесс работы с микроконтроллерами. Теоретические сведения о платформе Arduino. Установка драйверов для Arduino Duemilanove, Nano или Diecimila в Windows 7, Vista или XP.

    курсовая работа [3,3 M], добавлен 26.09.2014

  • Исследование работы тепловизора "Скат", применяемого для обнаружения чрезвычайных ситуаций в условиях городской застройки. Пространственное и температурное разрешение как основные характеристики прибора. Измерение характеристик инфракрасных систем.

    реферат [5,4 M], добавлен 24.03.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.