Obsah:

Volič DIP ladenia pomocou 1 kolíka: 4 kroky
Volič DIP ladenia pomocou 1 kolíka: 4 kroky

Video: Volič DIP ladenia pomocou 1 kolíka: 4 kroky

Video: Volič DIP ladenia pomocou 1 kolíka: 4 kroky
Video: Jak Deepfake video pomocí DeepFaceLab - Kompletní průvodce | Vytvoření deepfake od A do Z 2024, Júl
Anonim
Volič DIP Tune pomocou 1 kolíka
Volič DIP Tune pomocou 1 kolíka

Pred časom som pracoval na projekte „music box“, ktorý si musel vybrať až z 10 rôznych úryvkov melódie. Prirodzenou voľbou na výber konkrétnej melódie bol 4 -kolíkový prepínač, pretože 4 prepínače poskytujú 24= 16 rôznych nastavení. Implementácia hrubej sily pre tento prístup však vyžaduje 4 kolíky zariadenia, jeden pre každý prepínač. Keďže som plánoval použiť ATtiny85 na vývoj, strata 4 pinov bola trochu príliš. Našťastie som narazil na článok, ktorý popisuje geniálnu metódu použitia 1 analógového kolíka na zvládnutie viacerých prepínacích vstupov.

Technika viacerých prepínačov; 1 vstup používa obvod rozdeľovača napätia na poskytnutie jedinečnej celočíselnej hodnoty pre každú zo 16 možných kombinácií nastavenia prepínača. Táto sada 16 celočíselných identifikátorov sa potom použije v aplikačnom programe na priradenie akcie k nastaveniu.

Tento pokyn využíva metódu viacerých prepínačov na implementáciu výberu melódií pre aplikáciu music box. Vybraná melódia sa potom prehrá pomocou piezoelektrického bzučiaka pomocou funkcie tónu Arduino.

Krok 1: Požadovaný hardvér

Požadovaný hardvér
Požadovaný hardvér

Použitie UNO ako implementačnej platformy minimalizuje počet požadovaných hardvérových komponentov. Implementácia metódy vstupu s viacerými spínačmi vyžaduje iba 4-kolíkový prepínač, 5 odporov použitých na delič napätia a prepojovací vodič na pripojenie. Do konfigurácie na implementáciu voliča melódií hudobného boxu je pridaný piezový bzučiak. Voliteľne, v závislosti od typu použitého dipového spínača, je užitočné použiť 8,4 -kolíkovú zásuvku 2x4 na pripojenie dipového spínača k doske, pretože štandardné kolíky dipových spínačov sú zrejme vyrobené na spájkovanie s perfboardom, ktorý sa nezapája priamo do breadboardu. Zásuvka stabilizuje pripojenia prepínačov DIP a zabraňuje ľahkému nadvihnutiu spínača pri nastavovaní prepínačov.

názov Možný zdroj Ako sa používa
4-kolíkový dip spínač Vyladiť výber
2x4 kolíková zásuvka (voliteľné) Amazon Stĺpce na väčšine dip spínačov nedržia spínač v breadboarde veľmi dobre. Zásuvka pomáha zaistiť pevnejšie spojenie. Alternatívou je nájsť prepínač dipu, ktorý je skutočne vyrobený na použitie na doske, s pravidelnými pinmi IC.

odpory:

  • 10 000 x 2
  • 20 tis
  • 40 tis
  • 80 tis
Implementujte delič napätia
pasívny piezoelektrický bzučiak Amazon Hrajte melódiu poháňanú aplikáciou prostredníctvom funkcie tónu Arduino

Krok 2: Metóda viacnásobného prepínača Vysvetlenie

Prepínač s viacerými prepínačmi Metóda Vysvetlenie
Prepínač s viacerými prepínačmi Metóda Vysvetlenie

Táto časť pojednáva o základných koncepciách metódy s viacerými prepínačmi a rozvíja rovnice potrebné pre samostatný výpočet jedinečných identifikátorov pre každú zo 16 možných konfigurácií nastavenia prepínača dip. Tieto identifikátory je potom možné použiť v aplikačnom programe na priradenie konfigurácie prepínača k akcii. Môžete napríklad chcieť - zapnúť 1, vypnúť 2, vypnúť 3, vypnúť 4 (1, 0, 0, 0) - hrať Amazing Grace a (0, 1, 0, 0) hrať Lev dnes večer spí. Aby boli stručné a stručné, konfiguračné identifikátory sa v zostávajúcej časti dokumentu označujú ako komparátory.

Obrázok
Obrázok

Základným konceptom metódy s viacerými spínačmi je obvod rozdeľovača napätia, ktorý pozostáva z 2 sériových odporov pripojených k vstupnému napätiu. Vodič výstupného napätia je zapojený medzi odpory R1 a R.2, ako je uvedené vyššie. Výstupné napätie deliča sa vypočíta ako vstupné napätie vynásobené pomerom rezistora R.2 na súčet R.1 a R.2 (rovnica 1). Tento pomer je vždy menší ako 1, takže výstupné napätie je vždy menšie ako vstupné napätie.

Ako je uvedené v konštrukčnom diagrame vyššie, multiprepínač je nakonfigurovaný ako delič napätia s R.2 pevné a R.1 sa rovná zloženému/ekvivalentnému odporu pre 4 odpory prepínača dip. Hodnota R.1 závisí od toho, ktoré prepínače dip sú zapnuté, a teda od príspevku k zloženému odporu. Pretože odpory dipového spínača sú paralelné, rovnica výpočtu ekvivalentného odporu je uvedená ako recipročné hodnoty zložkových rezistorov. Pre našu konfiguráciu a prípad, že sú všetky prepínače zapnuté, platí rovnica

1/R.1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

dávať R.1 = 5333,33 voltov. Aby sa zohľadnil fakt, že väčšina nastavení má vypnutý aspoň jeden prepínač, stav prepínača sa používa ako multiplikátor:

1/R.1 = s1*1/80 000 + s2*1/40000 + s3*1/20000 + s4*1/10000 (2)

kde štátny multiplikátor, si, sa rovná 1, ak je spínač zapnutý, a rovná sa 0, ak je vypínač vypnutý. R.1 sa teraz dá použiť na výpočet odporu potrebného v rovnici 1. Príkladom je prípad, kde sú všetky spínače zapnuté

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

Posledným krokom pri výpočte predpokladanej hodnoty komparátora je vynásobenie RATIO číslom 1023, aby sa emuloval účinok funkcie analogRead. Potom je identifikátor pre prípad, keď sú zapnuté všetky prepínače

porovnávač15 = 1023*.6522 = 667

Teraz sú k dispozícii všetky rovnice na výpočet identifikátorov pre 16 možných nastavení prepínača. Zhrnúť:

  1. R.1 sa vypočíta pomocou rovnice 2
  2. R.1 a R.2 sa používajú na výpočet POMERU odporu
  3. RATIO sa vynásobí 1023, aby sa získala hodnota porovnávača
  4. voliteľne možno predpovedané výstupné napätie vypočítať aj ako RATIO*Vin

Sada komparátorov závisí iba od hodnôt odporu použitého pre delič napätia a je jedinečným podpisom pre konfiguráciu. Pretože výstupné napätie deliča bude kolísať od behu k behu (a čítať k čítaniu), jedinečné v tomto kontexte znamená, že aj keď dve sady identifikátorov nemusia byť úplne rovnaké, sú dostatočne blízko na to, aby rozdiely v komparátorových komponentoch spadali do malého určený interval. Parameter veľkosti intervalu musí byť zvolený dostatočne veľký, aby zohľadňoval očakávané výkyvy, ale dostatočne malý, aby sa rôzne nastavenia prepínačov neprekrývali. 7 obvykle funguje dobre pre polovičnú šírku intervalu.

Súbor komparátorov pre konkrétnu konfiguráciu je možné získať niekoľkými spôsobmi - spustite demo program a zaznamenajte hodnoty pre každé nastavenie; na výpočet použite tabuľku v nasledujúcej časti; skopírujte existujúcu sadu. Ako je uvedené vyššie, všetky sady sa budú pravdepodobne mierne líšiť, ale mali by fungovať. Ak sa niektorý z rezistorov výrazne zmení alebo sa pridá viac rezistorov, navrhujem použiť sadu identifikátorov autorov metódy na nastavenie viacerých prepínačov a tabuľku z ďalšej časti.

Nasledujúci ukážkový program ilustruje použitie komparátorov na identifikáciu aktuálneho nastavenia prepínača dip. V každom programovom cykle sa vykoná analogRead, aby sa získal identifikátor pre aktuálnu konfiguráciu. Tento identifikátor sa potom porovnáva v porovnávacom zozname, kým sa nenájde zhoda alebo sa zoznam nevyčerpá. Ak sa nájde zhoda, vydá sa výstupná správa na overenie; ak sa nenájde, vydá sa varovanie. Do slučky je vložené 3 -sekundové oneskorenie, aby okno sériového výstupu nebolo zahltené správami a poskytlo určitý čas na resetovanie konfigurácie dip spínača.

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

// Demo program na prečítanie výstupu deliča napätia a jeho použitie na identifikáciu // aktuálnej konfigurácie prepínača prúdom vyhľadaním výstupnej hodnoty v poli // porovnávacích hodnôt pre každé možné nastavenie. Hodnoty vo vyhľadávacom poli je možné // získať buď z predchádzajúceho spustenia konfigurácie, alebo pomocou výpočtu // na základe základných rovníc. // ------------------------------------------------ -------------------------------------- int komparátor [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Definovanie spracovateľských premenných int dipPin = A0; // analógový pin pre vstup deliča napätia int dipIn = 0; // drží výstup deliča napätia preložený analogovým čítaním int count = 0; // počítadlo slučiek int epsilon = 7; // porovnávací interval polovičná šírka bool dipFound = false; // pravda, ak sa výstup deliča aktuálneho napätia našiel vo vyhľadanej tabuľke void setup () {pinMode (dipPin, INPUT); // nakonfigurujte kolík deliča napätia ako VSTUP Serial.begin (9600); // povoliť sériovú komunikáciu} void loop () {delay (3000); // zabráňte rýchlemu posúvaniu výstupu // inicializácia parametrov vyhľadávania počet = 0; dipFound = false; // Prečítajte a zdokumentujte aktuálne výstupné napätie dipIn = analogRead (dipPin); Serial.print ("výstup deliča"); Serial.print (dipIn); // Vyhľadajte v zozname komparátorov aktuálnu hodnotu while ((počet <16) && (! DipFound)) {if (abs (dipIn - porovnávač [počet]) <= epsilon) {// zistil, že dipFound = true; Serial.print ("nájdené pri vstupe"); Serial.print (počet); Serial.println ("hodnota" + reťazec (komparátor [počet])); prestávka; } počet ++; } if (! dipFound) {// hodnota nie je v tabuľke; nemalo by sa to stať Serial.println ("OOPS! Nebolo nájdené; radšej zavolajte Ghost Busters"); }}

Krok 3: Tabuľka porovnávača

Obrázok
Obrázok

Výpočty pre 16 porovnávacích hodnôt sú uvedené v tabuľke uvedenej vyššie. Priložený súbor programu Excel je k dispozícii na stiahnutie v spodnej časti tejto sekcie.

Tabuľkové stĺpce A-D zaznamenávajú hodnoty odporu rezistora prepínača a 16 možných nastavení prepínača. Upozorňujeme, že hardvérový prepínač DIP zobrazený v pláne návrhu na zmrazenie je v skutočnosti očíslovaný zľava doprava namiesto číslovania sprava doľava zobrazeného v tabuľke. Považoval som to za trochu mätúce, ale alternatíva neumiestňuje konfiguráciu „1“(0, 0, 0, 1) na prvé miesto v zozname. Stĺpec E používa vzorec 2 v predchádzajúcej časti na výpočet ekvivalentného odporu rozdeľovača napätia R1 pre nastavenie. Stĺpec F používa tento výsledok na výpočet pridruženého odporu RATIO a nakoniec stĺpec G vynásobí RATIO maximálnou hodnotou analogRead (1023), aby sa získala predpokladaná hodnota komparátora. Posledné 2 stĺpce obsahujú skutočné hodnoty z cyklu demo programu spolu s rozdielmi medzi predpokladanými a skutočnými hodnotami.

V predchádzajúcej časti boli uvedené tri metódy na získanie sady hodnôt komparátorov vrátane rozšírenia tejto tabuľky, ak sa hodnoty odporu výrazne zmenia alebo ak sa pridá viac prepínačov. Zdá sa, že malé rozdiely v hodnotách rezistora významne neovplyvňujú konečné výsledky (čo je dobré, pretože špecifikácie rezistorov poskytujú toleranciu, povedzme 5%, a odpor sa zriedka rovná jeho skutočnej uvedenej hodnote).

Krok 4: Zahrajte si melódiu

Zahrajte si melódiu
Zahrajte si melódiu

Na ilustráciu toho, ako je možné v aplikácii použiť techniku viacnásobného prepínania, je porovnávací ukážkový program z časti „Vysvetlenie metódy“upravený tak, aby implementoval spracovanie výberu melódie pre program music box. Aktualizovaná konfigurácia aplikácie je zobrazená vyššie. Jediným doplnkom hardvéru je pasívny piezoelektrický bzučiak na prehrávanie zvolenej melódie. Základnou zmenou softvéru je pridanie rutiny na prehrávanie melódie, keď je identifikovaná, pomocou bzučiaka a tónovej rutiny Arduino.

Dostupné úryvky melódie sú obsiahnuté v hlavičkovom súbore Tunes.h spolu s definíciou potrebných podporných štruktúr. Každá melódia je definovaná ako pole štruktúr súvisiacich s notou obsahujúcich frekvenciu a trvanie noty. Frekvencie poznámok sú obsiahnuté v samostatnom hlavičkovom súbore Pitches.h. Programové a hlavičkové súbory sú k dispozícii na stiahnutie na konci tejto časti. Všetky tri súbory by mali byť umiestnené v rovnakom adresári.

Výber a identifikácia prebieha nasledovne:

  1. „Užívateľ“nastavuje prepínače DIP v konfigurácii spojenej s požadovaným naladením
  2. každý cyklus programovej slučky získa identifikátor pre aktuálne nastavenie prepínača dipu pomocou analogRead
  3. Identifikátor konfigurácie kroku 2 sa porovná s každým z komparátorov v zozname dostupných melódií
  4. Ak sa nájde zhoda, zavolá sa rutina playTune s informáciami potrebnými na prístup k zoznamu poznámok k melódii

    Pomocou funkcie tónu Arduino sa každá nota prehrá prostredníctvom bzučiaka

  5. Ak sa nenájde žiadna zhoda, nevykoná sa žiadna akcia
  6. opakujte 1-5

Nastavenia prepínačov DIP pre dostupné melódie sú uvedené v tabuľke nižšie, kde 1 znamená, že je spínač zapnutý, 0 je vypnutý. Pripomeňme, že spôsob, akým je prepínač DIP orientovaný, umiestňuje spínač 1 do polohy úplne vľavo (tá, ktorá je spojená s odporom 80K).

NÁZOV Prepínač 1 Prepínač 2 Prepínač 3 Prepínač 4
Danny Boy 1 0 0 0
Malý medveď 0 1 0 0
Lev dnes večer spí 1 1 0 0
Nikto nepozná problémy 0 0 1 0
Úžasná Grace 0 0 0 1
Prázdny priestor 1 0 0 1
MockingBird Hill 1 0 1 1

Kvalita zvuku z piezoelektrického bzučiaka určite nie je skvelá, ale dá sa aspoň rozpoznať. V skutočnosti, ak sú tóny merané, sú veľmi blízko k presnej frekvencii tónov. Jednou zaujímavou technikou použitou v programe je uloženie údajov o vyladení do sekcie pamäte flash/programu namiesto predvolenej sekcie pamäte údajov pomocou smernice PROGMEM. Dátová časť obsahuje premenné spracovania programu a je oveľa menšia, okolo 512 bajtov pre niektoré mikrokontroléry ATtiny.

Odporúča: