Search Code

Czujnik temperatury LM75A z wyświetlaczem LCD1602 I2C

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.

LCD1602-I2C display module with 4 wires

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

ProducentTexas Instruments
Numer częściLM75A
Napięcie logiczne/IO2,7 V do 5,5 V
Napięcie zasilania2,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 PWMN/D
Progi logiczne wejścia0,3 * Vcc (niski), 0,7 * Vcc (wysoki)
Spadek napięcia / RDS(on) / nasycenieN/D
Limity termicznePraca: -55°C do +125°C
ObudowaSOT-23
Uwagi / wariantyDostę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

Arduino_wiring_LM75A_LCD_bb

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).

Obrazy

LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LM75a-1
LM75a-1
LM75a-3
LM75a-3
LM75a-12
LM75a-12
Arduino_wiring_LM75A_LCD_bb
Arduino_wiring_LM75A_LCD_bb
129-LM75A temperature sensor with LCD1602 I2C
Język: C++
/*
 * \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ć

Zasoby i odniesienia

Pliki📁

Plik Fritzing

Inne pliki