Arduino hc sr004

Firadin

Üye
Katılım
15 Nis 2021
Mesajlar
4
Puanları
1
Yaş
27
Selamlar. Hc sr004 ses ile mesafe ölçen devre kurdum. Devrenin main kodlaması ı internetten alıp yaptım. Ancak bana sürekli mesafeyi veriyor ve ben ortalama mesafeyi görmek istiyorum ekranımda. Değerleri sürekli ölçmeye devam etsin fakat bi yandan da toplasın tüm değerleri sonra toplamı değer sayısına bölüp ortalamayı yazsın ekrana istiyorum. Aşağıda kodlaması bıraktım yardımcı olursanız sevinirim. İyi çalışmalar.

// This uses Serial Monitor to display Range Finder distance readings

// Include NewPing Library
#include "NewPing.h"

// Hook up HC-SR04 with Trig to Arduino Pin 9, Echo to Arduino pin 10
#define TRIGGER_PIN 9
#define ECHO_PIN 10

// Maximum distance we want to ping for (in centimeters).
#define MAX_DISTANCE 400

// NewPing setup of pins and maximum distance.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
float duration, distance;

void setup()
{
Serial.begin(9600);
}

void loop()
{
// Send ping, get distance in cm
distance = sonar.ping_cm();

// Send results to Serial Monitor
Serial.print("Mesafe = ");

if (distance >= 400 || distance <= 2)
{
Serial.println("Out of range");
}
else
{
Serial.print(distance);
Serial.println(" cm");
}
delay(500);
}
 
Hangi sıklıkla mesafeyi ölçecek? Aksi halde aynı mesafeyi sürekli yarım saniyede ölçtüğünden toplamanın anlamı olmaz. Okuma zaman aralıkları belli ise her okuduğunu bir değişkende toplayabilir ve topladıkça kaç ölçüm yaptığını da başka bir değişkende toplayıp sonuçta bu değleri birbirine bölüp ortalamayı alırsın. Ya da süre belli olmuyorsa bunu yaparken ölçümün sabit-kararlı hale gelmesini bekleyip ondan sonraki ölçülen mesafeyi dikkate almalısın.
 
Ölçüm cihaz 10 cm mesafeden fazla bir aralığa denk geldiğinde ölçüm yapsın 10 cmin altına geldiğinde ölçümü durdursun. Ya da buton koyabilirim butona bastığımda ve 10 cm mesafeden fazla mesafe görürse ölçmeye ve değerleri sayıp toplamaya başlasın bunu nasıl yapabilirim. Teşekküre derim
 
Buton koymak daha kolay gibi. Yoksa cihazın inisiyatifine bırakmakla olmaz. Sonuçta cihaz da verdiğiniz bir kritere göre karar verecek. mesela 2 saniyede mesafe değişmezse ölçümü kabul et gibi. Ya da dediğin gibi mesafeyi sabitleyip ölçmesi için bir düğmeye basmak gerekiyor. Kabaca şöyle bir şey olabilir;
Kod:
// This uses Serial Monitor to display Range Finder distance readings

// Include NewPing Library
#include "NewPing.h"

// Hook up HC-SR04 with Trig to Arduino Pin 9, Echo to Arduino pin 10
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define BUTTON_PIN 2
float toplam_distance, toplam_olcum;

// Maximum distance we want to ping for (in centimeters).
#define MAX_DISTANCE 400

// NewPing setup of pins and maximum distance.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
float duration, distance;

void setup()
{
  Serial.begin(9600);
  pinMode(BUTTON_PIN, INPUT)
  toplam_distance=0;
  toplam_olcum=0;
}

void loop()
{
  // Send ping, get distance in cm
  distance = sonar.ping_cm();

  // Send results to Serial Monitor
  Serial.print("Mesafe = ");

  if (distance >= 400 || distance <= 2)
  {
    Serial.println("Out of range");
  }
  else
  {
    Serial.print(distance);
    Serial.println(" cm");
    if (digitalRead(BUTTON_PIN)==HIGH))
    // butonu hassas algılaması için butonun bir önceki durumuna falan bakılmalı
    // ayrıca delay() yerine millis() fonksiyonundan yararlanmak gerekiyor.
    {
     toplam_distance+=distance;
     toplam_olcum++;
     // ortalamayı yazdırmak için de bir koşul belirlemek gerekiyor.
     // Serial.println(toplam_distance/toplam_olcum);

    }
  }
 
  delay(500);
}
 
Ya da şöyle mi yapsak cihazı çalıştırdığım an ölçümlere başlasın ama mesafe 20 cmden fazla ise değeri kaydetsin değil ise değeri kaydetmesin sonra kaydettiği değerleri toplamı bölü kaydettiği değer sayısı böylelikle otomasyonda sağlamış oluruz. Bunu çözebikirsek çok sevinirim
 
Evet, koşulun biri belli oldu. Sonrasında aynı ölçümü tekrarlamıyacağı bir koşul belirlemeliyiz.
 
Aynı ölçümü tekrarlayabilir yeterki mesafe 20 cmden az olunca durdursun ölçümü ve değerleri kaydetmesin
 

Yeni mesajlar

Forum istatistikleri

Konular
129,686
Mesajlar
929,003
Kullanıcılar
452,386
Son üye
emir679

Yeni konular

Geri
Üst