Bab 4 Digital Output

1. General Purpose I/O

GPIO memiliki kepanjangan General Purpose Input Output. GPIO merupakan interface paling sederhana yang bisa dihubungkan dengan sensor atau aktuator. GPIO bisa difungsikan sebagai input atau output. Ketika GPIO difungsikan sebagai input, maka GPIO bisa digunakan untuk membaca nilai digital (0 atau 1) dari sensor. Ketika GPIO difungsikan sebagai output, maka GPIO bisa digunakan untuk mengontrol aktuator dengan nilai digital.

Gambar 1 mengilustrasikan GPIO yang dihubungkan dengan LED dan button. GPIO difungsikan sebagai input untuk membaca nilai button, sedangkan untuk mengontrol LED, maka GPIO difungsikan sebagai output.

2. Level Tegangan

GPIO bekerja dalam dua level diskrit yaitu logika low (0) dan high (1). Kedua logika tersebut direpresentasikan oleh dua level tegangan yang berbeda atau disebut juga sebagai level tegangan. Level tegangan yang paling sering digunakan yaitu 0V untuk logika 0 dan 5V untuk logika 1. Salah satu contoh board yang menggunakan level tegangan ini yaitu Arduino Uno.

Ada juga level tegangan lain yang sering digunakan yaitu 0V untuk logika 0 dan 3.3V untuk logika 1 seperti pada Gambar 2. Board-board berbasis ESP32 menggunakan level tegangan ini. Level tegangan sangat penting karena berhubungan tegangan kerja dari sensor atau actuator kita. Sensor yang bekerja pada 5V tidak bisa dihubungkan secara langsung ke mikrokontroler yang bekerja pada 3.3V, karena dapat merusak mikrokontroler tersebut.

Sebelum kita menggunakan suatu board mikrokontroler, sebaiknya kita mengetahui level tegangan yang digunakan oleh board tersebut agar tidak terjadi kesalahan yang dapat merusak board tersebut.

Gambar 2 hanya menggambarkan level tegangan secara sederhana. Pada kenyataannya level tegangan yang merepresentasikan nilai HIGH dan LOW itu berupa range tegangan seperti pada Gambar 3. Gambar tersebut merupakan detail level tegangan 3.3V pada ESP32.

3. Digital Output

Digital output merupakan cara paling sederhana yang bisa dilakukan mikrokontroler untuk mengontrol komponen lain. Kita bisa menggunakan GPIO sebagai digital output untuk mengontrol (meyalakan atau mematikan) LED, buzzer, relay, motor DC, dll.

Sebagai catatan, untuk mengontrol komponen tersebut mungkin diperlukan rangkaian tambahan atau disebut juga driver. Hal ini diperlukan karena biasanya komponen tersebut membutuhkan arus dan tegangan yang lebih besar dari kemampuan GPIO dalam men-supply arus dan tegangan.

Gambar 5 memperlihatkan daftar pin pada board DOIT ESP32 DevKit v1 yang dapat digunakan sebagai GPIO untuk digital output.

4. Library Digital Output

Pada library Arduino sudah terdapat fungsi-fungsi untuk memudahkan kita menggunakan GPIO sebagai digital output. Dua fungsi utama yang penting yaitu pinMode dan digitalWrite.

Fungsi pinMode memiliki dua input argument yaitu pin GPIO yang akan kita konfigurasi dan mode GPIO. Mode GPIO yang tersedia pada ESP32 yaitu OUTPUT, INPUT, INPUT_PULLUP, dan INPUT_PULLDOWN.

void pinMode(uint8_t pin, uint8_t mode);

Fungsi digitalWrite memiliki dua input argument yaitu pin GPIO yang akan kita atur nilainya dan nilai logika untuk pin tersebut. Nilai logika yang digunakan yaitu LOW atau HIGH.

void digitalWrite(uint8_t pin, uint8_t val);

Fungsi pinMode biasanya dipanggil di dalam fungsi setup, sedangkan fungsi digitalWrite biasanya dipanggil di dalam fungsi loop. Walaupun demikian, fungsi digitalWrite juga bisa dipanggil di dalam fungsi setup untuk men-set nilai awal GPIO output.

5. LED

Light-emitting diode (LED) merupakan komponen elektronika yang memancarkan cahaya ketika arus listrik melewatinya. LED terbuat dari material semikonduktor. Elektron pada semikonduktor tersebut dapat melakukan rekombinasi dengan hole yang akan melepaskan energi dalam bentuk photon (partikel cahaya). Gambar 6 menampilkan berbagai macam jenis LED berdasarkan package-nya.

6. Rangkaian LED

Ada dua jenis rangkaian dasar LED yang banyak digunakan yaitu rangkaian LED active-high dan rangkaian LED active-low. Perbedaan antara rangkaian active-high dan active-low yaitu pada nilai logika yang diperlukan untuk menyalakan LED tersebut.

6.1. Rangkaian LED Active-High

Gambar 7 menampilkan rangkaian LED active-high. Pada rangkaian ini, pin GPIO output dihubungkan dengan resistor dan LED secara seri dan terhubung ke GND. Berikut ini cara kerja rangkaian LED active-high:

  • Ketika GPIO output di-set ke logika LOW (0V), maka GPIO output tersebut dan GND memiliki potensial yang sama, sehingga arus tidak bisa mengalir, maka LED tidak akan menyala.

  • Ketika GPIO output di-set ke logika HIGH (3.3V), maka GPIO output tersebut dan GND memiliki potensial yang beda, sehingga arus bisa mengalir dari GPIO output tersebut ke GND, maka LED akan menyala.

Kesimpulannya, untuk menyalakan LED pada rangkaian active-high, kita harus men-set GPIO output ke logika HIGH, dan sebaliknya untuk mematikan LED. Sesuai dengan namanya, active-high, kita membutuhkan logika HIGH untuk mengaktifkan komponen pada rangkaian tersebut.

6.2. Rangkaian LED Active-Low

Gambar 8 menampilkan rangkaian LED active-low. Pada rangkaian ini, supply 3.3V dihubungkan dengan resistor dan LED secara seri dan terhubung ke pin GPIO output. Berikut ini cara kerja rangkaian LED active-low:

  • Ketika GPIO output di-set ke logika HIGH (3.3V), maka GPIO output tersebut dan supply memiliki potensial yang sama, sehingga arus tidak bisa mengalir, maka LED tidak akan menyala.

  • Ketika GPIO output di-set ke logika LOW (0V), maka GPIO output tersebut dan supply memiliki potensial yang beda, sehingga arus bisa mengalir dari supply ke GPIO output tersebut, maka LED akan menyala.

Kesimpulannya, untuk menyalakan LED pada rangkaian active-low, kita harus men-set GPIO output ke logika LOW, dan sebaliknya untuk mematikan LED. Sesuai dengan namanya, active-low, kita membutuhkan logika LOW untuk mengaktifkan komponen pada rangkaian tersebut.

6.3. Menghitung Nilai Resistor

Rumus untuk menghitung nilai resistor LED baik pada rangkaian active-high maupun active-low yaitu seperti berikut ini.

Dimana:

Sebagai contoh jika LED berwarna merah standar berukuran 5mm memiliki tegangan forward 2V dan arus forward maksimum 20mA. Berapa nilai resistor yang diperlukan jika supply yang digunakan adalah 3.3V?

7. Contoh Program

Pada bagian ini akan dibahas dua contoh program LED untuk rangkaian active-high dan active-low. Kedua program tersebut sangat mirip, hanya berbeda pada nilai logika yang digunakan untuk menyalakan LED.

7.1. Program LED Active-High

Gambar 9 menampilkan rangkaian LED untuk program LED active-high. Pin GPIO yang digunakan sebagai output yaitu pin D4.

Kode berikut ini menampilkan contoh program LED active-high. Berikut ini penjelasan cara kerja program tersebut:

  • Pada line 2, kita membuat sebuah variable yang bernama ledPin yang berisi pin yang terhubung ke LED tersebut. Keyword const digunakan untuk membuat variable tersebut menjadi konstanta yang tidak bisa diubah nilainya setelah diinisialisasi.

  • Pada line 7, kita melakukan inisialisasi terhadap GPIO sebagai pin output dengan memanggil fungsi pinMode.

  • Pada line 9, kita menulis nilai logika HIGH ke pin output dengan memanggil fungsi digitalWrite. Nilai logika HIGH akan menyalakan LED pada rangkaian active-high.

led-active-high.ino
// LED pin
const int ledPin = 4;

void setup()
{
    // Konfigurasi GPIO pin sebagai output untuk LED
    pinMode(ledPin, OUTPUT);
    // Nyalakan LED active-high
    digitalWrite(ledPin, HIGH);
}

void loop()
{
}

7.2. Program LED Active-Low

Gambar 10 menampilkan rangkaian LED untuk program LED active-low. Pin GPIO yang digunakan sebagai output yaitu pin D4.

Kode berikut ini menampilkan contoh program LED active-low. Pada dasarnya program LED active-low mirip dengan program sebelumnya untuk LED active-high. Berikut ini penjelasan cara kerja program tersebut:

  • Pada line 2, kita membuat sebuah konstanta ledPin yang berisi pin yang terhubung ke LED.

  • Pada line 7, kita melakukan inisialisasi terhadap GPIO sebagai pin output dengan memanggil fungsi pinMode.

  • Pada line 9, kita menulis nilai logika LOW ke pin output dengan memanggil fungsi digitalWrite. Nilai logika LOW akan menyalakan LED pada rangkaian active-low.

led-active-low.ino
// LED pin
const int ledPin = 4;

void setup()
{
  // Konfigurasi GPIO pin sebagai output untuk LED
  pinMode(ledPin, OUTPUT);
  // Nyalakan LED active-low
  digitalWrite(ledPin, LOW);
}

void loop()
{
}    

Kedua program tersebut akan memberikan hasil yang sama yaitu LED-nya menyala.

8. Repository Kode Program

Kode program untuk LED active-high dan active-low dapat didapatkan di repository ini: led-active-high dan led-active-low.

Last updated