skip to Main Content

HC-SR04 ultrasonik modül kullanarak arduino uno platformunda mesafe ölçümü örneği 1

ultrasonik alıcı vericiler mesafe ölçme, cisim algılama vb bir çok alanda günlük hayatımızın içinde yer almaktadır. tüm bu uygulamalar sesin farklı ortamlarda yayılma hızının farklı olması, yansıma ve doppler kanunlarının kullanılması ile mümkün olmaktadır.

sesin yayılma hızı ortam yoğunluğuna, sıcaklığa vb kriterere bağlı değişmektedir. 0 derecede 1 atmosferde sesin havada yaklaşık olarak 340 m/s ile hızla ilerlediğini kabul edebiliriz. (kritik bir uygulama yapılmıyorsa)

konu hakkında bilgi alınmak istenirse https://www.grc.nasa.gov/www/k-12/airplane/sound.html adresinden yararlanılabilir.

piyasdaki en uygun fiyatlı ultrasonic sensor HC-SR04. bu nedenden dolayı çokca örnek uygulama bulabilirsiniz. ürüne ait temel bilgiler ve zamanla diagrami aşağıda yer almaktadır.

 Çalışma Voltajı  DC 5V
 Çektiği Akım  15 mA
 Çalışma Frekansı  40 Hz
 Maksimum Görme Menzili  4m
 Minimum Görme Menzili  2cm
 Görme Açısı  15°
 Tetik Bacağı Giriş Sinyali  10 us TTL Darbesi
 Echo Çıkış Sinyali  Giriş TTL sinyali ve Mesafe Oranı
 Boyutları  45mm x 20mm x 15mm

 

bu bilgilere göre echo portundan okuduğumuz değeri 58 e bölersek cismin uzaklığını cm cinsinden yaklaşık olarak elde etmiş oluruz.

HC-SR04 ün arduino ile fiziksel bağlantılarını aşagıdaki şekilde yapabiliriz. kullanacağınız pingleri kendi uygulamanıza göre uyarlayabilirsiniz.

devreye ait kod ise

	
/*
HC-SR04 ornegi

 *  Arduino | HC-SR04 
 *  -------------------
 *    5V    |   VCC 
 *    10    |   Trig
 *    9     |   Echo 
 *    GND   |   GND
*/
 
//hc-sr04 sensorune ait kullanicak trigger ve echo portlari
const int trig_pin = 10;
int echo_pin = 9;
 
//uygulamada kullanilacak guvenli mesafe
int guvenlik_mesafesi = 10;
 
//uygulamada gunveli mesafe bilgisini ledle takip edebilmek icin
//kullanilacak pinler
int led_mesafe_guvenli = 3, 
led_mesafe_guvensiz = 2;
 
void setup() {
  //uygulada kullanilacak pinlerin durumunu ayarlayalim
  Serial.begin(9600);
  
  pinMode(trig_pin, OUTPUT);
  pinMode(echo_pin, INPUT);
  
  pinMode(led_mesafe_guvenli, OUTPUT);
  pinMode(led_mesafe_guvensiz, OUTPUT);  
}
 
void loop()
{
  //sesin_suresi milisaniye cinsinden bir veridir.
  //bu veri santimetreye cevrilmektedir.
  long sesin_suresi, mesafe_cm;
 
 
  //olcum oncesi trigger low yapilarak sinyal gonderilmesi engellenir
  //10 ms sinyal gonderildikten sonra  
  //bunun amaci olasi hata olcumlerini minimize etmektedir
  digitalWrite(trig_pin, LOW);
  delayMicroseconds(2);
  digitalWrite(trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig_pin, LOW);
 
  //
  pinMode(echo_pin, INPUT);
  sesin_suresi = pulseIn(echo_pin, HIGH);
 
  // olculen sureyi cm olarka mesafeye cevirme
  mesafe_cm = sesin_suresi / 29 / 2 ;
 
  //modulun olcum sinirlari disinda ise seri porttan menzil disi mesajinin
  //olcum sinilari icinde ise mesafe bilgisinin seria porttan gonderilmesi
  if (mesafe_cm > 200 || mesafe_cm < 2){
   Serial.println("Menzil Disi");
   }
   else {
      Serial.print(mesafe_cm);
      Serial.print("  cm");
      Serial.println();
   }
 
  //olculen mesafenin guvenli mesafe icinde olup olmaginin testi
  //olculen mesafeye ledlerinin durumunun degistirilmesi
  if (mesafe_cm > guvenlik_mesafesi)
  {
    digitalWrite(led_mesafe_guvenli, HIGH);
    digitalWrite(led_mesafe_guvensiz, LOW);
  }
  else
  {
    digitalWrite(led_mesafe_guvensiz, HIGH);
    digitalWrite(led_mesafe_guvenli, LOW);
  }
 
  delay(100);
}

dfdf

basit arduino uygulamaları : led animasyon 1

arduino konusunda en temel uygulamalardandır led flash uygulaması yapmak. konuya meraklı kişiler ilk ledli uygulamasını yaptıktan sonra daha elle tutulur şeyler yapmak isterler. bu noktada bir zaman yapmış olduğum bir uygulamayı bende yazı haline getireyim.

uygulamada uno r3 kullandım. uno nun 3, 5, 6, 9, 10, 11 pinleri çıkış olarak kullanılmaktadır. ledleri bu pinlere bağlamadan önce 200 ohm civarı bir direnç kullanmayı unutmayın. devrenin şeması aşağıdaki gibidir.

devrenin kodu ise

int led_sayisi = 6;
int led_pin[6] = {3, 5, 6, 9, 10, 11};
  
void setup() {
  Serial.begin(9600);
  //belirledigimiz tum pinleri cikis yapalim
  for (int i = 0; i < led_sayisi; i++) {
    pinMode(led_pin[i], OUTPUT);
  }
}
  
void loop() {
  animasyon_1();
}
  
void animasyon_1() {
//tüm ledleri sonuk olarak belirleyelim
  int led_durum[6] = {0, 0, 0, 0, 0, 0 };
  for (int j = 0; j < 2; j++) {
//tum ledlerin konumunu sırasyla degistirelim
//ilk dongude led sonuk durumdaysa yanacak
//dongu tekrar edersen yanik durumdaysa sonecek
    for (int i = 0; i < led_sayisi; i++) {
      led_durum[i] = ~led_durum[i];
      digitalWrite(led_pin[i], led_durum[i]);
      delay(150);
    }
  }
}

devreyi kurup uygularsanız aşagıda yer alan videodaki gibi sonuç göreceksiniz.

Devreye ait fritzing dosyası – Arduino led animasyon 1

Arduino : LM35 Sıcaklık Sensörü ile LCD li Termometre

analog veri alabileceğniz en ucuz ve kolay bulunabilen sensörlerden bir tanesi lm35 dir. lm35 ile hassas uygulamalar yapmanın doğru olmayacağını hatırlatmakta fayda var.

arduino üzerinde analog giriş farklı portları kullanabilirsiniz. bu örnekte lm35 in Vout bacağı arduino nun A0 bacağına bağlanmıştır. burada hangi pinin kullanılacağı okunan sıcaklık degerinin hesaplanmasında önemlidir.

bu örneğimiz için Sicaklik = (500.0 * Vin)/1023 formulü bizim hesaplamızda işimize yarayacaktır.

lcd olarak standart 16×2 bir lcd kullanılmaktadır. devre kullanılan potansiyemetere ve direnç srasıyla lcd parlaklık ayarını yapmak ve lcd yi korumak için kullanılmaktadır.

lm35_lcd_uno

uno r3 için kod :

int Vin;  // Arduino A0 pinin kullanilacak degisken
float Sicaklik; // Sicakik degeri float olarak belirlenir

// include the library code:
#include <LiquidCrystal.h>

// LiquidCrystal kutuphanesi ile  lcd icin kullanacagimiz pinleri set edelim.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // lcd nin satir ve sutun bilgisi
  lcd.begin(16, 2);
  // lcd nin 1. satirina ait bilgi mesaji
  lcd.print("Sicaklik: ");
}

void loop() {
  Vin = analogRead(0);    // A0 pin değerinin okunması
  Sicaklik = (500.0 * Vin)/1023; // A0 pininden okunan degerin sicaklik degerine cevrilmesi
  // set the cursor to column 3, line 1
  lcd.setCursor(3, 1);
   // Sicaklik degerini yazirma
   lcd.print("derece "); 
  lcd.print(Sicaklik); 
       
}

circuits.io platformunu test etmk için bu uygulamayı circuits.io üzerinde yapmıştım. https://circuits.io/circuits/2424060-lm35-lcd-uno-r3/ adresinden devrenin çalışır haline ulaşabilirsiniz.

Back To Top