Indholdsfortegnelse:

Microcontroller Fabric Tone Generator i C-kode: 8 trin (med billeder)
Microcontroller Fabric Tone Generator i C-kode: 8 trin (med billeder)

Video: Microcontroller Fabric Tone Generator i C-kode: 8 trin (med billeder)

Video: Microcontroller Fabric Tone Generator i C-kode: 8 trin (med billeder)
Video: How to make a LED digital counter using 7- Segment Display 2024, Juli
Anonim
Mikrocontroller Fabric Tone Generator i C-kode
Mikrocontroller Fabric Tone Generator i C-kode

I slutningen af oktober sidste år sendte instruktører -brugeren carmitsu mig en besked, efter at jeg havde set min madkassesynt. Fra hans budskab: Jeg underviser i musik i folkeskolen. Vi spiller meget blokfløjtemusik. dvs. børnene spiller små fløjter …… Jeg har flere børn med særlige behov, der kan bruge disse sorte plakatbrætter med cirkler, der har navnet på sedlen på. Disse elever skubber på cirklerne med notenavne på samme tid, mens resten af eleverne spiller en sang….. De fleste børn med særlige behov kan gøre dette ret godt og i takt med musikken. Det, jeg leder efter, er at bygge en meget enkel lydgenerator, så disse børn kan spille den samme tonehøjde som dem, der spilles af eleverne på deres optagere. Jeg ville kun være et par pladser. Jeg tænkte, at jeg kunne fastgøre en slags lille knap til bunden af deres runde cirkler, så når de skubber på dem, kommer lyden ud af en lille højttaler, højt nok, så de kunne høre. Hvordan kunne jeg modstå at have en mor, der er lærer og kunne lide skolen? Sandt sagt, det kunne jeg ikke. Dette er stort set en krønike af projektet og instruktioner om, hvordan du bygger dit eget.

Trin 1: Begyndelsen eller hvorfor jeg ikke kunne holde mig til analog

Begyndelsen eller hvorfor jeg ikke kunne holde mig til analog
Begyndelsen eller hvorfor jeg ikke kunne holde mig til analog

De gode ting starter på den næste side. Hvis du vil vide, hvordan jeg endte med at bruge de dele, jeg lavede, kan du læse videre. Den ægte timer: Efter at have tænkt lidt over projektet tænkte jeg straks på piezo-tonegeneratoren fra min op-amps Forest Mims III-bog. Det virkede som en god vej at gå, det er bare en piezo, en 741 IC og et par passive komponenter. Ikke noget stort problem? Det har 2 problemer, 1) når du trykker på kontakten, er det muligt at ændre tonehøjden 2) det er forbandet næsten umuligt at stille ind. Den første kunne sandsynligvis overvindes med noget debounce -teknologi, selvom jeg ikke vidste, hvordan jeg skulle gøre det uden at tilføje en anden tæller. Det kan også være et problem med at bruge en piezo. Det andet nummer blev bare uhåndterligt, da du begyndte at forsøge at ramme en bestemt tonehøjde. Hvad med 555? Databladet viser en time dlay -funktion baseret på modstande og kondensatorer. Hvilket er fantastisk, indtil du begynder at indtaste de faktiske værdier for virkelige dele, det er, når du finder at slå en 440Hz tonehøjde begynder at blive lidt vanskelig. Du kan bruge trim potter til at få det indstillet, men over tid har de en tendens til at bevæge sig. Konstant tuning af instrumentet, samlet oven på en hurtig stigning i omkostninger og mængde dele, og min kone lavede tonehøjden, da hun trykkede på knappen, dræbte 555 for dette projekt. Op-forstærker: Intet problem, folk har lavet synths med op-ampere siden før jeg blev født. Hvor svært kunne det være at lave en virkelig enkel, med få dele og specifikke noter? Hårdere end jeg troede. De fleste designs derude er meget komplicerede til dette projekt. Synth designere er ude efter den perfekte bølgeform/tone. Dette er i direkte modstrid med et projekt, der formodes at være billigt nok til skole- eller lærerbudgetter. At bygge et tastatur er let nok, det er bare en flok modstande og strøm eller en flok dioder og strøm. Det er resten af kredsløbets design og omkostningerne ved brugerdefinerede pc'er, der begynder at komme ud af hånden for nogen på et begyndende elektronikniveau. Redefinition af projekt: Så projektet blev omdefineret, før jeg overhovedet kom i gang. Jeg havde brug for noget, der kunne skifte en højttalerpind i tide med et tryk på en knap. Jeg ønskede ikke at skulle designe og købe et printkort. Dette skulle bruge så få komponenter som muligt og samles som et begyndersæt. Det stirrede mig i ansigtet hele tiden. Duh !! Mikrokontroller! Mikrocontroller: Så efter at have købt både et Arduino -kit med moderne enheder Bare Bones og et Evil Mad Scientist Simple Target Board og ladet dem sidde på mit skrivebord i flere måneder uden at blive brugt, havde jeg det perfekte introduktionsprojekt. Jeg begyndte at kigge på den tid, det tager at sammensætte begge dele, indlæringskurven for koden, omkostningerne, de nødvendige ekstra dele og få den til at gøre, hvad jeg vil, og bosatte sig på målbrættet. Omkostningerne var temmelig lige, $ 15 plus et $ 20 FTDI -kabel til Arduino, $ 12 plus en $ 22 USBtinyISP -programmør. Jeg kendte allerede C ++ fra det lille college, jeg kunne stå og regnede med, at C til mikrokontrollere ikke ville være så slemt, mens jeg ikke havde nogen Arduino -oplevelse udover at blinke med et lys for at sikre, at jeg satte mit kit korrekt sammen. Begge dele kan monteres. Det var stort set et opkast, så jeg besluttede mig for de færre dele af de to, målbrættet.

Trin 2: Hvad du har brug for Rev 1

Hvad du har brug for Rev 1
Hvad du har brug for Rev 1

Dele OmkostningerUSBtinyISP AVR Programmeringssæt (USB SpokePOV Dongle) v2.0 $ 22.00https://www.adafruit.com/index.php? Main_page = product_info & cPath = 16 & products_id = 46Evil Mad Scientist labs ATmegaXX8 Mini Dev Kits $ 12Hoveder, 6-benet DIP, 5-pk $ 2,75https://evilmadscience.com/tinykitlist/74-atmegaxx8Højttaler (8-ohm Mini) $ 2,79https://www.radioshack.com/product/index.jsp? ProductId = 2062406SPST Normalt åbne midlertidige switches (vi brugte 5) $ 3,49 (4pack) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA "Batteriholder $ 1,79 https://www.radioshack.com/product/index.jsp? ProductId = 2102735SPST Submini Slide Switch (valgfri til afbryder) $ 2,69 (2-pakning) https://www.radioshack.com/product/index.jsp?productId=2062490LED og modstand (valgfrit, hvis du vil have en strømindikator) $ skal være gratis hvis de ligger rundt Wire $ skal også ligge rundt Sølvlodemaskine (hvis dette går overalt i nærheden af børn, skal du sandsynligvis ikke bruge bly, forældre bliver temmelig underlige om den slags;)) Gnidning af alkohol (for at gen move flux) Hvis du vil have nogle steder at spare penge, behøver du ikke at få dele fra RadioShack. Det gjorde jeg, fordi de er tætte og forudsigelige.

Trin 3: Montering Rev 1

Montering Rev 1
Montering Rev 1
Montering Rev 1
Montering Rev 1

Sæt dine dele sammen som vist. Sørg for at bruge gnidningssprit og en flusebørste, når du er færdig med at slippe af med enhver strømning fra lodning. Skematisk er nedenfor for dem, der foretrækker det. D1 og R1 kan være, hvad du vil, det er bare et power -lys. C1 er bare for at hjælpe med at gøre strømmen lidt mere konsekvent. Jeg brugte en 10uF. Denne skematiske er den samme for de senere versioner, bare skift trykknapper ud til stofkontakter. i den sidste revision tilføjede jeg switches til PC4 og PC5 eller ben 27 og 28.

Trin 4: Hvad du har brug for Rev 2

Hvad du har brug for Rev 2
Hvad du har brug for Rev 2

Så dybest set bytter du Radio Shack -knapperne ud til håndlavede stof. Du har brug for: Flere farver stof eller en farve, hvis du vil have hver note den samme farve. Quiltesektionen i din nærmeste stofbutik er det bedste sted at få dette billigt. Quiltkvartaler er $ 1,50, og du kan få masser af kontakter ud af en. Ledende stof, jeg foreslår, at Flectron -stoffet fra LessEMF er $ 20 for et 12 "x54" stykke øje til fastgørelse af ledningen til stoffet. Du kan få dem i de fleste stofbutikker billigt. JoAnn har værktøjet og 25 for $ 2 Du skal bruge en hammer til dette. Tråd, jeg brugte 22AWG, jeg foreslår mindre, hvis du har det. Smeltning, for at få det farvede og ledende stof til at hænge sammen. Spørg i butikken, og du kan sikkert købe det ved gården. Dette ville sandsynligvis fungere fint, selvom jeg foreslår, at du spørger nogenBatting, jeg brugte først virkelig løse ting og skiftede derefter til noget strammere strik. Jeg foreslår, at du bare prøver et par forskellige, indtil du finder ud af, hvad der fungerer bedst. Varmekrympeslange, dette gjorde det hele meget mere håndterbart. krympekabler sammen, når de passerer hinanden, og de forbliver meget bedre.

Trin 5: Montering Rev 2

Samling Rev 2
Samling Rev 2
Samling Rev 2
Samling Rev 2
Samling Rev 2
Samling Rev 2

Læg det flerfarvede stof over hinanden og skær en firkant ud, det behøver ikke at være perfekt. Stryg stoffet for at få eventuelle folder ud, læg dem oven på hinanden igen og sørg for, at kanterne alle matcher. Skær kanter, der ikke gør det. Skær den øverste og nederste runde, så venstre og højre side er lige. Du kommer til at vende kontakten efter syning, så lad være med at gøre de afrundede sider for runde og efterlade nok højde på de flade sider til let at skubbe kontakten igennem, når du er færdig. Rund den flade side af den første og sidste kontakt ud. Kør videre til din symaskine, og sæt to af rundene sammen, så den gode side vender mod hinanden og sy en søm på de flade dele. Når toppen af knapperne er syet, skær firkanter ud af det ledende stof og smelt den ene side. Klip ledningen i længden, og tag den ene ende af. lod ledningen rundt om en af øjet. (loddetøjet vil sandsynligvis ikke klæbe til øjet) Skær et lille hul i stoffet i det ene hjørne og hammer øjet for at fastgøre stoffet og ledningen. fjern bagsiden fra fusionen, og smelt det ledende stof på bagsiden af det farvede stof. Gentag for alle kontakter. For at gøre tingene lettere kan du varme krympe rørene sammen, når en tråd passerer ledningen til den næste switch. Få eller lav et stykke stof i længden af switch -sættet og skær en strimmel ledende stof i længden af det. I modsætning til de farvede kontakter er dette et langt stykke. Dette er, hvad knapperne berører for at oprette forbindelsen. Skær en lille slids og fastgør en ledning til den med et øje, som de farvede switch -toppe. Smelt det på bagsiden af bundstoffet. Sy toppen og bunden sammen med det ledende stof udad, brug en gårdpind til at vende sættet, efter at det er syet. Skær et par små huller i vaden, jeg brugte en spisepind til at få en cirkel, fjern derefter bare spisepinden og lav snittet. Skær dem i form, og sæt dem ind i kontakterne. Det er det, der holder det ledende stof fra hinanden. Det kan være lettere at indsætte vatteringen, mens du vender omskifterne i stedet for efter. De ting, jeg brugte, revet temmelig dårligt op, mens jeg indsatte det, og jeg var nødt til at få en anden batting. Til sidst skal du tilslutte ledningerne til målbrættet, og du er klar. Den lange bundstrimmel bliver slebet.

