8051 ile ultrasonik mesafe ölçümü uygulaması ayrıca srf 04 hakkında Türkçe bilgiler bulunmakta farklı denetleyiciler ile uygulamalarınızda bu bilgiler işinize yarayabilir Hazırlayanlar :Murat FETTAHOGLU Faruk YILDIRIM Hazırlayan emeği geçen kişilere teşekkürler
8051 mikrodenetleyicisi ile ultrasonik alıcı-verici kullanarak mesafe ölçümü yapılması .Yapılan çalışma, 8051 mikrodenetleyicisi kullanılarak ultrasonik alıcı-verici yardımıyla mesafe ölçümünü içermektedir. Sistemde bir adet ultrasonik alıcı-verici, LCD vd 8051 mikrodenetleyicisi kullanılmıştır.
Sistemin çalışmasına geçmeden önce sistemde kullanılan ultrasonik alıcı-vericinin çalışma
prensibinin kısaca verilmesi yararlı görülmüştür.
SRF04 Ultrasonik Alıcı-Verici
- Maksimum 10.7 metrelik uzaklığa kadar sonuç verir.
- Düşük akım tüketimine sahiptir.
- Minimum hassasiyet mesafesi 26cm dir.
- Modül küçük boyutta olduğundan tercih sebebidir.
SRF04 ‘ün ön yüzü Şekil-2 ‘de verilmiştir. Şekilde görüldüğü gibi 4 adet bağlantı noktası vardır. Bunlardan 2 ‘si besleme (+5Volt), diğer ikisi ise pals çıkışı (echo pulse output) ve
tetikleme girişi (trigger pulse input)dir.
SRF04 Zamanlama diagramı
SRF04’ün çalışma prensibi kısaca şöyledir: SRF04 ‘ün çalışmaya başlayabilmesi için minimum 10usn‘lik bir tetikleme palsi diyagramda da görüldüğü gibi SRF04 ‘ün trigger girişine uygulanır. Bu pals uygulandıktan sonra SRF04 ultrasonik dalga üretir ve dışarıya gönderir.
Ses hızının havada 340metre/saniye olduğu bilindiğinden, gönderilen bu ses dalgasının bir yüzeye çarpıp geri dönme süresi hesaplanır. Bu süre bilinirse, ses hızından yola çıkılarak cismin cihazdan uzaklığı hesaplanabilir.
Gerekli hesaplamalar yapılırsa, Pals çıkışından alınan palsin süresi usn cinsinden bulunup 58 ’e bölünerek (cm = usn/58) santimetre cinsinden uzaklık hesaplanmış olur. Eğer 18msn ‘den
daha büyük bir pals üretildiyse cisim algılanamamıştır, SRF04 36msn değerinde çıkışı tekrar 0 Volt seviyesine düşürür.
Devre şeması
C yazılımı (Ultrasonik_Mesafe.c)
#include <89c51rd2.H> /*********************************************************************************************/ /*SAKARYA ÜNIVERSITESI TEKNIK EGITIM FAKÜLTESI ELEKTRONIK BILGISAYAR EGITIMI */ /* Uygulama Adi : 8051 ve SRF04 Kullanilarak Mesafe Ölçümü Yapilmasi */ /* Dosya Adi : Ultrasonik_Mesafe.c */ /* Tarih : Aralik 2005 */ /* Hedef Islemci: MCS-51 */ /*Proje Tasarami: Murat FETTAHOGLU [email protected] */ /* Faruk YILDIRIM [email protected] */ /*Proje Danismani: Yrd.Doc.Dr.Ahmet Turan ÖZCERIT */ /* Bu uygulama ile SRF04 Ultrasonik alici verici yardimi ile mesafe ölçümü yapilmistir. */ /*Uygulamada 8051, SRFO4, 2x16 LCD, kullanilmistir. */ /*ve sürücü devre yer almaktadir */ /* Uygulama çalistirildiginda devre uzerinde yer alan buton kullanilarak SRF04 ün önünde var */ //ise cismin nekadar uzaklikta oldugunu yada cisim bulunmadigini LCD de görmek mümkündür. */ /*LCD ekranindaki yönergeler kullaniciyi yönlendirmektedir. */ /*********************************************************************************************/ /* LCD Girislerinin Tanimlanmasi */ #define Data P1 // LCD Data girisleri için port ata #define RS P2_1 // Kaydedici seçme girisi RS=0 komut, RS=1 veri #define EN P2_0 // Yetki girisi düsen kenarda çalisir, önce 1 sonra 0 yapilmali /* LCD Komut Kod Tanimlamalari */ #define Sil 1 // Ekrani temizler #define KursorGizle 12 // Displayi aç, kürsor görünmesin #define CiftSatir8Bit 56 // 8 bit ara birim, 2 satir, 5*7 piksel #define SagaYaz 6 // Kursorun belirttigi adres artarak gider #define IkinciSatir 192 // Ikinci satirin baslangiç adresi /*SRF04 e çalismaya baslama palsi gönderen fonksiyon*/ void palsgonder(void){ int say=0; P2_3=1; //SRF04 ün pals girisi while(say!=2){ //18usn lik pals üret say++; } P2_3=0; } /* LCD Gecikme Fonksiyonu */ void Gecikme (long int sure) { long int i; for (i=1;i<=sure;i++) {;} } /* LCD Komut Yazdirma Fonksiyonu */ void DataKomut (int komut) { RS=0; // RS komut modunda EN=1; // islemin yetkilendirilmesi için düsen kenar ayar islemi Data=komut; // LCD data girislerine komut bilgisini aktar EN=0; // yetki için düsen kenar saglandi Gecikme(1000); // 1000 saykillik gecikme } /* LCD Veri Yazdirma Fonksiyonu */ void DataVeri (char veri[], long int hiz) { int i=0; while(veri[i]!=0) { RS=1; // RS veri modunda EN=1; // islemin yetkilendirilmesi için düsen kenar ayar islemi Data=veri[i]; // LCD data girislerine veri bilgisini aktar EN=0; // yetki için düsen kenar saglandi i++; // bir sonraki veri bitini almak için dizi sayisini 1 arttir Gecikme(hiz); } } /* LCD Baslangic Ayarlarini Yapan Fonksiyon */ void LcdAc(void) { int baslangic[]={KursorGizle, CiftSatir8Bit, SagaYaz},t; for (t=0;t<3;t++) DataKomut(baslangic[t]); } void bekle(){ int i; for(i=0;i<=5000;i++); } /* LCD Rakam Gösterme Fonksiyonu*/ void derecegoster(int derece){ int ascii; switch (derece){ case 0: ascii=0x30;break; case 1: ascii=0x31;break; case 2: ascii=0x32;break; case 3: ascii=0x33;break; case 4: ascii=0x34;break; case 5: ascii=0x35;break; case 6: ascii=0x36;break; case 7: ascii=0x37;break; case 8: ascii=0x38;break; case 9: ascii=0x39;break; default:;break; } RS=1; // RS veri modunda EN=1; // islemin yetkilendirilmesi için düsen kenar ayar islemi Data=ascii; // LCD data girislerine veri bilgisini aktar EN=0; } /* LCD Imlec Kaydirma Baslangic Deger Fonksiyonu*/ void imleckaysaga(){ RS=0; // RS komut modunda EN=1; // islemin yetkilendirilmesi için düsen kenar ayar islemi Data=0x14; // Data kodu degeri EN=0; // yetki için düsen kenar saglandi Gecikme(1000); // 1000 saykillik gecikme RS=1; } /* LCD Imlec Göster Baslangic Deger Fonksiyonu*/ void imlecgoster(){ RS=0; // RS komut modunda EN=1; // islemin yetkilendirilmesi için düsen kenar ayar islemi Data=0x0F; Gecikme(1000);// LCD data girislerine komut bilgisini aktar EN=0; // yetki için düsen kenar saglandi Gecikme(1000); // 1000 saykillik gecikme RS=1; } void main(){ //Degisken tanimlamalari unsigned long int deger=0; unsigned long int mikrosn=0; unsigned long int cm=0; unsigned long int gecici,kalan,y,rakam; int x=0,z=0; long int dizi[10]; P2_3=0; //Pals gonderme portu sifir(ultrasonik trigger) LcdAc(); //LCD Baslangic Ayari imlecgoster(); //LCD Baslangic Ayari DataKomut(Sil); //LCD Ekrani Silme DataVeri ("Cisim Bulunamadi", 1); //Default deger while(1){ while(!P2_4); //Butona basildiktan sonraki döngüde birakilana kadar bekle while(P2_4); //Butona basilinca ÇIK palsgonder(); //SRF04 e tetikleme palsi gönder while(!P2_2); //SRF04 ün pals çikisi lojik 1 olana kadar bekle while(P2_2){ //SRF04 ün pals çikisi lojik 0 olana kadar bekle deger++; //deger degiskenini 1 arttir. } mikrosn=deger*18; //mikrosn olarak çikis palsinin uzunlugunu hesapla cm=mikrosn/58; //santimetre olarak çikis palsinin uzunlugunu hesapla if(cm >= 18000){ //Cisim algilanamadiysa ekrana Cisim YOK yaz DataKomut(Sil); //LCD Ekrani Silme DataVeri ("Cisim YOK", 1); } gecici=cm; //Santimetre degerini ekrana yollama islemi while(gecici!=0){ kalan=gecici%10; dizi[x]=kalan; x++; gecici=gecici/10; } mikrosn=0; deger=0; kalan=0; gecici=0; DataKomut(Sil); //LCD Ekrani Silme DataVeri ("Cismin Uzakligi", 1); DataKomut(IkinciSatir); y=(x-1); for (z=0;z<=(x-1);z++){ //Dizideki degerleri cagirma islemi rakam=dizi[y]; derecegoster(rakam); imleckaysaga(); //Her karakteri tazdiktan sonra LCD imlecini saga kaydir y--; } x=0; } }
Dosyalar(proteus simulasyon .dns .c .hex );
Şifre-Pass: 320volt.com
Yayım tarihi: 2009/05/13 Etiketler: 8051 uygulama, atmel avr projeleri, mesafe ölçüm devresi, srf04 türkçe bilgi, srf04 ultra sonik
okulda bizde yaptık bunlardan sumo robot için 🙂 o parçalrın adı USR_TX ve USR_RX
Murat hocam ellerine sağlık. Böyle projeler sadece SAÜ den çıkar. Cemil Özşahan
arkadaslar bende hocamdan bıtırme tezı olarak bu konuyu aldım ..
galıba bende bu devreyı gerceklestırecegım..
ılk olarak bu devre calısmasında her hangı bır sorun verıyormu ..
ıkıncısı olarakta bu devrenın malıyetı ne kadar tutuyor onu soracaktım ..
eger elınızde yazılmıs tez varsa yardımlarınızı beklıyorum ..
tesekkurler herkese ..
emegı gecen herkese saygılar
Srf04’ü nereden aldığınızı sorabilir miyim.
Merhaba.
Lisans bitirme projesi olarak Adaptif Seyir Kontrol Sistemi(Adaptive Cruise Control) üzerinde çalışmaktayım. Projeyi prototip olarak gerçekleştireceğim. Bunun için gerekli olan malzemelerin çoğunu temin ettim. Fakat fiyat ve mesafe yönünden uygun mesafe ölçüm sensörü bulamadım. İnternetteki SRF04’lerin ölçüm mesafeleri yeterli değil. Burada kullanılan SRF04 ultrasonik sensör projem için uygun. (Çünkü en az 8 metre ölçüm mesafesi gerekli) Bu sensörü kendiniz mi tasarladınız? Nereden temin edebilirim? Yardımcı olursanız çok sevinirim.
İyi günler.
Rica Etsem Ares Programında Baskı Devresini Atabilir Misiniz.