Arduino I2C LCD Backpack

From Indonesian Research And Development Center
Jump to: navigation, search

Pendahuluan

Pada tutorial kali ini akan dibahas mengenai cara menggunakan I2C LCD backpack dan arduino. Adapun I2C LCD backpack ini bertujuan untuk mengurangi jumlah pin yang digunakan pada koneksi antara arduino (atau microcontroller lainnya) dengan character LCD.


Langkah-langkah

  • Untuk mempermudah, kita akan menggunakan library New LiquidCrystal. Pertama, unduh dan ekstrak library tersebut pada sub direktori dimana library arduino berada.
# cd /usr/share/arduino/libraries/
# mv LiquidCrystal LiquidCrystalOld
# wget https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/LiquidCrystal_V1.2.1.zip
# unzip LiquidCrystal_V1.2.1.zip
# rm -rf __MACOSX
  • Perlu diperhatikan, bahwa pada langkah di atas, kita mengganti nama direktori library LiquidCrystal yang lama agar tidak bentrok dengan library yang baru. Serta kita tidak membutuhkan sub direktori __MACOSX, sehingga kita dapat menghapusnya.
  • Selanjutnya, hubungkan arduino dengan I2C LCD backpack. Pada tutorial ini, digunakan arduino leonardo atau arduino UNO R3, dimana pin I2C berada pada bagian ujung digital pin sehingga mudah dikenali (Pin dengan tulisan SDA dan SCL). Untuk arduino UNO sebelum R3, pin I2C berada pada pin analog A4 (SDA) dan A5 (SCL). Untuk memudahkan, berikut ini adalah tabel koneksi antara I2C LCD backpack:
I2C LCD Backpack Arduino UNO Arduino UNO R3 / Leonardo
GND GND GND
VCC 5v 5v
SDA A4 SDA
SCL A5 SCL
  • Setelah menghubungkan arduino dan I2C LCD backpack, Anda perlu mengetahui alamat I2C LCD backpack. Gunakan sketch I2C scanner berikut ini untuk mengetahui alamat tersebut (sketch ini dapat ditemukan di situs playground arduino):
// --------------------------------------
// 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 know.
// Version 2, Juni 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.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
#include <Wire.h>

void setup()
{
  Wire.begin();

  Serial.begin(9600);
  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("Unknow 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
}
  • Lakukan kompilasi dan upload sketch di atas. Setelah proses upload ke arduino selesai, lanjutkan dengan menjalankan arduino serial monitor. Pada log serial monitor akan nampak output seperti ini:
Scanning...
I2C device found at address 0x27  !
done
  • Dari informasi di atas, diketahui bahwa alamat I2C LCD backpack berada pada 0x27. Dari informasi tersebut, kita dapat melanjutkan dengan menjalankan contoh sketch yang terdapat pada blog sainsmart berikut ini yang akan menampilkan dua baris kalimat Hello World pada character LCD yang telah dipasangi I2C LCD backpack:
/**
 * Example Arduino sketch for SainSmart I2C LCD2004 adapter for HD44780 LCD screens
 * Readily found on eBay or http://www.sainsmart.com/
 * The LCD2004 module appears to be identical to one marketed by YwRobot
 *
 * Address pins 0,1 & 2 are all permenantly tied high so the address is fixed at 0x27
 *
 * Written for and tested with Arduino 1.0
 * This example uses F Malpartida's NewLiquidCrystal library. Obtain from:
 * https://bitbucket.org/fmalpartida/new-liquidcrystal
 *
 * Edward Comer
 * LICENSE: GNU General Public License, version 3 (GPL-3.0)
 *
 * NOTE: Tested on Arduino NANO whose I2C pins are A4==SDA, A5==SCL
 */
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <NewPing.h>

// definisi untuk I2C LCD Backpack
#define I2C_ADDR       0x27
#define BACKLIGHT_PIN  3
#define BACKLIGHT_POL  POSITIVE
#define EN_PIN         2
#define RW_PIN         1
#define RS_PIN         0
#define D4_PIN         4
#define D5_PIN         5
#define D6_PIN         6
#define D7_PIN         7

LiquidCrystal_I2C lcd(I2C_ADDR, EN_PIN, RW_PIN, RS_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN, BACKLIGHT_PIN, BACKLIGHT_POL);

void setup()
{
  lcd.begin(16,2);      // menggunakan lcd 16 kolom dan 2 baris
  lcd.home();           // set kursor ke awal (baris 0, kolom 0)
  lcd.print("Hello");   // tulis kata "Hello"
  lcd.setCursor(0, 1);  // pindahkan kursor ke baris 1, kolom 0
  lcd.print("World");   // tulis kata "World"
}

void loop()
{
}
  • Selanjutnya, Anda tinggal melakukan upload sketch tersebut ke Arduino dan character LCD akan menampilkan kalimat Hello World.
  • Kelebihan dari penggunaan library New LiquidCrystal adalah sifatnya fleksibel dan memungkinkan Anda untuk menggunakan beberapa fungsi inisialisasi I2C LCD backpack sesuai dengan kebutuhan.
  • Demikian tutorial singkat ini, semoga bermanfaat.


Penutup

Selain menggunakan I2C LCD backpack, ada beberapa cara lain untuk mengurangi jumlah pin yang digunakan untuk menghubungkan microcontroller dengan character LCD, misalnya menggunakan shift register atau bahkan cukup menggunakan 1 koneksi saja (walaupun sedikit agak lambat).


Referensi