Wybór czujnika temperatury padł na LM35 SO8 SMD, który jest podłączony do pinu analogowego A0 układu. Wyświetlacz OLED jest podłączony do pinów A4 i A5 MCU. LM35 mierzy temperaturę, a mikrokontroler wyświetla jej wartość na wyświetlaczu OLED. Złącze CN2 służy do programowania mikrokontrolera za pomocą Arduino IDE i wypalania boot-loadera. A niskoprofilowa i mała płytka może zmieścić się w bardzo małej obudowie. Przykładowy kod pomoże Ci wyświetlić temperaturę w stopniach Celsjusza i Fahrenheita. Jest to sprzęt open-source kompatybilny z Arduino, dzięki czemu łatwo jest stworzyć własny kod używając Arduino IDE.
LM35 jest precyzyjnym czujnikiem temperatury z napięciem wyjściowym liniowo proporcjonalnym do temperatury w stopniach Celsjusza. My użyliśmy czujnika SMD SO8, którego można bezpośrednio zamontować na płytce. Urządzenie może mierzyć temperaturę w zakresie od -55° do +150°C. Napięcie wyjściowe LM35 wzrasta o 10 mV na każdy stopień Celsjusza wraz ze wzrostem temperatury.
Połączenia do programowania Arduino
Nowy układ Atmega328 wymaga wypalenia Boot-Loadera przed wgraniem kodu Arduino. Więcej informacji na temat wypalania Boot-loadera i programowania znajdziesz pod tym linkiem https://bit.ly/32vWTqa
Parametry techniczne gotowego ThermoDuino
- Zasilanie 5 V DC @ 20 mA
- Zakres temperatur do 150°C
- Wyjście czujnika 10 mV/C (1,5 V na wyjściu przy temperaturze 150°C)
- Wymiary PCB: 27,31×28,42 mm
Schemat elektryczny termometru ThermoDuino
Połączenie wyświetlacza z mini Arduino i sensorem LM35
Listing
/*
* ThermoDuino
* Code Author Rui Santos of (RandomNerdTutorials), Code Modified by www.rajkumarsharma.com
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const int sensorPin = A0;
float sensorValue;
float voltageOut;
float temperatureC;
float temperatureF;
// uncomment if using LM335
//float temperatureK;
void setup() {
pinMode(sensorPin, INPUT);
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop() {
sensorValue = analogRead(sensorPin);
voltageOut = (sensorValue * 5000) / 1024;
// calculate temperature for LM35 (LM35DZ)
temperatureC = voltageOut / 10;
temperatureF = (temperatureC * 1.8) + 32;
// calculate temperature for LM335
//temperatureK = voltageOut / 10;
//temperatureC = temperatureK - 273;
//temperatureF = (temperatureC * 1.8) + 32;
// calculate temperature for LM34
//temperatureF = voltageOut / 10;
//temperatureC = (temperatureF - 32.0)*(5.0/9.0);
Serial.print("Temperature(ÂşC): ");
Serial.print(temperatureC);
Serial.print(" Temperature(ÂşF): ");
Serial.print(temperatureF);
// clear display
display.clearDisplay();
// display temperature Celsius
display.setTextSize(1);
display.setCursor(0,0);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(0,10);
display.print(temperatureC);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
// display temperature Fahrenheit
display.setTextSize(1);
display.setCursor(0, 35);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(0, 45);
display.print(temperatureF);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("F");
display.display();
delay(1000);
}