Temperatuur meten met de LM35

De LM35 temperatuursensor is een leuke sensor om de Analoog/Digitaal-conversie van het Dwengobord te leren gebruiken. Wanneer de sensor goed is aangesloten zal hij een waarde tussen 0 - 1023 geven (op de OUTPUT van de LM35). Deze output geven we door naar een analoge ingang van het Dwengo-bord zodat we de waarde kunnen omzetten naar een digitale waarde.

Benodigdheden

De LM35 temperatuursensor

De sensor heeft 3 aansluitpinnen:

  • Voeding (deze gaat naar de + van het dwengo uitreidingsbord)
  • Uitgang (deze gaat naar de AN0-poort van het uitbreidingsbord)
  • GND (deze gaat naar de - van het uitbreidingsbord)

LM35 temperatuursensor

Aansluiten van een LED op het breadboard

Als extraatje heb ik ervoor gezorgd dat er een LED aangaat als de temperatuur hoger is dan 26 °C. Hiervoor heb ik een LED aangesloten op poort RB4. Het lange beentje (+) van de LED sluit ik aan op poort RB4 met een voorschakel weerstand van 180 Ohm ([RB4] --> [180ohm] --> [LED]). Het korte beentje (-) van de LED laat ik lopen naar de - op de uitbreidingsconnector van het Dwengo-bord. Dankzij de voorschakelweerstand van 180 Ohm is de stroom door de LED beperkt tot 28 mA (= 5 V / 180 Ohm).

Omzetten naar graden Celsius

De analoge waarde van de LM35 omzetten naar graden Celsius doe ik in volgende stappen:

  • Na A/D-conversie geeft de LM35 een waarde tussen 0-1023 (0 bij 0 Volt en 1023 bij 5 Volt). Deze waarde zetten we om naar een spanning: spanning = 5x(uitgelezen waarde / 1023.0)
  • Of indien we de spanning in mV wensen: spanning = 1000x5x(uitgelezen waarde / 1023.0)
  • Uit de datasheet van de LM35 weten we dat 10 mV = 1 °C dus moet er door 10 gedeeld worden: temperatuur = 1000x5x(uitgelezen waarde / 1023.0)/10
  • Of na vereenvoudiging: temperatuur = 0.48876x(uitgelezen waarde)

Voorbeeldcode in C

  1. #include <dwengoBoard.h>
  2. #include <dwengoConfig.h>
  3. #include <dwengoADC.h>
  4. #include <dwengoLCD.h>
  5. #include <dwengoDelay.h>
  6.  
  7. void main(void) {
  8. initBoard();
  9. initADC();
  10. backlightOn();
  11. TRISB = 0; // poort B als output
  12.  
  13. while(TRUE) {
  14. unsigned int val; // hier declareer ik integer val waar ik de analoge waarde zal plaatsen
  15. unsigned int temp; // hier integer temp waarin ik de omgerekende waarde zal plaatsen
  16. val=readADC(0); // de uitgelezen waarde zetten we in val
  17.  
  18. temp=(val*0.48876); // de formule om de analoge waarde (val) om te rekenen naar °C (temp)
  19.  
  20. clearLCD();
  21.  
  22. appendStringToLCD("Het is: "); // Het is: verschijnt op de 1ste lijn van het LCD
  23.  
  24. setCursorLCD(1, 0); // hiermee verplaats ik de cursor naar de 2de regel van het LCD
  25. appendIntToLCD(temp); // de waarde van temp word op het scherm getoond
  26. appendStringToLCD(" C"); // de eenheid voor temperatuur
  27.  
  28. delay_ms(500);
  29.  
  30. if ( temp > 26 ) // een if-statement om te kijken of de temperatuur hoger is dan 26 graden
  31. PORTB = 0b00010000; // als de temperatuur hoger is gaat poort RB4 hoog (dus de LED gaat aan)
  32. else
  33. PORTB = 0b00000000; // als de temperatuur lager is dan 26 gaat RB4 weer laag (LED uit)
  34. }
  35. }

Resultaat

LM35 led on

Inhoud syndiceren