Arduino Öğreniyorum Bölüm 7

Merhaba

Başlamadan önce sizden bir ricam olacak makalenin ve videonun herkese ulaşabilmesi için hem youtube da hem de sayfanın altında ki sosyal medya butonları ile beğeni ve paylaşım yapmayı unutmayın lütfen, ayrıca sorularınız ve yorumlarınızı da bekliyorum.

Bu bölümde Arduino ve Potansiyometre ile birkaç uygulama yapacağız, ayrıca değişkenlerin kullanıldığı yere göre programın işleyişi nasıl etkileniyor, global değişken kavramı ve analogRead() fonksiyonu kullanımına göz atacağız, yine videolu anlatımla, görsellerle ve kodlarla destekleyeceğiz.

Daha önce gördüğümüz Serial.readString() fonkisyonu seri port ekranından girilen değeri okumaya yarıyordu ve arduino’ya veri gönderebiliyorduk, bu sefer verileri potansiyometreden alacağız.  Bu iş için kullanacağımız komut ise analogRead() fonksiyonu. Şimdiye kadar kullandığımız fonksiyonlarda digital kelimesini kullanmamıza rağmen bu sefer analog diye bir kelime ile karşılaştık. Malumunuz digital sayısal demek ve bilgisayarların tüm işlemleri bu sayısal verilerin işlenmesinden ibarettir, tamda bu sebeple klavyeden girilen veriler digitalRead() ile okunurken potansiyometre ile gönderilenler analogRead ile okunur Gerçek dünyada ise bunun tam tersine herşey somuttur ve analogdur. Bu projede kullanacağımız potansiyometre de analog bir cihazdır ve bilgisayara digital veriler gönderemez.

Potansiyometre nedir

Kısaca çıkış değeri ayarlanabilen bir dirençtir. Kullanım amacına göre şekli ve yapısı değişse de genel olarak üç bacak ve bir mekanik yapıdan oluşur ve düşük hassasiyetle çalışır. Ancak yine de hayatımızın bir çok alanında kullanırız. Örneğin radyo veya amfi gibi cihazarda ses kontrolü yapan çevirilebilen düğmeler birer potansiyometre örneği olabilir. Çalışma mantığı basit olarak üzerinden geçen akımı  ‘0’  ile 1023 arasında bir değere bölmek, bizde bu özelliğinden faydalanarak ışık şiddeti, ses şiddeti yada hız kontrolü yapabileceğiz .

Başlayalım

Aşağıda ki kodları arduino idemize yazalım ve resimde gösterdiğim devreyi kurarak seri port ekranından potansiyometreden gelen değerleri okuyalım.



void setup() {
  Serial.begin(9600);
  pinMode(A0,INPUT);
}
void loop() {
  int a = analogRead(A0);
  Serial.println(a);
}

Eğer isterseniz buraya tıklayarak  tinkercad üzerinde de deneyebilirsiniz.

Gördüğünüz gibi minimum 0 maksimum 1023 değerleri seri port ekranından akmakta.

Bu projede bu konuyu işleyeceğiz.         

Kodları açıklamak espriyi açıklamak gibidir, her ikisi de ne kadar iyi olursa olsun açıklamaya çalışınca her şey berbay olur derler;  şimdi daha iyi anlıyorum ne demek olduğunu.

Setup içiresinde Serial.begin(9600); yazarak iletişim hızımızı belirledik, pinMode(A0,INPUT); yazarak analog pinlerden 0 numaralı olanın giriş için kullanılacağını ve buranın dinleneceğini belirttik. Loop içerisinde dinlemeden elde edilen verileri integer  veri tipinde ki  “a” değişkenine atadık ve son olarak da Serial.println(a); yazarak elde edilen verilerin altalta yazılmasını sağladık. Artık analog verileri digital verilere çevirdiğimize göre bunu sıradaki projemizde kullanabiliriz.

Arduinomuzu aşağıda gösterdiğim şekilde hazırlayalım ve hazır hale getirelim tinkercad üzerinde denemek için tıklayın.

Parça listesi

Miktar

Bileşen

1

Arduino Uno R3

1

250 kΩ, Potansiyometre

5

Kırmızı LED

1

1 Ω Direnç


Kodlar



int led1 = 9;
int led2 = 10;
int led3 = 11;
int led4 = 12;
int led5 = 13;
int potans = A0;
int potans_deger;

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(potans, INPUT);
}

void loop() {
  potans_deger = analogRead(potans); //potans değişkenine atadağımız A0 pinini dinliyoruz ve değerini potans_deger değişkenine atıyoruz
  
  if (potans_deger < 1) { //potans_deger 200 den küçükse hiçbir ledi yakma

    digitalWrite(led1, 0);
    digitalWrite(led2, 0);
    digitalWrite(led3, 0);
    digitalWrite(led4, 0);
    digitalWrite(led5, 0);
  }
  if (potans_deger > 200) { //potans_deger 200 den büyükse sadece led1 i yak
    
    
    digitalWrite(led1, 1);
    digitalWrite(led2, 0);
    digitalWrite(led3, 0);
    digitalWrite(led4, 0);
    digitalWrite(led5, 0);
  }
  if (potans_deger > 400) { //potans_deger 400 den büyükse led1 i ve led2 yi yak
    
    digitalWrite(led1, 1);
    digitalWrite(led2, 1);
    digitalWrite(led3, 0);
    digitalWrite(led4, 0);
    digitalWrite(led5, 0);
  }
  if (potans_deger > 600) {
    
    digitalWrite(led1, 1);
    digitalWrite(led2, 1);
    digitalWrite(led3, 1);
    digitalWrite(led4, 0);
    digitalWrite(led5, 0);
  }
  if (potans_deger > 800) {
    
    digitalWrite(led1, 1);
    digitalWrite(led2, 1);
    digitalWrite(led3, 1);
    digitalWrite(led4, 1);
    digitalWrite(led5, 0);
  }
  if (potans_deger > 1000) { //potans_deger 1000 den büyükse tüm ledleri yak
    
    digitalWrite(led1, 1);
    digitalWrite(led2, 1);
    digitalWrite(led3, 1);
    digitalWrite(led4, 1);
    digitalWrite(led5, 1);
  }
}

Nasıl Çalışır

Her zaman olduğu gibi kullanacağımız pinleri değişkenlere atadık.

Setup() içerisinde ise değişkenlerimizin modlarını belirttik, farket ettiğiniz üzere ledleri OUTPUT potansiyometrenin ikinci bacağını ise INPUT olarak tanımladık zira giriş değerlerimizi buradan okuyacağız; burada dikkat çekmek istediğim diğer bir husus ise potansiyometremize enerji verecek olan pinleri tanımlamadık, bunun sebebi enerjiyi sabit 5v çıkıştan alıyor olmamızdır.

Loop() içerisinde en üstte integer tipinde potans_deger ismiyle tanımladığımız değişkene analogRead() fonksiyonu ile elde edilen potansiyometre verilerini atadık ve if bloklarımızı açarak sorgulamaya başladık.

İlk if bloğunda potans değeri 1 den büyükse led1 olarak tanımladığımız 9. pine enerji verdik ve diğerlerine enerji gitmesini engeledik, ikinci blokta potans değerinin 200 den büyük olması durumunda yapılacaklar diye devam ederek her 200 birim de bir led yaktık. Buna ek olarak isterseniz bir if bloğu ve bir led daha ekleyebilir ve değer 1023’e ulaştıysa yani düğme sonuna kadar çevirildiyse bir led daha yanmasını sağlayabilirsiniz. Videoda gösterdiğim kodlara buraya tıklayarak ulaşabilirsiniz

Bu projede öğrendiklerimizi önceki projelere entegre edebiliriz örneğin karaşimşek devresinde ki akış hızını potansiyometreden alarak hızlı yada yavaş ayarlamalarını serial port yerine elle değiştirebiliriz, aşağıdaki videoda bu işlemleri ve daha fazlasını paylaşacağım için özellikle izlemenizi tavsiye ederim.

Hoşçakalın.