Иван Иванов   15 октября в 17:04

Лазерный инфракрасный термометр Arduino

В этом проекте мы создадим цифровой лазерный инфракрасный термометр на основе Ардуино и в распечатанном 3D-корпусе.

Шаг 1. Вступление

Инфракрасные термометры широко используются для определения температуры поверхности объектов. Часто в технических системах или в электронной цепи повышение температуры является одним из первых признаков того, что что-то не так. Быстрая бесконтактная проверка с помощью инфракрасного термометра поможет понять, что происходит с температурой системы, что позволит отключить ее, прежде чем это приведет к необратимому повреждению.

Инфракрасное излучение - это просто еще один тип излучения, которое существует в электромагнитном спектре. Мы этого не видим, но если бы вы поместили руку рядом с чем-то горячим, например, с плитой, вы бы почувствовали воздействие инфракрасного излучения. Все объекты излучают энергию в виде инфракрасного излучения. Большинство ручных термометров используют линзы для фокусировки света от одного объекта на термобатарею, которая поглощает инфракрасное излучение. Чем больше инфракрасной энергии поглощается, тем больше она нагревается и уровень тепла преобразуется в электрический сигнал, который в конечном итоге преобразуется в показание температуры.

Я работал на трассе на днях, и у меня был компонент, который был очень горячим. Я хотел узнать его температуру, но, поскольку у меня не было инфракрасного термометра под рукой, то было принято решение создать свой собственный. Устройство будет иметь специальный 3D-корпус, который можно распечатать и собрать прямо у себя дома.

Это простой проект, который можно использовать как отличное введение в сенсоры, 3D дизайн или печать, электронику и программирование.

Шаг 2. Необходимые компоненты

Компоненты, необходимые для сборки нашего инфракрасного термометра Ардуино приведены ниже:

  1. Кнопка-переключатель
  2. Резисторы 5 кОм, 200 Ом
  3. 5В лазер
  4. Ардуино Нано
  5. Переключатель Вкл/Выкл
  6. Дисплей OLED 0,96"
  7. Датчик температуры GY-906 или датчик MLX90614 с соответствующими конденсаторами/резисторами
  8. Аккумулятор 9В
  9. 3D-принтер и нить (например, Hatchbox PLA)

Многие компоненты можно приобрести в большинстве интернет-магазинов.

Шаг 3. Инфракрасный датчик температуры GY-906

Я использовал датчик инфракрасного термометра GY-906, который является переходной платой для бесконтактного инфракрасного термометра MLX90614 от Melexis.

Выносная плата очень недорогая и ее легко интегрировать, поставляется с подтягивающими резисторами 10К для интерфейса I2C.

Из Википедии: Подтягивающий резистор — резистор, включённый между проводником, по которому распространяется электрический сигнал, и питанием (pull-up resistor — подтягивающий вверх резистор), либо между проводником и землёй (pull-down resistor — подтягивающий вниз резистор).

Подтягивающий резистор нужен, чтобы гарантировать на логическом входе, с которым соединён проводник, высокий (в первом случае) либо низкий (во втором случае) уровень в случаях:

  • проводник не соединён с логическим выходом;
  • присоединённый логический выход находится в высокоимпедансном состоянии;
  • когда разомкнут ключевой элемент на присоединённом логическом выходе, который устроен как открытый вывод ключевого элемента.

Перейти в Википедию

GY-906 поставляется с заводской калибровкой в диапазоне от -40 до +125 градусов по Цельсию для температуры датчика и от -70 до 380 градусов по Цельсию для температуры объекта. Точность этого датчика составляет примерно 0,5 градуса Цельсия.

Шаг 4. Электроника

Теперь, когда вы собрали все необходимые компоненты, пришло время начать сборку всего вместе. Я бы порекомендовал сначала подключить все на макете, а затем, как только все заработало, приступить к пайке.

Схема нашего устройства (нажмите на схему для увеличения):

Слева у нас есть наш лазер с токоограничивающим резистором 200 Ом, управляемый от цифрового выхода 5. Также есть стандартная кнопка, которая подключена между 5 В и цифровым входом 2. Есть подтягивающий резистор 5 кОм, чтобы когда переключатель разомкнут, на вход ничего не идет, а вместо этого устанавливается на 0 В.

Справа у нас есть основной выключатель, который соединяет нашу батарею 9 В с выводами VIN и GND на Arduino Nano. Дисплей OLED и инфракрасный датчик температуры GY-906 подключены к 3,3 В, а линии SDA подключены к A4, а SCL к A5. На дисплее и GY-906 уже есть подтягивающие резисторы на линиях I2C.

Шаг 5. Программирование

Нужно будет установить следующие библиотеки, чтобы код компилировался.

  1. Adafruits SSD1306
  2. Adafruits MLX90614

Программа постоянно считывает данные о температуре с MLX90614, но отображается на OLED только при нажатии кнопки триггера. Если нажать на курок, лазер также включается, чтобы помочь определить, какой объект измеряется.

Код для нашего инфракрасного термометра Ардуино ниже:

#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // Ширина дисплея, в пикселях
#define SCREEN_HEIGHT 64 // Высота дисплея, в пикселях

const int Laser_Pin=5;  //Laser Pin
int buttonState = 0; 
const int buttonPin = 2;     // количество пинов кнопки

// Декларация для дисплея SSD1306, подключенного к I2C (выводы SDA, SCL)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  Serial.begin(9600);
  Serial.println("Adafruit MLX90614 test"); 
  
  pinMode(Laser_Pin,OUTPUT);
  pinMode(buttonPin, INPUT);
  
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Адрес 0x3D для 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  

  display.clearDisplay();
  display.setRotation(2);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 35);
  display.println("Initializing Temp");
  display.display();
  delay(250);
  display.clearDisplay();

  mlx.begin(); 
  
}

void loop() {

  buttonState = digitalRead(buttonPin);
  Serial.println(buttonState);
  
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); 
  Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF()); 
  Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F");
  
  // проверяем, нажата ли кнопка и если это так, то buttonState - HIGH:
  if (buttonState == HIGH) {
    // включаем LED (светодиод):
    digitalWrite(Laser_Pin, HIGH);
    
    display.clearDisplay();
    display.setTextSize(2);  // Размер 2 означает, что каждый пиксель имеет ширину 12 и высоту 16
    display.setCursor(25, 10);
    display.print(mlx.readObjectTempC());
    display.setCursor(95, 10);
    display.print("C");
    display.setTextSize(2);
    display.setCursor(25, 36);
    display.print(mlx.readObjectTempF());
    display.setCursor(95, 36);
    display.print("F");
    display.display();    
    
  } else {
    // turn LED off:
    digitalWrite(Laser_Pin, LOW);
  
    display.clearDisplay();
    display.setTextSize(2);  // Размер 2 означает, что каждый пиксель имеет ширину 12 и высоту 16
    display.setCursor(35, 10);
    display.print("-----");
    display.setCursor(105, 10);
    display.print("");
    display.setTextSize(2);
    display.setCursor(35, 36);
    display.print("-----");
    display.setCursor(105, 36);
    display.print("");
    display.display();    
    
  }

  Serial.println();
  delay(500);
}

Шаг 6. Делаем 3D-корпус

Все создано в Fusion 360. В основании термометра есть место для батареи 9 В, переключателя Вкл/Выкл и спускового механизма (триггера), который представляет собой простую кратковременную кнопку. Крышка основания защелкивается на месте. Есть также пространство для прокладки проводки базовых компонентов в верхней части термометра.

Имеется отверстие для 0,96-дюймового OLED-дисплея и передняя часть на конце термометра для лазера и датчика MLX90614. Как лазер, так и датчик могут быть запрессованы в отверстие. Верхняя часть предназначена для Arduino Nano, и, честно говоря, я действительно недооценил количество проводов, необходимое для подключения в небольшом пространстве.

Все файлы можно скачать по этой ссылке.

Когда я вжал Arduino Nano в небольшое пространство, то потерял много проводов, поэтому в итоге я использовал клеевой пистолет, чтобы зафиксировать провода на месте, устанавливая Nano внутрь корпуса. Я всегда устанавливаю Arduino Nano в специальные держатели, на случай, если захочу использовать его для проектов позже, так что держатели заняли много дополнительного места, которое не понадобилось бы, если бы вы просто всё припаяли. Тем не менее, в конце концов, когда я все установил в корпус, то просто надавил на верхнюю крышку.

Теперь, когда у вас есть лазерный инфракрасный термометр, собранный и запрограммированный, пришло время проверить его!

Нажмите кнопку питания и подождите пока загрузится дисплей.