Search Code

Senzor de temperatură LM75A cu LCD1602 I2C

Senzor de temperatură LM75A cu LCD1602 I2C

În acest tutorial, vom învăța cum să folosim senzorul de temperatură LM75A pentru a afișa citirile de temperatură atât în grade Celsius, cât și în Fahrenheit, pe un ecran LCD1602 folosind comunicarea I2C. LM75A poate măsura temperaturi cuprinse între -55°C și +125°C, fiind potrivit pentru diverse aplicații. Odată ce configurarea este finalizată, veți putea vedea citirile de temperatură în timp real pe afișajul LCD.

LCD1602-I2C display module with 4 wires

Pentru acest proiect, vom utiliza senzorul LM75A și modulul LCD1602 conectate prin I2C, ceea ce permite o cablare mai simplă și utilizarea mai puținor pini pe Arduino. Scopul este de a crea un sistem care citește continuu temperatura și o afișează pe LCD. Dacă aveți nevoie de clarificări privind orice parte a procesului, asigurați-vă că verificați tutorialul video (în video la 00:00).

Hardware Explicat

Componentele principale pentru acest proiect includ senzorul de temperatură LM75A și afișajul LCD1602. LM75A este un senzor de temperatură I2C care oferă citiri precise de temperatură. Acesta comunică cu Arduino prin doar două fire, SDA (linia de date) și SCL (linia de ceas), fiind ușor de integrat în proiectele dumneavoastră.

LCD1602 este un afișaj cu caractere de 16x2 care poate afișa până la 32 de caractere simultan. Prin utilizarea interfeței I2C, îl putem controla cu doar două fire suplimentare, ceea ce simplifică foarte mult procesul de cablare. Funcția de iluminare de fundal a LCD-ului poate oferi, de asemenea, o vizibilitate mai bună în medii cu lumină scăzută.

Detalii din Fișa Tehnică

ProducătorTexas Instruments
Număr de piesăLM75A
Tensiune logică/IO2,7 V până la 5,5 V
Tensiune de alimentare2,7 V până la 5,5 V
Curent de ieșire (pe canal)N/A
Curent de vârf (pe canal)N/A
Ghid frecvență PWMN/A
Praguri logice de intrare0,3 * Vcc (jos), 0,7 * Vcc (sus)
Cădere de tensiune / RDS(on) / saturațieN/A
Limite termiceOperare: -55°C până la +125°C
PachetSOT-23
Note / varianteDisponibil în mai multe adrese I2C

  • Asigurați o alimentare adecvată (2,7 V până la 5,5 V).
  • Utilizați rezistențe de pull-up pe liniile SDA și SCL dacă este necesar.
  • Verificați configurația adresei I2C pentru mai multe dispozitive.
  • Păstrați cablurile scurte pentru a minimiza interferențele.
  • Monitorizați intervalul de temperatură: -55°C până la +125°C.
  • Utilizați monitorul serial pentru depanarea citirilor de temperatură.
  • Gestionați eficient stările de eroare în cod.
  • Fiți atenți la cerințele de alimentare ale afișajului.

Instrucțiuni de Cablare

Arduino_wiring_LM75A_LCD_bb

Pentru a cabla senzorul de temperatură LM75A și LCD1602, începeți prin conectarea sursei de alimentare. Conectați pinul VCC atât al LM75A, cât și al LCD1602 la pinul de 5V de pe Arduino. Apoi, conectați pinul de masă (GND) al ambelor module la pinul GND de pe Arduino.

În continuare, conectați liniile de comunicare I2C. Pinul SDA al LM75A trebuie conectat la pinul A4 de pe Arduino, în timp ce pinul SCL trebuie conectat la pinul A5. Acest lucru permite comunicarea I2C între senzor și Arduino. Asigurați-vă că conexiunile sunt sigure pentru a preveni erorile de comunicare.

Exemple de Cod și Explicații

În cod, includem mai întâi bibliotecile necesare pentru senzorul LM75A și afișajul LCD1602. Următorul fragment demonstrează cum să creați o instanță a senzorului LM75A:

LM75A lm75a_sensor(false, false, false);

Această linie inițializează obiectul senzorului LM75A. Parametrii booleeni corespund pinilor A0, A1 și A2 ai LM75A, permițând diferite adrese I2C dacă este necesar.

În continuare, configurăm monitorul serial și inițializăm afișajul LCD:

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

Aici, pornim comunicarea serială la 9600 baud și inițializăm afișajul LCD. Iluminarea de fundal este activată, iar un mesaj inițial este afișat pe ecran.

În bucla principală, citim continuu temperatura și o afișăm:

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

Această secțiune preia temperatura de la senzor. Dacă citirea este invalidă, un mesaj de eroare este trimis la monitorul serial. În caz contrar, temperatura poate fi procesată și afișată pe LCD.

Demonstrație / Ce să Vă Așteptați

Odată ce totul este cablat și codul este încărcat, ar trebui să vedeți citirile de temperatură pe afișajul LCD1602, alternând între Celsius și Fahrenheit. Dacă senzorul LM75A funcționează corect, acesta va actualiza continuu temperatura afișată în fiecare secundă. Dacă există probleme, cum ar fi polaritate inversată sau cablare incorectă, verificați conexiunile și asigurați-vă că sunt utilizați pinii corecți (în video la 00:00).

Imagini

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

Lucruri de care ai putea avea nevoie

Resurse și referințe

Fișiere📁

Fișier Fritzing

Alte fișiere