Obsah:
- Krok 1: Požadovaný hardware
- Krok 2: Vysvětlení metody s více přepínači
- Krok 3: Tabulka komparátoru
- Krok 4: Zahrajte si Tune
Video: Volič DIP Tune pomocí 1 kolíku: 4 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
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
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:
|
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
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.
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, sjá, 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:
- R.1 se vypočítá pomocí rovnice 2
- R.1 a R.2 se používají k výpočtu přidruženého odporu RATIO
- RATIO se vynásobí 1023, aby se získala hodnota komparátoru
- 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
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
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ě:
- „Uživatel“nastavuje přepínače DIP v konfiguraci spojené s požadovanou melodií
- 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í
- Identifikátor konfigurace kroku 2 je porovnán s každým z komparátorů v seznamu dostupných skladeb
-
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
- Pokud není nalezena shoda, neprovede se žádná akce
- 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:
Konektor ICSP pro Arduino Nano bez pájecího záhlaví, ale kolíku Pogo: 7 kroků
Konektor ICSP pro Arduino Nano bez pájecího konektoru, ale kolík Pogo: Vytvořte konektor ICSP pro Arduino Nano bez pájecího konektoru na desce, ale s pinem Pogo. Části 3 × 2pólová zásuvka x1 - APitch 2,54 mm Dupont Line Drátová svorka konektoru x6 -Pružinová testovací sonda BP75-E2 (1,3 mm kuželová hlava) Pogo Pin
Připojení více tlačítek k jednomu kolíku na Arduinu: 4 kroky
Připojení více tlačítek k jednomu kolíku na Arduinu: Ahoj všichni, když vaše projekty Arduino přerostou blikající LED diody, možná zjistíte, že potřebujete nějaké další piny. Ukážu vám trik, který můžete použít tam, kde můžete mít více tlačítek, všechna připojená ke stejnému analogovému pinu
ESP8266 pomocí kolíků GPIO0/GPIO2/GPIO15: 4 kroky
ESP8266 pomocí kolíků GPIO0/GPIO2/GPIO15: Aktualizace 1. července 2018-Přidána poznámka k přeprogramování, když je výstupem GPIO0 Toto je velmi krátká poznámka k používání kolíků GPIO0/GPIO2 a GPIO15 na modulu ESP8266. Aktualizace: Také zkontrolujte out Jak používat piny ESP8266-01 Úvod ESP8266 je nízký
Programování MSP430 DIP pomocí Ez430: 4 kroky
Programování MSP430 DIP pomocí Ez430: Když jsem našel programátor TI ez430 USB, vypadalo to, že je to jedna z jednodušších metod, jak se dostat do provozu s MCU. Jak bych se mohl mýlit, to má v názvu ez! Ukazuje se, že je to ve skutečnosti snadné … většinou. Ez430 je skvělý, pokud chcete
Volič zvuku z mincovny: 3,5 mm přepínač zvuku: 6 kroků
Volič zvuku Mint Boxu: 3,5 mm Přepínač zvuku: Problém: Často na ploše musím používat sluchátka pro hry nebo poslech hudby, když jsou v místnosti jiní lidé, a pak se chci přepnout na reproduktory, pokud se chci pochlubit vtipným video nebo uskutečnit internetový hovor se vzdáleným příbuzným. Th