Pretraži kod

LM75A temperaturni senzor sa LCD1602 I2C

LM75A temperaturni senzor sa LCD1602 I2C

U ovom tutorijalu naučit ćemo kako koristiti LM75A senzor temperature za prikaz očitanja temperature u Celzijusima i Fahrenheitima na LCD1602 ekranu koristeći I2C komunikaciju. LM75A može mjeriti temperature u rasponu od -55°C do +125°C, što ga čini pogodnim za različite primjene. Nakon što je postavljanje završeno, moći ćete vidjeti očitanja temperature u realnom vremenu na LCD ekranu.

LCD1602-I2C display module with 4 wires

Za ovaj projekat koristit ćemo LM75A senzor i LCD1602 modul povezane putem I2C-a, što omogućava jednostavnije ožičenje i manje korištenih pinova na Arduinu. Cilj je kreirati sistem koji kontinuirano očitava temperaturu i prikazuje je na LCD-u. Ako vam treba pojašnjenje bilo kojeg dijela procesa, svakako pogledajte video tutorijal (u videu na 00:00).

Objašnjenje hardvera

Glavne komponente za ovaj projekat uključuju LM75A senzor temperature i LCD1602 ekran. LM75A je I2C senzor temperature koji pruža precizna očitanja temperature. Komunicira s Arduinom preko samo dvije žice, SDA (linija podataka) i SCL (linija takta), što ga čini lakim za integraciju u vaše projekte.

LCD1602 je 16x2 karaktera ekran koji može prikazati do 32 karaktera odjednom. Korištenjem I2C interfejsa, možemo ga kontrolirati sa samo dvije dodatne žice, što uvelike pojednostavljuje proces ožičenja. Pozadinsko osvjetljenje LCD-a također može pružiti bolju vidljivost u okruženjima sa slabim svjetlom.

Detalji iz tehničke dokumentacije

ProizvođačTexas Instruments
Broj dijelaLM75A
Logički/IO napon2.7 V do 5.5 V
Napon napajanja2.7 V do 5.5 V
Izlazna struja (po kanalu)N/A
Vršna struja (po kanalu)N/A
Smjernice za PWM frekvencijuN/A
Ulazni logički pragovi0.3 * Vcc (nisko), 0.7 * Vcc (visoko)
Pad napona / RDS(on) / zasićenjeN/A
Toplotna ograničenjaRadna: -55°C do +125°C
PakovanjeSOT-23
Napomene / varijanteDostupan u više I2C adresa

  • Osigurajte odgovarajuće napajanje (2.7 V do 5.5 V).
  • Koristite pull-up otpornike na SDA i SCL linijama ako je potrebno.
  • Provjerite konfiguraciju I2C adrese za više uređaja.
  • Držite ožičenje kratkim kako biste smanjili smetnje.
  • Pratite temperaturni raspon: -55°C do +125°C.
  • Koristite serijski monitor za otklanjanje grešaka u očitanjima temperature.
  • Efikasno upravljajte stanjima grešaka u kodu.
  • Budite oprezni sa zahtjevima za napajanje ekrana.

Upute za ožičenje

Arduino_wiring_LM75A_LCD_bb

Za ožičenje LM75A senzora temperature i LCD1602, počnite spajanjem napajanja. Spojite VCC pin i LM75A i LCD1602 na 5V pin na Arduinu. Zatim spojite pin uzemljenja (GND) oba modula na GND pin na Arduinu.

Zatim spojite I2C komunikacijske linije. SDA pin LM75A treba spojiti na A4 pin na Arduinu, dok SCL pin treba spojiti na A5 pin. Ovo omogućava I2C komunikaciju između senzora i Arduina. Provjerite da su veze sigurne kako biste spriječili greške u komunikaciji.

Primjeri koda i objašnjenje

U kodu prvo uključujemo potrebne biblioteke za LM75A senzor i LCD1602 ekran. Sljedeći izvod pokazuje kako kreirati instancu LM75A senzora:

LM75A lm75a_sensor(false, false, false);

Ova linija inicijalizira LM75A senzor objekt. Boolean parametri odgovaraju A0, A1 i A2 pinovima LM75A, omogućavajući različite I2C adrese ako je potrebno.

Zatim postavljamo serijski monitor i inicijaliziramo LCD ekran:

void setup(void) {
  Serial.begin(9600);
  lcd.begin();  
  lcd.backlight();
  lcd.print("Robojax LM75A");
}

Ovdje započinjemo serijsku komunikaciju na 9600 bauda i inicijaliziramo LCD ekran. Pozadinsko osvjetljenje se uključuje, a početna poruka se ispisuje na ekran.

U glavnoj petlji kontinuirano očitavamo temperaturu i prikazujemo je:

float temperature_in_degrees = lm75a_sensor.getTemperatureInDegrees();
if (temperature_in_degrees == INVALID_LM75A_TEMPERATURE) {
  Serial.println("Error while getting temperature");
}

Ovaj dio preuzima temperaturu sa senzora. Ako je očitanje nevažeće, poruka o grešci se šalje na serijski monitor. U suprotnom, temperatura se može obraditi i prikazati na LCD-u.

Demonstracija / Šta očekivati

Nakon što je sve ožičeno i kod uploadan, trebali biste vidjeti očitanja temperature na LCD1602 ekranu, koja se izmjenjuju između Celzijusa i Fahrenheita. Ako LM75A senzor ispravno funkcionira, kontinuirano će ažurirati prikazanu temperaturu svake sekunde. Ako postoje problemi, poput obrnutog polariteta ili pogrešnog ožičenja, provjerite veze i osigurajte da se koriste ispravni pinovi (u videu na 00:00).

Slike

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
Jezik: 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);
 
}

Stvari koje bi vam mogle zatrebati

Resursi i reference

Datoteke📁

Fritzing datoteka

Ostale datoteke