Дистанційний вимірювач температури на STM32F103 з TFT-дисплеєм та сенсором MLX90614

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

Вимірювач створено на мікроконтролері STM32F103 з TFT-дисплеєм 1,44″ 128×128 та інфрачервоним сенсором температури MLX90614.

Проєкт реалізовано в рамках дипломного проєктування за освітньою програмою «Інформаційно-вимірювальні технології».

Завдання проєкту

Метою розробки було створення вимірювального пристрою, який забезпечує:

  • автономне живлення;
  • геометричну локалізацію вимірювання температури;
  • вимірювання температури зовнішнього середовища;
  • виведення результатів вимірювання на кольоровий TFT-дисплей.

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

Дистанційний вимірювач температури на STM32F103 — загальний вигляд із TFT-дисплеєм

Основні компоненти пристрою

До складу вимірювального пристрою входять:

  • мікроконтролерний модуль STM32F103 Blue Pill;
  • TFT-дисплей 1,44″ із роздільною здатністю 128×128;
  • температурний сенсор MLX90614;
  • акумулятор живлення 3,6 В;
  • регулятор заряджання акумулятора;
  • лазерний інфрачервоний світлодіод.

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

Внутрішня будова вимірювача: плата STM32 Blue Pill, модуль заряджання, акумулятор і TFT-дисплей у корпусі

Передавання вимірювальних даних на TFT-дисплей

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

  • температури зовнішнього середовища (Temperature Ambient);
  • температури поверхні локального об’єкта (Temperature Object).
TFT-дисплей із показами температури середовища (Ambient) та об’єкта (Object)

Локалізація вимірювання температури

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

Сенсор MLX90614 і лазерний світлодіод, спрямовані в один бік для локалізації вимірювання

Програмне забезпечення вимірювального пристрою

Нижче наведено фрагмент програми для STM32 із сенсором MLX90614: зчитування температури об’єкта та довкілля через I²C і виведення значень на TFT-дисплей.

main.cSTM32 + MLX90614 · зчитування температури об’єкта та довкілля
#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.

Програмне забезпечення виконує кілька основних функцій:

  • ініціалізацію мікроконтролера;
  • налаштування SPI;
  • налаштування SMBus;
  • керування TFT-дисплеєм;
  • відображення тексту;
  • роботу з растровими шрифтами.

Для розроблення та складання проєкту використано середовище Keil.

Практичне значення проєкту

Цей дистанційний вимірювач температури є хорошим прикладом комплексного навчального проєкту, у якому поєднуються кілька напрямів:

  • цифрова електроніка;
  • мікроконтролери;
  • програмування мовою C;
  • послідовні інтерфейси;
  • робота з дисплеями;
  • кодування символів;
  • проєктування вбудованих систем.

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

Зв’язок з інформаційно-вимірювальними технологіями

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

Створення такого пристрою передбачає:

  • проєктування електронної схеми;
  • налаштування апаратної частини;
  • написання програмного коду;
  • передавання та оброблення даних;
  • відображення результатів;
  • перевірку правильності роботи системи.

Саме такі компетентності формуються під час навчання на кафедрі інформаційно-вимірювальних технологій.

Висновок

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

Проєкт поєднує роботу з TFT-дисплеєм, послідовними каналами передачі даних, шрифтами та мовою C.

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


Самарцев Юрій Миколайович
доцент, кандидат технічних наук
кафедра інформаційно-вимірювальних технологій
КПІ ім. Ігоря Сікорського


Навчайтеся створювати сучасні інженерні системи

На кафедрі ІВТ студенти вивчають програмування, мікроконтролери, електроніку, вимірювальні системи, автоматизацію, робототехніку, комп’ютерний зір і штучний інтелект.

Освітні програми кафедри
Вступ на бакалаврат
Спеціальність G6 «Інформаційно-вимірювальні технології»