Ultrasonik Mesafe Sensörü Uygulaması

Bu projede HC-SR04 ultrasonik sensör kullanarak mesafe ölçümü yapacağız. Sensör kit olarak satılmakta. Kit üzerinde 40KHz. de çalışan ultrasonik verici ve alıcı sensörü bulunmakta. Sensörün çalışması aslında yarasanın iletişim sisteminden kopyalanmış. Bilindiği gibi yarasaların gözleri yoktur. Onun yerine ses dalgaları gönderip dalgaların geliş süresine göre değerlendirme yapıp o şekilde cisimleri algılarlar.

Bu uygulamada PIC16F628A mikrodenetleyicisi ve HC-SR04 Ultrasonik sensör kullanarak mesafe ölçümü gerçekleştireceğiz.

 Sensörün özellikleri datasheetinde şöyle açıklanmış;

Working Voltage (Çalışma Voltajı) = DC 5 V
Working Current (Çalışma Akımı) = 15mA
Working Frequency (Çalışma frekansı) = 40KHz
Max Range (En fazla algılama) = 4m
Min Range (En düşük mesafe) = 2cm
MeasuringAngle (Ölçüm açısı) = 15 degree (en fazla)
Trigger Input Signal (Tetikleme sinyali süresi) =10uS TTL pulse
Dimension (ebatları) 45*20*15mm

Ölçüm hassasiyeti 3mm olarak açıklanmış.

Yapılan ölçümlerde yakın mesafelerde (2-50cm) verilen değerleri sağladığı görüldü. Ancak uzak mesafe ölçümlerinde hassasiyet o kadar iyi değil.

Gelelim sensörün çalışmasına ve kullanılışına;

Sensörün çalışma mantığı şu;

Trigger(tetikleme) pininden en az 10us lik 5v pulse görderildiğinde sensör Ultrasonik verici (Tx) den 40KHz de 8 adet pulse gönderiyor ve ECHO pinini “H” a çekiyor. Gönderilen bu dalgalar Ultrasonik alıcı (Rx) sensöre ulaştığında ECHO pini “L”‘a düşüyor. Ölçüm yaparken ECHO pinin “H” da kaldığı süre ölçülerek sesin havada yayılma hızına göre hesap yapılarak mesafe bulunuyor.

Aşağıda sensörün zaman diyagramı verilmiştir.

HC-SR04

Sensör pinlerinden lojik analizör ile yapılan ölçüm aşağıdaki  şekilde gösterilmiştir.

ultrasonik sensor dalga

 

Mesafe Hesaplama

Sesin hava yayılma hızı 15 C derecede  340m/sn’dir. Yani ses 1,000,000us’de 340 000mm yol kat eder. O halde 1us de ne kadar yol kat edeceğini hesaplarsak;

x=340,000mm/1,000,000us

x=34/100 bulunur. Yani ses 1us de 0.34mm yol alır. O halde ses hem gidecek hem de dönecek dolayısı ile ikiye bölüyoruz. ve son haliyle formülümüz;

Mesafe(mm)=(süre(us)*34)/200

olarak bulunur.

Devre Şeması

Ultrasonik Mesafe Ölçüm Devresi

Mikroc Kodları


#define ECHO PORTB.B0
#define TRIGGER PORTB.B7

// LCD module connections
sbit LCD_RS at RA6_bit;
sbit LCD_EN at RA7_bit;
sbit LCD_D4 at RA0_bit;
sbit LCD_D5 at RA1_bit;
sbit LCD_D6 at RA2_bit;
sbit LCD_D7 at RA3_bit;

sbit LCD_RS_Direction at TRISA6_bit;
sbit LCD_EN_Direction at TRISA7_bit;
sbit LCD_D4_Direction at TRISA0_bit;
sbit LCD_D5_Direction at TRISA1_bit;
sbit LCD_D6_Direction at TRISA2_bit;
sbit LCD_D7_Direction at TRISA3_bit;
// End LCD module connections

unsigned int sayac_TMR1=0;
char txt[7];
unsigned int toplamSure=0,mesafe_mm=0,Sure_us=0;
//----------------------------
void InitTimer1()
{
  T1CON = 0;
  TMR1H = 0;
  TMR1L = 0;
}
//-------------------------------
int MesafeOlc()
{
  long toplam=0,temp=0;
  char i,sayac;
  for(i=0;i<64;i++) // 64 adet ölçüm yapılıp ortalaması alınacak
  {
    TRIGGER=1; // tetikleme palsi
    Delay_us(10);// (10us)
    TRIGGER=0; // gönder
    while(!ECHO);// ECHO "H" olana kadar bekle
    T1CON.TMR1ON=1;// Timer1'i başlat
    while(ECHO); // ECHO "L" olana kadar bekle
    T1CON.TMR1ON=0; // Timer1'i durdur.
    sayac_TMR1=(TMR1H<<8)+TMR1L;// Timer1 değerini int değişkene aktar
    toplam+=((long)sayac_TMR1*34)/200; // mesafe hesapla ve topplam değişkeninde topla
    TMR1H=0; TMR1L=0; // Timer1'i sıfırla
    sayac_TMR1=0; // Timer'i aktardığımız us sayacını sıfırla
    Delay_ms(5); // 5 ms bekle
 }
 return (toplam>>6); // ortalamayı fonksiyon dışına taşı
}
//-------------
void Kurulum()
{
  CMCON=7;
  TRISA=0;
  TRISB=1;
  PORTB=0;
  InitTimer1();
  Lcd_Init();
  Lcd_Cmd(_LCD_CURSOR_OFF);
}
//---------------------
void main()
{
  Kurulum();
  Lcd_Out(1,3,"Mesafe Olcer");
  Lcd_Out(2,1,"elektrokod.wordp");
  Delay_ms(2000);
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,3,"Mesafe Olcer");
  while(1)
  {
    mesafe_mm=MesafeOlc();
    WordToStr(mesafe_mm,txt);
    Lcd_Out(2,1,txt);
    Lcd_Out_CP(" mm");
  }
}

Projenin videosu

 

Not: Proje için PCB ve Sensör temin edilir. İstekleriniz için mail atınız.

Reklamlar

40 thoughts on “Ultrasonik Mesafe Sensörü Uygulaması

  1. hocam eline sağlık güzel olmuş da ben bir soru soracağım lcdyi de ayrı bir şekilde programlamamız gerekiyor mu bunun için

    • Programda LCD tanıtılmış ve Lcd_Init(); ile kurulmuş. Bu haliyle LCD de mesafeyi gösteriyor. Proje videosundaki şekilde görüntü verebilir. Videoda 4×20 LCD kullanıldı. Onun yerine 2×16 standart lcd kullanılabilir.

      • hocam biz 16×2 lcd ekran kullandık yukarıdaki şemaya göre kurduğumuzda lcd ye güç geliyor ışık yanıyor ama hiç bir şekilde yazı veya ölçüm olmuyor yardımcı olursanız sevinirim.

      • hex dosyasını yazdırırken yazma programından konfiürasyondan RC ı/o seçtik yine olmadı

  2. Geri bildirim: Anonim

  3. kıymetli elektrokod:

    bu devredeki 78L05 bu devrede tam olarak neyi sağlıyor acaba? ultrasonik sensöre her daim 5v’i garantilemek için midir?

    • KOLAY GELSİN.
      Yukarıdaki devre şemasını isis te kurduğumuzda program derleyici hata vermiyor isis de hata vermiyor ancak lcd ekranda ışık yanıyor yazı veya ölçüm ekranı gelmiyor.

  4. son olarak müsaideniz olur ise şayet bir sorumuz daha var,

    devreyi belirtmiş olduğunuz gibi yaparak bağladık, fakat echo pininden high gelmiyor hiç bir şekilde. echo pinini söküp önce 5v’a sonra hemen akabinde grounda değdirdiğimde ekran üzerine 876 mm gibi bir yazı çıkıyor yani pic kodları çalışıyor.

    4 mhz’lik ek osilatör mevcut değil, mikroC üzerinden 4mhz seçip Edit project->Oscillator Selection kısmından 4. satır yani internal osilatör seçtim.

    sorun timer ile ilgili olmalı zannediyorum fakat nasıl çözebileceğimi bilemedim. acaba bu devrede harici osilatör olmaması veya soldaki regülatörün olmaması bu hataya sebebiyet verir mi?

  5. kodları hex dosyasına cevirmeye çalışıyorum ama derleyici kodların neredeyse hepsinde hata buluyor.proteus similasyonunu çalıştırmaya çalışıyorum ama bi türlü beceremedim.yardım edebilir misiniz?

    • mikroc derleyicisini mikroe.com adresinden indirip aynısını kopyalayıp yapıştıırın ve derleyin. 2k aşmadığı için problem olmayacaktır.

      • teşekkürler.kodları derledim.başka bi yerden de hc-sr04 un prpoteus componentini buldum.ısısde sımule etmeye calısıyorum ama “Program or EEPROM data has invalid address” hatası veriyor 2000,2001,2002,2003 te..sonrasında da watchdog sureklı resetlıyor.neden kaynaklanıyor olabılır ? yardım edebılırsenız cok sevınırım.sımulasyonu gerceklestırıp hocaya vermem lazım

  6. Bu nasıl bir iğrençliktir ya. Konuyu çok güzel anlatmışsın ellerine sağlık ama nedir bu sitenin üzerinden aşağı doğru sürekli olarak kayan beyaz çubuklar.

  7. Kolay gelsin biz bu devreyi kurduk fakat 78L05 regülatör devresini yapmadık..
    Regülatör olmadan dışarıdan 5 Volt versek olmaz mı?

  8. Picin fuse kodları mevcut mu?
    Micro pro’dan hexi atarken bu fuse ayarlarının yapılması gerektiği bir uyarı alıyoruz. Fuse ayarlarını nasıl yapmalıyız?
    Fotoğraf: http://i.hizliresim.com/v8VD7D.jpg
    İki haftadır uğraşıyoruz elinizde sağlam çalışan .hex dosyası varsa gönderebilir misiniz?

  9. kolay gelsin
    biz yukarıdaki devreyi isis te kurduğumuzda , lcd ekranda ışık yanıyor program hata vermiyor lcd ekranda yazılar veya ölçüm ekranı gelmiyor
    PIC hex dosyasınıda attık sensörde tanıtıldı . Microc de derlendiğindede hata vermiyor . nasıl çalıştırabiliriz

    • Emre önce şunları yapalım;

      1- PIC çalışıyor mu test edelim. Bir pine led bağlayıp ledi yakıp söndür.
      2- PIC çalışıyor ise konf parametrelerinden dahili osc seçelim ve pinleri I/O olarak ayarlayalım.()
      3. LCD pinlerinin PIC’e bağlı olduklarından ölçü aleti ile ölçerek emin olalım(buzzer kademesinde bütün lcd-pic bağlantılarını kontrol edelim.)
      eğer bağlantı tamamsa mutlaka çalışacaktır.

      Başarılar.

  10. yukarıdaki devreyi isis de kurduğumuzda program hata vermiyor ancak lcd nin ışığı yanmasına karşın yazı veya ölçüm ekranı gelmiyor.
    mikroc de derlediğimiz zaman sorun yok aynen PIC e atıyoruz hex dosyasını ama ekran gelmiyor

    • Önceki yorumumda bahsettiğim 3. adımı yaptınız mı? Isis’te çalışıp gerçekte çalışmaması sebebi olarak en büyük etken 3 madde. Yani bağlantıların kontrolü.

  11. Hocam birde bu entegrenin picle bir bağlantı noktası yok ben nereye bağlayacağım onuki devreye sabit 5 v versin

    • #define ECHO PORTB.B0
      #define TRIGGER PORTB.B7

      tanımlamasında sensörün ECHO pinin RB0 pinine, TRIGGER pininin RB7 pinine bağlı olduğu anlaşılıyor.
      Sensörün diğer iki pini besleme uçları. Sensör üzerinde pin isimleri yazıyor.

  12. İyi günler ben ultrasonic sensör ile hız ölçen devre yapmaak istiyorum yardımcı olabilir misiniz?

    • Algoritma şöyle olmalı: önce başlangıc noktasının uzaklığını ölçüp bir değişkene yazılır. Start verildiğinde timer başlar bitiş noktasında veya bitiş süresinde uzaklık ölçülüp hesaplama ile hız ölçümü yapılabilir.

      Başka bir fikrin varsa yardımcı omaya çalışırım.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s