ESP8266 WiFi – Temperatuur sensor TMP36 (MCP3008/ArduinoIDE)
Deze pagina beschrijft hoe je een TMP36 analoge temperatuursensor kan uitlezen op de ESP8266 met behulp van de MCP3008 chip en ArduinoIDE firmware.
Hardware
De TMP36 is een analoge (laag-voltage) precisie temperatuur sensor, hij heeft een lineaire uitgang dat zowaar gelijk is met het aantal graden, de sensor heeft geen hardwarematige kalibratie nodig.
Afwijking: ±1°C bij +25°C / ±2°C bij −40°C en +125°C
Specificaties:
- Voltage: 2.7 V to 5.5 VDC
- 10 mV/°C schaal factor
- ±2°C precisie over de temperatuur
- ±0.5°C linearity
- Operating Range: −40°C to +125°C
Pinout
Pin: | Functie |
---|---|
1 | +Vs (2.7v tot 5.5v) |
2 | Analoge uitgang |
3 | GND |
Hoe werkt het?
De sensor geeft een voltage via de analoge pin, dat is 10 mV per graad, daar moet je 500 mV (0,5V) aftrekken en dan x 100 vermenigvuldigen.
Voorbeeld:
Is de waarde 0,71 volt dan is de temperatuur 0,71 – 0,5 = 0,21 * 100 = 21 graden.
Aansluiten op de ESP-12 module
Wat heb je nodig?
1) ArduinoIDE software
2) ESP8266 ArduinoIDE board/omgeving
3) Arduino MCP3008 bibliotheek
4) Condensator 0.1uF
Sluit de TMP36 + MCP3008 aan zoals aangegeven op onderstaand schema:
Script
Met onderstaande script kun je de TMP36 uitlezen via de MCP3008:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <MCP3008.h> // MCP3008 pin configuratie #define CLOCK_PIN 2 #define MISO_PIN 5 #define MOSI_PIN 4 #define CS_PIN 14 MCP3008 adc(CLOCK_PIN, MOSI_PIN, MISO_PIN, CS_PIN); // configureer de MCP3008 constructor. void setup() { Serial.begin(9600); // Start de seriele poort op 9600 baud. } void loop() { // lees de voltage uit van de temperatuur sensor. int reading = adc.readADC(0); // lees kanaal 1 van de MCP3008 ADC. // converteer de waarde naar een voltage, voor 3.3v arduino gebruik 3.3 float voltage = reading * 5.0; voltage /= 1024.0; // print de voltage naar de console. Serial.print(voltage); Serial.println(" volts"); // converteer van 10 mV per graad met 500mV offset naar graden (voltage - 500mV) x 100). float temperatureC = (voltage - 0.5) * 100; // print de temperatuur naar de console. Serial.print(temperatureC); Serial.println(" degrees C"); // converteer naar Fahrenheit float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0; // print de temperatuur naar de console. Serial.print(temperatureF); Serial.println(" degrees F"); delay(1000); // wacht een seconde. } |