Obsah:

Volič DIP Tune pomocí 1 kolíku: 4 kroky
Volič DIP Tune pomocí 1 kolíku: 4 kroky

Video: Volič DIP Tune pomocí 1 kolíku: 4 kroky

Video: Volič DIP Tune pomocí 1 kolíku: 4 kroky
Video: Kotlár Security v práci 2024, Listopad
Anonim
Volič DIP Tune pomocí 1 kolíku
Volič DIP Tune pomocí 1 kolíku

Před nějakou dobou jsem pracoval na projektu „music box“, který potřeboval vybrat až z 10 různých úryvků melodie. Přirozenou volbou pro výběr konkrétní melodie byl 4pinový dip přepínač, protože 4 přepínače poskytují 24= 16 různých nastavení. Implementace hrubé síly pro tento přístup však vyžaduje 4 piny zařízení, jeden pro každý přepínač. Protože jsem plánoval použít ATtiny85 pro vývoj, ztráta 4 pinů byla trochu moc. Naštěstí jsem narazil na článek, který popisuje důmyslnou metodu pro použití 1 analogového pinu pro zpracování více vstupů přepínače.

Technika více přepínačů; 1 vstup používá obvod děliče napětí k poskytnutí jedinečné celočíselné hodnoty pro každou ze 16 možných kombinací nastavení přepínačů. Tato sada 16 celočíselných identifikátorů je poté použita v aplikačním programu k přiřazení akce k nastavení.

Tento instructable využívá metodu multi-switch k implementaci výběru melodií pro aplikaci Music Box. Vybraná melodie se poté přehraje pomocí piezo bzučáku pomocí funkce tón Arduino.

Krok 1: Požadovaný hardware

Požadovaný hardware
Požadovaný hardware

Použití UNO jako implementační platformy minimalizuje počet požadovaných hardwarových komponent. Implementace metody vstupu s více spínači vyžaduje pouze 4pinový dip přepínač, 5 odporů použitých pro dělič napětí a připojovací vodič pro připojení. Piezo bzučák je přidán do konfigurace pro implementaci voliče melodie hudebního boxu. Volitelně, v závislosti na typu použitého přepínače dipu, je užitečné použít zásuvku 2x4 8 pinů pro připojení dip přepínače k prkénku, protože se zdá, že kolíky standardních přepínačů dipu jsou vyrobeny pro pájení na perfboard, který se nezapojuje přímo do breadboardu. Zásuvka stabilizuje připojení spínačů DIP a brání snadnému zvednutí spínače při nastavování kolébkových spínačů.

název Možný zdroj Jak se používá
4pólový přepínač DIP Vyladit výběr
2x4pinová zásuvka (volitelně) Amazonka Sloupky na většině dip přepínačů nedrží spínač příliš dobře na prkénku. Zásuvka pomáhá zajistit pevnější spojení. Alternativou je najít dip přepínač, který je skutečně vyroben pro použití na prkénku s běžnými piny IC.

odpory:

  • 10K x2
  • 20 tis
  • 40 tis
  • 80 tis
Implementujte dělič napětí
pasivní piezo bzučák Amazonka Hrajte melodii řízenou aplikací prostřednictvím funkce tón Arduino

Krok 2: Vysvětlení metody s více přepínači

Přepínač s více přepínači Metoda Vysvětlení
Přepínač s více přepínači Metoda Vysvětlení

Tato část popisuje základní koncepty metody s více přepínači a rozvíjí rovnice potřebné pro samostatný výpočet jedinečných identifikátorů pro každou ze 16 možných konfigurací nastavení přepínače dip. Tyto identifikátory pak lze použít v aplikačním programu k přiřazení konfigurace přepínače k akci. Například můžete chtít nastavení - zapnout 1, vypnout 2, vypnout 3, vypnout 4 (1, 0, 0, 0) - hrát Amazing Grace a (0, 1, 0, 0) hrát Lev dnes večer spí. Pro stručnost a stručnost jsou konfigurační identifikátory ve zbývající části dokumentu označovány jako komparátory.

obraz
obraz

Základním konceptem metody s více spínači je obvod děliče napětí, který se skládá ze 2 sériových odporů připojených ke vstupnímu napětí. Vývod výstupního napětí je zapojen mezi odpory R1 a R.2, jak je uvedeno výše. Výstupní napětí děliče se vypočítá jako vstupní napětí vynásobené poměrem odporu R2 na součet R.1 a R.2 (rovnice 1). Tento poměr je vždy menší než 1, takže výstupní napětí je vždy menší než vstupní napětí.

Jak je naznačeno v diagramu návrhu výše, vícepínač je konfigurován jako dělič napětí s R2 pevné a R.1 stejný jako složený/ekvivalentní odpor pro 4 dip přepínače. Hodnota R.1 závisí na tom, které dip přepínače jsou zapnuty, a proto přispívají ke kompozitnímu odporu. Protože odpory dipového spínače jsou paralelní, je rovnice pro výpočet ekvivalentního odporu uvedena jako převrácené hodnoty složkových odporů. Pro naši konfiguraci a v případě, že jsou zapnuty všechny přepínače, se rovnice stane

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

dávat R.1 = 5333,33 voltů. Abychom zohlednili skutečnost, že většina nastavení má vypnutý alespoň jeden z přepínačů, stav přepínače se používá jako multiplikátor:

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

kde státní multiplikátor, s, se rovná 1, pokud je spínač zapnutý, a roven 0, pokud je spínač vypnutý. R.1 lze nyní použít pro výpočet poměru odporu potřebného v rovnici 1. Jako příklad opět použijte případ, kdy jsou všechny spínače zapnuty

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

Posledním krokem při výpočtu predikované hodnoty komparátoru je vynásobení RATIO číslem 1023 za účelem emulace účinku funkce analogRead. Pak je identifikátor pro případ, kdy jsou zapnuty všechny přepínače

komparátor15 = 1023*.6522 = 667

Všechny rovnice jsou nyní k dispozici pro výpočet identifikátorů pro 16 možných nastavení přepínačů. Shrnout:

  1. R.1 se vypočítá pomocí rovnice 2
  2. R.1 a R.2 se používají k výpočtu přidruženého odporu RATIO
  3. RATIO se vynásobí 1023, aby se získala hodnota komparátoru
  4. volitelně lze předpokládané výstupní napětí vypočítat také jako RATIO*Vin

Sada komparátorů závisí pouze na hodnotách odporů použitých pro dělič napětí a jsou jedinečným podpisem pro konfiguraci. Protože výstupní napětí děliče bude kolísat od běhu k běhu (a čtení ke čtení), jedinečné v tomto kontextu znamená, že zatímco dvě sady identifikátorů nemusí být úplně stejné, jsou dostatečně blízko, že rozdíly mezi komparátorem komponent spadají do malé zadaný interval. Parametr velikosti intervalu musí být zvolen dostatečně velký, aby zohledňoval očekávané výkyvy, ale dostatečně malý, aby se různá nastavení přepínačů nepřekrývala. Obvykle 7 funguje dobře pro poloviční šířku intervalu.

Sadu komparátorů pro konkrétní konfiguraci lze získat několika způsoby - spusťte demo program a zaznamenejte hodnoty pro každé nastavení; k výpočtu použijte tabulku v další části; zkopírujte stávající sadu. Jak bylo uvedeno výše, všechny sady se budou pravděpodobně mírně lišit, ale měly by fungovat. Doporučuji použít sadu autorů identifikátorů metody pro nastavení více přepínačů a tabulku z další části, pokud se některý z rezistorů výrazně změní nebo se přidá více rezistorů.

Následující ukázkový program ukazuje použití komparátorů k identifikaci aktuálního nastavení přepínače DIP. V každém programovém cyklu se provede analogRead, aby se získal identifikátor pro aktuální konfiguraci. Tento identifikátor je poté porovnáván v porovnávacím seznamu, dokud není nalezena shoda nebo není seznam vyčerpán. Pokud je nalezena shoda, je vydána výstupní zpráva pro ověření; pokud není nalezeno, vydá se varování. Do smyčky je vloženo 3sekundové zpoždění, aby okno sériového výstupu nebylo zahlceno zprávami a poskytlo nějaký čas na reset konfigurace dip přepínače.

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

// Demo program ke čtení výstupu děliče napětí a jeho použití k identifikaci // aktuální konfigurace přepínače dipu vyhledáním výstupní hodnoty v poli // porovnávacích hodnot pro každé možné nastavení. Hodnoty ve vyhledávacím poli lze // buď získat z předchozího spuštění konfigurace, nebo pomocí výpočtu // na základě podkladových rovnic. // ------------------------------------------------ -------------------------------------- int komparátor [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Definujte proměnné zpracování int dipPin = A0; // analogový pin pro vstup děliče napětí int dipIn = 0; // drží dělič napěťový výstup přeložený analogovým Číst int počet = 0; // čítač smyčky int epsilon = 7; // interval porovnání poloviční šířka bool dipFound = false; // true pokud je výstup děliče aktuálního napětí nalezen ve vyhledávací tabulce void setup () {pinMode (dipPin, INPUT); // nakonfigurujte pin děliče napětí jako INPUT Serial.begin (9600); // povolit sériovou komunikaci} void loop () {delay (3000); // zabrání příliš rychlému posouvání výstupu // inicializace parametrů vyhledávání count = 0; dipFound = false; // Přečíst a zdokumentovat aktuální výstupní napětí dipIn = analogRead (dipPin); Serial.print ("výstup děliče"); Serial.print (dipIn); // Hledat v seznamu komparátorů aktuální hodnotu while ((počet <16) && (! DipFound)) {if (abs (dipIn - porovnávač [počet]) <= epsilon) {// našel to dipFound = true; Serial.print ("nalezeno při vstupu"); Serial.print (počet); Serial.println ("hodnota" + řetězec (komparátor [počet])); přestávka; } počet ++; } if (! dipFound) {// hodnota není v tabulce; nemělo by se to stát Serial.println ("OOPS! Nenalezeno; raději zavolejte Ghost Busters"); }}

Krok 3: Tabulka komparátoru

obraz
obraz

Výpočty pro 16 hodnot komparátoru jsou uvedeny v tabulce uvedené výše. Doprovodný soubor aplikace Excel je k dispozici ke stažení ve spodní části této části.

Sloupce tabulky A-D zaznamenávají hodnoty odporu dip přepínače a 16 možných nastavení přepínačů. Pamatujte, že hardwarový přepínač DIP zobrazený v diagramu návrhu fritzování je ve skutečnosti očíslován zleva doprava místo číslování zprava doleva zobrazeného v tabulce. Přišlo mi to poněkud matoucí, ale alternativa neumisťuje konfiguraci „1“(0, 0, 0, 1) na první místo v seznamu. Sloupec E používá vzorec 2 předchozí části k výpočtu ekvivalentního odporu děliče napětí R1 pro nastavení. Sloupec F používá tento výsledek k výpočtu přidruženého odporu RATIO a nakonec sloupec G vynásobí RATIO maximální hodnotou analogRead (1023), aby se získala predikovaná hodnota komparátoru. Poslední 2 sloupce obsahují skutečné hodnoty z běhu demo programu spolu s rozdíly mezi předpokládanými a skutečnými hodnotami.

Předchozí část zmínila tři metody k získání sady hodnot komparátoru včetně rozšíření této tabulky, pokud se hodnoty odporu výrazně změní nebo se přidá více přepínačů. Zdá se, že malé rozdíly v hodnotách odporu významně neovlivňují konečné výsledky (což je dobré, protože specifikace odporu udávají toleranci, řekněme 5%, a odpor se zřídka rovná jeho skutečné uvedené hodnotě).

Krok 4: Zahrajte si Tune

Zahrajte si Tune
Zahrajte si Tune

Aby se ilustrovalo, jak lze v aplikaci použít techniku vícepřepínačů, je srovnávací ukázkový program z části "Vysvětlení metody" upraven tak, aby implementoval zpracování výběru melodie pro program music box. Aktualizovaná konfigurace aplikace je zobrazena výše. Jediným doplňkem hardwaru je pasivní piezoelektrický bzučák pro přehrávání vybrané melodie. Základní změnou softwaru je přidání rutiny pro přehrávání melodie, jakmile je identifikována, pomocí bzučáku a rutiny tónů Arduino.

Dostupné fragmenty melodií jsou obsaženy v hlavičkovém souboru Tunes.h spolu s definicí nezbytných podpůrných struktur. Každá melodie je definována jako řada struktur souvisejících s notami, které obsahují frekvenci a trvání noty. Frekvence not jsou obsaženy v samostatném hlavičkovém souboru Pitches.h. Soubory programu a záhlaví jsou k dispozici ke stažení na konci této části. Všechny tři soubory by měly být umístěny ve stejném adresáři.

Výběr a identifikace probíhá následovně:

  1. „Uživatel“nastavuje přepínače DIP v konfiguraci spojené s požadovanou melodií
  2. každý cyklus programové smyčky získává identifikátor aktuálního nastavení přepínače dip prostřednictvím analogového čtení
  3. Identifikátor konfigurace kroku 2 je porovnán s každým z komparátorů v seznamu dostupných skladeb
  4. Pokud je nalezena shoda, zavolá se rutina playTune s informacemi potřebnými pro přístup do seznamu not naladění

    Pomocí tónové funkce Arduino se každá nota přehraje pomocí bzučáku

  5. Pokud není nalezena shoda, neprovede se žádná akce
  6. opakujte 1-5

Nastavení přepínačů DIP pro dostupné melodie je uvedeno v tabulce níže, kde 1 znamená přepínač zapnutý, 0 vypnutý. Připomeňme si, že způsob, jakým je přepínač DIP orientován, umístí přepínač 1 do polohy úplně vlevo (ta spojená s odporem 80K).

NÁZEV Přepínač 1 Přepínač 2 Přepínač 3 Přepínač 4
Danny Boy 1 0 0 0
Malý medvěd 0 1 0 0
Lev dnes večer spí 1 1 0 0
Nikdo nezná potíže 0 0 1 0
Úžasná Grace 0 0 0 1
Prázdné místo 1 0 0 1
MockingBird Hill 1 0 1 1

Kvalita zvuku z piezoelektrického bzučáku rozhodně není skvělá, ale je alespoň rozpoznatelná. Ve skutečnosti, pokud jsou tóny měřeny, jsou velmi blízké přesné frekvenci not. Jednou zajímavou technikou používanou v programu je uložení direktivních dat do sekce flash/programové paměti místo do výchozí sekce datové paměti pomocí direktivy PROGMEM. Datová část obsahuje proměnné zpracování programu a je mnohem menší, kolem 512 bajtů u některých mikrokontrolérů ATtiny.

Doporučuje: