Kategori:
Ardunio
Başlık:
Ardunio Başlangıç Etkinlikleri

Ardunio ile robotik kodlamaya başlamak ilk bakışta karmaşık gelebilir. Hele hele yapılan örneklere bakıp oradan buradan çıkan kablolar ve dağınık görüntü bu işin çok zor olduğu algısını oluşturmaktadır. Halbuki işin temeline indiğimizde her parçayı tek tek inceleyip işi basit parçalara böldüğümüzde aslında bu işin yapılamayacak kadar zor olmadığını görürüz. Bu yazının Ardunio ile kodlamaya ve proje geliştirmeye ilk defa başlayacak kişiler hedeflenmekle beraber sık unutulan bağlantıların ve basit kodların hatırlanması amacıyla da hızlı bir kılavuz olması da hedeflenmektedir.

Etkinliklere başlamadan önce belirtmek gerekiyor ki Ardunio ile proje yapmak için mutlaka Ardunio setine sahip olmanıza gerek yok. Ardunio devrelerini sanal olarak oluşturabileceğiniz Fritzing gibi offline programlar, Tinkercad gibi web ortamları mevcut. Özellikle Tinkercad ile hazırladığınız devreleri sistemin elverdiği ölçüde simüle edebiliyorsunuz. 

İlk defa başlayacak kişiler için bu etkinlikleri sırayla yapmalarını tavsiye ediyoruz. Devrenizi öncelikle Fritzing veya Tinkercad gibi ortamlarda öncelikle sanal olarak oluşturmanız faydalı olacaktır. Soru, görüş ve önerilerinizi yorumlar kısmına bırakabilirsiniz. 

1) Ardunio ile kod yazmadan led yakmak:

Amaç: Bir ledi Ardunio ile kod yazmadan yakmak.

Malzemeler:

  • Ardunio Uno
  • Led
  • 220 Ohm Direnç
  • Breadboard
  • Jumper kablolar

Fritzing ile oluşturulmuş yukarıdaki devre şemasına bakarak devre yapısını oluşturalım. Ardından Ardunio ile bilgisayar bağlantısını yaparak enerji verelim. Ardunio çalıştığı anda ledimizin de yandığını görmemiz lazım. Aslında bu etkinlikte Ardunio sadece bir elektrik kaynağı olarak kullanıldı. Ama bu etkinlikle ledin ve Ardunio üzerindeki GND ve 5V pinlerinin ne işe yaradığı hakkında fikir sahibi oluyoruz. Burada ledin yanmaması için direnç kullanıyoruz. Eğer direnç kullanmazsak ledimiz büyük ihtimalle kullanılmaz hale gelecektir. 220 Ohm direnç yerine 330 Ohm veya daha yüksek seviyeli bir dirençte kullanabiliriz. Direnç ne kadar yüksek olurda ledin parlaklığı o kadar az olacaktır.

2) Ardunio ile sırayla led yakmak

Amaç: 3 tane ledi 0,5 saniye aralıklarla sırayla yakmak.

Malzemeler:

  • Ardunio Uno
  • 3 adet led
  • 3 adet 220 Ohm Direnç
  • Breadboard
  • Jumper kablolar

Yukarıdaki şemaya göre devremizi oluşturalım. Sonra da aşağıdaki kodu Ardunio ya yükleyelim.

void setup() {
  // 2,4 ve 6 nolu dijital pinleri çıkış (output) olarak ayarlıyoruz
  pinMode(2, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(6, OUTPUT);
}

// loop döngüsüyle ardunionun sürekli yapmasını istediğimiz işlemleri kodluyoruz
void loop() {
  digitalWrite(2, HIGH);  //2 nolu pinle lede elektrik verip yanmasını sağlıyoruz
  delay(500);             //Yarım saniye bekletiyoruz                    
  digitalWrite(2, LOW);   //2 nolu pinle verdiğimiz elektriği kesiyoruz böylece led sönüyor
  digitalWrite(4, HIGH);  
  delay(500);                      
  digitalWrite(4, LOW);
  digitalWrite(6, HIGH);  
  delay(500);                      
  digitalWrite(6, LOW);
}

Burada delay(500) ışığın ne kadar açık kalmasını istiyorsak o kadar sayı yazıyoruz. delay(1000) 1 saniye boyunca bekletir.

3) Ardunio ile RGB ledi zamanlamayla 3 farklı renkte yakmak

Amaç: RGB ledi 0,5 saniye aralıkla kırmızı, yeşil, mavi renklerde ışıklandırmak.

Malzemeler:

  • Ardunio Uno
  • 1 adet RGB led
  • 3 adet 220 Ohm Direnç
  • Breadboard
  • Jumper kablolar


Bu şema ortak anot(-) içeren türden rgb ledler içindir

RGB ledlerin ortak anot(-) ve ortak katot(+) içeren 2 türü vardır.

RGB ledde normal 2 bacaklı ledden farklı olarak 4 bacak vardır. Ortak anot içeren türde bu bacaklardan birisi (sağdan 2.si) toprağa bağlanır. Diğer ledler yukarıdaki şemada bağlandığı kablo renklerinin gösterdiği sırayla kırmızı, yeşil ve mavi renk değerleri almak için kullanılır. Ortak katot içeren türdeki rgb ledlerde ise uzun bacak voltaj bacağıdır. Ortak katot(+) pini olan rgb ledlerin uzun bacağı yukarıdaki şemadan farklı olarak 5v pinine bağlanır. Bu pinleri djital pwm pinlerle göndereceğimiz 0-255 değerler arasındaki değerlere göre led renk alacaktır.

Yukarıdaki şemaya göre devremizi oluşturalım. Sonra da aşağıdaki kodu Ardunio ya yükleyelim. 

int red=3;
int blue=5;
int green=6;
 
void setup() {
pinMode(red,OUTPUT);
pinMode(green,OUTPUT);
pinMode(blue,OUTPUT);
}
 
void loop() {
analogWrite(red,0);  //Sadece kırmızı renk için sadece bu pine 255 değeri veriyoruz.
analogWrite(green,255);
analogWrite(blue,255);
delay(500);
analogWrite(red,255);
analogWrite(green,255);
analogWrite(blue,0);  //Sadece mavi renk için sadece bu pine 255 değeri veriyoruz.
delay(500);
analogWrite(red,255);
analogWrite(green,0); //Sadece yeşil renk için sadece bu pine 255 değeri veriyoruz.
analogWrite(blue,255);
delay(500);
}

4) Ardunio ile ledi butonla yakıp söndürmek

Amaç: Normal bir ledi butonla açıp kapatmak. Butona bastığımızda açılacak, bir daha bastığımızda kapanacaktır.

Malzemeler:

  • Ardunio Uno
  • Led
  • 220 Ohm Direnç (led için)
  • Buton
  • 10K Ohm direnç (buton için)
  • Breadboard
  • Jumper kablolar

Pek çok sitede butonla led yakma örneği verilirken atlanan şey, butona bir defa bastığımızda ledin yanması, bir defa daha batığımızda sönmesidir. Genellikle sitelerin çoğunda buton basılı tutulduğunda yanan basılı olmadığında sönen örnek yapılmaktadır ki burada durum biraz farklıdır. İstenen durumun sağlanması için "butonDurum" ve "ledDurum" adıyla iki değişken kullanmaktayız.

Yukarıdaki şemaya göre devremizi oluşturalım. Sonra da aşağıdaki kodu Ardunio ya yükleyelim. 

int ledPin=2;
int butonPin=4;
int butonDurum=0;
bool ledDurum=0;
void setup(){
    pinMode(ledPin,OUTPUT); //led pinimizi çıkıs ayarladık
    pinMode(butonPin,INPUT); // buton pinimizi giriş ayarladık
 
}
void loop(){
    
    butonDurum=digitalRead(butonPin); // butondan değeri okuyoruz 
    if(butonDurum==HIGH){
       if(ledDurum==0)
       {  
       ledDurum=1;
       }
       else
       {
       ledDurum=0; 
       }
       delay(250); //Basma esnasındaki hızlı geçişleri engellemek için ufak bir bekleme koyuyoruz
    };

      if(ledDurum==1)
    digitalWrite(ledPin,HIGH);
    else
    digitalWrite(ledPin,LOW);
}

5) Potansiyometre ile bir ledi kademeli olarak yakma

Amaç: Bir ledin potansiyometre ile değişen düzeylerde ışık vermesini sağlamak.

Malzemeler:

  • Ardunio Uno
  • 1 adet  led
  • 1 adet 220 Ohm Direnç (led için)
  • 10K potansiyometre
  • Breadboard
  • Jumper kablolar


Bu etkinlikle ilk defa potansiyometre kullanılmış oldu. Potansiyometrenin çalışma prensibi bu etkinlikle anlaşılacaktır. Ayrıca map fonksiyonuyla kodda yazılan nedenden dolayı oran orantı kurulması sağlandı.

Yukarıdaki şemaya göre devremizi oluşturalım. Sonra da aşağıdaki kodu Ardunio ya yükleyelim. 

int analogValue = 0; 
int digitalValue = 0; 

void setup() {
pinMode(3, OUTPUT); 
}
void loop(){
analogValue = analogRead(A0);
digitalValue= map(analogValue,0,1023,0,255); //A0 dan gelen 0-1024 arası değeri map fonksiyonuyla 0-255 arasına oranlıyoruz
analogWrite(3, digitalValue); // 3 nolu dijital pine analog değerden gelen dönüşümü veriyoruz.
}

6) Potansiyometre değerine göre 3 ledi kademeli olarak yakma

Amaç: 3 adet ledin potansiyometreden gelen değere göre aşamalı olarak yakılması sağlanacaktır. En yüksek değerde 3 led birden yanacak, en düşük değerde hiçbir led yanmayacaktır. Ara değerlerde değerin miktarına oranla ledler yanacaktır.

Malzemeler:

  • Ardunio Uno
  • 3 adet  led
  • 3 adet 220 Ohm Direnç (ledler için)
  • 10K potansiyometre
  • Breadboard
  • Jumper kablolar


Bu etkinlikte potansiyometre ile çok sayıda ledin potansiyometre değerine göre yanması "if" yapısıyla sağlandı.

Yukarıdaki şemaya göre devremizi oluşturalım. Sonra da aşağıdaki kodu Ardunio ya yükleyelim. 


int analog_value = 0; 
int digital_value = 0; 
void setup() {
pinMode(2, OUTPUT); //2.pini çıkış olarak ayarladık
pinMode(4, OUTPUT); //4.pini çıkış olarak ayarladık  
pinMode(6, OUTPUT); //6.pini çıkış olarak ayarladık
}
 
void loop(){
analog_value = analogRead(A0); //Potansiyometreden değeri değişkene aktarıyoruz
digital_value= map(analog_value,0,1023,0,255); //Analog değeri map fonksiyonuyla dijital değere dönüştürüyoruz

if(digital_value<20){   //Dijital değer 20 den aşağı ise hiçbir led yanmayacak. Diğer durumlarda da ledler kademeli olarak yanacak
   digitalWrite(2, LOW);
   digitalWrite(4, LOW);
   digitalWrite(6, LOW);
  
} 

if(digital_value>19 && digital_value<85) {

   digitalWrite(2, HIGH);
   digitalWrite(4, LOW);
   digitalWrite(6, LOW);
  
}

if(digital_value>84 && digital_value<170) {

   digitalWrite(2, HIGH);
   digitalWrite(4, HIGH);
   digitalWrite(6, LOW);
  
}

if(digital_value>169){
   digitalWrite(2, HIGH);
   digitalWrite(4, HIGH);
   digitalWrite(6, HIGH);
  
} 

}

7) Potansiyometre değerine göre Rgb ledi 3 renkte kademeli yakma

Amaç: RGB ledin potansiyometreden gelen değere göre aşamalı olarak kırmızı, mavi ve yeşil  renklerinde ışık vermesi sağlanacaktır.

Malzemeler:

  • Ardunio Uno
  • RGB led
  • 1 adet 220 Ohm Direnç
  • 10K potansiyometre
  • Breadboard
  • Jumper kablolar

RGB ledin 3 farklı renkte değişen tonlarda ışık vermesini sağlamak için bir önceki etkinlikte olduğu gibi map() fonksiyonuyla oran orantı yapıldı. Potansiyometreden gelen 0-1024 aralığındaki değer üçe bölünerek ilk bölüm kırmızı, ikinci bölüm mavi ve üçincü bölüm yeşil renk değerleri için kullanıldı. Her renk için bağımsız "if" yapısı kullanıldı.

Yukarıdaki şemaya göre devremizi oluşturalım. Sonra da aşağıdaki kodu Ardunio'ya yükleyelim. 

int red=3;
int blue=5;
int green=6;
int analogValue = 0; 
int digitalValue = 0;
int redValue = 0;
int blueValue = 0;
int greenValue = 0;
void setup() {
pinMode(3, OUTPUT);
pinMode(5, OUTPUT); 
pinMode(6, OUTPUT);  
}
void loop(){
Serial.begin(9600);
analogValue = analogRead(A0);
digitalValue= map(analogValue,0,1023,0,255); //A0'dan gelen 0-1024 arası değeri map fonksiyonuyla 0-255 arasına oranlıyoruz
if(digitalValue<82)
{
  redValue= map(digitalValue,0,81,0,255); //dijital değer aralığını kırmızı tonları için oranlıyoruz
  analogWrite(red,redValue);  //Sadece kırmızı renk değerleri
  analogWrite(green,0);
  analogWrite(blue,0);
}
if(digitalValue>81 && digitalValue<164)
{
  blueValue= map(digitalValue,82,163,0,255); //dijital değer aralığını mavi tonları için oranlıyoruz
analogWrite(red,0); //Sadece mavi renk değerleri analogWrite(green,0); analogWrite(blue,blueValue); } if(digitalValue>163) { greenValue= map(digitalValue,164,255,0,255); //dijital değer aralığını kırmızı tonları için oranlıyoruz analogWrite(red,0); //Sadece yeşil renk değerleri analogWrite(green,greenValue); analogWrite(blue,0); } }

8) Buzzerdan düz ve kesintili sesler çıkarma

Amaç: Ardunio ile buzzer modülünden düz ve kesikli sesler çıkarmak

Malzemeler:

  • Ardunio Uno
  • Buzzer
  • 1 adet 150 Ohm Direnç
  • Breadboard
  • Jumper kablolar

Buzzer modülü gelen elektriksel frekanslara göre değişik tonlarda ses çıkaran bir modüldür. Buzzer ile alarm, uyarı sesleri yapılabilir. Hatta çeşitli notalarda melodiler bile çalınabilir. Bu konuda daha önce siteye eklenmiş bir örneğe buradan ulaşabilirsiniz. Burada buzzerın çalışma mantığını basit olarak kavramamızı sağlayacak örnekler yapacağız. Öncelikle yukarıdaki şekilde devremizi oluşturalım. Bu devrede direnç kullanılmasının sebebi buzzerdan gelecek cızırtılı sesi önlemektir. Eğer yeteri kadar ses çıkmıyorsa daha düşük bir direnç kullanabilirsiniz. Direnç kullanmadan da buzzeri bağlayabilirsiniz. Ama o zaman sesi biraz rahatsız edici olabiliyor. Büyük boyutlu bir direnç kullanırsanızda ses az çıkabilir.

Buzzerdan  sürekli ses çıkmasını sağlayan kaynak kod:

int buzzerPin = 2;
void setup()
{
   pinMode(buzzerPin, OUTPUT);
}
void loop()
{
   digitalWrite(buzzerPin,HIGH);
}

Buzzerdan 1 saniye aralıklı kesikli ses çıkmasını sağlayan kaynak kod:

int buzzerPin = 2;
void setup()
{
   pinMode(buzzerPin, OUTPUT);
}
void loop()
{
   digitalWrite(buzzerPin,HIGH);
   delay(1000);
   digitalWrite(buzzerPin,LOW);
   delay(1000);
}

9) Buton ile Buzzer kontrolü

Amaç: Ardunio ile buzzer modülünden butonun basıl olup olmama durumuna göre ses çıkartma

Malzemeler:

  • Ardunio Uno
  • Buzzer
  • Buton
  • 1 adet 10K Ohm Direnç (buton için)
  • Breadboard
  • Jumper kablolar

Buzzer modülünü butonla kontrol ederken bu örnekte 2 farklı durum uygulayacağız. Birinci durumda buton basılı iken buzzerdan ses çıkması değilken çıkmaması, ikinci durum da butona basılınca buzzerdan ses gelmeye başlaması, bir daha bastığımızda da buzzerdan  ses çıkmaması durumudur. Aslında bu durumun benzerini 4. etkinlikte yapmıştık. Burada led yerine buzzer kullanılacaktır.

Buton basıldığında buzzerdan ses veren, basılmadığında ses vermeyen kod bloğu söyledir:

int buttonPin=2;
int buzzerPin=4;
int buttonDurum=0;

void setup(){
    pinMode(buzzerPin,OUTPUT); //buzzer pinimizi çıkıs ayarladık
    pinMode(buttonPin,INPUT); // buton pinimizi giriş ayarladık
 
}
void loop(){
    
    buttonDurum=digitalRead(buttonPin); // butondan değeri okuyoruz 
    if(buttonDurum==HIGH)
    digitalWrite(buzzerPin,HIGH);
    else 
    digitalWrite(buzzerPin,LOW);
       
    delay(250); //Basma esnasındaki hızlı geçişleri engellemek için ufak bir bekleme koyuyoruz
}

Buton bir defa basıldığında buzzerdan ses vermeye başlayan, bir defa daha basıldığında sesi kesen kod şu şekildedir:

int buttonPin=2;
int buzzerPin=4;
int buttonDurum=0;
int buzzerDurum=0;
void setup(){
    pinMode(buzzerPin,OUTPUT); //buzzer pinimizi çıkıs ayarladık
    pinMode(buttonPin,INPUT); // buton pinimizi giriş ayarladık
 
}
void loop(){
    
    buttonDurum=digitalRead(buttonPin); // butondan değeri okuyoruz 
    if(buttonDurum==HIGH){
       if(buzzerDurum==0)
       {  
       buzzerDurum=1;
       }
       else
       {
       buzzerDurum=0; 
       }
       delay(250); //Basma esnasındaki hızlı geçişleri engellemek için ufak bir bekleme koyuyoruz
    };

      if(buzzerDurum==1)
    digitalWrite(buzzerPin,HIGH);
    else
    digitalWrite(buzzerPin,LOW);
}

10) Buzzerdan farklı butonlarla farklı tonlarda ses alma ve ses tonuna göre led yakma

Amaç: Ardunio ile buzzer modülünden 2 butonla 2 farklı tonda ses alma bu sırada basılan butona göre led yakma.

Malzemeler:

  • Ardunio Uno
  • Buzzer
  • 2xButon
  • 2xLed
  • 2 adet 10K Ohm Direnç (butonlar için)
  • 2 adet 220 Ohm Direnç (ledler için)
  • Breadboard
  • Jumper kablolar

Bu etkinliklte ilk defa "Select-Case" yapısı kullanıldı. Bu yapı ile bir değişkenin farklı durumlarına göre farklı kodlamalar yapılabilmektedir. Uygun durumlarda "Select-Case" yapısının kullanılması "if-Else if"-else" yapısına göre daha pratiktir. Ayrıca bu etkinlikte  buzzer için tone() fonksiyonu kullanıldı. Bu fonksiyon ile buzzerdan değişik frekanslarda ses çıkmasını sağlayabiliyoruz.  Bu fonksiyonun parametreleri

tone(pin_no,frekans,zaman_aralığı) şeklindedir. Aşağıdaki kodda zaman aralığı belirtilmediği için kesintisiz bir ses duyulacaktır. Yine aşağıdaki kod ile iki butona aynı anda basıldığında buzzerdan çıkan ses kesilecektir.

#define btnlow 2 //düşük ton butonu için 2 nolu pin belirlendi
#define btnhigh 4 //yüksek ton butonu için 4 nolu pin belirlendi
#define ledlow 5 //düşük ton ledi için 5 nolu pin belirlendi
#define ledhigh 6 //yüksek ton ledi için 6 nolu pin belirlendi
#define buzzerPin 9 //yüksek ton ledi için 6 nolu pin belirlendi
int btnlowDurum=0;
int btnhighDurum=0;
int buzzerDurum=0;
void setup(){
    pinMode(btnlow,INPUT); 
    pinMode(btnhigh,INPUT);
    pinMode(ledlow,OUTPUT); 
    pinMode(ledhigh,OUTPUT);    
    pinMode(buzzerPin,OUTPUT);  
}
void loop(){
    
    btnlowDurum=digitalRead(btnlow); 
    btnhighDurum=digitalRead(btnhigh); 


   if(btnlowDurum==HIGH && btnhighDurum==HIGH){
    buzzerDurum=0; //her iki butona aynı anda sesin kesilmesi için buzzerDurum değişkenini 0 yapıyoruz
  }


     if(btnlowDurum==HIGH){
    buzzerDurum=1; //düşük frekanslı ses için buzzerDurum değişkenini 1 yapıyoruz
  }

     if(btnhighDurum==HIGH){
    buzzerDurum=2; //yüksek frekanslı ses için buzzerDurum değişkenini 2 yapıyoruz
  }


switch (buzzerDurum) {
    case 0:
      digitalWrite(ledlow, LOW);
      digitalWrite(ledhigh, LOW);
      digitalWrite(buzzerPin, LOW);
      break;
    case 1:
      digitalWrite(ledlow, HIGH);
      digitalWrite(ledhigh, LOW);
      tone(buzzerPin, 264); //Düşük frekanslı ses için 264 değeri verildi siz daha farklı bir sayı yazabilirsiniz
      break;
    case 2:
      digitalWrite(ledlow, LOW);
      digitalWrite(ledhigh, HIGH);
      tone(buzzerPin, 528); //Yüksek frekanslı ses için 528 değeri verildi siz daha farklı bir sayı yazabilirsiniz
      break;
  }
}

Devamı gelecek...

1105 views
YORUMLAR