Tải bản đầy đủ (.docx) (15 trang)

Hệ thống tự động cho thủy canh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (999.44 KB, 15 trang )

Hệ Thống Tự Động Cho Thủy Canh
Phần cứng cần phải có cho hệ thống gồm:
















1 x Arduino UNO MEGA Duemilanove (bo mạch Arduino UNO). Giá: 290k
1 x LCD display with I2C communication (màn hình LCD 4 dòng, 20 ký tự). Giá: 145k.
1 x RTC module with I2C communication. Giá: 40-60k.
1 x Relay Module opto-coupled to 250V/10A: Giá: 45k.
2 x Modules "Driver" LM-393 general purpose (Adapter giao tiếp giữa bo mạch Arduino và cảm biến độ ẩm, mực nước)
1 x Soil Moisture Sensor (Hygrometer) KDQ11 (cảm biến độ ẩm). Giá: 193k.
1 x Water Level Sensor (Homemade) (cảm biến mực nước, hay cảm biến mưa). Giá: 70k.
1 x Buzzer piezoelectric (loa báo động). Giá: 15k.
2 x LEDs - 10mm, Green (đèn LED màu xanh lá)
1 x LED - 10mm, Red (đèn LED màu đỏ)
1 x LED - 10mm, Yellow (đèn LED màu vàng)
4 x Resistors 150 Ohm 1/4 W (điện trở 150 ôm, 1/4w)
1 x Water pump for aquarium, with filter system (127 or 220V) - 01 máy bơm hồ cá.


1 x Electric Power Cable, 127/220VAC - 10Amps - cáp nguồn điện.


Các phần cứng trên có thể tìm mua ở DIY Sài Gòn, địa chỉ: 702/14b Điện Biên Phủ Q10 (gần Ngã 7), HCM.
Sơ đồ đấu nối:


Sơ đồ đấu nối (tiếp theo)..



Giải thích cách viết ở dưới chút xíu:
RTC <-> Arduino:
-----------------


GND <-> GND
+5 V <-> +5 V
...
Nghĩa là:
chân GND của RTC đấu với chân GND của bo mạch Arduino (các bạn nhìn trên bo mạch có ghi mấy chữ này).
chân cực dương của RTC đấu với cực dương 5V của bo mạch arduino.
Nối RTC với bo mạch Arduino:
RTC <-> Arduino:
----------------GND <-> GND
+5 V <-> +5 V
SDA <-> A4
SCL <-> A5
Nối Relay với bo mạch Arduino:
Relay - Arduino:

----------------GND <-> GND
+5 V <-> +5 V
IN <-> D7
Nối LCD <-> Arduino:
----------------GND <-> GND
+5 V <-> +5 V
SDA <-> A4
SCL <-> A5
Nối loa BUZZER <-> Arduino:
-----------------+ <-> D2
- <-> GND
LM-393 DRIVER (moisture sensor) <-> Arduino
------------------------------------------GND <-> GND
+5 V <-> +5 V
OUT <-> A1
LM-393 DRIVER (water sensor level) <-> Arduino
---------------------------------------------GND <-> GND
+5 V <-> +5 V
OUT <-> A0
Other Components <-> Function <-> Arduino
----------------------------------------Red LED <-> Dry soil <-> D5
Yellow LED <-> Soggy soil <-> D3
Green LED <-> Moist soil <-> D4
Green LED <-> Water Pump <-> D6
Bây giờ ta sẽ xem qua phần code của chương trình, và hiệu chỉnh các thông số như: mực nước, độ ẩm của đất.
Khai báo chân đầu vào của sensor (cảm biến độ ẩm):


Trong hình trên:





levelSensorPin = 0 nghĩa là chân đầu vào của cảm biến mực nước/nước mưa là A0.






int moistureSensor1Pin = 1;

moistureSensorPin = 1 nghĩa là chân đầu vào của cảm biến độ ẩm đất là A1.
Một bo mạch UNO có thể sử dụng tối đa 06 cảm biến độ ẩm đất từ chân A0 --> A5 của Arduino. Khi đó bạn sửa lại code, khai báo như sau:

int moistureSensor2Pin = 2;
int moistureSensor3Pin = 3;

...
Kiểm tra đất bị khô, nếu giá trị moistureSensorValue > 700. Bật đèn hiển thị LED màu đỏ: digitalWrite(drysoilLEDPin,HIGH).


Đất ẩm vừa phải, nếu giá trị moistureSensorValue nằm trong khoảng từ 300 đến 700. Bật đèn hiển thị LED màu xanh:
digitalWrite(moistsoilLEDPin,HIGH);


Nếu đất bị ướt (độ ẩm) nếu giá trị moistureSensorValue < 300. Bật đèn hiển thị LED màu vàng: digitalWrite(soggyLEDPin,HIGH);


Nếu đất bị khô, thì bật máy bơm và bơm đến khi nào đạt độ ẩm đã được qui định.



