Сегодня мы рассмотрим датчик температуры CJMCU-75, также известный как датчик температуры LM75 или LM75A с поддержкой шины I2C. С помощью этого датчика вы можете считывать температуру как в градусах Цельсия, так и в градусах Фаренгейта. Температурный диапазон составляет от -55 до +125 градусов по Цельсию.
LM75A представляет собой цифровой датчик температуры промышленного стандарта со встроенным сигма-дельта аналого-цифровым преобразователем (АЦП). LM75A имеет 9-битное разрешение с точностью ±2°C в диапазоне от –25°C до 100°C и с точностью ±3°C в диапазоне от –55°C до 125°C.
LM75A работает с однополярным питанием от 2,7 В до 5,5 В. Благодаря такому широкому диапазону питающего напряжения его можно легко использовать с платами контроллеров, совместимыми с напряжением 3,3 В, такими как ESP8266, ESP32 и т. д., а также с платами контроллеров, совместимыми с питанием 5 В.
Связь осуществляется по двухпроводному интерфейсу, работающему на частоте до 400 кГц. LM75A имеет три вывода A0, A1 и A2 для установки логического адреса, что позволяет подключить к одной шине до восьми датчиков LM75A. LM75A имеет специальный выход защиты от перегрева (OS) с программируемым пределом и гистерезисом.
Датчик температуры LM75A можно использовать в базовых станциях, электронном контрольно-измерительном оборудовании, офисной электронике, персональных компьютерах, средствах мониторинга окружающей среды и любых других системах, в которых управление температурным режимом имеет решающее значение в плане производительности.
Теперь давайте посмотрим на принципиальную схему подключения LM75A к Arduino с Oled дисплеем.
Подключение LM75A к Arduino
Выводы SCL и SDA датчика температуры LM75A и модуля дисплея Oled соединяются вместе, а затем подключаются к контактам A5 и A4 Arduino. A5 — это SCL, а A4 — это SDA. Контакты VCC и GND соединены с контактами Arduino 5В и GND.
Зуммер на 5В управляется транзистором 2n2222, который через резистор 10 кОм подключен к выводу D3 Arduino.
Питание схемы построено на стабилизаторе напряжения LM7805. Входное напряжение стабилизатора может быть в диапазоне от 7 до 28 вольт. Выход стабилизатора подключен к выводу Vin платы Arduino.
Необходимые библиотеки для LM75
Прежде чем приступить к программированию, в первую очередь убедитесь, что вы скачали и установили все необходимые библиотеки:
- Adafruit_GFX.h
- Adafruit_SSD1306.h
- LM75A
Скачать библиотеки (940,5 KiB, скачано: 137)
Как установить библиотеку в IDE Arduino смотрите здесь.
Скетч
Данная программа считывает температуру в градусах Цельсия и Фаренгейта и выводит на дисплей. Так же программа проверяет, находится ли температура выше или ниже порогового значения. Если температура превысила 45 градусов по Цельсию, включается зуммер, а если температура ниже 45 градусов по Цельсию, зуммер отключается.
#include <SPI.h> // подключаем библиотеки #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <LM75A.h> // создаем экземпляр I2C LM75A LM75A lm75a_sensor(false, // A0 LM75A (подключен к земле = false) false, // A1 LM75A (подключен к земле = false) false); // A2 LM75A (подключен к земле = false) #define SCREEN_WIDTH 128 // Ширина OLED-дисплея, в пикселях #define SCREEN_HEIGHT 64 // Высота OLED-дисплея, в пикселях // SSD1306, подключенный к I2C (контакты SDA, SCL) #define OLED_RESET -1 // Номер вывода сброса (или -1 при совместном использовании вывода сброса Arduino) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); int buzzer = 3; void setup() { Serial.begin(9600); Serial.println("Temperatures will be displayed every second:"); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); delay(2000); display.clearDisplay(); display.setTextColor(WHITE); pinMode(buzzer, OUTPUT); } void loop() { float temperature_in_degrees = lm75a_sensor.getTemperatureInDegrees(); if (temperature_in_degrees == INVALID_LM75A_TEMPERATURE) { Serial.println("Error while getting temperature"); } else { Serial.print("Temperature: "); Serial.print(temperature_in_degrees); Serial.print(" degrees ("); Serial.print(LM75A::degreesToFahrenheit(temperature_in_degrees)); Serial.println(" fahrenheit)"); if ( temperature_in_degrees >= 45 ) { digitalWrite( buzzer, HIGH); Serial.println(" Temperature Alert! "); } if ( temperature_in_degrees < 45 ) { digitalWrite( buzzer, LOW); } display.clearDisplay(); display.setCursor(25,0); display.setTextSize(1); display.setTextColor(WHITE); display.println(" Temperature"); display.setCursor(10,20); display.setTextSize(2); //display.print("C: "); display.print(temperature_in_degrees); display.print((char)247); display.print("C"); display.setCursor(10,45); display.setTextSize(2); //display.print("F: "); display.print(LM75A::degreesToFahrenheit(temperature_in_degrees)); display.print((char)247); display.print("F"); display.display(); } delay(1000); }