การต่อใช้งาน Soil NPK sensor ด้วยบอร์ด LARB32 Pro ผ่านทางช่องเชื่อมต่อ RS485

เซ็นเซอร์วัดธาตุอาหารในดินรุ่นนี้สามารถวัดค่าสารอาหาร ไนโตรเจน ฟอสฟอรัส และโพแทสเซี่ยมให้ค่าผลลัพธ์ออกมาเป็นหน่วย mg/kg รองรับแรงดันไฟฟ้าตั้งแต่ 5-30 โวลต์ สื่อสารผ่าน RS485 สามารถเชื่อมต่อเข้ากับบอร์ด LARB32 Pro ได้โดยตรง หรือใช้บอร์ด LARB32 โดยการต่อสาย A และ B ส่วนไฟเลี้ยง 5 โวลต์สามารถต่อจากภายนอกได้

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

  1. บอร์ด LARB32 หรือ LARB32 Pro
  2. เซ็นเซอร์วัดธาตุอาหารในดิน NPK
  3. กระถางใส่ดินตัวอย่าง

สำหรับบอร์ด LARB32 Pro ในส่วนขาเชื่อมต่อ RS485 จะมีไฟเลี้ยง 5 โวลต์มาให้ สามารถต่อสายเซ็นเซอร์เข้าจุดนี้ได้เลยโดยเรียงสายตามนี้

  • A : เหลือง
  • B : น้ำเงิน
  • 5V : น้ำตาล
  • GND : ดำ

นำเซ็นเซอร์เสียบไปที่ดินที่ต้องการวัดค่าปุ๋ย แล้วอัพโหลดโค้ดโปรแกรมอ่านค่าใส่บอร์ด โดยกำหนดขา RO, DI และ E ตามรุ่นบอร์ดที่ใช้

LARB32

  • RO : 25
  • DI : 33
  • E : 26

LARB32 Pro 

  • RO :35
  • DI : 32
  • E : 33
#include <SoftwareSerial.h>

#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);
}

void loop() {
  Serial.print("N:");
  Serial.println(nitrogen());
  delay(200);
  Serial.print("P:");
  Serial.println(phosphorous());
  delay(200);
  Serial.print("K:");
  Serial.println(potassium());
  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];
}

จะได้ผลลัพธ์ตามภาพ ถ้าหากอ่านข้อมูลได้ 65535 อาจเกิดจากหลายอย่าง ให้ลองเพิ่ม delay(200) ขึ้นอีก หรือเช็คจุดต่อสายไฟว่าหลวมหรือไม่

Facebook Comments