🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


🔢 Проект: простой цифровой термометр на LM75 с выводом на TM1637

В другом проекте на сайте LM75 управляет реле вентилятора или нагревателя. Здесь всё проще — просто цифровой термометр: датчик измеряет температуру, а дисплей TM1637 показывает её числом, без какой-либо автоматики или управления внешней нагрузкой.

Как это работает

Чтение температуры с LM75 такое же, как и в термостате: Arduino читает 16-битный регистр по I2C, значащие 9 старших бит сдвигаются вправо на 5 и умножаются на 0.125°C — это и есть реальный шаг датчика. Разница — просто в том, что происходит с результатом дальше: вместо сравнения с порогами включения/выключения реле число просто выводится на экран TM1637.

Поскольку TM1637 — это 4-значный дисплей, а температура может быть отрицательной и с десятичной частью, в примере ниже значение умножается на 10 и выводится с десятичной точкой на одном из разрядов, чтобы показать и целую, и десятую часть градуса одновременно (например, "23.5").

Пошаговая сборка

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

  1. LM75: SDA → A4, SCL → A5, VCC → 5V, GND → GND.
  2. TM1637: CLK → D9, DIO → D10, VCC → 5V, GND → GND.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.

#include <Wire.h>
#include <TM1637Display.h>

TM1637Display display(9, 10); // CLK, DIO

const int LM75_ADDR = 0x48;

float readLM75() {
  Wire.beginTransmission(LM75_ADDR);
  Wire.write(0x00);
  Wire.endTransmission();

  Wire.requestFrom(LM75_ADDR, 2);
  int16_t raw = (Wire.read() << 8) | Wire.read();
  raw = raw >> 5;
  return raw * 0.125;
}

void setup() {
  Serial.begin(9600);
  Wire.begin();
  display.setBrightness(5);
}

void loop() {
  float temp = readLM75();

  Serial.print("Температура: ");
  Serial.println(temp);

  display.showNumberDecEx((int)(temp * 10), 0b01000000, false); // десятичная точка на разряде десятых
  delay(1000);
}

Библиотека TM1637Display ставится через Менеджер библиотек Arduino IDE. Для LM75 не требуется дополнительной библиотеки — только стандартный `Wire.h`.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 👏 включение прибора хлопком или стуком на зв…🌐 автоматическая синхронизация часов DS1307 … →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу в корзину: 201 ₽ 181 ₽ (экономия 20 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA