- Gerekli malzemeler
- Ses Sensörü Çalışıyor
- Osiloskopta Ses Frekansının Ölçülmesi
- Düdük Dedektörü Arduino Devre Şeması
- Arduino ile Frekans Ölçümü
- Whistle'ı algılamak için Arduino'nuzu programlama
- Arduino Düdük Dedektörü Çalışıyor
Çocukken, ellerinizi çırptığınızda tetiklenen bir oyuncak müzik arabasına hayran kaldım ve sonra büyüdüğümde, aynı şeyi evimizdeki ışıkları ve fanları değiştirmek için kullanıp kullanamayacağımızı merak ettim. Tembel halimi anahtar panosuna götürmek yerine sadece alkışlayarak Fanlarımı ve ışıkları açmak harika olurdu. Ancak çoğu zaman bu devre, yüksek bir radyo veya komşumun çim biçme makinesi gibi ortamdaki herhangi bir yüksek sese tepki vereceği için arızalanabilir. Bir alkış anahtarı oluşturmak da eğlenceli bir proje olsa da.
O zaman, devrenin düdük algılayacağı bu Islık Algılama yöntemiyle karşılaştığımda öyleydi. Diğer seslerden farklı olarak bir ıslık, belirli bir süre için tek tip bir frekansa sahip olacaktır ve bu nedenle konuşma veya müzikten ayırt edilebilir. Bu eğitimde, Ses Sensörünü Arduino ile arayüz oluşturarak ıslık sesini nasıl algılayacağımızı öğreneceğiz ve bir ıslık algılandığında bir AC lambasını bir röle aracılığıyla değiştireceğiz. Bu arada, ses sinyallerinin mikrofon tarafından nasıl alındığını ve Arduino kullanarak frekansı nasıl ölçeceğimizi de öğreneceğiz. Kulağa ilginç geliyor, bu yüzden Arduino tabanlı Ev Otomasyon Projesi ile başlayalım .
Gerekli malzemeler
- Arduino UNO
- Ses Sensörü Modülü
- Röle Modülü
- AC Lambası
- Kabloların Bağlanması
- Breadboard
Ses Sensörü Çalışıyor
Bu Ev Otomasyon Projesi için donanım bağlantısına ve koduna dalmadan önce, ses sensörüne bir göz atalım. Bu modülde kullanılan ses sensörü aşağıda gösterilmiştir. Piyasada bulunan çoğu ses sensörünün çalışma prensibi, görünüşü biraz değişse de, buna benzer.
Bildiğimiz gibi, bir ses sensöründeki ilkel bileşen mikrofondur. Mikrofon, ses dalgalarını (akustik enerji) elektrik enerjisine dönüştüren dönüştürücü türüdür. Temel olarak mikrofonun içindeki diyafram, çıkış pini üzerinde elektrik sinyali üreten atmosferdeki ses dalgalarına titreşir. Ancak bu sinyaller çok düşük büyüklükte (mV) olacak ve bu nedenle Arduino gibi bir mikro denetleyici tarafından doğrudan işlenemeyecektir. Ayrıca varsayılan olarak ses sinyalleri doğası gereği analogdur, bu nedenle mikrofondan gelen çıktı değişken frekanslı bir sinüs dalgası olacaktır, ancak mikrodenetleyiciler dijital cihazlardır ve bu nedenle kare dalga ile daha iyi çalışır.
Bu düşük sinyal sinüs dalgalarını yükseltmek ve bunları kare dalgalara dönüştürmek için modül, yukarıda gösterildiği gibi yerleşik LM393 Karşılaştırıcı modülünü kullanır. Mikrofondan gelen düşük voltajlı ses çıkışı, bir amplifikatör transistörü aracılığıyla karşılaştırıcının bir pimine verilirken, bir potansiyometre içeren bir voltaj bölücü devresi kullanılarak diğer pime bir referans voltaj ayarlanır. Mikrofondan gelen ses çıkış voltajı önceden ayarlanmış voltajı aştığında, karşılaştırıcı 5V (çalışma voltajı) ile yükselir, aksi takdirde karşılaştırıcı 0V'da düşük kalır. Bu şekilde düşük sinyalli sinüs dalgası, yüksek voltaj (5V) kare dalgaya dönüştürücü olabilir. Aşağıdaki osiloskop anlık görüntüsü, sarı dalganın düşük sinyal sinüs dalgası ve mavinin çıkış kare dalgası olduğu yerde aynı şeyi göstermektedir. Modül üzerindeki potansiyometreyi değiştirerek hassasiyet kontrol edilebilir.
Osiloskopta Ses Frekansının Ölçülmesi
Bu ses sensör modülü, atmosferdeki ses dalgalarını, frekansı ses dalgalarının frekansına eşit olacak şekilde kare dalgalara dönüştürecektir. Böylece kare dalganın frekansını ölçerek, atmosferdeki ses sinyallerinin frekansını bulabiliriz. İşlerin olması gerektiği gibi çalıştığından emin olmak için, aşağıdaki videoda gösterildiği gibi çıkış sinyalini incelemek için ses sensörünü skopuma bağladım.
Frekansı ölçmek için kapsamımdaki ölçüm modunu açtım ve bilinen frekansta ses sinyalleri üretmek için Play Store'dan bir Android uygulaması (Frekans Ses Üreticisi) kullandım. Yukarıdaki GID'de görebileceğiniz gibi, kapsam ses sinyallerini oldukça iyi bir doğrulukla ölçebildi, kapsamda görüntülenen frekansın değeri telefonumda gösterilene çok yakın. Şimdi, modülün çalıştığını bildiğimize göre, Ses sensörünü Arduino ile arayüzlemeye devam edelim .
Düdük Dedektörü Arduino Devre Şeması
Ses Sensörünü kullanan Arduino Düdük Dedektör Anahtarı devresinin tam devre şeması aşağıda gösterilmektedir. Devre, Fritzing yazılımı kullanılarak çizildi.
Ses sensörü ve Röle modülü, Arduino'nun 5V pininden güç alır. Ses sensörünün çıkış pini Arduino'nun 8 numaralı dijital pimine bağlıdır, bunun nedeni bu pinin timer özelliğinden kaynaklanmaktadır ve bu konuda daha fazlasını programlama bölümünde tartışacağız. Röle modülü, yine UNO kartındaki yerleşik LED'e bağlı olan pim 13 tarafından tetiklenir.
AC besleme tarafında, faz, AC yükü (ampul) aracılığıyla rölenin Normalde Açık (NO) pinine bağlıyken, nötr teli doğrudan Röle modülünün Ortak (C) pimine bağlanır. Bu şekilde röle tetiklendiğinde NO pini C pini ile bağlanacak ve böylece ampul yanacaktır. Aksi takdirde blub kapalı kalacaktır. Bağlantılar yapıldıktan sonra, donanımım böyle bir şeye benziyordu.
Uyarı: AC devresiyle çalışmak tehlikeli olabilir, canlı kablolarla çalışırken dikkatli olun ve kısa devrelerden kaçının. Elektronik konusunda deneyimli olmayan kişiler için bir devre kesici veya yetişkin gözetimi önerilir. Uyarıldın!!
Arduino ile Frekans Ölçümü
Gelen kare dalgaların frekansını okuyan kapsamımıza benzer şekilde, frekansı hesaplamak için Arduino'yu programlamamız gerekir. Bunun nasıl yapılacağını Frekans Sayacı eğitimimizde darbe işlevini kullanarak öğrenmiştik. Ancak bu eğitimde, doğru sonuçlar elde etmek için frekansı ölçmek için Freqmeasure kitaplığını kullanacağız. Bu kütüphane, bir darbenin ne kadar süre AÇIK kaldığını ölçmek için pim 8'deki dahili zamanlayıcı kesintisini kullanır. Zaman ölçüldüğünde, F = 1 / T formülünü kullanarak frekansı hesaplayabiliriz. Ancak, kütüphaneyi doğrudan kullandığımız için, frekansın nasıl ölçüldüğüne dair kayıt detaylarına ve matematiğine girmemize gerek yoktur. Kitaplık aşağıdaki bağlantıdan indirilebilir:
- Pjrc tarafından Frekans Ölçüm Kitaplığı
Yukarıdaki bağlantı bir zip dosyası indirecektir, daha sonra bu zip dosyasını Sketch -> Include Library ->.ZIP Kitaplığı Ekle yolunu izleyerek Arduino IDE'nize ekleyebilirsiniz.
Not: Kitaplığı kullanmak,zamanlayıcı bu kitaplık tarafından meşgul olacağından, UNO'daki 9 ve 10 numaralı pinlerdeki analogWrite işlevinidevre dışı bırakacaktır. Ayrıca diğer kartlar kullanılırsa bu pinler değişecektir.
Whistle'ı algılamak için Arduino'nuzu programlama
Bir Gösteri Video ile komple bir program bu sayfanın alt kısmında bulunabilir. Bu başlıkta programı küçük parçalara bölerek anlatacağım.
Her zaman olduğu gibi programa gerekli kitaplıkları ekleyerek ve gerekli değişkenleri bildirerek başlıyoruz. FreqMeasure.h kitaplığını yukarıdaki başlıkta açıklandığı gibi eklediğinizden emin olun. Değişken durum LED'in durumunu temsil eder ve değişken frekans ve süreklilik, sırasıyla ölçülen frekansı ve sürekliliğini çıkarmak için kullanılır.
#Dahil etmek
İçinde boşluk kurulum fonksiyonu, biz ayıklama için 9600 baud hızında seri monitörü başlar. Ardından frekansı ölçmek için 8 numaralı pini başlatmak üzere FreqMeasure.begin () işlevini kullanın. Ayrıca pin 13'ün (LED_BUILTIN) çıktı olduğunu beyan ederiz.
geçersiz kurulum () { Serial.begin (9600); FreqMeasure.begin (); // Varsayılan olarak pin 8'deki ölçümler pinMode (LED_BUILTIN, OUTPUT); }
Sonsuz döngünün içinde , FreqMeasure.available () işlevini kullanarak 8. pini dinlemeye devam ederiz. Gelen bir sinyal varsa, frekansı FreqMeasure.read () kullanarak ölçeriz. Gürültü kaynaklı hatalardan kaçınmak için 100 örnek ölçtük ve bunun ortalamasını aldık. Aynısını yapmak için kod aşağıda gösterilmiştir.
if (FreqMeasure.available ()) { // birkaç okumanın ortalamasını birlikte toplam = sum + FreqMeasure.read (); sayım = sayım + 1; eğer (sayım> 100) { sıklık = FreqMeasure.countToFrequency (toplam / sayım); Serial.println (frekans); toplam = 0; sayım = 0; } }
Düdük frekansınızın değerini kontrol etmek için burada Serial.println () işlevini kullanabilirsiniz. Benim durumumda alınan değer 1800Hz ile 2000Hz arasındaydı. Çoğu insanın ıslık frekansı bu belirli aralıkta olacaktır. Ancak müzik veya ses gibi diğer sesler bile bu frekansın altına düşebilir, bu yüzden onları ayırt etmek için sürekliliği izleyeceğiz. Frekans 3 kez sürekli ise ıslık sesi olduğunu onaylarız. Dolayısıyla, frekans 1800 ile 2000 arasındaysa, süreklilik adı verilen değişkeni artırırız.
eğer (frekans> 1800 && frekans <2000) {devamlılık ++; Seri.print ("Süreklilik ->"); Serial.println (süreklilik); frekans = 0;}
Süreklilik değeri üçe ulaşırsa veya bu değeri aşarsa, durum adı verilen değişkeni değiştirerek LED'in durumunu değiştiririz. Durum zaten doğruysa, onu yanlış olarak değiştiririz ve bunun tersi de geçerlidir.
eğer (süreklilik> = 3 && durum == yanlış) {durum = doğru; süreklilik = 0; Serial.println ("Işık AÇIK"); gecikme (1000);} if (süreklilik> = 3 && durum == doğru) {durum = yanlış; süreklilik = 0; Serial.println ("Işık KAPALI"); gecikme (1000);}
Arduino Düdük Dedektörü Çalışıyor
Kod ve donanım hazır olduğunda onu test etmeye başlayabiliriz. Bağlantıların doğru olduğundan emin olun ve modülü açın. Seri monitörü açın ve ıslık çalmaya başlayın, süreklilik değerinin arttığını ve sonunda Lambayı açıp kapattığını fark edebilirsiniz. Seri monitörümün örnek bir anlık görüntüsü aşağıda gösterilmektedir.
Seri monitör Işık açık dediğinde, pim 13 yükseltilecek ve Lambayı açmak için röle tetiklenecektir. Benzer şekilde, seri monitör Işık kapatıldı dediğinde de lamba kapanacaktır . Çalışmayı test ettikten sonra, 12V adaptör kullanarak kurulumu çalıştırabilir ve ıslık kullanarak AC Ev Aletinizi kontrol etmeye başlayabilirsiniz.
Bu projenin komple çalışma videosu bulunabilir aşağıda bağlantısı. Umarım öğreticiyi anladınız ve yeni bir şeyler öğrenmekten keyif aldınız. İşlerin yürümesi konusunda herhangi bir sorununuz varsa, bunları yorum bölümüne bırakın veya diğer teknik sorularınız için forumumuzu kullanın.