Файл: Методические указания по выполнению курсовых работ по дисциплине Основы электроники и схемотехники.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.12.2023
Просмотров: 2582
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
3.4 Полное описание работы прототипа
Наша автоматизированная система отслеживает параметры среды в помещении (влажность воздуха, температуру, пары газа и т.д.), пересылает полученные значения в логическое устройство (Arduino), сравнивает эти параметры с предельными (которые записаны в программу для выполнения условия) и отправляет команды на исполнительные устройства (мобильный телефон, вентилятор, сервопривод и т.д.), которые приводят полученные значения к заданным.
Температура
Ни для кого не секрет, что существуют определенные пределы комфортной температуры в помещении. Например, когда в помещении температура повышается до 25ºС и более, я чувствую себя не очень комфортно (слишком жарко), а если температура опускается ниже 18ºС, то мне становится холодно. Так вот в нашей автоматизированной системе при температуре 25ºС открывается окно для того, чтобы проветрить (охладить помещение). Вот так выглядит фрагмент программного кода, который отвечает за то, что будет происходить при повышении температуры до 25ºС:
Фрагмент 1
if (t > 25)
{myservo.write} (45);
В первой строчке фрагмента указано условие, где температура принимает значение больше 25ºС. Далее команда myservo.write (45); включает сервопривод, который в свою очередь открывает окно для проветривания. При температуре меньше 23ºС окно закрывается:
Фрагмент 2
if (t< 23)
{myservo.write (0);
delay(1000);
myservo.detach} ();
Команда myservo.write(0);запускает сервопривод, который устанавливает окно в нулевое положение, т.е. закрывает. Команда delay (1000); устанавливает задержку в 1 с. (1000 мс.) в течение которой происходит закрывание окна. Команда myservo.detach(); выключает сервопривод для экономии энергии.
Но бывает так, что при жаркой погоде температура в помещении уже достигла 25ºС и продолжает расти. И даже открытое окно уже не может должным образом охлаждать температуру в помещении. Так вот для такого случая предусмотрен вентилятор. Он включается, когда температура превысит 30ºС. Но для того, чтобы вентилятор включался только в том случае, когда выполняется условие, заданное в программе, пришлось соорудить самодельный переключатель, который состоит из
n-p-nтранзистора, резистора на 10 кОм. Когда на базу транзистора через резистор поступает сигнал (1), то вентилятор включается.
Фрагмент 3
if (t > 30)
{digitalWrite(VEN, HIGH)};
if (t < 26)
{digitalWrite(VEN, LOW)};
В коде произошло объявление о подключении вентилятора к 5 пину Arduino:
int VEN = 5;
pinMode(VEN, OUTPUT);
Строчка digitalWrite (VEN, HIGH); обозначает, что когда на резистор приходит значение HIGH, т.е. 1, вентилятор включается. Соответственно при значении LOW, т.е. 0, вентилятор выключается.
Таким образом, при температуре в помещении выше 30ºС включается вентилятор, работа которого вместе с открытым для проветривания окном будет способствовать понижению температуры в помещении. Когда же температура наконец-то начнёт падать и достигнет значения меньше 26ºС, то вентилятор выключится.
Также бывают такие случаи, (чаще всего в частных домах) когда во время вашего отсутствия в доме может произойти по каким-либо причинам отключение отопительного газового котла. И до момента вашего возвращения домой помещение может значительно охладиться, тем более в зимнее время. Для того, чтобы избежать подобных неприятностей, мы предусмотрели автоматизированное информирование о произошедшем отключении системы отопления. Но обо всём поподробнее.
Итак, допустим, произошла остановка котла. Температура в доме начала стремительно падать и снизилась до значения меньше 15ºС.
В этот момент с Arduino на модуль реле приходит команда на включение. Модуль в свою очередь включает кнопку быстрого набора на сотовом телефоне, и происходит звонок со звуковым сообщением на телефон владельца дома, сообщающий, что дома выключилось отопление:
Фрагмент 4
const int REL = 8;
pinMode(REL, OUTPUT);
if (t < 15.0)
{digitalWrite(REL, HIGH)};
Строчка digitalWrite(REL, HIGH); включает реле и включает звонок с телефона. Также информирование происходит и при температуре выше 45ºС, потому что это может говорить о том, что в доме случился пожар:
Фрагмент 5
if (t > 45)
{digitalWrite(REL, HIGH)};
Влажность
Помимо допустимых температурных параметров можно говорить об оптимальных значениях влажности воздуха в жилом помещении. Норма влажности воздуха в помещении находится в пределах от 30% до 60%, а 45% - самое оптимальное значение уровня влажности. Итак, при влажности воздуха больше 60% окно открывается:
Фрагмент 6
if (h>= 60)
{myservo.attach(SERVO);
myservo.write(45)};
При влажности меньше 50% окно закрывается:
Фрагмент 7
if (h < 50)
{myservo.write(0);
delay(50);
myservo.detach()};
Но мы столкнулись со следующей проблемой. Человек находится в комнате, уровень влажности воздуха в которой достиг 60%, соответственно, при заданном условии окно должно открыться. Но находящийся в комнате человек при открытом окне может пострадать от возникшего сквозняка и в дальнейшем простудиться (например, если это холодное время года).
Поэтому мы добавили в наш прототип инфракрасный датчик, который распознает присутствие человека в комнате. То есть, если в помещении находится человек, то окно не открывается. Как только человек уходит (т.е. датчик не наблюдает движения) окно сразу же открывается:
Фрагмент 8
const int DVI = 10;
pinMode(DVI, INPUT);
val = digitalRead(DVI);
if (val == HIGH && h > 60)
{digitalWrite(LED, LOW);
myservo.write(0);
delay(1000);
myservo.detach();
lcd.setCursor(14, 1);
lcd.print("WC");
Serial.println("Motion!")};
else
{digitalWrite(LED, HIGH);
myservo.attach(SERVO);
myservo.write(45);
lcd.setCursor(14, 1);
lcd.print("WO");
Serial.println("No motion!")};
Прочие датчики
В нашем прототипе присутствует датчик огня, который при обнаружении возгорания информирует человека пронзительным звуковым сигналом и информирует звонком на сотовый телефон:
Фрагмент 9
if (!digitalRead(FLAME))
{digitalWrite(BUZ, LOW);
digitalWrite(REL, LOW)};
else
{digitalWrite(BUZ, HIGH)};
Также в нашем прототипе присутствует датчик газа, который реагирует помимо паров газа на пары этилового спирта. Когда датчик улавливает пары этилового спирта или газа, он отправляет звуковой сигнал на телефон владельца:
Фрагмент 10
if (digitalRead(GAS) == HIGH)
{digitalWrite(REL, HIGH)};
Код программы:
#include
#include
#include
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
#include "Servo.h"
const int SERVO = 9;
const int DVI = 10;
const int REL = 8;
const int FLAME = 3;
const int BUZ = 7;
int LED = 12;
int val = 0;
int angle = 1;
int VEN = 5;
const int GAS = 11;
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP085 bmp;
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte degree[8] =
{
B00110,
B01001,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000,
};
Servo myservo;
void setup()
{
myservo.attach(SERVO);
Serial.begin(9600);
dht.begin();
lcd.begin();
lcd.backlight();
pinMode(VEN, OUTPUT);
pinMode(DVI, INPUT);
pinMode(LED, OUTPUT);
pinMode(REL, OUTPUT);
pinMode(FLAME, INPUT);
pinMode(BUZ, OUTPUT);
myservo.write(0);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
void loop()
{
val = digitalRead(DVI); // считывание состояния датчика
lcd.createChar(0, degree);
float h = dht.readHumidity();
float t = bmp.readTemperature();
int p = (bmp.readPressure()/133.3);
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.setCursor(5, 1);
lcd.print(t);
lcd.setCursor(10, 1);
lcd.write((byte) 0);
lcd.setCursor(11, 1);
lcd.print("C");
lcd.setCursor(11, 0);
lcd.print("H:");
lcd.setCursor(13, 0);
lcd.print(h);
lcd.setCursor(15, 0);
lcd.print("%");
lcd.setCursor(0, 0);
lcd.print("At.P: ");
lcd.setCursor(5, 0);
lcd.print(p);
lcd.setCursor(8, 0);
lcd.print("mm");
//Условия по открытию окна//
if (h < 44)
{
myservo.write(0);
delay(50);
myservo.detach();
}
if (h == 23.0)
{
myservo.attach(SERVO);
}
if (h >= 23.1 && h < 55 && val == LOW)
{
myservo.detach();
}
if (h >= 45)
{
myservo.attach(SERVO);
myservo.write(45);
}
//Температура//
if (t < 15.0){
digitalWrite(REL, HIGH);
}
if (t > 45){
digitalWrite(REL, HIGH);
}
if (t > 25){
myservo.write(45);
}
if (t < 23){
myservo.write(0);
delay(1000);
myservo.detach();
}
if (t > 30){
digitalWrite(VEN, HIGH);
}
if (t < 26){
digitalWrite(VEN, LOW);
}
//Считывание с датчика движения//
if (val == HIGH){
digitalWrite(LED, LOW);
myservo.write(0);
delay(1000);
myservo.detach();
//delay(300000);
lcd.setCursor(14, 1);
lcd.print("WC");
Serial.println("Motion!");
}
else {
digitalWrite(LED, HIGH);
myservo.attach(SERVO);
myservo.write(45);
lcd.setCursor(14, 1);
lcd.print("WO");
Serial.println("No motion!");
}
if (t > 30){
myservo.attach(SERVO);
myservo.write(angle);
myservo.write(45);
}
//ДатчикГАЗА//
if (digitalRead(GAS) == HIGH){
digitalWrite(REL, HIGH);
}
//ДатчикОгня//
if (!digitalRead(FLAME)){
digitalWrite(BUZ, LOW);
//digitalWrite(REL, LOW);
}
else{
digitalWrite(BUZ, HIGH);
}
}
Заключение
Проведя опыты со сделанной моделью, мы убедились, что данный макет позволяет нам сократить количество каждодневных однообразных манипуляций в доме. Благодаря применению микроконтроллера Arduino макет получился полностью работоспособным (несмотря на огромное количество датчиков) и интересным в изготовлении и изучении, так как микроконтроллеры Arduino очень хороши для начального внедрения в мир микроэлектроники.
Практическая значимость. Результаты данной работы могут использоваться в дальнейшем для внедрения этой системы во многие жилые дома и квартиры для повышения комфортности проживания человека.
Личностная значимость. В ходе данной работы я приобрел навыки структурирования информации, работы с источниками, обработки больших объёмов исходных данных и программирования микроконтроллеров.
В дальнейшем работу в предложенном русле можно углубить (чем я сейчас и занимаюсь). А именно попробовать внедрить эту систему в свой дом и провести различные наблюдения, подсчёты и доработки устройства в случае необходимости.
Список используемой литературы
1. Блум Дж. Изучаем Arduino: инструменты и методы технического волшебства. Пер. с англ. – СПб.: БХВ-Петербург, 2015 г. – 336 с.: ил.
2. Кравченко А.В. “10 практических устройств на AVR -микроконтроллерах”. Книга 3. – “МК-Пресс”, СПб.: “КОРОНА - ВЕК”, 2011. – 416 с.
3. Гололобов В.Н. «Умный дом» своими руками / В.Н. Гололобов. – М.:НТ Пресс, 2007. – 416 с.: ил.- (В помощь радиолюбителю)
4. Петин В.А. Проекты с использованием контроллера Arduino. – СПб.: БХВ-Петербург, 2014. – 400 с.: ил. – (Электроника)
5. Соммер У. Программирование микроконтроллерных плат Arduino/Freeduino. – СПб.: БХВ-Петербург, 2012. – 256 с.: ил. – (Электроника)