Sadržaj:

Generator tonova tkanine mikrokontrolera u C kodu: 8 koraka (sa slikama)
Generator tonova tkanine mikrokontrolera u C kodu: 8 koraka (sa slikama)

Video: Generator tonova tkanine mikrokontrolera u C kodu: 8 koraka (sa slikama)

Video: Generator tonova tkanine mikrokontrolera u C kodu: 8 koraka (sa slikama)
Video: Часть 2 — Аудиокнига Гарриет Бичер-Стоу «Хижина дяди Тома» (главы 8–11) 2024, Juli
Anonim
Generator tonova tkanine mikrokontrolera u C kodu
Generator tonova tkanine mikrokontrolera u C kodu

Krajem oktobra prošle godine, korisnik instrukcije Carmitsu mi je poslao poruku nakon što je vidio sintetizator moje kutije za ručak. Iz njegove poruke: Predajem muziku u osnovnoj školi. Puštamo mnogo muzike sa snimača. tj. djeca sviraju male flaute …… Imam nekoliko djece sa posebnim potrebama koja mogu koristiti ove crne ploče s plakatima s krugovima na kojima je naziv note. Ovi učenici guraju krugove s imenima nota, dok ostali učenici sviraju pjesmu ….. Većina djece sa posebnim potrebama to može učiniti prilično dobro i u skladu s muzikom. Ono što želim je izgraditi vrlo jednostavan generator zvuka tako da ova djeca mogu svirati isti ton kao i oni koje sviraju učenici na svojim diktafonima. Imao bih samo nekoliko terena. Mislio sam da bih mogao pričvrstiti neku vrstu male tipke na dno njihovih okruglih krugova tako da kad ih pritisnu zvuk će izlaziti iz malog zvučnika, dovoljno glasan da mogu čuti. Kako sam mogao odoljeti ako imam majku koja je učiteljica i svidjela joj se škola? Istini za volju nisam mogao. Ovo je prilično kronika projekta i upute o tome kako izgraditi vlastiti.

Korak 1: Početak ili zašto se nisam mogao držati analognog

Početak ili zašto se nisam mogao držati analognog
Početak ili zašto se nisam mogao držati analognog

Dobre stvari počinju na sljedećoj stranici. Ako želite znati kako sam završio koristeći dijelove koje sam napravio, čitajte dalje. Pravi tajmer: Nakon što sam malo razmislio o projektu, odmah sam se sjetio generatora piezo tonova iz moje knjige o opamperima Forest Mims III. Čini se kao dobar način, samo je piezo, 741 IC i nekoliko pasivnih komponenti. Ništa strašno, zar ne? Pa, ima 2 problema, 1) kada pritisnete prekidač, moguće je promijeniti visinu tona. 2) Prokletstvo je gotovo nemoguće podesiti. Prvi bi se vjerojatno mogao prevladati pomoću neke tehnologije debounce, iako nisam znao kako to učiniti bez dodavanja drugog brojača. To također može biti problem s korištenjem pieza. Drugo pitanje je postalo nezgrapno kada ste počeli pokušavati pogoditi određenu visinu. Šta je sa 555? Tehnički list prikazuje funkciju vremenskog odlaganja zasnovanu na otpornicima i kondenzatorima. Što je sjajno sve dok ne počnete upisivati stvarne vrijednosti dijelova stvarnog svijeta, tada ćete otkriti da pomak na visini od 440 Hz postaje pomalo težak. Možete ga upotrijebiti za podešavanje, ali s vremenom se oni pomiču. Stalno ugađanje instrumenta, sastavljeno povrh brzog povećanja cijene i količine dijelova, a moja supruga koja je mijenjala visinu tona kada je pritisnula dugme ubila je 555 za ovaj projekt. Op-amp: Nema problema, ljudi su radili sintetizatore sa op-pojačala još prije mog rođenja. Koliko bi moglo biti teško napraviti zaista jednostavan, s nekoliko dijelova i specifičnih bilješki? Teže nego što sam mislio. Većina dizajna vani su previše komplicirani za ovaj projekt. Dizajneri sintetičara traže savršeni talasni oblik/ton. Ovo je direktno u suprotnosti s projektom koji bi trebao biti dovoljno jeftin za budžet škola ili nastavnika. Izgradnja tastature je dovoljno jednostavna, to je samo gomila otpornika i napajanja ili gomila dioda i napajanja. To je ostatak dizajna kola i cijena prilagođenih PCB -a koji nekome izmiču kontrolu na početnom nivou elektronike. Ponovno definiranje projekta: Dakle, projekt je redefiniran prije nego što sam zaista krenuo. Trebalo mi je nešto što bi s vremenom moglo prebaciti iglu zvučnika pritiskom na dugme. Nisam želio dizajnirati i kupiti PCB. Ovo je moralo koristiti što je moguće manje komponenti i biti sastavljeno kao komplet za početnike. Sve vreme me gledao u lice. Duh !! Mikrokontroler! Mikrokontroler: Nakon što sam kupio Arduino komplet Modern Devices Bare Bones i Evil Mad Scientist Simple Target Board i pustio ih da sjede na mom stolu mjesecima koji se ne koriste, imao sam savršen uvodni projekt. Počeo sam promatrati vrijeme potrebno za sastavljanje oboje, krivulju učenja koda, cijenu, dodatne dijelove koji su mi potrebni i natjerao me da radi ono što želim i smjestio sam se na ciljnu ploču. Cijena je bila prilično ujednačena, 15 USD plus 20 USD FTDI kabela za Arduino, 12 USD plus 22 USD USBtinyISP programera. Već sam znao C ++ s malog fakulteta koji bih mogao podnijeti i zaključio sam da C za mikrokontrolere ne bi bio tako loš, dok osim treptanja svjetla kako bih bio siguran da sam dobro sastavio komplet, nisam imao iskustva s Arduinom. Oba se mogu montirati. Bilo je to prilično dobro, pa sam se odlučio za manje dijelova dva, ciljnu ploču.

