Arduino Uno Pinleri: Dijital, PWM, Analog ve Güç Pinleri Rehberi
Arduino Uno pinleri tek tabloda: dijital 0–13, PWM ~3, 5, 6, 9, 10, 11, analog A0–A5, Vin, 5V, 3.3V, I2C, SPI, kesme pinleri ve pin başına 20 mA sınırı.
Arduino Uno pinleri, kartın iki uzun kenarındaki siyah dişi konnektörlere dizilmiş 32 bağlantı noktasıdır: 14 dijital giriş/çıkış pini (0–13), bunlardan PWM verebilen 6 pin (~3, 5, 6, 9, 10, 11), 6 analog giriş (A0–A5) ve kartı besleyen ya da dışarıya güç veren güç pinleri (Vin, 5V, 3.3V, GND, IOREF, AREF, RESET). Her pinin bir ana görevi vardır ama birçoğu ikinci bir görev de taşır: A4 ve A5 aynı zamanda I2C hattıdır, 10–13 SPI hattıdır, 2 ve 3 kesme (interrupt) pinidir, 0 ve 1 ise bilgisayarla konuşan seri hattır.
Doğru pini seçmek, projenin ilk denemede çalışmasıyla saatlerce hata aramak arasındaki farktır. Servo bağlayınca 9 ve 10 numaralı pinlerdeki PWM'in neden durduğunu, Bluetooth modülü takılıyken kodun neden yüklenmediğini ya da birkaç LED'in kartı neden zorladığını bu yazıdaki tablolarla kolayca anlayacaksın. Sonunda tüm pin türlerini aynı anda deneyen bir test kodu, örnek bir pin planı ve Uno R3 ile R4 arasındaki pin farklarını da bulacaksın.

Arduino Uno pin diyagramı: hangi pin nerede?
Kartı USB girişi ve güç jakı sol tarafta kalacak şekilde önüne koy. Üst kenardaki iki konnektörde dijital pinler bulunur; numaralar sağdan sola doğru artar, yani en sağdaki pin 0 (RX), en soldaki dijital pin 13'tür. Alt kenarda soldaki konnektör güç pinlerini, sağdaki konnektör analog girişleri taşır. Numaranın yanındaki ~ (dalga) işareti o pinin PWM verebildiğini gösterir. Kartın sağ kenarındaki 2×3'lük erkek pin grubu ise ICSP konnektörüdür.
| Konnektör | Pinler (soldan sağa) | Görevi |
|---|---|---|
| Üst sol (10 pin) | SCL, SDA, AREF, GND, 13, 12, ~11, ~10, ~9, 8 | I2C kopyası, analog referans, SPI ve dijital pinler |
| Üst sağ (8 pin) | 7, ~6, ~5, 4, ~3, 2, TX→1, RX←0 | Dijital pinler, kesme pinleri ve seri hat |
| Alt sol (8 pin) | Boş (NC), IOREF, RESET, 3.3V, 5V, GND, GND, Vin | Güç pinleri |
| Alt sağ (6 pin) | A0, A1, A2, A3, A4, A5 | Analog girişler (A4/A5 aynı zamanda I2C) |
| Sağ kenar (2×3) | 1 MISO, 2 5V, 3 SCK, 4 MOSI, 5 RESET, 6 GND | ICSP programlama konnektörü |
| Özellik | Arduino Uno R3 |
|---|---|
| Mikrodenetleyici | ATmega328P, 16 MHz |
| Çalışma (lojik) gerilimi | 5 V |
| Giriş gerilimi (jak / Vin) | Önerilen 7–12 V, sınır 6–20 V |
| Dijital giriş/çıkış | 14 pin (D0–D13) |
| PWM çıkışı | 6 pin: 3, 5, 6, 9, 10, 11 |
| Analog giriş | 6 pin (A0–A5), 10 bit (0–1023) |
| Pin başına akım | 20 mA önerilen, 40 mA mutlak sınır |
| Toplam akım (VCC/GND) | 200 mA |
| 3.3V pini akımı | En çok 50 mA |
| Bellek | 32 KB flash (0,5 KB bootloader), 2 KB SRAM, 1 KB EEPROM |
Büyük pin tablosu: D0–D13 ve A0–A5
| Pin | Port | Ana görev | Ek görev | Not |
|---|---|---|---|---|
| D0 (RX) | PD0 | Dijital G/Ç | UART RX (Serial) | USB-seri yongaya bağlı, boş bırak |
| D1 (TX) | PD1 | Dijital G/Ç | UART TX (Serial) | USB-seri yongaya bağlı, boş bırak |
| D2 | PD2 | Dijital G/Ç | Harici kesme INT0 | Buton, enkoder, devir sayma |
| D3 ~ | PD3 | Dijital G/Ç, PWM 490 Hz | Harici kesme INT1, Timer2 | tone() çalarken PWM bozulur |
| D4 | PD4 | Dijital G/Ç | - | Ek görevi yok, rahat kullanılır |
| D5 ~ | PD5 | Dijital G/Ç, PWM 980 Hz | Timer0 | millis() ile aynı zamanlayıcı |
| D6 ~ | PD6 | Dijital G/Ç, PWM 980 Hz | Timer0 | millis() ile aynı zamanlayıcı |
| D7 | PD7 | Dijital G/Ç | - | Ek görevi yok, rahat kullanılır |
| D8 | PB0 | Dijital G/Ç | - | Ek görevi yok, rahat kullanılır |
| D9 ~ | PB1 | Dijital G/Ç, PWM 490 Hz | Timer1 | Servo kütüphanesi PWM'ini kapatır |
| D10 ~ | PB2 | Dijital G/Ç, PWM 490 Hz | SPI SS, Timer1 | SPI'da çıkış olarak kalmalı |
| D11 ~ | PB3 | Dijital G/Ç, PWM 490 Hz | SPI MOSI, Timer2 | ICSP konnektöründe de var |
| D12 | PB4 | Dijital G/Ç | SPI MISO | ICSP konnektöründe de var |
| D13 | PB5 | Dijital G/Ç | SPI SCK | Kart üzerindeki L LED'i bu pinde |
| A0 | PC0 | Analog giriş | Dijital 14 | - |
| A1 | PC1 | Analog giriş | Dijital 15 | - |
| A2 | PC2 | Analog giriş | Dijital 16 | - |
| A3 | PC3 | Analog giriş | Dijital 17 | - |
| A4 | PC4 | Analog giriş | I2C SDA, dijital 18 | I2C kullanılırken analog okunmaz |
| A5 | PC5 | Analog giriş | I2C SCL, dijital 19 | I2C kullanılırken analog okunmaz |
Dijital pinler (0–13) nasıl çalışır?
Her dijital pin pinMode() ile giriş ya da çıkış yapılır. Çıkışta digitalWrite(pin, HIGH) pini yaklaşık 5 V'a, LOW ise 0 V'a çeker. Girişte digitalRead() gerilimi bir eşikle karşılaştırır: ATmega328P 5 V ile çalışırken 3,0 V'un üzeri kesin HIGH, 1,5 V'un altı kesin LOW sayılır, arası belirsiz bölgedir. Bu yüzden 3,3 V'luk bir sensörün çıkışı Uno'da çoğunlukla HIGH okunur; ama Uno'nun 5 V'luk çıkışı 3,3 V'luk bir modülün girişine doğrudan verilmemelidir, araya bir seviye dönüştürücü gerekir.
Hiçbir yere bağlı olmayan bir giriş pini havada kalır ve elini yaklaştırmanla bile rastgele HIGH ya da LOW okur. Çözüm, pini bir dirençle sabit bir seviyeye çekmektir: pinMode(pin, INPUT_PULLUP) çipin içindeki 20–50 kΩ'luk direnci açar, buton da pin ile GND arasına bağlanır. Ayrıntılar Arduino'ya buton nasıl bağlanır yazısında. Pin 13'e kart üzerindeki L LED'i bağlıdır; orijinal R3'te bu LED bir op-amp tamponuyla sürüldüğü için pini giriş olarak kullanmak sorun çıkarmaz, ama bazı klon kartlarda LED ve direnci doğrudan pine bağlıdır ve dahili pull-up ile buton okumayı bozabilir.
PWM pinleri (~3, 5, 6, 9, 10, 11) ve zamanlayıcılar
Uno gerçek bir analog çıkış üretemez; bunun yerine bu altı pinde PWM, yani çok hızlı açılıp kapanan bir kare dalga verir. analogWrite(pin, değer) ile dalganın açık kalma oranı 0–255 arasında ayarlanır: 0 tamamen kapalı, 127 yaklaşık yarı yarıya, 255 tamamen açık demektir. LED parlaklığı, motor hızı ve fan devri böyle kontrol edilir. Altı PWM pini, üç donanım zamanlayıcısına (timer) ikişer ikişer bağlıdır ve bazı kütüphanelerle yaşanan çakışmaların sebebi budur. PWM'in mantığı ve duty cycle hesabı PWM nedir yazısında anlatılıyor.
| Zamanlayıcı | PWM pinleri | Frekans | Bu zamanlayıcıyı kim kullanır? |
|---|---|---|---|
| Timer0 (8 bit) | 5, 6 | Yaklaşık 980 Hz | millis(), delay() ve micros() |
| Timer1 (16 bit) | 9, 10 | Yaklaşık 490 Hz | Servo kütüphanesi |
| Timer2 (8 bit) | 3, 11 | Yaklaşık 490 Hz | tone() ve IRremote gibi kütüphaneler |
Analog pinler (A0–A5) ve AREF
Analog pinler 0–5 V arasındaki gerilimi 10 bit çözünürlükle ölçer ve analogRead() 0–1023 arası bir sayı döndürür. Bir adım yaklaşık 4,9 mV'tur; sayıyı volta çevirmek için gerilim = değer × 5,0 / 1023 formülünü kullanırsın, örneğin 512 okuması yaklaşık 2,5 V demektir. Altı pin tek bir ADC'yi sırayla paylaşır ve bir okuma yaklaşık 100 µs sürer, yani saniyede yaklaşık 10.000 okuma yapılabilir. Doğru ölçüm için sensörün çıkış direnci 10 kΩ'u geçmemelidir; daha yüksekse iki pini art arda okurken değerler birbirine karışabilir, ilk okumayı atıp ikinciyi kullanmak bu sorunu çözer. 5 V'tan yüksek gerilimleri ölçmek için gerilim bölücü hesaplayıcı ile uygun dirençleri seçebilirsin.
AREF pini analog ölçümün üst sınırını değiştirmeye yarar. analogReference(DEFAULT) 5 V'u, analogReference(INTERNAL) çipin içindeki 1,1 V'luk referansı, analogReference(EXTERNAL) ise AREF pinine verdiğin gerilimi (0–5 V) üst sınır yapar. 0–1 V arası çıkış veren bir sensörde 1,1 V referans kullanırsan bir adım yaklaşık 1,1 mV'a iner ve ölçüm yaklaşık 4,5 kat hassaslaşır. Potansiyometre, LDR ve toprak nem sensörü gibi parçalar bu pinlere bağlanır; analog-dijital dönüşümün ayrıntıları ADC yazısında, pratik bir örnek de potansiyometre yazısında.
Güç pinleri: Vin, 5V, 3.3V, GND, IOREF ve RESET
| Pin | Ne yapar? | Sınır ve dikkat |
|---|---|---|
| Vin | Jaktan gelen gerilimi verir ya da kartı 7–12 V ile beslemeye yarar | Ters bağlama koruma diyotunu atlar, kutuplara dikkat |
| 5V | Regülatörden ya da USB'den gelen 5 V çıkış | USB'de 500 mA'lik sigorta; dışarıdan yalnız regüleli 5 V verilir |
| 3.3V | Kart üzerindeki regülatörden 3,3 V çıkış | En çok 50 mA; RC522 gibi küçük modüller için |
| GND | Ortak toprak (altta 2, üstte 1 adet) | Tüm harici kaynakların GND'si buraya birleşmeli |
| IOREF | Kartın lojik gerilimini shield'lara bildirir | Uno'da 5V'a bağlıdır, besleme için kullanılmaz |
| RESET | LOW yapılınca kartı yeniden başlatır | Shield üzerindeki reset düğmeleri bunu kullanır |
| AREF | Analog ölçüm için dış referans girişi | 0–5 V; önce analogReference(EXTERNAL) |
| NC (adsız pin) | R3'te ileride kullanılmak üzere ayrılmış | Hiçbir yere bağlı değil |
Uno üç yoldan beslenir. USB ile kart 5 V'u doğrudan bilgisayardan alır ve 500 mA'lik sıfırlanabilir bir sigorta bilgisayarın portunu korur. DC jak ya da Vin üzerinden 7–12 V verirsen kart üzerindeki regülatör bunu 5 V'a düşürür; ikisi birden takılıysa kart, Vin yaklaşık 6,6 V'u geçtiğinde otomatik olarak dış beslemeye geçer. Regülatör fazla gerilimi ısıya çevirdiği için 12 V girişte 5V pininden birkaç yüz mA çekmek onu hızla ısıtır. Servo, motor ve LED şerit gibi yükleri ayrı bir kaynaktan besleyip yalnızca GND'leri birleştirmek en sağlıklısıdır. Pil seçimi ve çalışma süresi için pil ömrü hesaplayıcıyı kullanabilir, tüm besleme yöntemlerini Arduino güç besleme yazısında okuyabilirsin.
0 ve 1 numaralı seri pinler neden boş bırakılır?
Uno'nun 0 (RX) ve 1 (TX) pinleri ATmega328P'nin tek donanım seri portudur ve kart üzerinde 1 kΩ'luk dirençlerle USB-seri dönüştürücü yongaya (ATmega16U2) bağlıdır. Kod yüklerken ve Serial Monitor'e yazı gönderirken bilgisayar bu iki pini kullanır. Pin 0'a bir Bluetooth modülünün TX ucu ya da başka bir sinyal bağlıysa iki kaynak aynı hatta çekişir ve yükleme avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00 hatasıyla durur. Ayrıca Serial.print() her çalıştığında pin 1 hızla değişir; oraya bağlı bir LED ya da röle rastgele tetiklenir.
Bu yüzden 0 ve 1'i diğer pinler bitmedikçe boş bırak. HC-05, GPS ya da MP3 çalar gibi bir seri modül bağlayacaksan SoftwareSerial kütüphanesiyle başka iki pinde ikinci bir seri port oluşturabilirsin. Aşağıdaki kod modülü 8 (RX) ve 7 (TX) pinlerine bağlar; Serial Monitor'e yazdığını modüle, modülden geleni bilgisayara aktarır. HC-05 gibi 3,3 V lojikli modüllerde Uno'nun TX çıkışını (pin 7) modülün RX ucuna bir gerilim bölücüyle bağla. Yükleme sorunlarının tüm çözümleri Arduino kod yüklenmiyor, seri haberleşmenin mantığı ise UART seri haberleşme yazısında.
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}Haberleşme pinleri: I2C (A4/A5), SPI (10–13) ve kesme pinleri (2, 3)
I2C yalnızca iki kabloyla (SDA ve SCL) onlarca cihazı aynı hatta bağlamanı sağlar; LCD ekranlar, OLED'ler, RTC saat modülleri ve BME280 gibi sensörler bu yolu kullanır. Uno'da SDA = A4, SCL = A5'tir. R3 kartlarda AREF'in yanındaki SDA ve SCL pinleri ayrı bir hat değildir, içeriden A4 ve A5'e bağlıdır; bu yüzden I2C kullanırken A4 ve A5'i analog okuma için kullanamazsın. Wire kütüphanesi varsayılan olarak 100 kHz'te çalışır, Wire.setClock(400000) ile 400 kHz'e çıkabilir. Adresler, pull-up dirençleri ve I2C tarayıcı kodu I2C nedir yazısında, uygulamalı bir örnek de I2C LCD ekran yazısında.
SPI daha hızlı ama daha çok kablo isteyen bir haberleşmedir: MOSI = 11, MISO = 12, SCK = 13 ve SS (CS) = 10. SD kart modülleri, RFID okuyucular ve TFT ekranlar SPI kullanır. Aynı hatta birden fazla cihaz bağlanabilir: MOSI, MISO ve SCK ortaktır, her cihaza ayrı bir CS pini verilir. Önemli bir ayrıntı: SPI ana (master) modundayken pin 10 çıkış olarak kalmalıdır; pin 10'u giriş yapıp LOW'a çekersen ATmega328P kendini uydu (slave) moduna alır ve SPI durur. MISO, MOSI ve SCK ICSP konnektöründe de vardır, bazı shield'lar SPI'ya oradan bağlanır. Ayrıntılar için SPI nedir ve RFID RC522 yazılarına bakabilirsin.
Kesme (interrupt), pindeki bir değişikliği loop() o sırada ne yapıyor olursa olsun anında yakalamanı sağlar. Uno'da harici kesme yalnızca 2 (INT0) ve 3 (INT1) numaralı pinlerdedir: attachInterrupt(digitalPinToInterrupt(2), fonksiyon, FALLING) yazarsın; tetikleme türü LOW, CHANGE, RISING ya da FALLING olabilir. Enkoder, devir sensörü, su akış sensörü ve kaçırılmaması gereken butonlar bu pinlere bağlanır. Diğer pinlerde de "pin değişim kesmesi" (PCINT) vardır, ama aynı porttaki pinler tek bir kesme fonksiyonunu paylaşır ve hangi pinin değiştiğini kodla bulman gerekir. Kurallar ve örnekler Arduino interrupt yazısında.
| Görev | Arduino Uno | ESP32 (DevKit) | Raspberry Pi Pico |
|---|---|---|---|
| I2C SDA / SCL | A4 / A5 | GPIO 21 / 22 | GP4 / GP5 |
| SPI MOSI / MISO / SCK / CS | 11 / 12 / 13 / 10 | GPIO 23 / 19 / 18 / 5 | GP19 / GP16 / GP18 / GP17 |
| UART TX / RX | 1 / 0 | GPIO 1 / 3 (USB'ye bağlı) | GP0 / GP1 |
| Harici kesme | Yalnız 2 ve 3 | Tüm GPIO'lar | Tüm GPIO'lar |
| PWM | 6 pin | Çıkış verebilen hemen tüm pinler | Tüm GPIO'lar |
| Analog giriş | 6 pin, 10 bit | ADC1: GPIO 32–39, 12 bit | GP26, GP27, GP28; 12 bit |
| Lojik seviye | 5 V | 3,3 V (5 V'a dayanıksız) | 3,3 V (5 V'a dayanıksız) |
| Pin başına akım | 20 mA (en çok 40 mA) | Yaklaşık 20 mA önerilir | Varsayılan 4 mA, en çok 12 mA |
ESP32'ye ya da Pico'ya geçerken en büyük fark gerilimdir: iki kart da 3,3 V ile çalışır ve pinleri 5 V'a dayanıklı değildir, bu yüzden Uno'ya doğrudan bağladığın 5 V'luk modüller için seviye dönüştürücü gerekebilir. Buna karşılık bu kartlarda kesme ve PWM neredeyse her pinde vardır, I2C ve SPI hatları da başka pinlere taşınabilir. Kartları karşılaştırmak için Arduino mu ESP32 mi yazısını, pin haritalarına bakmak için pin diyagramı aracını kullanabilirsin; kartların kendisi ESP32 nedir ve Raspberry Pi Pico nedir yazılarında anlatılıyor.
ICSP konnektörü ne işe yarar?
ICSP (In-Circuit Serial Programming), mikrodenetleyiciyi USB ve bootloader olmadan, doğrudan SPI hattı üzerinden programlamaya yarayan 2×3'lük konnektördür. Kartın sağ kenarındaki ICSP ATmega328P'ye, USB girişinin yanındaki küçük ICSP1 ise USB-seri yongaya (ATmega16U2) aittir. Günlük kullanımda ona hiç dokunmazsın; ama bootloader bozulduğunda, yeni bir ATmega328P'ye bootloader yazarken ya da USBasp gibi bir programlayıcıyla kod yüklerken ICSP kullanılır. İkinci bir Uno'yu ArduinoISP örneğiyle programlayıcıya çevirirsen, programlayıcının 10, 11, 12 ve 13 numaralı pinleri hedef kartın RESET, MOSI, MISO ve SCK uçlarına gider; programlayıcı Uno'nun RESET ile GND arasına takılan 10 µF'lık bir kondansatör de otomatik resetini engeller. Kartının zarar görüp görmediğini anlamak için Arduino yandı mı yazısına göz atabilirsin.
| ICSP pini | Sinyal | Uno'daki karşılığı |
|---|---|---|
| 1 | MISO | D12 |
| 2 | VCC (+5 V) | 5V |
| 3 | SCK | D13 |
| 4 | MOSI | D11 |
| 5 | RESET | RESET |
| 6 | GND | GND |
Pin başına 20 mA, toplam 200 mA: akım sınırları
Bir Uno pini en fazla 20 mA ile güvenle çalıştırılır. ATmega328P datasheet'indeki 40 mA ise mutlak sınırdır, yani aşıldığında çipin kalıcı olarak zarar görebileceği değerdir; çalışma değeri değildir. Çipin VCC ve GND uçlarından geçen toplam akım 200 mA'i geçmemelidir. Datasheet ayrıca pinleri gruplara ayırır: akım verirken (HIGH) D0–D4 ile A0–A5 birlikte, D5–D13 de kendi arasında 150 mA'i; akım çekerken (LOW) ise D0–D4, D5–D13 ve A0–A5 grupları ayrı ayrı 100 mA'i aşmamalıdır. Kırmızı bir LED'i 220 Ω dirençle 5 V'tan sürdüğünde akım (5 − 2) / 220 ≈ 13,6 mA olur. On LED aynı anda yanarsa toplam 136 mA'e çıkar; bu 200 mA'in altındadır ama hepsi aynı gruptaysa 150 mA'lik grup sınırına çok yaklaşır. LED'ler pin LOW iken yanacak şekilde (5V'tan dirençle pine) bağlıysa ve çoğu aynı gruptaysa 100 mA'lik sınır aşılır. LED'leri gruplara dağıt ya da direnci 330–470 Ω'a çıkar. Doğru direnci LED direnci hesaplayıcı ya da Ohm kanunu hesaplayıcı ile bulabilirsin.
- Motorlar: Küçük bir DC motor bile yüzlerce mA çeker ve gerilim sıçramaları üretir; L298N gibi bir motor sürücü ya da transistör kullan.
- Röle bobini: 5 V'luk bir röle bobini yaklaşık 70–90 mA çeker; transistörlü ve diyotlu bir röle modülü kullan.
- Servo motorlar: Sinyal kablosu pine bağlanabilir ama servonun beslemesi 5V pininden değil ayrı bir kaynaktan gelmeli; ayrıntılar servo motor yazısında.
- LED şeritler ve güçlü LED'ler: 12 V şeritler ve 1 W LED'ler için lojik seviye bir MOSFET gerekir.
- Kısa devre: HIGH durumdaki bir çıkışı doğrudan GND'ye bağlamak pinden 40 mA'in çok üzerinde akım çeker ve pini kalıcı olarak bozar.
Test kodu: dijital, PWM, analog ve kesme pinlerini birlikte dene
- Pin 9'a 220 Ω'luk bir dirençle bir LED bağla: uzun bacak dirence, kısa bacak GND'ye.
- Potansiyometrenin iki kenar ucunu 5V ve GND'ye, orta ucunu A0'a bağla.
- Bir butonu pin 2 ile GND arasına bağla; dahili pull-up kullanılacağı için ayrı direnç gerekmez.
- Kodu yükle, Serial Monitor'ü aç ve hızı 9600 baud yap.
- Potansiyometreyi çevir: pin 9'daki LED'in parlaklığı değişir, gerilim 2,5 V'u geçince kart üzerindeki L LED'i (pin 13) yanar, butona her basışta sayaç bir artar.
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}Kod, Uno'nun dört pin türünü aynı anda kullanır. analogRead(A0) 0–1023 arası değeri okur, raw / 4 bunu analogWrite()'ın beklediği 0–255 aralığına indirir. Butondaki kontak sıçramalarını saymamak için kesme fonksiyonu, son basıştan 50 ms geçmeden gelen sinyalleri yok sayar. Kesme içinde değişen sayaç volatile tanımlanır ve loop() içinde kesmeler kısa süre durdurularak kopyalanır; çünkü 8 bitlik Uno, 16 bitlik bir sayıyı iki adımda okur ve arada gelen bir kesme yanlış bir değer okutabilir. Pin 0 ve 1 yalnızca Serial için kullanıldığından başka hiçbir şeye bağlanmaz.
Örnek pin planı: hangi parça hangi pine?
Çok parçalı bir projede pinleri rastgele dağıtmak çakışmalara yol açar. Önce özel görevli parçaları (I2C, SPI, kesme, PWM) kendi pinlerine yerleştir, kalan basit dijital işleri boş pinlere dağıt. Aşağıda RFID kartlı bir kapı kilidi için hazırlanmış örnek bir plan var: RC522 okuyucu, I2C LCD, servo, buzzer, buton ve iki LED. Servo ve tone() birlikte kullanıldığı için 3, 9, 10 ve 11'deki PWM zaten devre dışıdır; plan bunu hesaba katar.
| Parça | Uno pini | Neden bu pin? |
|---|---|---|
| RC522 SDA (SS) | 10 | SPI'ın SS pini; çıkış olarak kalması gerekir |
| RC522 SCK / MOSI / MISO | 13 / 11 / 12 | Donanım SPI pinleri değiştirilemez |
| RC522 RST | 9 | Herhangi bir dijital pin olabilir; servo yüzünden 9'un PWM'i zaten kullanılamaz |
| RC522 VCC | 3.3V | Modül 3,3 V ile çalışır, akımı 50 mA sınırının altında |
| I2C LCD SDA / SCL | A4 / A5 | Uno'nun tek I2C hattı |
| Servo sinyali | 6 | Servo kütüphanesi her pinde çalışır; besleme harici 5 V'tan |
| Buzzer | 8 | tone() her pinde çalışır, PWM pini harcanmaz |
| Buton | 2 | Kesme pini; INPUT_PULLUP ile direnç gerekmez |
| Yeşil / kırmızı LED | 4 / 7 | Ek görevi olmayan sade dijital pinler |
| Boş kalanlar | 0, 1, 3, 5, A0–A3 | Seri hat serbest; 3 ikinci kesme, 5 PWM, A0–A3 sensör için |
Arduino Uno R3 ile R4 arasındaki pin farkları
| Özellik | Uno R3 | Uno R4 (Minima / WiFi) |
|---|---|---|
| Mikrodenetleyici | ATmega328P, 8 bit, 16 MHz | Renesas RA4M1, 32 bit, 48 MHz |
| Pin yerleşimi | Standart Uno | Aynı; shield'lar takılabilir |
| Pin başına akım | 20 mA | 8 mA |
| Analog çözünürlük | 10 bit | Varsayılan 10 bit, 14 bite kadar |
| Gerçek analog çıkış (DAC) | Yok | A0'da 12 bit DAC |
| 0 ve 1 numaralı pinler | USB ile paylaşılır (Serial) | USB'den ayrıdır (Serial1) |
| Vin aralığı | 7–12 V önerilen | 6–24 V |
| USB | USB-B, ATmega16U2 üzerinden | USB-C; Minima'da doğrudan işlemciye, WiFi'da ESP32-S3 köprüsü üzerinden |
Kısacası R4'te pin numaraları ve görevleri (PWM ~3, 5, 6, 9, 10, 11; I2C A4/A5; SPI 10–13; kesme 2, 3) aynı kalır ama pin başına akım 8 mA'e düşer. R3'te doğrudan pinden sürdüğün bir LED'i R4'te daha büyük bir dirençle (örneğin 1 kΩ ile yaklaşık 3 mA) ya da bir transistörle sürmen gerekir. Ayrıntılı karşılaştırma Arduino Uno R4 yazısında. Daha küçük bir kart arıyorsan Arduino Nano pinleri ve hangi Arduino'yu almalıyım yazıları işine yarar.
Sık yapılan hatalar ve çözümleri
| Belirti | Sebep | Çözüm |
|---|---|---|
| Kod yüklenmiyor, "not in sync" hatası | Pin 0 ya da 1'e modül bağlı | Yüklerken modülü çıkar ya da SoftwareSerial ile başka pinlere taşı |
| Servo takınca LED'in parlaklığı değişmiyor | Servo kütüphanesi 9 ve 10'un PWM'ini kapattı | LED'i 3, 5, 6 ya da 11'e taşı |
| Buzzer çalarken motor hızı bozuluyor | tone() Timer2'yi kullanıyor, 3 ve 11 etkileniyor | PWM'i 5, 6, 9 ya da 10'a taşı |
| Analog değer kendi kendine oynuyor | Pin boşta ya da kaynak direnci çok yüksek | Sensörü sağlam bağla, gerekirse iki kez oku |
| Buton rastgele basılmış görünüyor | Giriş pini havada | INPUT_PULLUP kullan ya da 10 kΩ direnç ekle |
| I2C ekran varken A4/A5 doğru okunmuyor | A4/A5 I2C hattıyla ortak | Analog sensörü A0–A3'e bağla |
| SPI modülü yanıt vermiyor | Pin 10 giriş yapılmış ya da CS yanlış | Pin 10'u çıkış bırak, her cihaza ayrı CS ver |
| Kart ısınıyor ya da kendini resetliyor | Pinlerden ya da 5V'tan fazla akım çekiliyor | Yükleri ayrı kaynaktan besle, GND'leri birleştir |
Arduino Uno'nun pinlerini tanıdığında hangi parçayı nereye bağlayacağını ezberlemen gerekmez; parçanın ihtiyacına bakar, doğru pini kendin seçersin. Temelleri tekrar etmek istersen Arduino nedir yazısıyla başlayabilirsin. BlueGrays uygulamasında LED yakma, buton okuma, LDR ile analog ölçüm, PWM ile RGB LED, I2C LCD, RFID ve iki Arduino'yu seri hatla haberleştirme projelerini, hangi pinin neden seçildiğini gösteren devre şemaları ve hazır kodlarla adım adım bulabilirsin.
Sıkça sorulan sorular
Arduino Uno'da kaç pin var?
Arduino Uno R3'te 14 dijital giriş/çıkış pini (0–13) ve 6 analog giriş (A0–A5) bulunur; analog pinler dijital olarak da kullanılabildiği için toplam 20 sinyal pini vardır. Dijital pinlerin 6'sı PWM verir. Bunlara ek olarak Vin, 5V, 3.3V, GND, IOREF, AREF ve RESET gibi güç ve kontrol pinleri ile 6 pinlik ICSP konnektörü yer alır.
Arduino Uno'da PWM pinleri hangileri?
PWM pinleri 3, 5, 6, 9, 10 ve 11'dir; kartta numaralarının yanında ~ işareti bulunur. 5 ve 6 yaklaşık 980 Hz, diğerleri yaklaşık 490 Hz frekansla çalışır. Servo kütüphanesi kullanılırken 9 ve 10'un, tone() kullanılırken 3 ve 11'in PWM'i etkilenir.
Arduino analog pinleri dijital pin olarak kullanılabilir mi?
Evet. Uno'da A0–A5 pinleri pinMode, digitalWrite ve digitalRead ile normal dijital pin gibi çalışır ve 14–19 numaralarına karşılık gelir. Yani A0'a LED, A3'e buton bağlayabilirsin. Yalnızca I2C kullanırken A4 ve A5 bu hatta ayrılmış olur.
Arduino Uno bir pinden kaç mA akım verir?
Bir pinden güvenle 20 mA çekilebilir; 40 mA mutlak sınırdır; bu değer aşılırsa pin kalıcı olarak zarar görebilir. Tüm pinlerin toplamı 200 mA'i geçmemelidir. Bu yüzden LED'ler dirençle bağlanır, motor ve röle gibi yükler ise transistör, MOSFET ya da sürücü modülüyle sürülür.
Arduino Uno'da 0 ve 1 numaralı pinler kullanılabilir mi?
Kullanılabilir ama önerilmez. Bu pinler USB-seri yongaya bağlıdır; kod yüklerken ve Serial Monitor kullanırken bilgisayar bu hattı kullanır. Pin 0'a bir modül bağlıyken yükleme "not in sync" hatasıyla başarısız olabilir, bu yüzden bu pinleri en son kullan ya da SoftwareSerial ile başka pinlere geç.
Arduino Uno'da SDA ve SCL pinleri hangileri?
Uno'da I2C hattının SDA ucu A4, SCL ucu A5 pinidir. R3 kartlarda AREF pininin yanında SDA ve SCL yazan iki pin daha vardır, ama bunlar içeriden A4 ve A5'e bağlıdır, ayrı bir hat değildir. ESP32'de varsayılan I2C pinleri GPIO 21 ve 22'dir; Raspberry Pi Pico'da I2C birçok pine alınabilir, en sık GP4 (SDA) ile GP5 (SCL) kullanılır.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
Led Yakma
Elektroniğin ilk merhabası: tek bir LED'i yakıp söndürmek. Arduino LED'i çok kısa aralıklarla yakıp söndürür, ışık hızlı hızlı göz kırpar. Kartın bir ışığı nasıl yönettiğini en sade haliyle görür, son

Buton İle Led Yakma (Push)
Kapı zili gibi: bastığın sürece ışık yanar, bırakınca söner. Arduino butonu sürekli dinler; butona basılıyken LED'i yakar, elini çektiğin an söndürür. Kartın dışarıdan gelen bir dokunuşu nasıl hissett

Ldr İle Işık Şiddeti Okuma
Odanın ne kadar aydınlık olduğunu sayıyla görmek ister misin? Işığa duyarlı küçük bir parça olan LDR ortam ışığını ölçer ve Arduino bu değeri yarım saniyede bir bilgisayar ekranına yazar. Elinle üstün

HC-SR04 Mesafe Ölçme (Serial Ekran)
Yarasalar karanlıkta yollarını nasıl buluyorsa HC-SR04 sensörü de öyle çalışır: duyamadığın bir ses gönderir, yankısını dinler ve önündeki cismin ne kadar uzakta olduğunu ölçer. Arduino bu mesafeyi sa

RGB Led İle Yumuşak Renk Geçişi
Tek bir RGB LED kırmızıdan yeşile, yeşilden maviye, maviden yeniden kırmızıya yavaşça geçer ve bu gökkuşağı döngüsü hiç durmaz. Her geçiş iki buçuk saniye kadar sürer; aradaki sarı, turkuaz ve mor ton

I2C İle LCD Ekran Kullanımı
Arduino'ya kendi ekranını kazandır ve ilk mesajını yazdır. İki satırlık LCD ekran yalnızca birkaç kabloyla bağlanır; önce üst satıra bir selam, ardından alt satıra ikinci bir yazı gelir, ekran temizle

RFID Değer Okuma
Apartman anahtarlığında ya da giriş kartında gizli bir kimlik numarası saklıdır; bu proje onu okur. Kartı RFID okuyucuya yaklaştırınca Arduino kartın numarasını bilgisayar ekranına yazar. Kartlı kapı

2 Arduino Tek Yönlü Haberleşme
İki Arduino'yu tek bir kabloyla konuşturursun: birindeki butona basınca öbüründeki LED yanar, bir daha basınca söner. Gönderen kart butona basıldığını kısa bir mesajla bildirir, alan kart bu mesajı du
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 200'den fazla Arduino, ESP32 ve Pico projesi seni bekliyor.
Telefonunla tara
Kamerayı koda tut; telefonunun uygulama mağazası açılır.
ya da mağazada aç

