Komponen · 14 mnt baca

Pinout Arduino Uno: Penjelasan Pin Digital, PWM, Analog, dan Daya

Pinout Arduino Uno dalam satu tabel: pin digital 0–13, PWM ~3, 5, 6, 9, 10, 11, analog A0–A5, Vin, 5V, 3.3V, I2C, SPI, pin interupsi, dan batas arus 20 mA per pin.

Pinout Arduino Uno mencakup 32 titik sambungan yang berjajar di header female hitam di sepanjang dua sisi panjang board: 14 pin input/output digital (0–13), 6 di antaranya bisa mengeluarkan PWM (~3, 5, 6, 9, 10, 11), 6 input analog (A0–A5), dan pin daya yang memberi daya ke board atau menyuplai daya ke komponen lain (Vin, 5V, 3.3V, GND, IOREF, AREF, RESET). Setiap pin punya tugas utama, tapi banyak yang juga membawa tugas kedua: A4 dan A5 juga merupakan bus I2C, 10–13 membentuk bus SPI, 2 dan 3 adalah pin interupsi, dan 0 serta 1 adalah jalur serial yang berkomunikasi dengan komputermu.

Memilih pin yang tepat adalah perbedaan antara proyek yang langsung berhasil di percobaan pertama dan berjam-jam mencari bug. Dengan tabel-tabel di artikel ini kamu akan mudah memahami kenapa PWM di pin 9 dan 10 berhenti begitu kamu memasang servo, kenapa sketch-mu tidak mau di-upload ketika modul Bluetooth tersambung, atau kenapa beberapa LED saja bisa membebani board secara berlebihan. Di bagian akhir kamu juga akan menemukan sketch uji yang mencoba semua jenis pin sekaligus, contoh rencana pin, dan perbedaan pin antara Uno R3 dan R4.

Board Arduino Uno R3 dan pin-pinnya
Arduino Uno R3: pin digital (0–13) di sisi atas, pin daya dan input analog (A0–A5) di sisi bawah, dan header ICSP 2×3 di sisi kanan.

Diagram pin Arduino Uno: di mana letak setiap pin?

Letakkan board di depanmu dengan soket USB dan jack daya di sebelah kiri. Dua header di sisi atas berisi pin digital; nomornya naik dari kanan ke kiri, jadi pin paling kanan adalah 0 (RX) dan pin digital paling kiri adalah 13. Di sisi bawah, header kiri membawa pin daya dan header kanan membawa input analog. Tanda ~ (tilde) di samping nomor berarti pin itu bisa mengeluarkan PWM. Kelompok pin male 2×3 di sisi kanan board adalah header ICSP.

HeaderPin (kiri ke kanan)Kegunaan
Kiri atas (10 pin)SCL, SDA, AREF, GND, 13, 12, ~11, ~10, ~9, 8Salinan I2C, referensi analog, SPI, dan pin digital
Kanan atas (8 pin)7, ~6, ~5, 4, ~3, 2, TX→1, RX←0Pin digital, pin interupsi, dan jalur serial
Kiri bawah (8 pin)Tidak dipakai (NC), IOREF, RESET, 3.3V, 5V, GND, GND, VinPin daya
Kanan bawah (6 pin)A0, A1, A2, A3, A4, A5Input analog (A4/A5 juga I2C)
Sisi kanan (2×3)1 MISO, 2 5V, 3 SCK, 4 MOSI, 5 RESET, 6 GNDHeader pemrograman ICSP
FiturArduino Uno R3
MikrokontrolerATmega328P, 16 MHz
Tegangan kerja (logika)5 V
Tegangan input (jack / Vin)7–12 V dianjurkan, batas 6–20 V
I/O digital14 pin (D0–D13)
Output PWM6 pin: 3, 5, 6, 9, 10, 11
Input analog6 pin (A0–A5), 10 bit (0–1023)
Arus per pin20 mA dianjurkan, 40 mA maksimum mutlak
Arus total (VCC/GND)200 mA
Arus pin 3.3VMaks. 50 mA
MemoriFlash 32 KB (0,5 KB bootloader), SRAM 2 KB, EEPROM 1 KB

Tabel pin lengkap: D0–D13 dan A0–A5

PinPortFungsi utamaFungsi tambahanCatatan
D0 (RX)PD0I/O digitalUART RX (Serial)Tersambung ke chip USB-serial, biarkan kosong
D1 (TX)PD1I/O digitalUART TX (Serial)Tersambung ke chip USB-serial, biarkan kosong
D2PD2I/O digitalInterupsi eksternal INT0Tombol, encoder, menghitung RPM
D3 ~PD3I/O digital, PWM 490 HzInterupsi eksternal INT1, Timer2PWM terganggu selama tone() berbunyi
D4PD4I/O digital-Tanpa fungsi tambahan, bebas dipakai
D5 ~PD5I/O digital, PWM 980 HzTimer0Timer yang sama dengan millis()
D6 ~PD6I/O digital, PWM 980 HzTimer0Timer yang sama dengan millis()
D7PD7I/O digital-Tanpa fungsi tambahan, bebas dipakai
D8PB0I/O digital-Tanpa fungsi tambahan, bebas dipakai
D9 ~PB1I/O digital, PWM 490 HzTimer1Library Servo mematikan PWM-nya
D10 ~PB2I/O digital, PWM 490 HzSPI SS, Timer1Harus tetap output ketika memakai SPI
D11 ~PB3I/O digital, PWM 490 HzSPI MOSI, Timer2Juga ada di header ICSP
D12PB4I/O digitalSPI MISOJuga ada di header ICSP
D13PB5I/O digitalSPI SCKLED L bawaan board ada di pin ini
A0PC0Input analogDigital 14-
A1PC1Input analogDigital 15-
A2PC2Input analogDigital 16-
A3PC3Input analogDigital 17-
A4PC4Input analogI2C SDA, digital 18Tidak bisa membaca analog selama I2C dipakai
A5PC5Input analogI2C SCL, digital 19Tidak bisa membaca analog selama I2C dipakai
Jika dibutuhkan, pin analog juga bisa bekerja sebagai pin digital biasa: A0 = 14, A1 = 15 … A5 = 19. Kamu bisa menulis pinMode(A2, OUTPUT) untuk menyalakan LED atau membaca tombol dengan digitalRead(A3), sehingga total ada 20 pin digital di Uno. Kolom “Port” di tabel adalah nama asli pin di dalam ATmega328P (digital 13 = PB5); ini berguna ketika kamu menulis kode cepat dengan akses port langsung. A6 dan A7 hanya ada di board seperti Nano dan Pro Mini.

Bagaimana cara kerja pin digital (0–13)?

Setiap pin digital diatur sebagai input atau output dengan pinMode(). Sebagai output, digitalWrite(pin, HIGH) menarik pin ke sekitar 5 V dan LOW menariknya ke 0 V. Sebagai input, digitalRead() membandingkan tegangan dengan ambang: dengan ATmega328P yang bekerja di 5 V, apa pun di atas 3,0 V pasti HIGH, apa pun di bawah 1,5 V pasti LOW, dan rentang di antaranya tidak terdefinisi. Karena itu output sensor 3,3 V biasanya terbaca HIGH di Uno; tapi output 5 V dari Uno tidak boleh langsung masuk ke input modul 3,3 V, kamu butuh konverter level logika di antaranya.

Pin input yang tidak tersambung ke apa pun berada dalam keadaan mengambang (floating) dan membaca nilai HIGH dan LOW secara acak, bahkan ketika kamu hanya mendekatkan tangan. Solusinya adalah menarik pin ke level tetap dengan resistor: pinMode(pin, INPUT_PULLUP) menyalakan resistor 20–50 kΩ di dalam chip, dan tombol dipasang antara pin dan GND. Detailnya ada di Cara Menghubungkan Push Button ke Arduino. Pin 13 tersambung ke LED L bawaan board; pada R3 asli, LED ini dikendalikan lewat buffer op-amp, jadi memakai pin itu sebagai input tidak menimbulkan masalah, tapi pada sebagian board kloningan LED dan resistornya langsung terpasang di pin dan bisa mengacaukan pembacaan tombol dengan pull-up internal.

Pin PWM (~3, 5, 6, 9, 10, 11) dan timer

Uno tidak bisa menghasilkan output analog sungguhan; sebagai gantinya enam pin ini menyediakan PWM, gelombang kotak yang menyala dan mati dengan sangat cepat. Dengan analogWrite(pin, value) kamu mengatur berapa lama gelombang tetap menyala, dari 0 sampai 255: 0 mati total, 127 kira-kira setengah, dan 255 nyala penuh. Kecerahan LED, kecepatan motor, dan kecepatan kipas semuanya dikendalikan dengan cara ini. Keenam pin PWM terikat berpasangan ke tiga timer hardware, dan itulah penyebab bentrokan dengan beberapa library. Ide di balik PWM dan cara menghitung duty cycle dijelaskan di Apa Itu PWM?.

TimerPin PWMFrekuensiSiapa yang memakai timer ini?
Timer0 (8 bit)5, 6Sekitar 980 Hzmillis(), delay(), dan micros()
Timer1 (16 bit)9, 10Sekitar 490 HzLibrary Servo
Timer2 (8 bit)3, 11Sekitar 490 Hztone() dan library seperti IRremote
Begitu kamu memakai library Servo, analogWrite() berhenti bekerja di pin 9 dan 10, bahkan jika tidak ada servo yang terpasang di sana. Selama buzzer berbunyi dengan tone(), PWM di 3 dan 11 juga terganggu. Jika proyekmu punya servo sekaligus buzzer, pin PWM yang aman adalah 5 dan 6. Karena PWM di kedua pin ini berasal dari timer yang sama dengan millis(), nilai yang sangat rendah (0–10) bisa menyala sedikit lebih lama dari yang diharapkan.

