การต่อใช้งาน Soil NPK sensor ด้วยบอร์ด LARB32 Pro ผ่านทางช่องเชื่อมต่อ RS485
เซ็นเซอร์วัดธาตุอาหารในดินรุ่นนี้สามารถวัดค่าสารอาหาร ไนโตรเจน ฟอสฟอรัส และโพแทสเซี่ยมให้ค่าผลลัพธ์ออกมาเป็นหน่วย mg/kg รองรับแรงดันไฟฟ้าตั้งแต่ 5-30 โวลต์ สื่อสารผ่าน RS485 สามารถเชื่อมต่อเข้ากับบอร์ด LARB32 Pro ได้โดยตรง หรือใช้บอร์ด LARB32 โดยการต่อสาย A และ B ส่วนไฟเลี้ยง 5 โวลต์สามารถต่อจากภายนอกได้
อุปกรณ์ที่ใช้ในการทดลองนี้
- บอร์ด LARB32 หรือ LARB32 Pro
- เซ็นเซอร์วัดธาตุอาหารในดิน NPK
- กระถางใส่ดินตัวอย่าง
สำหรับบอร์ด 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) ขึ้นอีก หรือเช็คจุดต่อสายไฟว่าหลวมหรือไม่