Ім'я файлу: Курсовий проект П.С.docx
Розширення: docx
Розмір: 2023кб.
Дата: 08.02.2024
скачати


МЕЛЬНИЦЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ

Факультет інформаційних технологій

Кафедра комп’ютерної інженеріх та інформаційних систем
КУРСОВИЙ ПРОЕКТ

з дисципліни «Смарт технології та Інтернет речей»

на тему: «Газовий детектор Arduino»


ПОЯСНЮВАЛЬНА ЗАПИСКА
КПІСТ 2101035.21.01.08. ПЗ

Напрям підготовки: 12 - Інформаційні технології

Спеціальність: 126 - Інформаційні системи та технології

Виконав: студент 3 курсу, групи ІСТ-21-1 Парцей С.М.

(Підпис)

Керівники: __________ Іштван Є.О.

(Підпис)

Кількість балів___

Оцінка за шкалою:

Національною____/ЄКТС____
Члени комісії: _____________ Засорнов О.С.

__________ Нічепорук А.О.

(Підпис)

Хмельницький – 2023

ЗМІСТ

ВСТУП 4

1. ПОСТАНОВКА ЗАДАЧІ. 5

2. ОГЛЯД АПАРАТНОЇ СКЛАДОВОЇ 6

2.1 Апаратна платформа Arduino 6

2.2 Принципи роботи давачів газу та диму 7

2.2.1 Газовий давач MQ-2 7

2.2.3 Як працює детектор газу 11

2.2.4 Огляд апаратного забезпечення – модуль давачу газу MQ-2 11

2.2.5 Калібровка модуля давача газу MQ-2 13

2.3 П’єзодинамік 16

2.3.1 Опис та схема роботи зумера 16

2.3.2 Відмінності активного та пасивного зумеру 18

2.4 Потенціометр 19

2.4.1 Принципи роботи потенціометра 20

2.5 РК дисплей 21

2.5.1 Опис пінів РК дисплею 22

2.6 Вибір середовища розробки 23

2.6.1 Tinkercad для Arduino 24

2.6.2 Що таке Tinkercad? 24

3. ПЕРЕДАВАННЯ ДАНИХ ДО ХМАРИ. 25

4.ВИБІР КОМПОНЕНТІВ ДЛЯ ПРОЕКТУВАННЯ 29

4.1Вибір компонентів 29

4.1.1 Плата Arduino 29

4.1.2 Давач газу 29

5.ПІДКЛЮЧЕННЯ ОКРЕМИХ МОДУЛІВ 31

5.1 Підключення модуля давача газу 31

5.2 Підключення зумера до Arduino 32

5.3 Підключення РК дисплею до Arduino 35

5.4 Підключення потенціометра до Arduino 39

5.5 Готовий проект 41

ВИСНОВОК 47

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 48

ВСТУП
Мета курсової роботи у рамках курсу "Смарт технології та Інтернет речей" полягає в розробці системи попередження про наявність газу за допомогою звукового та візуального сигналізування. Окрім цього, передбачається створення та взаємодія двох плат Arduino - одна виступає в ролі Master, інша - в ролі Slave. Ця система призначена для використання в приватних будинках та реалізована за допомогою веб-додатку з назвою Tinkercad. Tinkercad - це онлайн сервіс та середовище моделювання, придатне для роботи з 3D об'єктами та електронними схемами, включаючи плату Arduino Uno.

Arduino є ефективним інструментом для розробки програмованих електронних пристроїв, які відрізняються від персональних комп'ютерів тим, що орієнтовані на тісну взаємодію з оточуючим світом. Це відкрита програмована апаратна платформа, яка пропонує простий мікроконтролер та спеціальне середовище для написання програмного забезпечення.

Arduino може служити для розробки інтерактивних систем, що керуються різними датчиками та перемикачами. Ці системи, в свою чергу, можуть управляти різними індикаторами, двигунами та іншими пристроями. Проекти Arduino можуть бути самостійними або взаємодіяти з програмним забезпеченням на персональному комп'ютері, таким як Flash, Processing, MaxMSP. Існує можливість як ручної збірки плати Arduino, так і покупки готового пристрою; середовище розробки для програмування такої плати має відкритий вихідний код і є повністю безкоштовним..

Для досягнення поставлених завдань використовується мова програмування Arduino C, яка базується на C і є мовою програмування C++ з фреймворком Wiring. Ця мова легко вивчається, що дозволяє початківцям ефективно працювати з даною платформою без високого рівня програмістичних навичок.

1. ПОСТАНОВКА ЗАДАЧІ.

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

Метою даної курсової роботи є створення проекту газового детектора з використанням онлайн-інструменту Tinkercad. Детектор повинен бути здатний виявляти наявність газів у навколишньому повітрі та надавати візуальні та звукові сигнали для інформування користувача про стан середовища.

Задачі, які необхідно вирішити для досягнення поставленої мети:

1. Розробити схему детектора, що включає в себе датчик газу, світлоідіоди (зелений, жовтий та червоний) та пищалку.

2. Підключити компоненти до плати Arduino в Tinkercad та налаштувати їх взаємодію.

3. Написати програмний код для Arduino, який забезпечить реагування детектора на наявність газу, включаючи виведення візуальних та звукових сигналів.

4. Підключити ESP8266 для передавання даних у хмару.

5. Провести тестування проекту на наявність функціональності та визначити його ефективність.

Вибір Tinkercad для реалізації проекту обумовлено його онлайн-характером та можливістю моделювання апаратно-програмних рішень без необхідності фізичної реалізації пристрою. Tinkercad також надає зручний інтерфейс для побудови електричних схем та програмування мікроконтролерів.

Начало формы

2. ОГЛЯД АПАРАТНОЇ СКЛАДОВОЇ

2.1 Апаратна платформа Arduino

Arduino Uno представляє собою пристрій, збудований на основі мікроконтролера ATmega328 (datasheet). В його комплекті міститься весь необхідний функціонал для зручної роботи з мікроконтролером: 14 цифрових входів/виходів (з них 6 можуть використовуватися як ШІМ-виходи), 6 аналогових входів, кварцовий резонатор на 16 МГц, роз'єм USB, роз'єм живлення, роз'єм для внутрішньосхемного програмування (ICSP) та кнопка скидання. Для початку використання пристрою досить просто надати живлення від AC/DC-адаптера або батарейки, або підключити його до комп'ютера за допомогою USB-кабелю. Однак, в відміну від попередніх плат Arduino, Uno використовує мікроконтролер ATmega16U2 (до версії R2 - ATmega8U2) як перетворювач інтерфейсів USB-UART замість мікросхеми FTDI.

Основні характеристики плати Arduino Uno наведені в таблиці 1.1.
Таблиця 1.1 – Характеристики плати Arduino Uno

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

Опис характеристики

Flash-пам'ять

32 КБ, 0.5 КБ використовуються завантажувачем

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

16 МГц

Максимальний струм виводу (3.3V)

50 Ма

Максимальний струм виводу

40 Ма

Кількість аналогових входів

6

Цифрові входи / виходи

14, 6 можуть використовуватися як ШІМ-виходи


Продовження таблиці 1.1 – Характеристики плати Arduino Uno


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

Опис характеристики

Рекомендована напруга живлення

7-12В

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

ATmega328



2.2 Принципи роботи давачів газу та диму

2.2.1 Газовий давач MQ-2
Датчик MQ-2 належить до найбільш розповсюджених серед датчиків газу з лінійки MQ. Це пристрій типу метал-оксид-напівпровідник (МОП, MOS), також відомий як хімрезистор, оскільки виявлення ґрунтується на зміні опору чутливого матеріалу при контакті з газом. Використовуючи простий ланцюг дільника напруги, можна виміряти концентрацію газу.
На рисунку 1.1 зображений давач газу MQ-2


Рисунок 1.1 Давач газу MQ-2
Датчик газу MQ-2 працює при сталій напрузі 5 В і витрачає приблизно 800 мВт енергії. Він може виявляти концентрації зрідженого нафтового газу (LPG), диму, алкоголю, пропану, водню, метану та чадного газу від 200 до 10 000 ppm (мільйонних часток).
Повний список технічних характеристик MQ-2 в таблиці 1.2.1

Таблиця 1.7 – Технічні характеристики MQ-2

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

Опис характеристик

Робоча напруга

5 В

Опір навантаження

20 кОм

Опір нагрівача

33 Ом ± 5%

Споживана потужність

<800 мВт

Опір чутливості

10 кОм - 60 кОм

Вимірювання концентрації

200 - 10000 ppm

Час розігріву

більше 24 годин

2.2.2. Внутрішня структура давач газу MQ-2
Датчик фактично вбудований у два шари тонкої сітки з нержавіючої сталі, відомі як "антивривна сітка" (anti-explosion network). Це забезпечує, що нагрівальний елемент усередині датчика не призводить до вибуху, коли виявляються легкозаймисті гази.
На рисунку 1.2 зображений зовнішні компоненти газового давачу


Рисунок 1.2 – Зовнішні компоненти газового давачу MQ-2
Крім того, вона забезпечує захист датчика та фільтрує важкі частки, тому всередині камери можуть проникати лише газоподібні елементи. Сітка з'єднана з рештою корпусу за допомогою мідного затискного кільця.
На рисунку 1.3 зображена внутрішня структура давачу


Рисунок 1.3 – Внутрішня структура MQ-2
Так виглядає датчик після вилучення зовнішньої сітки. Зіркоподібна структура сформована з чутливого елемента та шести з'єднувальних ніжок, які виступають за межі бакелітової основи. З цих шести, два виходи (означені як H) відповідають за нагрівання сплаву. Інші чотири виходи (позначені як A і B), що відповідають за вихідні сигнали, підключені за допомогою платинових дротів. Ці дроти з'єднані з корпусом чутливого елемента та передають невеликі зміни струму, що проходить через чутливий елемент.
На рисунку 1.4 зображено чутливий елемент давача газу


Рисунок 1.4 – Чутливий елемент

Трубчастий чутливий елемент виготовлений із кераміки на основі оксиду алюмінію (Al2O3) та покритий діоксидом олова (SnO2). Діоксид олова в цьому випадку виступає як ключовий матеріал, оскільки він чутливий до горючих газів. Керамічна підкладка просто підвищує ефективність нагрівання та забезпечує постійне нагрівання області датчика до робочої температури.

На рисунку 1.5 зображена внутрішня структура чутливого елемента


Рисунок 1.5 – Внутрішня структура чутливого елемента
Нікель-хромова котушка та кераміка на основі оксиду алюмінію становлять систему підігріву. У той час, платинові дроти та покриття з діоксиду олова утворюють сенсорну систему, яка відповідає за вимірювання концентрації газів та передачу сигналів про це. Ця комплексна система дозволяє датчику працювати ефективно та надійно в реальних умовах.
2.2.3 Як працює детектор газу
Так, коли частинки напівпровідника, такі як діоксид олова, піддаваються нагріванню на повітрі до високої температури, їх поверхні адсорбують кисень. У чистому повітрі донорні електрони діоксиду олова притягуються до кисню, що адсорбується на поверхні чутливого матеріалу. Це призводить до запобігання електричному струму.

У присутності відновлювальних газів поверхнева щільність адсорбованого кисню зменшується, оскільки він реагує із відновними газами. Ця реакція призводить до вивільнення електронів від діоксиду олова, що, в свою чергу, дозволяє електричному струму вільно протікати через датчик.
2.2.4 Огляд апаратного забезпечення – модуль давачу газу MQ-2
Оскільки сам давач газу MQ-2 не сумісний із макетними платами, рекомендовано для тестів використати цей зручний невеликий модуль. Він простий у використанні та має два різні виходи. Він не тільки видає двійкове уявлення про наявність горючих газів, але також видає аналогове уявлення про їхню концентрацію в повітрі.
На рисунку 1.6 зоражений модуль давачу газу


Рисунок 1.6 – Модуль давачу газу
Напруга на аналоговому виході датчика змінюється пропорційно концентрації диму або газу. Зі збільшенням концентрації газу спостерігається зростання вихідної напруги, тоді як менша концентрація газу призводить до зниження вихідної напруги. Наступна анімація наглядно демонструє взаємозв'язок між концентрацією газу та рівнем вихідної напруги.
На рисунку 1.7 зображена дія давачу газу


Рисунок 1.7 – Дія давачу газу
Аналоговий сигнал від датчика газу MQ-2 поступає на високоточний компаратор LM393 (закріплений у нижній частині модуля) для цифрового перетворення. Біля компаратора розташований невеликий потенціометр, який можна налаштувати для регулювання чутливості датчика. Цей потенціометр дозволяє коригувати рівень чутливості для виявлення концентрації газу в області, яку виявляє датчик.
2.2.5 Калібровка модуля давача газу MQ-2
Для калібрування датчика газу вам слід розмістити його поруч із димом чи газом, який ви хочете виявити, і обертати потенціометр до того моменту, поки на модулі не загориться червоний світлодіод. Обертайте потенціометр за годинниковою стрілкою, щоб збільшити чутливість, або проти годинникової стрілки, щоб зменшити її.
На рисунку 1.8 зображено потенціометр регулювання чутливого модуля


Рисунок 1.8 – Потенціометр регулювання чутливості модуля давачу газу MQ-2
Компаратор на модулі постійно відстежує, чи досягнутий аналоговий вихідний сигнал (A0) порогового значення, встановленого потенціометром. При перетині цього порогового значення цифровий вихід (D0) встановлюється на високий логічний рівень, і вмикається світлодіодний індикатор. Це налаштування особливо корисне, коли необхідно виконати певну дію при досягненні конкретного порогу. Наприклад, при перетині граничного рівня концентрації диму можна ввімкнути або вимкнути реле, подати команду на активацію вентиляції чи системи пожежогасіння.
2.2.5 Розпинівка модуля давачу газу
Подивимося тепер на розпинання.

На рисунку 1.9 зображено розпинівка модуля давача газу


Рисунок 1.9 – Розпинівка модуля давача газу [1]
- VVC: Призначений для живлення модуля. Можна підключити його до виходу 5 В на вашій платі Arduino.

- GND: Вихід землі повинен бути з'єднаний з GND на платі Arduino.

- D0: Надає цифрове представлення про наявність горючих газів.

- A0: Забезпечує аналоговий вихідний сигнал, пропорційний концентрації диму або газу.

2.3 П’єзодинамік
Пищалка на Arduino, часто відома як зуммер, п'єзодинамік або баззер, часто зустрічається в DIY проектах. Цей простий електронний компонент легко підключається до плати Arduino, що дозволяє вам швидко додавати звукові ефекти до вашої схеми - сигналізувати, індикуючи події або навіть відтворюючи мелодії. У цій статті ми розглянемо відмінності між активними і пасивними зумерами, розберемо схему підключення п'єзоелемента до плати Arduino і наведемо приклад коду для управління пищалкою.
2.3.1 Опис та схема роботи зумера
Зумер, п'єзопищалка - це різні назви для одного й того ж пристрою. Ці модулі використовуються для звукового оповіщення в різних пристроях та системах, де необхіден аудіосигнал. Зумери широко використовуються в побутовій техніці та іграшках з електронними платами, надаючи їм можливість відтворювати звукові сигнали, що базуються на двійковій системі числення 1 і 0.

На рисунку 1.10 зображено П’єзоелемент зумер


Рисунок 1.10 – П'єзоелемент зумер

П'єзопищалка складається з металевої пластини, на яку нанесено напилення із струмопровідної кераміки, виступаючи в ролі контактів. Цей пристрій є полярним і має свої «+» та «-». Принцип дії зумера базується на п'єзоелектричному ефекті, відкритому братами Кюрі наприкінці ХІХ століття. При подачі електричного струму на п'єзопищалку відбувається деформація, спричинена ударами об металеву пластину, що породжує "звук" потрібної частоти.

На рисунку 1.11 зображено пристрій п’єзодинаміка зумера

Рисунок 1.11 – Пристрій п'єзодинаміка зумера
Не слід забувати, що існують два основних типи зумерів: активний і пасивний. Обидва вони працюють за тим самим принципом, але активний зумер не має можливості змінювати частоту звучання, хоча він може бути гучнішим та має простіше підключення. Детальніші відомості будуть наведені нижче.

На рисунку 1.12 зображено модуль пищалки для Ардуїно


Рисунок 1.12 – Модуль пищалки для Ардуїно
Звукові оповіщувачі, такі як п'єзоелектричні зумери, можуть бути різного конструктивного вигляду. Найбільш рекомендованим для підключення до плат Arduino є готовий модуль з вбудованою обв'язкою. Такі модулі легко доступні для покупки в інтернет-магазинах.

П'єзопищалка, порівняно з традиційними електромагнітними перетворювачами звуку, відрізняється більш простою конструкцією, що робить її економічно вигідною для використання. Користувач може самостійно визначити частоту отриманого звуку за допомогою програмного забезпечення (приклад програмного коду представлено нижче).
2.3.2 Відмінності активного та пасивного зумеру
Основна відмінність між активним та пасивним зумером полягає у тому, що активний зумер може генерувати звук самостійно. Для цього його потрібно просто увімкнути або вимкнути, тобто подати або припинити подачу напруги на його контакти. З іншого боку, пасивний зумер потребує джерела сигналу, яке визначає параметри звукового сигналу. Таким джерелом може бути, наприклад, плата Arduino. Активний зумер часто відтворює гучніший звук порівняно з пасивним. Частота випромінюваного звуку активного зумера зазвичай складає приблизно 2,5 кГц +/- 300 Гц, а напруга живлення може коливатися від 3,5 до 5 В.

Використання активного п'єзоізлучателя має свої переваги, оскільки для нього не потрібно створювати додатковий фрагмент коду із затримкою, що може впливати на робочий процес. Крім того, для визначення того, чи знаходиться елемент перед користувачем, можна виміряти опір між двома проводами. Вищі значення опору можуть вказувати на активний зумер, підключений до Arduino.

За їх геометричною формою п'єзопищалки майже немають відмінностей, і визначити їх вид за цією характеристикою може бути складно. Однак візуально активний зумер можна ідентифікувати, спостерігаючи наявність резистора і підсилювача на платі. У пасивного зумера на платі може бути лише малий п'єзоелемент.
2.4 Потенціометр
В області робототехніки для налаштування різноманітних параметрів, таких як гучність звуку, потужність, напруга і інші, використовують змінні резистори з регульованим рівнем опору. Один з таких пристроїв - потенціометр ардуіно, підключений до електричної схеми, може служити для регулювання вказаних параметрів. У цьому матеріалі розглянемо різні способи підключення та подаємо приклади скетчів для використання потенціометра.
2.4.1 Принципи роботи потенціометра
Змінний резистор або потенціометр - це електричний пристрій, який може змінювати значення опору в певних межах. Це надає можливість гнучкого налаштування параметрів електричних схем, таких як чутливість датчика або гучність вдинаміці. Потенціометри широко використовуються в схемах регулювання гучності, напруги, контрастності та інших параметрів завдяки своїй простоті та практичності.

На рисунку 1.13 зображені піни потенціометру


Рисунок 1. 13 – Піни потенціометру
В залежності від будови потенціометри поділяються на два основні класи: цифрові та аналогові. У цифрового потенціометра основним елементом є резистивні сходи, де на кожному кроці схеми розташовані електронні перемикачі. У конкретний момент часу активується лише один електронний перемикач, визначаючи певне значення опору. Кількість кроків у сходах визначає діапазон роздільної здатності цифрового потенціометра. З іншого боку, аналоговий потенціометр може змінювати своє значення безперервно, хоча, як правило, в більш вузькому діапазоні, і сам резистор може мати більші розміри.

На рисунку 1.14 зображено потенціометр



Рисунок 1.14 – Потенціометр
Більшість проектів на платформі Arduino використовують цифрові потенціометри, які в основному представлені інтегральними схемами із цифровим показником, розташованим у центрі шкали.
2.5 РК дисплей
LCD дисплей є поширеним елементом у проектах Arduino. У випадках, коли порти Arduino стають обмеженими через потребу великої кількості контактів для підключення дисплея, корисним виходом може стати використання I2C/IIC перетворювача. Цей пристрій дозволяє підключити стандартний LCD екран (наприклад, 1602) до плат Arduino Uno, Nano або Mega, використовуючи лише 4 піни. У нашій статті ми розглянемо процес підключення LCD екрана з інтерфейсом I2C, використання бібліотек для Arduino, надамо приклад коду та вирішимо типові проблеми, які можуть виникнути.1.5.1 РК дисплей Arduino LCD 1602

Рідкокристалічний дисплей (LCD) 1602 є популярним вибором для виведення текстової інформації у проектах Arduino. Він доступний за невелику ціну, має різноманітні модифікації з різними кольорами підсвічування і підтримує використання готових бібліотек для Arduino. Однак, основним обмеженням є те, що у дисплея є 16 цифрових виводів, з яких мінімум 6 обов'язкові для використання. Це може стати проблемою, особливо для плат Arduino Uno або Nano, які мають обмежену кількість доступних контактів. У таких випадках використання інтерфейсу I2C може бути корисним, оскільки він дозволяє зменшити кількість потрібних контактів і спростити підключення LCD дисплея.
2.5.1 Опис пінів РК дисплею
На рисунку 1.15 зображені піни та їх назви


Рисунок 1.15 – Піни та їх назви

Кожен із пінів має своє призначення:

1. Земля GND;

2. Живлення 5 В

3. Встановлення контрастності монітора;

4. Команда, дані;

5. Записування та читання даних;

6. Enable;

7-14. Лінії даних;

15. Плюс підсвічення

16. Мінус підсвічування
Характеристики дисплея:

  • Символьний тип відображення є можливість завантаження символів;

  • Світлодіодна підсвітка;

  • Контролер HD44780;

  • Напруга живлення 5В;

  • Формат 16х2 символів;

  • Діапазон робочих температур від -20°С до +70°С, діапазон температур зберігання від -30°С до +80°С;

  • Кут огляду 180 градусів.


2.6 Вибір середовища розробки
Вибір програми Tinkercad для реалізації ардуіно-проекту є дуже розумним. Tinkercad Circuits Arduino, розроблений компанією Autodesk, є високоякісним емулятором ардуіно, що дозволяє вам працювати з проектами без прямого використання фізичної плати Arduino.

Такі онлайн-сервіси та програми, як Tinkercad Circuits Arduino, дають можливість вам емулювати та тестувати ваші проекти без необхідності мати фізичну плату Arduino. Це особливо корисно для початківців, які можуть вивчати та розробляти свої навички без витрат на обладнання.

Крім Tinkercad, існують інші популярні емулятори та симулятори Arduino, які також можуть бути корисні для розробки та тестування проектів.
2.6.1 Tinkercad для Arduino
Tinkercad Circuits Arduino визначається як безкоштовний та простий у використанні емулятор Arduino, який дозволяє початківцям вивчати електроніку та робототехніку без необхідності власної фізичної плати Arduino. Він надає зручне онлайн-середовище для розробки та тестування проектів, і вам не потрібно нічого купувати або завантажувати – все доступно через Інтернет. Цей інструмент дозволяє зареєструватися та почати навчання електроніці та програмування, а також створювати та тестувати ардуіно-проекти.
2.6.2 Що таке Tinkercad?

Tinkercad - це онлайн-сервіс, який належить Autodesk і відомий своєю простотою та безкоштовністю у використанні для навчання 3D-моделювання. Українським користувачам раніше можливо було складно користуватися сервісом через відсутність українського інтерфейсу, але ця ситуація, можливо, вже виправилася. Недавно Tinkercad отримав можливість створення електронних схем та підключення їх до віртуальних плат Arduino для симуляції. Це значущий інструмент, який спрощує навчання, проектування та програмування для початківців у розробці Arduino-проектів.

3. ПЕРЕДАВАННЯ ДАНИХ ДО ХМАРИ.

Хмарові сервіси стають все більш популярними для зберігання та обробки даних, особливо в проектах Інтернету Речей (IoT). У цій доповіді розглянемо використання мікроконтролера ESP8266 для зчитування даних з датчика та їх подальшу передачу до хмарового сервісу, зокрема до Google таблиць.

ESP8266 є потужним мікроконтролером, особливо популярним в галузі IoT. Ми використовуватимемо його разом з датчиком, щоб вимірювати певні параметри.

Для передачі даних до хмари використаємо Google Sheets як простий хмаровий сервіс. ESP32 використовує бібліотеку GoogleSheets для взаємодії з Google Sheets API. З цією бібліотекою ми можемо легко відправляти дані з ESP8266 безпосередньо в Google таблицю.

У коді на ESP8266 ми використовуємо бібліотеку для взаємодії з датчиком та бібліотеку для відправки даних до Google Sheets. Ми зчитуємо дані з датчика, виводимо їх на LCD-дисплей та відправляємо до Google таблиці.

Бібліотека GoogleSheets дозволяє легко інтегрувати ESP8266 з Google Sheets API. Для цього вам потрібно мати створений скрипт Google Apps Script, який буде обробляти дані, які надходять від ESP8266.

У сфері Інтернету Речей (IoT) існують різні рівні архітектури, що взаємодіють між собою для забезпечення функціоналу та обробки даних. Основні рівні включають рівень краю (Edge), рівень вузла (Endpoint) та рівень хмари (Cloud).

Давайте розглянемо кожен з цих рівнів:

1. Рівень краю (Edge):

- Опис:Рівень краю охоплює пристрої, які функціонують безпосередньо на межі (або краю) мережі. Це може бути різноманітні IoT-пристрої, сенсори, вбудовані системи, шлюзи та інше обладнання, розташоване фізично близько до джерела даних або на межі мережі.

- Функції: Обробка даних на місці їх виникнення, зменшення завантаження мережі, швидка реакція на події, локальне управління та аналітика.

2. Рівень вузла (Endpoint):

- Опис: Рівень вузла включає в себе окремі IoT-пристрої (вузли), які можуть взаємодіяти з рівнем краю та передавати дані між краєм та хмарою. Це можуть бути датчики, актуатори, контролери та інші пристрої, що збирають або обробляють дані.

- Функції: Збір та передача даних, виконання обчислень на рівні вузла, взаємодія з рівнем краю та хмарою.

3. Рівень хмари (Cloud):

- Опис: Рівень хмари включає в себе великі обчислювальні ресурси, зберігання даних та програмне забезпечення, розташоване в хмарах. Це може бути публічне хмарове обчислення або приватне хмарове середовище.

- Функції: Централізована обробка та аналіз даних, зберігання великих обсягів інформації, масштабування інфраструктури, надання послуг на основі обчислень.

Зв'язок між рівнями:

- Рівень краю може виконувати попередню обробку даних та передавати лише важливі інформаційні фрагменти на рівень вузла.

- Рівень вузла дозволяє взаємодіяти з рівнем краю, обмінюватися даними та виконувати локальні обчислення.

- Рівень хмари отримує дані від рівня вузла та може здійснювати глибшу обробку, аналіз і зберігання даних.

Архітектура IoT на рівнях краю, вузла та хмари надає гнучкість, ефективність та розширюваність для впровадження різноманітних проектів. Вона дозволяє забезпечувати обробку даних на різних рівнях в залежності від вимог конкретного застосування.

#include

#include

const char* ssid = "Rcosmo1";

const char* password = "sdfsdaf4etfg43";

// Function to get the state of the LED

int get_led_state() {

return digitalRead(LED_PIN);

}

// Function for receiving a message from the displayя

String get_lcd_message() {

return lcd.message;

}

// Function to get date and time

String get_datetime() {

now = time.localtime();

return f"{now.tm_year}-{now.tm_mon}-{now.tm_mday} T {now.tm_hour} :{now.tm_min}: {now.tm_sec} " ;

}

// Function for transferring data to Google Sheet

void sendDataToGoogleSheet() {

if (WiFi.status() == WL_CONNECTED) { // Перевірити підключення до Wi-Fi

HTTPClient http;

// Prepare data for sending

String data = "?datetime=" + get_datetime() + "&led_state=" + String(get_led_state()) + "&message=" + get_lcd_message()

// Google Sheet URL

http.begin("https://script.google.com/macros/s/" + TABLE_ID + "/exec" + data);

int httpResponseCode = http.GET();

if (httpResponseCode > 0) {

String response = http.getString();

Serial.println(response);

} else {

Serial.print("Error sending data: ");

Serial.println(httpResponseCode);

}

http.end();

} else {

Serial.println("WiFi not connected");

}

}



Рисунок 2.1 Таблиця.

4.ВИБІР КОМПОНЕНТІВ ДЛЯ ПРОЕКТУВАННЯ

4.1Вибір компонентів

4.1.1 Плата Arduino
Arduino Uno обрано як основну плату для розробки системи розумного освітлення, оскільки це найбільш поширена модель серії Arduino. Проект не потребує специфічних можливостей, які мають інші моделі, такі як велика кількість вхідних та вихідних портів (Arduino Mega), великі навантаження, або обмежений простір (Arduino Mini, Micro, Nano). Також важливо відзначити, що не потрібно мати можливість встановлювати свої роз'єми, як це робиться, наприклад, у моделі Arduino Pro за допомогою пайки.

Arduino Uno відзначається своїми "середніми" параметрами, спроектованими для типового користувача, і є широко використовуваною моделлю для навчання. Це забезпечує великий попит і дозволяє легко отримувати нові моделі або замінювати пошкоджені порти плати у випадку необхідності. Arduino Uno також може зберігати достатньо великий об'єм програмного коду в пам'яті і виконувати його досить швидко..
4.1.2 Давач газу
Чутливий елемент або вимірювальний перетворювач для визначення якісного та/або кількісного складу газової суміші. Це основний складовий елемент газоаналізаторів та газосигналізаторів.

Газові сенсори є складовою частиною датчиків або систем вимірювання та контролю, де, крім них, включають системи перетворення сигналу та індикації. Основною функцією газового сенсора є конвертація концентрації аналізованої речовини в електричний або інший сигнал, що дозволяє реєструвати і візуалізувати цей сигнал. Найбільш поширеними типами є напівпровідникові, електрохімічні та оптичні (інфрачервоні) сенсори.

Газові сенсори є складовою частиною датчиків або систем вимірювання та контролю, де, крім них, включають системи перетворення сигналу та індикації. Основною функцією газового сенсора є конвертація концентрації аналізованої речовини в електричний або інший сигнал, що дозволяє реєструвати і візуалізувати цей сигнал. Найбільш поширеними типами є напівпровідникові, електрохімічні та оптичні (інфрачервоні) сенсори.

5.ПІДКЛЮЧЕННЯ ОКРЕМИХ МОДУЛІВ

5.1 Підключення модуля давача газу
Після того, як ми зрозуміли, як працює датчик газу MQ-2, ми можемо легко підключити його до плати Arduino! Виконайте наступні кроки:

1. Встановіть датчик газу MQ-2 на макетну плату.

2. Підключіть вивід VCC датчика до виводу 5V на Arduino.

3. Підключіть вивід GND датчика до виводу Ground на Arduino.

4. Підключіть вихідний вивід D0 на модулі до цифрового виводу 8 на Arduino.

5. Підключіть вихідний вивід A0 на модулі до аналогового виводу 0 на Arduino.

За допомогою цих з'єднань датчик буде готовий до використання з платою Arduino, і ви зможете взаємодіяти з ним через вбудовані порти та функції Arduino для отримання і обробки даних від датчика газу.Коли ви закінчите, у вас має вийти щось схоже на малюнок нижче.

На рисунку 3.1 зображено підключення завача газу



Рисунок 3.1 – Підключення давача газу

5.2 Підключення зумера до Arduino
Підключення п'єзоелемента до Ардуіно може бути легкою операцією. Завдяки низькому споживанню енергії можна безпосередньо з'єднати його з відповідним піном без великих труднощів.
На рисунку 3.2 зображено підключення зумера


Рисунок 3.2 – Підключення зумера до Ардуїно
Електрична схема підключення п'єзоелемента без модулів, що супроводжують, виглядає наступним чином.
На рисунку 3.3 зображена схема підключення зумеру


Рисунок 3.3– Схема підключення зумеру
У деяких варіантах корпусів зумера можна знайти отвір для фіксації плати за допомогою гвинта. Зумер Arduino має два виходи, і важливо враховувати їхню полярність. Темний провід слід підключити до "землі", а червоний - до цифрового піна з PWM. Один з виводів налаштовується у програмі як «вхід». Arduino відстежує коливання напруги на виводі, на який подається напруга з кнопки, резистора та датчиків.
На рисунку 3.4 зображено пищалка ардуїно з назвою контактів


Рисунок 3.4 – Пищалка Ардуїно з назвою контактів
Напруга, яка подається на вхід, має різні значення, але система чітко розпізнає лише два стани - логічні "0" та "1". Логічна одиниця відповідає напрузі від 2,3 до 5 В. У режимі виводу Arduino генерує логічний "0" або "1". Якщо обрати режим логічного "0", то напруга настільки мала, що недостатня для запалювання світлодіода.

На рисунку 3.5 зображена схема підключення пищалки



Рисунок 3.5 – Схема підключення пищалки до Ардуїно
Обережно використовуйте підключення, оскільки входи є досить чутливими до зовнішніх перешкод. Рекомендується підключати ніжку п'єзоелемента до висновку через резистор, що дозволить досягти високого рівня напруги на цій ніжці.
5.3 Підключення РК дисплею до Arduino
Стандартна схема приєднання монітора безпосередньо до мікроконтролера Ардуїно без I2C виглядає так.


На рисунку 3.6 зображено підключення дисплею без І2С


Рисунок 3.6 – Підключення дисплею без І2С
Через велику кількість контактів, які потрібно підключити, може виникнути проблема нестачі місця для приєднання всіх необхідних елементів. Використання I2C дозволяє значно зменшити кількість дротів до 4 і кількість використовуваних пінів до 2. Для з'єднання необхідні такі компоненти, як сама плата Ардуіно, дисплей, макетна плата, з'єднувальні дроти та потенціометр..

Якщо ви використовуєте індивідуальний i2c перехідник, спочатку потрібно припаяти його до модуля екрана. Для уникнення помилок в процесі, використовуйте цю схему як вказівку.

На рисунку 3.7 зображено монітор з підтримкою I2C



Рисунок 3.7 – Монітор з підтримкою I2C

Монітор із рідким кристалом та підтримкою i2c приєднується до плати за допомогою чотирьох дротів: два для передачі даних та два для живлення.

- Виходи GND підключаються з GND плати.

- Виходи VCC підключаються до 5В.

- SCL приєднується до піну А5.

- SDA приєднується до піну А.

На рисунку 3.8 зображено підключення І2С з РК екраном



Рисунок 3.8 – Підключення І2С з РК екраном

На рисунку 3.8 зображено підключення РК екрану



Рисунок 3.9 – Підключення РК екрану

І готово! Більше жодних заплутаних проводів, які легко сплутати. При цьому всю складність реалізації протоколу I2C ми можемо просто довірити бібліотекам.
5.4 Підключення потенціометра до Arduino
Підключення потенціометра до Arduino виконується згідно з поданою на малюнку схемою:

На рисунку 3.10 зображено підключення потенціометра



Рисунок 3. 10 – Підключення потенціометра

Для цього треба з'єднати три висновки потенціометра з вказаними висновками плати наступним чином:

- Чорний провід – до GND

- Червоний провід – до живлення 5В

- Зелений провід – від центрального виходу до каналового виходу A0

Змінюючи положення валу підключеного потенціометра, відбувається зміна параметра опору, що призводить до зміни значення на нульовому піні плати Arduino. Отримане значення напруги аналогового сигналу зчитується у скетчі за допомогою команди analogRead().

У платі Arduino вбудований аналого-цифровий перетворювач, який може зчитувати напругу і конвертувати її в цифрові значення від нуля до 1023. При повороті покажчика у одному з двох можливих напрямків до кінцевого значення, напруга на піні стає рівною нулю, а отже, числове значення становить 0. При повороті валу у протилежному напрямку напруга на піні досягає 5В, і, відповідно, числове значення становить 1023.

5.5 Готовий проект







Лістинг програмного забезпечення

#include

#include

#include

#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int a;

int red = 8; // Пін 8 призначено для червоного світлодіода.

int yellow = 9; // Пін 9 призначено для жовтого світлодіода.

int green = 10; // Пін 10 призначено для зеленого світлодіода.

int alarm = 6; // Пін 6 призначено для динаміка.

const char* ssid = "Rcosmo1";

const char* password = "sdfsdaf4etfg43";
// Функція для отримання стану світлодіода

int get_led_state() {

return digitalRead(LED_PIN);

}
// Функція для отримання повідомлення з дисплею

String get_lcd_message() {

return lcd.message;

}
// Функція для отримання дати та часу

String get_datetime() {

now = time.localtime();

return f"{now.tm_year}-{now.tm_mon}-{now.tm_mday}T{now.tm_hour}:{now.tm_min}:{now.tm_sec}";

}
// Функція для передачі даних до Google Sheet

void sendDataToGoogleSheet() {

if (WiFi.status() == WL_CONNECTED) { // Перевірка підключення до Wi-Fi

HTTPClient http;
// Підготовка даних для відправлення

String data = "?datetime=" + get_datetime() + "&led_state=" + String(get_led_state()) + "&message=" + get_lcd_message();

// URL Google Sheet

http.begin("https://script.google.com/macros/s/" + TABLE_ID + "/exec" + data);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {

String response = http.getString();

Serial.println(response);

} else {

Serial.print("Error sending data: ");

Serial.println(httpResponseCode);

}
http.end();

} else {

Serial.println("Wi-Fi not connected");

}

}
void setup() {

Wire.begin(4); // Ініціалізація шини I2C з адресою "4".

Wire.onReceive(receiveEvent); // Реєстрація події.

Serial.begin(9600); // Ініціалізація монітору Serial.

lcd.begin(16, 2); // Налаштування кількості стовпців та рядків ЖК-дисплея.

lcd.print("Alarm ON!"); // Виведення повідомлення на ЖК-дисплей.

delay(500); // Повідомлення залишається на дисплеї протягом 0.5 секунд.

lcd.clear(); // Очищення ЖК-дисплея.

pinMode(red, OUTPUT); // Налаштування піна red як вихід.

pinMode(yellow, OUTPUT); // Налаштування піна yellow як вихід.

pinMode(green, OUTPUT); // Налаштування піна green як вихід.

pinMode(alarm, OUTPUT); // Налаштування піна alarm як вихід.

Serial.begin(9600);

WiFi.begin("ssid", "password");

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("Wi-Fi connected");

pinMode(LED_PIN, OUTPUT);

lcd.begin(16, 2);

}
void loop() {

a = analogRead(A3); // Присвоєння значення порту A3 змінній "a".

Serial.println(a); // Виведення змінної "a" у монітор Serial.

delay(500);

Wire.beginTransmission(4); // Відсилання до пристрою "4".

Wire.write("ON "); // Відсилання трьох байт.

Wire.write(a); // Відсилання одного байту.

Wire.endTransmission(); // Завершення передачі.

delay(500);

lcd.setCursor(0, 1); // Встановлення курсору в стовпець 0, рядок 1.

delay(500);

int led_state = get_led_state();

String message = get_lcd_message();

sendDataToGoogleSheet(); // Відправка даних до Google Sheets

delay(1000); // Затримка на 1 секунду

}

void receiveEvent(int howMany) {

while (1 < Wire.available()) // Прохід по всіх, крім останнього.

{

char c = Wire.read(); // Отримання байта як символ в змінну "c".

Serial.print(c); // Виведення повідомлення "ON" в монітор Serial.

delay(300); // Повідомлення виводиться кожні 0.5 секунди.

}

int d = Wire.read(); // Отримання байта як ціле число в змінну "d".

Serial.println(d); // Ціле число виводиться в монітор Serial.

delay(500); // Ціле число виводиться кожні 0.5 секунди.

/* Оператор if для перевірки вказаних умов. Якщо умова "true",

трапляться ці події.*/

if (d < 160)

{

digitalWrite(green, HIGH); // Увімкнення зеленого світлодіода.

digitalWrite(yellow, LOW); // Вимкнення жовтого світлодіода.

digitalWrite(red, LOW); // Вимкнення червоного світлодіода.

noTone(alarm); // Вимкнення динаміка.

lcd.setCursor(0, 1); // Встановлення курсору в стовпець 0, рядок 1.

lcd.print("SAFE"); // Виведення повідомлення на ЖК-дисплей.

delay(500); // Повідомлення залишається на дисплеї протягом 0.5 секунди.

lcd.clear(); // Очищення ЖК-дисплея.

lcd.setCursor(0, 0); // Встановлення курсору в стовпець 0, рядок 0.

lcd.print("ALL CLEAR"); // Виведення повідомлення на ЖК-дисплей.

delay(500); // Повідомлення залишається на дисплеї протягом 0.5 секунди.

lcd.clear(); // Очищення ЖК-дисплея.

} // Закінчення першої умови.
if ((d > 160) and (d < 192)) // Оператор if для перевірки двох умов.

{

digitalWrite(green, LOW); // Вимкнення зеленого світлодіода.

digitalWrite(yellow, HIGH); // Увімкнення жовтого світлодіода.

digitalWrite(red, LOW); // Вимкнення червоного світлодіода.

noTone(alarm); // Вимкнення динаміка.

lcd.setCursor(0, 1); // Встановлення курсору в стовпець 0, рядок 1.

lcd.print("ALERT"); // Виведення повідомлення на ЖК-дисплей.

delay(500); // Повідомлення залишається на дисплеї протягом 0.5 секунди.

lcd.clear(); // Очищення ЖК-дисплея.

} // Закінчення другої умови.
if (d > 192) // Оператор if для перевірки вказаної умови.

{

digitalWrite(green, LOW); // Вимкнення зеленого світлодіода.

digitalWrite(yellow, LOW); // Вимкнення жовтого світлодіода.

digitalWrite(red, HIGH); // Увімкнення червоного світлодіода.

tone(alarm, 500, 500); // Увімкнення динаміка (частота, тривалість).

lcd.clear(); // Очищення ЖК-дисплея.

lcd.setCursor(0, 0); // Встановлення курсору в стовпець 0, рядок 0.

lcd.print("DANGER"); // Виведення повідомлення на ЖК-дисплей.

delay(500); // Повідомлення залишається на дисплеї протягом 0.5 секунди.

lcd.clear(); // Очищення ЖК-дисплея.

lcd.setCursor(0, 1); // Встановлення курсору в стовпець 0, рядок 1.

lcd.print("EVACUATE"); // Виведення повідомлення на ЖК-дисплей.

delay(500); // Повідомлення залишається на дисплеї протягом 0.5 секунди.

lcd.clear(); // Очищення ЖК-дисплея.

} // Закінчення третьої умови.

}

ВИСНОВОК



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

Наш код було розроблено з використанням різноманітних додатків та джерел, а також ми використовували середовище моделювання Tinkercad.

Tinkercad - онлайн-сервіс, який зараз належить мастодонту світу CAD-систем – компанії Autodesk. Тінкеркад вже давно відомий багатьом як просте та безкоштовне середовище для навчання. З її допомогою можна досить легко створювати свої моделі. Єдиним обмеженням для українського сегменту інтернету тривалий час була відсутність українського інтерфейсу, зараз ця ситуація виправляється. Програмне забезпечення Tinkercad відкриває широкий простір для експериментів з платою Arduino Uno навіть для тих, хто не має можливості отримати її в житті. Воно також дозволяє використовувати кілька плат Arduino Uno в одному проекті і писати код окремо під кожну з них, що дає можливість взаємодіяти між кількома платами або створювати одну велику систему з кількома, пов’язаними між собою логічно і фізично, платами

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ





  1. ARDUINO.UA. URL: https://doc.arduino.ua/ru/hardware/Uno

  2. ARDUINO.CC. URL: https://www.arduino.cc

  3. Proteus. URL: https://www.labcenter.com/iotbuilder/

  4. UnoArduSim. URL: https://www.sites.google.com/site/unoardusim/home

  5. Fritzing. URL: https://fritzing.org/

  6. EasyEDA. URL: https://easyeda.com/ru

  7. TinkerCad Circuits. URL: https://www.tinkercad.com/dashboard?type=circuits&collection=designs

  8. VBB4Arduino URL: https://www.virtualbreadboard.com

  9. Autodesk Eagle URL: https://www.autodesk.com/products/eagle/free-download

  10. Vijay Verma. Arduino Based Four Way Traffic Light System: Arduino Based Project / Verma, Vijay // Vijay Verma, 2021. – Pp. 1-53.

  11. Kurniawan A. Arduino Uno: A Hands-On Guide for Beginner / A. Kurniawan // PE Press; 1st edition (11 December 2015). – Pp. 8-94.

  12. Obakoma G. Martins. Arduino 101: A Technical Reference to Setup and Program Arduino Zero, Nano, Due, Mega and Uno Projects / Martins, Obakoma G. // Independently published (October 16, 2020). – Pp. 9-1

скачати

© Усі права захищені
написати до нас