Innholdsfortegnelse:

Microcontroller Fabric Tone Generator i C-kode: 8 trinn (med bilder)
Microcontroller Fabric Tone Generator i C-kode: 8 trinn (med bilder)

Video: Microcontroller Fabric Tone Generator i C-kode: 8 trinn (med bilder)

Video: Microcontroller Fabric Tone Generator i C-kode: 8 trinn (med bilder)
Video: ChatGPT with Arduino Nano #arduino #chatgpt #technology #openAI #electronic 2024, Juli
Anonim
Mikrokontroller Fabric Tone Generator i C-kode
Mikrokontroller Fabric Tone Generator i C-kode

I slutten av oktober i fjor sendte instruktør -brukeren carmitsu meg en melding etter å ha sett lunchbox -synthen min. Fra budskapet hans: Jeg underviser i musikk på barneskolen. Vi spiller mye blokkfløyte musikk. dvs barna spiller små fløyter … Jeg har flere barn med spesielle behov som kan bruke disse svarte plakatbrettene med sirkler som har navnet på lappen på seg. Disse elevene presser på sirklene med notenavn samtidig som resten av elevene spiller en sang….. De fleste barn med spesielle behov kan gjøre dette ganske bra og i takt med musikken. Det jeg ser etter er å bygge en veldig enkel lydgenerator slik at disse barna kan spille samme tonehøyde som de som spilles av elevene på opptakerne. Jeg ville bare være noen få plasser. Jeg trodde jeg kunne feste en slags liten knapp til bunnen av de runde sirklene, slik at når de trykker på dem, kommer lyden ut av en liten høyttaler, høyt nok til at de kan høre. Hvordan kunne jeg motstå å ha en mor som er lærer og ha likt skolen? Sannheten skal sies at jeg ikke kunne. Dette er ganske mye en kronikk av prosjektet og instruksjoner om hvordan du bygger ditt eget.

Trinn 1: Begynnelsen eller hvorfor jeg ikke kunne holde meg til analog

Begynnelsen eller hvorfor jeg ikke kunne holde meg til analog
Begynnelsen eller hvorfor jeg ikke kunne holde meg til analog

De gode tingene starter på neste side. Hvis du vil vite hvordan jeg endte opp med å bruke delene jeg gjorde, kan du lese videre. Den virkelige timeren: Etter å ha tenkt litt på prosjektet tenkte jeg umiddelbart på piezo-tonegeneratoren fra min op-amps Forest Mims III-bok. Virket som en god vei å gå, det er bare en piezo, en 741 IC og et par passive komponenter. Ikke så farlig? Det har 2 problemer, 1) når du trykker på bryteren, er det mulig å endre tonehøyden 2) det er forbanna nesten umulig å stille inn. Den første kan sannsynligvis bli overvunnet med noen debounce -teknologi, selv om jeg ikke visste hvordan jeg skulle gjøre det uten å legge til en annen teller. Det kan også være et problem med bruk av en piezo. Den andre utgaven ble bare uhåndterlig da du begynte å prøve å treffe en bestemt tonehøyde. Hva med 555? Databladet viser en tidsdlay -funksjon basert på motstander og kondensatorer. Noe som er flott til du begynner å skrive inn virkelige verdier for virkelige deler, det er da du finner det vanskelig å slå en 440Hz tonehøyde. Du kan bruke trimpotter for å få den innstilt, men over tid pleier de å bevege seg. Konstant tuning av instrumentet, samlet på toppen av rask økning i kostnad og mengde deler, og min kone gjorde tonehøydeendringen da hun trykket på knappen drepte 555 for dette prosjektet. Op-forsterker: Ikke noe problem, folk har laget synths med op-ampere siden før jeg ble født. Hvor vanskelig kan det være å lage en veldig enkel, med få deler og spesifikke notater? Hardere enn jeg trodde. De fleste designene der ute er veldig kompliserte for dette prosjektet. Synth -designere er ute etter den perfekte bølgeformen/tonen. Dette er direkte i konflikt med et prosjekt som skal være billig nok for skole- eller lærerbudsjetter. Å bygge et tastatur er enkelt nok, det er bare en haug med motstander og strøm eller en haug med dioder og strøm. Det er resten av kretsdesignet, og kostnaden for tilpassede PCer som begynner å gå ut av hånden for noen på et begynnende elektronikknivå. Omdefinering av prosjekt: Så prosjektet ble omdefinert før jeg virkelig begynte. Jeg trengte noe som kunne veksle en høyttalerpinne, i tide, med et trykk på en knapp. Jeg ønsket ikke å måtte designe og kjøpe en PCB. Dette måtte bruke så få komponenter som mulig, og settes sammen som et nybegynnersett. Det stirret meg i ansiktet hele tiden. Duh !! Mikrokontroller! Mikrokontroller: Så etter å ha kjøpt både et Modern Devices Bare Bones Arduino -sett og et Evil Mad Scientist Simple Target Board og latt dem sitte på skrivebordet mitt i flere måneder uten å bli brukt, hadde jeg det perfekte introduksjonsprosjektet. Jeg begynte å se på tiden det tar å sette begge sammen, læringskurven for koden, kostnaden, tilleggsdelene som trengs og få den til å gjøre det jeg vil, og slo meg ned på målbrettet. Kostnaden var ganske jevn, $ 15 pluss en $ 20 FTDI -kabel for Arduino, $ 12 pluss en $ 22 USBtinyISP programmerer. Jeg visste allerede C ++ fra den lille høyskolen jeg kunne stå for, og tenkte at C for mikrokontrollere ikke ville være så ille, mens jeg hadde ingen Arduino -opplevelse annet enn å blinke med et lys for å sikre at jeg satte settet mitt ordentlig sammen. Begge kan monteres. Det var ganske mye et kast, så jeg bestemte meg for de færre delene av de to, målbrettet.

Trinn 2: Hva du trenger Rev 1

Hva du trenger Rev 1
Hva du trenger Rev 1

Deler KostnadUSBtinyISP AVR Programmerer Kit (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 $ 12Hoder, 6-pinners DIP, 5-pk $ 2,75 https://evilmadscience.com/tinykitlist/74-atmegaxx8Høyttaler (8-ohm Mini) $ 2,79https://www.radioshack.com/product/index.jsp? ProductId = 2062406SPST Normally Open Momentary Switches (vi brukte 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 lysbildebryter (valgfritt for strømbryter) $ 2,69 (2-pakning) https://www.radioshack.com/product/index.jsp?productId=2062490LED og motstand (valgfritt, hvis du vil ha strømlampe) $ bør være gratis hvis de ligger rundt Wire $ bør også ligge rundt Silver solder (hvis dette går i nærheten av barn, bør du sannsynligvis ikke bruke bly, foreldre blir ganske rare om den typen ting;)) Gni alkohol (for å re move flux) Hvis du vil ha noen steder å spare penger, trenger du ikke å kjøpe deler fra RadioShack. Jeg gjorde det fordi de er nære og forutsigbare.

Trinn 3: Montering Rev 1

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

Sett delene sammen som vist. Sørg for å bruke sprit og flussbørste når du er ferdig med å kvitte deg med eventuell fluss fra lodding. Skjematisk er nedenfor for de som foretrekker det. D1 og R1 kan være hva du vil, det er bare et strømlys. C1 er bare for å gjøre strømmen litt mer konsistent. Jeg brukte en 10uF. Denne skjemaet er det samme for de senere versjonene, bare bytt ut trykknapper for stoffbrytere. i den siste revisjonen la jeg til brytere til PC4 og PC5 eller pinner 27 og 28.

Trinn 4: Hva du trenger Rev 2

Hva du trenger Rev 2
Hva du trenger Rev 2

Så i utgangspunktet bytter du ut Radio Shack -knappene for håndlagde tekstiler. Du trenger: Flere stofffarger, eller en farge hvis du vil at hver note skal ha samme farge. Quiltingsdelen i din nærmeste stoffbutikk er det beste stedet å få dette billig. Quilting kvartaler er $ 1,50, og du kan få massevis av brytere ut av en. Ledende stoff, jeg foreslår at Flectron stoffet fra LessEMF er $ 20 for et 12 "x54" stykke Øyeletter for å feste ledningen til stoffet. Du kan kjøpe dem i de fleste stoffbutikker billig. JoAnn har verktøyet og 25 for $ 2 Du trenger en hammer for dette. Tråd, jeg brukte 22AWG, jeg foreslår mindre hvis du har det. Smelting, for å få det fargede og ledende stoffet til å henge sammen. Spør i butikken, og du kan sannsynligvis kjøpe den ved gården. Dette ville trolig fungere bra, selv om jeg foreslår at du spør noen. Batting, jeg brukte veldig løse ting først, og byttet deretter til noe strammere strikk. Jeg foreslår at du bare prøver et par forskjellige til du finner det som fungerer best. Varme krympeslanger, dette gjorde det hele mye mer håndterbart. krympekabler sammen når de passerer hverandre, og de vil bli mye bedre.

Trinn 5: Montering Rev 2

Montering Rev 2
Montering Rev 2
Montering Rev 2
Montering Rev 2
Montering Rev 2
Montering Rev 2

Legg det flerfargede stoffet over hverandre og klipp ut en firkant, det trenger ikke å være perfekt. Stryk stoffet for å få ut eventuelle bretter, legg dem på hverandre igjen og pass på at kantene stemmer overens. Klipp av kantene som ikke gjør det. Klipp toppen og bunnen av, og la venstre og høyre side være rette. Du kommer til å snu bryteren etter å ha sydd, så ikke gjør de avrundede sidene for runde og la nok høyde være på de flate sidene til å trykke bryteren lett når du er ferdig. Rund ut den flate siden av den første og siste bryteren. Hold over til symaskinen din og legg to av rundene sammen slik at den gode siden vender mot hverandre og sy en søm på de flate delene. Når toppen av knappene er sydd, kutt firkanter ut av det ledende stoffet og smelt den ene siden. Klipp ledningen i lengden og strip den ene enden. lodde ledningen rundt en av øyelokkene. (loddetinn vil sannsynligvis ikke feste seg til øyet) Klipp et lite hull i stoffet i det ene hjørnet og hamre øyet for å feste stoffet og ledningen. fjern støtten fra sikringen og smelt det ledende stoffet på baksiden av det fargede stoffet. Gjenta for alle bryterne. For å gjøre ting enklere, kan du varme krympeslangen sammen med ledningene hver gang en ledning passerer ledningen for neste bryter. Få eller lag et stoff i lengden på bryteren og klipp en stripe av ledende stoff i lengden på det. I motsetning til de fargede bryterne, er dette et langt stykke. Dette er hva knappene berører for å opprette tilkoblingen. Klipp en liten spalte og fest en ledning til den med et øye, som de fargede bryterplatene. Sikre det på baksiden av det nederste stoffet. Sy toppen og bunnen sammen med det ledende stoffet vendt ut, bruk en gårdspinne for å snu settet etter at det er sydd. Klipp noen små hull i vingen, jeg brukte en spisepinne for å få en sirkel, fjern deretter bare spisepinnen og kutt. Klipp dem i form og sett dem inn i bryterne. Dette er det som holder det ledende stoffet fra hverandre. Det kan være lettere å sette inn vekten mens du snur bryterne i stedet for etter. Tingene jeg brukte rev ganske dårlig mens jeg satte det inn, og jeg måtte få forskjellig batting. Til slutt koble ledningene til målbrettet, og du er klar. Den lange bunnlisten blir malt.

Trinn 6: Hva du trenger Rev 3

Hva du trenger Rev 3
Hva du trenger Rev 3

I Rev 3 gjorde jeg bryterne uavhengige av ledningene. Dette sparte massevis av tid. Jeg liker også utseendet på det ferdige resultatet mye mer. Så her er de nye delene du trenger: Snaps, Har akkurat fått dem fra JoAnn's. De kom med et installasjonsverktøy, ikke så ille for $ 7. Jeg vil foreslå et av tangverktøyene i stedet, da jeg måtte ta verktøyet fra hverandre for å installere snapene i midten. Syninger ville være et godt alternativ, selv om de tar lengre tid å feste. Ledende tråd, Spark Fun har ting som kan gå i symaskinen din. Jeg måtte gå veldig sakte i maskinen, ellers ville tråden gå i stykker. Kjørelengden din kan variere

Trinn 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 revisjonen var mye bedre enn den siste i form av tid til bygget. Pluss at det å ha flyttbare brytere reddet min fornuft mer enn en gang. Start med å lage basen. Det er bare en quiltkvart brettet i to. Legg et lag med batting på toppen og sy, og la det være et hull for å snu den. Skyv tingen gjennom hullet, og du har i utgangspunktet en pute -ting. Jeg quiltet den så den var lettere å jobbe med. Bruk vanlig tråd og gå nøtter. Jeg gjorde diamanter på denne, men kanskje neste gang vil jeg sette en drage i ryggen, eller noe kult. Nå, til bryterne. Jeg liker dette designet fordi du i utgangspunktet kan lage massevis av disse på forhånd og bare bruke det du vil. begynn med å bruke et stykke papp, papir eller stoff, og skjær en pæreform ut av det. Bruk det som en guide for å kutte topp og bunn for hver bryter. Jeg klipper en farge for hver bunn og en annen farge for toppene, men du kan være kreativ og gjøre hva du vil. Forleng "pinnen" slik at den kan vikle seg over kanten på "pæren". Klipp formen ut av det smeltende og ledende stoffet og smelt den ene siden av det ledende stoffet. Fjern støtten fra smeltematerialet og smelt den til toppen av stoffet som vil være på bunnen og bunnen av stoffet som vil være på toppen. Vikle den ekstra biten rundt toppen. Gå over til symaskinen din og legg hull med hull mellom stoffet øverst og nederst. Sy utenfor det ledende stoffet og hopp over "stick" -delen av bryteren. Jeg fant ut at det er mulig å sy det øverste ledende stoffet til bunnen og lage en kort. Det er bedre å ikke sy gjennom det ledende stoffet. Fest snaps og bryteren er ferdig. Jeg syntes det var lettere å bruke hann -snap for alle bunn-/GND -tilkoblinger og hun -snap for alle topper. Dette gjør alle bryterne utskiftbare. Kretsen: Tingen med å kutte runder er at du har mange ekstra biter. Jeg tok skrapene mine, smeltet store smelter til store biter av ledende stoff og brukte dem til å kutte ut de mindre rektanglene jeg brukte som pads. Grovt sett ut bryterne dine og sikring putene til basen med nok plass til å sy en snor til dem og få et øyeblikk. Foten på symaskinen jeg brukte tok ikke vennlig på å være veldig nær snapet, så husk det og gi deg selv litt plass. Siden jeg fikk ledende tråd som kunne gå i symaskinen min, har jeg bare sydd en linje fra pute til pute og tilbake. Jeg måtte gå sakte, ellers ville tråden gå i stykker, men det var tonn raskere enn håndsøm. Også med ledende tråd på spolen og nålen fikk jeg en veldig god solid forbindelse. Stoffene flosser som gal, men litt håndverklim eller Elmers rydder det opp. Prøv å holde linjene godt borte fra hverandre, og du bør ikke ha noen problemer. Sluttmontering: Fest alle bryterne, koble til kortet, last inn koden og du er ferdig. Jeg brukte wire for å komme fra brettet til puten, og så sydde jeg bare ledningen til basen for hånd. For neste versjon vil jeg montere brettet i en plastboks med snaps for å feste det til basen slik at ledige fingre ikke trekker det fra hverandre.

Trinn 8: Kode

Kode
Kode

Hvis du aldri har programmert en brikke før, er dette en litt skremmende oppgave. Det hjelper ikke at verktøyene er flassete og at du ofte må utføre den samme operasjonen flere ganger. De to beste ressursene jeg har funnet for å få en forståelse av hva som skjer, er siden for USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ og krasjkurset i programmering av støyleketøyet, http:/ /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Disse skal kunne komme i gang.

Mange liker Arduino for denne kodingen, og det er ikke noe galt i å bruke den, bortsett fra at jeg føler at den gir mye oppblåsthet til et normalt enkelt program. Jeg kjente også C og kjenner ikke Arduino. Kanskje en dag, hvis det er tid.:) Kode: {{{#include // Bruk en pin for å slå på 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); // Angi SPK for utdata PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Set Button High PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Sett opp tidtaker 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); if (btnState0) {if (TCNT2> = 190) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (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; }} if (btnState4) {if (TCNT2> = 126) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState5) {if (TCNT2> = 119) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState6) {if (TCNT2> = 106) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }}}}}}}} Hvor kommer banene fra? Litt matte var nødvendig. Tidsuret på atmega 168 går på 1 MHz. Det er altfor raskt for lyd, så vi må bruke forhåndsskaler /8. Siden vi må snu utgangspinnen høyt og lavt for å gjøre 1 syklus, må vi dele svaret med 2 for å komme frem til riktig tonehøyde. Formelen ser slik ut, Pitch for å sette inn kode = (1000000/8)/(Målfrekvens*2) For A (440) vil dette være 125000/880 = 142,045 eller 142 for våre formål, siden verdien må være et heltall. Målfrekvensene for notater finnes omtrent hvor som helst på nettet og er generelt sett like. Jeg vil fortsatt legge til en saksuttalelse i stedet for å bruke en haug med Ifs og bruke PWM for bedre å kontrollere volumet og tonehøyden til høyttaleren, men foreløpig fungerer dette.

Anbefalt: