Giá trị analog thường có độ nhiễu lớn vì vậy trước khi xử lý, các giá trị này cần phải cho qua một bộ lọc để phần điều khiển có thể làm việc tốt hơn. Chúng ta sẽ tiến hành đọc giá trị analog của cảm biến độ ẩm đất, sau đó cho qua bộ lọc Kalman và vẽ đồ thị để so sánh giá trị trước và sau khi lọc.
Kết nối phần cứng (bên trái là cảm biến độ ẩm đất, bên phải là arduino uno):
AO (Analog Ouput) <===> A0
DO (Digital Ouput) <===> 2 (Chưa sử dụng tới nhưng cứ cắm vào sẵn)
VCC <===> 5V
GND <===> GND
Cài đặt thư viện SimpleKalmanFilter bằng cách vào Tools > Manage Libraries... và cài đặt thư viện như sau
Viết code
#include <SimpleKalmanFilter.h>
void setup()
{
Serial.begin(9600);
pinMode (2, INPUT);
pinMode(A0, INPUT);
pinMode (13, OUTPUT);
}
SimpleKalmanFilter filter(10, 10, 0.05);
float estimate;
void loop()
{
int value = analogRead(A0);
estimate = filter.updateEstimate(value);
Serial.print("K:"); Serial.print(estimate);
Serial.print(",V:"); Serial.println(value);
delay(10);
}
Ghi chú: thư viện SimpleKalmanFilter có ba tham số. Tham số thứ nhất là sai số của thiết bị đo, thí dụ thiết bị đo trả về giá trị từ 0 - 1023, tức là 1024 giá trị, giả sử sai số là 10% thì giá trị này là 10.24, có thể làm tròn thành 10. Tham số thứ hai theo tác giả thì cứ cho bằng giá trị với tham số thứ nhất. Tham số thứ 3 là tốc độ "bám sát" của giá trị dự đoán so với giá trị đo được. Số này càng lớn thì tốc độ "bám sát" càng nhanh. Theo tác giả đề nghị là hãy bắt đầu thử nghiệm với 0.01 (1%). Như ví dụ ở trên thì bộ lọc Kalman đang dùng là SimpleKalmanFilter filter(10, 10, 0.05);
Mở menu Tools chọn đúng board arduino của bạn và cổng COM sau đó upload chương trình. Sau đó vào Tools > Serial Plotter để xem kết quả
Link mua hàng
Comments
Post a Comment