Khi ta bắt đầu làm một cái gì đó thì thông thường ta phải lên kế hoạch. Đối với 01 hệ thống Arduino cũng thế, khi làm bất kỳ một hệ thống Arduino nào, ta cũng phải có kế hoạch, và kế hoạch đó nên ghi ra giấy để ta dễ hình dung. Thông thường thì kế hoạch đó gồm những bước căn bản sau:
- Xác định mục tiêu của hệ thống.
- Viết ra nguyên lý hay mô tả cách hoạt động (algorithm) của hệ thống.
- Lựa chọn phần cứng.
- Viết kịch bản code: Cần khởi tạo những thông số gì cho hệ thống và những lệnh gì cần được hệ thống thực hiện lặp đi lặp lại.
- Sơ đồ kết nối các thiết bị với Arduino như thế nào?
- Viết code (bao gồm test và kiểm tra lỗi).
Ví dụ: Tạo hệ thống tưới cho việc trồng rau mầm.
B1: Xác định mục tiêu của hệ thống
- Hệ thống trồng rau mầm có kiểm soát độ ẩm và nhiệt độ.
B2: Nguyên lý / mô tả cách hoạt động của hệ thống.
- Đo độ ẩm và nhiệt độ của môi trường hiện tại.
- Nếu nhiệt độ > 30 độ C thì kích hoạt máy bơm tưới phun sương cho đến khi nhiệt độ = 28 độ C.
- Nếu độ ẩm < 27,2 (g/m3) thì kích hoạt máy quạt gió.
B3: Chọn phần cứng
- Đầu dò (cảm biến) nhiệt độ không khí và độ ẩm không khí. Ở đây ta có 02 loại đầu dò tương thích với Arduino: DHT11 hoặc DHT22. Sự khác biệt 02 đầu dò thì bạn xem tài liệu chi tiết ở đây: https://learn.adafruit.com/dht/overview
- Máy bơm nước.
- Quạt hút gió.
- Relay.
B4: Viết kịch bản code.
- Khai báo chân cắm giữa Cảm biến nhiệt độ và độ ẩm và bo mạch Arduino --> được gắn ở chân A0.
- Khai báo độ ẩm cực đại, nhiệt độ cực đại, cực tiểu.
- lặp đi lặp lại thao tác:
- Lấy giá trị nhiệt độ hiện tại.
- Lấy giá trị độ ẩm hiện tại.
- Xử lý khi nhiệt độ hiện tại > nhiệt độ cực đại qui định --> bật máy bơm.
- Xử lý khi độ ẩm hiện tại < độ ẩm qui định --> bật quạt hút gió.
- Nghỉ 15 giây,
- Đọc lại giá trị nhiệt độ, và độ ẩm hiện tại.
B5: Sơ đồ kết nối.
DHT11 <---> Arduino (xem tài liệu chi tiết kỹ thuật về DHT11 ở đây:
---------------------------
Pin 1 - +5V
Pin 2 - A0
Pin 4 - GND
B6: Viết code, test thử và hiệu chỉnh hệ thống.
Trong phần này, ta có sử dụng thư viện (library) của cảm biến DHT11. Chi tiết sử dụng thư viện DHT11 ở đây:http://playground.arduino.cc/main/DHT11Lib
Hoặc các ACE có thể download ở đây. Xong giải nén file zip, copy vào thư mục libraries của Arduino.
--- Đoạn code bên dưới chưa được tối ưu hóa. Chỉ nhằm mục đích minh họa cho bài viết ----
#include <dht11.h>
dht11 DHT11;
// #define DHT11PIN 0 // định nghĩa cảm biến nhiệt độ và độ ẩm ở chân A0
// PIN definitions
int DHT11PIN = 0; // định nghĩa cảm biến nhiệt độ và độ ẩm ở chân A0
int pumpLEDPin = 6;
int pumpPin = 7; // máy bơm
int fanPin = 8; // quạt hút gió
int fanLEDPin = 9;
int temperature_min = 15; // khai báo nhiệt độ tối thiểu
int temperature_max = 30; // khai báo nhiệt độ tối đa
int humidity_min = 28; // khai báo độ ẩm tối thiểu
int humidity_max = 28; // khai báo độ ẩm tối đa
float humiditySensorValue;
float temperatureSensorValue;
// Khởi tạo các xác lập ban đầu
void setup()
{
Serial.begin(115200); // xác lập tốc độ ở cổng serial = 115200;
}
// lặp đi lặp lại các thao tác điều khiển sau.
void loop()
{
Serial.println("\n");
// kiểm tra đầu dò có hoạt động ko??
int chk = DHT11.read(DHT11PIN);
Serial.print("Read sensor: ");
switch (chk)
{
case DHTLIB_OK: // đầu dò hoạt động tốt.
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM: // đầu dò bị lỗi checksum.
Serial.println("Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT: // đầu dò bị lỗi timeout.
Serial.println("Time out error");
break;
default:
Serial.println("Unknown error");
break;
}
// đọc độ ẩm không khí
humiditySensorValue = (float)DHT11.humidity;
// đọc nhiệt độ
temperatureSensorValue = (float)DHT11.temperature;
// Thực hiện vòng lặp nếu nhiệt độ hiện tại > nhiệt độ qui định
while (temperatureSensorValue > temperature_max)
{
// ra lệnh mở máy bơm
digitalWrite(pumpPin,HIGH);
digitalWrite(pumpLEDPin,HIGH);
// chờ 10 giây
delay(10000);
// đọc lại nhiệt độ
temperatureSensorValue = (float)DHT11.temperature;
}
// tắt máy bơm
digitalWrite(pumpPin,LOW);
digitalWrite(pumpLEDPin,LOW);
// Thực hiện vòng lặp nếu độ ẩm hiện tại > độ ẩm qui định
while (humiditySensorValue > temperature_max)
{
// ra lệnh mở máy quạt hút gió
digitalWrite(fanPin,HIGH);
digitalWrite(fanLEDPin,HIGH);
// chờ 10 giây
delay(10000);
// đọc lại độ ẩm
humiditySensorValue = (float)DHT11.humidity;
}
// tắt máy quạt hút gió
digitalWrite(fanPin,LOW);
digitalWrite(fanLEDPin,LOW);
delay(2000);
}
(Sưu tầm)
0 comments:
Post a Comment