Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
12
Cevap
28283
Tıklama
0
Öne Çıkarma
Arduino ile Sensör Uygulamaları (Sıcaklık,Mesafe,Kızılötesi,Hareket)
G
11 yıl
Çavuş
Konu Sahibi

Analog giriş fonksiyonları ile sadece potansiyometre gibi elemanların çıkışlarını değil aynı zamanda analog çıkış veren bütün sensörlerin gerilim değerlerini Arduino'ya aktarabiliriz.Elbette ki bu değerler 5V değerini aşmamalı.

< Resime gitmek için tıklayın >

Üst taraftaki resimde sıcaklık değerini analog çıkış olarak vermekte olan LM35 sensörü ve pinlerinin ne için kullanıldığı gösterilmekte.

Vs+ Arduino'muzun 5V, Toprak pini GND'ye ve Vçıkış olarak gösterilen pin de herhangi bir analog girişe takılarak Arduino ile sıcaklık ölçümü yapabiliriz.

Bu proje ile hem sensör ölçümlerine başlamış olacağız, hem de bir önceki yazıda görmüş olduğumuz "float" kodunu da kullanmış olacağız.

< Resime gitmek için tıklayın >
Analog giriş için Arduino'daki A1 pin girişini kullandım. Analog girişler sol tarafta olduğundan devre kurma işininin rahat olması için breadboard un sağ tarafının kullanılması sağlıklı olur.

Matematiksel ifadeyi kurabilmek için yani analog değeri sayısal değere çevirmek için LM35'in analog çıkış yapısını bilmemiz gerekir.

Orta bacağından verilen mV mertebesindeki gerilim her °C için 10 mV üretir. Yani 25 °C için çıkış 250 mV olur.

Arduino'daki ADC 10 bitlik olduğu için ve en yüksek değerimiz 5000 mV olduğu için bu 5000 mV'u 1024 parçaya işlemcimiz ayıracaktır. Yani 1023.değer bize 5V'u verecek ve her 10 mV bize 1 °C 'yi verecek şekilde programımızı yazıyoruz.

float sicaklik; //Analog değeri dönüştüreceğimiz sıcaklık  
float analoggerilim; //Ölçeceğimiz analog değer
int sicaklikpin=1; //Analog değer girişi

void setup () {
Serial.begin(9600); //Seri haberleşme,Sıcaklığı ekranda görücez
}

void loop () {
analoggerilim = analogRead(sicaklikpin); //A1'den değeri ölç
analoggerilim = (analoggerilim/1023)*5000;//değeri mV'a dönüştr
sicaklik = analoggerilim /10,0; // mV'u sicakliğa dönüştür

Serial.print("Sicaklik Degeri: ");
Serial.print (sicaklik);
Serial.println (" derece");
delay (1000);

}


Seri Haberleşme monitörü ile okuduğumuz değerler. Sensörün etrafında ateş yakarak değeri arttırabilirsiniz. Tabi sensörü yakmayın ateşle :))).

< Resime gitmek için tıklayın >

Video :

Videoyu izlemek için tıklayınız



G
11 yıl
Çavuş
Konu Sahibi

< Resime gitmek için tıklayın >

Bu yazımda geçen yazıda yaptığımız termometre uygulamasında kullandığımız seri haberleşme yerine LCD ekranı kullanarak yine aynı projeyi yaptım.

Bu projeyi PCB karta işlerken elbette seri haberleşme portu yerine portatif olan LCD'yi kullanmak durumunda kalırız. Bu yüzden LCD'yi de öğrenmek mühim. Zaten Seri Haberleşmeyi tam olarak öğrenebilirsek LCD'yi de kullanmak zor olmayacaktır.

Burda sadece LCD Ekran kullanımı ve LM35 Termometre projelerini birleştirdim ve aşağıdaki kodu koştum. LCD Bağlantılarını tekrar yazacağım uğraşmak istemeyenler için :).

LCD'nin
1 - VSS (Toprak)
2- +VDD
3- Potansiyometrenin Ortası
4- Arduino 7.pinine
5- Toprak
6- Arduino 8.pinine

11- Arduino 9.pinine
12- Arduino 10.pinine
13- Arduino 11.pinine
14- Ardunio 12.pinine
15- +VDD
16- Toprak

***Şemada 15. ve 16.pinlerin yerlerini ters yazmışım çok özür diliyorum. 15 VDD, 16 Toprağa bağlı olmalı. Potansiyometrenin Sağ Bacak Toprak, Sol Bacak +VDD...

#include <LiquidCrystal.h> // Kütüphane Gerekli 
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //Arduino pinleri LCD için
float sicaklik; //Analog değeri dönüştüreceğimiz sıcaklık
float analoggerilim; //Ölçeceğimiz analog değer
int sicaklikpin=1; //Analog değer girişi
void setup(){
lcd.begin(16,2);
}

void loop(){
lcd.clear();
lcd.setCursor(0,0); //komutu ile imleci istediğimiz karakter kutusunda konumlanmasını sağlıyoruz.İlk satırın 6.sütununa.
analoggerilim = analogRead(sicaklikpin); //A1'den değeri ölç
analoggerilim = (analoggerilim/1023)*5000;//değeri mV'a dönüştr
sicaklik = analoggerilim /10,0; // mV'u sicakliğa dönüştür

lcd.print("Sicaklik Degeri"); // İmlecten itibaren bu yazı yazılacak
lcd.setCursor(0,1); // 1.satırın ilk sütunundayız
lcd.print(sicaklik); // Ardndan Bu değişken değer yazılacak
lcd.print(" Derece"); //Değer ardından da bu yazı yazılacak
lcd.setCursor(1,7); //Derece yazısının yeri (2.satır,7.sütun)
delay(1000); //Bu kısım LCD'lerin frekans çalışma aralığı yüzünden giriliyor.

}



Videoyu izlemek için tıklayınız


Bu mesaja 1 cevap geldi.
G
11 yıl
Çavuş
Konu Sahibi

< Resime gitmek için tıklayın >
Bu yazımda HC-SR04 ultrasonic sensörünü tanıyıp cisim algılama ve de mesafe ölçümü yapacağız. Ses dalgaları sınıflandırılmasında 20 KHz-1 GHz arasındaki ses sinyalleri ultrasonic ses olarak tanımlanmıştır.Bizim sensörümüz ve bir çok ultrasonic sensör 40Khz frekansında ultrasonic ses üretmektedir. Burada önemli olan sesin yüksekliğinde belirleyici olan etken frekanstır.Ses yüksekse frekansta yüksektir.Ultrasonic ses sinyallerini insan kulağı algılayamaz.

< Resime gitmek için tıklayın >

Aslında HC-SR04 tüm haliyle bir transdüserdir. Transdüser ile sensör arasındaki fark ise sensör herhangi fiziksel bir değişimi algılayan bir eleman iken, transdüser bu değişimi algılayıp elektrik,ısı vs. bir çok enerji formuna dönüştürebilen bir elektronik devredir.

HC-SR04'te 2 adet araba farını andıran bir tanesi ses iletici diğeri de ses alıcı olan transdüser bulunmakta. Sol taraftan 40 KHz'de üretilen ses sinyal darbesi engele çarpıp sağ tarafa gelir ve biz bu gidiş-geliş arasındaki zamanı, cm'ye çevirerek uzaklığı ölçeceğiz.


T=0 zamanında darbe iletilir(ultrasonic ses sinyali), cisimden yansır, transdüser tarafından algılanır ve tekrar gönderilir.Sonraki darbe ilk darbenin ultrasonik enerjisinin hepsi absorbe edildiğinde iletilmelidir.Bu yüzden sensöre bir pals gönderilir sensör okunur ve sensörün datasheetinde yazan süre kadar sensöre tekrar pals gönderilmez.Eğer bekleme yapmaksak sensör saçma değerler döndürür.Çünkü ilk yolladıgımız sinyal bir yerden yansıyarak sensöre geri dönmeye devam eder.
< Resime gitmek için tıklayın >
Sensör üzerinde 4 adet pin mevcut.Bunlar;vcc,gnd,trig,echo pinleri.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çmekiçin tek yapmamız gereken echo pininin ne kadar lojik1 oldugunun süresini bulmaktır.Bu yapı yukarıdaki resimden daha iyi görülebilir.

Echo pininin lojik 1de kalma süresini mikrodenetleyici timerı ile ölçelim. Klasik yol=hız*zaman dan ve sesin 340m/sn lik hızınıda 34000cm/1000000us (340000/1000000=1/29) olarak düzenlersek formül x=t/29 olarak bulunur.Fakat burada önemli bir nokta sensörün bize döndürdüğü süre, ses sinyalinin gönderilmesi ile alınması arasındaki oluşan süre. Yani yol=zaman/29 ile aradaki mesafeyi iki ile çarpmış oluyoruz.Çünkü ses hem gitti hem geldi.Bu yüzden x=t/58 formulüyle aradaki mesafeyi ölçmüş olacağız . Bazı yerlerde 58 yerine 58.2 veya 59 yazanı da gördüm artık sizin kararınıza kalmış birşey.

Buna ek olarak da 13.pine led bağladım ve mesafe 15 cm altına düştüğünde led yansın istedim.Siz isterseniz bir buzzer koyabilirsiniz.

< Resime gitmek için tıklayın >

#include <LiquidCrystal.h> 
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int trigPin=2; //define trigPin 12
int echoPin=4; //define echoPin 13
int led=13;
void setup() {

pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led,OUTPUT);
lcd.begin(16,2);
}

void loop() {
int sure, uzaklik;
lcd.clear();
lcd.setCursor(0,0);

digitalWrite(trigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
uzaklik = (sure/58);

if (uzaklik<15)
{digitalWrite(led,HIGH);}
else {digitalWrite(led,LOW);}

lcd.print("Uzaklik = ");
lcd.print(uzaklik);
lcd.print(" cm");
delay(400);
}


< Resime gitmek için tıklayın >

Videoyu izlemek için tıklayınız


Bu mesaja 1 cevap geldi.
G
11 yıl
Çavuş
Konu Sahibi

< Resime gitmek için tıklayın >
Yavaş yavaş kablosuz düzeneklere geçmenin fayda sağlayacağını düşündüm. Bunun için de aralarından en basiti olan kızılötesi haberleşmeyi seçtim. Kısaca bahsetmek gerekirse kızılötesi bizim gözümüzle göremediğimiz ışınlar ve bu ışınları görebilen alıcı ve vericiler sayesinde 2 ayrı bağımsız devre belirli kodlamalar sayesinde haberleşebiliyor.En basitinden telefonunuzun kamerası ile televizyon kumandasının önündeki lede bakarken herhangi bir tuşa bastığınızda led'in yandığını görebilirsiniz. Fakat çıplak gözle kendimiz bu ışınları göremiyoruz.

TV kumandası seçtim çünkü hem bu kumandalardaki kodları çözümlemeyi öğrenmek hem de hazır bir verici olduğu için bizi fazla uğraştan kurtarır diye düşündüm :).

Kısaca yapacağımız projeyi anlatmam gerekirse önce TV kumandamızdaki tuşların kodlarını arduinomuz sayesinde öğreneceğiz ve bu kodları kullanarak sayısal çıkışlara hükmedeceğiz.

< Resime gitmek için tıklayın >
Ama önce aşağıdaki linkten arduino sketch kızılötesi kütüphanesini indirmemiz gerekiyor.

http://www.pjrc.com/teensy/arduino_libraries/IRremote.zip

Bunu arduino'nun kurulu olduğu klasördeki libraries içine atıyoruz. Adını sadece IR yaparsanız iyi olur. Bu kütüphane ile kullanacağımız kodları incelememiz gerekirse;

IRrecv irrecv(receivePin) ; // Adını koyabileceğimiz bir IR alıcı oluşturuyoruz. 

irrecv.enableIRIn() ; // IR ile veri alma işlemini başlatıyoruz.

irrecv.decode(&results); // Alınan kodu çözme teşebbüsüne girer.

results.value ; // Verinin kodudur. (bu değeri kullanacağız)

irrecv.resume(); // Veri alımından sonra diğer kodu almak için başa döner.


Önce aşağıdaki kodları yazıyoruz ve kullandığımız kumandanın kullanmak istediğimiz herhangi 4 tuşunun kodlarını yazıyoruz..Tabi önce Sketch>Import Library > IR'yi tıklıyoruz ki kütüphanemiz eklensin.

#include <IRremote.h> 

int RECV_PIN = 11; //IR'nin 3.bacağını taktığımız pin
IRrecv irrecv(RECV_PIN);
decode_results kod; dekode sonucu

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Alma başlıyor

}

void loop()
{
if (irrecv.decode(&kod))
{
Serial.println(kod.value, DEC); // Kodun Decimal Değeri
irrecv.resume();} // Yeni kod alımı

}


< Resime gitmek için tıklayın >

Benim kumandamda bu değerler çıktı. 1 tuştan 2 farklı değer çıkabilir. Mühim değil, 2 değeri de tek bir değere indirgeyeceğiz bu sorun da ortadan kalkmış olacak. Bunu da aşağıdaki örnekteki gibi yapacağım.

if(k==1874) 
return 1; // 1874 değerim 1 oldu


3 Led kullandım, 3 tuş açmak için kullanacağım , 1 tuşu da kapatmak için kullanacağım.

#include <IRremote.h> 

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results kod;

int kumanda(int k)
{

if(k==3922)
return 1;
if(k==3907)
return 2;
if(k==3906)
return 3;
if(k==3911)
return 4;
if(k==1874)
return 1;
if(k==1859)
return 2;
if(k==1858)
return 3;
if(k==1863)
return 4;


return -1;

}

void setup()
{
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);

Serial.begin(9600);
irrecv.enableIRIn();
}

void loop() {
if (irrecv.decode(&kod)) {

Serial.println(kumanda(kod.value));

if(kumanda(kod.value) == 1)
digitalWrite(9,HIGH);

if(kumanda(kod.value) == 2)
digitalWrite(8,HIGH);

if(kumanda(kod.value) == 3)
digitalWrite(7,HIGH);

if(kumanda(kod.value) == 4){

digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
}
irrecv.resume();
}
}



Videoyu izlemek için tıklayınız


Bu mesaja 1 cevap geldi.
G
11 yıl
Çavuş
Konu Sahibi

< Resime gitmek için tıklayın >
Merhabalar...
Bu yazımda hareket algıladığında dijital çıkış veren PIR Sensörü uygulaması yapacağız. Amacımız hareket algılandığında çıkış olarak led yakılması.

Fritzing devre şeması için kusura bakmayın, herşeyler var bi'tek PIR yok !

PIR SENSÖRÜ NEDİR ?
Orjinal ismi Passive InfraRed Sensor yani Pasif Kızılötesi Sensör olan bu ekipman objelerden yayılan kızılaltı (IR) ışın değişimini tespit etmek için bir Fresnel lens ve IR’ye duyarlı sensör yardımıyla, 6 metreye kadar mesafedeki hareketleri algılayabilir; ucuzdur, kullanımı kolaydır; alarm sistemleri, hareketle aktif olan ışıklar gibi uygulamalar için idealdir.

< Resime gitmek için tıklayın >

< Resime gitmek için tıklayın >

Sensörün başlığını açarsak üzerinde bulunan 3 bacağın ne ile alakalı bacaklar olduğunu görebiliriz.

Üstten baktığımızda en soldaki pin TOPRAK, en sağdaki pin +VCC, ortadaki pin de DATA çıkışıdır.Hareket varken DATA çıkışı '1', yokken '0' olmaktadır.

PIR sensörleri bir mikrodenetleyiciye bağlı olmadan kendi başlarına çalışabilen elemanlardır. Bu sayede satın aldığımız PIR sensörünü önce kendimiz test edebiliriz. Sensörümüze verdiğimiz besleme ile DATA çıkışının ucuna bir LED bağlayarak çalışıp çalışmadığına bakabiliriz. Sensörün arkasında 2 adet trimer var ve bu test aşamasında trimerlerin değerlerini küçük bir tornavida ile değiştirerek istenilen hassasiyete ve DATA çıkışının istenilen zaman kadar '1' olmasını sağlayabiliriz.

Uygulamamızın kodlarına bakacak olursak...

int pirPin = 3; // PIR pin 
int ledPin = 4; // LED pin
int deger = 0;

void setup() {
pinMode(pirPin, INPUT); // PIR Pin'i giriş yapılıyor
pinMode(ledPin, OUTPUT); // LED Pin'i çıkış yapılıyor
Serial.begin(9600); //Serial Porttan veri göndermek için baundrate ayarlanıyor.
}

void loop(){
deger = digitalRead(pirPin); // Dijital pin okunuyor
Serial.println(deger); // Okunan değer seri porttan okunuyor.
if (deger == HIGH) {
digitalWrite(ledPin, HIGH);
}
else{
digitalWrite(ledPin,LOW); // Eğer okunan değer 0 ise LED söndürülüyor.
}

}


Programımızı bu şekilde bırakırsak trimerlerin ayarlarına bağlı olarak çalışır sensörümüz. Bu haliyle bırakırsak Arduino kullanmamızın bir mantığı olmaz. O yüzden sizler "digitalWrite (ledPin,HIGH)" olan kısmın altına "delay(istenilen zaman)" kodunu ekleyerek hareket algılandıktan sonra ledin 1 olma süresini kendiniz ayarlayabilirsiniz.

Videoyu izlemek için tıklayınız


Bu mesaja 1 cevap geldi.
K
11 yıl
Yüzbaşı

hocam L293 Entegresi ile 2 tane fc motor kontrol edilebiliyomuş, sizin bununla ilgili bi konu anlatımınız varmı veya türkçe konu anlatımı olan bi kaynak biliyomusunuz?


Bu mesaja 1 cevap geldi.
G
11 yıl
Çavuş
Konu Sahibi

Şu an açıkçası bir bilgim yok hatta L298 aldım daha kullanamadım :).

Şayet en kısa zamanda alırsam elbetteki kullanımı hakkında elimden geldiğince birşeyler karalarım :).



A
11 yıl
Yüzbaşı

Elinize sağlık güzel bir rehber olmuş



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
M
10 yıl
Binbaşı

C
10 yıl
Yüzbaşı

Çok faydalı güzel bir yazi olmuş elinize sağlık devamını bekleriz .



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
D
9 yıl
Çavuş

iyi akşamlar pır sensörünü haraket ettirince de yanıyormu yoksa sensör sabit kalıp cismin mi hareket etmesi gerekir?



E
9 yıl
Onbaşı

D
9 yıl
Yüzbaşı

Hocam çalışmaların güzel. Blogunu da inceledim eline sağlık. Bir çok kişiye referans olacaktırç




Bu mesajda bahsedilenler: @arduinotik
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.