İçindekiler:

1 Pin Kullanarak DIP Ayar Seçici: 4 Adım
1 Pin Kullanarak DIP Ayar Seçici: 4 Adım

Video: 1 Pin Kullanarak DIP Ayar Seçici: 4 Adım

Video: 1 Pin Kullanarak DIP Ayar Seçici: 4 Adım
Video: Ünal turan Azad yılmaz Karşıma çıkın dedi 2024, Temmuz
Anonim
1 Pin Kullanarak DIP Ayar Seçici
1 Pin Kullanarak DIP Ayar Seçici

Bir süre önce 10 farklı melodi parçası arasından seçim yapmam gereken bir "müzik kutusu" projesinde çalıştım. Belirli bir melodiyi seçmek için doğal bir seçim 4 pinli dip anahtarıydı çünkü 4 anahtar 24=16 farklı ayar. Ancak, bu yaklaşım için kaba kuvvet uygulaması, her bir anahtar için bir tane olmak üzere 4 cihaz pini gerektirir. ATtiny85'i geliştirme için kullanmayı planladığım için 4 pin kaybı biraz fazla oldu. Neyse ki, birden fazla anahtar girişini işlemek için 1 analog pin kullanmanın dahiyane bir yöntemini açıklayan bir makaleyle karşılaştım.

Çoklu anahtar; 1-giriş tekniği, olası 16 anahtar ayarı kombinasyonunun her biri için benzersiz bir tamsayı değeri sağlamak üzere bir Gerilim Bölücü devresi kullanır. Bu 16 tamsayı tanımlayıcısı daha sonra uygulama programında bir eylemi bir ayarla ilişkilendirmek için kullanılır.

Bu talimat, müzik kutusu uygulaması için melodi seçimini uygulamak için çoklu anahtar yöntemini kullanır. Seçilen melodi daha sonra Arduino ton işlevi kullanılarak bir piezo buzzer aracılığıyla çalınır.

Adım 1: Gerekli Donanım

Gerekli Donanım
Gerekli Donanım

UNO'nun uygulama platformu olarak kullanılması, gerekli donanım bileşenlerinin sayısını en aza indirir. Çoklu anahtar giriş yönteminin uygulanması, yalnızca 4 pimli bir dip anahtar, voltaj bölücü için kullanılan 5 direnç ve bağlantılar için bağlantı kablosu gerektirir. Müzik kutusu melodi seçicisinin uygulanması için yapılandırmaya bir piezo buzzer eklenir. İsteğe bağlı olarak, kullanılan dip anahtarının tipine bağlı olarak, standart dip anahtarı pinleri doğrudan bir devre tahtasına takılmadan bir perfboard'a lehimlemek için yapılmış gibi göründüğünden, dip anahtarını devre tahtasına bağlamak için 2x4 8 pinli bir soket kullanmak faydalıdır. Soket, dip anahtarı bağlantılarını dengeler ve geçiş anahtarlarını ayarlarken anahtarın kolayca kaldırılmasını engeller.

İsim Olası Kaynak Nasıl Kullanılır
4 pinli dip anahtarı akort seçimi
2x4 pinli soket (Opsiyonel) Amazon Çoğu dip anahtarındaki direkler, anahtarı bir devre tahtasında çok iyi tutmaz. Bir soket, bağlantıyı daha sağlam hale getirmeye yardımcı olur. Bir alternatif, normal IC pinleriyle gerçekten devre tahtası kullanımı için yapılmış bir dip anahtarı bulmaktır.

dirençler:

  • 10K x2
  • 20K
  • 40K
  • 80K
Voltaj bölücü uygulayın
pasif piezo buzzer Amazon Arduino ton işlevi aracılığıyla uygulama tarafından sürülen melodiyi çalın

Adım 2: Çoklu Anahtar Yöntemi Açıklaması

Çoklu Anahtar Yöntem Açıklaması
Çoklu Anahtar Yöntem Açıklaması

Bu bölüm, çoklu anahtar yöntemi için temel kavramları tartışır ve olası 16 dip anahtarı ayar konfigürasyonunun her biri için benzersiz tanımlayıcıların bağımsız hesaplanması için gereken denklemleri geliştirir. Bu tanımlayıcılar daha sonra bir anahtar yapılandırmasını bir eylemle ilişkilendirmek için bir uygulama programında kullanılabilir. Örneğin, ayarın - 1'i açma, 2'yi kapatma, 3'ü kapatma, 4'ü kapatma (1, 0, 0, 0) - Amazing Grace'i çalmasını ve (0, 1, 0, 0)'ı çalmasını isteyebilirsiniz. Aslan Bu Gece Uyuyor. Kısa ve öz olması için, yapılandırma tanımlayıcılarına belgenin geri kalanında karşılaştırıcılar olarak atıfta bulunulur.

resim
resim

Çoklu anahtar yönteminin temel konsepti, bir giriş gerilimine bağlı 2 seri dirençten oluşan Gerilim Bölücü devresidir. Çıkış voltajı kablosu, dirençler arasında bağlanır, R1 ve R2, Yukarıda gösterildiği gibi. Bölücü çıkış voltajı, giriş voltajının direnç R oranı ile çarpımı olarak hesaplanır.2 R toplamına1 ve R2 (denklem 1). Bu oran her zaman 1'den küçüktür, bu nedenle çıkış voltajı her zaman giriş voltajından daha küçüktür.

Yukarıdaki tasarım şemasında belirtildiği gibi çoklu anahtar, R ile bir voltaj bölücü olarak yapılandırılmıştır.2 sabit ve R1 4 dip anahtar direnci için kompozit/eşdeğer dirence eşittir. R'nin değeri1 hangi dip anahtarlarının açık olduğuna bağlıdır ve bu nedenle kompozit dirence katkıda bulunur. Dip anahtar dirençleri paralel olduğundan, eşdeğer direnç hesaplama denklemi, bileşen dirençlerinin karşılıklıları cinsinden ifade edilir. Yapılandırmamız ve tüm anahtarların açık olması durumunda denklem şöyle olur:

1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

R vermek1 = 5333,33 volt. Çoğu ayarın anahtarlardan en az birinin kapalı olduğu gerçeğini hesaba katmak için anahtar durumu bir çarpan olarak kullanılır:

1/R1 = s1*1/80000 + sn2* 1/40000 + sn3*1/20000 + sn4*1/10000 (2)

durum çarpanı nerede, sben, anahtar açıksa 1'e, kapalıysa 0'a eşittir. r1 şimdi denklem 1'de ihtiyaç duyulan direnç oranını hesaplamak için kullanılabilir. Tüm anahtarların açık olduğu durumu tekrar örnek olarak kullanarak.

ORAN = R2/(R1+R2) = 10000/(5333.33+10000) =.6522

Öngörülen karşılaştırıcı değerinin hesaplanmasındaki son adım, analogRead işlevinin etkisini taklit etmek için RATIO'nun 1023 ile çarpılmasıdır. Tüm anahtarların açık olduğu durumun tanımlayıcısı o zaman

karşılaştırıcı15 = 1023*.6522 = 667

16 olası anahtar ayarı için tanımlayıcıların hesaplanması için tüm denklemler artık yerinde. Özetlemek:

  1. r1 denklem 2 kullanılarak hesaplanır
  2. r1 ve R2 ilişkili direnç ORANINI hesaplamak için kullanılır
  3. karşılaştırıcı değerini elde etmek için RATIO 1023 ile çarpılır
  4. isteğe bağlı olarak, öngörülen çıkış gerilimi RATIO*Vin olarak da hesaplanabilir.

Karşılaştırıcı seti, yalnızca gerilim bölücü için kullanılan direnç değerlerine bağlıdır ve konfigürasyon için benzersiz bir imzadır. Bölücü çıkış voltajları çalışmadan çalıştırmaya (ve okumak için okumak) dalgalanacağından, bu bağlamda benzersiz olmak, iki tanımlayıcı seti tam olarak aynı olmasa da, bileşen karşılaştırıcı farklılıklarının küçük bir ön değere düşmesine yetecek kadar yakın oldukları anlamına gelir. belirtilen aralık. Aralık boyutu parametresi, beklenen dalgalanmaları hesaba katacak kadar büyük, ancak farklı anahtar ayarlarının çakışmayacağı kadar küçük seçilmelidir. Genellikle 7, yarı genişlik aralığı için iyi çalışır.

Belirli bir konfigürasyon için bir dizi karşılaştırıcı birkaç yöntemle elde edilebilir - demo programını çalıştırın ve her bir ayar için değerleri kaydedin; hesaplamak için bir sonraki bölümdeki elektronik tabloyu kullanın; mevcut bir seti kopyalayın. Yukarıda belirtildiği gibi, tüm setler büyük olasılıkla biraz farklı olacaktır, ancak çalışması gerekir. Dirençlerden herhangi biri önemli ölçüde değiştirilirse veya daha fazla direnç eklenirse, çoklu anahtar kurulumu için yöntem yazarının tanımlayıcı setini ve bir sonraki bölümdeki elektronik tabloyu kullanmanızı öneririm.

Aşağıdaki demo programı, mevcut dip anahtarı ayarını tanımlamak için karşılaştırıcıların kullanımını gösterir. Her program döngüsünde, mevcut konfigürasyon için bir tanımlayıcı elde etmek için bir analogRead gerçekleştirilir. Bu tanımlayıcı daha sonra bir eşleşme bulunana veya liste tükenene kadar karşılaştırıcı listesinde karşılaştırılır. Bir eşleşme bulunursa, doğrulama için bir çıktı mesajı verilir; bulunamazsa bir uyarı verilir. Seri çıkış penceresinin mesajlarla boğulmaması ve dip anahtarı yapılandırmasını sıfırlamak için biraz zaman vermesi için döngüye 3 saniyelik bir gecikme eklenir.

//-------------------------------------------------------------------------------------

// Voltaj bölücü çıkışını okumak ve bunu, her olası ayar için bir dizi karşılaştırma // karşılaştırma değerleri dizisinde çıkış değerine bakarak // mevcut dip anahtarı konfigürasyonunu tanımlamak için kullanmak için demo programı. Arama dizisindeki değerler, konfigürasyon için bir önceki çalıştırmadan // veya temel denklemlere dayalı hesaplama yoluyla // elde edilebilir. //------------------------------------------------ -------------------------------------- int karşılaştırıcı[16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // İşlem değişkenlerini tanımlayın int dipPin = A0; // voltaj bölücü girişi için analog pin int dipIn = 0; // analogRead int count = 0; // döngü sayacı int epsilon = 7; // karşılaştırma aralığı yarı genişlik bool dipFound = false; // arama tablosunda mevcut voltaj bölücü çıkışı bulunursa true. void setup() { pinMode(dipPin, INPUT); // voltaj bölücü pinini INPUT Serial.begin(9600) olarak yapılandırın; // seri iletişimi etkinleştir } void loop() { delay(3000); // çıktının çok hızlı kaymasını önle // Arama parametrelerini başlat count = 0; dipFound = yanlış; // Akım çıkış voltajını okuyun ve belgeleyin dipIn = analogRead(dipPin); Serial.print("bölücü çıktısı"); Serial.print(dipIn); // Geçerli değer için karşılaştırma listesi ara while((count < 16) && (!dipFound)) { if(abs(dipIn - comparator[count]) <= epsilon) { // bulundu dipFound = true; Serial.print("girişte bulundu"); Seri.baskı(sayım); Serial.println(" değer " + String(karşılaştırıcı[sayı])); kırmak; } say++; } if(!dipFound) { // değer tabloda yok; olmamalıydı Serial.println(" OOPS! Bulunamadı; Ghost Busters'ı çağırsanız iyi olur"); } }

3. Adım: Karşılaştırıcı Elektronik Tablosu

resim
resim

16 karşılaştırıcı değeri için hesaplamalar yukarıda gösterilen elektronik tabloda verilmiştir. Ekli excel dosyası bu bölümün altında indirilebilir.

A-D elektronik tablo sütunları, dip anahtarı direnç değerlerini ve olası 16 anahtar ayarını kaydeder. Lütfen, fritzing tasarım şemasında gösterilen donanım DIP anahtarının, elektronik tabloda gösterilen sağdan sola numaralandırma yerine soldan sağa numaralandırıldığını unutmayın. Bunu biraz kafa karıştırıcı buldum ama alternatif "1" konfigürasyonunu (0, 0, 0, 1) listenin ilk sırasına koymuyor. Sütun E, Gerilim Bölücü eşdeğer direnci R'yi hesaplamak için önceki bölümün formül 2'sini kullanır.1 ayar için. Sütun F, ilgili direnç RATIO'yu hesaplamak için bu sonucu kullanır ve son olarak, Sütun G, öngörülen karşılaştırma değerini elde etmek için RATIO'yu analogRead max değeri (1023) ile çarpar. Son 2 sütun, tahmin edilen ve gerçek değerler arasındaki farklarla birlikte bir demo programının çalıştırılmasından elde edilen gerçek değerleri içerir.

Önceki bölüm, direnç değerleri önemli ölçüde değiştirilirse veya daha fazla anahtar eklenirse, bu elektronik tablonun genişletilmesi de dahil olmak üzere bir dizi karşılaştırıcı değeri elde etmek için üç yöntemden bahsetti. Direnç değerlerindeki küçük farklılıkların nihai sonuçları önemli ölçüde etkilemediği görülmektedir (direnç spesifikasyonları örneğin %5'lik bir tolerans verdiğinden ve direnç nadiren belirtilen gerçek değerine eşit olduğundan iyidir).

4. Adım: Bir Müzik Çalın

Bir Müzik Çal
Bir Müzik Çal

Çoklu anahtar tekniğinin bir uygulamada nasıl kullanılabileceğini göstermek için, "Yöntem Açıklaması" bölümündeki karşılaştırma demo programı, müzik kutusu programı için melodi seçim işlemini uygulamak üzere değiştirilir. Güncellenen uygulama yapılandırması yukarıda gösterilmiştir. Donanıma eklenen tek şey, seçilen melodiyi çalmak için pasif bir piezo buzzer'dır. Yazılımdaki temel değişiklik, bir kez tanımlandıktan sonra buzzer ve Arduino ton rutini kullanılarak bir melodi çalmak için bir rutinin eklenmesidir.

Kullanılabilir ayar parçacıkları, gerekli destek yapılarının tanımıyla birlikte bir başlık dosyası olan Tunes.h'de bulunur. Her melodi, nota frekansını ve süresini içeren nota ile ilgili yapıların bir dizisi olarak tanımlanır. Nota frekansları ayrı bir başlık dosyası olan Pitches.h'de bulunur. Program ve başlık dosyaları bu bölümün sonunda indirilebilir. Her üç dosya da aynı dizine yerleştirilmelidir.

Seçim ve tanımlama şu şekilde ilerler:

  1. "Kullanıcı", istenen ayar ile ilişkili konfigürasyonda dip anahtarlarını ayarlar
  2. her program döngüsü döngüsünde, mevcut dip anahtarı ayarı için tanımlayıcı analogRead aracılığıyla elde edilir
  3. 2. adım konfigürasyon tanımlayıcısı, mevcut ayar listesindeki karşılaştırıcıların her biri ile karşılaştırılır.
  4. Bir eşleşme bulunursa, melodi nota listesine erişmek için gereken bilgilerle playTune rutini çağrılır.

    Arduino ton işlevini kullanarak her nota buzzer aracılığıyla çalınır

  5. Eşleşme bulunamazsa herhangi bir işlem yapılmaz
  6. 1-5 tekrarla

Mevcut melodiler için DIP switch ayarları aşağıdaki tabloda gösterilmektedir; burada 1, anahtarın açık, 0'ın kapalı olduğu anlamına gelir. Dip anahtarın yönlendirilme şeklinin, anahtar 1'i en soldaki konuma (80K dirençle ilişkili olan) yerleştirdiğini hatırlayın.

İSİM Anahtar 1 Anahtar 2 Anahtar 3 Anahtar 4
danny çocuk 1 0 0 0
Küçük ayı 0 1 0 0
Aslan Bu Gece Uyuyor 1 1 0 0
Sorunu Kimse Bilmiyor 0 0 1 0
Amazing Grace 0 0 0 1
Boşluk 1 0 0 1
alaycı kuş tepesi 1 0 1 1

Piezo buzzer'dan gelen ses kalitesi kesinlikle harika değil ama en azından tanınabilir. Aslında tonlar ölçülürse, notaların kesin frekansına çok yakındır. Programda kullanılan ilginç bir teknik de, melodi verilerini PROGMEM yönergesi kullanılarak varsayılan veri belleği bölümü yerine flash/program belleği bölümünde saklamaktır. Veri bölümü, program işleme değişkenlerini tutar ve çok daha küçüktür, bazı ATtiny mikro denetleyicileri için yaklaşık 512 bayttır.

Önerilen: