STM32F4 Discovery STM32F4 Discovery HC-SR04 Mesafe Ölçer Uygulaması By Konuk Yazar Posted on 19 Ocak 2015 6 min read 12 0 11,146 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr Merhaba arkadaşlar bu yazımızla birlikte STM32F4 Discovery ile sensör kullanımıyla ilgili bilgi vereceğiz.Malumunuz üzere piyasada bir çok sensör bulunmaktadır.Bu sensörleri,insanların duyu organları olarak da düşünebiliriz.Kapasitif sensörler,sıcaklık sensörleri,ultrasonic sensörler,nem sensörleri vb. örnek olarak verilebilir.Eğer robot yapacaksanız veya bir otomasyon, sensörlerin kullanılması kaçınılmazdır. Bu yazımızda kullanacağımız sensör hakkında biraz bilgi vereceğiz… HC-SR04 Ultrasonic Sensör İnsan kulağı,20Hz-20KHz arasındaki ses dalgalarını duyabilir.Bu sensörler 40KHz in üstünde ses dalgaları üretmektedir.Peki ultrasonic sensör nasıl çalışır. Ultrasonic sensörlerin yapısını incelediğimizde,bir tane özel hoparlör ve bir tane özel mikrofon bulunmaktadır.Özel hoparlör sayesinde 40kHz seviyesinde ses dalgaları üretilmektedir.Özel mikrofon sayesinde de bu ses dalgaları algılanmaktadır.Temel olarak bildiğimiz bir fizik kuralımız var.(X=V*t)Bundan farksız hiçbir şey değildir. Sensör üzerinde bulunan vcc,gnd,trig,echo pinleri aşağıda gösterilmektedir…. Sensörü kullanmak için trig pininden yaklaşık 10us’lik bir pals gönderiyoruz.Bu değeri datasheetten biliyoruz.Sensör kendi içerisinde 40khz frekansında bir sinyal üretip 8 pals verici transdüsere gönderiyor.Bu ses dalgası havada, deniz seviyesinde ve 15 °C sıcaklıkta 340 m/s bir hızla yol alır.Bir cisme çarpar ve geri sensöre yansır.Cismin sensörden uzaklıgı ile doğru orantılı olarak echo pini bir süre lojik-1 seviyesinde kalır ve tekrar lojik- 0 olur.Bizim bu mesafeyi ölçmek için tek yapmamız gereken echo pininin ne kadar lojik-1 olduğunun süresini bulmaktır. Trigger ve Echo pininin ayarlarını defines.h dosyasından değiştirebilirsiniz. [php] /* Trigger PIN */ #define HCSR04_TRIGGER_RCC RCC_AHB1Periph_GPIOB #define HCSR04_TRIGGER_PORT GPIOB #define HCSR04_TRIGGER_PIN GPIO_Pin_2 /* Echo PIN */ #define HCSR04_ECHO_RCC RCC_AHB1Periph_GPIOB #define HCSR04_ECHO_PORT GPIOB #define HCSR04_ECHO_PIN GPIO_Pin_3 [/php] main.c kodları aşağıda gösterilmektedir.. [php] #include "stm32f4xx.h" #include "defines.h" #include "tm_stm32f4_delay.h" #include "tm_stm32f4_hcsr04.h" #include <stdio.h> int main(void) { float mesafe; /* Pin konfigürasyonlari yapiliyor… */ GPIO_InitTypeDef GPIO_InitDef; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); GPIO_InitDef.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13|GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitDef.GPIO_OType = GPIO_OType_PP; GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitDef.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOD, &GPIO_InitDef); /* Sistem baslatiliyor */ SystemInit(); /* Delay fonksiyonlari baslatiliyor */ TM_DELAY_Init(); /*HC-SR04 baslatiliyor.. */ if (!TM_HCSR04_Init()) { /* Sensor dogru okumuyorsa */ while (1) { GPIO_SetBits(GPIOD, GPIO_Pin_12| GPIO_Pin_13|GPIO_Pin_14 | GPIO_Pin_15); Delayms(100); } } while (1) { /* Mesafeyi oku */ mesafe = TM_HCSR04_Read(); if (mesafe < 10) { GPIO_SetBits(GPIOD, GPIO_Pin_12); GPIO_ResetBits(GPIOD, GPIO_Pin_13|GPIO_Pin_14 | GPIO_Pin_15); } else if (mesafe> 10 && mesafe < 20 ) { GPIO_SetBits(GPIOD, GPIO_Pin_13); GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_14 | GPIO_Pin_15); } else if (mesafe> 20 && mesafe < 30 ){ GPIO_SetBits(GPIOD, GPIO_Pin_14 ); GPIO_ResetBits(GPIOD, GPIO_Pin_12| GPIO_Pin_13| GPIO_Pin_15); } else { GPIO_SetBits(GPIOD, GPIO_Pin_15); GPIO_ResetBits(GPIOD, GPIO_Pin_12| GPIO_Pin_13|GPIO_Pin_14); } /* Sensorun algilamasi icin biraz zaman ver*/ Delayms(100); } } [/php] Program dosyalarına buradan ulaşabilirsiniz…..