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

Elektronikte, Ultrasonik Sensörler çoğu zaman 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.



Arduino Kullanarak Mesafe Ölçme

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.



  • Atlama Telleri
  • 5V AC - DC Adaptörü (x2)

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

  • Proteus 8 Professional (Şu adresten indirilebilir: Buraya )

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

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

Şimdi projemizin ana özetini bildiğimiz için, devam edelim ve kısa bir çalışma yapalım. HCR-05 . Aşağıdaki diyagramdan bu sensörün ana çalışmasını 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, 10us için trig pimini 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 çarpacak ve kabul edilecektir.



Ultrasonik dalga, sensörü yansıttıktan sonra alıcı tarafından alınacağı zaman, eko pimi yü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 verici bir tek, tetik pinini çıkış pininiz olarak yapın ve bu pin'e 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 pimi 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 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 HIGH'a gönderilmesi gerektiğini söyleyebiliriz. Bu nedenle, bunu başarmak için, vericinin tetiği yükselir yükselmez alıcının tetiğini bir şekilde yükselteceğiz. Alıcının bu tetikleyicisi, ECO pimi gidene kadar yüksek kalacaktır. DÜŞÜK . Alıcının ECO pini tarafından bir ultrasonik sinyal alındığında, bu 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, tüm dört pini de 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:

Devre şeması

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ü şuradan indirin: Arduino.
  2. Arduino Nano kartınızı dizüstü bilgisayarınıza bağlayın ve kontrol panelini açın. kontrol panelinde tıklayın Donanım ve ses . Şimdi tıklayın Cihazlar ve yazıcılar. Burada mikrodenetleyici kartınızın bağlı olduğu bağlantı noktasını bulun. Benim durumumda COM14 ancak farklı bilgisayarlarda farklıdır.

    Bağlantı Noktası Bulma

  3. Araç menüsünü tıklayın. ve panoyu şu şekilde ayarlayın: Arduino Nano açılır menüden.

    Ayar Panosu

  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 .

    Bağlantı Noktası Ayarlama

  5. Aynı Araç menüsünde İşlemciyi ATmega328P (Eski Önyükleyici ).

    İşlemci

  6. Aşağıya 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.

    Yükle

Kodu indirmek için, buraya Tıkla.

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 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 Arduino kartının pinleri başlatılır. Ardından, 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 ölçmek 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 . Baud hızı 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 bir 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 Arduino kartının pinleri başlatılır. Ardından, 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 ölçmek 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 INPUT ve OUTPUT olarak kullanılmak üzere ilan edilmiştir. Baud hızı 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 bir 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}

Dört. 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 fonksiyon {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 giderken aldığı 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ığı mesafeyi hesaplamak 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}