Các AC có thể tùy chỉnh các giá trị độ ẩm trong code như đã trình bày ở trên theo ý của mình. Sau khi hiệu chỉnh, ta tiến hành nạp lại code cho bo
mạch Arduino.
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:

1.
2.
3.
4.
5.
6.

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.



Đầ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: />




Máy bơm nước.





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.

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

Quạt hút gió.


Relay.
B4: Viết kịch bản code.

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:
o Lấy giá trị nhiệt độ hiện tại.
o Lấy giá trị độ ẩm hiện tại.
o Xử lý khi nhiệt độ hiện tại > nhiệt độ cực đại qui định --> bật máy bơm.
o Xử lý khi độ ẩm hiện tại < độ ẩm qui định --> bật quạt hút gió.
o Nghỉ 15 giây,
o Đọ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: />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);
}
Nào, bây giờ mình quay trở lại cái dự án ban đầu của mình --> Hệ thống thủy canh tự động. Cũng theo 06 bước căn bản nhé.
B1: Xác định mục tiêu --> Hệ thống thủy canh tự động: ổn định độ pH từ 6.2-6.5; nồng độ dung dịch, nhiệt độ và ẩm độ.



Ổn định độ pH: Như ta biết là độ pH sẽ thay đổi nếu: ta đo pH giữa buổi trưa trời nắng nóng. Tương tự nếu ta đo pH vào buổi chiều
tối, độ pH cũng thay đổi. Ngoài ra nếu nhiệt độ của dung dịch tăng cao cũng khiến cho pH cũng thay đổi.
Vậy ta sẽ đo độ pH và điều chỉnh vào thời điểm nào??
• Nồng độ dung dịch: Ở đây mình sẽ dùng thang đo EC (ppm), đo tổng nồng độ dd trong bồn dd đang trồng, ko đo chi tiết là Ca, K, P, N
còn lại bao nhiêu ppm. Mình sẽ pha 02 bình dung dịch cốt A và B, sau đó nếu nồng độ dung dịch giảm, thì ta châm thêm (A+B) vào.
Nếu nồng độ dd tăng, thì ta bơm thêm nước vào để làm loãng, giảm nồng độ đến ngưỡng qui định.
• Nhiệt độ: Có 02 loại nhiệt độ: nhiệt độ trong nhà kính và nhiệt độ dung dịch. Mình sẽ giới hạn chỉ xử lý nhiệt độ nhà kính.

• Tất cả thông tin thay đổi đều được ghi nhận và lưu vào cơ sở dữ liệu, được hiển thị bằng đồ thị.
Với các mục tiêu trên, mình sẽ chia kế hoạch ở trên thành những phần nhỏ để dễ làm.






Giai đoạn 1: Nhiệt độ và độ ẩm.
Giai đoạn 2: Ổn định độ pH.
Giai đoạn 3: Nồng độ dung dịch.
Giai đoạn 4: Lưu thông tin vào cơ sở dữ liệu.

Phần nhiệt độ và độ ẩm mình bỏ qua nha,

qua giai đoạn 2: ổn định độ pH.

B2: Mô tả nguyên lý hoạt động - Ổn định độ pH.





Dùng cảm biến pH để đọc giá trị pH hiện hành.








Bo mạch Arduino Mega 2560

Nếu pH < 5.0 thì ra lệnh bơm dd cân chỉnh pH = 7.0

Nếu pH > 7.0 thì ra lệnh bơm dd cân chỉnh pH = 4.0
B3: Chọn phần cứng. Trong phần cứng này mình sẽ chuyển sang bo mạch Arduino Mega 2560, ko dùng Arduino UNO nữa, vì ROM của UNO

chỉ chứa được 32kb lệnh thực thi.

pH Electrode Probe (Đầu đo pH với cổng kết nối BNC)
Phidgets 1130 pH/ORP adapter.
4 Channels 5V Relay Module for Arduino
SD Card Module Slot Socket Reader For Arduino
3.2" TFT LCD Shield






Dây nhảy đầu đực + đực, đực + cái.
Bộ nguồn DC 9V/1A Power Supply For Arduino.

Aquarium Peristaltic dosing pump (Máy bơm dung dịch cân chỉnh pH)
Ngoài ra, trên thị trường có sẵn bộ kit pH dùng cho Arduino (của hãng Atlas Scientific). Link: />_trksid=p2047675.c100005.m1851&_trkparms=aid=222003&algo=SIC.FIT&ao=1&asc=22466&meid=6652619768889726372&pid=100005&p
rg=9735&rk=1&rkt=6&sd=200779540715&rt=nc
Một chú ý khi chọn mua pH/ORP adapter là phải đọc tài liệu kỹ thuật công thức tính độ pH so với nhiệt độ như thế nào? Có support thư viện
dùng cho Arduino ko??
Ví dụ: Mình đang sử dụng Phidgets 1130 pH/ORP adapter thì cách tính độ pH ở 25 độ C như sau: pH = 0.0178 * Giá trị cảm biến đo được 1.889 (link tham khảo: />


×