Arduino

Arduino Öğrenmek İsteyenlere, Basitten Karmaşığa Problemler

Bir şeyler öğrenmeye başlarken izleyeceğimiz yol çok önemlidir. Genellikle hepimiz bir konuda en kısa sürede uzmanlık seviyesine gelmek isteriz ama bu hiçte öyle kolay değildir. Her konuda olduğu gibi bunda da öncelikle emeklemek, sonra yürümek, en son koşmak vardır. Ne emeklemeden koşmalıyız, ne de sürekli emekleme seviyesinde kalmalıyız. Yani zamanı hep daha ileriye harcamak için kullanmalıyız.

Bugün hep aklımda olan bir projeden bahsedicem. Arduino ile hiyerarşik düzeyde yani basitten karmaşığa doğru problemler vericem ve seviyenize göre sizlerde artık sırada ne var diye düşünmeyeceksiniz. Ortalama 100 adet problemi buraya eklemeyi düşünüyorum. Aynı zamanda bu hiyerarşik düzeyde eğer ki sitede yapılmış örnekler var ise bunlara da link bağlantılarını ekleyeceğim. İlk olarak başlıyoruz

Başlangıç:
1. Arduino ile led yakmak. (Led yak söndür, süreleri değiştir)
2. Arduino ile İki adet led yakmak. (yan sön, ve flip flop yap)(ödev olarak 3 led verilebilir)
3. Arduino ile çakar devresi ! İlk proje!
4. Arduino ile trafik ışıkları uygulaması.
5. Arduino ile butona basarak led yakmak ! (çok önemli ilk if döngüsü, ilk buton bağlama )
5.1 Arduino ile 2 adet butona bağlı 2 adet led kontrolü(serial ekran)
5.2 Arduino ile 3 adet butonla 2 adet led kontrolü
5.3 Arduino ile 3 adet butonla 4 adet led kontrolü (ledlerin dansı)
6. Basit Otopark Uygulaması (sayac değişkeni)
7.Analog veri okuma – Potansiyometre ile voltaj okuma
7.1 Analog Veri Okuma – Potansiyometre ile led parlaklığını ayarlama
7.2 Analog Veri Okuma – Potansiyometre ile Servo motor kontrolü
7.3 Analog Veri Okuma – Her basım da 30 derece açı hareketi “İf ve for döngüsü iç içe
8. HCSR-04 Mesafe Sensörü ile Mesafe Ölçme
9. HCSR-04 ve Buzzer ile Park Sensörü yapımı
10. For Döngüsü İle 8 adet led kontrolü
11. Joystick Kullanarak Ledlerin Kontrolü

1. Arduino ile led yakmak. (Led yak söndür, süreleri değiştir)

void setup()
{
  pinMode(13, OUTPUT);
}

void loop()
{
  digitalWrite(13, HIGH);
  delay(2000); // Wait for 2000 millisecond(s)
  digitalWrite(13, LOW);
  delay(2000); // Wait for 5000 millisecond(s)
}

2. Arduino ile İki adet led yakmak. (yan sön, veya flip flop yapılabilir)( Ödev olarak 3 led yakılacaktır)

# Gerekli kodları yazınız

3. Arduino ile çakar devresi ! İlk proje!
İkişer adet kırmızı ve mavi led ile polis çakar devresi oluşturulacak. 2 kere hızlıca kırmızı ledler, daha sonra 2 kere hızlıca mavi ledler yanıp sönecektir.

//Program kodlarını oluşturunuz

4. Arduino ile trafik ışıkları uygulaması.

        int led = 2;
	int led2 = 3;
	int led3 = 4;
	int bekle = 500;
	
void setup() 
{
	pinMode(led, OUTPUT);
	pinMode(led2, OUTPUT);
  	pinMode(led3, OUTPUT);
}
void loop() 
{
	digitalWrite(led, HIGH);
	digitalWrite(led2, LOW);  
  	digitalWrite(led3, LOW);  
	delay(bekle);
  
	digitalWrite(led, LOW);
	digitalWrite(led2, HIGH);  
  	digitalWrite(led3, LOW); 
	delay(bekle);
  
  	digitalWrite(led, LOW);
	digitalWrite(led2, LOW);  
  	digitalWrite(led3, HIGH);
  	delay(bekle);
}

5. Arduino ile butona basarak led yakmak ! (İf-else yapısı ve pull down direnci)

//Gerekli devre şemasını oluşturunuz kodları yazınız.

5.1. Arduino ile 2 adet butona bağlı 2 adet led kontrolü
Birinci butona basıldığında kırmızı led, ikinci butona basıldığında ise yeşil led yanıp sönecek

int led = 10;
int led2 = 9;
int buton = 6;
int buton2= 5; 

void setup()
{
 pinMode(led, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(buton, INPUT);
 pinMode(buton2, INPUT);
 Serial.begin(9600);
}

void loop()
{
 if(digitalRead(buton)==HIGH)
 {
 	digitalWrite(led,HIGH);
   	delay(100);
        digitalWrite(led, LOW);
        delay(100);
   	Serial.println("Kirmizi Led Yandi !");
 }
 else if(digitalRead(buton2)==HIGH)
 {
 	digitalWrite(led2,HIGH);
   	delay(100);
        digitalWrite(led2, LOW);
        delay(100);
        Serial.println("Yesil Led Yandi !");
 }
 else
 {
  	digitalWrite(led, LOW);
   	digitalWrite(led2, LOW);
        Serial.println("Herhangi bir butona basiniz");
 }
}

5.2 Üç butonla İki led kontrolü
3 buton, 2 led ile çalışacaktır. Birinci butona basıldığında Birinci led yanıp sönecek. 2. butona basıldığında, 2 led aynı anda yanıp sönecek. 3. butona basıldığında Birinci ve ikinci led sırayla yanıp sönecektir. Program kodlarını yazınız

int buton = 2;
int buton2= 3;
int buton3=4;
int led = 5;
int led2 = 6;

void setup()
{
 pinMode(led, OUTPUT);		
 pinMode(buton, INPUT);
 pinMode(buton2, INPUT);
  pinMode(buton3,INPUT);
  pinMode(led2, OUTPUT);
}

void loop()
{
  if(digitalRead(buton)== HIGH)
  {
    digitalWrite(led, HIGH);
    delay(200);
    digitalWrite(led, LOW);
    delay(200);
  }
  else if(digitalRead(buton2) == HIGH)
  {
    digitalWrite(led, HIGH);
    digitalWrite(led2, HIGH);
    delay(200);
    digitalWrite(led, LOW);
    digitalWrite(led2, LOW);
    delay(200);
  }
    else if(digitalRead(buton3) == HIGH)
  {
    digitalWrite(led, HIGH);
    digitalWrite(led2, LOW);
    delay(200);
    digitalWrite(led, LOW);
    digitalWrite(led2, HIGH);
    delay(200);
  }
  else
  {
    digitalWrite(led, LOW);
    digitalWrite(led2, LOW);
  }
}

5.3 Üç adet butonla 4 adet led kontrolü (ledlerin dansı)
3 Buton ile 4 Led kontrol edilecektir. Birinci Butona bastığımızda, ilk 2 ve son 2 led sırayla yanıp sönecektir. İkinci butona bastığımızda ledlerin hepsi yanacaktır. Üçüncü butona bastığımızda ise ledler sırayla yanacaktır.  İlgili devre şemasını ve program kodlarını yazınız.

int kirmiziled = 4;    
int yesilled = 5;
int maviled = 6;
int sariled = 7;
int buton = 9;
int buton2 = 8;
int buton3 = 10;
int gecikme = 500;

void setup()
{
 pinMode(kirmiziled, OUTPUT);	
 pinMode(yesilled, OUTPUT);
 pinMode(sariled, OUTPUT);	
 pinMode(maviled, OUTPUT);
 pinMode(buton, INPUT);
 pinMode(buton2, INPUT);
 pinMode(buton3, INPUT);
}

void loop()
{
   
  if(digitalRead(buton)== HIGH)
    {
   		digitalWrite(sariled, HIGH);
    	delay(gecikme);
    	digitalWrite(sariled, HIGH);
    	digitalWrite(maviled, HIGH);
    	delay(gecikme);
 		digitalWrite(sariled, LOW);
 		delay(gecikme);						
 		digitalWrite(maviled, HIGH);
    	digitalWrite(yesilled, HIGH);
    	delay(gecikme);
 		digitalWrite(maviled, LOW);
    	delay(gecikme);
   		digitalWrite(yesilled, HIGH);
    	digitalWrite(kirmiziled, HIGH);
    	delay(gecikme);
 		digitalWrite(yesilled, LOW);
 		delay(gecikme);						
 		digitalWrite(kirmiziled, HIGH);
    	delay(gecikme);
 		digitalWrite(kirmiziled, LOW);
    	delay(gecikme);
 	}
  else if(digitalRead(buton2)== HIGH)
  	{
    	digitalWrite(kirmiziled, HIGH);
    	delay(gecikme);
    	digitalWrite(kirmiziled, HIGH);
    	digitalWrite(yesilled, HIGH);
    	delay(gecikme);
 		digitalWrite(kirmiziled, LOW);
 		delay(gecikme);						
 		digitalWrite(yesilled, HIGH);
    	digitalWrite(maviled, HIGH);
    	delay(gecikme);
 		digitalWrite(yesilled, LOW);
    	delay(gecikme);
   		digitalWrite(maviled, HIGH);
    	digitalWrite(sariled, HIGH);
    	delay(gecikme);
 		digitalWrite(maviled, LOW);
 		delay(gecikme);						
 		digitalWrite(sariled, HIGH);
    	delay(gecikme);
 		digitalWrite(sariled, LOW);
    	delay(gecikme);
   	}	
   else if(digitalRead(buton3) == HIGH)
   {
   		digitalWrite(maviled, HIGH);
    	digitalWrite(yesilled, HIGH);
     	delay(gecikme);
    	digitalWrite(maviled, LOW);
    	digitalWrite(yesilled, LOW);
        digitalWrite(kirmiziled, HIGH);
    	digitalWrite(sariled, HIGH);  
     	delay(gecikme);
     	digitalWrite(maviled, HIGH);
    	digitalWrite(yesilled, HIGH);
        digitalWrite(kirmiziled, HIGH);
    	digitalWrite(sariled, HIGH); 
     	delay(gecikme);
     	digitalWrite(maviled, 0);
    	digitalWrite(yesilled, 0);
        digitalWrite(kirmiziled, 0);
    	digitalWrite(sariled, 0); 
     	delay(gecikme);
     	digitalWrite(maviled, 1);
    	digitalWrite(yesilled, 1);
        digitalWrite(kirmiziled, 1);
   	 	digitalWrite(sariled, 1); 
   	    delay(gecikme);
   }
  
  
  else
    {
 		digitalWrite(kirmiziled, LOW);
 		digitalWrite(yesilled, LOW);
    	digitalWrite(sariled, LOW);
 		digitalWrite(maviled, LOW);
    }
}

6. Basit Otopark Uygulaması
Araç girişi olduğunda, araçları sayar, seri ekranda gösterir. 10 araç kapasitesine ulaşıldığında “otopark dolu” yazar kırmızı led yanar. Otopark açık oldugu sürece yeşil led yanar.

//Otopark Uygulaması Program Kodları
int doluled = 10;
int acikled = 11;
int gelenaraba = 3;
int gidenaraba = 4;
int sayac  = 0 ;

void setup()
{
  pinMode(doluled, OUTPUT);
  pinMode(acikled, OUTPUT);
  pinMode(gelenaraba, INPUT);
  pinMode(gidenaraba, INPUT);
  Serial.begin(9600);		// Seri haberleşmeyi başlatır
}
void loop()
{
    
  if(digitalRead(gelenaraba)== 1)
  { 
    sayac = sayac +1;
    Serial.print("araba sayisi ");
    Serial.println(sayac);
    delay(250);
    Serial.println("OTOPARK BOS");
   }
   else if(digitalRead(gidenaraba)==1)
  {
  	sayac = sayac -1;
    Serial.print("araba sayisi ");
    Serial.println(sayac);
    delay(250);
    Serial.println("OTOPARK BOS");
  }
  else if(sayac == 10)
  {
    digitalWrite(doluled, HIGH);
    digitalWrite(acikled, LOW);
    Serial.println("OTOPARK DOLU");
  }
  else
  {
   digitalWrite(acikled, HIGH);
   digitalWrite(doluled, LOW); 
  }
}

7.Analog veri okuma – Potansiyometre ile voltaj okuma
A. Potansiyomtreden gelen veriler seri ekranda gösterir
B. Gelen verileri yazdığımız formul ile 5 volt kademesinde okumamızı sağlar. (Bu uygulamayı çalıştırmak için, // ve /* */ komutlarını siliniz.)

int Pot = A0;
int gelen_veri = 0;
// B. float voltaj;

void setup()
{
pinMode(Pot, INPUT);
Serial.begin(9600);
}

void loop()
{
 gelen_veri = analogRead(Pot);
 Serial.print("Gelen veri: ");
 Serial.println(gelen_veri);
 
/*B voltaj = gelen_veri*(5.0/1023.0);                      
 Serial.print("Voltaj degeri: ");
 Serial.println(voltaj);
 delay(500); B*/
}

Not: Float ile formül yazarken ne olursa olsun sayı değerlerimiz .0 ile yazılmalıdır yani 5 değil 5.0

7.1 Analog Veri Okuma – Potansiyometre ile led parlaklığını ayarlama

int Pot = A0;
int gelen_veri;
int led = 3;
int parlaklik;

void setup()
{
pinMode(Pot, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}

void loop()
{
 gelen_veri = analogRead(Pot);
 Serial.print("Gelen veri: ");
 Serial.println(gelen_veri);
  
 parlaklik = map(gelen_veri,0,1023,0,255);
 analogWrite(led, parlaklik);
 Serial.print("Anlik parlaklik: ");
 Serial.println(parlaklik);
}

7.2 Analog Veri Okuma – Potansiyometre ile Servo motor kontrolü
Önceki devremize devam niteliğinde olan bu programımızda, map komutunun max değerini 180’e ayarlayarak, Led parkalığını değiştiriken aynı zamanda Servo motorumuzu da Kontrol ediyoruz.

#include<Servo.h>

Servo motor;
int Pot = A0;
int gelen_veri;
int led = 3;
int parlaklik;

void setup()
{
motor.attach(5);
pinMode(Pot, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}

void loop()
{
 gelen_veri = analogRead(Pot);
 Serial.print("Gelen veri: ");
 Serial.println(gelen_veri);
  
 parlaklik = map(gelen_veri,0,1023,0,180);
 analogWrite(led, parlaklik);
 Serial.print("Anlik parlaklik: ");
 Serial.println(parlaklik);
  
 motor.write(parlaklik); 
}
7.3 Analog Veri Okuma – Her basım da 30 derece açı hareketi “İf ve for döngüsü iç içe

Program: Butono her basışımızda servo motorumuz 30 derece yukarıya cıkacaktır. Ancak 180 dereceye ulasınca 0 a dönecektir. Uygun devre şemasını ve program kodlarını yazınız.

#include<Servo.h>

Servo motor;
int tus = 6;
int aci=0;
int son;
void setup()
{
motor.attach(5);
pinMode(tus, INPUT);
Serial.begin(9600);
}
void loop()
{
 int gelen_veri = digitalRead(tus);
 Serial.print("Gelen veri: ");
 Serial.println(gelen_veri);
 Serial.print("motor aci: ");
 Serial.println(aci);

  if(digitalRead(tus)==1)
     {
     	son = aci+30;
       for(aci; aci<son; aci++)
       {
         motor.write(aci);
       }
     if((aci)== 180)
    		aci=0;
  }
 }
8. HCSR-04 Mesafe Sensörü ile Mesafe Ölçme
int trigpin= 8;
int echopin = 6;
int sure;
int mesafe;

void setup()
{
 pinMode(trigpin, OUTPUT);
 pinMode(echopin, INPUT);
 Serial.begin(9600);
}

void loop()
{
 digitalWrite(trigpin, HIGH);
 delayMicroseconds(1000);
 digitalWrite(trigpin, LOW);
 sure = pulseIn(echopin, HIGH);
 mesafe = (sure/2)/29.1;
  
 Serial.print("Cisme olan uzaklik: ");
 Serial.println(mesafe);
}
9. HCSR-04 ve Buzzer ile Park Sensörü yapımı
int trigpin= 8;
int echopin = 6;
int sure;
int mesafe;
int buzzer = 9;
int ses = 100;
int sus = 0;

void setup()
{
 pinMode(trigpin, OUTPUT);
 pinMode(echopin, INPUT);
 pinMode(buzzer, OUTPUT);
 Serial.begin(9600);
}
void loop()
{
 digitalWrite(trigpin, HIGH);
 delayMicroseconds(1000);
 digitalWrite(trigpin, LOW);
 sure = pulseIn(echopin, HIGH);
 mesafe = (sure/2)/29.1;
  
 Serial.print("Cisme olan uzaklik: ");
 Serial.println(mesafe);
 
 if(mesafe<=20)
 {
  analogWrite(buzzer, ses);
  delay(200);
  analogWrite(buzzer, sus);
  delay(200);
 }
 else if(mesafe<=50)
 {
  analogWrite(buzzer, ses);
  delay(500);
  analogWrite(buzzer, sus);
  delay(500);
 }
 else if(mesafe<=100)
  {
  analogWrite(buzzer, ses);
  delay(1000);
  analogWrite(buzzer, sus);
  delay(1000);
  }
  else
  {
  analogWrite(buzzer, sus);
  }
}

10. For Döngüsü ile 8 adet Led kontrolü

int bekle = 100;
int bekle1 = 20;
void setup() 
{
  for (int pin = 3; pin < 11; pin++) 
  {
    pinMode(pin, OUTPUT);
  }
}


void loop() 
{
for (int basla=0; basla<8; basla++)
  {
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);
    delay(bekle);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    delay(bekle1);
     digitalWrite(5, HIGH);
    digitalWrite(8, HIGH);
    delay(bekle);
    digitalWrite(5, LOW);
    digitalWrite(8, LOW);
    delay(bekle1);
    digitalWrite(4, HIGH);
    digitalWrite(9, HIGH);
    delay(bekle);
    digitalWrite(4, LOW);
    digitalWrite(9, LOW);
    delay(bekle1);
     digitalWrite(3, HIGH);
    digitalWrite(10, HIGH);
    delay(bekle);
    digitalWrite(3, LOW);
    digitalWrite(10, LOW);
    delay(bekle1);
  }
  for (int durum=0; durum<5; durum++)
  {
   digitalWrite(3, HIGH);
   digitalWrite(4, HIGH);
   digitalWrite(5, HIGH);
   digitalWrite(6, HIGH);
   digitalWrite(7, HIGH);
   digitalWrite(8, HIGH); 
   digitalWrite(9, HIGH);
   digitalWrite(10, HIGH);
   delay(bekle);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 0);
   digitalWrite(8, 0); 
   digitalWrite(9, 0);
   digitalWrite(10, 0);
   delay(bekle);
  }
}   

11. Joystick Kullanarak Ledlerin Kullanımı

Joystick sağa ve sola hareketleri ile ledleri yakacak, aşağı hareketi ile hepsi sönecek. Gerekli kodlar bunlar

int xPin = A0; 
int yPin = A1; 
int butonPin = 2;
int bekle = 100;
int bekle1 = 20; 
int i;
int j;
int xPozisyon;
int yPozisyon;
int butonDurum;
 
void setup() {
Serial.begin(9600);
{
  for (int pin = 3; pin < 11; pin++) 
  {
    pinMode(pin, OUTPUT);
  }
}

pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
pinMode(butonPin, INPUT_PULLUP);
}
 
void loop() {
xPozisyon = analogRead(xPin);
yPozisyon = analogRead(yPin);
butonDurum = digitalRead(butonPin);
 
Serial.print("X Pozisyonu: ");
Serial.print(xPozisyon);
Serial.print(" | Y Pozisyonu: ");
Serial.print(yPozisyon);
Serial.print(" | Buton Durum: ");
Serial.println(butonDurum);
delay(100);

i = map(yPozisyon, 0, 1023, 3, 11);
digitalWrite( i, HIGH);

if(xPozisyon <= 200)
{
  digitalWrite(3, 0);
  digitalWrite(4, 0);
  digitalWrite(5, 0);
  digitalWrite(6, 0);
  digitalWrite(7, 0);
  digitalWrite(8, 0); 
  digitalWrite(9, 0);
  digitalWrite(10, 0);
  }
} 

Similar Posts

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir