Pin pada Arduino dapat dikonfigurasi sebagai input atau output. Artikel ini
menjelaskan fungsi pin dalam mode input atau output namun secara khusus
artikel ini mengacu pada pin digital. Namun penting juga untuk dicatat bahwa
sebagian besar pin analog Arduino (Atmega), dapat dikonfigurasi, dan
digunakan, dengan cara yang persis sama dengan pin digital.
Sebagai contoh Pin digital pada arduino uno terdapat 14 yaitu pin ( 0-
13 ), sedangkan untuk pin analog ada 6 yaitu pin ( A0-A5 ). Untuk menggunakan
pin - pin tersebut tentu harus dikonfigurasikan terlebih dahulu, namun sebelum
membahasnya kita perlu tau beberapa hal tentang pin - pin digital arduino.
Properti Pin yang Dikonfigurasi sebagai INPUT
Pin Arduino (Atmega) default itu terkonfigurasi sebagai input, jadi pin
tersebut tidak perlu dideklarasikan secara eksplisit sebagai input dengan
pinMode() saat Anda menggunakannya sebagai input. Pin yang dikonfigurasi
dengan cara ini dikatakan dalam keadaan impedansi tinggi. Pin input
membuat tuntutan yang sangat kecil pada rangkaian yang diambil sampelnya,
setara dengan resistor seri 100 megaohm di depan pin. Ini berarti bahwa
dibutuhkan arus yang sangat sedikit untuk memindahkan pin input dari satu
keadaan ke keadaan lain, dan dapat membuat pin berguna untuk tugas-tugas
seperti menerapkan sensor sentuh kapasitif, membaca
fotodioda, atau membaca sensor analog dengan skema. seperti
RCTime.
Namun ini juga berarti, bahwa pin yang dikonfigurasi sebagai pinMode(pin,
INPUT) tanpa ada yang terhubung dengannya, atau dengan kabel yang terhubung ke
pin yang tidak terhubung ke sirkuit lain, akan memberikan pembacaan perubahan
yang tampak acak dalam status pin, dapat terganggu dengan listrik dari
lingkungan, atau secara kapasitif dapat terpengaruh dengan pin sebelahnya.
Resistor Pullup dengan pin yang dikonfigurasi sebagai INPUT
Seringkali berguna untuk mengarahkan pin input ke status yang diketahui jika
tidak ada input. Hal ini dapat dilakukan dengan menambahkan resistor
pullup (ke +5V), atau resistor pull-down (resistor ke ground)
pada input. Resistor 10K adalah nilai yang baik untuk resistor
pullup atau pulldown.
Properti Pin Dikonfigurasi sebagai INPUT_PULLUP
Ada resistor pullup 20K yang dibangun ke dalam chip Atmega yang dapat
diakses dari perangkat lunak. Resistor pullup bawaan ini diakses dengan
mengatur pinMode() sebagai INPUT_PULLUP. Ini secara efektif membalikkan
perilaku mode INPUT, di mana HIGH berarti sensor mati, dan LOW berarti
sensor hidup.
Nilai pullup ini tergantung dari mikrokontroler yang digunakan. Pada
sebagian besar papan berbasis AVR, nilainya dijamin antara 20kΩ dan 50kΩ. Di
Arduino Due, itu antara 50kΩ dan 150kΩ. Untuk nilai pastinya, lihat lembar
data mikrokontroler di papan Anda.
Saat menghubungkan sensor ke pin yang dikonfigurasi dengan INPUT_PULLUP,
ujung lainnya harus terhubung ke ground. Dalam kasus sakelar sederhana, ini
menyebabkan pin membaca HIGH ketika sakelar terbuka, dan LOW ketika sakelar
ditekan.
Resistor pullup menyediakan arus yang cukup untuk menyalakan lampu LED yang
terhubung ke pin yang telah dikonfigurasi sebagai input. Jika LED dalam
suatu proyek tampaknya berfungsi, tetapi sangat redup, kemungkinan inilah
yang sedang terjadi.
Resistor pullup dikendalikan oleh register yang sama (lokasi memori chip
internal) yang mengontrol apakah pin TINGGI atau RENDAH. Akibatnya, pin yang
dikonfigurasi untuk mengaktifkan resistor pullup ketika pin adalah INPUT,
akan memiliki pin yang dikonfigurasi sebagai HIGH jika pin kemudian
dialihkan ke OUTPUT dengan pinMode(). Ini bekerja ke arah lain juga, dan pin
output yang dibiarkan dalam keadaan TINGGI akan memiliki resistor pullup
yang disetel jika dialihkan ke input dengan pinMode().
Sebelum Arduino 1.0.1, dimungkinkan untuk mengonfigurasi pull-up internal
dengan cara berikut:
pinMode(pin, INPUT); // set pin to
input
digitalWrite(pin, HIGH); // turn on pullup
resistors
CATATAN:
Pin digital 13 lebih sulit digunakan sebagai input digital daripada pin
digital lainnya karena memiliki LED dan resistor yang terpasang padanya yang
disolder ke papan di sebagian besar papan. Jika Anda mengaktifkan resistor
pull-up 20k internalnya, resistor akan menggantung di sekitar 1.7V, bukan 5V
yang diharapkan karena LED onboard dan resistor seri menarik level tegangan ke
bawah, yang berarti selalu mengembalikan RENDAH. Jika Anda harus menggunakan
pin 13 sebagai input digital, setel pinMode() ke INPUT dan gunakan resistor
pull down eksternal.
Properti Pin Dikonfigurasi sebagai OUTPUT
Pin yang dikonfigurasi sebagai OUTPUT dengan pinMode() dikatakan dalam
keadaan impedansi rendah. Ini berarti bahwa mereka dapat memberikan sejumlah
besar arus ke sirkuit lain. Pin Atmega dapat menjadi sumber (memberikan arus
positif) atau tenggelam (memberikan arus negatif) hingga 40 mA (miliamp)
arus ke perangkat/sirkuit lain.
Arus ini cukup untuk menyalakan LED (jangan lupa resistor seri), atau
menjalankan banyak sensor, misalnya, tetapi arus tidak cukup untuk
menjalankan sebagian besar relai, solenoida, atau motor.
Hubungan pendek pada pin Arduino, atau mencoba menjalankan perangkat arus
tinggi darinya, dapat merusak atau menghancurkan transistor keluaran di pin,
atau merusak seluruh chip Atmega. Seringkali ini akan mengakibatkan pin
"mati" di mikrokontroler tetapi chip yang tersisa masih berfungsi dengan
baik. Untuk alasan ini adalah ide yang baik untuk menghubungkan pin
OUTPUT ke perangkat lain dengan resistor 470Ω atau 1k, kecuali
penarikan arus maksimum dari pin diperlukan untuk aplikasi tertentu.
Ada tiga fungsi digital I/O yang berhubungan dengan Pin Digital Arduino
- digitalMode()
- digitalWrite()
- pinMode()
Saya akan sedikit membahasnya dengan referensi dari berbagai sumber salah
satunya blog arduino reference.