Suchcode

Wie man einen LM35 verwendet, um die Temperatur in Celsius, Fahrenheit und Kelvin zu messen

Wie man einen LM35 verwendet, um die Temperatur in Celsius, Fahrenheit und Kelvin zu messen

In diesem Tutorial werden wir lernen, wie man den LM35-Temperatursensor verwendet, um die Temperatur zu messen und sie in Celsius, Fahrenheit und Kelvin auf dem seriellen Monitor anzuzeigen. Der LM35 ist ein einfacher, aber effektiver Sensor, der eine Spannung ausgibt, die proportional zur Temperatur ist, was einfache Messungen und Umrechnungen ermöglicht. Dieses Projekt ist ideal für Anfänger, die temperaturempfindliche Funktionen in ihre Arduino-Projekte integrieren möchten. (im Video um 01:00)

Der LM35 hat drei Pins: der linke Pin ist für die Stromversorgung, die an eine Spannungsquelle zwischen 4V und 30V angeschlossen werden kann; der mittlere Pin gibt eine Spannung aus, die proportional zur Temperatur ist; und der rechte Pin ist für den Masseanschluss. Der Sensor gibt 10 Millivolt für jeden Grad Celsius aus, was wir verwenden werden, um die Temperatur in unserem Arduino-Code zu berechnen. (im Video bei 02:30)

Hardware Erklärt

Der LM35 Temperatursensor ist ein Präzisionsgerät, das eine analoge Spannungsgröße liefert, die der Temperatur in Celsius entspricht. Der Sensor arbeitet in einem Bereich von -55°C bis 150°C mit einer Genauigkeit von ±0,5°C. Der geringe Stromverbrauch von 60 Mikroampere macht ihn geeignet für batteriebetriebene Geräte. Die Ausgangsimpedanz des LM35 ist niedrig, was es ihm ermöglicht, eine Last effektiv zu treiben, ohne signifikanten Spannungsabfall, was entscheidend für die Aufrechterhaltung genauer Messwerte ist. Der Sensor ist oft im TO-92 Gehäuse formfaktor verpackt, was die Integration in verschiedene Projekte erleichtert.

Technische Datenblatt Einzelheiten

HerstellerTexas Instruments
TeilenummerLM35
Logik/IO-Spannung4-30 V
Ausgangsstrom (typ.)60 µA
Temperaturbereich-55 bis 150 °C
Ausgangsspannung10 mV/°C
Genauigkeit (typ.)±0,5 °C (bis zu 25 °C)
PaketTO-92

  • Stellen Sie eine ordnungsgemäße Stromversorgung zwischen 4V und 30V sicher.
  • Seien Sie vorsichtig bei umgekehrter Polarität der Stromanschlüsse.
  • Verwenden Sie eine stabile Erdverbindung, um Störungen bei den Messungen zu vermeiden.
  • Halten Sie den Sensor von direkten Wärmequellen fern, um fehlerhafte Messwerte zu vermeiden.
  • Betrachten Sie einen Tiefpassfilter, wenn Sie Schwankungen in der Ausgangsspannung feststellen.

Verdrahtungsanweisungen

LM35_basic_wiring_bb

Um den LM35-Sensor zu verdrahten, schließen Sie den linken Pin (VCC) an die 5V-Stromversorgung des Arduino an. Der rechte Pin (GND) sollte mit der Erde (GND) des Arduino verbunden werden. Der mittlere Pin (Output) ist der Ort, an dem Sie die Temperaturdaten ablesen; schließen Sie diesen Pin an den analogen Eingangspin an.A0auf dem Arduino. Dieses Setup ermöglicht es dem Arduino, die Spannungswerte vom LM35 zu lesen, die der Temperatur entsprechen. Wenn Sie die Verkabelung für andere Konfigurationen anpassen müssen, stellen Sie sicher, dass Sie den analogen Pinverweis im Code aktualisieren, um Ihr neues Setup abzubilden. (im Video bei 03:15)

Codebeispiele und Durchgangsanleitungen

Die folgenden Codeausschnitte zeigen, wie man die Temperatur vom LM35 liest und in verschiedenen Einheiten anzeigt. Zuerst definieren wir den Eingangspin und den Umrechnungsfaktor des LM35:

const int inPin = A0; // can change
const float LM35_FACTOR = 0.01; // do not change

In diesem Ausschnitt,inPinstellt den analogen Pin dar, der mit dem LM35-Ausgang verbunden ist, undLM35_FACTORdefiniert die Umwandlung, die erforderlich ist, um die Spannung in Temperatur in Celsius umzuwandeln. Als nächstes richten wir die serielle Kommunikation ein:

void setup() {
  Serial.begin(9600);
  Serial.println("Robojax LM35 for Arduino");
  delay(500);
}

Hier,Serial.begin(9600)initialisiert die serielle Kommunikation mit einer Baudrate von 9600 Bits pro Sekunde, wodurch wir Daten an den seriellen Monitor senden und von dort empfangen können. Die Loop-Funktion liest kontinuierlich die Temperatur und druckt sie aus:

void loop() {
  printTemperature('C');
  printTemperature('F');
  printTemperature('K'); 
  delay(1000);
}

In dieser Schleife rufen wir dieprintTemperatureFunktion für jede Einheit (Celsius, Fahrenheit, Kelvin), um die jeweiligen Temperaturen im seriellen Monitor anzuzeigen.

Vorführung / Was Sie erwarten können

Wenn der LM35 korrekt verdrahtet ist, sollten die Temperaturwerte in Celsius, Fahrenheit und Kelvin im seriellen Monitor angezeigt werden. Wenn Sie Wärme auf den Sensor anwenden, werden die Werte entsprechend steigen. Wenn Sie zufällige oder unregelmäßige Werte feststellen, überprüfen Sie Ihre Verdrahtung auf lose Verbindungen oder falsche Pinbelegungen.

Video-Zeiten

  • 00:00- Einführung
  • 01:00- Übersicht des LM35
  • 02:30- Verdrahtungsanweisungen
  • 03:15- Code-Erklärung
  • 05:00- Demonstration

Bilder

LM35_basic_project
LM35_basic_project
LM35_basic_wiring_bb
LM35_basic_wiring_bb
LM35_pinout
LM35_pinout
323-How to use an LM35 to measure temperature in Celsius, Fahrenheit, and Kelvin
Sprache: C++
/*
 * This Arduino sketch is to use LM35 to measure temperature
 * This code has two ways to get temperature
 * 1-To print the temperature either in C, F or K on the serial monitor
 * 2-To return the value in C, F and K
 * 
 * Watch Video instruction for this code:https://youtu.be/S5IBc_epa1A
 * 
 * Full explanation of this code and wiring diagram is available at
 * my Arduino Course at Udemy.com here: http://robojax.com/L/?id=62

 * Written by Ahmad Shamshiri on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
 * in Ajax, Ontario, Canada. www.robojax.com
 * 

 * Get this code and other Arduino codes from Robojax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams and libraries
all in one place. Purchase My course on Udemy.com http://robojax.com/L/?id=62

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

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 iteration = 1000; //can change (see video)
const float LM35_FACTOR =0.01;// do not change

// 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 for Arduino");
  delay(500);
}

// the loop routine runs over and over again forever:
void loop() {
 //robojax.com LM35 Code for Arduino
  printTemperature('C');
  Serial.println();
  printTemperature('F');
  Serial.println();  
  printTemperature('K'); 
  Serial.println();     
  Serial.println();    
//  Serial.print(" Temperature: ");
//  printDegree();    
//  Serial.print(getTemperature('C'));
if(getTemperature('C') >87)
{
 // do something here (watch video)
}
//  Serial.println();
  delay(1000);
}



/*
 * 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 character 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");  
}

Dinge, die Sie vielleicht brauchen

Ressourcen & Referenzen

Dateien📁

Keine Dateien verfügbar.