โทรศัพท์ สายด่วน: +8618073152920
โทรศัพท์
ไทย

การสนับสนุนทางเทคนิค

รหัส Arduino เซ็นเซอร์ความชื้นในดิน

เวลา:2024-06-29 21:07:28 ยอดชม:5471

เซ็นเซอร์ความชื้นในดิน 8 in 1Rs485 สำหรับ Arduino

ในคู่มือนี้ เราจะสำรวจวิธีเชื่อมต่อเซ็นเซอร์ความชื้นและอุณหภูมิในดิน 8 in1 กับ Arduino โดยใช้โปรโตคอล RS485 การตั้งค่านี้จะช่วยให้เราสามารถตรวจสอบปริมาณความชื้นและอุณหภูมิของดิน ซึ่งเป็นพารามิเตอร์ที่สำคัญสำหรับการเกษตรและการทำสวน

เซ็นเซอร์ความชื้นในดินจะวัดปริมาณน้ำตามปริมาตรในดิน ด้วยการทำความเข้าใจระดับความชื้น เกษตรกรและชาวสวนจึงสามารถตัดสินใจโดยใช้ข้อมูลรอบด้านเกี่ยวกับการชลประทาน เพื่อให้มั่นใจว่าพืชจะเจริญเติบโตได้อย่างเหมาะสม อุณหภูมิของดินยังมีบทบาทสำคัญในสุขภาพของพืชอีกด้วย ส่งผลต่อการเจริญเติบโตของรากและการดูดซึมสารอาหาร

8-in-1 Integration Soil Sensor.jpg

สำหรับโปรเจ็กต์นี้ เราจะใช้เซ็นเซอร์ความชื้นและอุณหภูมิในดิน Niubol8 in1 ซึ่งออกแบบมาโดยเฉพาะสำหรับการวัดภาคพื้นดิน

ดังนั้นเราจึงใช้เซนเซอร์วัดดินเกรดอุตสาหกรรมสำหรับโครงการนี้ หากต้องการเชื่อมต่อเซ็นเซอร์กับ Arduino เราจะใช้โปรโตคอลการสื่อสาร RS485 ข้อมูลจากเซ็นเซอร์ความชื้นและอุณหภูมิในดินจะถูกนำเสนอบนหน้าจอ OLED ที่เชื่อมต่อกับ Arduino

นี่คือสายไฟ 4 เส้นสำหรับเซ็นเซอร์:

ลวดสีน้ำตาล: VCC (5V-24V)

สายสีดำ: GND

ลวดสีเหลือง:RS485-A

สายสีน้ำเงิน:RS485-B

ข้อกำหนด:

ฮาร์ดแวร์

DFRduino UNO R3 (หรือคล้ายกัน) x 1

RS485 ชิลด์สำหรับ Arduino x1

RS485 เซ็นเซอร์ดิน (อุณหภูมิ & ความชื้น &EC& ความเค็ม &Ph& NPK) x 1

ซอฟต์แวร์:

อาร์ดูโน่ IDE

นี่คือแผนที่การเชื่อมต่อระหว่าง MAX485 และเซ็นเซอร์อุณหภูมิความชื้นในดิน

VCC -> 5V (เซ็นเซอร์ดิน)

GND  -> GND (เซ็นเซอร์ดิน)

A (MAX485) -> ดินเซนเซอร์ A Pin (สีเหลือง)

B (MAX485) -> ดินเซ็นเซอร์ B Pin (สีน้ำเงิน)

การเชื่อมต่อเซ็นเซอร์อุณหภูมิความชื้นในดินกับ Arduino คุณสามารถใช้เขียงหั่นขนมในการประกอบและสายจัมเปอร์สำหรับเชื่อมต่อเซ็นเซอร์และโมดูล RS485 กับ Arduino

ซอร์สโค้ด/โปรแกรมสำหรับการอ่านความชื้นและอุณหภูมิดิน 8 in1

โปรแกรมซอร์สโค้ดสำหรับการอ่านความชื้นในดิน sensor.txt


#รวม

// กำหนดพินสำหรับการสื่อสาร RS485

#กำหนดRO2

#กำหนดDI3

#กำหนด RE8

#กำหนด DE7

#กำหนด RESPONSE_FRAME_SIZE 21

เซ็นเซอร์ถ่าน DataTextBuffer[200];

โครงสร้าง SoilSensorData

{

บูล isSensorTimeout{false};

บูลถูกต้อง{false};

อุณหภูมิลอย{-1.0};

ความชื้นลอย{-1.0};

ค่าการนำไฟฟ้า int ที่ไม่ได้ลงนาม{-1};

ลอยph{-1.0};

ไนโตรเจน int ที่ไม่ได้ลงนาม{-1};

ฟอสฟอรัส int ที่ไม่ได้ลงนาม{-1};

โพแทสเซียม int ที่ไม่ได้ลงนาม{-1};

ความเค็ม int ที่ไม่ได้ลงนาม{-1};

};

คลาส SoilSensor

{

สาธารณะ:

เซ็นเซอร์ดิน()

    {

modbus= ซอฟต์แวร์ซีเรียลใหม่ (RO, DI);

    }

เริ่มต้นเป็นโมฆะ ()

    {

อนุกรมเริ่มต้น(9600);// เริ่มต้นการสื่อสารแบบอนุกรมสำหรับการดีบัก

modbus-> เริ่มต้น (9600);    // เริ่มต้นการสื่อสารแบบอนุกรมของซอฟต์แวร์ที่อัตรารับส่งข้อมูล 9600

pinMode(RE, เอาท์พุต); // ตั้งค่า RE pin เป็นเอาต์พุต

pinMode(DE, เอาท์พุต); // ตั้งค่า DE pi

    }

เป็นโมฆะ sendDataRequest()

    {

digitalWrite (DE, สูง);

digitalWrite (RE, สูง);

ล่าช้า(10);

// ส่งกรอบคำขอไปยังเซ็นเซอร์ดิน

modbus-> เขียน (soilSensorRequest, ขนาดของ (soilSensorRequest));

    }

    

อ่านข้อมูล SoilSensor()

    {

ข้อมูลเซ็นเซอร์ดิน ข้อมูลเซ็นเซอร์ดิน;

// สิ้นสุดโหมดการส่งข้อมูลและตั้งค่าเป็นโหมดรับสำหรับ RS485

digitalWrite (DE, ต่ำ);

digitalWrite (RE, ต่ำ);

ล่าช้า(10);

//รอการตอบสนองจากเซ็นเซอร์หรือการหมดเวลาหลังจากผ่านไป 1 วินาที

startTime ยาวที่ไม่ได้ลงนาม = millis();

ในขณะที่ (modbus-> ว่าง () < RESPONSE_FRAME_SIZE && มิลลิวินาที () - เวลาเริ่มต้น < 1,000)

      {

ล่าช้า(1);

      }

ถ้า (modbus->available() >= RESPONSE_FRAME_SIZE) // หากได้รับคำตอบที่ถูกต้อง

      {

// อ่านการตอบสนองจากเซ็นเซอร์

ดัชนีไบต์ = 0;

ในขณะที่ (modbus-> ว่าง () && ดัชนี < RESPONSE_FRAME_SIZE)

        {

SoilSensorResponse[index]=modbus-> อ่าน ();

ดัชนี++;

        }

SoilSensorData = ข้อมูลการคำนวณ ();

      }

อย่างอื่น

      {

SoilSensorData.isSensorTimeout = จริง;

      }

กลับดินเซ็นเซอร์ข้อมูล;

    } 

~เซ็นเซอร์ดิน()

    {

ถ้า (modbus!= nullptr) ลบ modbus;

ลบ [] การตอบสนองของเซ็นเซอร์ดิน;

    }

ส่วนตัว:

const ไบต์คำขอ SoilSensorRequest[8]={0x01, 0x03, 0x00, 0x00, 0x00, 0x08, 0x44, 0x0C};

ซอฟต์แวร์อนุกรม*modbus= nullptr;

ไบต์ SoilSensorResponse[RESPONSE_FRAME_SIZE];

int ConvertBytesToDecimal (ออฟเซ็ต int ที่ไม่ได้ลงนาม)

    {

กลับดินเซนเซอร์ตอบสนอง[offset]* 256 + ดินเซนเซอร์ตอบสนอง[offset + 1];

    }

SoilSensorData computeData() const

    {

ข้อมูลเซ็นเซอร์ดิน ข้อมูลเซ็นเซอร์ดิน;


ถ้า (soilSensorResponse[0]!= 1 || เซ็นเซอร์ดิน[1]!= 3 || เซ็นเซอร์ดิน[2]!= 16)

      {

SoilSensorData.isValid = เท็จ;

กลับดินเซ็นเซอร์ข้อมูล;

      }

SoilSensorData.isValid = จริง;

SoilSensorData.temperature = แปลง BytesToDecimal (3) / 10.0; // องศาเซลเซียส

SoilSensorData.humidity = แปลง BytesToDecimal (5) / 10.0; // เปอร์เซ็นต์

SoilSensorData.conductivity = แปลง BytesToDecimal (7);// ไมโครซีเมนส์ต่อเซนติเมตร

ข้อมูลเซ็นเซอร์ดินph= แปลงไบต์เป็นทศนิยม(9) / 100.0;

SoilSensorData.nitrogen = แปลง BytesToDecimal (11); // มิลลิกรัมต่อกิโลกรัม

SoilSensorData.ฟอสฟอรัส = แปลง BytesToDecimal (13); // มิลลิกรัมต่อกิโลกรัม

SoilSensorData.potassium = แปลง BytesToDecimal (15); // มิลลิกรัมต่อกิโลกรัม

SoilSensorData.salinity = แปลง BytesToDecimal (17); // มิลลิกรัมต่อกิโลกรัม

กลับดินเซ็นเซอร์ข้อมูล;

    }

 };