Trin 6: Hvad du har brug for Rev 3

Hvad du har brug for Rev 3
Hvad du har brug for Rev 3

I Rev 3 lavede jeg kontakterne uafhængigt af ledningerne. Dette sparede masser af tid. Jeg kan også meget mere lide udseendet af det færdige resultat. Så her er de nye dele, du har brug for: Snaps, Har lige fået dem fra JoAnn's. De kom med et installationsværktøj, ikke så dårligt for $ 7. Jeg vil foreslå et af tængeværktøjerne i stedet, da jeg var nødt til at tage mit værktøj fra hinanden for at installere snapsene i midten. Syninger ville være et godt alternativ, selvom de tager længere tid at klæbe. Ledende tråd, Spark Fun har ting, der kan gå i din symaskine. Jeg var nødt til at gå rigtig langsomt i min maskine, ellers ville tråden gå i stykker. Dit kilometertal kan variere

Trin 7: Montering Rev 3

Montering Rev 3
Montering Rev 3
Montering Rev 3
Montering Rev 3
Montering Rev 3
Montering Rev 3
Montering Rev 3
Montering Rev 3

Denne revision var meget bedre end den sidste i form af tid til opførelse. Plus, at have flytbare switches reddede min forstand mere end én gang. Start med at lave basen. Det er bare et quiltkvartal foldet på midten. Læg et lag vattering på toppen og sy, og efterlad et hul for at vende det. Skub tingen gennem hullet, og du har dybest set en pude -ting. Jeg quiltede det, så det var lettere at arbejde med. Brug almindelig tråd og gå amok. Jeg lavede diamanter på denne, men måske næste gang vil jeg lægge en drage i ryggen eller noget sejt. Nu, til kontakterne. Jeg kan godt lide dette design, fordi du stort set kan lave masser af disse på forhånd og bare bruge det, du vil. start med at bruge et stykke pap, papir eller stof, og skær en pæreform ud af det. Brug det som en vejledning til at skære en top og en bund for hver switch. Jeg klipper en farve til hver bund og en anden farve til toppen, men du kan være kreativ og gøre, hvad du vil. Skær din guide ned til en slikkepindform, der let passer ind i kontakten. Forlæng "pinden", så den kan vikle sig over kanten af "pæren". Skær formen ud af det smeltende og ledende stof og smelt den ene side af det ledende stof. Fjern bagsiden af fuseringsmaterialet og smelt den til toppen af stoffet, der vil være på bunden, og bunden af stoffet, der vil være på toppen. Vikl den ekstra smule rundt om toppen. Gå videre til din symaskine og læg batting med huller mellem det øverste og nederste stof. Sy udenfor det ledende stof og spring over "stick" -delen af kontakten. Jeg fandt ud af, at det er muligt at sy det øverste ledende stof til bunden og skabe en kort. Det er bedre ikke at sy igennem det ledende stof. Vedhæft snaps, og skiftet er udført. Jeg fandt det lettere at bruge han -snap til alle bund-/GND -forbindelser og hun -snap til alle toppe. Dette gør alle switches udskiftelige. Kredsløbet: Sagen ved at skære runder er, at du har mange ekstra bits. Jeg tog mine rester, smeltede store stykker fusion til store stykker ledende stof og brugte dem til at skære de mindre rektangler ud, jeg brugte som puder. Læg groft dine kontakter op og smelt puderne til basen med plads nok til at sy en snor til dem og få et snap. Foden på symaskinen, jeg brugte, tog ikke venligt til at være rigtig tæt på snap, så husk det, og giv dig selv lidt plads. Da jeg fik ledende tråd, der kunne gå i min symaskine, syede jeg lige en streg fra pude til pude og tilbage. Jeg var nødt til at gå langsomt, ellers ville tråden gå i stykker, men det var et ton hurtigere end håndsyning. Også med ledende tråd på spolen og nålen fik jeg en rigtig god solid forbindelse. Tingene flosser som skøre, men lidt håndværkslim eller Elmers rydder det helt op. Prøv at holde linjerne langt væk fra hinanden, og du bør ikke have nogen problemer. Sidste samling: Klik på alle dine kontakter, tilslut kortet, indlæs koden, og du er færdig. Jeg brugte wire til at komme fra brættet til puden og syede så bare ledningen til basen i hånden. Til den næste version vil jeg montere brættet i en plastikæske med snaps for at fastgøre det til basen, så inaktive fingre ikke trækker det fra hinanden.

Trin 8: Kode

Kode
Kode

Hvis du aldrig har programmeret en chip før, er dette en noget skræmmende opgave. Det hjælper ikke, at værktøjerne er flakede, og det meste af tiden skal du udføre den samme operation flere gange. De to bedste ressourcer, jeg har fundet for at få en forståelse af, hvad der foregår, er siden til USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ og crashkurset i programmering af støjlegetøjet, http:/ /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Disse skal kunne komme i gang.

Mange mennesker kan lide Arduino for denne kodning, og der er ikke noget i vejen med at bruge det, bortset fra at jeg føler, at det tilføjer en masse oppustethed til et normalt simpelt program. Jeg kendte også C og kender ikke Arduino. Måske en dag, hvis der er tid.:) Kode: {{{#include // Brug en nål til at tænde SPK /// Typedefs ////////// typedef unsigned char u8; int main (void) {u8 btnState0; u8 btnState1; u8 btnState2; u8 btnState3; u8 btnState4; u8 btnState5; u8 btnState6; DDRB = (1 << DDB6); // Indstil SPK til output PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Indstil knap høj PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Opsætning af timer, mens (1) {btnState0 = ~ PINC & (1 << PC5); btnState1 = ~ PINC & (1 << PC4); btnState2 = ~ PIND & (1 << PD0); btnState3 = ~ PIND & (1 << PD1); btnState4 = ~ PIND & (1 << PD2); btnState5 = ~ PIND & (1 << PD3); btnState6 = ~ PIND & (1 << PD4); hvis (btnState0) {if (TCNT2> = 190) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} hvis (btnState1) {if (TCNT2> = 179) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState2) {if (TCNT2> = 159) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState3) {if (TCNT2> = 142) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} hvis (btnState4) {if (TCNT2> = 126) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} hvis (btnState5) {if (TCNT2> = 119) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} hvis (btnState6) {if (TCNT2> = 106) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }}}}}}}} Hvor kommer pladserne fra? Lidt matematik var nødvendig. Timeruret på atmega 168 kører ved 1MHz. Det er alt for hurtigt til lyd, så vi skal bruge prescaler /8. Da vi har brug for at vende outputstiften højt og lavt for at lave 1 cyklus, skal vi dividere svaret med 2 for at komme frem til den rigtige tonehøjde. Formlen ser sådan ud, Pitch for at indsætte kode = (1000000/8)/(Målfrekvens*2) For A (440) ville dette være 125000/880 = 142,045 eller 142 til vores formål, da værdien skal være et heltal. Målfrekvenserne for noter kan findes næsten hvor som helst online og er generelt alle ens. Jeg vil stadig tilføje en sagsfremstilling i stedet for at bruge en masse Ifs og bruge PWM til bedre at kontrollere lydstyrken og tonehøjden på højttaleren, men i øjeblikket fungerer dette.

Anbefalede: