Sensor jarak laser TOF10120 adalah sebuah modul sensor yang menggunakan teknologi Time of Flight (ToF) untuk mengukur jarak antara sensor dan objek di depannya dengan sangat akurat dan cepat.Berikut adalah code untuk memprogramnya :
#include <Arduino.h>
#include <Wire.h>
unsigned char ok_flag;
unsigned char fail_flag;
unsigned short lenth_val = 0;
unsigned char i2c_rx_buf[16];
unsigned char dirsend_flag = 0;
void SensorRead(unsigned char addr, unsigned char* datbuf, unsigned char cnt) {
unsigned short result = 0;
// step 1: instruct sensor to read echoes
Wire.beginTransmission(82); // transmit to device #82 (0x52)
// the address specified in the datasheet is 164 (0xa4)
// but i2c adressing uses the high 7 bits so it's 82
Wire.write(byte(addr)); // sets distance data address (addr)
Wire.endTransmission(); // stop transmitting
// step 2: wait for readings to happen
delay(1); // datasheet suggests at least 30uS
// step 3: request reading from sensor
Wire.requestFrom(82, cnt); // request cnt bytes from slave device #82 (0x52)
// step 5: receive reading from sensor
if (cnt <= Wire.available()) { // if two bytes were received
*datbuf++ = Wire.read(); // receive high byte (overwrites previous reading)
*datbuf++ = Wire.read(); // receive low byte as lower 8 bits
}
}
int ReadDistance() {
SensorRead(0x00, i2c_rx_buf, 2);
lenth_val = i2c_rx_buf[0];
lenth_val = lenth_val << 8;
lenth_val |= i2c_rx_buf[1];
delay(300);
return lenth_val;
}
void setup()
{
Serial.begin(9600);
Wire.begin();
Serial.begin(9600, SERIAL_8N1);
}
void loop(){
int jarak_laser = ReadDistance();
Serial.print(jarak_laser);
Serial.println(" mm");
}
Berikut ini adalah penjelasan dari kode di atas :
1. Import Library
#include <Arduino.h>
#include <Wire.h>
Arduino.h
: library dasar Arduino.Wire.h
: library untuk komunikasi I2C.
2. Variabel Global
unsigned char ok_flag;
unsigned char fail_flag;
unsigned short lenth_val = 0;
unsigned char i2c_rx_buf[16];
unsigned char dirsend_flag = 0;
- Variabel untuk flag (tidak digunakan di kode ini secara eksplisit).
lenth_val
: untuk menyimpan nilai jarak yang dibaca.i2c_rx_buf
: buffer untuk menyimpan data yang diterima dari sensor.dirsend_flag
: flag (tidak digunakan di kode ini).
3. Fungsi SensorRead
void SensorRead(unsigned char addr, unsigned char* datbuf, unsigned char cnt) {
unsigned short result = 0;
// Step 1: Kirim perintah ke sensor
Wire.beginTransmission(82); // Alamat I2C sensor (82 decimal = 0x52)
Wire.write(byte(addr)); // Kirim alamat register yang ingin dibaca (biasanya 0x00 untuk jarak)
Wire.endTransmission(); // Akhiri komunikasi pengiriman data
// Step 2: Tunggu sejenak (sensor memproses data)
delay(1); // Delay 1 ms (datasheet menyarankan minimal 30 µs)
// Step 3: Minta data dari sensor
Wire.requestFrom(82, cnt); // Minta cnt byte dari device dengan alamat 0x52
// Step 4: Terima data dari sensor
if (cnt <= Wire.available()) {
*datbuf++ = Wire.read(); // Baca byte pertama (high byte)
*datbuf++ = Wire.read(); // Baca byte kedua (low byte)
}
}
- Fungsi ini bertugas mengirim perintah baca jarak ke sensor lewat I2C, lalu membaca hasilnya ke buffer
datbuf
. addr
biasanya alamat register untuk data jarak.cnt
adalah jumlah byte data yang ingin dibaca (di sini 2 byte).
4. Fungsi ReadDistance
int ReadDistance() {
SensorRead(0x00, i2c_rx_buf, 2); // Baca 2 byte dari register 0x00 sensor
lenth_val = i2c_rx_buf[0]; // Ambil byte pertama (high byte)
lenth_val = lenth_val << 8; // Geser 8 bit ke kiri (jadi posisi high byte)
lenth_val |= i2c_rx_buf[1]; // Gabungkan dengan byte kedua (low byte)
delay(300); // Delay 300 ms (untuk pembacaan berikutnya)
return lenth_val; // Kembalikan nilai jarak dalam mm
}
- Fungsi ini memanggil
SensorRead
untuk membaca 2 byte data jarak. - Data yang diterima disusun menjadi angka 16-bit (short) dengan menggabungkan high byte dan low byte.
- Mengembalikan nilai jarak dalam satuan milimeter.
5. Setup
void setup()
{
Serial.begin(9600);
Wire.begin();
Serial.begin(9600, SERIAL_8N1);
}
- Inisialisasi komunikasi serial pada baud rate 9600.
- Memulai komunikasi I2C dengan
Wire.begin()
. - (Panggilan
Serial.begin(9600)
dua kali, bisa dihapus salah satu, cukup satu saja sudah cukup.)
6. Loop Utama
void loop(){
int jarak_laser = ReadDistance(); // Baca jarak dari sensor
Serial.print(jarak_laser);
Serial.println(" mm"); // Tampilkan jarak dalam mm ke serial monitor
}
- Membaca jarak dari sensor secara berulang-ulang.
- Menampilkan hasil pembacaan jarak dalam satuan milimeter ke Serial Monitor.
Kode ini membaca data jarak dari sensor I2C dengan alamat 0x52 (biasanya sensor jarak laser seperti TOF10120 atau sensor jarak lain yang kompatibel). Data jarak diambil dari register 0x00, berupa 2 byte, kemudian dikonversi jadi angka jarak dalam milimeter dan ditampilkan lewat Serial Monitor.
untuk diskusi bisa kontak dibawah ini :

Sosial media :