Ultrasonik Mesafe Sensörü Uygulaması -3

Ultrasonik sensörle mesafe ölçümü uygulamasının, CCP modülünün Capture (yakalama) kesmesiyle gerçekleştirilmiş uygulamasıdır.

Sensörle ilgili ayrıntılı bilgi;

https://elektrokod.wordpress.com/2014/01/17/ultrasonik-mesafe-sensoru-uygulamasi/

linkinden edinilebilir. Hatırlanacağı gibi sensörle ölçüm yapmak için TRIGGER pininden 10us lik pals gönderiliyordu. Sensör 8 adet ses dalgayı 40KHzde gönderiyor ve ECHO pinini “1″ yapıyordu. Yansıyan dalga tekrar alıcı sensöre geldiğinde ECHO “0″ oluyordu.

Bu uygulamada mesafe ölçülmek istendiğinde TRIGGER tetiklemesi yapılıyor. ECHO kontrolü ise CCP donanım modülünün Capture işlemi ve  kesmesi tarafından gerçekleştiriliyor.

Devre şeması

UltraSound_628_CCP_Capture

MikroC Kodları


#define ECHO PORTB.B3
#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

bit YakalamaOK;
unsigned int sayac_TMR1=0,mesafe_mm=0,peryot=0;
char txt[7];
//----------------------------
void InitTimer1()
{
 T1CON = 1;
 TMR1H = 0;
 TMR1L = 0;
}
//-------------
void Kurulum()
{
 CMCON=7;
 TRISA=0;
 TRISB=8;
 PORTB=0;
 InitTimer1();
 INTCON.GIE=1;
 INTCON.PEIE=1;
 CCP1CON=5;
 CCPR1H=0; CCPR1L=0;
 PIE1.CCP1IE=1;
 PIR1.CCP1IF=0;
 Lcd_Init();
 Lcd_Cmd(_LCD_CURSOR_OFF);
}
//---------------------
void interrupt()
{
 if(CCP1IF_bit)
 {
   sayac_TMR1=(CCPR1H<<8)+CCPR1L;
   if(ECHO) CCP1CON=4;
       else CCP1CON=5;
   TMR1H=0;
   TMR1L=0;
   YakalamaOK=1;
   CCP1IF_bit=0;
 }
}
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)
 {
   TRIGGER=1;
   Delay_us(20);
   TRIGGER=0;
   if(YakalamaOK)
   {
     mesafe_mm=((long)sayac_TMR1*34)/200;
     WordToStr(mesafe_mm,txt);
     Lcd_Out(2,1,txt);
     Lcd_Out_CP(" mm");
     sayac_TMR1=0;
     YakalamaOK=0;
   }
   Delay_ms(100);
 }
}

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

Reklamlar

16 thoughts on “Ultrasonik Mesafe Sensörü Uygulaması -3

  1. Hah işte usta olay budur.Şimdi daha prof. ve daha güzel oldu sistem.Teşekkürler hocam.Hatırlatma bu arada bize menü tasarımı displayda veya lcd’de nasıl oluyordu onu anlatan bir yazı yazacaktınız.Kolay gelsin,Allah razı olsun bizimle bilgilerinizi paylaştığınız için.

    • Ben de teşekkür ederim. Zamanla inşaallah o da olacak.

      Mühim olan bilginin kıymetini bilmektir. Sen biliyorsun ve teşekkür ediyorsun. Bazı nankörler de beceriksizliklerinden ve nankör olduklarından onlarda küfrediyor.

  2. Devreyi kurdum çalıştırdım fakat hesaplamalarda sanırım sıkıntı var.Çünkü elimizi sensöre iyice yaklaştırdığımızda sensör sapıtıyor ve 2500,3000mm arası ölçüyor mesafeyi.Kodda CCP1 kesmesinde CCP1IF=0 & INTCON.CCP1IE=0; yapılması gerekiyor sanırım.Ayrıca hesaplamada yeni formül bulmamız gerekiyor hocam sanırım.

    • Sensörün şöyle bir handikapı var; yaptığım denemelere göre 5cm den daha yakında hassaiyet kayboluyor. Datasheetinde verdiği bilgiye göre en yakın 2cm okuyabiliyor. Hesaplamalar doğru. Üç farklı teknikle aynı değerleri doğru olarak buldum. Hatta video da da gösterdim. Bana göre en hassas ölçüm kesme olmadan 64 defa okunup ortalamasının alındığı uygulamadır.

  3. Hocam bunun osc ayarını ve timer ayarını nasıl yapıyoruz.Yardımcı olabilir misin ekranda birşey göremiyorum..

  4. bir türlü kendim devre tasarımını yapamadım. uzun yıllar oldum çoğu şeyi de unutmuşum. rica etsem devrenin uygulanabilmesi için gerekli tüm dosyları paylaşabilirmisiniz

  5. Merhaba,

    devreyi aynen şekildeki gibi isis te kurdum. kodlarıda derleyip hex kodunu attım picin icine. Fakat lcd nın ısıgı yanıyor baska bırsey göstermıyor.Yani mesafe ölçumu yapmıyor.Sorun ne olabılır

    • Önce LCD pinleri kontrol edilmeli. Tanımlamalar ve bağlantılar doğru ise program çalışır.(Kodlar denenmiş çalışan programa ait.)

  6. merhabalar, bende bu devreyi yaptım ancak tayfun beyin sorunu bende de var. 2×16 LCD kullandım, LCD ışığı yanıyor ve ilk satır tamamen boş ikinci satır ise tamamen dolu gözüküyor. Bağlantıları kontrol ettim ancak sorunu çözemedim

  7. Merhabalar , OSC1 ve OSC2 ye LCD Ayakalrını Baglamanız Sıkıntı Çıkarırmı ? Birde OSC1 ve OSC2 de LCD Ayakları Bulunurken Kristali Nasıl Baglayacagız ?

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