Arduino Devreleri #53 Ses İle Evdeki Lambayı Yakıp Söndürme-Servo Motor Çalıştırma
Merhabalar, bu yazımızda Ses İle Evdeki Lambayı Yakıp Söndürme-Servo Motor Çalıştırma hakkında bilgi vereceğim. Arduino’ da ses sensörü ile led diyot yakma söndürme nasıl yapılır? ses sensörü ile servo motor nasıl hareket ettirilir? ses sensörü ve röle ile evdeki 220 voltta çalışan cihazları sesle nasıl kontrol edebiliriz? Arka arkaya aynı iki ses kullanarak ses kontrolü nasıl yapılır? Arduino ses ile çalışan alarm devresi nasıl kurulur? Bu soruların cevabını bu konuda işleyeceğiz.
Arduino programı ayrıntılı kod kısmı, devre bağlantı şeması, devre kurulumu detaylı anlatımı ve devre çalışma videosu şu şekildedir.
SES SENSÖRÜ MODÜLÜ – KY-037 – KY-038
Ses sensörü, çevredeki sesleri algılayarak dijital veya analog sinyaller üreten devre elemanlarıdır. Bu sensörler, genellikle mikrofon içeren bir devre ile çevredeki ses seviyesini ölçer ve bu bilgiyi Arduino gibi mikrodenetleyici devrelere ileterek çeşitli projelerde kullanılabilirler.
3 Pinli ve 4 Pinli Ses Sensörleri şeklinde piyasada satılmaktadır.
3 Pinli Ses Sensörü KY-038 olarak tanımlanmış olup VCC, GND ve OUT şeklinde dijital pin çıkışı bulunmaktadır. Sensör üzerindeki trimpot ile ses eşiği ayarlaması yapılır. Bu eşik aşıldığında sensör dijital çıkış verir (HIGH veya LOW). Bu modülde analog sinyal çıkışı yoktur.
4 Pinli Ses Sensörü KY-037 modeli olup VCC, GND, AO (Analog Çıkış) ve DO (Dijital Çıkış) pinleri bulunmaktadır. Analog çıkış sayesinde ses seviyesini (şiddetini) hassas bir şekilde ölçebiliriz. Aynı zamanda dijital çıkış da alabiliriz.
Ses algılandığında led yakma veya röle tetikleme devrelerinde kullanılmaktadır.
Ses sensörü ile farklı projeler oluşturabilirsiniz. Bu yazımızda 3 farklı devre yapımını işleyeceğiz.
NOT: Kod bölümü içerisinde yer alan ve // işareti ile başlayan satırlar açıklama satırlarıdır. O satırdaki kod bloğunun ne anlama geldiği ve nasıl çalıştığı ile ilgili bilgi verir. Arduino // işaretli alanı çalıştırmaz. Kod satırından isterseniz // işaret ile başlayan açıklama satırlarını silebilirsiniz.
ARDUINO SES SENSÖRÜ İLE LED YAKMA
KOD BÖLÜMÜ:
// Ses Sensörü İle Led Yakma
int led = 6; // ledimizi tanımladık
int sensorpin = 7; // sensörümüzün çıkış pinini tanımladık
int ses = 0; // ses isimli degisken tanımladık ve başlangıç değerini 0 olarak ayarladık.
void setup()
{
pinMode(led,OUTPUT); // ledimizin bağlı olduğu pini çıkış olarak tanımladık.
pinMode(sensorpin,INPUT); // sensörün çıkışının bağlı olduğu pini giriş olarak tanımladık.
Serial.begin(9600); // seri iletişimi başlattık.
}
void loop()
{
int data = digitalRead(sensorpin); // ses sensöründen gelen dijital değeri okuyoruz
Serial.println(data); // aldığımız verileri serial monitöre yazmasını söyledik.
if ((data == 0) && (ses == 0)) // eğer sensörden gelen veri 0 ise ve ses değeri 0 ise
{
digitalWrite(led,HIGH); // ledi yak !
ses = 1; // ses değişkenini 1 yap
delay (1000); // 1 saniye bekle
}
else if ((data == 0) && (ses == 1)) // eğer sensörden gelen veri 0 ise ve ses değişkenimiz 0 ise
{
digitalWrite(led,LOW); // değil ise ledi söndür
ses = 0; // ses değişkenini 0 yap
delay (1000); // 1 saniye bekle
}
}
DEVRENİN ÇALIŞMASI:
Ses sensöründen ses algılandığında led diyot yanacaktır. Tekrar ses algılandığında ise led diyot sönecektir. Devre üzerinde bulunan trimpot ile hangi ses şiddetinde led diyotun yanıp yanmamasını ayarlayabilirsiniz.
DEVRE BAĞLANTI ŞEMASI:
DEVRE KURULUMU:
Malzemeler:
Arduino Uno
Breadboard
1 adet ses sensörü (KY-038)
1 adet led diyot
1 adet 220 Ω direnç
5 adet iki ucu erkek jumper kablo
Ses sensörü breadboard üzerine yerleştirilir. Sensörün VCC pini, Arduino +5 Volt pinine bağlanır. Sensörün GND pini, Arduino GND pinine bağlanır. Sensörün OUT pini, Arduino’nun 7 numaralı pinine bağlanır.
Breadboard üzerine 1 adet led diyot yerleştirilir. Led diyotun (uzun) artı bacağına 220 ohm direnç bağlanır. 220 ohm direncin diğer ucu Arduino’nun 6 numaralı pinine bağlanır. Led diyotun eksi ucu, Arduino’ nun GND pinine bağlanarak devre kurulumu tamamlanır.
ARDUINO SES SENSÖRÜ İLE SERVO MOTOR ÇALIŞTIRMA
Bu devre tasarımı ile aşağıdaki projeleri tasarlayabilirsiniz.
İki alkış veya belirli bir ses dizisi ile kapıyı açmak
Çöp kutusu kapağının belirli bir ses (örneğin alkış) algılandığında açılması ve belirli bir süre sonra otomatik kapanması.
Bir oyuncak robotun sesle hareket etmesi veya bir kısmının (örneğin, kol veya kafa) sesle kontrol edilmesi.
Alkışla pencere panjurunu yukarı çekmek veya aşağı indirmek.
Acil bir durumda, ses algılandığında (örneğin, yardım çağrısı veya yüksek bir gürültü) servo motorun bir mekanizmayı çalıştırarak bir kapıyı açması veya alarm tetiklemesi.
Belirli bir ses komutuyla (örneğin, alkış) bir tabelayı veya ok yönlendirme mekanizmasını hareket ettirmek.
Kamera yönünün sesle belirlenmesi, örneğin bir alkışla sağa, iki alkışla sola dönmesi.
Evcil hayvanların çıkardığı bir ses (örneğin, havlama veya miyavlama) algılandığında, servo motorun bir bölmeyi açarak mama bırakması.
Sahne gösterilerinde bir sesle bir dekorun veya aksesuarın hareket etmesi.
KOD BÖLÜMÜ:
// Ses Sensörü İle Servo Motor Çalıştırma
#include // Servo motor kütüphanesini ekledik
Servo motor; //Servo için motor ismini verdik
int led = 6; // ledimizi tanımladık
int sensorpin = 7; // sensörümüzün çıkış pinini tanımladık
int ses = 0; // ses isimli degisken tanımladık ve başlangıç değerini 0 olarak ayarladık.
void setup()
{
pinMode(led,OUTPUT); // ledimizin bağlı olduğu pini çıkış olarak tanımladık.
pinMode(sensorpin,INPUT); // sensörün çıkışının bağlı olduğu pini giriş olarak tanımladık.
motor.attach(5); // Servo motor çıkış pinini ayarladık
Serial.begin(9600); // seri iletişimi başlattık.
}
void loop()
{
int data = digitalRead(sensorpin); // ses sensöründen gelen dijital değeri okuyoruz
Serial.println(data); // aldığımız verileri serial monitöre yazmasını söyledik.
if ((data == 0) && (ses == 0)) // eğer sensörden gelen veri 0 ise ve ses değeri 0 ise
{
digitalWrite(led,HIGH); // ledi yak !
motor.write(180); //Servo motora 180 derece dönüş komutu verdik
ses = 1; // ses değişkenini 1 yap
delay (1000); // 1 saniye bekle
}
else if ((data == 0) && (ses == 1)) // eğer sensörden gelen veri 0 ise ve ses değişkenimiz 0 ise
{
digitalWrite(led,LOW); // değil ise ledi söndür
motor.write(0); //Servo motora 0 derece geri dönüş komutu verdik
ses = 0; // ses değişkenini 0 yap
delay (1000); // 1 saniye bekle
}
}
DEVRENİN ÇALIŞMASI:
Ses sensöründen ses algılandığında led diyot yanacak, aynı zamanda servo motor çalışacak ve 180 derece dönecek. Tekrar ses algılandığında led diyot sönecek, servo motorda ilk konumu olan O dereceye hareket edecektir. Devre üzerinde bulunan trimpot ile ses şiddeti seviyesini ayarlayabilirsiniz.
DEVRE BAĞLANTI ŞEMASI:
DEVRE KURULUMU:
Malzemeler:
Arduino Uno
Breadboard
1 adet ses sensörü (KY-038)
1 adet SG90 Servo Motor
1 adet led diyot
1 adet 220 Ω direnç
5 adet iki ucu erkek jumper kablo
Ses sensörü breadboard üzerine yerleştirilir. Sensörün VCC pini, breadboard ‘un artı şeridine bağlanır. Sensörün GND pini, breadboard’ un eksi şeridine bağlanır. Sensörün OUT pini, Arduino’nun 7 numaralı pinine bağlanır.
Servo motorun kırmızı uç çıkışına (+) jumper kablo bağlanarak kablonun diğer ucu breadboard ‘un artı şeridine bağlanır. Servo motorun kahverengi uç çıkışına (-) jumper kablo bağlanarak kablonun diğer ucu breadboard’ un eksi şeridine bağlanır. Servo motorun turuncu uç çıkışına (data) jumper kablo bağlanarak kablonun diğer ucu Arduino’nun 5 numaralı PWM dijital pinine bağlanır.
Breadboard üzerine 1 adet led diyot yerleştirilir. Led diyotun (uzun) artı bacağına 220 ohm direnç bağlanır. 220 ohm direncin diğer ucu Arduino’nun 6 numaralı pinine bağlanır. Led diyotun eksi ucu, Arduino’ nun GND pinine bağlanarak devre kurulumu tamamlanır.
ARDUINO SES SENSÖRÜ ve RÖLE İLE 220 VOLT CİHAZ ÇALIŞTIRMA
KOD BÖLÜMÜ:
// Ses Sensörü İle Ev Cihazlarını Çalıştırma
// LCD Ekranda Gösterme (Türkçe Karakterli)
// Role giriş pini ters mantıkla çalışmaktadır.(Aktif Düşük Röle)
// LOW gönderildiğinde role kontağını kapatacak, HIGH gönderildiğinde role kontağı hareket etmeyecektir.
int role = 7; // Role pinini tanımladık
int sensorpin = 6; // Sensör pinini tanımladık
int ses = 0; // ses isimli degisken tanımladık ve başlangıç değerini 0 olarak ayarladık.
void setup()
{
pinMode(role, OUTPUT); // Röleyi çıkış aygıtı olarak tanımladık.
pinMode(sensorpin,INPUT); // Ses sensörünü çıkış aygıtı olarak tanımladık.
Serial.begin(9600); // seri iletişimi başlattık.
}
void loop()
{
int data = digitalRead(sensorpin); // ses sensöründen gelen dijital değeri okuyarak data değişkenine atıyoruz.
Serial.println(data); // aldığımız verileri seri monitöre yazmasını sağladık.
if ((data == 0) && (ses == 0)) // eğer sensörden gelen veri 0 ve aynı zamanda ses değeri 0 ise
{
digitalWrite(role,LOW); // Röle pinine sinyal göndererek çalıştırıyoruz (aktif düşük röle LOW ile tetikleniyor)
ses = 1; // ses değişkenini 1 yap
delay (1000); // 1 saniye bekle
}
else if ((data == 0) && (ses == 1)) // eğer sensörden gelen veri 0 ise ve ses değişkenimiz 0 ise
{
digitalWrite(role, HIGH); //Röle pinine sinyali keserek çalışmamasını sağlıyoruz
ses = 0; // ses değişkenini 0 yap
delay (1000); // 1 saniye bekle
}
}
DEVRENİN ÇALIŞMASI:
Ses sensöründen ses algılandığında röle enerjilenecek, açık kontağını kapatarak kontaklara bağlı olan lamba yanacaktır. Tekrar ses algılandığında röle enerjisi kesilecek ve lamba sönecektir. Devre üzerinde bulunan trimpot ile ses şiddeti seviyesini ayarlayabilirsiniz.
DEVRE BAĞLANTI ŞEMASI:
DEVRE KURULUMU:
Malzemeler:
Arduino Uno
Breadboard
1 adet ses sensörü (KY-038)
1 adet 5 Volt Röle (Aktif düşük röle)
3 adet bir ucu dişi, bir ucu erkek jumper kablo
7 adet iki ucu erkek jumper kablo
1 adet 220 volt lamba
1 adet erkek fiş
1 adet duy
Yaklaşık 1 metre 0,75 mm kablo
Röle modülü üzerinde bulunan pinlere 3 adet dişi jumper kablo bağlanır. Röle VCC pini, breadboard artı şeridine bağlanır. Röle GND pini, breadboard eksi şeridine bağlanır. Röle IN pini, Arduino’nun 7 numaralı pinine bağlanır.
Ses sensörü breadboard üzerine yerleştirilir. Sensörün VCC pini, breadboard ‘un artı şeridine bağlanır. Sensörün GND pini, breadboard’ un eksi şeridine bağlanır. Sensörün OUT pini, Arduino’nun 6 numaralı pinine bağlanır.
Lamba bağlantısı için elektrik fişinden gelen kablonun bir ucu rölenin ortak ucuna (C) bağlanır. Rölenin açık kontak (NO) ucundan çıkan kablo, lambanın altındaki duy bağlantısına gelir. Duy bağlantısından çıkan diğer uç ise, elektrik fişine bağlanarak lamba devresi de tamamlanmış olur.
ARDUINO İKİ ALKIŞLA EVDEKİ LAMBAYI YAKMA
KOD BÖLÜMÜ:
// Ses Sensörlü İki Alkışla Lamba Çalıştırma
// Role giriş pini ters mantıkla çalışmaktadır.(Aktif Düşük Röle)
// LOW gönderildiğinde role kontağını kapatacak, HIGH gönderildiğinde role kontağı hareket etmeyecektir.
#define role 7 // role pinini tanımladık
#define led 6 // Led diyotu tanımladık
#define sensor 5 // ses sensörü pinini tanımladık.
int alkis = 0;
long ses_baslangic = 0; // millis fonksiyonu kullandığımız için burada long kullandık
long alkis_tespit = 0; // millis fonksiyonu kullandığımız için burada long kullandık
boolean isik_durum = false; //true yada false ifadesi için boolean değişkeni kullandık
void setup() {
pinMode(sensor, INPUT);
pinMode(led,OUTPUT);
pinMode(role, OUTPUT);
digitalWrite(role, HIGH);
}
void loop() {
int sensor_durum = digitalRead(sensor); // sensörden veriyi okuduk
if (sensor_durum == 0)
{
if (alkis == 0) // sensör çalışmıyor ve alkış yok ise
{
ses_baslangic = alkis_tespit = millis();
alkis++;
}
else if (alkis > 0 && millis()-alkis_tespit >= 50) // alkış tespit ediliyor
{
alkis_tespit = millis();
alkis++;
}
}
if (millis()-ses_baslangic >= 400)
//50 milisaniye üzerinde ve 400 milisaniye altındaki 2. alkışta tetikleme yapacak.
//İki alkış arası 400 milisaniyeyi geçerse devre çalışmayacak.
{
if (alkis == 2) // İkinci alkıştan sonra;
{
if (!isik_durum) // Işık yanmıyorsa;
{
isik_durum = true; //Işığı aktif et ve aşağıdaki komutları çalıştır
digitalWrite(led, HIGH);
digitalWrite(role, LOW); //Aktif düşük role LOW komutunda enerjilenecek
}
else if (isik_durum)
{
isik_durum = false; //Işığı pasif et ve aşağıdaki komutları çalıştır
digitalWrite(led, LOW);
digitalWrite(role, HIGH);
}
}
alkis = 0; // Alkış değerini başa al
}
}
Millis fonksiyonu: Arduino’ya enerji verdiğimiz zaman otomatik olarak çalışmaya başlayan zaman fonksiyonudur. Fonksiyon içerisinde Arduino’nun çalışma zamanı milisaniye cinsinden tutulur. Bu fonksiyon çağrıldığında Arduino’nun kaç milisaniye süresince çalıştığı döndürülür. Değerler milisaniye cinsinden tutulduğu için geri döndürülen değer int veya float’ın tutabileceği kapasitenin çok üstünde olabilir. Bu yüzden bu fonksiyonla birlikte long veya unsigned long türündeki değişkenler kullanılır. Bizde kodlama içerisinde int yerine long değişkeni kullandık.
Millis fonksiyonununçalışma süresi yaklaşık 50 gün diyebiliriz. Bu süreden sonra kendisini sıfırlamış olur. Arduino’yu 50 gün boyunca hiç kapatmadan çalıştırdığımızı düşünürsek 50. günün sonunda millis fonksiyonunu değerleri baştan başlayacaktır.
Millis fonksiyonunun kullanımı delay fonksiyonuna benzemekle birlikte kodlar içerisinde delay fonksiyonu kullanıldığında Arduino başka bir işlem yapamamaktadır. Fakat millis fonksiyonu ile bu işlem rahatlıkla gerçekleştirilebilmektedir.
DEVRENİN ÇALIŞMASI:
Ses sensöründen iki ardışık ses algılandığında röle enerjilenecek, açık kontağını kapatarak kontaklara bağlı olan lamba yanacaktır. Tekrar iki ardışık ses algılandığında röle enerjisi kesilecek ve lamba sönecektir. Devre üzerinde bulunan trimpot ile ses şiddeti seviyesini ayarlayabilirsiniz. Sesler ardışık olmazsa devre çalışmayacaktır.
DEVRE BAĞLANTI ŞEMASI:
DEVRE KURULUMU:
Malzemeler:
Arduino Uno
Breadboard
1 adet ses sensörü (KY-038)
1 adet 5 Volt Röle (Aktif düşük röle)
3 adet bir ucu dişi, bir ucu erkek jumper kablo
7 adet iki ucu erkek jumper kablo
1 adet led diyot
1 adet 220 Ω direnç
1 adet 220 volt lamba
1 adet erkek fiş
1 adet duy
Yaklaşık 1 metre 0,75 mm kablo
Röle modülü üzerinde bulunan pinlere 3 adet dişi jumper kablo bağlanır. Röle VCC pini, breadboard artı şeridine bağlanır. Röle GND pini, breadboard eksi şeridine bağlanır. Röle IN pini, Arduino’nun 7 numaralı pinine bağlanır.
Ses sensörü breadboard üzerine yerleştirilir. Sensörün VCC pini, breadboard ‘un artı şeridine bağlanır. Sensörün GND pini, breadboard’ un eksi şeridine bağlanır. Sensörün OUT pini, Arduino’nun 5 numaralı pinine bağlanır.
Breadboard üzerine 1 adet led diyot yerleştirilir. Led diyotun (uzun) artı bacağına 220 ohm direnç bağlanır. 220 ohm direncin diğer ucu Arduino’nun 6 numaralı pinine bağlanır. Led diyotun eksi ucu, Arduino’ nun GND pinine bağlanarak devre kurulumu tamamlanır.
Lamba bağlantısı için elektrik fişinden gelen kablonun bir ucu rölenin ortak ucuna (C) bağlanır. Rölenin açık kontak (NO) ucundan çıkan kablo, lambanın altındaki duy bağlantısına gelir. Duy bağlantısından çıkan diğer uç ise, elektrik fişine bağlanarak lamba devresi de tamamlanmış olur.
Ses İle Evdeki Lambayı Yakıp Söndürme-Servo Motor Çalıştırma
Devre hakkında yorumlarınızı aşağıdaki yorum kısmına yazabilirsiniz. Youtube kanalımızda da mBlock ve Arduino ile ilgili ders videoları bulabileceksiniz. Youtube kanalıma abone olmayı da unutmayınız.
https://www.youtube.com/@candemirahmet
Yorum Yap