Tartalomjegyzék:

DIP hangolásválasztó 1 tűvel: 4 lépés
DIP hangolásválasztó 1 tűvel: 4 lépés

Videó: DIP hangolásválasztó 1 tűvel: 4 lépés

Videó: DIP hangolásválasztó 1 tűvel: 4 lépés
Videó: Madrigal - Dip 2024, Július
Anonim
DIP hangolásválasztó 1 tűvel
DIP hangolásválasztó 1 tűvel

Nemrégiben dolgoztam egy "zenei doboz" projekten, amelynek választania kellett 10 különböző dallamrészlet közül. Természetes választás egy adott dallam kiválasztásához a 4 tűs dip kapcsoló volt, mivel a 4 kapcsoló 2 -et biztosít4= 16 különböző beállítás. Ennek a megközelítésnek a nyers erő megvalósításához azonban 4 eszközcsap szükséges, mindegyik kapcsolóhoz egy. Mivel az ATtiny85 fejlesztését terveztem, a 4 tű elvesztése kicsit sok volt. Szerencsére belefutottam egy cikkbe, amely egy ötletes módszert ír le 1 analóg tű használatára több kapcsolóbemenet kezelésére.

A többkapcsolós, 1-bemeneti technika egy feszültségosztó áramkört használ, hogy egyedi egész értéket biztosítson a 16 lehetséges kapcsolóbeállítás-kombináció mindegyikéhez. Ezt a 16 egész azonosítóból álló készletet azután az alkalmazás használja egy művelet beállításhoz való társítására.

Ez az oktatóanyag a többkapcsolós módszert alkalmazza a zenei doboz alkalmazás dallamválasztásának megvalósításához. A kiválasztott dallamot ezután egy piezo zümmögő játssza le az Arduino hang funkció használatával.

1. lépés: Szükséges hardver

Szükséges hardver
Szükséges hardver

Az UNO megvalósítási platformként való használata minimalizálja a szükséges hardverkomponensek számát. A többkapcsolós bemeneti módszer megvalósításához csak egy 4 tűs dip-kapcsolóra, a feszültségosztóhoz használt 5 ellenállásra és a csatlakozók csatlakoztatására szolgáló huzalra van szükség. A zenei doboz dallamválasztójának megvalósításához piezo zümmögő kerül hozzáadásra a konfigurációhoz. Opcionálisan, a használt dip -kapcsoló típusától függően hasznos a 2x4 8 tűs aljzat használata a dip -kapcsoló csatlakoztatásához a kenyérpályához, mivel úgy tűnik, hogy a szabványos dip -kapcsoló csapok olyan forrasztáshoz készültek, amely nem közvetlenül a kenyérlaphoz csatlakozik. Az aljzat stabilizálja a dip kapcsoló csatlakozásait, és megakadályozza, hogy a kapcsoló könnyen felemelhető legyen a billenőkapcsolók beállításakor.

Név Lehetséges forrás Hogyan használt
4 tűs dip kapcsoló Hangolja a kiválasztást
2x4 tűs foglalat (opcionális) amazon A legtöbb dip kapcsoló oszlopai nem tartják túl jól a kapcsolót kenyérsütőben. Egy aljzat segít szilárdabbá tenni a kapcsolatot. Alternatív megoldásként találhat egy mártókapcsolót, amely valóban kenyérlapra való használatra készült, rendszeres IC csapokkal.

ellenállások:

  • 10K x 2
  • 20K
  • 40K
  • 80 ezer
Végezze el a feszültségosztót
passzív piezo hangjelző amazon Az alkalmazás által vezérelt dallam lejátszása az Arduino hangfunkción keresztül

2. lépés: Több kapcsolós módszer magyarázata

Több kapcsolós módszer magyarázata
Több kapcsolós módszer magyarázata

Ez a szakasz a többkapcsolós módszer alapelveit tárgyalja, és kifejleszti az egyenleteket, amelyek szükségesek az egyedi azonosítók önálló számításához a 16 lehetséges dip kapcsoló beállítási konfiguráció mindegyikéhez. Ezeket az azonosítókat ezután egy alkalmazási programban lehet használni a kapcsolókonfiguráció hozzárendeléséhez egy művelethez. Például szeretné, ha a beállítás - 1 -es kapcsoló be, 2 -es kikapcsoló, 3 -as kikapcsoló, 4 -es kikapcsoló (1, 0, 0, 0) - az Amazing Grace lejátszásához és (0, 1, 0, 0) lejátszásához Oroszlán ma éjjel alszik. A rövidség és a tömörség kedvéért a konfiguráció azonosítóit összehasonlítónak nevezzük a dokumentum többi részében.

Kép
Kép

A többkapcsolós módszer alapkoncepciója a feszültségosztó áramkör, amely 2 soros ellenállásból áll, amelyek bemeneti feszültséghez vannak csatlakoztatva. A kimeneti feszültség vezeték az R ellenállások közé van csatlakoztatva1 és R2, ahogy fent látható. Az osztó kimeneti feszültségét a bemeneti feszültség és az R ellenállás hányadosával kell kiszámítani2 R összegére1 és R2 (1. egyenlet). Ez az arány mindig kisebb, mint 1, így a kimeneti feszültség mindig kisebb, mint a bemeneti feszültség.

Amint az a fenti ábrán is látható, a többkapcsolós feszültségosztó R-vel van konfigurálva2 fix és R1 egyenlő a kompozit/ekvivalens ellenállással a 4 dip kapcsoló ellenállásnál. R értéke1 attól függ, hogy mely dip kapcsolók vannak bekapcsolva, és ezáltal hozzájárul az összetett ellenálláshoz. Mivel a mágneskapcsoló ellenállások párhuzamosak, az egyenértékű ellenállás számítási egyenletét a komponens ellenállások reciprokában kell megadni. Konfigurációnk és az összes kapcsoló bekapcsolása esetén az egyenlet lesz

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

megadva R.1 = 5333,33 volt. Annak figyelembe vétele érdekében, hogy a legtöbb beállításban legalább az egyik kapcsoló ki van kapcsolva, a kapcsolóállapotot szorzóként kell használni:

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

ahol az állapot szorzó, sén, 1, ha a kapcsoló be van kapcsolva, és 0, ha a kapcsoló ki van kapcsolva. R1 mostantól az 1. egyenletben szükséges ellenállási arány kiszámításához használható. Példaként használjuk azt az esetet, amikor minden kapcsoló be van kapcsolva

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

Az előrejelzett összehasonlító érték kiszámításának utolsó lépése az RATIO szorzása 1023 -mal az analogRead függvény hatásának emulálása érdekében. Ekkor az összes azon kapcsoló bekapcsolt állapotának azonosítója

összehasonlító15 = 1023*.6522 = 667

Az összes egyenlet már rendelkezésre áll a 16 lehetséges kapcsolóbeállítás azonosítóinak kiszámításához. Összefoglalni:

  1. R1 a 2. egyenlet segítségével számítjuk ki
  2. R1 és R2 a kapcsolódó RATIO ellenállás kiszámítására szolgálnak
  3. az RATIO -t megszorozzuk 1023 -mal, hogy megkapjuk az összehasonlító értéket
  4. opcionálisan a várható kimeneti feszültség RATIO*Vin formátumban is kiszámítható

Az összehasonlító készlet csak a feszültségosztóhoz használt ellenállásértékektől függ, és egyedi aláírás a konfigurációhoz. Mivel az osztó kimeneti feszültségei futásról futásra (és olvasásról olvasásra) ingadoznak, ebben az összefüggésben az egyedi azt jelenti, hogy bár két azonosító halmaz nem biztos, hogy teljesen azonos, elég közel vannak ahhoz, hogy az alkatrész-összehasonlító különbségek egy kis elő- meghatározott intervallum. Az intervallumméret paramétert elég nagynak kell választani, hogy figyelembe vegye a várható ingadozásokat, de elég kicsi ahhoz, hogy a különböző kapcsolóbeállítások ne fedjék egymást. Általában 7 jól működik a félszélességű intervallumhoz.

Egy bizonyos konfigurációhoz tartozó összehasonlító készlet többféle módon is beszerezhető - futtassa a demó programot, és rögzítse az egyes beállítások értékeit; számításához használja a következő részben található táblázatot; másoljon egy meglévő készletet. Amint fentebb említettük, minden készlet valószínűleg kissé eltér majd egymástól, de működnie kell. Javaslom, hogy használja a módszer szerzőjének azonosító készletét a többkapcsolós beállításhoz és a táblázat következő táblázatából, ha valamelyik ellenállást jelentősen megváltoztatják, vagy több ellenállást adnak hozzá.

A következő demó program szemlélteti az összehasonlító készülékek használatát az aktuális dip kapcsoló beállítás azonosítására. Minden programciklusban analóg olvasást hajtanak végre, hogy azonosítót kapjanak az aktuális konfigurációhoz. Ezt az azonosítót összehasonlítják az összehasonlító listán, amíg meg nem találják az egyezést vagy a listát. Ha egyezést talál, kimeneti üzenetet ad ki ellenőrzésre; ha nem találják, figyelmeztetést adnak ki. 3 másodperces késleltetés van behelyezve a hurokba, hogy a soros kimeneti ablak ne legyen túlterhelve üzenetekkel, és hogy legyen némi idő a dip kapcsoló konfigurációjának visszaállításához.

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

// Demo program a feszültségosztó kimenetének kiolvasására, és annak segítségével azonosítja az // dip kapcsoló konfigurációt úgy, hogy a kimeneti értéket // összehasonlítási értékek tömbjében nézi meg minden lehetséges beállításnál. A keresési tömb értékei // vagy a konfiguráció előző futtatásából, vagy az alapul szolgáló egyenletek alapján történő számítással // nyerhetők. // ------------------------------------------------ -------------------------------------- int összehasonlító [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Feldolgozási változók definiálása int dipPin = A0; // analóg pin feszültségosztó bemenethez int dipIn = 0; // tartja az osztó feszültségkimenetét, amelyet az analogRead fordított int count = 0; // ciklusszámláló int epsilon = 7; // összehasonlítási intervallum félszélességű bool dipFound = false; // igaz, ha az áramfeszültség -osztó kimenete megtalálható a keresési táblázatban void setup () {pinMode (dipPin, INPUT); // feszültségosztó csap konfigurálása INPUT Serial.begin (9600); // soros kommunikáció engedélyezése} void loop () {delay (3000); // a kimenet ne legyen túl gyorsan görgetve // A keresési paraméterek inicializálása count = 0; dipFound = hamis; // Az áram kimeneti feszültségének olvasása és dokumentálása dipIn = analogRead (dipPin); Serial.print ("osztó kimenet"); Serial.print (dipIn); // Keressen összehasonlító listát az aktuális értékhez, miközben ((szám <16) && (! DipFound)) {if (abs (dipIn - összehasonlító [szám]) <= epsilon) {// megtalálta dipFound = true; Serial.print ("megtalálható a belépéskor"); Serial.print (count); Serial.println ("érték" + karakterlánc (összehasonlító [szám])); szünet; } számolás ++; } if (! dipFound) {// az érték nem szerepel a táblázatban; nem szabad megtörténnie Serial.println ("OOPS! Nem található; hívd inkább a Ghost Busters" -t); }}

3. lépés: Összehasonlító táblázat

Kép
Kép

A 16 összehasonlító érték számításait a fenti táblázat tartalmazza. A mellékelt Excel fájl letölthető a szakasz alján.

A táblázat oszlopai A-D rögzítik a dip kapcsoló ellenállás értékeit és a 16 lehetséges kapcsolóbeállítást. Kérjük, vegye figyelembe, hogy a fritzázási rajzban látható hardver DIP kapcsoló valójában balról jobbra számozott, a táblázatban látható jobbról balra számozás helyett. Ezt kissé zavarosnak találtam, de az alternatíva nem helyezi az "1" konfigurációt (0, 0, 0, 1) a lista első helyére. Az E oszlop az előző szakasz 2. képletét használja az R feszültségosztó egyenértékű ellenállásának kiszámításához1 a beállításhoz. Az F oszlop ezt az eredményt használja a kapcsolódó RATIO ellenállás kiszámításához, és végül a G oszlop megszorozza az arányt az analogRead max értékkel (1023), hogy megkapja az előrejelzett összehasonlító értéket. Az utolsó 2 oszlop tartalmazza a demo program futásának tényleges értékeit, valamint a várható és a tényleges értékek közötti különbségeket.

Az előző szakasz három módszert említett az összehasonlító értékek készletének megszerzésére, beleértve a táblázat kiterjesztését, ha az ellenállásértékek jelentősen megváltoznak, vagy több kapcsolót adnak hozzá. Úgy tűnik, hogy az ellenállási értékek kis eltérései nem befolyásolják jelentősen a végeredményt (ami jó, mivel az ellenállás specifikációi 5%-os tűrést adnak, és az ellenállás ritkán egyenlő a ténylegesen megadott értékkel).

4. lépés: Játssz egy dallamot

Játssz egy dallamot
Játssz egy dallamot

Annak szemléltetésére, hogy a többkapcsolós technikát hogyan lehet használni egy alkalmazásban, a "Módszer magyarázata" szakasz összehasonlító demó programját úgy módosítjuk, hogy megvalósítsa a dallamválasztó feldolgozást a zenei doboz programhoz. A frissített alkalmazáskonfiguráció fent látható. A hardver egyetlen kiegészítője egy passzív piezo zümmögő a kiválasztott dallam lejátszásához. A szoftver alapvető változása egy rutin hozzáadása egy dallam lejátszásához, miután azonosította a zümmögőt és az Arduino hangrutinot.

A rendelkezésre álló dallamrészleteket a fejléc fájl, a Tunes.h tartalmazza, a szükséges támogatási struktúrák meghatározásával együtt. Minden dallam a hangokkal kapcsolatos struktúrák tömbjeként van definiálva, amelyek a hang gyakoriságát és időtartamát tartalmazzák. A hangfrekvenciákat egy külön fejlécfájl tartalmazza, a Pitches.h. A program és a fejlécfájlok letölthetők a szakasz végén. Mindhárom fájlt ugyanabban a könyvtárban kell elhelyezni.

A kiválasztás és azonosítás a következőképpen történik:

  1. A "felhasználó" beállítja a dip kapcsolókat a kívánt dallamhoz tartozó konfigurációban
  2. minden programhurok ciklusban az analóg olvasó segítségével megkapja az aktuális dip kapcsoló beállítás azonosítóját
  3. A 2. lépés konfigurációs azonosítóját összehasonlítják a rendelkezésre álló dallamlista összehasonlítóival
  4. Ha talál egyezést, a playTune rutin meghívásra kerül a dallamlista eléréséhez szükséges információkkal

    Az Arduino hang funkció használatával minden hangot a zümmögő játszik le

  5. Ha nem talál egyezést, akkor nem kell intézkedni
  6. ismételje meg az 1-5

A rendelkezésre álló dallamok DIP kapcsolójának beállításait az alábbi táblázat mutatja, ahol az 1 azt jelenti, hogy a kapcsoló be van kapcsolva, a 0 kikapcsol. Emlékezzünk vissza, hogy a dip kapcsoló tájolása az 1-es kapcsolót a bal szélső helyzetbe helyezi (a 80K ellenálláshoz tartozóhoz).

NÉV 1. kapcsoló 2. kapcsoló 3. kapcsoló 4. kapcsoló
Dani fiú 1 0 0 0
Kis medve 0 1 0 0
Oroszlán ma éjjel alszik 1 1 0 0
Senki sem ismeri a bajt 0 0 1 0
Csodálatos Grace 0 0 0 1
Üres hely 1 0 0 1
MockingBird Hill 1 0 1 1

A piezo zümmögő hangminősége természetesen nem túl jó, de legalább felismerhető. Valójában, ha a hangokat mérik, akkor nagyon közel állnak a hangok pontos gyakoriságához. A program egyik érdekes technikája, hogy a dallamadatokat a flash/program memória részben tárolja az alapértelmezett adatmemória rész helyett a PROGMEM irányelv használatával. Az adatrész tartalmazza a programfeldolgozó változókat, és sokkal kisebb, körülbelül 512 bájt néhány ATtiny mikrokontroller esetében.

Ajánlott: