Pages

ARDUINO #1 - MELODİ UYGULAMASI

Arduino ile buzzer veya hoparlör kullanarak melodi çalmak mümkün. Bu yazımda Arduino ile istediğimiz melodiyi nasıl oluştururuz, buzzer veya hoparlör kullanırsak bağlantıları nasıl olmalı gibi soruları cevaplayacağım.


Arduino ile Melodi Uygulaması 

Arduino ile melodi çalmak için birden fazla seçenek var. Ben kendi devremde eski ses sistemimden çıkardığım bir hoparlörü kullandım. Ancak buzzer kullanarakta melodi uygulamasını gerçekleştirebilirsiniz.

                                                 
                                                Resim 95C tarafından Pixabay'a yüklendi


Devresinde hoparlör kullanmak isteyenler için devre şeması ve kodlamadan bahsetmeden önce hoparlör ile ilk tanıştığım zamanlar bilmediğim ve kafamı kurcalayan bir sorunun cevabı ile başlayalım. Hoparlörün üzerindeki iki çıkışın hangisi artı hangisi eksi bunu nasıl anlarız, artı veya eksi bağlantıları yanlış yapılırsa ne olur?


Hoparlör Çıkışlarının Tespiti

Hoparlörlerin ve ses sinyalleri oluşturan cihazların çıkışlarında artı (+) ve eksi (-) işaretleri bulunur.
Bağlantısı yapılırken bu işaretlere dikkat edilmesi gerekir. Tek bir hoparlörün devreye bağlantısı yapılırken ters bağlanmasının pratikte hiçbir sakıncası yoktur. Ancak birden fazla hoparlörlü sistemlerde artı ve eksi uçların yanlış bağlanması ses veriminin düşmesine sebep olur.

Bunun sebebi, çıkışları doğru bağlanan hoparlörde diyafram dışarıya doğru titreşirken, ters bağlanmış hoparlörde diyaframın içeri doğru titreşmesidir. Yani hoparlör bağlantısı yaparken hangi ucun artı hangi ucun eksi olduğunu anlamak için hoparlör çıkışlarını pilin artı ve eksi kısmına bağlayarak, diyafram dışarı titreşirken pilin artısında olan uç hoparlörün artı çıkışı olur.

Devre Şeması



Hoparlörün çıkışlarının tespitini yapma konusunu hallettiğimize göre artık Arduino ile bağlantısına geçebiliriz. Hoparlör ve buzzer aynı bağlantı şekline sahiptir ikisinin de bağlantısında 100 ohm değerinde direnç kullanılır. Direnç kullanılmasının sebebi 5V luk çıkış geriliminin buzzer a zarar vermesini önlemek ve aynı zamanda buzzerın çekeceği yüksek akımın arduino pinine zarar vermesini önlemek içindir. Direnç kullanılmadığı durumda da devre çalışır ancak önerilmez.

Melodi Kodları

Arduino ile melodi oluşturmak için tone fonksiyonunu kullanırız. Tone fonksiyonu içerisinde 3 farklı değer alabilen ve iki farklı şekilde kullanılabilen bir fonksiyondur. Bunlardan biri tone(pin, frequency, duration) , diğeri ise tone(pin,frequency) şeklindedir. Ben kodlarımda ikinci hali ile kullandım. Tone komutu hoparlörün girilen frekanslarda ses üretmesini sağlar ve noTone komutu ile istediğimiz süre zarfınca sustururuz. Bu şekilde tone ve noTone komutları ile nota değerlerini kullanarak uygun delay değerleri ile istediğiniz şarkının melodisini çalabilirsiniz. İstiklal Marşı'nın hazır kodları olduğu için farklı olması için bu yazımda Mehter Marşının bir kısmını kodladım. 

 int speaker = 3;  
   
 int re = 294;  
 int mi = 330;  
 int fa = 349;  
 int sol = 392;  
 int la = 440;  
 int si = 494;  
 int ido = 523;  
   
 void setup() {  
   
  pinMode(speaker, OUTPUT);  
   
 }  
   
 void loop() {  
   
  tone(speaker, si);  
  delay(350);  
  noTone(3);  
  delay(175);  
   
  tone(speaker, si);  
  delay(350);  
  noTone(3);  
  delay(175);  
   
  tone(speaker, si);  
  delay(350);  
  noTone(3);  
  delay(700);  
   
  tone(speaker, si);  
  delay(350);  
  noTone(3);  
  delay(175);  
   
  tone(speaker, si);  
  delay(350);  
  noTone(3);  
  delay(175);  
   
  tone(speaker, si);  
  delay(350);  
  noTone(3);  
  delay(700);  
   
  tone(speaker, si);  
  delay(150);  
  noTone(3);  
  delay(100);  
   
  tone(speaker, si);  
  delay(90);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, si);  
  delay(90);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, si);  
  delay(250);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, ido);  
  delay(250);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, si);  
  delay(250);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, la);  
  delay(250);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, sol);  
  delay(250);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, si);  
  delay(250);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, la);  
  delay(350);  
  noTone(3);  
  delay(150);  
   
  tone(speaker, la);  
  delay(350);  
  noTone(3);  
  delay(150);  
   
  tone(speaker, la);  
  delay(100);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, si);  
  delay(100);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, sol);  
  delay(100);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, si);  
  delay(100);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, la);  
  delay(100);  
  noTone(3);  
  delay(150);  
   
  tone(speaker, mi);  
  delay(350);  
  noTone(3);  
  delay(100);  
   
  tone(speaker, ido);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, si);  
  delay(100);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, la);  
  delay(350);  
  noTone(3);  
  delay(700);  
   
  tone(speaker, la);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, sol);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, si);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, la);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, sol);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, fa);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, mi);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, fa);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, sol);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, la);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, fa);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, re);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, mi);  
  delay(300);  
  noTone(3);  
  delay(700);  
   
  tone(speaker, la);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, sol);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, si);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, la);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, sol);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, fa);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, mi);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, fa);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, sol);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, la);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, fa);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, re);  
  delay(175);  
  noTone(3);  
  delay(50);  
   
  tone(speaker, mi);  
  delay(300);  
  noTone(3);  
  delay(50);  
   
 }  
   
   

Kullandığım nota frekansları temel notalar içindir. Daha fazlasına Arduino'nun kendi sitesinden ulaşabilirsiniz.

Buzzer İle Melodi Çalmak

Buzzerlar aktif ve pasif olmak üzere iki şekilde üretilirler. Dışarıdan bakıldığında tamamen aynı gibi gözüksede projelerde buzzera uygun kod yazılmadığında çalışmama gibi sorunlarla karşılaşırız.Fiziksel olarak bu iki çeşit buzzerı birbirinden ayırabiliriz. Arka taraflarına baktığımızda aktif buzzerlarda bir epoksi kaplama görürken pasif buzzerlarda açık bir devre görürüz.


 Aktif ve pasif buzzer kodları birbiri ile karıştırılırsa ya kodumuz çalışmaz ya da istenilen sesleri elde edemeyiz. Aktif buzzerlar içerisinde bulunan aktif devre sayesinde 5V giriş verildiğinde direkt ses çıkışı verebilirler. Pasif buzzerlarda ise bu aktif devre bulunmadığından dolayı direk 5V verildiğinde ses çıkmaz veya çok düşük bir ses çıkar. Pasif buzzerlara düz bir 5V yerine frekanslı bir dalga gönderilmesi gerekir. Pasif buzzer bu frekanslı değeri kendi içerisinde bir ses sinyaline dönüştürür. Elektronik olarak iki buzzer arasındaki bağlantılar tamamen aynıdır ancak kod kısmında farklılıklar vardır.

Buzzer Bağlantısı




Buzzer bağlantısında aktif veya pasif olması herhangi bir fiziksel değişiklik gerektirmez.

Aktif ve Pasif Buzzer Örnek Kodlar

//AKTİF BUZZER ÖRNEK
void setup() {   
  pinMode(3,OUTPUT);   
 }  
 void loop() {  
  digitalWrite(3,HIGH);  
  delay(100);  
  digitalWrite(3,LOW);  
  delay(100);  
 }  
 //PASİF BUZZER ÖRNEK  
 void setup() {  
  pinMode(3,OUTPUT);  
 }  
 void loop() {  
  tone(3,333);  
  delay(33);  
  noTone(3);  
  delay(33);  
 }  

Emre Aytur

Gömülü Sistemler, Elektronik, Teknoloji