Мазмұны:

1 түйреуішті қолдана отырып DIP баптау таңдаушысы: 4 қадам
1 түйреуішті қолдана отырып DIP баптау таңдаушысы: 4 қадам
Anonim
1 түйреуішті қолданып DIP реттеушісі
1 түйреуішті қолданып DIP реттеушісі

Біраз уақыт бұрын мен «музыкалық қорап» жобасында жұмыс істедім, оған 10 -ға жуық әр түрлі күй үзінділерінің бірін таңдау қажет болды. Белгілі бір әуенді таңдау үшін табиғи таңдау 4 істікшелі сөндіргіш болды, себебі 4 қосқыш 2 береді4= 16 түрлі параметрлер. Алайда, бұл әдіске қатал күш енгізу үшін әр қосқыш үшін бір құрылғы түйреуіші қажет. Мен ATtiny85 -ті дамыту үшін қолдануды жоспарлағандықтан, 4 түйреуіштің жоғалуы тым көп болды. Бақытымызға орай, мен бірнеше қосқышты енгізуді басқару үшін 1 аналогты түйреуішті қолданудың керемет әдісін сипаттайтын мақалаға тап болдым.

Мульти-коммутатор; 1-енгізу техникасы кернеуді бөлу схемасын қолданады, 16 мүмкін болатын коммутатордың комбинациясының әрқайсысы үшін бірегей бүтін мәнді қамтамасыз етеді. Бұл 16 бүтін сандар идентификаторларының жиынтығы, содан кейін қолданбалы бағдарламада әрекетті параметрмен байланыстыру үшін қолданылады.

Бұл нұсқаулықта музыкалық қорапшаға әуенді таңдауды жүзеге асыру үшін көп ауысу әдісі қолданылады. Таңдалған әуен содан кейін Arduino тонусының көмегімен пьезо -зуммер арқылы ойнатылады.

1 -қадам: Қажетті жабдық

Қажетті жабдық
Қажетті жабдық

БҰҰ -ны іске асыру платформасы ретінде қолдану аппараттық құралдардың қажетті компоненттерінің санын азайтады. Көп ауыспалы енгізу әдісін енгізу үшін тек 4 істікшелі сөндіру қосқышы, кернеуді бөлу үшін қолданылатын 5 резистор және қосылулар үшін қосқыш сым қажет. Музыкалық қорапты реттеу селекторын енгізу үшін конфигурацияға пьезо -дыбыстық сигнал қосылады. Қажет болса, сөндіру қосқышының түріне байланысты, 2х4 8 істікшелі розетканы тақтаға жалғау пайдалы, себебі стандартты сөндіргіш түйреуіштер тақтаға тікелей қосылмайтын перформаторға дәнекерлеу үшін жасалған сияқты. Розетка сөндіргіш қосқыштарын тұрақтандырады және қосқыштарды орнатқанда қосқыштың оңай көтерілуін болдырмайды.

Аты Мүмкін дереккөз Қалай қолданылады
4 істікшелі сөндіргіш Таңдауды реттеу
2x4 істікшелі розетка (міндетті емес) Амазонка Көптеген сөндіргіштердің тіректері коммутаторды тақтада жақсы ұстамайды. Розетка байланыстың берік болуына көмектеседі. Балама - бұл тұрақты IC түйреуіштері бар тақтаны пайдалану үшін шынымен жасалған сөндіргішті табу.

резисторлар:

  • 10K x2
  • 20K
  • 40K
  • 80K
Кернеу бөлгішті іске қосыңыз
пассивті пьезо дыбысы Амазонка Ардуино үні функциясы арқылы қосымшаның көмегімен әуенді ойнаңыз

2-қадам: Көп ауыспалы әдістерді түсіндіру

Көп ауыспалы әдістерді түсіндіру
Көп ауыспалы әдістерді түсіндіру

Бұл бөлімде мульти-коммутатор әдісінің негізгі тұжырымдамалары талқыланады және 16 ықтимал аудару қондырғысы конфигурациясының әрқайсысы үшін бірегей идентификаторларды дербес есептеу үшін қажетті теңдеулер әзірленеді. Бұл идентификаторларды коммутатор конфигурациясын әрекетпен байланыстыру үшін қолданбалы бағдарламада қолдануға болады. Мысалы, сізге параметрді қосу қажет: 1 қосу, 2 өшіру, 3 өшіру, 4 өшіру (1, 0, 0, 0) - Amazing Grace ойнау үшін және (0, 1, 0, 0) ойнау үшін Арыстан бүгін түнде ұйықтайды. Қысқаша және қысқа болу үшін конфигурация идентификаторлары құжаттың қалған бөлігінде салыстырушы деп аталады.

Кескін
Кескін

Мульти-коммутатор әдісінің негізгі тұжырымдамасы кіріс кернеуіне қосылған 2 сериялы резисторлардан тұратын кернеуді бөлу схемасы болып табылады. Шығу кернеуінің сымы резисторлар арасында қосылған, R1 және Р2, жоғарыда көрсетілгендей. Бөлгіштің шығыс кернеуі кіріс кернеуі R резисторының қатынасына көбейтіндісі ретінде есептеледі2 R сомасына1 және Р2 (теңдеу 1). Бұл коэффициент әрқашан 1 -ден төмен, сондықтан шығыс кернеуі әрқашан кіріс кернеуінен аз болады.

Жоғарыдағы дизайн диаграммасында көрсетілгендей, мульти-коммутатор R кернеу бөлгіш ретінде конфигурацияланған2 бекітілген және Р1 4 ауыспалы резисторлар үшін композиттік/эквивалентті қарсылыққа тең. R мәні1 қай сөндіру қосқыштары қосылғанына байланысты, демек композициялық қарсылыққа ықпал етеді. Қысқыш қосқыш резисторлары параллель болғандықтан, эквивалентті қарсылықты есептеу теңдеуі компонентті резисторлардың өзара қатынасы бойынша айтылады. Біздің конфигурация үшін және барлық қосқыштар қосылған жағдайда теңдеу болады

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

беру Р1 = 5333,33 вольт. Көптеген параметрлерде кем дегенде бір ажыратқыш өшірілгенін ескеру үшін қосқыш күйі мультипликатор ретінде қолданылады:

1/R1 = с1*1/80000 + с2*1/40000 + с3*1/20000 + с4*1/10000 (2)

онда мемлекет мультипликаторы, смен, қосқыш қосылса 1 -ге тең, ал сөндірулі болса 0 -ге тең. R1 Енді 1 -теңдеуде қажет қарсылық коэффициентін есептеу үшін қолдануға болады. Барлық қосқыштар қайтадан қосылатын жағдайды мысал ретінде қолданыңыз

ҚАТЫНАСЫ = R2/(Р1+R2) = 10000/(5333.33+10000) =.6522

Болжамды компаратордың мәнін есептеудің соңғы қадамы analogRead функциясының әсеріне еліктеу үшін RATIO -ны 1023 -ке көбейту болып табылады. Барлық қосқыштар қосылған жағдайдың идентификаторы сол кезде болады

салыстырушы15 = 1023*.6522 = 667

Барлық теңдеулер коммутатордың 16 ықтимал параметрлері үшін идентификаторларды есептеуге арналған. Қорытындылау үшін:

  1. R1 2 -ші теңдеу арқылы есептеледі
  2. R1 және Р2 байланысты RATIO кедергісін есептеу үшін қолданылады
  3. салыстырмалы мәнді алу үшін ҚАТЫНЫ 1023 -ке көбейтіледі
  4. қосымша, болжамды шығыс кернеуін RATIO*Vin ретінде де есептеуге болады

Салыстырғыштар жиыны кернеу бөлгіш үшін қолданылатын резистор мәндеріне ғана тәуелді және конфигурация үшін бірегей қолтаңба болып табылады. Бөлгіштің шығыс кернеуі жүгіруден жүгіруге (және оқуға және оқуға) ауытқып тұратындықтан, бұл жағдайда бірегей болып табылады, бірақ идентификаторлардың екі жиынтығы дәл сәйкес келмесе де, олар салыстырмалы компоненттердің айырмашылығы шамалы алшақтықты құрайды. көрсетілген интервал. Интервал өлшемі параметрі күтілетін ауытқуларды есепке алатындай үлкен, бірақ әр түрлі қосқыш параметрлері бір -біріне сәйкес келмейтін етіп таңдалуы керек. Әдетте 7 интервал жартылай ені үшін жақсы жұмыс істейді.

Белгілі бір конфигурацияға арналған компараторлар жиынтығын бірнеше әдістермен алуға болады - демо бағдарламаны іске қосыңыз және әр параметрдің мәндерін жазыңыз; есептеу үшін келесі бөлімдегі электрондық кестені қолданыңыз; бар жиынтығын көшіру. Жоғарыда айтылғандай, барлық жиынтықтар сәл өзгеше болады, бірақ жұмыс істеуі керек. Мен резисторлардың кез келгені едәуір өзгерген немесе одан да көп резистор қосылған жағдайда, көп ауыспалы қондырғы үшін авторлық идентификаторлар жиынтығын және келесі бөлімдегі электрондық кестені пайдалануды ұсынамын.

Келесі демонстрациялық бағдарлама сөндіргіштің ағымдағы параметрін анықтау үшін компараторларды қолдануды көрсетеді. Әр бағдарлама циклінде ағымдағы конфигурацияның идентификаторын алу үшін analogRead орындалады. Бұл сәйкестендіргіш сәйкестік табылғанша немесе тізім таусылғанша салыстыру тізімінде салыстырылады. Егер сәйкестік табылса, тексеру үшін шығыс хабарламасы шығарылады; табылмаса, ескерту беріледі. Циклге 3 секундтық кідіріс енгізіледі, осылайша сериялық шығару терезесі хабарламалармен толып қалмауы үшін және сөндіргіштің конфигурациясын қалпына келтіруге біраз уақыт беру үшін.

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

// Демо бағдарламасы кернеуді бөлгіштің шығуын оқуға және оны мүмкін болатын әрбір параметр үшін // салыстыру мәндерінің жиегінен // шығыс мәнін іздеу арқылы // ағымдағы сөндіру қосқышының конфигурациясын анықтау үшін пайдалануға арналған. Іздеу массивіндегі мәндерді // конфигурацияның алдыңғы орындалуынан немесе негізгі теңдеулер негізінде есептеу // арқылы алуға болады. // ------------------------------------------------ -------------------------------------- int компараторы [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // өңделетін айнымалыларды анықтаңыз int dipPin = A0; // кернеуді бөлуге арналған аналогтық түйін int dipIn = 0; // analogRead арқылы бөлінген бөлгіш кернеудің шығуын ұстайды int count = 0; // цикл есептегіші int epsilon = 7; // салыстыру аралығы жартылай ені bool dipFound = false; // true, егер ағымдағы кернеуді бөлгіш шығыс табылған кезде табылса void setup () {pinMode (dipPin, INPUT); // кернеуді бөлу түйреуішін INPUT Serial.begin (9600) ретінде теңшеу; // сериялық байланысты қосу} void loop () {delay (3000); // шығуды тым жылдам айналдырудан сақтау // Іздеу параметрлерін инициализациялау count = 0; dipFound = жалған; // ағымдағы шығыс кернеуін оқу және құжаттау dipIn = analogRead (dipPin); Serial.print («бөлгіш шығысы»); Serial.print (dipIn); // ағымдағы мәнді анықтау үшін салыстыру тізімін іздеңіз ((санау <16) && (! DipFound)) {if (abs (dipIn - компаратор [санау]) <= epsilon) {// оны тапты dipFound = true; Serial.print («кіру кезінде табылған»); Serial.print (санау); Serial.println («мән» + Жол (салыстырғыш [санау])); үзіліс; } санау ++; } if (! dipFound) {// мән кестеде жоқ; болмауы керек Serial.println («OOPS! Табылмады; Ghost Busters -ке қоңырау шалған дұрыс»); }}

3 -қадам: Салыстырушы электрондық кесте

Кескін
Кескін

16 компаратор мәндері бойынша есептеулер жоғарыда көрсетілген электрондық кестеде берілген. Ілеспе Excel файлын осы бөлімнің төменгі жағында жүктеуге болады.

Электрондық кестенің A-D бағандары сөндіргіш резисторының мәндерін және мүмкін болатын 16 қосқыш параметрлерін жазады. Дизайн диаграммасында көрсетілген аппараттық DIP қосқышы электрондық кестеде көрсетілген оңнан солға нөмірлеудің орнына іс жүзінде солдан оңға қарай нөмірленгенін ескеріңіз. Мен мұны біршама шатастырдым, бірақ балама тізімнің бірінші бөлігінде «1» конфигурациясын (0, 0, 0, 1) қоймайды. Е бағанында кернеу бөлгіштің R эквивалентті кедергісін есептеу үшін алдыңғы бөлімнің 2 формуласы қолданылады1 параметр үшін. F бағаны осы нәтижені RATIO байланысты қарсылықты есептеу үшін пайдаланады, және, ақырында, G бағанасы болжамды салыстыру мәнін алу үшін RATIO -ны analogRead max мәніне (1023) көбейтеді. Соңғы 2 бағанда демонстрациялық бағдарламаның нақты мәндері мен болжамды және нақты мәндердің айырмашылығы бар.

Алдыңғы бөлімде егер резистор мәндері айтарлықтай өзгерсе немесе одан да көп қосқыштар қосылса, осы кестені кеңейтуді қоса, салыстыру мәндерінің жиынтығын алудың үш әдісі айтылды. Резистор мәндерінің шамалы айырмашылығы түпкілікті нәтижеге айтарлықтай әсер етпейтін сияқты (бұл жақсы, себебі резистордың сипаттамалары 5%рұқсат береді, ал резистор оның нақты көрсетілген мәніне сирек тең).

4 -қадам: әуенді ойнаңыз

Әуен ойнаңыз
Әуен ойнаңыз

Қолданбада мульти-коммутатордың қалай қолданылатынын көрсету үшін «Әдістемені түсіндіру» бөліміндегі салыстыру демонстрациялық бағдарламасы музыкалық қорапшаға арналған әуенді таңдауды өңдеу үшін өзгертілген. Қолданбаның жаңартылған конфигурациясы жоғарыда көрсетілген. Аппараттық құралға жалғыз қосымша - таңдалған әуенді ойнауға арналған пассивті пьезо -дыбыстық сигнал. Бағдарламалық жасақтаманың негізгі өзгерісі - дыбыстық сигнал мен Arduino ретін қолдана отырып, әуенді ойнату тәртібін қосу.

Қол жетімді күй үзінділері Tunes.h тақырыптық файлында, сонымен қатар қажетті қолдау құрылымдарын анықтаумен қамтылған. Әр әуен нотаның жиілігі мен ұзақтығын қамтитын нотамен байланысты құрылымдардың жиыны ретінде анықталады. Ескертпе жиіліктері жеке тақырып файлында, Pitch.h. Бағдарлама мен тақырып файлдары осы бөлімнің соңында жүктеуге болады. Барлық үш файл бір каталогта орналасуы керек.

Іріктеу мен сәйкестендіру келесі түрде өтеді:

  1. «Қолданушы» қалаған күйге байланысты конфигурацияда сөндіргіштерді орнатады
  2. әрбір цикл циклі analogRead арқылы ағымдағы сөндіру қосқышының параметрінің идентификаторын алады
  3. 2 -қадамның конфигурация идентификаторы қол жетімді баптау тізіміндегі әр компаратормен салыстырылады
  4. Егер сәйкестік табылса, playTune процедурасы күй жазбаларының тізіміне кіру үшін қажетті ақпаратпен шақырылады

    Arduino тонының функциясын қолдана отырып, әр нота зумер арқылы ойнатылады

  5. Егер сәйкестік табылмаса, ешқандай шара қолданылмайды
  6. 1-5 қайталаңыз

Қол жетімді әуендерге арналған DIP қосқышының параметрлері төмендегі кестеде көрсетілген, онда 1 қосқыш қосулы, 0 сөндірулі. Естеріңізге сала кетейік, сөндіру қосқышының бағыты 1 коммутаторды ең сол жаққа орналастырады (80К резистормен байланысты).

АТЫ Ауыстыру 1 2 -ге ауысыңыз 3 -ауысу Ауыстыру 4
Дэнни Бала 1 0 0 0
Кішкентай аю 0 1 0 0
Арыстан бүгін түнде ұйықтайды 1 1 0 0
Қиындықты ешкім білмейді 0 0 1 0
Не рақат 0 0 0 1
Бос кеңістік 1 0 0 1
MockingBird Hill 1 0 1 1

Пьезо -дыбыстық сигналдың дыбыс сапасы, әрине, керемет емес, бірақ ол кем дегенде танылады. Шын мәнінде, егер тондар өлшенсе, олар ноталардың дәл жиілігіне өте жақын. Бағдарламада қолданылатын бір қызықты әдіс - бұл PROGMEM директивасын қолдану арқылы әдепкі деректер жады бөлімінің орнына флэш/бағдарлама жады бөлімінде реттеу деректерін сақтау. Деректер бөлімі бағдарламаны өңдеудің айнымалыларын ұстайды және әлдеқайда кішірек, ATtiny микроконтроллерлерінің кейбіреулері үшін шамамен 512 байт.

Ұсынылған: