Cara Mengatur Alamat I²C dan Menggunakan Pemindai I²C untuk LCD1602 dan LCD2004
Dalam tutorial ini, kita akan mempelajari cara mengatur alamat I²C dan menggunakan pemindai I²C untuk layar LCD1602 dan LCD2004. Memahami komunikasi I²C sangat penting untuk mengintegrasikan modul LCD ini dengan proyek Arduino Anda, memungkinkan transmisi data dan kontrol yang efisien. Di akhir panduan ini, Anda akan dapat secara efektif mengidentifikasi alamat I²C dari LCD Anda dan memastikan semuanya berfungsi dengan benar.


Kita akan menggunakan sensor BMP-180 sebagai bagian dari proyek ini, yang beroperasi menggunakan komunikasi I²C. Sensor ini memberikan pembacaan suhu dan tekanan, yang dapat ditampilkan pada LCD1602 atau LCD2004. Tutorial ini akan mencakup instruksi pengkabelan, potongan kode, dan demonstrasi hasil yang diharapkan. Untuk pemahaman yang lebih visual, pastikan untuk menonton video terkait (di video pada 00:00).
Penjelasan Perangkat Keras
Komponen utama untuk proyek ini termasuk sensor BMP-180, layar LCD1602 atau LCD2004, dan papan Arduino. BMP-180 adalah sensor tekanan digital yang berkomunikasi melalui protokol I²C, hanya memerlukan dua jalur data: SDA (jalur data) dan SCL (jalur clock). Layar LCD juga kompatibel dengan I²C dan dapat dengan mudah dikontrol menggunakan protokol komunikasi yang sama, memungkinkan pengaturan yang bersih dan efisien.
BMP-180 beroperasi dengan tegangan suplai antara 1,8V dan 3,6V, yang berarti dapat diberi daya melalui regulator tegangan jika Anda menggunakan sumber tegangan yang lebih tinggi. Layar LCD, di sisi lain, biasanya beroperasi pada 5V, sehingga mudah untuk dihubungkan dengan papan Arduino tanpa komponen tambahan.
Detail Datasheet
| Produsen | Bosch |
|---|---|
| Nomor bagian | BMP-180 |
| Tegangan logika/IO | 1,8 - 3,6 V |
| Tegangan suplai | 1,8 - 3,6 V |
| Arus keluaran (per saluran) | 3,6 µA |
| Arus puncak (per saluran) | 1 mA |
| Panduan frekuensi PWM | T/A |
| Ambang logika input | T/A |
| Penurunan tegangan / RDS(on) / saturasi | T/A |
| Batas termal | -40 hingga +85 °C |
| Kemasan | 3,6 x 3,8 mm |
| Catatan / varian | Sensor suhu dan tekanan |
- Pastikan tegangan suplai yang tepat: 1,8V hingga 3,6V untuk BMP-180.
- Gunakan resistor pull-up pada jalur SDA dan SCL untuk komunikasi I²C yang stabil.
- Jaga kabel tetap pendek untuk menghindari degradasi sinyal.
- Periksa alamat I²C yang benar selama pemindaian.
- Pantau rentang suhu: -40 hingga +85 °C untuk BMP-180.
Instruksi Pengkabelan

Untuk menghubungkan sensor BMP-180 dan layar LCD ke Arduino Anda, ikuti langkah-langkah berikut:

Pertama, hubungkan pin Vn BMP-180 ke output 5V pada Arduino. Selanjutnya, hubungkan pin GND BMP-180 ke ground Arduino. Pin SDA BMP-180 harus dihubungkan ke pin A4 Arduino, sedangkan pin SCL terhubung ke A5.
Untuk LCD1602 atau LCD2004, hubungkan pin VCC ke 5V pada Arduino dan pin GND ke ground juga. Pin SDA LCD juga harus terhubung ke A4 (berbagi dengan BMP-180), dan pin SCL harus terhubung ke A5.
Konfigurasi ini memungkinkan kedua perangkat berkomunikasi melalui bus I²C yang sama, memastikan pengaturan yang bersih dan efisien.
Contoh Kode & Penjelasan
Untuk memindai alamat I²C, kita akan menggunakan potongan kode sederhana. Cuplikan berikut menginisialisasi komunikasi I²C dan menyiapkan monitor serial:
#include
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: tunggu monitor serial
Serial.println("\nPemindai I2C");
}
Kode ini menginisialisasi pustaka Wire untuk komunikasi I²C dan menyiapkan monitor serial untuk keluaran. Ini penting untuk debugging dan memastikan bahwa perangkat I²C dikenali.
Fungsi loop memindai perangkat di bus I²C dan mencetak alamatnya:
void loop() {
byte error, address;
int nDevices = 0;
Serial.println("Memindai...");
for(address = 1; address < 127; address++) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("Perangkat I2C ditemukan di alamat 0x");
Serial.println(address, HEX);
nDevices++;
}
}
if (nDevices == 0) Serial.println("Tidak ada perangkat I2C ditemukan\n");
delay(5000); // tunggu 5 detik untuk pemindaian berikutnya
}
Loop ini memeriksa setiap alamat dari 1 hingga 127, mencoba berkomunikasi dengan perangkat yang ada. Jika perangkat mengakui komunikasi, alamatnya dicetak ke monitor serial. Ini adalah langkah penting dalam mengidentifikasi alamat I²C dari LCD atau perangkat terhubung lainnya.
Demonstrasi / Apa yang Diharapkan
Ketika pemindai I²C dijalankan, Anda akan melihat pesan di monitor serial yang menunjukkan apakah ada perangkat I²C yang ditemukan. Jika berhasil, keluaran akan menampilkan alamat perangkat yang terhubung, diformat sebagai nilai heksadesimal (misalnya, "Perangkat I2C ditemukan di alamat 0x27"). Jika tidak ada perangkat yang ditemukan, Anda akan melihat pesan yang sesuai.
Penting untuk memastikan bahwa semua koneksi aman dan tingkat tegangan yang benar disuplai untuk menghindari masalah dalam deteksi perangkat (di video pada 05:30).
// --------------------------------------
//http://playground.arduino.cc/Main/I2cScanner
// i2c_scanner
//
// Version 1
// This program (or code that looks like it)
// can be found in many places.
// For example on the Arduino.cc forum.
// The original author is not known.
// Version 2, June 2012, Using Arduino 1.0.1
// Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26, 2013
// V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Changes by louarnold removed.
// Scanning addresses changed from 0...127 to 1...119,
// according to the i2c scanner by Nick Gammon
// http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
// As version 4, but address scans now to 127.
// A sensor seems to use address 120.
// Version 6, November 27, 2015.
// Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit addresses might not be seen properly.
// Watch Video explaining I2C address: https://www.youtube.com/watch?v=bqMMIbmYJS0
//
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
Hal-hal yang mungkin Anda butuhkan
-
AmazonPurchase LCD1602-I2C from Amazonamzn.to
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
-
AliExpressPurchase LCD1602-I2C from AliExpresss.click.aliexpress.com
Sumber daya & referensi
Belum ada sumber daya.
Berkas📁
Pustaka Arduino (zip)
-
LCD1602 LCD Arduino library from Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB
File Fritzing
-
LCD2004-I2C
LCD2004-I2C.fzpz0.02 MB