Elektronik / Mikrodenetleyici Projeleri/

8051 SRF04 ile ultra sonik mesafe ölçüm devresi

Sponsorlu Bağlantılar

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

srf04-ultra-sonic-alici-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-bacak-pin-baglantilari

SRF04 Zamanlama diagramı

srf04-zamanlama-diagrami

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ı

8051-ultrasonik-mesafe-olcum-devresi baglanti-uclari-cizimleri

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 muratfettahoglu@mynet.com								 */
/*					Faruk YILDIRIM   farukyild54@yahoo.com  								 */
/*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 ) : 8051 SRF04 ile ultra sonik mesafe ölçüm devresi

Dosya indirme LINK listesi (TXT formatında) link-6945.zip şifre-pass: 320volt.com

  • Hasan Can

    okulda bizde yaptık bunlardan sumo robot için :) o parçalrın adı USR_TX ve USR_RX

    • CEMİL ÖZŞAHAN

      Murat hocam ellerine sağlık. Böyle projeler sadece SAÜ den çıkar. Cemil Özşahan

  • ertugrul ozdemır

    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

  • Erdem

    Srf04’ü nereden aldığınızı sorabilir miyim.

  • Egemen

    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.

  • Çağdaş Karakuş

    Rica Etsem Ares Programında Baskı Devresini Atabilir Misiniz.