ทดสอบ Soil NPK Sensor

จากบทความก่อนที่เราเขียนโปรแกรมรับค่าจาก Soil NPK Sensor ในเรื่อง การต่อใช้งาน Soil NPK sensor ด้วยบอร์ด LARB32 Pro ผ่านทางช่องเชื่อมต่อ RS485 ในบทความนี้จะทำการทดสอบเซ็นเซอร์ NPK โดยการเติมธาตุอาหารต่างๆลงไปในดินและวัดค่าความเปลี่ยนแปลงที่เกิดขึ้น ก่อนอื่นทำการแก้ไขโปรแกรมและติดตั้งจอ OLED บนบอร์ด LARB32 Pro เพื่อให้ง่ายต่อการอ่านค่าเมื่อเรายกออกไปทดลองด้านนอก

อุปกรณ์ที่ใช้ในการทดลองนี้

  1. บอร์ด LARB32 Pro
  2. เซ็นเซอร์วัดธาตุอาหารในดิน NPK
  3. กระถางใส่ดิน จำนวน 8 ใบ
  4. เครื่องชั่งน้ำหนัก
  5. น้ำสะอาด 100 ml. จำนวน 8 แก้ว
  6. ปุ๋ยสูตร 21-0-0 จำนวน 2 กรัม
  7. ปุ๋ยสูตร 46-0-0 จำนวน 2 กรัม
  8. ปุ๋ยสูตร 0-52-34 จำนวน 2 กรัม
  9. ปุ๋ยสูตร 0-0-60 จำนวน 2 กรัม
  10. ปุ๋ยสูตร 20-10-30 จำนวน 2 กรัม
  11. ปุ๋ยสูตร 30-20-10 จำนวน 2 กรัม
  12. เกลือ จำนวน 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 ได้มากกว่า แต่อย่างไรก็ตามเซ็นเซอร์นี้ตอบสนองต่อความเค็มของดินถ้าทดสอบในพื้นที่ดินเค็มอาจเข้าใจผิดว่าดินมีธาตุอาหารมากได้

Facebook Comments