Главное меню

Дистанционный мониторинг температуры и влажности помещения и дистанционное управление светом на основе Arduino PDF Печать E-mail
Автор: Янышев В.С., Мальцев Д.В.   
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
 
Яндекс.Метрика