Mündəricat:

1 Pin istifadə edərək DIP Ayar Seçicisi: 4 addım
1 Pin istifadə edərək DIP Ayar Seçicisi: 4 addım

Video: 1 Pin istifadə edərək DIP Ayar Seçicisi: 4 addım

Video: 1 Pin istifadə edərək DIP Ayar Seçicisi: 4 addım
Video: Arduino Dərs 1 . Arduino nədir "setup","loop","pinMode","digitalWrite" əmrləri 2024, Iyul
Anonim
1 Pin istifadə edərək DIP Tune Seçicisi
1 Pin istifadə edərək DIP Tune Seçicisi

Bir müddət əvvəl 10 fərqli melodiya parçasından birini seçmək lazım olan "musiqi qutusu" layihəsi üzərində çalışdım. Xüsusi bir melodiyanın seçilməsi üçün təbii bir seçim, 4 açar 2 təmin etdiyi üçün 4 pinli daldırma açarı idi4= 16 fərqli parametr. Bununla birlikdə, bu yanaşma üçün kobud güc tətbiq etmək üçün hər bir keçid üçün bir ədəd 4 cihaz sancağı lazımdır. İnkişaf üçün ATtiny85 -dən istifadə etməyi planlaşdırdığım üçün 4 sancağın itirilməsi bir az çox idi. Xoşbəxtlikdən, birdən çox keçid girişini idarə etmək üçün 1 analog pin istifadə etmək üçün usta bir metodu təsvir edən bir məqalə ilə qarşılaşdım.

Çox keçid; 1 giriş texnikası, 16 mümkün keçid tənzimləmə birləşməsinin hər biri üçün unikal bir tam dəyər təmin etmək üçün bir Gərginlik Bölücü sxemindən istifadə edir. Bu 16 tam ədəd identifikatoru, daha sonra bir hərəkəti bir parametrlə əlaqələndirmək üçün tətbiq proqramında istifadə olunur.

Bu təlimat, musiqi qutusu tətbiqi üçün tune seçimini həyata keçirmək üçün çoxlu keçid metodundan istifadə edir. Seçilmiş melodiya daha sonra Arduino ton funksiyasından istifadə edərək piezo səs siqnalı ilə çalınır.

Addım 1: Tələb olunan Avadanlıq

Lazımi Avadanlıq
Lazımi Avadanlıq

UNO -nun tətbiq platforması olaraq istifadə edilməsi, lazımi hardware komponentlərinin sayını minimuma endirir. Çox keçidli giriş metodunun tətbiqi üçün yalnız 4 pinli bir keçid açarı, gərginlik bölücü üçün istifadə olunan 5 müqavimət və əlaqələr üçün bağlama teli lazımdır. Musiqi qutusu tune seçicisinin tətbiqi üçün konfiqurasiyaya piezo buzzer əlavə olunur. İsteğe bağlı olaraq, istifadə olunan daldırma açarının növündən asılı olaraq, standart daldırma açarı pinləri bir çörək taxtasına birbaşa bağlanmayan bir taxtaya lehimləmə üçün edildiyi üçün daldırma açarını çörək taxtasına bağlamaq üçün 2x4 8 pinli bir yuvadan istifadə etmək faydalıdır. Soket, sürüşmə açarlarının əlaqələrini sabitləşdirir və keçid açarlarını təyin edərkən açarın asanlıqla qaldırılmasının qarşısını alır.

Adı Mümkün Mənbə Necə istifadə olunur
4 pinli açar Seçimi tənzimləyin
2x4 pinli yuva (İsteğe bağlı) Amazon Əksər daldırma açarlarının yazıları, çörək taxtasında açarı çox yaxşı tutmur. Bir yuva bağlantının daha möhkəm olmasına kömək edir. Alternativ olaraq, adi IC pinləri ilə çörək taxtası üçün həqiqətən hazırlanmış bir daldırma açarı tapmaqdır.

rezistorlar:

  • 10K x2
  • 20K
  • 40K
  • 80K
Gərginlik bölücü tətbiq edin
passiv piezo siqnalı Amazon Arduino ton funksiyası ilə tətbiqin idarə etdiyi melodiyanı çalın

Addım 2: Çox keçidli metodun izahı

Çox keçidli metodun izahı
Çox keçidli metodun izahı

Bu bölmədə çoxlu keçid metodu üçün əsas anlayışlar müzakirə olunur və 16 mümkün daldırma açarı konfiqurasiyası üçün unikal identifikatorların müstəqil hesablanması üçün lazım olan tənliklər hazırlanır. Bu identifikatorlar daha sonra bir keçid konfiqurasiyasını bir hərəkətlə əlaqələndirmək üçün bir tətbiq proqramında istifadə edilə bilər. Məsələn, ayarı istəyə bilərsiniz - 1 yandırın, 2 söndürün, 3 söndürün, 4 söndürün (1, 0, 0, 0) - Amazing Grace oynamaq və (0, 1, 0, 0) oynamaq Aslan bu gecə yatır. Qısa və qısa olması üçün konfiqurasiya identifikatorları sənədin qalan hissəsində müqayisə edənlər adlanır.

Şəkil
Şəkil

Çox keçid metodunun əsas konsepsiyası, giriş gərginliyinə bağlı 2 seriyalı rezistordan ibarət olan Gərginlik Bölücü sxemidir. Çıxış gərginliyi, rezistorlar arasında bağlanır, R1 və R.2, yuxarıda göstərildiyi kimi. Bölücü çıxış gərginliyi, giriş gərginliyi müqavimətçi R nisbətinə vurularaq hesablanır2 R cəminə qədər1 və R.2 (tənlik 1). Bu nisbət həmişə 1 -dən azdır, buna görə çıxış gərginliyi həmişə giriş gərginliyindən daha kiçikdir.

Yuxarıdakı dizayn diaqramında göstərildiyi kimi, çox keçid R ilə bir gərginlik bölücü olaraq qurulmuşdur2 sabit və R.1 4 daldırma keçid rezistoru üçün kompozit/ekvivalent müqavimətə bərabərdir. R -nin dəyəri1 hansı daldırma açarlarının açıldığından asılıdır və buna görə də kompozit müqavimətə kömək edir. Daldırma açarı rezistorları paralel olduğu üçün ekvivalent müqavimət hesablama tənliyi komponent müqavimətçilərinin qarşılıqlı nisbətləri ilə ifadə edilir. Konfiqurasiyamız və bütün açarların işə salınması halında, tənlik olur

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

verilməsi R.1 = 5333.33 volt. Əksər parametrlərdə açarlardan ən az birinin söndürüldüyünü nəzərə almaq üçün keçid vəziyyəti çarpan olaraq istifadə olunur:

1/R1 = s1*1/80000 + s2*1/40000 + s3*1/20000 + s4*1/10000 (2)

burada dövlət çarpan, si, açar açıldıqda 1 -ə, açar söndürüldükdə isə 0 -a bərabərdir. R1 indi tənlik 1 -də lazım olan müqavimət nisbətini hesablamaq üçün istifadə edilə bilər. Bütün açarların yenidən açıldığı vəziyyətin nümunəsi olaraq

ORAN = R2/(R.1+R2) = 10000/(5333.33+10000) =.6522

Proqnozlaşdırılan müqayisəli dəyərin hesablanmasında son addım analogRead funksiyasının təsirini təqlid etmək üçün ORANIN 1023 -ə vurulmasıdır. Bütün açarların açıldığı vəziyyətin identifikatoru o zaman olur

müqayisəçi15 = 1023*.6522 = 667

Bütün mümkün tənliklər, 16 mümkün keçid parametrləri üçün identifikatorların hesablanması üçün hazırdır. Xülasə etmək üçün:

  1. R1 2 tənliyi ilə hesablanır
  2. R1 və R.2 əlaqəli müqavimət əmsalını hesablamaq üçün istifadə olunur
  3. nisbət 1023 -ə vurularaq müqayisəli dəyər əldə edilir
  4. isteğe bağlı olaraq, proqnozlaşdırılan çıxış gərginliyi RATIO*Vin olaraq da hesablana bilər

Müqayisələr dəsti yalnız gərginlik bölücü üçün istifadə olunan müqavimət dəyərlərindən asılıdır və konfiqurasiya üçün unikal bir imzadır. Bölücünün çıxış gərginliyi qaçışdan qaçışa (və oxumaqdan oxumaq üçün) dalğalanacağından, bu kontekstdə özünəməxsusluğu, iki identifikator dəstinin tam olaraq eyni olmasa da, komponent müqayisəedici fərqlərin kiçik bir əvvəlki müəyyən edilmiş interval. Aralıq ölçüsü parametri, gözlənilən dalğalanmaları nəzərə alacaq qədər böyük seçilməlidir, lakin fərqli keçid parametrlərinin üst -üstə düşməyəcəyi qədər kiçik olmalıdır. Adətən 7, yarım genişlik aralığı üçün yaxşı işləyir.

Müəyyən bir konfiqurasiya üçün bir sıra müqayisə vasitələri bir neçə üsulla əldə edilə bilər - demo proqramını işə salın və hər parametr üçün dəyərləri qeyd edin; hesablamaq üçün növbəti hissədəki elektron tablodan istifadə edin; mövcud dəsti kopyalayın. Yuxarıda qeyd edildiyi kimi, bütün dəstlər çox güman ki, bir qədər fərqli olacaq, amma işləməlidir. Müqavimətçilərdən hər hansı biri əhəmiyyətli dərəcədə dəyişdirilərsə və ya daha çox rezistor əlavə olunarsa, çoxlu keçid qurğusu üçün metodun müəlliflər dəstini və növbəti hissədəki elektron tablodan istifadə etməyi təklif edirəm.

Aşağıdakı demo proqramı, cari daldırma açarını təyin etmək üçün müqayisələrdən istifadə etməyi göstərir. Hər bir proqram dövründə cari konfiqurasiya üçün identifikator əldə etmək üçün analogRead aparılır. Bu identifikator daha sonra uyğunluq tapılana və ya siyahı tükənənə qədər müqayisəçilər siyahısında müqayisə edilir. Bir uyğunluq aşkar edildikdə yoxlama üçün bir çıxış mesajı verilir; tapılmadıqda xəbərdarlıq edilir. Döngəyə 3 saniyəlik bir gecikmə daxil edilir ki, serial çıxış pəncərəsi mesajlarla sıxılmasın və daldırma açarı konfiqurasiyasını sıfırlamağa bir az vaxt versin.

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

// Demo proqramı, gərginlik bölücü çıxışını oxumaq və hər bir mümkün parametr üçün // müqayisə dəyərləri aralığına baxmaqla // cari daldırma açarı konfiqurasiyasını müəyyən etmək üçün istifadə edir. Axtarış dizisindəki dəyərlər // ya konfiqurasiya üçün əvvəlki işdən əldə edilə bilər, ya da əsas tənliklərə əsaslanaraq hesablama ilə //. // ------------------------------------------------ -------------------------------------- int müqayisəli [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // İşləmə dəyişənlərini təyin edin int dipPin = A0; // gərginlik bölücü girişi üçün analog pin int dipIn = 0; // analog tərəfindən tərcümə olunan bölücü gərginlik çıxışını saxlayırRead int count = 0; // loop sayğacı int epsilon = 7; // müqayisə aralığı yarım eni bool dipFound = false; // doğru cari gərginlik bölücü çıxışı cədvəlin boşluğunun qurulması () {pinMode (dipPin, INPUT); // gərginlik bölücü pinini INPUT Serial.begin (9600) kimi konfiqurasiya edin; // serial ünsiyyətini aktivləşdir} void loop () {delay (3000); // çıxışı çox sürətli sürüşdürməmək üçün saxlamaq // Axtarış parametrlərini saymaq = 0; dipFound = yanlış; // Cari çıxış gərginliyini oxuyun və sənədləşdirin dipIn = analogRead (dipPin); Serial.print ("bölücü çıxış"); Serial.print (dipIn); // Cari dəyər üçün müqayisəli siyahını axtarın ((say <16) && (! DipFound)) {if (abs (dipIn - müqayisəli [say]) <= epsilon) {// tapdı dipFound = doğru; Serial.print ("girişdə tapıldı"); Serial. çap (say); Serial.println ("dəyər" + String (müqayisəedici [say])); fasilə; } saymaq ++; } if (! dipFound) {// dəyəri cədvəldə deyil; olmamalıdır Serial.println ("OOPS! Tapılmadı; daha yaxşı Ghost Busters çağır"); }}

Addım 3: Müqayisəçi elektron cədvəli

Şəkil
Şəkil

16 müqayisəli dəyər üçün hesablamalar yuxarıda göstərilən cədvəldə verilmişdir. Müşayiət olunan excel faylı bu hissənin altında yüklənə bilər.

Elektron cədvəl A-D sütunları, keçid müqavimətinin dəyərlərini və 16 mümkün keçid parametrlərini qeyd edir. Diqqət yetirin dizayn diaqramında göstərilən hardware DIP açarı elektron tabloda göstərilən soldan sağa nömrələnmək əvəzinə soldan sağa nömrələnmişdir. Bunu bir az qarışıq hesab etdim, amma alternativ "1" konfiqurasiyasını (0, 0, 0, 1) siyahının birinci hissəsinə qoymur. Sütun E, Gerilim Bölücünün ekvivalent müqavimətini hesablamaq üçün əvvəlki hissənin 2 -ci formulundan istifadə edir1 ayarı üçün. F sütunu bu nəticəni əlaqəli müqavimət əmsalını hesablamaq üçün istifadə edir və nəhayət, G Sütunu, proqnozlaşdırılan müqayisəli dəyəri əldə etmək üçün əmsalını analogRead max dəyərinə (1023) vurur. Son 2 sütunda, bir demo proqramının gerçək dəyərləri, proqnozlaşdırılan və faktiki dəyərlər arasındakı fərqlər var.

