Tôi đang cố gắng đọc một cảm biến nhiệt độ LM35 với Arduino UNO mà tôi đã nhận được như một món quà. Vấn đề là thực tế, rằng các bài đọc cảm biến của tôi, tốt, ít nhất là đáng ngờ - chúng nhảy với mỗi lần đọc khoảng 5 ° C lên hoặc xuống.
Tôi đã sử dụng một số bài viết làm thế nào để kết nối mọi thứ với bo mạch Arduino và lập trình đọc ( 1 , 2 , 3 ) và tạo ra mã được đăng dưới đây. Việc đọc cảm biến dao động rất nhiều - nó nhảy khoảng 3 đến 7 ° C sau mỗi lần đọc bất kể tần số đọc (được kiểm tra với việc đọc mỗi 0,5 giây, 1,0 giây hoặc 2,5 giây). (Thật không may, tôi không sở hữu nhiều đồng hồ để kiểm tra giá trị thực tế.) Để giảm thiểu vấn đề, tôi đã triển khai một trung bình, nhưng vấn đề tiềm ẩn vẫn còn. Các giá trị dự kiến là khoảng 23 hoặc 24 ° C khi được đo bằng trạm thời tiết kỹ thuật số và nhiệt kế lưỡng kim tương ứng.
Bạn đã gặp điều này trước đây? Bạn có bất cứ ý tưởng những gì có thể là nguồn gốc của điều này? Tôi mới bắt đầu học điện tử cũng như Arduino, cố gắng học và chủ yếu hiểu nó.
Mã hoàn chỉnh:
#include <WString.h>
//Stores read analog values
int readLM35;
const int sensorAnalogPin = 0;
const float voltsToTemperature = 1.1 / 1023 * 100; // (1.1V supply / 10bit resolution) * (10 mV/°C = 1 V / 100 °C)
//Stores the temperature in °C
float temp;
//Averager
float temps[8];
byte position = 0;
float averageTemp;
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
//For setting internal analog reference voltage to 1.1V
analogReference(INTERNAL);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(50);
digitalWrite(LED_BUILTIN, LOW);
//Measure temperature
readLM35 = analogRead(sensorAnalogPin);
temp = readLM35 * voltsToTemperature;
//Save it
temps[position] = temp;
if (position == 7) {
position = 0;
} else {
position++;
}
//Get average
averageTemp = 0;
for (byte i = 0; i < 8; i++) {
averageTemp += temps[i] / 8;
}
//Write
Serial.println(String(readLM35) + " => " + String(temp, 1) + " deg. C, avg. " + String(averageTemp, 1));
delay(2500);
}
Ví dụ về đầu ra (lưu ý các số đầu tiên - đọc thực tế):
211 => 22.7 deg. C, avg. 22.5
186 => 20.0 deg. C, avg. 21.9
234 => 25.2 deg. C, avg. 22.7
173 => 18.6 deg. C, avg. 21.9
237 => 25.5 deg. C, avg. 22.6
185 => 19.9 deg. C, avg. 21.9
231 => 24.8 deg. C, avg. 22.4
193 => 20.8 deg. C, avg. 22.2
223 => 24.0 deg. C, avg. 22.3
206 => 22.2 deg. C, avg. 22.6
197 => 21.2 deg. C, avg. 22.1
225 => 24.2 deg. C, avg. 22.8
183 => 19.7 deg. C, avg. 22.1
240 => 25.8 deg. C, avg. 22.8