Arduino Uno ile Hareket Sayan Dambıl
  • Üniversite 2 yıllık Elektronik öğrencisiyim. Bitirme ödevi olarak dambıl yapmam gerekiyor.
    Bu dambılın bir yüzünde hoparlör, diğer yüzünde ise 2x16 LCD ekranım var. Projemin şu şekilde çalışması gerekiyor:
    Dambılı her yukarı kaldırdığımda LCD ekranda kaç kez kaldırdığımı görmem ve hoparlörden de kaldırdığım anda bir,iki,üç şeklinde saydırmam gerekiyor.
    Dambılın hareketini algılatmak için civalı sensör(yukarıdaysa 1 , aşağıdaysa 0 şeklinde çalışma mantığı ) kullandım. Hoparlörden bir,iki,üç vb. saydırmak için arduino sd kart modülü aldım sesleri wav formatında kaydettim.
    Fakat daha önce pek kod yazmışlığım yok. Çok az bir bilgim var ama faydası yok denecek kadar az.

    - SD Kart Modülü için kullandığım kütüphane: SimpleSDAudio
    - LCD Ekran için kullandığım kütüphane: LiquidCrystal

    Yazdığım KOD şu şekilde:

    #include < SimpleSDAudio.h> // SD Kart Modül Kütüphanesi(Sesleri SD Karta Yükleyeceğiz)
    #include < LiquidCrystal.h> // LCD Ekran Kütüphanesi

    LiquidCrystal lcd(7, 8, 9, 10, 11 , 12); // LCD Ekranın Arduino Üzerindeki Bağlantı Numaraları

    #define LCD_LIGHT_PIN 6 // LCD Arkaplan Işığı Pini

    int civalisensor=3; // Civalı Sensörü Arduino'nun 3 Numaralı Girişine Bağladık
    int sayi; // LCD Ekranda Görünmesi ve Sesli Çıkış İçin sayi Adında Değişken Tanımladık

    void setup() { // Tek Seferlik Çalışacak Kodlar Buraya Yazılır
    pinMode(LCD_LIGHT_PIN, OUTPUT); // LCD Arkaplan Işığı
    digitalWrite(LCD_LIGHT_PIN, HIGH); // LCD Arkaplan Işığını Aç



    Serial.begin(9600);
    pinMode(civalisensor,INPUT); // Civalı Sensör'ün Bağlandığı Pin Giriş Olarak Ayarlanıyor
    }

    void loop() { // Sürekli Tekrarlanacak İşlemler Void Loop(){} Komutu İçine Yazılır

    if(digitalRead(civalisensor) == HIGH ) // Eğer Civalı Sensör aktifleşirse...
    {
    sayi==1; // Civalı Sensör 1 Kere Aktif Olursa , 1'e Eşit olursa...
    lcd.begin(16, 2);
    lcd.setCursor(4,0); // 1.satır
    lcd.print("KALDIRMA"); // 1.satır metin
    lcd.setCursor(4,2); // 2.satır
    lcd.print("SAYISI: 1"); // 2.satır metin // Kaldırma Sayısı 1 Şeklinde LCD Ekrana Yazdır.

    }
    if(digitalRead(civalisensor) == HIGH ) // Eğer Civalı Sensör aktifleşirse...
    {
    sayi== 2; // Civalı Sensör 2. Kere Aktif Olursa , 2'e Eşit olursa...
    lcd.begin(16, 2);
    lcd.setCursor(4,0); // 1.satır
    lcd.print("KALDIRMA"); // 1.satır metin
    lcd.setCursor(4,2); // 2.satır
    lcd.print("SAYISI: 2"); // 2.satır metin // Kaldırma Sayısı 2 Şeklinde LCD Ekrana Yazdır.

    }
    if(digitalRead(civalisensor) == HIGH ) // Eğer Civalı Sensör aktifleşirse...
    {
    sayi==3; // Civalı Sensör 3 Kere Aktif Olursa , 3'e Eşit olursa...
    lcd.begin(16, 2);
    lcd.setCursor(4,0); // 1.satır
    lcd.print("KALDIRMA"); // 1.satır metin
    lcd.setCursor(4,2); // 2.satır
    lcd.print("SAYISI: 3"); // 2.satır metin // Kaldırma Sayısı 3 Şeklinde LCD Ekrana Yazdır.

    }
    if(digitalRead(civalisensor) == HIGH ) // Eğer Civalı Sensör aktifleşirse...
    {
    sayi==4; // Civalı Sensör 4 Kere Aktif Olursa , 4'e Eşit olursa...
    lcd.begin(16, 2);
    lcd.setCursor(4,0); // 1.satır
    lcd.print("KALDIRMA"); // 1.satır metin
    lcd.setCursor(4,2); // 2.satır
    lcd.print("SAYISI: 4"); // 2.satır metin // Kaldırma Sayısı 4 Şeklinde LCD Ekrana Yazdır.

    }
    if(digitalRead(civalisensor) == HIGH ) // Eğer Civalı Sensör aktifleşirse...
    {
    sayi==5; // Civalı Sensör 5 Kere Aktif Olursa , 5'e Eşit olursa...
    lcd.begin(16, 2);
    lcd.setCursor(4,0); // 1.satır
    lcd.print("KALDIRMA"); // 1.satır metin
    lcd.setCursor(4,2); // 2.satır
    lcd.print("SAYISI: 5"); // 2.satır metin // Kaldırma Sayısı 5 Şeklinde LCD Ekrana Yazdır.

    }
    if(digitalRead(civalisensor) == HIGH ) // Eğer Civalı Sensör aktifleşirse..
    {
    sayi==1,!SdPlay.setFile("1.wav"); // Civalı Sensör Değeri 1'e Eşit Olursa 1.wav Adlı Sesi Çal
    sayi==2,!SdPlay.setFile("2.wav"); // Civalı Sensör Değeri 2'e Eşit Olursa 2.wav Adlı Sesi Çal
    sayi==3,!SdPlay.setFile("3.wav"); // Civalı Sensör Değeri 3'e Eşit Olursa 3.wav Adlı Sesi Çal
    sayi==4,!SdPlay.setFile("4.wav"); // Civalı Sensör Değeri 4'e Eşit Olursa 4.wav Adlı Sesi Çal
    sayi==5,!SdPlay.setFile("5.wav"); // Civalı Sensör Değeri 5'e Eşit Olursa 5.wav Adlı Sesi Çal
    Serial.println();
    }

    SdPlay.play(); // SD Karttan Seçilen Dosyayı Çal

    }

    Örnek olarak 5'e kadar sayan bir şey denedim fakat dambılı her kaldırdığımda LCD ekrandaki yazılar gidip gelmeye başlıyor ve çok hızlı sayıyor(Örneğin ilk kaldırışımda 1'den 4'e atlıyor).Büyük ihtimal civalı sensörü hep high olarak verdiğim için. Bu yazdığım ilk kod bu arada. Çok yanlış var. Bu şekilde en az 50'ye kadar saymasını istiyor öğretim görevlisi. For döngüsü olması gerek galiba (sayi=0; sayi<=50; sayi++; şeklinde sanırım) ama for olunca ekrana nasıl yazı yazdırırım bilmiyorum. Yukarıdaki kodlar gibi yazarsam olmuyor ve bir sürü if döngüsü oluyor kodda.<br />(Dambılı yukarı kaldırınca 1, aşağı indirince 0 bilgisi alıyorum civalı sensör ile)
    Koduma yardım eder misiniz lütfen
  • civalı sensörle olabileceğini sanmıyorum. belki jiroskop ile mümkündür. kod kısmına gelirsek. sensörü her döngüde bir defa okumalısın. sen defalarca okumuşsun

    aşağıdaki kod bir fikir verecektir

    if(digitalRead(civalisensor) == HIGH )
    {
    sayi++;
    }

    if (sayi==1)
    {
    //Yapılacak işlemler
    }
    if(sayi==2)
    {
    //Yapılacak işlemler
    }

    edit: mesafe sensörüde belki olabilir. yerden yüksekliği ölçebilirsin. bence en uygun olan yer çekimi sensörü
  • eğer sensörün kaldırdığında 1 indirdiğinde 0 verdiğinden emin isen.
    Şunu dene


    #include < SimpleSDAudio.h> // SD Kart Modül Kütüphanesi(Sesleri SD Karta Yükleyeceğiz)
    #include < LiquidCrystal.h> // LCD Ekran Kütüphanesi

    LiquidCrystal lcd(7, 8, 9, 10, 11 , 12); // LCD Ekranın Arduino Üzerindeki Bağlantı Numaraları

    #define LCD_LIGHT_PIN 6 // LCD Arkaplan Işığı Pini
    int civalisensor=3; // Civalı Sensörü Arduino'nun 3 Numaralı Girişine Bağladık
    int sayi; // LCD Ekranda Görünmesi ve Sesli Çıkış İçin sayi Adında Değişken Tanımladık
    int kontrol=1;

    void setup() { // Tek Seferlik Çalışacak Kodlar Buraya Yazılır
    pinMode(LCD_LIGHT_PIN, OUTPUT); // LCD Arkaplan Işığı
    digitalWrite(LCD_LIGHT_PIN, HIGH); // LCD Arkaplan Işığını Aç




    void setup()
    {
    pinMode(LCD_LIGHT_PIN, OUTPUT); // LCD Arkaplan Işığı
    digitalWrite(LCD_LIGHT_PIN, HIGH); // LCD Arkaplan Işığını Aç
    Serial.begin(9600);
    pinMode(civalisensor,INPUT); // Civalı Sensör'ün Bağlandığı Pin Giriş Olarak Ayarlanıyor
    }


    void loop()
    {
    if(digitalRead(civalisensor) == HIGH ) // Eğer Civalı Sensör aktifleşirse...
    {
    if(kontrol)
    {
    kontrol = 0 ;
    sayi++1;
    if(sayi == 1)
    {
    lcd.begin(16, 2);
    lcd.setCursor(4,0); // 1.satır
    lcd.print("KALDIRMA"); // 1.satır metin
    lcd.setCursor(4,2); // 2.satır
    lcd.print("SAYISI: 1"); // 2.satır metin // Kaldırma Sayısı 1 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("1.wav"); // Civalı Sensör Değeri 1'e Eşit Olursa 1.wav Adlı Sesi Çal
    }
    else if(sayi == 2)
    {
    lcd.begin(16, 2);
    lcd.setCursor(4,0); // 1.satır
    lcd.print("KALDIRMA"); // 1.satır metin
    lcd.setCursor(4,2); // 2.satır
    lcd.print("SAYISI: 2"); // 2.satır metin // Kaldırma Sayısı 2 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("2.wav"); // Civalı Sensör Değeri 1'e Eşit Olursa 1.wav Adlı Sesi Çal
    }
    else if(sayi == 3)
    {
    lcd.begin(16, 2);
    lcd.setCursor(4,0); // 1.satır
    lcd.print("KALDIRMA"); // 1.satır metin
    lcd.setCursor(4,2); // 2.satır
    lcd.print("SAYISI: 3"); // 2.satır metin // Kaldırma Sayısı 3 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("3.wav"); // Civalı Sensör Değeri 1'e Eşit Olursa 1.wav Adlı Sesi Çal
    }
    else if(sayi == 4)
    {
    lcd.begin(16, 2);
    lcd.setCursor(4,0); // 1.satır
    lcd.print("KALDIRMA"); // 1.satır metin
    lcd.setCursor(4,2); // 2.satır
    lcd.print("SAYISI: 4"); // 2.satır metin // Kaldırma Sayısı 3 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("4.wav"); // Civalı Sensör Değeri 1'e Eşit Olursa 1.wav Adlı Sesi Çal
    }
    else if(sayi == 5)
    {
    sayi==5; // Civalı Sensör 5 Kere Aktif Olursa , 5'e Eşit olursa...
    lcd.begin(16, 2);
    lcd.setCursor(4,0); // 1.satır
    lcd.print("KALDIRMA"); // 1.satır metin
    lcd.setCursor(4,2); // 2.satır
    lcd.print("SAYISI: 5"); // 2.satır metin // Kaldırma Sayısı 5 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("5.wav"); // Civalı Sensör Değeri 1'e Eşit Olursa 1.wav Adlı Sesi Çal
    }
    }
    }
    else kontrol=1;
    }



    yazım hatası varsa düzeltirsin.
  • ekmekci dostum çok teşekkür ederim senin gönderdiğin kodlar ile hata gitti . 50'ye kadar sayması için gerisini ayarladım ve LCD ekranda görüntüyü 50'ye kadar alabiliyorum. Ama sd karttan ses çalmıyor bu sefer. sadece ses sıkıntım var
    Yeni kodlar bu şekilde:

    #include < SimpleSDAudio.h> // SD Kart Modül Kütüphanesi(Sesleri SD Karta Yükleyeceğiz)
    #include < LiquidCrystal.h> // LCD Ekran Kütüphanesi

    LiquidCrystal lcd(7, 8, A0, A1, A2 , A3); // LCD Ekranın Arduino Üzerindeki Bağlantı Numaraları

    #define LCD_LIGHT_PIN 6 // LCD Arkaplan Işığı Pini
    int civalisensor=3; // Civalı Sensörü Arduino'nun 3 Numaralı Girişine Bağladık
    int sayi; // LCD Ekranda Görünmesi ve Sesli Çıkış İçin sayi Adında Değişken Tanımladık
    int kontrol=1;


    void setup()
    {
    SdPlay.setSDCSPin(4); // sd kart cs pini
    SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER);
    pinMode(LCD_LIGHT_PIN, OUTPUT); // LCD Arkaplan Işığı
    digitalWrite(LCD_LIGHT_PIN, HIGH); // LCD Arkaplan Işığını Aç
    Serial.begin(9600);
    pinMode(civalisensor,INPUT); // Civalı Sensör'ün Bağlandığı Pin Giriş Olarak Ayarlanıyor
    }


    void loop()
    {
    if(digitalRead(civalisensor) == HIGH ) // Eğer Civalı Sensör aktifleşirse...
    {
    if(kontrol)
    {
    kontrol = 0 ;
    sayi ++ ;
    if(sayi == 1) // Civalı Sensör 1 Kere Aktif Olursa
    {
    lcd.begin(16, 2);
    lcd.setCursor(4,0);
    lcd.print("KALDIRMA");
    lcd.setCursor(4,2);
    lcd.print("SAYISI: 1"); // Kaldırma Sayısı 1 Şeklinde LCD Ekrana Yazdır.
    SdPlay.setFile("1.wav"); // 1. sesi çal
    SdPlay.play();
    }
    else if(sayi == 2) // Civalı Sensör 2 Kere Aktif Olursa
    {
    lcd.begin(16, 2);
    lcd.setCursor(4,0);
    lcd.print("KALDIRMA");
    lcd.setCursor(4,2);
    lcd.print("SAYISI: 2"); // Kaldırma Sayısı 2 Şeklinde LCD Ekrana Yazdır.
    SdPlay.setFile("2.wav"); // 2. sesi çal
    SdPlay.play();
    }
    else if(sayi == 3) // Civalı Sensör 3 Kere Aktif Olursa
    {
    lcd.begin(16, 2);
    lcd.setCursor(4,0);
    lcd.print("KALDIRMA");
    lcd.setCursor(4,2);
    lcd.print("SAYISI: 3"); // Kaldırma Sayısı 3 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("3.wav"); // 3. sesi çal
    SdPlay.play();
    }
    else if(sayi == 4) // Civalı Sensör 4 Kere Aktif Olursa
    {
    lcd.begin(16, 2);
    lcd.setCursor(4,0);
    lcd.print("KALDIRMA");
    lcd.setCursor(4,2);
    lcd.print("SAYISI: 4"); // Kaldırma Sayısı 4 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("4.wav"); // 4. sesi çal
    }
    else if(sayi == 5)
    {
    sayi==5; // Civalı Sensör 5 Kere Aktif Olursa
    lcd.begin(16, 2);
    lcd.setCursor(4,0);
    lcd.print("KALDIRMA");
    lcd.setCursor(4,2);
    lcd.print("SAYISI: 5"); // Kaldırma Sayısı 5 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("5.wav"); // 5. sesi çal
    }
    else if(sayi == 6)
    {
    sayi==6; // Civalı Sensör 6 Kere Aktif Olursa
    lcd.begin(16, 2);
    lcd.setCursor(4,0);
    lcd.print("KALDIRMA");
    lcd.setCursor(4,2);
    lcd.print("SAYISI: 6"); // Kaldırma Sayısı 6 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("6.wav"); // 6. sesi çal
    }
    else if(sayi == 7)
    {
    sayi==7; // Civalı Sensör 7 Kere Aktif Olursa
    lcd.begin(16, 2);
    lcd.setCursor(4,0);
    lcd.print("KALDIRMA");
    lcd.setCursor(4,2);
    lcd.print("SAYISI: 7"); // Kaldırma Sayısı 7 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("7.wav"); // 7. sesi çal
    }
    else if(sayi == 8)
    {
    sayi==8; // Civalı Sensör 8 Kere Aktif Olursa
    lcd.begin(16, 2);
    lcd.setCursor(4,0);
    lcd.print("KALDIRMA");
    lcd.setCursor(4,2);
    lcd.print("SAYISI: 8"); // Kaldırma Sayısı 8 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("8.wav"); // 8. sesi çal
    }
    else if(sayi == 9)
    {
    sayi==9; // Civalı Sensör 9 Kere Aktif Olursa
    lcd.begin(16, 2);
    lcd.setCursor(4,0);
    lcd.print("KALDIRMA");
    lcd.setCursor(4,2);
    lcd.print("SAYISI: 9"); // Kaldırma Sayısı 9 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("9.wav"); // 9. sesi çal
    }
    else if(sayi == 10)
    {
    sayi==10; // Civalı Sensör 10 Kere Aktif Olursa
    lcd.begin(16, 2);
    lcd.setCursor(4,0);
    lcd.print("KALDIRMA");
    lcd.setCursor(4,2);
    lcd.print("SAYISI: 10"); // Kaldırma Sayısı 10 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("10.wav"); // 10. sesi çal
    }
    else if(sayi == 11)
    {
    sayi==11; // Civalı Sensör 11 Kere Aktif Olursa
    lcd.begin(16, 2);
    lcd.setCursor(4,0);
    lcd.print("KALDIRMA");
    lcd.setCursor(4,2);
    lcd.print("SAYISI: 11"); // Kaldırma Sayısı 11 Şeklinde LCD Ekrana Yazdır.
    !SdPlay.setFile("11.wav"); // 11. sesi çal
    }


    }
    }
    else kontrol=1;
    }
    Kodları 50'ye kadar yazdım bu şekilde.
    Ne eksik anlayamadım, araştırdım internette. Hata olmaması lazım.
    SdPlay.play(); komutu mu eklemem lazım?
  • o nasıl kod yazmak öyle :D bir döngüye filan alamadın mı ? 50 ye kadar yazılır mı ya. bir de sayi==11 , filan demişssin if in içinde bu neden gerekli ? zaten if te soruyorsun... eşitse 11 dir....
  • İlk kez yazdım kod. Bunu da forumdan biri düzeltti zaten. 1 hafta da sürem kaldı gece gündüz kurcalıyorum . Mecburen yazdım buraya

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.