Дистанционный мониторинг температуры и влажности помещения и дистанционное управление светом на основе Arduino |
Автор: Янышев В.С., Мальцев Д.В. |
01.06.2020 05:00 |
ДИСТАНЦИОННЫЙ
МОНИТОРИНГ ТЕМПЕРАТУРЫ И ВЛАЖНОСТИ ПОМЕЩЕНИЯ И ДИСТАНЦИОННОЕ УПРАВЛЕНИЕ СВЕТОМ
НА ОСНОВЕ ARDUINO Янышев В.С., Мальцев Д.В. г. Бирск, ФГБОУ ВО Бирский филиал БашГУ Системы дистанционного
мониторинга параметров помещения приобретают большую популярность. Помимо
считывания параметров, пользователь может включать домашние приборы, например
освещение, обогреватель. Подобные системы могут
строиться на разной технологической основе, в зависимости от накладываемого
функционала и цели создания системы. Для учебных целей наиболее
распространенными решениями можно считать микроконтроллеры Arduino. Для выполнения
выпускной квалификационной работы была поставлена задача разработать систему,
которая позволит получать и сохранять данные о температуре и влажности
помещения, включать и выключать свет. Считывание данных и управление
светом должно осуществляться через веб-сайт. Доступ к данным должен
быть только у зарегистрированных пользователей. Внешний вид сайта
выполнен в минималистическом стиле. Выводится только нужная информация. Рисунок
1. Дизайн основного сайта Для отправки данных на
сервер микроконтроллер Arduino
UNO
должен
считывать параметры помещения. Для этого используется датчик DHT11. Так же к микроконтроллеру
подключается лампочка, имитирующая лампу для освещения помещения. Схема
подключения датчика DHT11
показана на рисунке 2. Рисунок
2. Схема подключения датчика DHT11к
Arduino Датчик температуры и
влажности DHT11 подключается с помощью 3 выходов. Выход VCC подключается
к 5 вольтовому питанию в Ethernet
Shield
для питания датчика. GND
выход
соответственно подключается к пину GND в Ethernet Shield, который служит точкой нулевого
потенциала в плате. Выход OUT
подключается
к пину 2 в Ethernet
Shield.
Данный пин используется для получения данных о влажности и температуре воздуха,
из датчика влажности и температуры DHT11. Для взаимодействия с
микроконтроллером Arduino
необходимо
подключить плату Ethernet Shield к
Arduino
Uno,
образуя некий «бутерброд» (Рисунок 3).
С помощью EthernetShield
идет
подключение к роутеру через витую пару. Рисунок
3. Подключение Ethernet
Shield
к
Arduino
Uno Для подключения
лампочки требуется использовать 2 пина: номер 3, который отвечает за контроль
состояния, и пин GND.
Схема подключения показана на рисунке 4. Рисунок
4. Схема подключения лампочки Для передачи данных с
микроконтроллера необходимо создать скетч по передачи данных с платы на сервер.
Скетч пишется на языке С++. Средой разработки для данного программного кода
выбран Arduino
IDE.
С помощью одного USB
кабеля
можно питать, программировать, и обменивается сообщениями с платой Arduino. Объявление переменных и функция setup реализованы
следующим образом. EthernetClient client; char server[] = "temperaturecheck.ru"; int buff=0; const int led=4; int t = 0; int h = 0; void setup() { Ethernet.begin(mac); dht.begin();
pinMode(
led, OUTPUT); digitalWrite(led, LOW); } Переменная server[] принимает доменное имя хоста. Далее объявляются
пин, который используется для управления лампочкой и пин управления, который
подключен к датчику DHT11.
Функция setup
включает
в себя подключение к хосту, подключение библиотеки для взаимодействия с
датчиком DHT11,
подключение лампочки и самого датчика к пинам. void loop() { t
= (int) dht.readTemperature(); h
= (int) dht.readHumidity(); if
(client.connect(server, 80)) { client.print(
"GET /add_data.php?"); client.print("temperature="); client.print(
t ); client.print("&"); client.print("&"); client.print("humidity="); client.print(
h ); client.println(
" HTTP/1.1"); client.print(
"Host: " ); client.println(server); client.println(
"Connection: close" ); client.println(); client.println(); delay(200); while
(client.available()) { char
c = client.read(); if
( c=='1') { buff=1; } if
( c=='0') { buff=0; } } client.stop(); client.flush(); delay(100); } else { client.stop(); delay(1000); client.connect(server,
80); } if
( buff==1) { digitalWrite
(led, HIGH); } else { digitalWrite(led,
LOW); } delay(500); } Функция loop является
основной функцией скетча по передачи данных на сервер. Вначале идет подключение
микроконтроллера на сервер, через доменное имя. После успешного подключения, запускается
фрагмент кода по взаимодействию с микроконтроллером, находящимся на сервере,
далее идет передача данных на текстовые файлы, находящиеся на сервере. После
успешной передачи проверяются данные, считанные с сервера, и в зависимости от
команд меняется состояние лампочки. Далее идет задержка в пол секунды и повторяется
функция loop
снова.
Отправленные данные должны быть приняты на сервере. Код
на языке php
по
принятию данных с микроконтроллера выглядит следующим образом. <?php
$S1 = $_GET['temperature'];
$myFile1 = "txt/in-1.txt"; $fh1 = fopen($myFile1,
'w') or die("can't open file"); fwrite($fh1, $S1); fclose($fh1); $S3 =
$_GET['humidity'];
$myFile3 = "txt/in-2.txt"; $fh3 = fopen($myFile3,
'w') or die("can't open file"); fwrite($fh3, $S3); fclose($fh3); $myFile = "txt/out-1.txt"; $fh = fopen($myFile, 'r'); $theData = fread($fh,
filesize($myFile)); fclose($fh); echo $theData; ?> В данном коде сначала
совершается процесс принятия данных о температуре воздуха с микроконтроллера Arduino UNO. Далее идет передача данных в
текстовый файл, находящийся на сервере. Такой же процесс совершается и с
данными о влажности воздуха, полученными с микроконтроллера Arduino UNO. Также сервер передает команду для
лампочки, которая указана в текстовом файле. |
Обновлено 05.06.2020 17:48 |