Arduino Sensör Okuma: analogRead, A0 ve Seri Monitör ile İlk Sensör Değeri
- Ersin Koşar
- Arduino
- 18 May, 2026
Arduino sensör okuma, robotik kodlama öğrenirken dijital girişlerden analog değerlere geçiş yaptığınız en önemli aşamalardan biridir. Arduino buton ile LED kontrolü projesinde butonun yalnızca iki durumu vardı: basılı veya basılı değil. Sensörlerde ise durum genellikle daha zengindir. Bir ışık sensörü ortamın aydınlık seviyesine, potansiyometre çevrilme konumuna, toprak nem sensörü nem miktarına, sıcaklık sensörü ise çevre koşullarına göre değişen değerler üretir.
Bu yazıda Arduino ile analog sensör okuma mantığını başlangıç seviyesinde ele alacağız. Örnek devreyi potansiyometre üzerinden kuracağız; çünkü potansiyometre, değeri elle değiştirmeye izin verdiği için analog okuma kavramını çok net gösterir. Resmi Arduino AnalogReadSerial örneği de analog giriş okumayı potansiyometre üzerinden anlatır ve okunan değerin Seri Monitör’e yazdırılmasını gösterir.1
Analog Sensör Okuma Ne Demektir?
Arduino’da dijital okuma, genellikle HIGH veya LOW gibi iki değerden birini verir. Analog sensör okuma ise bir aralık içindeki sayısal değeri okumak anlamına gelir. Arduino Uno gibi klasik kartlarda analogRead(A0) komutu, A0 pinindeki gerilimi okuyarak çoğunlukla 0 ile 1023 arasında bir değer döndürür. Resmi Arduino dokümanında bu dönüşüm, kart üzerindeki analog-to-digital converter yani ADC devresiyle açıklanır.1
Bu bilgi, gerçek dünyadaki değişimleri sayısal olarak takip etmemizi sağlar. Örneğin bir LDR ile ışık seviyesi, potansiyometre ile kullanıcı ayarı, toprak nem sensörüyle sulama ihtiyacı veya gaz sensörüyle ortam değişimi okunabilir. Bu nedenle sensör okuma, robotik projelerde yalnızca bir konu değil, neredeyse bütün akıllı sistemlerin başlangıç noktasıdır.
| Okuma türü | Değer yapısı | Arduino komutu | Örnek kullanım |
|---|---|---|---|
| Dijital okuma | HIGH veya LOW | digitalRead() | Buton, hareket algılayıcı dijital çıkışı |
| Analog okuma | 0-1023 arası değer | analogRead() | Potansiyometre, LDR, analog sensör modülü |
| Seri izleme | Metin/sayı çıktısı | Serial.println() | Sensör değerini ekranda görmek |
Bu farkı anlamak önemlidir. Buton “evet/hayır” bilgisi verirken, analog sensör “ne kadar?” sorusuna cevap verir. Robotik kodlamada bu ayrım; karar verme, eşik belirleme ve otomasyon kurma açısından temel bir beceridir.
Gerekli Malzemeler
Bu başlangıç uygulamasında en anlaşılır örnek için 10K potansiyometre kullanacağız. Potansiyometre bir sensör gibi düşünülebilir; orta ucundaki gerilim çevrilme konumuna göre değişir. Arduino bu değişimi A0 analog girişinden okuyabilir.
| Malzeme | Adet | Açıklama |
|---|---|---|
| Arduino Uno veya uyumlu kart | 1 | Sensör değerini okuyacak geliştirme kartı |
| 10K potansiyometre | 1 | Analog değer üretmek için kullanılacak örnek eleman |
| Breadboard | 1 | Devreyi lehimsiz kurmak için |
| Jumper kablo | 3 | 5V, GND ve A0 bağlantıları için |
| USB kablo | 1 | Kod yüklemek ve Seri Monitör kullanmak için |
Elinizde potansiyometre yoksa LDR modülü, toprak nem sensörü modülü veya analog çıkış veren başka bir sensörle de benzer mantık kurulabilir. Ancak farklı sensörlerin bağlantı ve besleme gerilimi özellikleri değişebilir. Bu nedenle yeni başlayanlar için potansiyometre en güvenli ve anlaşılır örnektir.
Potansiyometre ile Analog Okuma Devresi
Potansiyometrenin genellikle üç bacağı vardır. İki dış bacak gerilim hattının uçlarına, orta bacak ise değişen gerilimin alındığı noktaya bağlanır. Resmi Arduino AnalogReadSerial devresinde potansiyometrenin bir dış bacağının GND’ye, diğer dış bacağının 5V’a, orta bacağının ise A0 analog pinine bağlandığı açıklanır.1
| Potansiyometre bacağı | Arduino bağlantısı | Görevi |
|---|---|---|
| Dış bacak 1 | GND | Referans toprak hattı |
| Dış bacak 2 | 5V | Besleme gerilimi |
| Orta bacak | A0 | Değişen analog gerilimi Arduino’ya verir |
Potansiyometre çevrildikçe orta uçtaki gerilim 0V ile 5V arasında değişir. Arduino bu gerilimi doğrudan volt olarak değil, sayısal değer olarak okur. Arduino Uno mantığında 0V yaklaşık 0, 5V yaklaşık 1023 değerine karşılık gelir. Aradaki değerler ise uygulanan gerilimle orantılıdır.1
Analog sensör okurken amaç çoğu zaman “tam gerilimi” bilmek değil, değerin değişimini takip etmektir. Bu yüzden başlangıç projelerinde önce ham
analogRead()değerini görmek, sonra gerekirse bu değeri yüzdeye veya başka bir aralığa dönüştürmek daha sağlıklı bir yaklaşımdır.
Arduino Sensör Okuma Kodu
Aşağıdaki kod A0 pininden analog değeri okur ve Seri Monitör’e yazar. Bu sayede potansiyometreyi çevirdiğinizde değerlerin anlık olarak değiştiğini görebilirsiniz.
const int SENSOR_PIN = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(SENSOR_PIN);
Serial.println(sensorValue);
delay(100);
}
Kod oldukça kısadır; fakat çok önemli üç kavram içerir. Serial.begin(9600) bilgisayar ile Arduino arasında seri haberleşmeyi başlatır. analogRead(SENSOR_PIN) A0 pinindeki analog gerilimi okur. Serial.println(sensorValue) ise okunan değeri Arduino IDE içindeki Seri Monitör’e gönderir.
Arduino IDE’de Seri Monitör’ü açtığınızda potansiyometrenin konumuna göre değişen sayılar görmelisiniz. Resmi Arduino örneğinde de Seri Monitör’de 0-1023 aralığında değerlerin görülebileceği ve potansiyometre çevrildikçe bu değerlerin hızlı tepki verdiği belirtilir.1
Kodun Satır Satır Açıklaması
const int SENSOR_PIN = A0; satırı, sensörün bağlı olduğu analog pini isimlendirir. Böylece kodun içinde doğrudan A0 yazmak yerine daha anlamlı bir isim kullanırız. Daha sonra sensörü A1 pinine taşımak istersek yalnızca bu satırı değiştirmek yeterlidir.
setup() fonksiyonu Arduino açıldığında bir kez çalışır. Bu projede setup() içinde yalnızca seri haberleşme başlatılır. loop() fonksiyonu ise sürekli tekrar eder; her döngüde sensör değeri okunur, ekrana yazdırılır ve kısa bir gecikme verilir. delay(100) satırı saniyede yaklaşık 10 okuma yapılmasını sağlar. Bu gecikme kullanılmazsa değerler çok hızlı akar ve takip etmek zorlaşabilir.
| Kod satırı | Görevi |
|---|---|
Serial.begin(9600); | Arduino ile bilgisayar arasında seri haberleşmeyi başlatır |
analogRead(A0); | A0 pinindeki analog değeri okur |
int sensorValue | Okunan değeri saklayan değişkendir |
Serial.println(sensorValue); | Değeri Seri Monitör’e satır satır yazar |
delay(100); | Okumalar arasında kısa bekleme ekler |
Bu yapı, neredeyse bütün analog sensör projelerinde temel olarak kullanılır. Sensör değişse bile analogRead(), değişken oluşturma ve Seri Monitör’e yazdırma mantığı aynı kalır.
0-1023 Değeri Ne Anlama Gelir?
Arduino Uno gibi kartlarda analog okuma değeri çoğunlukla 10 bit çözünürlükle ifade edilir. 10 bit, 2 üzeri 10 yani 1024 farklı seviye anlamına gelir. Bu seviyeler 0’dan başladığı için okuma aralığı 0 ile 1023 arasında olur. Arduino dokümanı bu değerin ADC tarafından dönüştürüldüğünü ve uygulanan gerilimle orantılı olduğunu açıklar.1
| Okunan değer | Yaklaşık anlamı | Potansiyometre örneği |
|---|---|---|
| 0 | A0 pini yaklaşık 0V seviyesindedir | Mil bir uca çevrilmiştir |
| 256 | Düşük-orta seviye | Mil yaklaşık dörtte bir konumdadır |
| 512 | Orta seviye | Mil yaklaşık orta konumdadır |
| 768 | Yüksek-orta seviye | Mil yaklaşık dörtte üç konumdadır |
| 1023 | A0 pini referans gerilime yakındır | Mil diğer uca çevrilmiştir |
Farklı Arduino kartlarında ADC çözünürlüğü ve referans gerilimi değişebilir. Bu nedenle eğitim anlatımlarında değer aralığını kullandığınız karta göre düşünmek gerekir. Bu yazıda anlatım, başlangıç seviyesinde en yaygın kullanılan Arduino Uno mantığına göre kurulmuştur.
Sensör Değerini Yüzdeye Çevirme
Ham analog değer çoğu zaman yeterlidir; ancak kullanıcıya daha anlaşılır bir çıktı göstermek için bu değeri yüzdeye çevirmek isteyebilirsiniz. Örneğin potansiyometre en düşük konumdayken %0, en yüksek konumdayken %100 görmek daha anlamlı olabilir.
const int SENSOR_PIN = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(SENSOR_PIN);
int percentValue = map(sensorValue, 0, 1023, 0, 100);
Serial.print("Ham deger: ");
Serial.print(sensorValue);
Serial.print(" | Yuzde: ");
Serial.print(percentValue);
Serial.println("%");
delay(200);
}
Bu kodda map() fonksiyonu 0-1023 aralığını 0-100 aralığına dönüştürür. Böylece değerleri daha okunabilir hâle getiririz. Ancak gerçek sensörlerde en düşük ve en yüksek değer her zaman tam 0 ve 1023 olmayabilir. Örneğin bir LDR devresinde ortam ışığına göre en düşük değer 120, en yüksek değer 850 olabilir. Bu durumda eşik belirlemek için gerçek ölçüm yapmak gerekir.
Analog Sensörlerde Eşik Değeri Kullanma
Sensör okumanın en pratik kullanım biçimlerinden biri eşik değeri belirlemektir. Örneğin değer 600’ün üzerine çıktığında LED yakmak, değer 300’ün altına düştüğünde uyarı vermek veya belirli bir aralıkta motor çalıştırmak mümkündür.
const int SENSOR_PIN = A0;
const int LED_PIN = 13;
const int THRESHOLD = 600;
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
int sensorValue = analogRead(SENSOR_PIN);
Serial.println(sensorValue);
if (sensorValue > THRESHOLD) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
delay(100);
}
Bu örnekte sensör değeri 600’ün üzerindeyse LED yanar. Bu mantık, gerçek projelerde çok yaygındır. Işık seviyesi azaldığında lamba yakmak, toprak nemi düştüğünde sulama pompası çalıştırmak veya gaz sensörü belirli eşiği aştığında buzzer çalmak aynı temel yapıya dayanır.
Hangi Sensörler analogRead ile Okunabilir?
Arduino’da analog çıkış veren birçok sensör analogRead() ile okunabilir. Ancak her sensörün bağlantısı, besleme gerilimi ve güvenli kullanım şartları farklı olabilir. Bu yüzden modül üzerindeki VCC, GND ve OUT/AO pinlerini dikkatli okumak gerekir. A0-A5 analog girişlerinin kart üzerindeki yerini ve dijital pinlerden farkını görmek için Arduino Uno pinleri rehberini de inceleyebilirsiniz.
| Sensör veya modül | analogRead ile kullanım | Örnek proje |
|---|---|---|
| Potansiyometre | Doğrudan A0’a bağlanır | Kullanıcı ayar düğmesi |
| LDR devresi | Gerilim bölücüyle analog değer üretir | Işığa duyarlı lamba |
| Toprak nem sensörü | Analog çıkış pininden okunur | Otomatik sulama sistemi |
| Joystick modülü | X ve Y eksenleri analog okunur | Robot kontrol kolu |
| Gaz sensörü modülleri | Analog çıkış verebilir | Ortam izleme projesi |
Başlangıçta potansiyometre ile değer aralığını gözlemlemek, daha sonra sensör modüllerine geçmeyi kolaylaştırır. Çünkü hangi sensörü kullanırsanız kullanın, temel soru aynıdır: Sensör hangi aralıkta değer üretiyor ve benim projem hangi değerde tepki vermeli?
Sık Yapılan Hatalar ve Çözümleri
Analog sensör devrelerinde en sık karşılaşılan sorun, bağlantıların karıştırılması veya okunan değerin beklenenden farklı olmasıdır. Bu durum çoğu zaman devrenin tamamen bozuk olduğu anlamına gelmez; genellikle bağlantı, referans veya kod tarafında küçük bir düzeltme gerekir.
| Sorun | Muhtemel neden | Çözüm |
|---|---|---|
| Seri Monitör’de hiçbir şey görünmüyor | Seri Monitör kapalı veya baud rate farklı | Seri Monitör’ü açın ve 9600 baud seçin |
| Değer sürekli 0 | A0 pini GND’ye bağlı kalmış olabilir | Orta bacağın A0’a gittiğini kontrol edin |
| Değer sürekli 1023 | A0 pini 5V’a bağlı kalmış olabilir | Potansiyometre orta bacağını ve dış bacakları kontrol edin |
| Değerler rastgele değişiyor | A0 ucu boşta kalmış olabilir | Sensör sinyal hattının A0’a bağlı olduğundan emin olun |
| Değer ters yönde değişiyor | 5V ve GND dış bacakları ters olabilir | Sorun değil; isterseniz dış bacakları yer değiştirin |
Seri Monitör, analog sensör projelerinde en önemli kontrol aracıdır. Önce ham değerin değiştiğini görmek, sonra bu değere göre LED, buzzer veya motor gibi çıkışlar eklemek daha sağlıklıdır. Bu yaklaşım, karmaşık projelerde hata bulma süresini ciddi şekilde azaltır.
Sonuç
Arduino sensör okuma, robotik kodlamada çevreyi algılayan projelerin temelidir. Bu yazıda A0 pini, analogRead() komutu, Seri Monitör, 0-1023 değer aralığı ve eşik mantığı üzerinden analog okumanın temelini öğrendiniz. Eğer daha önce Arduino IDE kurulumu yaptıysanız ve Arduino ile LED yakma projesini tamamladıysanız, artık Arduino’nun hem çıkış verebildiğini hem de çevresinden değişken bilgi alabildiğini görmüş oldunuz.
Bir sonraki adımda bu analog değeri yalnızca okumakla kalmayıp bir çıkışa dönüştürebilirsiniz. Örneğin potansiyometre değerine göre LED parlaklığı ayarlamak için PWM kullanabilir; bunun uygulamalı anlatımı için Arduino PWM ile LED parlaklığını ayarlama rehberine geçebilirsiniz. Işık sensöründen gelen değere göre otomatik gece lambası yapmak veya nem sensöründen gelen değere göre sulama sistemi tasarlamak da aynı mantığın devamıdır. Bu nedenle sensör okuma, basit bir başlangıç uygulaması gibi görünse de daha gelişmiş robotik projelerin ana kapısını açar.