Czujnik temperatury LM75A z wyświetlaczem LCD1602 I2C
W tym samouczku nauczymy się, jak używać czujnika temperatury LM75A do wyświetlania odczytów temperatury zarówno w stopniach Celsjusza, jak i Fahrenheita na ekranie LCD1602 przy użyciu komunikacji I2C. LM75A może mierzyć temperatury w zakresie od -55°C do +125°C, co czyni go odpowiednim do różnych zastosowań. Po zakończeniu konfiguracji będziesz mógł zobaczyć odczyty temperatury w czasie rzeczywistym na wyświetlaczu LCD.


Do tego projektu wykorzystamy czujnik LM75A oraz moduł LCD1602 podłączony przez I2C, co pozwala na prostsze okablowanie i użycie mniejszej liczby pinów na Arduino. Celem jest stworzenie systemu, który w sposób ciągły odczytuje temperaturę i wyświetla ją na LCD. Jeśli potrzebujesz wyjaśnień dotyczących jakiejkolwiek części procesu, koniecznie sprawdź samouczek wideo (na wideo w 00:00).
Objaśnienie Sprzętu
Główne komponenty tego projektu to czujnik temperatury LM75A oraz wyświetlacz LCD1602. LM75A to czujnik temperatury I2C, który zapewnia dokładne odczyty temperatury. Komunikuje się z Arduino za pomocą tylko dwóch przewodów: SDA (linia danych) i SCL (linia zegara), co ułatwia integrację z projektami.
LCD1602 to wyświetlacz znakowy 16x2, który może pokazać do 32 znaków jednocześnie. Dzięki interfejsowi I2C możemy go kontrolować za pomocą tylko dwóch dodatkowych przewodów, co znacznie upraszcza proces okablowania. Funkcja podświetlenia LCD może również zapewnić lepszą widoczność w środowiskach o słabym oświetleniu.
Szczegóły z Karty Katalogowej
| Producent | Texas Instruments |
|---|---|
| Numer części | LM75A |
| Napięcie logiczne/IO | 2,7 V do 5,5 V |
| Napięcie zasilania | 2,7 V do 5,5 V |
| Prąd wyjściowy (na kanał) | N/D |
| Prąd szczytowy (na kanał) | N/D |
| Wytyczne dotyczące częstotliwości PWM | N/D |
| Progi logiczne wejścia | 0,3 * Vcc (niski), 0,7 * Vcc (wysoki) |
| Spadek napięcia / RDS(on) / nasycenie | N/D |
| Limity termiczne | Praca: -55°C do +125°C |
| Obudowa | SOT-23 |
| Uwagi / warianty | Dostępny z wieloma adresami I2C |
- Zapewnij prawidłowe zasilanie (2,7 V do 5,5 V).
- W razie potrzeby użyj rezystorów podciągających na liniach SDA i SCL.
- Sprawdź konfigurację adresu I2C dla wielu urządzeń.
- Utrzymuj krótkie okablowanie, aby zminimalizować zakłócenia.
- Monitoruj zakres temperatury: -55°C do +125°C.
- Użyj monitora szeregowego do debugowania odczytów temperatury.
- Skutecznie obsługuj stany błędów w kodzie.
- Zachowaj ostrożność w kwestii wymagań zasilania wyświetlacza.
Instrukcje Okablowania

Aby podłączyć czujnik temperatury LM75A i LCD1602, zacznij od podłączenia zasilania. Podłącz pin VCC zarówno LM75A, jak i LCD1602 do pinu 5V na Arduino. Następnie podłącz pin masy (GND) obu modułów do pinu GND na Arduino.
Następnie podłącz linie komunikacji I2C. Pin SDA LM75A powinien być podłączony do pinu A4 na Arduino, a pin SCL do pinu A5. Umożliwia to komunikację I2C między czujnikiem a Arduino. Upewnij się, że połączenia są pewne, aby zapobiec błędom komunikacji.
Przykłady Kodu i Omówienie
W kodzie najpierw dołączamy niezbędne biblioteki dla czujnika LM75A i wyświetlacza LCD1602. Poniższy fragment pokazuje, jak utworzyć instancję czujnika LM75A:
LM75A lm75a_sensor(false, false, false);
Ta linia inicjalizuje obiekt czujnika LM75A. Parametry logiczne odpowiadają pinom A0, A1 i A2 układu LM75A, co pozwala na użycie różnych adresów I2C, jeśli to konieczne.
Następnie konfigurujemy monitor szeregowy i inicjalizujemy wyświetlacz LCD:
void setup(void) {
Serial.begin(9600);
lcd.begin();
lcd.backlight();
lcd.print("Robojax LM75A");
}
Tutaj uruchamiamy komunikację szeregową z prędkością 9600 bodów i inicjalizujemy wyświetlacz LCD. Podświetlenie jest włączane, a na ekranie drukowany jest początkowy komunikat.
W pętli głównej w sposób ciągły odczytujemy temperaturę i wyświetlamy ją:
float temperature_in_degrees = lm75a_sensor.getTemperatureInDegrees();
if (temperature_in_degrees == INVALID_LM75A_TEMPERATURE) {
Serial.println("Error while getting temperature");
}
Ta sekcja pobiera temperaturę z czujnika. Jeśli odczyt jest nieprawidłowy, do monitora szeregowego wysyłany jest komunikat o błędzie. W przeciwnym razie temperatura może być przetwarzana i wyświetlana na LCD.
Demonstracja / Czego Się Spodziewać
Po podłączeniu wszystkiego i wgraniu kodu powinieneś zobaczyć odczyty temperatury na wyświetlaczu LCD1602, zmieniające się między stopniami Celsjusza i Fahrenheita. Jeśli czujnik LM75A działa prawidłowo, będzie w sposób ciągły aktualizował wyświetlaną temperaturę co sekundę. Jeśli wystąpią jakiekolwiek problemy, takie jak odwrócona polaryzacja lub nieprawidłowe okablowanie, sprawdź połączenia i upewnij się, że użyto prawidłowych pinów (na wideo w 00:00).
/*
* \brief Show temperature in degrees Celsius and Fahrenheit every second
*
* \author Quentin Comte-Gaz <quentin@comte-gaz.com>
* \date 8 July 2016
* \license MIT License (contact me if too restrictive)
* \copyright Copyright (c) 2016 Quentin Comte-Gaz
* \version 1.0
*
* Modified by Ahmad Shamshiri on July 12, 2018 at 22:40 for Robojax.com
* in Ajax, Ontario, Canada
* Watch video instructions for this code: https://youtu.be/hVo_msVMlaI
For this sketch, you need to connect:
VCC to 3.3V or 5V and GND to GND of the Arduino
SDA to A4 and SCL to A5
*/
#include <LM75A.h>
// Create I2C LM75A instance
LM75A lm75a_sensor(false, //A0 LM75A pin state
false, //A1 LM75A pin state
false); //A2 LM75A pin state
// Equivalent to "LM75A lm75a_sensor;"
// start of settings for LCD1602 with I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
// end of settings for LCD1602 with I2C
void setup(void)
{
Serial.begin(9600);
Serial.println("Robojax LM75A Test");
// initialize the LCD
lcd.begin();
lcd.backlight();
lcd.print("Robojax LM75A");
lcd.setCursor(0,1);
lcd.print("Demo");
delay(2000);
}
void loop()
{
lcd.clear();// clear previous values from screen
// Robojax.com LM75A Test
float temperature_in_degrees = lm75a_sensor.getTemperatureInDegrees();
if (temperature_in_degrees == INVALID_LM75A_TEMPERATURE) {
Serial.println("Error while getting temperature");
} else {
Serial.print("Temp: ");
Serial.print(temperature_in_degrees);
Serial.print(" C (");
float tmpF = LM75A::degreesToFahrenheit(temperature_in_degrees);
Serial.print(tmpF);
Serial.println(" F)");
lcdDisplay(
// to print Celsius:
0, // character 0
0, // line 0
"Celsius: ",
// to print Celsius
11, // character 10
0, // line 0
temperature_in_degrees
);
lcdDisplay(
// to print Fahrenheit:
0, // character 0
1, // line 1
"Fahrenheit: ",
// to print Fahrenheit
11, // character 9
1, // line 0
tmpF
);
}
delay(1000);
}
/*
* lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
* displays value and title on LCD1602
* How to use:
* If you want to display: "Voltage: 13.56mV" starting from the first character
* on the second row.
* use:
* lcdDisplay(0, 1, "Voltage: ", 13.56)
*
* tc is the character number (0)
* tr is the row number in the LCD (1)
* title is the text ("Voltage:")
* vc is the character number for the value
* vr is the row number for the value
* value is the value (13.56)
*/
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
{
// Robojax.com LCD1602 for LM75A Demo
lcd.setCursor (tc,tr); //
lcd.print(title);
lcd.setCursor (vc,vr); //
lcd.print(value);
}
Rzeczy, których możesz potrzebować
-
AmazonPurchase LCD1602-I2C from Amazonamzn.to
-
AmazonPurchase LM75A from Amazonamzn.to
-
AllegroPurchase LCD1602-I2C from eBayebay.us
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
Zasoby i odniesienia
-
ZewnętrznyLM75A datasheet from NXPnxp.com
-
ZewnętrznyLM75A datasheet from TIti.com
-
ZewnętrznyLM75A library from GitHubgithub.com
Pliki📁
Plik Fritzing
-
LM75 Temperature Sensor
Temperature Sensor - LM75.fzpz0.01 MB
Inne pliki
-
LM75A datasheet from Philips
robojax-LM75A_temperature_senssor_datasheet_philips.pdf0.13 MB -
LM75A library from Robojax.com
robojax-LM75A_temperature_sensor.zip0.56 MB