Arduino Kullanarak İki Nokta Arasındaki Mesafe Nasıl Ölçülür?

Elektronikte, çoğu zaman Ultrasonik Sensörler, belirli bir noktadan diğerine olan mesafeyi ölçmek için kullanılır. Arduino kartına bir kod yazmak ve bir ultrasonik sensör bu görevi yerine getirmek için. Ancak bu yazıda farklı bir yaklaşım benimseyeceğiz. İki ayrı Arduino ile entegre olacak iki ayrı ultrasonik sensör kullanacağız. Bu iki modül, mesafenin ölçülecek iki farklı noktaya yerleştirilecektir. Sensörlerden biri alıcı, diğeri ise verici olacak. Bunu yaparak, birçok ultrasonik alıcı kullanarak vericinin konumunu belirleyerek aralarındaki mesafeyi ölçebileceğiz. Burada kullandığımız tekniğin adı Nirengi.

Burada kullanılan teknik, sadece küçük bir mesafenin bulunacağı küçük ölçekli sistemlerde kullanışlıdır. Büyük ölçekte uygulamak için kesinlikle bazı değişikliklere ihtiyaç vardır. Bu projeyi gerçekleştirirken karşılaşılan tüm zorluklar aşağıda tartışılmaktadır.

Mesafeyi Ölçmek İçin Arduino ve Ultrasonik Sensör Nasıl Kullanılır?

Projenin arkasındaki özeti bildiğimiz için, devam edelim ve projeyi başlatmak için daha fazla bilgi toplayalım.

Adım 1: Bileşenleri Toplama (Donanım)

Herhangi bir projenin ortasında herhangi bir rahatsızlıktan kaçınmak istiyorsanız, en iyi yaklaşım kullanacağımız tüm bileşenlerin tam bir listesini yapmaktır. Devreyi yapmaya başlamadan önce ikinci adım, tüm bu bileşenlerin kısa bir incelemesinden geçmektir. Bu projede ihtiyaç duyduğumuz tüm bileşenlerin bir listesi aşağıda verilmiştir.

Adım 2: Bileşenleri Toplama (Yazılım)

Proteus 8 Professional'ı indirdikten sonra, üzerindeki devreyi tasarlayın. Yeni başlayanların devreyi tasarlaması ve donanım üzerinde uygun bağlantıları yapması için yazılım simülasyonlarını buraya ekledim.

Adım 3: HCR-05'in Çalışması

Artık projemizin ana özetini bildiğimiz için, devam edelim ve kısa bir çalışma yapalım. HCR-05. Bu sensörün ana çalışmasını aşağıdaki diyagramdan anlayabilirsiniz.

Bu sensörün iki pimi vardır, tetik pimi, ve eko pimi her ikisi de belirli iki nokta arasındaki mesafeyi ölçmek için kullanılır. İşlem, sensörden ultrasonik bir dalga gönderilerek başlatılır. Bu görev, trig pini 10us için tetikleyerek yapılır. Bu görev tamamlanır tamamlanmaz vericiden 8 sonik ultrasonik dalga patlaması gönderilir. bu dalga havada hareket edecek ve yoluna çıkan bir nesneye çarptığı anda, sensörün içine yerleştirilmiş alıcı tarafından geri dönecek ve alacaktır.

Ultrasonik dalga, sensörü yansıttıktan sonra alıcı tarafından alınacağı zaman, eko pimiyüksek bir duruma. Bu pin, ultrasonik dalganın vericiden sensörün alıcısına gitmesi için geçen süreye tam olarak eşit olacak süre boyunca yüksek durumda kalacaktır.

Ultrasonik sensörünüzü yapmak için sadece verici,Trig pinini çıkış pininiz olarak yapın ve bu pin için 10us için yüksek bir darbe gönderin. Bu yapılır yapılmaz ultrasonik patlama başlatılacaktır. Bu nedenle, dalga ne zaman iletilecekse, sadece ultrasonik sensörün tetik pimi kontrol edilecektir.

Ultrasonik sensörü bir sadece alıcı Çünkü ECO pininin yükselişi, sensörün trig pini ile ilgili olduğu için mikrodenetleyici tarafından kontrol edilememektedir. Ancak yapabileceğimiz bir şey var, bu ultrasonik sensörün vericisini hiçbir UV dalgasının çıkmayacağı koli bandı ile kapatabiliriz. Daha sonra bu vericinin ECO pini, vericiden etkilenmeyecektir.

Adım 4: Devrenin Çalışması

Şimdi, her iki sensörü de bir verici ve bir alıcı olarak ayrı ayrı çalıştırdığımıza göre, burada karşılaşılan büyük bir sorun var. Alıcı, ultrasonik dalganın vericiden alıcıya gitme süresini bilmeyecektir çünkü bu dalganın ne zaman iletildiğini tam olarak bilemez.

Bu sorunu çözmek için yapmamız gereken, bir YÜKSEK verici sensöründen ultrasonik dalga iletilir iletilmez alıcının ECO'suna sinyal. Ya da basit bir deyişle, alıcının ECO'su ile vericinin tetikleyicisinin aynı anda YÜKSEK gönderilmesi gerektiğini söyleyebiliriz. Yani, bunu başarmak için, vericinin tetiği yükselir yükselmez alıcının tetiğini bir şekilde yüksek hale getireceğiz. Alıcının bu tetiği, ECO pimi gidene kadar yüksek kalacaktır. DÜŞÜK. Alıcının ECO pini tarafından bir ultrasonik sinyal alındığında, DÜŞÜK olacaktır. Bu, verici sensörünün tetikleyicisinin YÜKSEK sinyal aldığı anlamına gelir. Şimdi, ECO düşer düşmez, bilinen gecikmeyi bekleyeceğiz ve alıcının tetiğini YÜKSEK duruma getireceğiz. Bunu yaparak, her iki sensörün tetikleyicileri senkronize edilecek ve dalga hareketinin zaman gecikmesi bilinerek mesafe hesaplanacaktır.

Adım 5: Bileşenleri Birleştirme

Sadece bir ultrasonik sensörün vericisini ve diğerinin alıcısını kullanıyor olsak da, ancak cihazın dört pininin tamamını bağlamak zorunludur. ultrasonik sensör Arduino'ya. Devreyi bağlamak için aşağıda verilen adımları izleyin:

  1. İki ultrasonik sensör alın. İlk sensörün alıcısını ve ikinci sensörün vericisini örtün. Bu amaçla beyaz koli bandı kullanın ve bu ikisinin tamamen örtüldüğünden emin olun, böylece ikinci sensörün vericisinden hiçbir sinyal çıkmaz ve birinci sensörün alıcısına sinyal gelmez.
  2. İki Arduino'yu iki ayrı devre tahtasına bağlayın ve ilgili sensörlerini bunlara bağlayın. Tetik Pimini Arduino'nun pin9'una ve ecoPin'i Arduino'nun pin10'una bağlayın. Ultrasonik sensörü 5V Arduino ile çalıştırın ve tüm zeminleri ortak hale getirin.
  3. Alıcı kodunu Alıcının Arduino'suna ve verici kodunu vericinin Arduino'suna yükleyin.
  4. Şimdi alıcı tarafın seri monitörünü açın ve ölçülen mesafeyi not edin.

Bu projenin devre şeması şu şekildedir:

Adım 6: Arduino'ya Başlarken

Arduino IDE'ye henüz aşina değilseniz endişelenmeyin, çünkü Arduino IDE'yi bir mikrodenetleyici kartı ile kurmak ve kullanmak için adım adım bir prosedür aşağıda açıklanmıştır.

  1. Arduino IDE'nin en son sürümünü Arduino'dan indirin.
  2. Arduino Nano kartınızı dizüstü bilgisayarınıza bağlayın ve kontrol panelini açın. kontrol panelinde tıklayınDonanım ve ses. Şimdi tıklayınCihazlar ve yazıcılar.Burada mikrodenetleyici kartınızın bağlı olduğu bağlantı noktasını bulun. benim durumumda öyle COM14ancak farklı bilgisayarlarda farklıdır.
  3. Araç menüsünü tıklayın. ve tahtayı ayarlayın Arduino Nano açılır menüden.
  4. Aynı Araç menüsünde, bağlantı noktasını daha önce görüntülemede gözlemlediğiniz bağlantı noktası numarasına ayarlayın. Cihazlar ve yazıcılar.
  5. Aynı Araç menüsünde İşlemciyi ATmega328P (Eski Önyükleyici).
  6. Aşağıda ekli kodu indirin ve Arduino IDE'nize yapıştırın. Tıkla yükle mikrodenetleyici panonuzdaki kodu yazmak için düğmeye basın.

Kodu indirmek için burayı tıklayın.

7. Adım: Kodu Anlama

Bu projede kullanılan kod çok basit ve oldukça iyi yorumlanmış. Ekli klasörde iki kod dosyası vardır. Verici için kod ve alıcı tarafı için bir kod ayrı ayrı verilmiştir. Bu kodları ilgili Arduino kartlarının her ikisine de yükleyeceğiz. Kendinden açıklamalı olmasına rağmen, aşağıda kısaca açıklanmıştır.

Verici Tarafı Kodu

1. Başlangıçta, Ultrasonik Sensöre bağlanacak olan Arduino kartının pinleri başlatılır. Daha sonra, kodun çalışma süresi boyunca zaman ve mesafenin hesaplanması için değerleri depolamak için kullanılacak değişkenler bildirilir.

// pin sayılarını tanımlar const int trigPin = 9; // Ultrasonik sensörün trig pinini Arduino const int echoPin = 10'un pin9'una bağlayın; // Ultrasonik sensörün eko pinini Arduino'nun pin10'una bağlayın // değişkenleri uzun süreli tanımlar; // ultrasonik dalga t seyahat int mesafesi tarafından geçen süreyi geri almak için değişken; // hesaplanan mesafeyi saklamak için değişken

2. geçersiz kurulum ()kart açıldığında veya etkinleştirme düğmesine basıldığında başlangıçta yalnızca bir kez çalışan bir işlevdir. Burada Arduino'nun her iki pini de olarak kullanılmak üzere ilan edilmiştir. GİRİŞ ve ÇIKTI. Baudrate, bu işlevde ayarlanır. Baud hızı, mikro denetleyicinin ultrasonik sensörle iletişim kurduğu saniyedeki bit cinsinden hızdır.

geçersiz kurulum () {pinMode (trigPin, OUTPUT); // trigPin'i bir Çıkış pinMode (echoPin, INPUT) olarak ayarlar; // echoPin'i Giriş Seri olarak ayarlar.begin (9600); // Seri iletişimi başlatır}

3. geçersiz döngü ()bir döngü içinde tekrar tekrar çalışan bir işlevdir. Burada mikro denetleyiciyi, ultrasonik sensörün Tetik pimine 20 mikrosaniye için YÜKSEK bir sinyal gönderecek ve ona bir DÜŞÜK sinyal gönderecek şekilde kodladık.

void loop () {// 10 mikro saniye için HIGH durumunda trigPin'i ayarlar digitalWrite (trigPin, HIGH); // ilk sensör gecikmesinin tetikleyicisinde YÜKSEK bir sinyal gönderMicroseconds (10); // 10 mikro saniye bekleyin digitalWrite (trigPin, LOW); // birinci sensör gecikmesinin (2) tetikleyicisine bir DÜŞÜK sinyal gönder; // 0.2 saniye bekleyin}

Alıcı Tarafı Kodu

1. Başlangıçta, Ultrasonik Sensöre bağlanacak olan Arduino kartının pinleri başlatılır. Daha sonra, kodun çalışma süresi boyunca zaman ve mesafenin hesaplanması için değerleri depolamak için kullanılacak değişkenler bildirilir.

// pin sayılarını tanımlar const int trigPin = 9; // Ultrasonik sensörün trig pinini Arduino const int echoPin = 10'un pin9'una bağlayın; // Ultrasonik sensörün eko pinini Arduino'nun pin10'una bağlayın // değişkenleri uzun süreli tanımlar; // ultrasonik dalganın aldığı süreyi depolamak için değişken t seyahat int mesafesi; // hesaplanan mesafeyi saklamak için değişken

2. geçersiz kurulum ()kart açıldığında veya etkinleştirme düğmesine basıldığında başlangıçta yalnızca bir kez çalışan bir işlevdir. Burada Arduino'nun her iki pini de GİRİŞ ve ÇIKIŞ olarak kullanılmak üzere ilan edilmiştir. Baudrate, bu işlevde ayarlanır. Baud hızı, mikro denetleyicinin ultrasonik sensörle iletişim kurduğu saniyedeki bit cinsinden hızdır.

geçersiz kurulum () {pinMode (trigPin, OUTPUT); // trigPin'i bir Çıkış pinMode (echoPin, INPUT) olarak ayarlar; // echoPin'i Giriş Seri olarak ayarlar.begin (9600); // Seri iletişimi başlatır}

3. void Trigger_US () ikinci ultrasonik sensörün trig piminin Sahte Tetiklemesi için çağrılacak bir işlevdir. Her iki sensörün trig piminin tetikleme süresini senkronize edeceğiz.

void Trigger_US () {// ABD sensörünü sahte olarak tetikleyin digitalWrite (trigPin, HIGH); // Second sensor delayMicroseconds (10) tetik pinine bir HIGH sinyali gönderin; // 10 mikro saniye bekleyin digitalWrite (trigPin, LOW); // tetik pini ikinci göndericiye bir DÜŞÜK sinyal gönderin}

4. void Calc ()ultrasonik sinyalin birinci sensörden ikinci sensöre gitmesi için geçen süreyi hesaplamak için kullanılan bir işlevdir.

void Calc () // ultrasonik dalganın hareket etmesi için geçen süreyi hesaplamak için işlev {süre = 0; // başlangıçta sıfıra ayarlanan süre Trigger_US (); // Trigger_US işlevini çağırırken (digitalRead (echoPin) == HIGH); // eo pininin durumu yüksek gecikmede (2); // 0.2 saniyelik bir gecikme koyun Trigger_US (); // Trigger_US işlevini çağırın süre = pulseIn (echoPin, HIGH); // alınan zamanı hesaplayın}

5. Burada geçersiz döngü ()fonksiyonunda, ultrasonik sinyalin birinci sensörden ikinci sensöre gitmesi için geçen süreyi kullanarak mesafeyi hesaplıyoruz.

boşluk döngüsü () {Pdistance = uzaklık; Hesap (); // Calc () işlevini çağırın uzaklık = süre * 0.034; // ultrasonik dalganın kapladığı mesafenin hesaplanması if (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ("Ölçülen Mesafe:"); // seri monitörde yazdır Serial.println (mesafe / 2); // seri monitöre yazdır} //Serial.print("Distance: "); //Serial.println(distance/2); gecikme (500); // 0,5 saniye bekleyin}
Facebook Twitter Google Plus Pinterest