Pin analog (A0–A5) dan AREF

Pin analog mengukur tegangan antara 0 dan 5 V dengan resolusi 10 bit, dan analogRead() mengembalikan angka dari 0 sampai 1023. Satu langkah sekitar 4,9 mV; untuk mengubah angka menjadi volt pakai tegangan = nilai × 5.0 / 1023, jadi pembacaan 512 berarti kira-kira 2,5 V. Keenam pin bergantian memakai satu ADC, dan satu pembacaan butuh sekitar 100 µs, sehingga memungkinkan sekitar 10.000 pembacaan per detik. Untuk hasil yang akurat, impedansi output sensor sebaiknya tidak melebihi 10 kΩ; jika lebih tinggi, pembacaan dari dua pin yang diambil berturut-turut bisa saling memengaruhi, dan membuang pembacaan pertama lalu memakai yang kedua akan mengatasinya. Untuk mengukur tegangan di atas 5 V, pilih resistor yang cocok dengan kalkulator pembagi tegangan.

Pin AREF memungkinkanmu mengubah batas atas pengukuran analog. analogReference(DEFAULT) memakai 5 V, analogReference(INTERNAL) memakai referensi internal chip 1,1 V, dan analogReference(EXTERNAL) memakai tegangan yang kamu berikan ke pin AREF (0–5 V) sebagai batas atas rentang. Dengan sensor yang mengeluarkan 0–1 V, referensi 1,1 V memperkecil satu langkah menjadi sekitar 1,1 mV dan membuat pengukuran sekitar 4,5 kali lebih halus. Komponen seperti potensiometer, LDR, dan sensor kelembapan tanah disambungkan ke pin-pin ini; detail konversi analog ke digital ada di artikel ADC, dan contoh praktisnya ada di artikel potensiometer.

Jika kamu memberi tegangan eksternal ke pin AREF, selalu panggil analogReference(EXTERNAL) sebelum analogRead() pertama. Kalau tidak, referensi internal chip dan tegangan eksternal terhubung singkat dan mikrokontroler bisa rusak. Dan jangan pernah memberi lebih dari 5 V, atau tegangan negatif, ke pin analog.

Pin daya: Vin, 5V, 3.3V, GND, IOREF, dan RESET

PinFungsinyaBatas dan peringatan
VinMenyediakan tegangan dari jack, atau memberi daya board dengan 7–12 VMelewati dioda pelindung polaritas terbalik, perhatikan polaritasnya
5VOutput 5 V dari regulator atau USBSekring 500 mA di USB; hanya beri 5 V yang sudah teregulasi
3.3VOutput 3,3 V dari regulator di boardMaks. 50 mA; untuk modul kecil seperti RC522
GNDGround bersama (2 di bawah, 1 di atas)GND setiap catu daya eksternal harus disatukan di sini
IOREFMemberi tahu shield tegangan logika boardTersambung ke 5V di Uno, bukan untuk memberi daya
RESETMemulai ulang board ketika ditarik ke LOWDipakai tombol reset pada shield
AREFInput referensi eksternal untuk pembacaan analog0–5 V; panggil analogReference(EXTERNAL) dulu
NC (pin tanpa label)Dicadangkan untuk pemakaian di masa depan pada R3Tidak tersambung ke apa pun

Uno bisa diberi daya dengan tiga cara. Lewat USB, board mengambil 5 V langsung dari komputer, dan sekring resettable 500 mA melindungi port komputer. Jika kamu memberi 7–12 V lewat jack DC atau Vin, regulator di board menurunkannya ke 5 V; jika keduanya tersambung, board otomatis beralih ke catu daya eksternal begitu Vin naik di atas sekitar 6,6 V. Karena regulator mengubah kelebihan tegangan menjadi panas, menarik beberapa ratus mA dari pin 5V dengan input 12 V membuatnya cepat panas. Cara paling sehat adalah memberi daya beban seperti servo, motor, dan LED strip dari catu daya terpisah dan hanya menyatukan GND-nya. Untuk pilihan baterai dan lama pemakaian, pakai kalkulator umur baterai, dan baca semua cara memberi daya di Cara Memberi Daya Arduino.

Jangan pernah memberi lebih dari 5 V ke pin 5V: regulator dilewati, dan apa pun di atas 6 V bisa merusak ATmega328P. Tanpa sengaja menyambungkan baterai 9 V ke pin 5V adalah salah satu cara paling umum pemula merusak board. Selalu sambungkan baterai ke jack DC atau pin Vin.

Kenapa pin 0 dan 1 sebaiknya dibiarkan kosong?

Pin 0 (RX) dan 1 (TX) adalah satu-satunya port serial hardware ATmega328P, dan di board keduanya tersambung lewat resistor 1 kΩ ke chip konverter USB-serial (ATmega16U2). Komputermu memakai kedua pin ini ketika meng-upload kode dan ketika mengirim teks ke Serial Monitor. Jika jalur TX modul Bluetooth atau sinyal lain tersambung ke pin 0, kedua sumber berebut jalur yang sama dan upload berhenti dengan avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00. Selain itu, pin 1 berganti-ganti dengan cepat setiap kali Serial.print() berjalan, jadi LED atau relay yang tersambung di sana menyala-mati secara acak.

Jadi biarkan 0 dan 1 kosong sampai pin lain habis. Jika kamu perlu menyambungkan modul serial seperti HC-05, GPS, atau pemutar MP3, library SoftwareSerial membuat port serial kedua di dua pin lain. Sketch di bawah menyambungkan modul ke pin 8 (RX) dan 7 (TX); apa pun yang kamu ketik di Serial Monitor diteruskan ke modul, dan apa pun yang dikirim modul diteruskan ke komputer. Dengan modul berlogika 3,3 V seperti HC-05, sambungkan output TX Uno (pin 7) ke pin RX modul lewat pembagi tegangan. Semua solusi masalah upload ada di Kode Arduino Gagal Di-upload, dan logika komunikasi serial ada di Komunikasi Serial UART.

C++ (Arduino IDE)
1#include <SoftwareSerial.h>
2
3SoftwareSerial moduleSerial(8, 7);   // RX = 8, TX = 7; 0 ve 1 boş kalır / 0 and 1 stay free
4
5void setup() {
6  Serial.begin(9600);                // USB üzerinden bilgisayar / computer over USB
7  moduleSerial.begin(9600);          // HC-05 veri modu hızı / HC-05 data mode baud rate
8  Serial.println(F("Seri kopru hazir / Serial bridge ready"));
9}
10
11void loop() {
12  if (moduleSerial.available()) {
13    Serial.write(moduleSerial.read());   // modülden bilgisayara / module to computer
14  }
15  if (Serial.available()) {
16    moduleSerial.write(Serial.read());   // bilgisayardan modüle / computer to module
17  }
18}

Pin komunikasi: I2C (A4/A5), SPI (10–13), dan pin interupsi (2, 3)

I2C memungkinkanmu menyambungkan puluhan perangkat ke bus yang sama hanya dengan dua kabel (SDA dan SCL); layar LCD, OLED, modul jam RTC, dan sensor seperti BME280 semuanya memakainya. Di Uno, SDA = A4 dan SCL = A5. Pada board R3, pin SDA dan SCL di samping AREF bukan bus terpisah, melainkan tersambung di dalam ke A4 dan A5, jadi kamu tidak bisa memakai A4 dan A5 untuk pembacaan analog selama I2C dipakai. Library Wire bawaannya bekerja di 100 kHz dan bisa sampai 400 kHz dengan Wire.setClock(400000). Alamat, resistor pull-up, dan sketch I2C scanner dibahas di Apa Itu I2C?, dan contoh praktisnya di Cara Memakai Layar LCD I2C.

SPI lebih cepat tapi butuh lebih banyak kabel: MOSI = 11, MISO = 12, SCK = 13, dan SS (CS) = 10. Modul kartu SD, pembaca RFID, dan layar TFT memakai SPI. Beberapa perangkat bisa berbagi bus: MOSI, MISO, dan SCK dipakai bersama, dan setiap perangkat mendapat pin CS-nya sendiri. Satu detail penting: selama SPI dalam mode master, pin 10 harus tetap menjadi output; jika kamu menjadikan pin 10 input dan pin itu tertarik ke LOW, ATmega328P beralih sendiri ke mode slave dan SPI berhenti. MISO, MOSI, dan SCK juga ada di header ICSP, dan beberapa shield mengakses SPI dari sana. Untuk detailnya, lihat Apa Itu SPI? dan RFID RC522.

Interupsi memungkinkanmu menangkap perubahan di pin secara instan, apa pun yang sedang dikerjakan loop() pada momen itu. Di Uno, interupsi eksternal hanya ada di pin 2 (INT0) dan 3 (INT1): kamu menulis attachInterrupt(digitalPinToInterrupt(2), function, FALLING), dan mode pemicunya bisa LOW, CHANGE, RISING, atau FALLING. Encoder, sensor RPM, sensor aliran air, dan tombol yang tidak boleh terlewat dipasang di pin-pin ini. Pin lain juga punya “pin change interrupt” (PCINT), tapi pin di port yang sama berbagi satu fungsi interupsi dan kodemu harus mencari tahu pin mana yang berubah. Aturan dan contohnya ada di Interupsi Arduino.

FungsiArduino UnoESP32 (DevKit)Raspberry Pi Pico
I2C SDA / SCLA4 / A5GPIO 21 / 22GP4 / GP5
SPI MOSI / MISO / SCK / CS11 / 12 / 13 / 10GPIO 23 / 19 / 18 / 5GP19 / GP16 / GP18 / GP17
UART TX / RX1 / 0GPIO 1 / 3 (tersambung ke USB)GP0 / GP1
Interupsi eksternalHanya 2 dan 3Semua GPIOSemua GPIO
PWM6 pinHampir semua pin yang bisa menjadi outputSemua GPIO
Input analog6 pin, 10 bitADC1: GPIO 32–39, 12 bitGP26, GP27, GP28; 12 bit
Level logika5 V3,3 V (tidak tahan 5 V)3,3 V (tidak tahan 5 V)
Arus per pin20 mA (maks. 40 mA)Sekitar 20 mA dianjurkanBawaan 4 mA, maks. 12 mA

