Pengenalan Sensor
Sensor URM14 RS48 adalah Sensor Jarak dengan High Frekuensi 200khz dengan cover industrial Grade IP65, Sehingga sensor ini sangat cocok di gunakan di outdoor, karena tahan debu dan air ( water proof). Sensor ini menggunakan interface RS485 dengan protokol Modbus RTU. Jadi dengan konsep ini kita bisa menggunakan banyak sensor pada satu controller. Jadi sangat cocok di gunakan di outdoor.
Sensor ini bekerja di range 100mm-1500mm dengan akurasi 1mm dan error 1%. Sensor ini juga memiliki sensor suhu di dalam nya.
Ada pun spesifikasi lengkap dari sensor ini adalah sebagai berikut:
- Voltage input 7-15VDC
- Arus max 350mA
- Range Jarak 100mm – 1500mm
- Resolusi pengukuran 0.1mm
- Akurasi pengukran 1mm
- Resolusi Pengukuran Suhu 0.1 C
- Tempratur Error 1C
- Frekuensi Pengukuran 30khz
- bekerja di tempratur -20c – 80c
- Sensor Acoustic Frequency: 200KHz±4%
- Directional Angle: 12°±2°(-6dB)
- Protection Grade: IP65
- Communication interface: RS485
Tampilan Sensor
Dengan PIN out sebagai Berikut
- Orange—–VCC
- Black——GND
- Blue——RS485-B
- White—–RS485-A
Register List
Membaca Sensor URM14-RS485
Untuk membaca sensor ini kita perlu menambah library pada Arduino IDE kita, download dan tambah library di bawah ini,
Download Modbus Library Arduino
Setelah di tambah, maka Wiring seperti pada gambar di bawah ini
Perhatikan warna kabel agak tidak salah dalam pengkabelan nya,
- Warna Coklat URM14 adalah 12V
- Warna Hitam URM adalah GND
- Warna Putih URM adalah RS485 + ( A )
- Warna Biru URM adalah RS485 – (B)
Program Baca Sensor
Default Setting parameter Sensor URM14 bisa di lihat pada table register di atas. Agar Sensor dapat dibaca dengan baik, maka default setting pada register 0x08 harus di rubah menjadi auto detection. Sehingga setiap perubahan jarak pada sensor dapat di terima oleh ESP32 nanti nya. Setting nya adalah sebagai berikut,
uint8_t result=0; //result = node.writeSingleRegister(0x08, 4); //default setting 0100 -> passive detection result = node.writeSingleRegister(0x08, 0); // write address 0x08 with data 0000 -> autodetection Serial.print("write config: "); Serial.println(result);
Parameter ini lah yang paling penting untuk di setting, jika ingin merubah parameter lain, seperti baudrate, maka gunakan cara yang sama.
Program keseluruhan
#define RXD1 32 #define TXD1 25 #define EN_RS485 33 #define LED 12 #include <ModbusMaster.h> ModbusMaster node; #define SLAVE_ADDR ((uint16_t)0x0C) #define TEMP_CPT_SEL_BIT ((uint16_t)0x01) #define TEMP_CPT_ENABLE_BIT ((uint16_t)0x01 << 1) #define MEASURE_MODE_BIT ((uint16_t)0x01 << 2) #define MEASURE_TRIG_BIT ((uint16_t)0x01 << 3) uint16_t trigger = 0; float jarak = 0.0; float suhu = 0.0; void preTransmission() { digitalWrite(EN_RS485, 1); digitalWrite(LED, 1); } void postTransmission() { digitalWrite(EN_RS485, 0); digitalWrite(LED, 0); } void setup() { // put your setup code here, to run once: pinMode(EN_RS485, OUTPUT); pinMode(LED, OUTPUT); Serial.begin(115200); Serial1.begin(115200, SERIAL_8N1, RXD1, TXD1); node.preTransmission(preTransmission); node.postTransmission(postTransmission); node.begin(SLAVE_ADDR, Serial1); delay(1000); trigger |= MEASURE_MODE_BIT;//Set bit2 , Set to trigger mode trigger &= ~(uint16_t)TEMP_CPT_SEL_BIT;//Select internal temperature compensation trigger &= ~(uint16_t)TEMP_CPT_ENABLE_BIT;//enable temperature compensation delay(1000); conf_autoDistance(); } void loop() { // put your main code here, to run repeatedly: baca_urm14(); delay(2000); } void baca_urm14() { Serial.println("baca urm14"); uint8_t result; uint16_t data[6]; trigger |= MEASURE_TRIG_BIT;//Set trig bit result = node.writeSingleRegister(3, trigger); Serial.print("result_t: "); Serial.println(result); delay(300); result = node.readHoldingRegisters(0, 9); Serial.print("result_r: "); Serial.println(result); if (result == node.ku8MBSuccess) { jarak = node.getResponseBuffer(5) / 10; suhu = node.getResponseBuffer(6) / 10; Serial.print("jarak: "); Serial.print(jarak); Serial.println(" mm"); Serial.print("suhu: "); Serial.print(suhu); Serial.println(" C"); Serial.println("-----------------------"); }else{ Serial.println("modbus fail"); } } void conf_autoDistance(){ uint8_t result = node.writeSingleRegister(0x08, 0); // write address 0x08 with data 0000 / Serial.print("write config: "); Serial.println(result); }
Video Pengujian nya bisa dilihat pada video di bawah ini
Tertarik ingin order atau tanya-tanya modul nya? whatspp kita dengan klik tombol mudah di bawah ini
Catatan Penting
Jika program di atas tidak bekerja dengan baik, maka coba rubah nilai baudrate secara bergantian, sampai terbaca jarak dari sensor,
- 2400
- 4800
- 9600
- 14400
- 19200
- 38400
- 57600
- 115200
Saya biasa nemu di baudrate 19200 atau 115200
Semoga bermanfaat, Thanks