Duyuru

Çöküş
Henüz duyuru yok

Aynı anda 3 adet ultrasonik sensörden 3 farklı buzzer ile dönüt alma

Çöküş
X
 
  • Filtrele
  • Zaman
  • Göster
Hepsini Sil
yeni mesajlar

  • Aynı anda 3 adet ultrasonik sensörden 3 farklı buzzer ile dönüt alma

    Merhabalar yukarıda belirttiğim gibi 3 adet ultrasonik sensörden her biri için 1 adet olmak üzere 3 buzzerdan ses almak istiyorum park sensörü gibi. A sensörü tespit yapınca A buzzerı ötecek B sensöründe B buzzerı şeklinde. Kodunu yazmakta sıkıntı çekiyorum. Kontrol etmeme rağmen kod hata verip duruyor. Yardımcı olursanız sevinirim.

  • #2

    3 tane mesafe sensörünü deneyap kartın 5 voltluk yerinden tek olarak beslerseniz yetersiz gelebilir. Harici bir kaynaktan beslemeniz sensörün verimli çalışmasını sağlayacaktır.

    Kodları buraya eklerseniz hata varsa size cevap veren birisi olabilir

    Yorum Yap


    • #3
      Aslı zafercopur tarafından gönderilmiş Mesajı göster
      3 tane mesafe sensörünü deneyap kartın 5 voltluk yerinden tek olarak beslerseniz yetersiz gelebilir. Harici bir kaynaktan beslemeniz sensörün verimli çalışmasını sağlayacaktır.

      Kodları buraya eklerseniz hata varsa size cevap veren birisi olabilir
      Kodum aşağıda şuan 2 sensör 2 buzzerlısını yapmayı deniyorum ama buda çalışmıuyor maalesef. Girişlerde sorunda yok

      #include "deneyap.h" //deneyap.h kütüphanemizi import ediyoruz
      #include "hcsr04ESP32.h" //sensör kütüphanesini import ediyoruz

      #define trigPin D0
      #define echoPin D1
      #define trigPina D8
      #define echoPinb D9
      #define buzzer D4
      #define buzzer2 D5

      UltraSonicDistanceSensor distanceSensora(trigPin, echoPin);
      UltraSonicDistanceSensor distanceSensorb(trigPina, echoPinb); // Ultrasonik sensor pin konfigurasyonu

      void setup () {
      Serial.begin(9600); // Seri haberleme baslatildi
      pinMode(buzzer, OUTPUT); //buzzerın bağlı olduğu dijital pin çıkış olarak ayarlanır
      pinMode(buzzer2, OUTPUT);
      }

      void loop () {
      float mesafe = distanceSensora.measureDistanceCm();
      float mesafe2 = distanceSensorb.measureDistanceCm();
      Serial.println(mesafe); // Ultrasonik olcum yapiliyor ve seri terminale veri gonderiliyor
      Serial.println(mesafe2);

      //sensör geçersiz aralıkta (2 cm den az veya 400 cm den fazla) bir ölçüm yapmaya çalıştığında negatif değer döndürür. Bu durumu if bloğunda kontrol ediyoruz

      if (mesafe < 0 ){
      Serial.println("Mesafe ölçülemedi veya geçerli aralıkta değil");
      }
      else{
      //belirli mesafe aralıklarında buzzer dan farklı aralıklarla ses çıkartıyoruz. 20 cm den azsa sürekli, 20 - 40 cm aralığında ise 50 ms aralıklarla, 40 - 60 cm aralığında 100 ms aralıklarla buzzer dan ses çıkartılır. 100 cm den uzunsa ses çıkartılmaz
      if(mesafe<20){
      digitalWrite(buzzer,1);
      }
      else if(mesafe<80){
      delay(50);
      digitalWrite(buzzer,1);
      delay(50);
      digitalWrite(buzzer,0);
      }
      else if(mesafe<120){
      delay(150);
      digitalWrite(buzzer,1);
      delay(150);
      digitalWrite(buzzer,0);
      }
      else if(mesafe<160){
      delay(500);
      digitalWrite(buzzer,1);
      delay(500);
      digitalWrite(buzzer,0);
      }
      else{
      digitalWrite(buzzer,0);
      }
      }

      if (mesafe2 < 0 ){
      Serial.println("Mesafe ölçülemedi veya geçerli aralıkta değil");
      }
      else{
      //belirli mesafe aralıklarında buzzer dan farklı aralıklarla ses çıkartıyoruz. 20 cm den azsa sürekli, 20 - 40 cm aralığında ise 50 ms aralıklarla, 40 - 60 cm aralığında 100 ms aralıklarla buzzer dan ses çıkartılır. 100 cm den uzunsa ses çıkartılmaz
      if(mesafe2 <20){
      digitalWrite(buzzer2,1);
      }
      else if(mesafe2 <80){
      delay(50);
      digitalWrite(buzzer2,1);
      delay(50);
      digitalWrite(buzzer2,0);
      }
      else if(mesafe2 <120){
      delay(150);
      digitalWrite(buzzer2,1);
      delay(150);
      digitalWrite(buzzer2,0);
      }
      else if(mesafe2 <160){
      delay(500);
      digitalWrite(buzzer2,1);
      delay(500);
      digitalWrite(buzzer2,0);
      }
      else{
      digitalWrite(buzzer2,0);
      }
      }
      }

      Yorum Yap


      • #4
        Hata veriyor yazmışsınız. Hata mesajını buraya yazarsanız yardımcı olunabilir.

        Çok bildiğim bir şey değil ama dikkatimi çektiğinden yazıyorum. Bu kod sizin belirttiğiniz işi yapmaz.

        Kod:
        delay(500);
        digitalWrite(buzzer2,1);
        delay(500);
        digitalWrite(buzzer2,0);
        şeklindeki ifadelerde ses çalmadan önce bekleniyor (burada yarım saniye) sonra ses çalınıyor ve sonra tekrar yarım saniye beklendikten sonra ses kapatılıyor. Bir sensörden fazla kullandığınızda bu beklemelerden dolayı ikinci buzzerin çalması için birincinin çalma süresinin dolması gerekiyor. Birisi 500 milisaniye çalacaksa öbürü 20 milisaniyede bir çalamaz. Diğerini bekler. Bitince 20 ms çalar.

        Bence çoklu mesafe sensörünün bu şekilde kodlanmaması gerekiyor. Loop prosedüründe, buzzerlerin ayrı ayrı çalma süreleri hesaplanmalı, çalması gereken başlatılmalı, loop her çalıştığında süreler kontrol edilmeli, çalma süresi biten kapatılmalı, diğeri çalmaya devam etmeli.
        En son düzenleyen Çağrı; 09-02-2021, 12:24 AM.

        Yorum Yap

        Hazırlanıyor...
        X