Cerca codice

Sensore di temperatura LM75A con LCD1602 I2C

Sensore di temperatura LM75A con LCD1602 I2C

In questo tutorial impareremo come utilizzare il sensore di temperatura LM75A per visualizzare le letture di temperatura sia in gradi Celsius che in gradi Fahrenheit su uno schermo LCD1602 tramite la comunicazione I2C. Il LM75A può misurare temperature nell'intervallo da -55°C a +125°C, rendendolo adatto a varie applicazioni. Una volta completata la configurazione, potrai vedere le letture di temperatura in tempo reale sul display LCD.

LCD1602-I2C display module with 4 wires

Per questo progetto utilizzeremo il sensore LM75A e il modulo LCD1602 collegati via I2C, che permettono un cablaggio più semplice e l'impiego di meno pin sull'Arduino. L'obiettivo è creare un sistema che legge continuamente la temperatura e la visualizza sul display LCD. Se hai bisogno di chiarimenti su qualsiasi parte del processo, assicurati di consultare il tutorial video (nel video a 00:00).

Hardware spiegato

I componenti principali per questo progetto includono il sensore di temperatura LM75A e il display LCD1602. L'LM75A è un sensore di temperatura I2C che fornisce misurazioni della temperatura accurate. Comunica con l'Arduino utilizzando solo due fili, SDA (linea dati) e SCL (linea di clock), rendendo semplice integrarlo nei tuoi progetti.

L'LCD1602 è un display alfanumerico 16x2 che può mostrare fino a 32 caratteri contemporaneamente. Utilizzando l'interfaccia I2C, possiamo controllarlo con soli due fili aggiuntivi, il che semplifica notevolmente il processo di cablaggio. La retroilluminazione dell'LCD può inoltre offrire una migliore visibilità in condizioni di scarsa illuminazione.

Dettagli della scheda tecnica

ProduttoreTexas Instruments
Numero di parteLM75A
Tensione logica/I/Oda 2,7 V a 5,5 V
Tensione di alimentazioneda 2,7 V a 5,5 V
Corrente di uscita (per canale)Non applicabile
Corrente di picco (per canale)N/D
Linee guida sulla frequenza PWMN/D
Soglie logiche di ingresso0.3 * Vcc (basso), 0.7 * Vcc (alto)
Caduta di tensione / RDS (in conduzione)/ saturazioneNon applicabile
Limiti termiciTemperatura di esercizio: da -55°C a +125°C
PacchettoSOT-23
Note / variantiDisponibile in più indirizzi I2C

  • Assicurarsi di fornire un'alimentazione corretta (2.7 V a 5.5 V).
  • Usare resistenze di pull-up sulle linee SDA e SCL se necessario.
  • Verificare la configurazione degli indirizzi I2C per più dispositivi.
  • Mantieni i cablaggi corti per ridurre al minimo le interferenze.
  • Intervallo di temperatura del monitor: -55°C a +125°C.
  • Usa il monitor seriale per il debug delle letture di temperatura.
  • Gestisci efficacemente gli stati di errore nel codice.
  • Presta attenzione ai requisiti di alimentazione del display.

Istruzioni di cablaggio

Arduino_wiring_LM75A_LCD_bb

Per cablare il sensore di temperatura LM75A e l'LCD1602, inizia collegando l'alimentazione. Collega il pin VCC di entrambi, LM75A e LCD1602, al pin 5V dell'Arduino. Quindi collega il pin di massa (GND) di entrambi i moduli al pin GND dell'Arduino.

Successivamente, collega le linee di comunicazione I2C. Il pin SDA del LM75A dovrebbe essere collegato al pin A4 sull'Arduino, mentre il pin SCL dovrebbe essere collegato al pin A5. Questo consente la comunicazione I2C tra il sensore e l'Arduino. Assicurati che i collegamenti siano sicuri per evitare eventuali errori di comunicazione.

Esempi di codice e guida passo dopo passo

Nel codice includiamo innanzitutto le librerie necessarie per il sensore LM75A e il display LCD1602. Il seguente estratto mostra come creare un'istanza del sensore LM75A:

LM75A lm75a_sensor(false, false, false);

Questa riga inizializza l'oggetto sensore LM75A. I parametri booleani corrispondono ai pin A0, A1 e A2 del LM75A, consentendo indirizzi I2C diversi se necessario.

Successivamente, configuriamo il monitor seriale e inizializziamo il display LCD:

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

Qui avviamo la comunicazione seriale a 9600 baud e inizializziamo il display LCD. La retroilluminazione viene accesa e un messaggio iniziale viene stampato sullo schermo.

Nel ciclo principale, leggiamo continuamente la temperatura e la visualizziamo:

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

Questa sezione legge la temperatura dal sensore. Se la lettura non è valida, un messaggio di errore viene inviato al monitor seriale. Altrimenti, la temperatura può essere elaborata e visualizzata sul display LCD.

Dimostrazione / Cosa aspettarsi

Una volta che tutto è cablato e il codice è caricato, dovresti vedere le letture della temperatura sul display LCD1602, che alternano tra Celsius e Fahrenheit. Se il sensore LM75A funziona correttamente, aggiornerà continuamente la temperatura visualizzata ogni secondo. Se ci sono problemi, come polarità invertita o cablaggio errato, controlla le connessioni e assicurati che vengano usati i pin corretti (nel video a 00:00).

Immagini

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

Cose di cui potresti avere bisogno

Risorse e riferimenti

File📁

File Fritzing

Altri file