Korak 2: Šta vam treba Rev 1

Šta vam treba Rev 1
Šta vam treba Rev 1

Cijena dijelovaUSBtinyISP AVR Programmer Kit (USB SpokePOV Dongle) v2.0 $ 22.00https://www.adafruit.com/index.php? Main_page = product_info & cPath = 16 & products_id = 46 Laki kompleti za zle naučnike ATmegaXX8 Mini kompleti za razvoj, 12 pinova, 6-pinski 5-pk 2,75 USDhttps://evilmadscience.com/tinykitlist/74-atmegaxx8Zvučnik (mini 8-ohmski) 2,79 USDhttps://www.radioshack.com/product/index.jsp? ProductId = 2062406SPST Normalno otvoreni trenutni prekidači (koristili smo 5) 3,49 USD (4 paketa) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA "Držač baterije 1,79 USD https://www.radioshack.com/product/index.jsp? ProductId = 2102735SPST Submini klizni prekidač (opcionalno za prekidač za napajanje) 2,69 USD (2 paketa) https://www.radioshack.com/product/index.jsp?productId=2062490LED i otpornik (opcionalno, ako želite svjetlo za napajanje) $ bi trebao biti besplatan ako leže naokolo Žica $ bi također trebala ležati Srebrni lem (ako ovo ide blizu djece vjerojatno ne biste trebali koristiti olovo, roditelji postaju prilično čudni u vezi s takvim stvarima;)) Trljanje alkoholom (da move flux) Ako želite na nekim mjestima uštedjeti novac, ne morate nabaviti dijelove od RadioShacka. Jesam jer su bliski i predvidljivi.

Korak 3: Montaža Rev 1

Montaža Rev 1
Montaža Rev 1
Montaža Rev 1
Montaža Rev 1

Sastavite dijelove kao što je prikazano. Po završetku obavezno upotrijebite alkohol za trljanje i četku za uklanjanje fluksa da biste se riješili bilo kakvog fluksa od lemljenja. Shema je dolje navedena za one kojima je draža. D1 i R1 mogu biti šta god želite, samo svjetlo za napajanje. C1 služi samo za poboljšanje konzistentnosti napajanja. Koristio sam 10uF. Ova shema je ista za kasnije verzije, samo zamijenite tipke za prekidače od tkanine. u zadnjoj reviziji dodao sam prekidače na PC4 i PC5 ili pinove 27 i 28.

Korak 4: Šta vam treba Rev 2

Šta vam treba Rev 2
Šta vam treba Rev 2

Dakle, u osnovi mijenjate tipke Radio Shack za ručno izrađene tkanine. Potrebno vam je: Više boja tkanine ili jedna boja ako želite da svaka nota bude iste boje. Odeljak za jorgan u vašoj najbližoj prodavnici tkanina najbolje je mesto za jeftinu kupovinu. Prostirke za šivanje koštaju 1,50 USD i od njih možete dobiti tonu prekidača. Provodna tkanina, predlažem tkaninu Flectron iz LessEMF -a, to je 20 USD za komade od 12 "x54" za pričvršćivanje žice na tkaninu. Možete ih nabaviti u većini trgovina tkaninama jeftino. JoAnn ima alat i 25 za 2 USD Za ovo će vam trebati čekić. Žica, koristio sam 22AWG, predlažem manji ako ga imate. Spajanje, kako bi se obojena i provodljiva tkanina zalijepila. Pitajte u trgovini i vjerovatno ga možete kupiti u dvorištu. Ovo bi vjerojatno dobro funkcioniralo, ali predlažem da pitate nekoga o batinama, isprva sam koristio vrlo labave stvari, a zatim prešao na nešto čvršće. Predlažem da samo isprobate nekoliko različitih dok ne pronađete ono što najbolje funkcionira. Termoskupljajuće cijevi, ovo je cijelu stvar učinilo mnogo lakšom za rukovanje. termoskupljajuće žice zajedno dok prolaze jedna pored druge i bit će mnogo bolje.

Korak 5: Montaža Rev 2

Montaža Rev 2
Montaža Rev 2
Montaža Rev 2
Montaža Rev 2
Montaža Rev 2
Montaža Rev 2

Položite raznobojnu tkaninu jednu na drugu i izrežite kvadrat, ne mora biti savršeno. Peglajte tkaninu da biste uklonili sve nabore, ponovo ih položite jednu na drugu i pobrinite se da se svi rubovi podudaraju. Izrežite sve rubove koji to ne čine. Izrežite gornju i donju rundu, ostavljajući lijevu i desnu stranu ravne. Preokrenućete prekidač nakon šivenja, tako da zaobljene strane ne činite previše okruglim i ostavite dovoljnu visinu na ravnim stranama da lako prebacite prekidač kada završite. Zaokružite ravnu stranu prvog i posljednjeg prekidača. Pređite na šivaću mašinu i spojite dvije runde zajedno tako da dobra strana bude okrenuta jedna prema drugoj i sašite šav na ravnim dijelovima. Jednom su vrhovi dugmadi sašivene, izrežite kvadrate od provodljive tkanine i spojite jednu stranu. Odrežite žicu na duljinu i ogolite joj jedan kraj. lemite žicu oko jedne od rupica. (lemljenje se vjerojatno neće zalijepiti za ušicu) Izrežite mali prorez u tkanini na jednom uglu i udarite ušicu da biste pričvrstili tkaninu i žicu. uklonite podlogu sa stapanja i spojite provodljivu tkaninu sa stražnje strane obojene tkanine. Ponovite za sve prekidače. Da biste olakšali stvari, možete zagrijati skupljajuće cijevi zajedno kad god jedna žica prođe žicu za sljedeći prekidač. Uzmite ili napravite komad tkanine dužine sklopa prekidača i izrežite traku provodljive tkanine po njenoj dužini. Za razliku od prekidača u boji, ovo je jedan dugačak komad. To je ono što tasteri dodiruju radi uspostavljanja veze. Izrežite mali prorez i na njega pričvrstite žicu ušicom, poput obojenih prekidača. Spojite ga sa stražnje strane donje tkanine. Zašijte gornji i donji dio zajedno s provodljivom tkaninom okrenutom prema van, upotrijebite dvorišni štap da biste preokrenuli komplet nakon što ga sašijete. Izrežite nekoliko malih rupa u letvici, upotrijebio sam štapić za štap da dobijem krug, zatim samo uklonite štapić i napravite rez. Izrežite ih u obliku i umetnite u prekidače. Ovo razdvaja provodnu tkaninu. Možda će biti lakše umetnuti letvu dok okrećete prekidače umjesto nakon toga. Stvari koje sam koristio su se prilično pokidale dok sam ih umetao i morao sam dobiti različite udare. Na kraju spojite žice na ciljnu ploču i sve je spremno. Duga donja traka će se samljeti.

Korak 6: Šta vam treba Rev 3

Šta vam treba Rev 3
Šta vam treba Rev 3

U Rev 3 sam napravio prekidače neovisno o ožičenju. Ovo je uštedjelo gomilu vremena. Također mi se mnogo više sviđa izgled gotovog rezultata. Dakle, evo novih dijelova koji su vam potrebni: Snimci, upravo sam ih nabavio od JoAnn's. Došli su s alatom za instalaciju koji nije loš za 7 USD. Umjesto toga bih predložio jedan od alata za kliješta jer sam morao rastaviti svoj alat da bih instalirao kopče u sredini. Šivanje bi bila dobra alternativa, iako im je potrebno duže vrijeme da se prilijepe. Konduktivni konac, Spark Fun ima stvari koje mogu ući u vašu šivaću mašinu. Morao sam ići jako sporo u svom stroju ili bi se nit prekinuo. Vaša kilometraža može varirati

Korak 7: Montaža Rev 3

Montaža Rev 3
Montaža Rev 3
Montaža Rev 3
Montaža Rev 3
Montaža Rev 3
Montaža Rev 3
Montaža Rev 3
Montaža Rev 3

Ova revizija je bila mnogo bolja od prethodne u smislu vremena do izrade. Osim toga, uklonjivi prekidači spasili su mi razum više puta. Počnite tako što ćete napraviti bazu. To je samo jedna prošivena četvrtina presavijena na pola. Stavite sloj preljeva na vrh i zašite, ostavljajući rupu da ga preokrenete. Gurnite stvar kroz rupu i u osnovi imate stvar tipa jastuka. Prošišao sam ga tako da je bilo lakše raditi s njim. Koristite običan konac i poludite. Na ovome sam radio dijamante, ali možda ću sljedeći put staviti zmaja pozadi ili nešto super. Sada, na prekidače. Sviđa mi se ovaj dizajn jer u osnovi možete napraviti tonu unaprijed i jednostavno upotrijebiti ono što želite. počnite s komadom kartona, papira ili tkanine i izrežite iz njega oblik kruške. Koristite to kao vodič za rezanje vrha i dna za svaki prekidač. Izrezao sam jednu boju za svako dno i drugu boju za vrhove, ali možete biti kreativni i raditi šta želite. Smanjite vodič do oblika lizalice koji će se lako uklopiti u prekidač. Produžite "štap" tako da se može omotati preko ruba "kruške". Izrežite oblik iz taljene i provodljive tkanine i spojite jednu stranu vodljive tkanine. Uklonite podlogu od materijala za topljenje i spojite je do vrha tkanine koja će biti na dnu i donje strane tkanine koja će biti na vrhu. Omotajte dodatni dio oko vrha. Otiđite do svoje šivaće mašine i stavite letve sa rupama između gornje i donje tkanine. Šivajte izvan provodljive tkanine i preskočite "štapni" dio prekidača. Otkrio sam da je moguće prišiti gornju provodljivu tkaninu na dno stvarajući kratku. Bolje je ne šivati kroz provodnu tkaninu. Pričvrstite snapove i prekidač je gotov. Bilo mi je lakše koristiti mušku kopču za sve donje/GND veze, a žensku za sve vrhove. Ovo čini sve prekidače zamjenjivim. Krug: Stvar u rezanju rundi je ta što imate puno dodatnih bitova. Uzeo sam svoje bilješke, stopio velike komade spoja na velike komade provodljive tkanine i iskoristio ih za izrezivanje manjih pravokutnika koje sam koristio kao jastučiće. Grubo rasporedite prekidače i spojite jastučiće s podnožjem s dovoljno mjesta da im sašijete liniju i puknete. Noga šivaće mašine koju sam koristio nije blagonaklono gledala da se približi snapu, pa imajte to na umu i dajte sebi malo prostora. Pošto sam dobio provodljivi konac koji je mogao da uđe u moju šivaću mašinu, samo sam sašio liniju od podloge do podloge i nazad. Morao sam ići sporo ili će se konac puknuti, ali bilo je tonu brže od ručnog šivanja. Takođe sa provodljivim navojem na klekulji i iglom, dobio sam zaista dobru čvrstu vezu. Stvari se lude kao lude, ali malo zanatskog ljepila ili Elmers to razjasni. Pokušajte držati linije daleko jedna od druge i ne biste trebali imati problema. Konačna montaža: Uključite sve prekidače, spojite ploču, učitajte kôd i gotovi ste. Koristio sam žicu da dođem od ploče do podloge, a zatim sam ručno prišio žicu do baze. Za sljedeću verziju, ploču ću montirati u plastičnu kutiju sa kopčama za pričvršćivanje na podnožje tako da je prsti u stanju mirovanja ne razdvajaju.

Korak 8: Kodirajte

Kod
Kod

Ako nikada prije niste programirali čip, ovo je pomalo zastrašujući zadatak. Ne pomaže to što su alati nestabilni i većinu vremena morate izvršiti istu operaciju više puta. Dva najbolja izvora koje sam pronašao za razumijevanje onog što se događa su stranica za USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ i kratak kurs programiranja igračke protiv buke, http:/ /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Ovo bi vam trebalo omogućiti da započnete.

Mnogi ljudi vole Arduino za ovo kodiranje i nema ništa loše u njegovoj upotrebi, osim što osjećam da dodaje mnogo nadutosti uobičajeno jednostavnom programu. Takođe, poznavao sam C, a ne znam Arduino. Možda jednog dana, ako bude vremena.:) Kod: {{{{#include // Pomoću pin -a uključite 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); // Postavite SPK za izlaz PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Dugme za postavljanje visoko PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Postavljanje tajmera dok (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); // Okreni SPK pin TCNT2 = 0; }} if (btnState1) {if (TCNT2> = 179) {PORTB ^= (1 << PD6); // Okrenuti SPK pin TCNT2 = 0; }} if (btnState2) {if (TCNT2> = 159) {PORTB ^= (1 << PD6); // Okrenuti SPK pin TCNT2 = 0; }} if (btnState3) {if (TCNT2> = 142) {PORTB ^= (1 << PD6); // Okreni SPK pin TCNT2 = 0; }} if (btnState4) {if (TCNT2> = 126) {PORTB ^= (1 << PD6); // Okrenuti SPK pin TCNT2 = 0; }} if (btnState5) {if (TCNT2> = 119) {PORTB ^= (1 << PD6); // Okrenuti SPK pin TCNT2 = 0; }} if (btnState6) {if (TCNT2> = 106) {PORTB ^= (1 << PD6); // Okrenuti SPK pin TCNT2 = 0; }}}}}}} Odakle dolaze tereni? Bilo je potrebno malo matematike. Tajmer na atmegi 168 radi na 1MHz. To je previše brzo za zvuk pa moramo koristiti predskaler /8. Zatim, budući da moramo okrenuti izlazni pin visoko pa nisko da bismo napravili 1 ciklus, moramo podijeliti odgovor sa 2 kako bismo došli do prave visine. Formula izgleda ovako, Pitch za unos koda = (1000000/8)/(Ciljna frekvencija*2) Za A (440) to bi za naše svrhe bilo 125000/880 = 142.045 ili 142, jer vrijednost mora biti cijeli broj. Ciljne frekvencije bilješki mogu se naći gotovo bilo gdje na internetu i općenito su sve iste. I dalje želim dodati izjavu slučaja umjesto korištenja hrpe If -ova i koristiti PWM za bolju kontrolu glasnoće i visine zvučnika, ali za sada ovo funkcionira.

Preporučuje se: