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. (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 :smiley: 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