İçindekiler:

Arduino Kapı Zili: 4 Adım
Arduino Kapı Zili: 4 Adım

Video: Arduino Kapı Zili: 4 Adım

Video: Arduino Kapı Zili: 4 Adım
Video: Arduino RFID Otomatik Kapı (RC522 RFID Kullanımı) 2024, Temmuz
Anonim
Arduino Kapı Zili
Arduino Kapı Zili

Bugün sizlere Arduino ile kapı zili yapmayı göstereceğim. Bu kapı zili, bir şarkı kitaplığından rastgele bir melodi çalar. Kapı zilinizi özelleştirebilir ve daha fazla şarkı ekleyebilirsiniz. Yatak odanızın, sınıfınızın, ofisinizin ve hatta ön kapınızın dışına kurun!

Gereçler:

  • Arduino Uno (diğer türlerin çoğu yapacaktır)
  • Programlama için Arduino IDE'li bilgisayar
  • Arduino programlamak için USB-A - USB-B kablosu
  • ekmek tahtası
  • 4x atlama teli
  • Buton veya başka bir anahtar
  • 10 kOhm Direnç
  • Pasif buzzer (yani piezoelektrik hoparlör)
  • Kalıcı kurulum için:

    • Arduino'ya güç sağlamak için 9V DC Güç Kaynağı veya 9V pil
    • Kapının dışındaki kablo düğmesi için 2 adet uzun kablo

Adım 1: Donanım Kurulumu

Donanım Kurulumu
Donanım Kurulumu
Donanım Kurulumu
Donanım Kurulumu
Donanım Kurulumu
Donanım Kurulumu

İlk olarak, donanımı ayarlayacağız. Pasif buzzer (yani hoparlör) ile başlayacağız. Pasif buzzer'ın pozitif ucunu ("+" işareti ile gösterilir) Arduino'daki dijital pin 8'e bağlamak istiyoruz. Passize buzzerın diğer ucunu toprağa bağlayacağız.

Ardından, kapı zili için buton takacağız. Anahtar için 10 kOhm'luk bir harici açılan direnç kullanacağız, bu nedenle Arduino'ya girişte kayan voltaj veya kararsız durum yoktur. Arduino, pulldown direncini kullanarak, butona basılmadığında voltajı 0V ve butona basıldığında 5V olarak okur. Pullup veya pulldown dirençleri hakkında daha fazla bilgi için şu makaleyi okuyabilirsiniz:

Butonun bir tarafını 5V'a bağlayacağız. Basmalı düğmenin diğer tarafı, 10 kOhm'luk bir aşağı çekme direnci aracılığıyla toprağa bağlanacaktır. Unutmayın: butonlar dahili olarak yatay olarak bağlanır. Sadece basıldığında dikey olarak bağlanırlar. Bu makalede daha fazla bilgi verilmektedir:

Adım 2: Yazılım Kurulumu

Kodun tamamı ektedir. Aşağıda, kodun anlık görüntüleriyle birlikte işlevlerin her birinin açıklamaları bulunmaktadır.

kurmak:

setup() fonksiyonunda, butonumuz ve hoparlörümüz için dijital pinleri yapılandırmak istiyoruz. Pin 2'yi butonumuz için bir giriş olarak yapılandırmak istiyoruz ve pin 8'i hoparlörümüz için bir çıkış olarak yapılandırmak istiyoruz.

Ayrıca, biri kapı zilimizi çaldığında rastgele bir melodi seçmek için rastgele sayı üretecimizi "tohumlamak" istiyoruz. Rastgele sayı üretecimizi tohumlamak, ona rastgele bir girdi beslemek anlamına gelir. Rastgele sayı üretecimizi voltaj değeri ile analog giriş 0'a ekeceğiz. Bu girişe hiçbir şey bağlı olmadığından, rastgele sayı üretecimize birçok farklı değer sağlayan bu pin üzerinde "rastgele", dalgalı bir voltaj olacaktır. Bu, kapı zilimiz için farklı bir şarkı seçimi sırasına sahip olmamızı sağlar. Arduino random() işlevi hakkında daha fazla bilgi için buraya gidin:

#include "pitch.h"

#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8 /* set up function */ void setup() { // giriş/çıkış pinlerini etkinleştir pinMode(BUTTON_PIN, INPUT); pinMode(SPEAKER_PIN, OUTPUT); // farklı bir sıralama elde etmemiz için rastgele() işlevini tohumla randomSeed(analogRead(0)); }

döngü:

loop() fonksiyonumuzda, butona basılıp basılmadığını (dijital pin 2 yüksek) sürekli olarak kontrol edeceğiz. Pin yüksek ise 50 ms bekleyip yine yüksek olup olmadığını kontrol ediyoruz. Bu, düğmeye basılmasını ve dijital giriş pininde yanlış pozitife neden olan parazit gürültü olmamasını sağlar.

Düğmeye basıldığını onayladıktan sonra, bir switch ifadesi kullanarak 5 şarkıdan birini seçmek için rastgele sayı üretecimizi kullanırız. Bu şarkılar için veriler "songs.h" içinde saklanır ve perde bilgileri "pitchs.h" içinde saklanır. Bir şarkı seçtiğimizde bu bilgiyi play_song() fonksiyonuna aktarıyoruz.

/* ana while döngüsü işlevi */

void loop() { // butona basılıp basılmadığını kontrol et if (digitalRead(BUTTON_PIN) == HIGH) { // hala basılı olduğundan emin olmak için 50 ms geciktir // yanlış okumaları önler gecikme(50); if(digitalRead(BUTTON_PIN) == HIGH) { // rastgele bir şarkı seçin int song_choice = rastgele(5); // hangi şarkıyı çalacağını seç geçiş (song_choice) { case 0: play_song(haircutLength, haircut, haircutDurations, haircutTempo); kırmak; durum 1: play_song(marioLength, mario, marioDurations, marioTempo); kırmak; durum 2: play_song(miiLength, mii, miiDurations, miiTempo); kırmak; durum 3: play_song(hpLength, hp, hpDurations, hpTempo); kırmak; durum 4: play_song(alma Uzunluğu, beni al, beni Süreleri al, beniTempo al); kırmak; varsayılan: play_song(miiLength, mii, miiDurations, miiTempo); kırmak; } } } }

play_song:

play_song() 4 argüman alır: şarkıdaki notaların tamsayı sayısı, melodideki perdelerin tamsayı dizisi, sürenin tamsayı dizisi ve söz konusu şarkı için tamsayı temposu. Çalmak istediğiniz her şarkı için bunların her birini belirtmelisiniz. Arduino ton işlevlerinin nasıl kullanılacağı hakkında daha fazla bilgi için şu eğiticiye bakabilirsiniz: https://www.arduino.cc/en/Tutorial/ToneMelody. Noktalı notlar için bu öğreticinin üstüne bazı işlevler ekledim. Nota süresi dizisindeki bir değer negatifse, bu noktalı bir not olduğu anlamına gelir (uzunluk 1,5 kat daha fazladır).

/* şarkıyı çalar */

void play_song(int num_notes, int melodi, int notSüreler, int tempo) { // adım adım ilerleyin ve (int i=0; i 0) { süre = tempo / notSüreleri; } // negatif bir sayıysa, noktalı nota anlamına gelir // noktalı notalar için süreyi yarı yarıya artırır else if (noteDurations < 0) { süre = tempo / abs(noteDurations) * 1.5; } ton(SPEAKER_PIN, melodi, süre); // notları ayırt etmek için aralarında bir minimum süre ayarlayın. // notun süresi + %30 iyi çalışıyor gibi görünüyor: int duraklamaBetweenNotes = süre * 1.30; gecikme (duraklatBetweenNotes); // tonu çalmayı durdur: noTone(SPEAKER_PIN); } }

Songs.h örneği:

Aşağıda "songs.h" içindeki şarkılardan birinin bir örneği bulunmaktadır. Notlar, "pitchs.h" içinde tanımlanan makrolardır. Sayılar, hertz (Hz) cinsinden notaların frekanslarına karşılık gelir. Notaların süresi şu şekilde tanımlanır: 1 = tam nota, 2 = yarım nota, 4 = dörtlük nota, 8 = sekizlik nota, -4 = noktalı dörtlük nota, vb. Uzunluk, şarkıdaki toplam nota sayısıdır. Tempo, şarkının hızı için bir bölücüdür (daha yüksek bir sayı, daha yavaş bir tempo anlamına gelir). Beğendiğiniz bir tempo elde edene kadar bu sayı ile oynamanız gerekecek.

/* harry potter */

int hp = { NOTE_D4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_C5, NOTE_A4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_F4, NOTE_GS4, NOTE_D4 }; int hpDurations = { 4, -4, 8, 4, 2, 4, -2, -2, -4, 8, 4, 2, 4, 1 }; int hpLength = 14; int hpTempo = 1050;

3. Adım: Düzeltmeler

Daha fazla şarkı ekle! "songs.h" içinde gösterilen formatı takip edin ve yardım için öğreticiyi kullanın: https://www.arduino.cc/en/Tutorial/ToneMelody. Eklediğiniz her yeni şarkı için, switch ifadesine yeni bir durum eklemeyi ve random() işleviniz tarafından üretilebilecek maksimum sayıyı artırmayı unutmayın. Mutlu kodlama!

4. Adım: Daha Fazla Proje

Daha fazla proje için sayfalarımı ziyaret edin:

  • https://dargen.io/
  • https://github.com/mjdargen
  • https://www.instructables.com/member/mjdargen/

Önerilen: