Input Digital Arduino

posted in: Belajar Arduino | 0

Pin digital pada Arduino bersifat bidirectional, berarti sebuah pin dapat menjadi pin input sekaligus pin output pada saat yang tidak bersamaan (bergantian). Output digital sudah dibahas di artikel sebelah. Lalu bagaimana dengan input digital?

Konsep kerja input digital sendiri berkebalikan dari output digital. Input digital digunakan untuk mendeteksi perubahan logika biner pada pin tertentu. Adanya input digital memungkinkan mikrokontroler untuk dapat menerjemahkan 0V menjadi logika LOW dan 5V menjadi logika HIGH.

Perlu kamu ketahui...
Sebenarnya penentuan logika HIGH dan LOW tidaklah saklek pada 5V dan 0V saja.
Bagaimana jika ada tegangan sebesar 2.5V yang terdeteksi oleh sistem? Apakah ia dianggap logika HIGH? atau logika LOW?

Di sinilah threshold (batas) pada logic level berperan.

Logic level threshold yang lazim digunakan saat ini mengacu pada dua buah teknologi bernama CMOS dan TTL. Teknologi CMOS dan TTL memiliki threshold yang berbeda, berikut perbandingannya:

TeknologiLOW VoltageHIGH VoltageKeterangan
CMOS0 V to 1/3 VDD2/3 VDD to VDDVDD = supply voltage
TTL0 V to 0.8 V2 V to VCCVCC = 5 V ±10%

Pada tabel tersebut, terlihat bahwa logika dianggap LOW pada TTL apabila tegangan berada di rentang 0 hingga 0,8V, sedangkan logika akan dianggap HIGH apabila tegangan bernilai di rentang 2V hingga Vcc (dengan Vcc = 5V ± 10%). Terjawab sudah bahwa tegangan 2.5V akan dianggap kondisi HIGH pada CMOS maupun TTL.

Aturan tersebut berlaku untuk tegangan kerja 5V. Berbeda lagi threshold-nya dengan sistem yang menerapkan tegangan kerja 3.3V seperti Arduino Pro Mini versi 3.3V atau modul WiFi ESP8266. Komunikasi input output digital antara dua buah sistem yang memiliki tegangan kerja berbeda (misal Arduino Uno 5V dengan ESP8266 3.3V) harus melalui rangkaian logic level converter agar sinyal yang didapat tidak salah interpretasi. Selain itu, logic level converter juga menghindarkan dari kemungkinan overvoltage pada kasus sistem dengan tegangan kerja 3.3V yang tidak toleran terhadap tegangan 5V di pin I/O.

Banyak modul-modul sensor yang beredar di pasaran, seperti push button, sensor jarak (ultasonik), dan sensor suhu dan kelembapan (DHT 11), memiliki output berupa sinyal digital, sehingga kita harus menggunakan input digital pada Arduino agar dapat membaca dan mengolah data berupa sinyal digital dari sensor-sensor tersebut.

Membaca sinyal digital pada Arduino dapat menggunakan sintaks digitalRead(pin);
Berikut contoh sederhana membaca state dari sebuah push button, lalu menampilkan kondisi state push button tersebut pada teminal.

Selain Arduino, kamu akan membutuhkan sebuah push button dan resistor (misal 330 ohm) pada tutorial kali ini (syukur-syukur kalau ada breadboard). Rangkailah push button dan resistor tersebut sesuai dengan skema berikut:

digitalread button_sch

Lalu upload program berikut ke Arduino kamu:

// pin digital nomor 2 telah terpasang sebuah pushbutton. Beri nama pushbutton ini ‘tombol’ 
int tombol = 2;

void setup() {
  // mulai komunikasi serial dengan baud rate 9600 bits per second
  Serial.begin(9600);
  // jangan lupa deklarasikan tombol sebagai input
  pinMode(tombol, INPUT);
}

void loop() {
  // baca state tombol
  int keadaanTombol = digitalRead(tombol);
  // print state tombol melalui serial
  Serial.println(buttonState);
  delay(100);        // delay 100 milisekon
}

Setelah program berhasil diupload, buka jendela serial monitor dengan mengeklik ikon kaca pembesar yang ada di sebelah kanan atas jendela sketch.

serial pushbutton input

Cobalah tekan push button beberapa kali sembari mengamati jendela serial monitormu. Angka 0 dan 1 yang muncul merupakan state digital push button yang terbaca pada pin input digital Arduino yang digunakan. Angka 1 akan muncul ketika push button ditekan, sedangkan angka 0 akan muncul ketika push button dalam keadaan tidak ditekan.

Kok bisa gitu ya? Begini...
Apabila pushbutton ditekan, maka rangkaian akan menjadi closed circuit yang mengakibatkan tegangan 5V timbul pada input pin nomor 2, sehingga Arduino akan mendeteksi logika HIGH (state = 1) pada pin nomor 2. Arduino kemudian mengirimkan state tersebut pada serial komputer dan kita bisa melihat data yang dikirim ke serial komputer tersebut melalui serial monitor.

Sebaliknya, apabila push button dalam keadaan dilepas, maka rangkaian menjadi open circuit, sehingga tidak ada arus yang muncul pada pin nomor 2, maka input digital menganggap state = 0 karena tidak ada beda potensial antara pin nomor 2 dengan GND.

Bosan dengan angka 0 dan 1? Mari kita ganti sedikit kode program di atas menjadi:

// pin digital nomor 2 telah terpasang sebuah pushbutton. Beri nama pushbutton ini ‘tombol’ 
int tombol = 2;

void setup() {
  // mulai komunikasi serial dengan baud rate 9600 bits per second
  Serial.begin(9600);
  // jangan lupa deklarasikan tombol sebagai input
  pinMode(tombol, INPUT);
}

void loop() {
  // baca state tombol
  int keadaanTombol = digitalRead(tombol);
  // print state tombol melalui serial
  
  if (keadaanTombol == 1) {
    Serial.println("Tombol ditekan");
  } else {
    Serial.println("Tombol tidak ditekan");
  }
  
  delay(100);  // delay 100 milisekon
}

Hasilnya:

input digital tombol

Selamat mencoba dan berkreasi! 😎

Leave a Reply