Monitoring nilai Sensor NPK THCPH-S dengan ESP32 ( Protocol Modbus )
1. Cara kerja Sensor NPK THCPH-S
Sensor NPK THCPH-S adalah alat yang digunakan untuk mengukur kadar unsur hara utama tanah, yaitu Nitrogen (N), Fosfor (P), dan Kalium (K), serta pH tanah. Sensor ini sangat berguna untuk memonitor kualitas tanah, khususnya dalam bidang pertanian, sehingga petani dapat mengoptimalkan penggunaan pupuk dan mengatur kondisi tanah untuk tanaman.
Berikut adalah cara kerja sensor NPK THCPH-S:
Sensor NPK:
- Sensor NPK pada perangkat ini bekerja dengan mendeteksi konsentrasi unsur-unsur hara Nitrogen (N), Fosfor (P), dan Kalium (K) di dalam tanah.
- Biasanya sensor ini menggunakan metode elektroda atau teknologi berbasis resistansi untuk mengukur kadar masing-masing unsur hara.
- Sensor ini dapat mengukur keberadaan ion-ion yang berhubungan dengan unsur hara di dalam tanah dan memberikan pembacaan yang menggambarkan tingkat keberadaannya.
Sensor pH:
- Sensor pH berfungsi untuk mengukur tingkat keasaman atau kebasaan tanah. pH tanah sangat penting karena mempengaruhi ketersediaan unsur hara untuk tanaman.
- Sensor pH bekerja dengan mendeteksi konsentrasi ion hidrogen (H⁺) dalam tanah, yang menentukan tingkat pH tanah.
Proses Pengukuran:
- Sensor ini dipasang di dalam tanah, dan alat ini akan mengukur secara langsung kandungan unsur NPK dan pH tanah.
- Hasil pengukuran akan diterjemahkan ke dalam sinyal yang dapat dibaca oleh perangkat monitoring, baik itu dalam bentuk display digital atau melalui aplikasi yang terhubung.
- Pembacaan data ini memungkinkan petani untuk mengambil keputusan yang lebih baik terkait penggunaan pupuk dan pengelolaan tanah.
Koneksi dan Pembacaan:
- Sensor ini biasanya dilengkapi dengan konektivitas ke perangkat lain seperti smartphone atau komputer untuk pengolahan data lebih lanjut. Ada juga sensor yang sudah dilengkapi dengan fitur pengiriman data secara langsung ke platform berbasis cloud untuk pemantauan jarak jauh.
Dengan cara kerja ini, Sensor NPK THCPH-S membantu dalam menjaga keseimbangan unsur hara dalam tanah dan memastikan kondisi tanah yang optimal untuk pertumbuhan tanaman.
Modbus adalah protokol komunikasi yang sering digunakan dalam sistem otomasi industri untuk pertukaran data antara perangkat-perangkat yang berbeda. Ada dua varian Modbus yang umum digunakan: Modbus RTU dan Modbus TCP. Modbus RTU adalah varian yang menggunakan komunikasi serial (biasanya RS-485), sementara Modbus TCP menggunakan jaringan Ethernet atau Wi-Fi untuk komunikasi data.
Dengan menggunakan ESP32, mikrokontroler yang memiliki kemampuan Wi-Fi dan Bluetooth, sensor NPK yang menggunakan Modbus dapat dihubungkan dan digunakan untuk pemantauan tanah secara real-time.
2. Sensor NPK THCPH-S dan Modbus Protocol
Modbus adalah protokol komunikasi yang sering digunakan dalam sistem otomasi industri untuk pertukaran data antara perangkat-perangkat yang berbeda. Pada Sensor NPK THCPH-S Modbus yang umum menggunakan adalah Modbus RTU. Modbus RTU adalah varian yang menggunakan komunikasi serial (biasanya RS-485),
Dengan menggunakan ESP32, mikrokontroler yang memiliki kemampuan Wi-Fi dan Bluetooth, sensor NPK yang menggunakan Modbus dapat dihubungkan dan digunakan untuk pemantauan tanah secara real-time.
Modbus RTU (RS-485) dengan ESP32:
Sensor NPK THCPH-S menggunakan Modbus RTU, Anda akan membutuhkan Modbus RS-485 to TTL Converter (seperti modul MAX485) untuk menghubungkan ESP32 ke sensor.
Langkah-langkah Koneksi:
- RS-485 to TTL Converter: Hubungkan pin A dan B dari converter ke terminal A dan B pada sensor NPK.
- TX dan RX: Hubungkan pin TX dan RX dari converter ke pin GPIO pada ESP32 (misalnya, pin GPIO 22 untuk TX dan GPIO 23 untuk RX).
- GND: Pastikan GND dari ESP32 terhubung dengan GND sensor.
3. Programming ESP32
//============Driver For Sensor NPK THCPH-S=================//
#include <ModbusRtu.h>
#include <SoftwareSerial.h>
#include <WiFi.h>
//#include <HTTPClient.h>
const int RXPin = 23;
const int TXPin = 22;
SoftwareSerial SerModMaster(RXPin, TXPin);
Modbus master(0, SerModMaster, 1);
modbus_t telegram;
//============Driver For Sensor Water Flow Meter=================//
int sensorInterrupt = 0; // interrupt 0
int sensorPin = 4; //Digital Pin 2
int solenoidValve = 9; // Digital pin 5
unsigned int SetPoint = 400; //400 milileter
float calibrationFactor = 90; //You can change according to your datasheet
volatile byte pulseCount =0;
float flowRate = 0.0;
unsigned int flowMilliLitres =0;
unsigned long totalMilliLitres = 0;
unsigned long oldTime = 0;
//================Variabel============//
uint16_t dataModbus[16];
uint8_t state_work;
unsigned long waitTimer;
String temperature = "";
const int relayPin = 2;
//const uint16_t setpoint = 308;
int setpoint = 318;
//==============Konfigurasi Wifi============//
const char* ssid = "Masukan SSID";
const char* password = "Masukan Password";
//URL Server==================================//
String serverUrl = "http://192.168.8.175/datalogger/api/create.php";
unsigned long previousMillis = 0 ;
const long interval = 10000;
const long interval2 = 15000;
void connectwifi() {
WiFi.begin(ssid, password);
Serial.print("Menghubungkan ke Wifi");
while (WiFi.status() != WL_CONNECTED) {
delay (500);
Serial.println(".");
}
Serial.println(" Terhubung");
}
// Mengirim GET request
void sendgetrequest() {
HTTPClient http;
String url = String(serverUrl) +
"?temperature=" + String(dataModbus[0]) +
"&moisture=" + String(dataModbus[1]) +
"&conductivity=" + String(dataModbus[2]) +
"&ph=" + String(dataModbus[3]) +
"&nitrogen=" + String(dataModbus[4]) +
"&potassium=" + String(dataModbus[5]) +
"&moisture=" + String(dataModbus[6]);
Serial.print("URL: " + url);
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
Serial.println("Response:");
Serial.println(http.getString());
} else {
Serial.println("");
Serial.println("Error on HTTP request");
}
http.end();
}
void setup() {
//=================BaudRate/Variable Times===========//
Serial.begin(115200);
SerModMaster.begin(9600);
master.start();
master.setTimeOut( 15000 );
waitTimer = millis() + 1000;
state_work = 0;
}
//===============Relay Pump=======================//
void pump () {
pinMode(relayPin, OUTPUT);
{
int convertedValue1;
if (dataModbus[0] > 32767) {
convertedValue1 = dataModbus[0] - 65536;
} else {
convertedValue1 = dataModbus[0];
//Debugging
Serial.print("Nilai Temperature : ");
Serial.print(dataModbus[0]);
Serial.print("Nilai int:");
Serial.println(convertedValue1);
//Logika Pump Control
if (convertedValue1 > setpoint) {
digitalWrite(relayPin, HIGH);
Serial.println("Pump ON");
} else {
digitalWrite(relayPin, LOW);
Serial.println("Pump OFF");
}
}
}
}
void sensor_npk() {
switch( state_work ) {
case 0:
if (millis() > waitTimer)
state_work++;
break;
case 1:
//==========Modbus==========//
telegram.u8id = 1;
telegram.u8fct = 4;
telegram.u16RegAdd = 0;
telegram.u16CoilsNo = 2;
telegram.au16reg = dataModbus;
master.query( telegram );
state_work++;
//unsigned char * temp = &dataModbus[0];
break;
case 2:
// Progess Edit 11/3/2024, Penambahan Belakang koma, pada nilai (* 0.1)
master.poll();
delay(1000);
if(master.getState() == COM_IDLE) {
state_work = 0 ;
waitTimer = millis() + 1000;
}
break;
}
}
void loop () {
sensor_npk();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
connectwifi();
sendgetrequest();
pump ();
}
{
//Water Flow//
if((millis() - oldTime) > 1000) // Only process counters once per second
{
detachInterrupt(sensorInterrupt);
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
oldTime = millis();
flowMilliLitres = (flowRate / 60) * 1000;
totalMilliLitres += flowMilliLitres;
unsigned int frac;
Serial.print("Flow rate: ");
Serial.print(flowMilliLitres, DEC);
//Serial.print("mL/Second");
//Serial.print("\t");
//Serial.print("Output Liquid Quantity: ");
//Serial.print(totalMilliLitres,DEC);
//Serial.print("mL");
//Serial.print("\t");
if (totalMilliLitres > 40)
{
SetSolinoidValve();
}
}
pulseCount = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
}
void pulseCounter()
{
pulseCount++;
}
void SetSolinoidValve()
{
digitalWrite(solenoidValve, LOW);
}
4. Konfigurasi
1. Setelah terprogram, aktifkan serial monitor dan sesuaikan baudratenya.
2. Enjoy !!!
Komentar
Posting Komentar