Ketika kamu pindah ke ESP32 atau Pico, perbedaan terbesarnya adalah tegangan: kedua board bekerja di 3,3 V dan pin-pinnya tidak tahan 5 V, jadi modul 5 V yang kamu sambungkan langsung ke Uno mungkin butuh konverter level. Di sisi lain, board-board ini menyediakan interupsi dan PWM di hampir semua pin, dan bus I2C serta SPI-nya bisa dipindah ke pin lain. Untuk membandingkan board, baca Arduino vs ESP32, dan untuk melihat peta pin pakai alat pinout; board-board itu sendiri dibahas di Apa Itu ESP32? dan Apa Itu Raspberry Pi Pico?.

Untuk apa header ICSP?

ICSP (In-Circuit Serial Programming) adalah header 2×3 yang dipakai untuk memprogram mikrokontroler langsung lewat jalur SPI, tanpa USB atau bootloader. ICSP di sisi kanan board milik ATmega328P, sedangkan ICSP1 kecil di samping soket USB milik chip USB-serial (ATmega16U2). Kamu tidak akan menyentuhnya dalam pemakaian sehari-hari, tapi ICSP berperan ketika bootloader rusak, ketika kamu menanam bootloader ke ATmega328P baru, atau ketika kamu meng-upload kode dengan programmer seperti USBasp. Jika kamu mengubah Uno kedua menjadi programmer dengan contoh ArduinoISP, pin 10, 11, 12, dan 13 dari programmer ke jalur RESET, MOSI, MISO, dan SCK board target, dan kapasitor 10 µF antara RESET dan GND di Uno programmer mencegah auto-reset-nya. Untuk mengetahui apakah board-mu rusak, lihat Apakah Arduino-ku Rusak?.

Pin ICSPSinyalPadanan di Uno
1MISOD12
2VCC (+5 V)5V
3SCKD13
4MOSID11
5RESETRESET
6GNDGND

20 mA per pin, 200 mA total: batas arus

Pin Uno aman dipakai paling banyak 20 mA. Angka 40 mA di datasheet ATmega328P adalah maksimum mutlak, nilai yang jika dilewati bisa merusak chip secara permanen, bukan nilai kerja. Arus total yang lewat pin VCC dan GND chip tidak boleh melebihi 200 mA. Datasheet juga membagi pin menjadi beberapa kelompok: ketika mengeluarkan arus (HIGH), D0–D4 bersama A0–A5, dan D5–D13 di antara mereka sendiri, masing-masing sebaiknya di bawah 150 mA; ketika menyerap arus (LOW), kelompok D0–D4, D5–D13, dan A0–A5 masing-masing sebaiknya di bawah 100 mA. Ketika kamu menyalakan LED merah dari 5 V lewat resistor 220 Ω, arusnya (5 − 2) / 220 ≈ 13,6 mA. Sepuluh LED yang menyala sekaligus berjumlah 136 mA; itu di bawah 200 mA, tapi jika semuanya di kelompok yang sama, angkanya sangat dekat dengan batas kelompok 150 mA. Jika LED disambung agar menyala ketika pin LOW (resistor dari 5V ke pin) dan sebagian besar ada di kelompok yang sama, batas 100 mA terlampaui. Sebar LED ke beberapa kelompok atau naikkan resistornya ke 330–470 Ω. Cari resistor yang tepat dengan kalkulator resistor LED atau kalkulator hukum Ohm.

  • Motor: Bahkan motor DC kecil menarik ratusan mA dan menghasilkan lonjakan tegangan; pakai driver motor seperti L298N atau transistor.
  • Kumparan relay: Kumparan relay 5 V menarik sekitar 70–90 mA; pakai modul relay yang punya transistor dan dioda.
  • Motor servo: Kabel sinyal boleh ke pin, tapi daya servo sebaiknya dari catu daya terpisah, bukan pin 5V; detailnya di artikel motor servo.
  • LED strip dan LED daya tinggi: Strip 12 V dan LED 1 W butuh MOSFET logic-level.
  • Hubungan singkat: Menyambungkan output yang sedang HIGH langsung ke GND menarik arus jauh lebih dari 40 mA dari pin dan merusaknya selamanya.

Sketch uji: mencoba pin digital, PWM, analog, dan interupsi sekaligus

  1. Sambungkan LED ke pin 9 lewat resistor 220 Ω: kaki panjang ke resistor, kaki pendek ke GND.
  2. Sambungkan dua kaki luar potensiometer ke 5V dan GND, dan kaki tengahnya ke A0.
  3. Sambungkan tombol antara pin 2 dan GND; tidak perlu resistor terpisah karena pull-up internal dipakai.
  4. Upload sketch, buka Serial Monitor, dan atur ke 9600 baud.
  5. Putar potensiometer: kecerahan LED di pin 9 berubah, LED L bawaan (pin 13) menyala begitu tegangan melewati 2,5 V, dan penghitung naik satu setiap kali tombol ditekan.
C++ (Arduino IDE)
1const byte BUTTON_PIN = 2;    // kesme pini INT0 / interrupt pin INT0
2const byte PWM_LED    = 9;    // ~9: PWM çıkışı / PWM output
3const byte STATUS_LED = 13;   // kart üzerindeki L LED'i / onboard L LED
4const byte POT_PIN    = A0;   // analog giriş / analog input
5
6volatile unsigned int pressCount = 0;   // ISR içinde değişir / changed inside the ISR
7
8void onButton() {
9  static unsigned long lastPressMs = 0;
10  unsigned long now = millis();
11  if (now - lastPressMs > 50) {         // 50 ms sıçrama filtresi / 50 ms debounce
12    pressCount++;
13    lastPressMs = now;
14  }
15}
16
17void setup() {
18  Serial.begin(9600);                   // 0 ve 1 numaralı pinleri kullanır / uses pins 0 and 1
19  pinMode(STATUS_LED, OUTPUT);
20  pinMode(PWM_LED, OUTPUT);
21  pinMode(BUTTON_PIN, INPUT_PULLUP);    // dahili pull-up direnci / internal pull-up resistor
22  attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), onButton, FALLING);
23}
24
25void loop() {
26  int raw = analogRead(POT_PIN);        // 0-1023 arası ham değer / raw value 0-1023
27  float volts = raw * 5.0 / 1023.0;     // volta çevir / convert to volts
28  analogWrite(PWM_LED, raw / 4);        // 0-255 arası PWM / PWM from 0 to 255
29  digitalWrite(STATUS_LED, volts > 2.5 ? HIGH : LOW);   // 2,5 V eşiği / 2.5 V threshold
30
31  noInterrupts();                       // sayacı güvenle kopyala / copy the counter safely
32  unsigned int presses = pressCount;
33  interrupts();
34
35  Serial.print(F("A0: "));
36  Serial.print(raw);
37  Serial.print(F("  V: "));
38  Serial.print(volts, 2);
39  Serial.print(F("  Buton / Button: "));
40  Serial.println(presses);
41  delay(200);
42}

Sketch ini memakai empat jenis pin Uno sekaligus. analogRead(A0) membaca nilai dari 0 sampai 1023, dan raw / 4 memperkecilnya ke rentang 0–255 yang diharapkan analogWrite(). Agar pantulan kontak tidak ikut terhitung, fungsi interupsi mengabaikan sinyal yang datang kurang dari 50 ms setelah tekanan terakhir. Penghitung yang diubah di dalam interupsi dideklarasikan volatile, dan loop() menyalinnya selagi interupsi dihentikan sebentar, karena Uno 8 bit membaca angka 16 bit dalam dua langkah dan interupsi yang datang di antaranya bisa menghasilkan nilai yang salah. Pin 0 dan 1 hanya dipakai untuk Serial, jadi tidak ada hal lain yang disambungkan ke sana.

Contoh rencana pin: komponen mana ke pin mana?

Menyebar pin secara acak di proyek dengan banyak komponen menimbulkan bentrokan. Tempatkan dulu komponen yang punya peran khusus (I2C, SPI, interupsi, PWM) di pin-nya sendiri, lalu bagikan tugas digital sederhana ke pin yang kosong. Di bawah ini contoh rencana untuk kunci pintu kartu RFID: pembaca RC522, LCD I2C, servo, buzzer, tombol, dan dua LED. Karena servo dan tone() dipakai bersamaan, PWM di 3, 9, 10, dan 11 sudah tidak bisa dipakai, dan rencana ini sudah memperhitungkannya.

KomponenPin UnoKenapa pin ini?
RC522 SDA (SS)10Pin SS milik SPI; harus tetap output
RC522 SCK / MOSI / MISO13 / 11 / 12Pin SPI hardware tidak bisa diubah
RC522 RST9Pin digital apa pun bisa; PWM di 9 memang tidak bisa dipakai karena servo
RC522 VCC3.3VModul bekerja di 3,3 V dan arusnya di bawah batas 50 mA
SDA / SCL LCD I2CA4 / A5Satu-satunya bus I2C di Uno
Sinyal servo6Library Servo bekerja di pin mana saja; daya dari 5 V eksternal
Buzzer8tone() bekerja di pin mana saja, jadi tidak ada pin PWM yang terbuang
Tombol2Pin interupsi; tidak perlu resistor dengan INPUT_PULLUP
LED hijau / merah4 / 7Pin digital biasa tanpa fungsi tambahan
Dibiarkan kosong0, 1, 3, 5, A0–A3Jalur serial tetap kosong; 3 untuk interupsi kedua, 5 untuk PWM, A0–A3 untuk sensor

Perbedaan pin Arduino Uno R3 dan R4

FiturUno R3Uno R4 (Minima / WiFi)
MikrokontrolerATmega328P, 8 bit, 16 MHzRenesas RA4M1, 32 bit, 48 MHz
Tata letak pinUno standarSama; shield tetap pas
Arus per pin20 mA8 mA
Resolusi analog10 bitBawaan 10 bit, sampai 14 bit
Output analog sungguhan (DAC)Tidak adaDAC 12 bit di A0
Pin 0 dan 1Dipakai bersama USB (Serial)Terpisah dari USB (Serial1)
Rentang Vin7–12 V dianjurkan6–24 V
USBUSB-B, lewat ATmega16U2USB-C; langsung ke prosesor di Minima, lewat jembatan ESP32-S3 di WiFi

Singkatnya, nomor dan fungsi pin tetap sama di R4 (PWM ~3, 5, 6, 9, 10, 11; I2C A4/A5; SPI 10–13; interupsi 2, 3), tapi arus per pin turun menjadi 8 mA. LED yang di R3 kamu nyalakan langsung dari pin butuh resistor lebih besar di R4 (misalnya 1 kΩ untuk sekitar 3 mA) atau transistor. Perbandingan rincinya ada di Arduino Uno R4. Jika kamu mencari board yang lebih kecil, Pinout Arduino Nano dan Arduino Mana yang Sebaiknya Kubeli? akan membantu.

Kesalahan umum dan cara memperbaikinya

GejalaPenyebabSolusi
Sketch tidak mau di-upload, error “not in sync”Ada modul yang tersambung ke pin 0 atau 1Cabut modul selama upload atau pindahkan ke pin lain dengan SoftwareSerial
Kecerahan LED berhenti berubah setelah menambahkan servoLibrary Servo mematikan PWM di 9 dan 10Pindahkan LED ke 3, 5, 6, atau 11
Kecepatan motor kacau selama buzzer berbunyitone() memakai Timer2, yang memengaruhi 3 dan 11Pindahkan PWM ke 5, 6, 9, atau 10
Nilai analog bergeser sendiriPin mengambang atau impedansi sumber terlalu tinggiSambungkan sensor dengan kokoh, baca dua kali jika perlu
Tombol seperti ditekan secara acakPin input mengambangPakai INPUT_PULLUP atau tambahkan resistor 10 kΩ
A4/A5 membaca nilai salah ketika layar I2C tersambungA4/A5 dipakai bersama bus I2CSambungkan sensor analog ke A0–A3
Modul SPI tidak meresponsPin 10 dijadikan input atau CS-nya salahBiarkan pin 10 tetap output, beri setiap perangkat CS-nya sendiri
Board panas atau reset sendiriArus yang ditarik dari pin atau pin 5V terlalu besarBeri daya beban dari catu daya terpisah dan satukan GND-nya
Sebelum memulai proyek, buat sketsa rencana pin kecil di kertas: komponen, pin, kegunaan. Di bagian atas kodemu, definisikan pin sebagai konstanta bernama seperti const byte LED_PIN = 9; sehingga memindahkan komponen ke pin lain hanya berarti mengubah satu baris. Jika board-mu tiba-tiba memulai ulang, ikuti langkah diagnosis di Arduino Terus Reset.

Begitu kamu mengenal pin Arduino Uno, kamu tidak perlu menghafal di mana setiap komponen dipasang; kamu melihat apa yang dibutuhkan komponen dan memilih pin yang tepat sendiri. Jika kamu ingin mengulang dasar-dasarnya, mulailah dari Apa Itu Arduino?. Di aplikasi BlueGrays kamu akan menemukan proyek seperti menyalakan LED, membaca tombol, mengukur cahaya dengan LDR, LED RGB dengan PWM, LCD I2C, RFID, dan dua Arduino yang berkomunikasi lewat jalur serial, masing-masing langkah demi langkah dengan skema rangkaian yang menunjukkan kenapa setiap pin dipilih dan kode siap pakai.

Pertanyaan umum

Berapa jumlah pin Arduino Uno?

Arduino Uno R3 punya 14 pin input/output digital (0–13) dan 6 input analog (A0–A5); karena pin analog juga bisa dipakai sebagai pin digital, totalnya 20 pin sinyal. Enam pin digital menyediakan PWM. Selain itu ada pin daya dan kendali seperti Vin, 5V, 3.3V, GND, IOREF, AREF, dan RESET, plus header ICSP 6 pin.

Pin mana yang PWM di Arduino Uno?

Pin PWM adalah 3, 5, 6, 9, 10, dan 11, ditandai dengan ~ di samping nomornya di board. Pin 5 dan 6 bekerja di sekitar 980 Hz, yang lain di sekitar 490 Hz. PWM di 9 dan 10 terpengaruh ketika library Servo dipakai, dan PWM di 3 dan 11 ketika tone() dipakai.

Bisakah pin analog Arduino dipakai sebagai pin digital?

Bisa. Di Uno, pin A0–A5 bekerja seperti pin digital biasa dengan pinMode, digitalWrite, dan digitalRead, dan sesuai dengan nomor 14–19. Jadi kamu bisa menyambungkan LED ke A0 atau tombol ke A3. Satu-satunya pengecualian, A4 dan A5 dipakai untuk bus selama kamu memakai I2C.

Berapa arus yang bisa diberikan satu pin Arduino Uno?

Kamu bisa menarik 20 mA dengan aman dari satu pin; 40 mA adalah maksimum mutlak, dan melewatinya bisa merusak pin secara permanen. Total semua pin tidak boleh melebihi 200 mA. Karena itu LED disambung lewat resistor, sedangkan beban seperti motor dan relay dikendalikan dengan transistor, MOSFET, atau modul driver.

Bisakah aku memakai pin 0 dan 1 di Arduino Uno?

Bisa, tapi tidak dianjurkan. Pin ini tersambung ke chip USB-serial, dan komputer memakai jalur ini ketika meng-upload kode dan memakai Serial Monitor. Dengan modul yang tersambung ke pin 0, upload bisa gagal dengan error “not in sync”, jadi pakai pin ini paling akhir atau pindah ke pin lain dengan SoftwareSerial.

Apa itu pin SDA dan SCL di Arduino Uno?

Di Uno, jalur SDA bus I2C adalah pin A4 dan SCL adalah pin A5. Board R3 juga punya dua pin tambahan berlabel SDA dan SCL di samping AREF, tapi keduanya tersambung di dalam ke A4 dan A5 dan bukan bus terpisah. Di ESP32, pin I2C bawaannya GPIO 21 dan 22; di Raspberry Pi Pico, I2C bisa dipindah ke banyak pin, dan GP4 (SDA) serta GP5 (SCL) adalah pilihan yang paling umum.

Lihat semua proyek
LED Berkedip
#1Pemula

LED Berkedip

"Halo" pertama di dunia elektronika: menyalakan dan mematikan satu LED. Arduino menyalakan dan mematikan LED dengan jeda singkat, sehingga cahayanya berkedip cepat. Kamu melihat dengan cara paling sed

4.6(188)
1127
Kendali LED dengan Tombol Tekan (Tekan)
#9Pemula

Kendali LED dengan Tombol Tekan (Tekan)

Persis seperti bel pintu: lampu tetap menyala selama kamu menekan, dan mati ketika kamu melepasnya. Arduino terus mendengarkan tombol; selama ditekan LED menyala, dan begitu jarimu terangkat LED mati.

4.8(113)
229
Mengukur Intensitas Cahaya dengan LDR
#11Pemula

Mengukur Intensitas Cahaya dengan LDR

Ingin melihat seberapa terang kamarmu dalam bentuk angka? LDR, komponen kecil yang bereaksi terhadap cahaya, mengukur cahaya di sekitarnya, dan Arduino menulis nilainya ke layar komputermu setiap sete

4.6(81)
139
Pengukuran Jarak HC-SR04 (Tampilan Serial)
#27Pemula

Pengukuran Jarak HC-SR04 (Tampilan Serial)

Sensor HC-SR04 bekerja persis seperti kelelawar yang mencari jalan dalam gelap: ia mengirim suara yang tidak bisa kamu dengar, mendengarkan pantulannya, dan mengukur seberapa jauh benda di depannya. A

4.6(46)
71
Transisi Warna Halus dengan LED RGB
#40Pemula
Premium

Transisi Warna Halus dengan LED RGB

Satu LED RGB perlahan bergeser dari merah ke hijau, hijau ke biru, lalu kembali ke merah, berputar melewati warna pelangi tanpa pernah berhenti. Setiap peralihan butuh sekitar dua setengah detik, dan

4.8(58)
76
Menggunakan Layar LCD dengan I2C
#32Pemula
Premium

Menggunakan Layar LCD dengan I2C

Beri Arduino-mu layar sendiri dan buat ia menulis pesan pertamanya. Layar LCD dua baris tersambung hanya dengan beberapa kabel; sapaan muncul di baris atas, lalu pesan kedua di baris bawah, layar dibe

4.8(53)
70
Membaca Nilai RFID
#53Pemula
Premium

Membaca Nilai RFID

Gantungan kunci akses gedung atau kartu aksesmu menyimpan nomor ID rahasia, dan proyek ini membacanya. Dekatkan kartu ke pembaca RFID dan Arduino menulis nomor kartunya ke layar komputermu. Langkah pe

4.7(47)
61
Komunikasi Satu Arah Antara 2 Arduino
#57Menengah
Premium

Komunikasi Satu Arah Antara 2 Arduino

Kamu membuat dua Arduino berbicara lewat satu kabel: tekan tombol di satu board dan LED di board lain menyala, tekan lagi dan LED mati. Board pengirim melaporkan tekanan tombol dengan pesan singkat, d

4.4(37)
50