ทดสอบ Soil NPK Sensor
จากบทความก่อนที่เราเขียนโปรแกรมรับค่าจาก Soil NPK Sensor ในเรื่อง การต่อใช้งาน Soil NPK sensor ด้วยบอร์ด LARB32 Pro ผ่านทางช่องเชื่อมต่อ RS485 ในบทความนี้จะทำการทดสอบเซ็นเซอร์ NPK โดยการเติมธาตุอาหารต่างๆลงไปในดินและวัดค่าความเปลี่ยนแปลงที่เกิดขึ้น ก่อนอื่นทำการแก้ไขโปรแกรมและติดตั้งจอ OLED บนบอร์ด LARB32 Pro เพื่อให้ง่ายต่อการอ่านค่าเมื่อเรายกออกไปทดลองด้านนอก
อุปกรณ์ที่ใช้ในการทดลองนี้
- บอร์ด LARB32 Pro
- เซ็นเซอร์วัดธาตุอาหารในดิน NPK
- กระถางใส่ดิน จำนวน 8 ใบ
- เครื่องชั่งน้ำหนัก
- น้ำสะอาด 100 ml. จำนวน 8 แก้ว
- ปุ๋ยสูตร 21-0-0 จำนวน 2 กรัม
- ปุ๋ยสูตร 46-0-0 จำนวน 2 กรัม
- ปุ๋ยสูตร 0-52-34 จำนวน 2 กรัม
- ปุ๋ยสูตร 0-0-60 จำนวน 2 กรัม
- ปุ๋ยสูตร 20-10-30 จำนวน 2 กรัม
- ปุ๋ยสูตร 30-20-10 จำนวน 2 กรัม
- เกลือ จำนวน 2 กรัม
ทำการแก้ไขโค้ดใหม่ให้แสดงผลทางจอ OLED
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SoftwareSerial.h>
// ตั้งค่า OLED display
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define RO 35
#define DI 32
#define E 33
const byte nitro[] = {0x01,0x03, 0x00, 0x1e, 0x00, 0x01, 0xe4, 0x0c};
const byte phos[] = {0x01,0x03, 0x00, 0x1f, 0x00, 0x01, 0xb5, 0xcc};
const byte pota[] = {0x01,0x03, 0x00, 0x20, 0x00, 0x01, 0x85, 0xc0};
SoftwareSerial mod(RO,DI);
void setup() {
Serial.begin(115200);
mod.begin(4800);
pinMode(E, OUTPUT);
// เริ่มการทำงานของหน้าจอ OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // ถ้าจอไม่ทำงาน ให้ค้างอยู่ตรงนี้
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
}
void loop() {
int N = nitrogen();
delay(200);
int P = phosphorous();
delay(200);
int K = potassium();
delay(200);
// แสดงค่า NPK บน Serial Monitor
Serial.print("N:"); Serial.println(N);
Serial.print("P:"); Serial.println(P);
Serial.print("K:"); Serial.println(K);
// แสดงผลบนหน้าจอ OLED
display.clearDisplay();
display.setCursor(0, 0);
display.print("N: "); display.println(N);
display.setCursor(0, 20);
display.print("P: "); display.println(P);
display.setCursor(0, 40);
display.print("K: "); display.println(K);
display.display(); // อัปเดตข้อมูลบนหน้าจอ
delay(2000);
}
int nitrogen(){
digitalWrite(E,HIGH);
delay(500);
byte values[11];
if(mod.write(nitro,sizeof(nitro))==8){
digitalWrite(E,LOW);
for(byte i=0;i<7;i++){
values[i] = mod.read();
}
}
return (values[3]*256)+values[4];
}
int phosphorous(){
digitalWrite(E,HIGH);
delay(500);
byte values[11];
if(mod.write(phos,sizeof(phos))==8){
digitalWrite(E,LOW);
for(byte i=0;i<7;i++){
values[i] = mod.read();
}
}
return (values[3]*256)+values[4];
}
int potassium(){
digitalWrite(E,HIGH);
delay(500);
byte values[11];
if(mod.write(pota,sizeof(pota))==8){
digitalWrite(E,LOW);
for(byte i=0;i<7;i++){
values[i] = mod.read();
}
}
return (values[3]*256)+values[4];
}
จากนั้นทำการวัดค่าดินก่อนเติมธาตุอาหารและทำการจดบันทึก เริ่มต้นทดสอบด้วยน้ำเปล่าจำนวน 100 ml. เพื่อทดสอบว่าความชื้นมีผลต่อการอ่านค่ามากแค่ไหน ผสมปุ๋ยจำนวน 2 กรัมต่อน้ำ 100 ml. ใส่ภาชนะแยกไว้ โดยเริ่มจาก 21-0-0, 46-0-0, 0-52-34, 0-0-60, 20-10-30 และ 30-10-20 เทปุ๋ยใส่กระถางและวัดค่าธาตุอาหาร สุดท้าย ผสมเกลือ 2 กรัมต่อน้ำ 100 ml. เทใส่กระถางเพื่อทดสอบว่าเซ็นเซอร์อาจอ่านค่าธาตุอาหารไม่ถูกต้องถ้าดินมีความเค็ม
บันทึกผลการทดลอง
ก่อนเติม | หลังเติม | |
น้ำเปล่า | 42 – 12 – 17 | 45 – 13 – 18 |
21-0-0 | 46 – 13 – 18 | 990 – 296 – 404 |
46-0-0 | 39 – 11 – 15 | 43 – 12 – 17 |
0-52-34 | 39 – 12 – 16 | 149 – 44 – 60 |
0-0-60 | 40 – 12 – 16 | 1286 – 384 – 521 |
20-10-30 | 42 – 12 – 17 | 205 – 60 – 82 |
30-20-10 | 39 – 12 – 16 | 120 – 35 – 48 |
เกลือ | 40 – 12 – 16 | 1247 – 349 – 464 |
สรุปผลการทดลอง
หลังจากที่ทำการทดลองและบันทึกผลสังเกตุว่าธาตุอาหารที่วัดได้มีปริมาณเพิ่มขึ้นไม่สัมพันธ์กับปุ๋ยที่ใส่ไป อีกทั้งปุ๋ยบางตัวที่เป็นแม่ปุ๋ยเพียงธาตุ N เดียวอย่างเช่น 21-0-0 กลับมีธาตุ P และ K อื่นเพิ่มขึ้นด้วยโดยเฉพาะอย่างยิ่ง 0-0-60 ไม่มีส่วนผสมของ N เลยกลับมีค่าเยอะกว่า K แต่มีข้อสังเกตุอย่างหนึ่ง ธาตุอาหาร NPK ที่อ่านค่าได้จะอยู่ในสัดส่วนเฉลี่ย 3.4 : 1 : 1.3 เสมอ ไม่ว่าจะเติมหรือไม่เติมสารอะไร เมื่อนำไปทดสอบเพิ่มเติมเปรียบเทียบระหว่างดินทรายธรรมดาและดินปลูกของจริงที่มีอินทรีย์วัตถุเซ็นเซอร์สามารถให้ความแตกต่างได้ระหว่างดินที่สมบูรณ์และไม่สมบูรณ์คือจะอ่านค่า NPK ได้มากกว่า แต่อย่างไรก็ตามเซ็นเซอร์นี้ตอบสนองต่อความเค็มของดินถ้าทดสอบในพื้นที่ดินเค็มอาจเข้าใจผิดว่าดินมีธาตุอาหารมากได้