เซ็นเซอร์ดิน เซ็นเซอร์ดิน;

เป็นโมฆะ writeSensorDataToString (SoilSensorData & sensorData)

{

ถ้า (sensorData.isSensorTimeout)

  {

sprintf(sensorDataTextBuffer, "ข้อมูลไม่สมบูรณ์หรือเซ็นเซอร์หมดเวลา");

  }

อย่างอื่น

  {

ถ้า (sensorData.isValid)

    {

ถ่าน * tempStr = malloc (6 * ขนาดของ (ถ่าน));

ถ่าน * humidStr = malloc (6 * ขนาดของ (ถ่าน));

ถ่าน * phStr = malloc (6 * ขนาดของ (ถ่าน));

dtostrf(sensorData.temperature, 4, 1, tempStr);

dtostrf(sensorData.humidity, 4, 1, ความชื้นStr);

dtostrf(sensorData.ph, 4, 2, phStr);

ค่าการนำไฟฟ้าอัตโนมัติ = sensorData.conductivity;

อัตโนมัติ n = เซ็นเซอร์ Data.ไนโตรเจน;

อัตโนมัติ p = sensorData.ฟอสฟอรัส;

อัตโนมัติ k = sensorData.โพแทสเซียม;

ความเค็มอัตโนมัติ = sensorData.ความเค็ม;

sprintf(sensorDataTextBuffer, "อุณหภูมิ: %s; ความชื้น: %s;ค่าการนำไฟฟ้า: %u;PH: %s; ไม่มี: %u; ป: %u; เค: %u; ความเค็ม: %u", tempStr, humidStr, ความนำไฟฟ้า, phStr, n, p, k, ความเค็ม);

ถ้า (tempStr!= NULL) ฟรี (tempStr);

ถ้า (humidityStr!= NULL) ฟรี (humidityStr);

ถ้า (phStr!= NULL) ฟรี (phStr);

    }

อย่างอื่น

    {

sprintf(sensorDataTextBuffer, "ข้อมูลที่อ่านจากเซ็นเซอร์ไม่ถูกต้อง");

    }

  }

}


การตั้งค่าเป็นโมฆะ ()

{

SoilSensor.เริ่มต้น ();

}


เป็นโมฆะวน()

{

SoilSensor.sendDataRequest();

SoilSensorData ข้อมูลเซ็นเซอร์ = SoilSensor.read();

writeSensorDataToString(sensorData);

Serial.println(sensorDataTextBuffer);

ล่าช้า (2000); // รอสักครู่ก่อนที่จะวนซ้ำครั้งต่อไป

}


ขอบคุณ Phil Ogun สำหรับรหัส!

เซ็นเซอร์ดิน 8-in-1 เป็นเซ็นเซอร์ที่รวมพารามิเตอร์หลายตัว เช่น อุณหภูมิ ความชื้น การนำไฟฟ้า NPK ความเค็ม และPHด้วยเซ็นเซอร์ดังกล่าว ผู้ใช้สามารถเข้าถึงข้อมูลสำคัญหลายๆ ข้อมูลของดินได้อย่างง่ายดาย ช่วยให้พวกเขาเข้าใจสภาพของดินได้ดีขึ้น และทำการปรับเปลี่ยนและตัดสินใจตามนั้น

ด้วยการวัดค่าคงที่ไดอิเล็กตริกของดิน จึงสามารถสะท้อนปริมาณความชื้นที่แท้จริงของดินต่างๆ ได้โดยตรงและเสถียร เหมาะสำหรับการตรวจสอบความชื้นในดิน, การทดลองทางวิทยาศาสตร์, การชลประทานแบบประหยัดน้ำ, เรือนกระจก, ดอกไม้และผัก, ทุ่งหญ้าหญ้า, การทดสอบดินอย่างรวดเร็ว, การเพาะปลูกพืช, การบำบัดน้ำเสีย, เกษตรกรรมที่ดีและโอกาสอื่น ๆแหล่งจ่ายไฟอินพุตของเซ็นเซอร์, หัววัดการตรวจจับ, เอาต์พุตสัญญาณสามส่วนแยกได้อย่างสมบูรณ์, ปลอดภัยและเชื่อถือได้, รูปลักษณ์สวยงาม, ติดตั้งง่าย, หัววัดทำจากสแตนเลส, ทนต่อการกัดกร่อน, ประสิทธิภาพการทำงานที่มั่นคง

เอกสารข้อมูลเซ็นเซอร์ดิน:

1. เอกสารข้อมูลเซ็นเซอร์ความชื้นอุณหภูมิดินNBL-S-THR

NBL-S-THR-Soil-temperature-and-moisture-sensors-Instruction-Manual-V4.0.pdf

2. เอกสารข้อมูลเซ็นเซอร์ECความชื้นอุณหภูมิดินEC

NBL-S-TMC-Soil-temperature-and-moisture-conductivity-sensor.pdf

3.  เอกสารข้อมูลเซ็นเซอร์ความชื้นอุณหภูมิดินNBL-S-TM

NBL-S-TM-Soil-temperature-and-moisture-sensor-Instruction-Manual-4.0.pdf

4.NBL-S-TMCSเซ็นเซอร์แบบรวมอุณหภูมิ ความชื้น ความนำไฟฟ้า และความเค็มของดิน

NBL-S-TMCS-Soil-Temperature-Humidity-Conductivity-and-Salinity-Sensor.pdf

5.NBL-S-TMCS-7อุณหภูมิดิน, ความชื้น, NPK, ความนำไฟฟ้า และเซ็นเซอร์รวมpH

7-in-1-Soil-Composite-Sensor-คู่มือ pdf

4.NBL-S-TMCS-8อุณหภูมิดิน, ความชื้น, NPK,pH, เซ็นเซอร์รวมความนำไฟฟ้าและความเค็ม

8-in-1-Soil-Composite-Sensor-คู่มือ pdf

คำแนะนำที่เกี่ยวข้อง

แคตตาล็อกเซ็นเซอร์และสถานีตรวจอากาศ

แคตตาล็อกเซ็นเซอร์เกษตรและสถานีตรวจอากาศ - NiuBoL.pdf

แคตตาล็อกสถานีตรวจอากาศ - NiuBoL.pdf

แคตตาล็อกเซ็นเซอร์เกษตร - NiuBoL.pdf

แคตตาล็อกเซ็นเซอร์คุณภาพน้ำ - NiuBoL.pdf

สินค้าที่เกี่ยวข้อง

ส่งความต้องการของคุณมาให้เรา เราจะพูดคุยเกี่ยวกับโครงการของคุณและหาโซลูชันที่เหมาะสม

ชื่อ*

โทรศัพท์*

E-mail*

บริษัท*

ประเทศ*

ข้อความ

Online
ติดต่อ
E-mail
ด้านบน
Xรหัส Arduino เซ็นเซอร์ความชื้นในดิน-การสนับสนุนทางเทคนิค-สถานีตรวจอากาศอัตโนมัติ เซ็นเซอร์อุตสาหกรรม และโซลูชัน IoT สำหรับเกษตร น้ำ และสิ่งแวดล้อม | NiuBoL

สแกน QR Code ด้วย WhatsApp

หมายเลข WhatsApp:+8615367865107

(คลิกเพื่อคัดลอกและเพิ่มใน WhatsApp)

เปิด WhatsApp

คัดลอกหมายเลข WhatsApp แล้ว เปิด WhatsApp เพื่อติดต่อเรา!
WhatsApp