Suchcode

Anzeige der Temperatur von einem LM35 auf einem LCD1602 in Celsius, Fahrenheit und Kelvin

Anzeige der Temperatur von einem LM35 auf einem LCD1602 in Celsius, Fahrenheit und Kelvin

In diesem Tutorial lernen wir, wie man einen LM35-Temperatursensor verwendet, um die Temperatur zu messen und die Ergebnisse auf einem LCD1602-Modul in drei verschiedenen Einheiten anzuzeigen: Celsius, Fahrenheit und Kelvin. Dieses Projekt ist eine ausgezeichnete Möglichkeit, Sensordaten mit visueller Ausgabe zu kombinieren und Ihr Verständnis dafür zu vertiefen, wie Sensoren und Anzeigen in Arduino-Projekten zusammenarbeiten. Sie werden sehen, wie man die Komponenten richtig verkabelt und wie man den erforderlichen Code für diese Aufgabe implementiert.

LM35_mit_LCD-1

Um loszulegen, verwenden wir den LM35-Temperatursensor, der ein dreipinstiges Gerät ist. Er gibt eine analoge Spannung aus, die der Temperatur in Grad Celsius entspricht. Das LCD1602 wird verwendet, um die Temperaturmesswerte anzuzeigen. Am Ende des Tutorials haben Sie ein voll funktionsfähiges Temperaturanzeigesystem. Zur weiteren Klärung sehen Sie sich das Video bei (im Video bei 00:55) an.

Hardware erklärt

Die Hauptkomponenten dieses Projekts sind der LM35-Temperatursensor und das LCD1602-Display. Der LM35 funktioniert, indem er eine Spannungsausgabe bereitstellt, die linear proportional zur Temperatur in Celsius ist, spezifisch 10 mV/°C. Dies macht es einfach, die Spannungsmessung in eine Temperaturmessung mithilfe einfacher Berechnungen im Code umzuwandeln.

Das LCD1602 ist ein 16x2-Zeichendisplay, das zwei Zeilen Text anzeigen kann. Es wird über eine I2C-Schnittstelle gesteuert, die die Verdrahtung vereinfacht, indem nur vier Verbindungen verwendet werden: VCC, GND, SDA (Datenleitung) und SCL (Taktleitung). Diese Anordnung minimiert die Anzahl der benötigten Pins auf dem Arduino und ermöglicht einfachere Verbindungen und Verwaltung.

LM35_Pinbelegung

Technische Datenblatt Einzelheiten

Hersteller Texas Instruments
Teilenummer LM35
Logik/IO-Spannung 3-30 V
Ausgangsspannung 10 mV/°C
Temperaturbereich -55 bis +150 °C
Genauigkeit ±0,5 °C (typ.)
Paket TO-46, TO-220

  • Stellen Sie eine ordnungsgemäße Stromversorgung sicher, mindestens 4V für LM35.
  • Verwenden Sie bei Bedarf einen Pull-up-Widerstand für die SDA/SCL-Leitungen.
  • Halten Sie die Verdrahtung kurz, um das Rauschen zu minimieren.
  • Entkoppeln Sie die Stromversorgung mit Kondensatoren für Stabilität.
  • Überprüfen Sie jede Verbindung, bevor Sie das System mit Strom versorgen.

Verdrahtungsanweisungen

LM35_LCD1602_wiring_new

Um den LM35-Temperatursensor zu verdrahten, verbinden Sie den linken Pin mit einer 5V-Stromquelle vom Arduino, die im Code als definiert istVCC2Der mittlere Pin, der der Ausgangspin ist, sollte mit dem analogen Eingangspin verbunden werden.A0auf dem Arduino. Schließen Sie schließlich den rechten Pin des LM35 an den Ground an.

Für das LCD1602-Modul sollte der Ground-Pin mit dem Ground des Arduino verbunden werden. Der VCC-Pin sollte mit dem 5V-Ausgang des Arduino verbunden werden. Die Datenleitung (SDA) sollte mit dem analogen Pin verbunden werden.A4, während die Taktleitung (SCL) angeschlossen werden sollte anA5Dieses Setup ermöglicht es dem Arduino, über das I2C-Protokoll mit dem LCD zu kommunizieren.

Codebeispiele und Schritt-für-Schritt-Anleitungen

Im Code definieren wir den Eingangs-Pin für den LM35-Sensor und richten das LCD mit seiner I2C-Adresse ein. Die Setup-Funktion initialisiert die serielle Kommunikation und das LCD-Display. Der folgende Auszug zeigt, wie man die Pins initialisiert:

const int inPin = A0; // Pin for LM35 output
const int VCC2 = 2; // Pin for LM35 VCC
const int iteration = 1000; // Number of readings for averaging

Hier,inPinist eingestellt aufA0, wo der Ausgang des LM35 gelesen wird. DerVCC2Der Pin ist definiert, um den LM35 mit Strom zu versorgen, unditerationwird verwendet, um die Temperaturmessungen zu mitteln.

Als nächstes haben wir die Hauptschleife, die die Temperaturmessungen verarbeitet und sie auf dem LCD anzeigt. Jeder Temperaturtyp wird sequenziell mit einer Verzögerung angezeigt:

lcdDisplay(getTemperature('C'),'C');
delay(2000);
lcdDisplay(getTemperature('F'),'F');
delay(2000);
lcdDisplay(getTemperature('K'),'K');  
delay(2000);    

Dieser Codeblock ruft dielcdDisplayFunktion zur Anzeige der Temperatur in Celsius, Fahrenheit und Kelvin, mit einer Pause von 2 Sekunden zwischen jeder Anzeige.

Der vollständige Code wird unterhalb dieses Artikels geladen, wo Sie alle Funktionen und Logik sehen können, die für das Lesen der Temperatur und deren entsprechende Anzeige implementiert wurden.

Demonstration / Was zu erwarten ist

LM35_mit_LCD-2

Wenn Sie das abgeschlossene Projekt ausführen, sollte das LCD die Temperaturwerte in Celsius, Fahrenheit und Kelvin anzeigen, wobei jede Anzeige durchgeschaltet wird. Sie können die Reaktion des Sensors testen, indem Sie Wärme anwenden, zum Beispiel von einer Heißluftpistole, und die Änderungen der angezeigten Temperatur beobachten (im Video bei 09:15). Wenn der Sensor an eine Stromquelle unterhalb der empfohlenen Spannung angeschlossen ist, können die Werte ungenau sein. Stellen Sie daher sicher, dass er mit mindestens 4V betrieben wird.

Video-Zeitstempel

  • 00:00- Einführung
  • 00:55- Hardwareübersicht
  • 03:30- Anschlussanweisungen
  • 06:15- Code Überblick
  • 09:15- Demonstration

Bilder

LM35_pinout
LM35_pinout
LM35_LCD1602_wiring_new
LM35_LCD1602_wiring_new
LM35_with_LCD-2
LM35_with_LCD-2
LM35_with_LCD-1
LM35_with_LCD-1
326-On Lm35 Prints the temperature as C, F, or K on the LCD1602 or LCD2004
Sprache: C++
/*
 * This Arduino sketch is to use LM35 to measure temperature.

 * Prints the temperature as C, F, or K on the LCD1602 or LCD2004 with I2C module (4 wires).
 
 * 
 * Watch video instructions for this code: https://youtu.be/XpMtQVCMIRA
 * 
 
 * Written by Ahmad Shamshiri on May 12, 2020 at 19:53 in Ajax, Ontario, Canada
 * in Ajax, Ontario, Canada. www.robojax.com
 * 


 or make a donation using PayPal: http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.


*/

const int inPin =A0;//can change
const int VCC2 =2;
const int iteration = 1000; //can change (see video)
const float LM35_FACTOR =0.01;// do not change

// start of settings for LCD1602 with I2C
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x26, 16, 2);
// end of settings for LCD1602 with I2C

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  Serial.println("Robojax LM35 with LCD for Arduino");
  
  pinMode(VCC2,OUTPUT);
  digitalWrite(VCC2, HIGH);
  
  lcd.begin();  
  lcd.backlight();
  lcd.print("Robojax LM35");
  lcd.setCursor(0,1);
  lcd.print("Temp: "); 
}

// the loop routine runs over and over again forever:
void loop() {
 //robojax.com LM35 with LCD Code for Arduino

  lcdDisplay(getTemperature('C'),'C');
  delay(2000);
  
  lcdDisplay(getTemperature('F'),'F');
  delay(2000);
    
  lcdDisplay(getTemperature('K'),'K');  
  delay(2000);    

if(getTemperature('C') >87)
{
 // do something here (watch video)
}

//  printTemperature('C');
//  Serial.println();
//  printTemperature('F');
//  Serial.println();  
//  printTemperature('K'); 
//  Serial.println();     
//  Serial.println();    
//  Serial.print(" Temperature: ");
//  printDegree();    
//  Serial.print(getTemperature('C'));
//  Serial.println();
  delay(100);
}

/*
 * getTemperature()
 * @brief gets the average temperature
 * @param average temperature
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return returns one of the values above
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
float getTemperature(char type)
{
    float value;
    float averageTemperature =0;
    int sensorValue = analogRead(inPin);
    float voltage = sensorValue * (5.0 / 1023.0); 
    float temperature = voltage / LM35_FACTOR;
    for(int i=0; i< iteration; i++)
    {
      averageTemperature += temperature;
    }

    averageTemperature /=iteration;
  if(type =='F')
   {
    value = averageTemperature *9/5 + 32;//convert to Fahrenheit 
   }else if(type =='K')
   {
    value = averageTemperature + 273.15;//convert to Kelvin
   }else{
    value = averageTemperature;// return Celsius
   }    
    return value ;
}//getTemperature()

/*
 * printTemperature()
 * @brief prints  temperature on serial monitor
 * @param charact type
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return none
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
 */
void printTemperature(char type)
{
    float value;
    float temp = getTemperature(type);
   Serial.print(temp);
    printDegree();    
  if(type =='F')
   {
     Serial.print("F");
    }else if(type =='K')
   {
     Serial.print("K");
   }else{
     Serial.print("C");
   }    
 
}//printTemperature()

/*
 * @brief prints degree symbol on serial monitor
 * @param none
 * @return returns nothing
 * Written by Ahmad Shamshiri on July 13, 2019
 * for Robojax Tutorial Robojax.com
 */
void printDegree()
{
    Serial.print("\\xC2"); 
    Serial.print("\\xB0");  
}


/*
 * lcdDisplay(float value,char symbol)
 * displays value and title on LCD1602
 * How to use:
 * lcdDisplay(35.3,'C');

 */
void lcdDisplay(float value,char symbol)
{
   // Robojax.com LCD1602 for LM35 Demo   

   for(int i=7; i<16;i++)
   {
    lcd.setCursor(i,1);
    lcd.write(254);  
   }
   lcd.setCursor (7,1); //
   lcd.print(value);
   lcd.print((char)223);    
   if(symbol =='F')
   {
    lcd.print("F");
   }else if(symbol =='K')
   {
    lcd.print("K");
   }else{
    lcd.print("C");    
   }
 // Robojax.com LCD1602 for LM35 Demo
}

Dinge, die Sie vielleicht brauchen

Ressourcen & Referenzen

Dateien📁

Keine Dateien verfügbar.