Əvvəlki hissədə, müqavimət dəyərləri əhəmiyyətli dərəcədə dəyişdirilərsə və ya daha çox açar əlavə edilərsə, bu cədvəlin uzadılması da daxil olmaqla bir sıra müqayisə dəyərləri əldə etmək üçün üç üsuldan bəhs edilmişdir. Rezistor dəyərlərindəki kiçik fərqlərin son nəticələrə əhəmiyyətli dərəcədə təsir etmədiyi görünür (bu, yaxşıdır, çünki rezistorun spesifikasiyaları 5%dözümlülük verir və rezistor nadir hallarda faktiki göstərilən dəyərə bərabərdir).

Addım 4: Bir Mahnı Çalın

Bir Mahnı Çal
Bir Mahnı Çal

Bir tətbiqdə çox keçidli texnikanın necə istifadə oluna biləcəyini göstərmək üçün "Metodun izahı" bölməsindəki müqayisə demo proqramı, musiqi qutusu proqramı üçün melodiyaların seçilməsi prosesini həyata keçirmək üçün dəyişdirilir. Yenilənmiş tətbiq konfiqurasiyası yuxarıda göstərilmişdir. Cihazın yeganə əlavəsi seçilmiş melodiyanı səsləndirmək üçün passiv bir piezo səs siqnalıdır. Proqramın əsas dəyişikliyi, səs siqnalı və Arduino ton rutini istifadə edərək müəyyən edildikdən sonra bir melodiyanın ifa edilməsi qaydasının əlavə edilməsidir.

Mövcud tune parçaları, Tunes.h başlıq faylında, lazımi dəstək strukturlarının tərifi ilə birlikdə mövcuddur. Hər bir melodiya notun tezliyi və müddətini ehtiva edən notlarla əlaqəli strukturların bir sıra kimi təyin olunur. Qeyd tezlikləri ayrı bir başlıq faylında, Pitch.h -də var. Proqram və başlıq faylları bu hissənin sonunda yüklənə bilər. Hər üç fayl eyni qovluğa yerləşdirilməlidir.

Seçim və eyniləşdirmə aşağıdakı qaydada aparılır:

  1. "İstifadəçi", istədiyiniz melodiya ilə əlaqəli konfiqurasiyada daldırma açarlarını təyin edir
  2. hər bir proqram dövrü dövrü, mövcud daldırma açarı ayarı üçün identifikator analogRead vasitəsilə əldə edilir
  3. Addım 2 konfiqurasiya identifikatoru mövcud tune siyahısındakı hər müqayisəçiyə qarşı müqayisə edilir
  4. Bir uyğunluq tapılarsa, tune not siyahısına daxil olmaq üçün lazım olan məlumatlarla playTune proqramı çağırılır

    Arduino ton funksiyasından istifadə edərək, hər bir səs siqnalı ilə çalınır

  5. Heç bir uyğunluq tapılmazsa, heç bir tədbir görülmür
  6. 1-5 təkrarlayın

Mövcud melodiyalar üçün DIP keçid parametrləri 1 cədvəlin açıldığı, 0 söndüyünə görə aşağıdakı cədvəldə göstərilmişdir. Xatırladaq ki, daldırma açarının istiqamətləndirmə tərzi 1 düyməsini ən sol mövqedə yerləşdirir (80K rezistorla əlaqəli).

ADI Keçid 1 Keçid 2 Keçid 3 Keçid 4
Danny Boy 1 0 0 0
Balaca ayı 0 1 0 0
Aslan bu gecə yatır 1 1 0 0
Çətinliyi heç kim bilmir 0 0 1 0
İnanılmaz Grace 0 0 0 1
Boş Boşluq 1 0 0 1
MockingBird Hill 1 0 1 1

Bir piezo buzzerin səs keyfiyyəti əlbəttə ki, əla deyil, amma ən azından tanınır. Əslində tonlar ölçülürsə, qeydlərin dəqiq tezliyinə çox yaxındır. Proqramda istifadə olunan maraqlı bir üsul, PROGMEM direktivini istifadə edərək, məlumatları standart məlumat yaddaşı bölməsi yerinə flash/proqram yaddaşı bölməsində saxlamaqdır. Məlumat bölməsi proqram işləmə dəyişənlərini saxlayır və ATtiny mikrokontrolörlərindən bəziləri üçün təxminən 512 baytdır.

Tövsiyə: