
пр7_190
.docxМИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра ИС
ОТЧЕТ
по лабораторной работе №7
по дисциплине «ИКСиС»
Тема: Технологии интернета вещей
Студент
гр.
Преподаватель Воробьёв А.И.
Санкт-Петербург 2023
Цель работы:
Разработать концепцию аппаратно-программной системы, которая обеспечивает мониторинг выбранных студентом физических параметров жизненного пространства человека в некоторой предметной области.
Выбранная система:
Для выполнения работы была выбрана аппаратно-программная система мониторинга температуры и времени на базе Arduino с модулем DS3231.
Актуальность:
Разработка аппаратно-программной системы мониторинга температуры имеет высокую актуальность в настоящее время, так как обеспечивает более надежный и точный мониторинг температуры в помещении. Такая система может быть полезна для различных целей, включая управление системой отопления и кондиционирования воздуха, контроль температуры в хранилищах и лабораториях, а также для обеспечения комфортных условий жизни и работы. Система будет автоматически отправлять полученные данные в облако LORAWAN.
Описание системы:
Система мониторинга времени и температуры на базе Arduino с модулем DS3231. Система на основе платы The Things Uno, которая отправляет данные по сети LORAWAN в сервис The Things Network.
DS3231 - точные часы реального времени (RTC) I2C со встроенным датчиком температуры. Устройство имеет батарейный отсек и поддерживает точный хронометраж, когда основное питание устройства прерывается.
Модуль имеет встроенный датчик температуры, который может быть использован для корректировки показаний основного датчика температуры или для других целей. Разрешение встроенного датчика температуры составляет 0,25°C, а точность - ±3°C. Регистр температуры обновляется после каждого 64-секундного преобразования. Это позволяет получать достаточно точные показания температуры в широком диапазоне температур.
Необходимые компоненты:
- Arduino;
-Макетная плата;
-Перемычки;
-Модуль DS3231;
-OLED-дисплей.
Модуль DS3231 (RTC, ZS-042) — представляет собой недорогую плату с чрезвычайно точными часами реального времени (RTC), с температурной компенсацией кварцевого генератора и кристалла. Модуль включает в себя литиевую батарею, которая поддерживает бесперебойную работу, даже при отключении источник питания. Интегрированный генератор улучшить точность устройства и позволил уменьшить количество компонентов.
Графический дисплей, каждый пиксель которого является отдельным OLED (organic light-emitting diode) светодиодом. В отличии от TFT (Thin-Film Transistor), LCD (ЖК) и других дисплеев, этот дисплей не нуждается в подсветке, каждый пиксель светится самостоятельно, а не затемняет свет подсветки.
Перемычки - разновидность соединительного провода. Она сделана таким образом, чтобы можно было удобно соединять отдельные компоненты между собой, а также собирать схему на макетной плате и подключать различные модули напрямую к плате Arduino.
Беспаечная макетная плата (breadboard) для Arduino используется при быстрой сборке схем без необходимости пайки радиоэлементов и проводов для соединения.
Ход изготовления:
Подключение DS3231 к Arduino.
Подключение модуля RTC к Arduino осуществляется следующим образом:
- Вывод VCC к выводу Arduino 5V;
- GND к GND;
- SDA к аналоговому контакту A4 Arduino;
- Вывод SCL к аналоговому выводу A5 Arduino.
Нужно использовать именно эти контакты, поскольку они предназначены для связи по протоколу I2C.
Код для отображения времени.
Создание простейшего эскиза для отображения даты и времени в самом простом формате.
Будет использоваться библиотека DS3231.
#include <Wire.h> <br> #include <DS3231.h>
DS3231 clock;<br>RTCDateTime dt;
uint16_t year,
uint8_t month,
uint8_t dayOfWeek,
uint8_t hour,
uint8_t minute,
uint8_t second
void setup() {
Serial.begin(9600);
clock.begin();
// Set sketch compiling time
clock.setDateTime( __DATE__ , __TIME__ );
void loop(){
dt = clock.getDateTime();
Serial.print(dt.year); Serial.print("-");
Serial.print(dt.month); Serial.print("-");
Serial.print(dt.day); Serial.print(" ");
Serial.print(dt.hour); Serial.print(":");
Serial.print(dt.minute); Serial.print(":");
Serial.print(dt.second); Serial.println("");
delay(1000);
}
Считывание температуры с помощью DS3231.
DS3231 RTC имеет встроенный датчик температуры с разрешением 0,25 и точностью ± 3 ° C.
Если нужно принудительное преобразование температуры, используется forceConversion ()
Поэтому, если нужно отображать температуру в основном цикле, добавляем следующие строки кода:
clock.forceConversion();
Serial.print("Temperature: ");
Serial.println(clock.readTemperature());
Подключение OLED-дисплея:
OLED-дисплей также необходимо подключить через контакты A4 и A5, поскольку этот OLED-дисплей также является устройством I2C. Но эти выводы уже заняты. Для начала подключим VCC и землю OLED-дисплея к Arduino.
Arduino подключается к шине I2C с линией последовательных данных, сокращенно SDA, и линией последовательных часов, называемой SCL через аналоговый вывод А4 к SDA и через аналоговый вывод A5 к SCL. Микроконтроллер — это ведущее устройство.
Способ подключения к шине I2C может отличаться в зависимости от того, какая плата Arduino используется.
У каждого устройства есть свой уникальный адрес. Таким образом, модуль DS3231 RTC должен быть доступен по адресу 68hex, а OLED-дисплей должен иметь шестнадцатеричный адрес 3C. Однако, если будут проблемы при подключении любого из компонентов, можно использовать скетч сканера I2C для обнаружения всех доступных устройств, подключенных к шине, и их адресов.
Пользовательские функции, необходимые для отображения времени в правильном формате.
Чтобы иметь возможность форматировать выходные значения, считанные из модуля RTC, в желаемый формат даты и времени, нужно написать следующую функцию:
День недели - конвертирует день недели в полное название дня (1-7-> Mon-Sun)
DayMonthYear - преобразует день месяца и год в одну строку. Объединяет его с кратким названием месяца, порядковым обозначением дня месяца, а затем с полным годом.
AddLeadingZero - используется для добавления начального нуля к показаниям одной цифры в течение часа, минут и секунд
CurrentTime - читает часы и минуты.
Код для отображения времени на OLED-дисплее.
Имея пользовательские функции, можно написать код, который будет отображать дату и время в нужном формате на OLED -дисплее.
Для этого потребуется еще две библиотеки для управления дисплеем.
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.display(); //display initial Adafruit logo
delay(2000);
// Clear the display
display.clearDisplay();
display.display();
Код основного цикла для преобразования считывания из модуля RTC в графическое представление даты и времени.
dt = clock.getDateTime ();
display.fillRect(0,0,128,16,SSD1306_WHITE);
display.fillRect(0,17,128,16,SSD1306_BLACK);
display.fillRect(0,31,128,33,SSD1306_WHITE);
display.setCursor (1,1);
display.setTextSize (2);
display.setTextColor (SSD1306_BLACK);
display.println (DayOfTheWeek (dt.dayOfWeek));
display.setCursor (1,18);
display.setTextSize (1);
display.setTextColor (SSD1306_WHITE);
display.println (DayMonthYear (dt.day, dt.month, dt.year));
clock.forceConversion ();
display.setCursor (85,18);
display.setTextSize (1);
display.setTextColor (SSD1306_WHITE);
display.print (clock.readTemperature ());
display.setCursor (117,16);
display.print ("о");
display.setCursor(3,35);
display.setTextSize(3);
display.setTextColor(SSD1306_BLACK);
display.println(CurrentTime(dt.hour,dt.minute));
display.setCursor(100,35);
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK);
display.println(AddLeadingZero(dt.second));
Вывод:
В результате проделанной работы была разработана система, которая позволяет мониторить температуру в помещении и время.
Разработанная система крайне актуальна для различных целей, включая управление системой отопления и кондиционирования воздуха, контроль температуры в хранилищах и лабораториях, а также для обеспечения комфортных условий жизни и работы
Используемый модуль имеет высокую точность и стабильность, а также встроенный датчик температуры, что позволяет использовать его для корректировки показаний других датчиков или для других целей.