Indholdsfortegnelse:
- Trin 1: Påkrævet hardware
- Trin 2: Multi-switch Metode Forklaring
- Trin 3: Comparator Regneark
- Trin 4: Afspil en melodi
Video: DIP Tune Selector ved hjælp af 1 pin: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
For et stykke tid siden arbejdede jeg på et "musikboks" -projekt, der skulle vælge mellem hele 10 forskellige melodiuddrag. Et naturligt valg til at vælge en bestemt melodi var en 4 -pin dip switch, da 4 switches giver 24= 16 forskellige indstillinger. Imidlertid kræver implementering af brute force til denne fremgangsmåde 4 enhedsnåle, en for hver switch. Da jeg planlagde at bruge ATtiny85 til udvikling, var tab af 4 ben lidt for meget. Heldigvis stødte jeg på en artikel, der beskriver en genial metode til at bruge 1 analog pin til at håndtere flere switchindgange.
Multi-switch; 1-input teknikken bruger et spændingsdeler kredsløb til at give en unik heltal værdi for hver af de 16 mulige switch indstillingskombinationer. Dette sæt med 16 heltals -id'er bruges derefter i applikationsprogrammet til at knytte en handling til en indstilling.
Denne instruerbare anvender multi-switch-metoden til at implementere melodivalg til musikboksapplikationen. Den valgte melodi afspilles derefter gennem en piezo -summer ved hjælp af Arduino -tonefunktionen.
Trin 1: Påkrævet hardware
Brug af UNO som implementeringsplatform minimerer antallet af nødvendige hardwarekomponenter. Implementering af multi-switch input-metoden kræver kun en 4-polet dip switch, de 5 modstande, der bruges til spændingsdeleren, og tilslutningskablet til forbindelser. En piezo -summer er tilføjet til konfigurationen til implementering af musikboksens tune -vælger. Afhængigt af hvilken type dip -switch der bruges, er det valgfrit at bruge en 2x4 8 -polet fatning til at slutte dip -kontakten til brødbrættet, da standard dip -switch -pins synes at være lavet til lodning til et perfboard, der ikke tilsluttes direkte til et brødbræt. Stikket stabiliserer dip -switch -forbindelserne og forhindrer, at kontakten let kan løftes, når vippekontakterne indstilles.
Navn | Mulig kilde | Hvordan brugt |
---|---|---|
4-polet dip-switch | Valg af melodi | |
2x4 pin stik (valgfrit) | Amazon | Stolperne på de fleste dip switches holder ikke kontakten særlig godt i et brødbræt. Et stik hjælper med at gøre forbindelsen mere solid. Et alternativ er at finde en dip -switch, der virkelig er lavet til brødbræt med almindelige IC -ben. |
modstande:
|
Implementere spændingsdeler | |
passiv piezo -summer | Amazon | Spil melodi som drevet af applikationen via Arduino -tonefunktionen |
Trin 2: Multi-switch Metode Forklaring
Dette afsnit diskuterer de underliggende begreber for multi-switch-metoden og udvikler de ligninger, der kræves til enkeltstående beregning af unikke identifikatorer for hver af de 16 mulige dip switch-indstillingskonfigurationer. Disse identifikatorer kan derefter bruges i et applikationsprogram til at knytte en switch -konfiguration til en handling. For eksempel vil du måske have indstillingen - tænd 1, sluk 2, sluk 3, sluk 4 (1, 0, 0, 0) - for at spille Amazing Grace og (0, 1, 0, 0) for at afspille Løven sover i nat. For kortfattet og præcist betegnes konfigurationsidentifikatorerne som komparatorer i resten af dokumentet.
Grundkonceptet for multi-switch-metoden er Voltage Divider-kredsløbet, der består af 2 i serie modstande forbundet til en indgangsspænding. Udgangsspændingsledningen er forbundet mellem modstandene, R1 og R.2, som vist ovenfor. Delerens udgangsspænding beregnes som indgangsspændingen ganget med forholdet mellem modstand R2 til summen af R1 og R.2 (ligning 1). Dette forhold er altid mindre end 1, så udgangsspændingen er altid mindre end indgangsspændingen.
Som angivet i designdiagrammet ovenfor er multikontakten konfigureret som en spændingsdeler med R2 fast og R1 lig med komposit/ækvivalent modstand for de 4 dip switch modstande. Værdien af R1 afhænger af, hvilke dip switches der er tændt og derfor bidrager til den sammensatte modstand. Da dip -switch -modstandene er parallelle, angives den ækvivalente modstandsberegningsligning i form af reciprokken af komponentmodstandene. For vores konfiguration og det tilfælde, at alle kontakter er tændt, bliver ligningen
1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000
giver R1 = 5333,33 volt. For at tage højde for, at mindst én af kontakterne er slukket på de fleste indstillinger, bruges switchtilstanden som en multiplikator:
1/R1 = s1*1/80000 + s2*1/40000 + s3*1/20000 + s4*1/10000 (2)
hvor tilstandsmultiplikatoren, sjeg, er lig med 1, hvis kontakten er tændt og lig med 0, hvis kontakten er slukket. R1 kan nu bruges til at beregne det modstandsforhold, der er nødvendigt i ligning 1. Brug det tilfælde, hvor alle kontakter er tændt som eksemplet igen
FORHOLD = R2/(R1+R2) = 10000/(5333.33+10000) =.6522
Det sidste trin i beregningen af den forudsagte komparatorværdi er multiplikation af RATIO med 1023 for at efterligne effekten af analogRead -funktionen. Identifikatoren for det tilfælde, hvor alle kontakter er tændt, er derefter
komparator15 = 1023*.6522 = 667
Alle ligningerne er nu på plads til beregning af identifikatorer for de 16 mulige switchindstillinger. At opsummere:
- R1 beregnes ved hjælp af ligning 2
- R1 og R.2 bruges til at beregne den tilhørende modstandsforhold
- RATIO ganges med 1023 for at opnå sammenligningsværdien
- eventuelt kan den forudsagte udgangsspænding også beregnes som RATIO*Vin
Sættet med komparatorer afhænger kun af de modstandsværdier, der bruges til spændingsdeleren, og er en unik signatur for konfigurationen. Fordi dividerens udgangsspændinger vil svinge fra kørsel til kørsel (og læse for at læse), betyder unikt i denne sammenhæng, at selvom to sæt identifikatorer muligvis ikke er nøjagtig de samme, så er de tæt nok på, at komponentkomparatorforskellene falder inden for en lille for- angivet interval. Intervalstørrelsesparameteren skal vælges stor nok til at tage højde for forventede udsving, men lille nok til, at forskellige switchindstillinger ikke overlapper hinanden. Normalt fungerer 7 godt for intervallet halvbredde.
Et sæt komparatorer til en bestemt konfiguration kan opnås på flere måder - kør demo -programmet og registrer værdierne for hver indstilling; brug regnearket i det næste afsnit til at beregne; kopiere et eksisterende sæt. Som nævnt ovenfor vil alle sæt sandsynligvis være lidt anderledes, men burde fungere. Jeg foreslår at bruge metodeforfatterens sæt identifikatorer til multi-switch opsætningen og regnearket fra det næste afsnit, hvis nogen af modstandene ændres betydeligt eller flere modstande tilføjes.
Følgende demo -program illustrerer brug af komparatorerne til at identificere den aktuelle dip -switch -indstilling. I hver programcyklus udføres en analogRead for at opnå en identifikator for den aktuelle konfiguration. Denne identifikator sammenlignes derefter på tværs af sammenligningslisten, indtil der findes et match, eller listen er opbrugt. Hvis der findes et match, udsendes en outputbesked til verifikation; hvis der ikke findes en advarsel. En forsinkelse på 3 sekunder indsættes i sløjfen, så vinduet med det serielle output ikke bliver overvældet af meddelelser og giver lidt tid til at nulstille dip -switch -konfigurationen.
//-------------------------------------------------------------------------------------
// Demoprogram til at læse spændingsdelerudgangen og bruge den til at identificere // nuværende dip switch -konfiguration ved at se outputværdien op i en række // sammenligningsværdier for hver mulig indstilling. Værdierne i opslagsmatrixen kan // enten hentes fra en tidligere kørsel til konfigurationen eller gennem beregning // baseret på de underliggende ligninger. // ------------------------------------------------ -------------------------------------- int komparator [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Definer behandlingsvariabler int dipPin = A0; // analog pin til spændingsdeler input int dipIn = 0; // holder divider spændingsoutput oversat med analogRead int count = 0; // loop counter int epsilon = 7; // sammenligningsinterval halvbredde bool dipFound = false; // sand hvis strømspændingsdelerudgang findes i opslagstabelløget opsætning () {pinMode (dipPin, INPUT); // konfigurer spændingsdeler -pin som en INPUT Serial.begin (9600); // aktiver seriel kommunikation} void loop () {delay (3000); // holde output fra at rulle for hurtigt // Initialiser opslagsparametre count = 0; dipFound = false; // Læs og dokumenter strømudgangsspænding dipIn = analogRead (dipPin); Serial.print ("divider output"); Serial.print (dipIn); // Søg i sammenligningslisten efter den aktuelle værdi, mens ((count <16) && (! DipFound)) {if (abs (dipIn - comparator [count]) <= epsilon) {// fandt det dipFound = true; Serial.print ("fundet ved indgang"); Serial.print (count); Serial.println ("værdi" + streng (komparator [count])); pause; } tæl ++; } hvis (! dipFound) {// værdi ikke i tabel; skulle ikke ske Serial.println ("OOPS! Ikke fundet; ring bedre til Ghost Busters"); }}
Trin 3: Comparator Regneark
Beregningerne for de 16 komparatorværdier er angivet i regnearket vist ovenfor. Den medfølgende excel -fil kan downloades nederst i dette afsnit.
Regneark kolonner A-D registrerer dip switch-modstandens værdier og de 16 mulige switch-indstillinger. Bemærk, at hardware -DIP -switchen, der er vist i diagrammet med fritz -design, faktisk er nummereret fra venstre mod højre i stedet for den højre til venstre -nummerering, der er vist i regnearket. Jeg fandt dette noget forvirrende, men alternativet sætter ikke "1" -konfigurationen (0, 0, 0, 1) i første række på listen. Kolonne E bruger formel 2 i det foregående afsnit til at beregne spændingsdelerækvivalentmodstanden R1 for indstillingen. Kolonne F bruger dette resultat til at beregne den tilhørende modstandsforhold, og endelig multiplicerer kolonne G RATIO med analogRead max -værdien (1023) for at opnå den forudsagte komparatorværdi. De sidste 2 kolonner indeholder de faktiske værdier fra en kørsel af demo -programmet sammen med forskellene mellem de forudsagte og de faktiske værdier.
Det foregående afsnit nævnte tre metoder til at opnå et sæt komparatorværdier inklusive forlængelse af dette regneark, hvis modstandsværdierne ændres væsentligt eller flere switches tilføjes. Det ser ud til, at små forskelle i modstandsværdierne ikke i væsentlig grad påvirker de endelige resultater (hvilket er godt, da modstandsspecifikationer giver en tolerance, siger 5%, og modstanden sjældent er lig med dens faktiske angivne værdi).
Trin 4: Afspil en melodi
For at illustrere, hvordan multi-switch-teknikken kan bruges i en applikation, ændres demo-programmet til sammenligning fra afsnittet "Metodeforklaring" for at implementere melodiudvælgelsesprocessen for musikboksprogrammet. Den opdaterede applikationskonfiguration er vist ovenfor. Den eneste tilføjelse til hardwaren er en passiv piezo -summer til at afspille den valgte melodi. Den grundlæggende ændring af softwaren er tilføjelse af en rutine til afspilning af en melodi, når den er identificeret, ved hjælp af summer og Arduino -tone -rutine.
De tilgængelige melodiuddrag findes i en header -fil, Tunes.h, sammen med definition af de nødvendige understøttelsesstrukturer. Hver melodi er defineret som en række noterelaterede strukturer, der indeholder notefrekvensen og varigheden. Notefrekvenserne findes i en separat header -fil, Pitches.h. Program- og overskriftsfiler kan downloades i slutningen af dette afsnit. Alle tre filer skal placeres i den samme mappe.
Udvælgelse og identifikation foregår som følger:
- "Brugeren" indstiller dip switches i den konfiguration, der er knyttet til den ønskede melodi
- for hver programsløjfe -cyklus opnås identifikatoren for den aktuelle dip -switch -indstilling via analogRead
- Trin 2 -konfigurations -id'et sammenlignes med hver af komparatorerne i den tilgængelige melodiliste
-
Hvis der findes et match, kaldes playTune -rutinen op med de oplysninger, der er nødvendige for at få adgang til melodilisten
Ved hjælp af Arduino -tonefunktionen afspilles hver tone gennem summeren
- Hvis der ikke findes et match, foretages der ingen handling
- gentag 1-5
DIP -switchindstillinger for de tilgængelige melodier vises i nedenstående tabel, hvor 1 betyder, at kontakten er tændt, 0 slukker. Husk, at dip-kontakten er orienteret, placerer switch 1 i positionen til venstre mest (den, der er forbundet med 80K-modstanden).
NAVN | Kontakt 1 | Kontakt 2 | Kontakt 3 | Kontakt 4 |
Danny Boy | 1 | 0 | 0 | 0 |
Lille bjørn | 0 | 1 | 0 | 0 |
Løven sover i nat | 1 | 1 | 0 | 0 |
Ingen kender problemerne | 0 | 0 | 1 | 0 |
Fantastisk nåde | 0 | 0 | 0 | 1 |
Blank plads | 1 | 0 | 0 | 1 |
Spottende Bird Hill | 1 | 0 | 1 | 1 |
Lydkvaliteten fra en piezo -summer er bestemt ikke god, men den er i det mindste genkendelig. Faktisk hvis tonerne måles, er de meget tæt på tonernes nøjagtige frekvens. En interessant teknik, der bruges i programmet, er at gemme tune -data i flash-/programhukommelsesafsnittet i stedet for standarddatahukommelsesafsnittet ved hjælp af PROGMEM -direktivet. Datasektionen indeholder programbehandlingsvariablerne og er meget mindre, omkring 512 bytes for nogle af ATtiny -mikrokontrollerne.
Anbefalede:
DIY -- Sådan laver du en edderkoprobot, der kan kontrolleres ved hjælp af smartphone ved hjælp af Arduino Uno: 6 trin
DIY || Sådan laver du en edderkoprobot, der kan styres ved hjælp af smartphone Brug af Arduino Uno: Mens du laver en edderkoprobot, kan man lære så mange ting om robotik. Ligesom at lave robotter er underholdende såvel som udfordrende. I denne video vil vi vise dig, hvordan du laver en Spider -robot, som vi kan betjene ved hjælp af vores smartphone (Androi
Kontrol ledt over hele verden ved hjælp af internet ved hjælp af Arduino: 4 trin
Kontrol ledt over hele verden ved hjælp af internet ved hjælp af Arduino: Hej, jeg er Rithik. Vi kommer til at lave en internetstyret LED ved hjælp af din telefon. Vi kommer til at bruge software som Arduino IDE og Blynk.Det er enkelt, og hvis det lykkedes dig, kan du styre så mange elektroniske komponenter, du ønskerTing We Need: Hardware:
Sådan laver du en drone ved hjælp af Arduino UNO - Lav en quadcopter ved hjælp af mikrokontroller: 8 trin (med billeder)
Sådan laver du en drone ved hjælp af Arduino UNO | Lav en Quadcopter ved hjælp af mikrokontroller: Introduktion Besøg min Youtube -kanal En Drone er en meget dyr gadget (produkt) at købe. I dette indlæg vil jeg diskutere, hvordan jeg gør det billigt ?? Og hvordan kan du lave din egen sådan til en billig pris … Nå i Indien alle materialer (motorer, ESC'er
RF 433MHZ radiostyring ved hjælp af HT12D HT12E - Lav en RF -fjernbetjening ved hjælp af HT12E & HT12D med 433mhz: 5 trin
RF 433MHZ radiostyring ved hjælp af HT12D HT12E | Oprettelse af en RF -fjernbetjening ved hjælp af HT12E & HT12D med 433mhz: I denne instruktør vil jeg vise dig, hvordan du laver en RADIO -fjernbetjening ved hjælp af 433mhz sendermodtagermodul med HT12E -kode & HT12D -dekoder IC.I denne instruktive kan du sende og modtage data ved hjælp af meget meget billige KOMPONENTER SOM: HT
Trådløs fjernbetjening ved hjælp af 2,4 GHz NRF24L01 -modul med Arduino - Nrf24l01 4 -kanals / 6 -kanals sender modtager til Quadcopter - Rc Helikopter - Rc -fly ved hjælp af Arduino: 5 trin (med billeder)
Trådløs fjernbetjening ved hjælp af 2,4 GHz NRF24L01 -modul med Arduino | Nrf24l01 4 -kanals / 6 -kanals sender modtager til Quadcopter | Rc Helikopter | Rc -fly ved hjælp af Arduino: At betjene en Rc -bil | Quadcopter | Drone | RC -fly | RC -båd, vi har altid brug for en modtager og sender, antag at vi til RC QUADCOPTER har brug for en 6 -kanals sender og modtager, og den type TX og RX er for dyr, så vi laver en på vores