Проєктування вимірювальної апаратури часто вимагає знати, яка температура на окремих елементах приладу або як вона змінюється. Дистанційний вимірювач температури дозволяє вимірювати температуру на окремих елементах або ділянках приладу.
Вимірювач створено на мікроконтролері STM32F103 з TFT-дисплеєм 1,44″ 128×128 та інфрачервоним сенсором температури MLX90614.
Проєкт реалізовано в рамках дипломного проєктування за освітньою програмою «Інформаційно-вимірювальні технології».
Завдання проєкту
Метою розробки було створення вимірювального пристрою, який забезпечує:
Для реалізації проєкту використано мікроконтролерний модуль STM32F103 Blue Pill, TFT-дисплей ST7735 1,44″ 128×128, сенсор MLX90614 (SMBus/PWM) та програмне забезпечення мовою C.

Основні компоненти пристрою
До складу вимірювального пристрою входять:
Дисплей підключається до мікроконтролера через інтерфейс SPI, температурний сенсор — через SMBus.

Передавання вимірювальних даних на TFT-дисплей
TFT-дисплей використовується для відображення:

Локалізація вимірювання температури
Локалізація вимірювання температури виконується за рахунок однонаправленого розташування температурного сенсора та інфрачервоного лазерного світлодіода.

Програмне забезпечення вимірювального пристрою
Нижче наведено фрагмент програми для STM32 із сенсором MLX90614: зчитування температури об’єкта та довкілля через I²C і виведення значень на TFT-дисплей.
#include "main.h"
#include <stdio.h>
#include <string.h>
#include "stm32_adafruit_lcd.h"
#include "math.h"
#include "stdlib.h"
//==================================
//Підключення MLX90614
//000x х ххх Доступ до ОЗУ
//001x х ххх Доступ до ПЗЗУ
//1111 0000 Доступ до флажків
#define MLX90614_I2CADDR 0x5A
// RAM
#define MLX90614_RAWIR1 0x04
#define MLX90614_RAWIR2 0x05
#define MLX90614_TA 0x06
#define MLX90614_TOBJ1 0x07
#define MLX90614_TOBJ2 0x08
// EEPROM
#define MLX90614_TOMAX 0x20
#define MLX90614_TOMIN 0x21
#define MLX90614_PWMCTRL 0x22
#define MLX90614_TARANGE 0x23
#define MLX90614_EMISS 0x24
#define MLX90614_CONFIG 0x25
#define MLX90614_ADDR 0x2E
#define MLX90614_ID1 0x3C
#define MLX90614_ID2 0x3D
#define MLX90614_ID3 0x3E
#define MLX90614_ID4 0x3F
//==================================
while (1)
{
HAL_Delay(500);
HAL_I2C_Mem_Read(&hi2c3, 0x00, MLX90614_ADDR, I2C_MEMADD_SIZE_8BIT, buf, 2, 1000);
buf[0] = 0x00;
buf[1] = 0x00;
HAL_I2C_Mem_Read(&hi2c3, 0x00, 0x06, I2C_MEMADD_SIZE_8BIT, buf, 3, 1000);
buf[0] = 0x00;
buf[1] = 0x00;
buf[2] = 0x00;
HAL_I2C_Mem_Read(&hi2c3, 0x00, MLX90614_TA, I2C_MEMADD_SIZE_8BIT, buf, 3, 1000);
temp_data_a = buf[1]*256 + buf[0];
buf[0] = 0x00;
buf[1] = 0x00;
buf[2] = 0x00;
HAL_I2C_Mem_Read(&hi2c3, 0x00, MLX90614_TOBJ1, I2C_MEMADD_SIZE_8BIT, buf, 3, 1000);
temp_data_o = buf[1]*256 + buf[0];
To = temp_data_o*0.02;
if(To >= 273.15) {
To = To - 273.15;
} else {
To = -(273.15 - To);
}
T = temp_data_a*0.02;
if(T >= 273.15) {
T = T - 273.15;
} else {
T = -(273.15 - T);
}
char char_temp[50];
char mypoint[6] = " grC";
sprintf(char_temp, "%g", T);
memcpy(&myconcat[0], char_temp, sizeof(char_temp));
memcpy(&myconcat[7], mypoint, sizeof(mypoint));
myconcat[11] = 0x00;
LCD_WriteString((LCD_WIDTH * 4) / 100, (LCD_HEIGHT * 30) / 100, myconcat, Font_Size, LCD_RED, LCD_WHITE);
sprintf(char_temp, "%g", To);
memcpy(&myconcat[0], char_temp, sizeof(char_temp));
memcpy(&myconcat[7], mypoint, sizeof(mypoint));
myconcat[11] = 0x00;
LCD_WriteString((LCD_WIDTH * 4) / 100, (LCD_HEIGHT * 70) / 100, myconcat, Font_Size, LCD_BLUE, LCD_WHITE);
// printf ("temperature = %f\n\r", T); //printf не працює з зеленим ST Link Debuger
HAL_Delay(500);
}Структура програмного забезпечення
Код проєкту створено мовою C з використанням бібліотеки HAL.
Програмне забезпечення виконує кілька основних функцій:
Для розроблення та складання проєкту використано середовище Keil.
Практичне значення проєкту
Цей дистанційний вимірювач температури є хорошим прикладом комплексного навчального проєкту, у якому поєднуються кілька напрямів:
Подібні проєкти допомагають зрозуміти не лише окремі функції мікроконтролера, а й принципи створення завершеної програмно-апаратної системи.
Зв’язок з інформаційно-вимірювальними технологіями
Фахівці з інформаційно-вимірювальних технологій працюють із датчиками, мікроконтролерами, електронними модулями, каналами передавання даних і програмним забезпеченням.
Створення такого пристрою передбачає:
Саме такі компетентності формуються під час навчання на кафедрі інформаційно-вимірювальних технологій.
Висновок
Розробка дистанційного вимірювача температури на STM32F103 демонструє, як за допомогою доступних електронних компонентів можна створити повноцінну вбудовану систему.
Проєкт поєднує роботу з TFT-дисплеєм, послідовними каналами передачі даних, шрифтами та мовою C.
Матеріал може бути використаний як навчальний приклад для студентів, які вивчають мікроконтролери, електроніку, програмування, автоматизацію та інформаційно-вимірювальні технології.
Самарцев Юрій Миколайович
доцент, кандидат технічних наук
кафедра інформаційно-вимірювальних технологій
КПІ ім. Ігоря Сікорського
Навчайтеся створювати сучасні інженерні системи
На кафедрі ІВТ студенти вивчають програмування, мікроконтролери, електроніку, вимірювальні системи, автоматизацію, робототехніку, комп’ютерний зір і штучний інтелект.
Освітні програми кафедри
Вступ на бакалаврат
Спеціальність G6 «Інформаційно-вимірювальні технології»
