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, Srpanj
Anonim
Generator tonova tkanine mikrokontrolera u C-kodu
Generator tonova tkanine mikrokontrolera u C-kodu

Krajem listopada prošle godine, korisnik instrukcija Carmitsu poslao mi je poruku nakon što je vidio sintetizator moje kutije za ručak. Iz njegove poruke: Predajem glazbu u osnovnoj školi. Puštamo mnogo glazbe sa snimača. tj. djeca sviraju male flaute …… Imam nekoliko djece s posebnim potrebama koja mogu koristiti ove crne ploče s plakatima s krugovima na kojima je naziv bilješke. Ti učenici guraju krugove s imenima nota, dok ostali učenici sviraju pjesmu ….. Većina djece s posebnim potrebama to može učiniti prilično dobro i u skladu s glazbom. Ono što želim je izgraditi vrlo jednostavan generator zvuka kako bi ova djeca mogla svirati istu postavu kao i oni koje sviraju učenici na svojim snimačima. Imao bih samo nekoliko terena. Mislio sam da bih mogao pričvrstiti neku vrstu male tipke na dno njihovih okruglih krugova kako bi, kad ih pritisnu, zvuk izlazio 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 s dijelovima koje sam napravio, čitajte dalje. Pravi mjerač vremena: Nakon što sam malo razmislio o projektu, odmah sam se sjetio generatora piezo tonova iz moje knjige op-pojačala Forest Mims III. Čini se kao dobar način, samo je piezo, 741 IC i par pasivnih komponenti. Nije velika stvar zar ne? Pa ima 2 problema, 1) kada pritisnete prekidač, moguće je promijeniti visinu tona 2) vraški 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 bi također mogao biti problem s upotrebom pieza. Drugo je pitanje postalo nezgrapno kad ste počeli pokušavati pogoditi određenu visinu. Što je s 555? Tehnički list prikazuje funkciju vremenskog odlaganja na temelju otpornika i kondenzatora. Što je sjajno sve dok ne počnete upisivati stvarne vrijednosti dijelova iz stvarnog svijeta, tada ćete otkriti da pomak na visini od 440 Hz postaje pomalo težak. Za ugađanje možete upotrijebiti posude za podrezivanje, ali s vremenom se teže pomaknuti. Neprestano ugađanje instrumenta, sastavljeno uz brzo povećanje cijene i količine dijelova, a moja supruga koja je mijenjala visinu tona kad je pritisnula gumb 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 teško moglo biti 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 valni ton/ton. To je izravno u sukobu s projektom koji bi trebao biti dovoljno jeftin za proračun škole ili nastavnika. Izgradnja tipkovnice je dovoljno jednostavna, to je samo hrpa otpornika i napajanja ili hrpa dioda i snage. To je ostatak dizajna kruga i cijena prilagođenih tiskanih ploča koja nekome počinje izmići iz ruku na početnoj razini elektronike. Ponovno definiranje projekta: Dakle, projekt je redefiniran prije nego što sam uopće krenuo. Trebalo mi je nešto što bi s vremenom moglo prebaciti iglu zvučnika pritiskom na tipku. Nisam želio dizajnirati i kupiti PCB. Ovo je moralo koristiti što je moguće manje komponenti i biti sastavljeno kao komplet za početnike. Cijelo vrijeme mi je 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 za kôd, cijenu, potrebne dodatne dijelove i natjerao me da učini ono što želim te sam se smjestio 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 sam 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. Oboje se moglo montirati. Bilo je to prilično dobro, pa sam se odlučio za manje dijelova dva, ciljnu ploču.

Korak 2: Što vam treba Rev 1

Što vam treba Rev 1
Što 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 razvojne programere, 12 pinova, 6-pinski 5-pk 2,75 USDhttps://evilmadscience.com/tinykitlist/74-atmegaxx8Zvučnik (mini 8 ohma) 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č (opcija 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 se ovo događa 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

Skupština Rev 1
Skupština Rev 1
Skupština Rev 1
Skupština Rev 1

Sastavite dijelove kao što je prikazano. Kad završite, 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 što god želite, to je samo svjetlo za napajanje. C1 samo želi pomoći da snaga bude malo dosljednija. Koristio sam 10uF. Ova shema je ista za kasnije verzije, samo zamijenite gumbe za prekidače od tkanine. u zadnjoj reviziji dodao sam prekidače na PC4 i PC5 ili pinove 27 i 28.

Korak 4: Što vam treba Rev 2

Što vam treba Rev 2
Što vam treba Rev 2

Dakle, u osnovi mijenjate gumbe Radio Shacka za ručno izrađene tkanine. Trebate: Više boja tkanine ili jedna boja ako želite da svaka nota bude iste boje. Odeljak za prošivanje vaše najbliže trgovine tkaninama najbolje je mjesto za jeftinu kupovinu. Prostirke za šivanje koštaju 1,50 USD i iz njih možete dobiti tonu prekidača. Vodljiva tkanina, predlažem tkaninu Flectron iz LessEMF -a 20 USD za komad 12 "x54" ušica 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 vjerojatno ćete ga moći kupiti u dvorištu. Ovo bi vjerojatno dobro funkcioniralo, ali predlažem da pitate nekoga o Battingu, isprva sam koristio jako labave stvari, a zatim sam prešao na nešto čvršće pletivo. Predlažem da samo isprobate nekoliko različitih dok ne pronađete ono što najbolje funkcionira. Termoskupljajuće cijevi, to je cijelu stvar učinilo mnogo upravljivijom. termoskupljajuće žice zajedno dok prolaze jedna pored druge i bit će puno 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. Glačajte tkaninu da biste uklonili nabore, ponovno ih položite jedan na drugi i pobrinite se da se svi rubovi podudaraju. Izrežite sve rubove koji to ne čine. Izrežite gornji i donji dio, ostavljajući lijevu i desnu stranu ravnim. Preokrenuti ćete prekidač nakon šivanja pa nemojte zaobljene strane učiniti previše okruglima i ostavite dovoljnu visinu na ravnim stranama da prekidač lako provučete kad završite. Zaokružite ravnu stranu prvog i zadnjeg prekidača. Pređite na šivaći stroj i spojite dvije runde zajedno tako da dobra strana bude okrenuta jedna prema drugoj i sašite šav na ravnim dijelovima. Jednom su vrhovi gumba sašivene, izrežite kvadrate iz vodljive tkanine i spojite jednu stranu. Odrežite žicu na duljinu i ogolite joj jedan kraj. lemiti žicu oko jedne od rupica. (lemljenje se vjerojatno neće zalijepiti za ušicu) Izrežite mali prorez u tkanini na jednom kutu i udarite ušicu da biste pričvrstili tkaninu i žicu. uklonite podlogu s taljenja i spojite vodljivu 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 duljine sklopnog sklopa i izrežite traku od provodljive tkanine po duljini. Za razliku od prekidača u boji, ovo je jedan dugačak komad. To je ono što tipke dodiruju radi povezivanja. 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 prema van, upotrijebite dvorišnu palicu kako biste preokrenuli komplet nakon što ga sašijete. Izrežite nekoliko malih rupa u letvici, upotrijebio sam štapić za hranu krug, zatim samo uklonite štapić i napravite rez. Izrežite ih u obliku i umetnite u prekidače. To je ono što razdvaja vodljivu tkaninu. Možda će biti lakše umetnuti letvu dok okrećete prekidače umjesto nakon toga. Stvari koje sam koristio prilično su se pokidale dok sam ih umetao i morao sam nabaviti različite letve. Konačno spojite žice na ciljnu ploču i sve je spremno. Duga donja traka bit će samljevena.

Korak 6: Što vam treba Rev 3

Što vam treba Rev 3
Što vam treba Rev 3

U Rev 3 napravio sam prekidače neovisno o ožičenju. Ovo je uštedjelo tonu 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 instaliranje koji nije loš za 7 USD. Umjesto toga, predložio bih jedan od alata za kliješta jer sam morao rastaviti svoj alat da bih ugradio kopče u sredinu. Šivanje bi bilo dobra alternativa, iako im je potrebno duže vrijeme da se prilijepe. Konduktivni konac, Spark Fun ima stvari koje mogu ući u vaš šivaći stroj. 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

Skupština Rev 3
Skupština Rev 3
Skupština Rev 3
Skupština Rev 3
Skupština Rev 3
Skupština Rev 3
Skupština Rev 3
Skupština 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. Na vrh stavite sloj ljepila i saš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. Sad 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 što ž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 vodljive tkanine i spojite jednu stranu vodljive tkanine. Uklonite podlogu s materijala za topljenje i spojite je na vrh tkanine koja će biti na dnu i na dnu tkanine koja će biti na vrhu. Omotajte dodatni dio oko vrha. Otiđite do šivaćeg stroja i stavite letve s rupama između gornje i donje tkanine. Šivajte izvan provodljive tkanine i preskočite "prekidač" dio prekidača. Otkrio sam da je moguće prišiti gornju vodljivu 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. To čini sve prekidače zamjenjivima. Krug: Stvar u vezi s rezanjem rundi je ta što imate puno dodatnih bitova. Uzeo sam svoje bilješke, stopio velike komade spoja s velikim komadima vodljive tkanine i njima izrezao manje pravokutnike 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ćeg stroja koju sam koristio nije bila ljubazna jer je bila blizu blizu, stoga imajte to na umu i dajte si malo prostora. Budući da sam dobio provodljivi konac koji je mogao ući u moju šivaću mašinu, samo sam sašio liniju od podloge do podloge i natrag. Morala sam ići polako ili će se konac puknuti, ali bilo je tonu brže od ručnog šivanja. Također s provodljivim navojem na špulici i iglom, dobio sam jako 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 svoje 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 samo prišio žicu do baze. Za sljedeću verziju, ploču ću montirati u plastičnu kutiju sa zatvaračima za pričvršćivanje na podnožje tako da je prsti u stanju mirovanja ne razdvajaju.

Korak 8: Kodiranje

Kodirati
Kodirati

Ako nikada prije niste programirali čip, ovo je pomalo zastrašujući zadatak. Ne pomaže to što su alati ljuskavi i većinu vremena morate istu operaciju izvesti 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 tečaj 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 korištenju, osim što osjećam da dodaje mnogo nadutosti uobičajeno jednostavnom programu. Također, poznavao sam C, a ne znam Arduino. Možda jednog dana, ako bude vremena.:) Kôd: {{{{#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); // Gumb za postavljanje visoko PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Postavi mjerač vremena 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); // 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; }}}}}}} Odakle dolaze tereni? Trebalo je malo matematike. Mjerač vremena 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 kako bismo napravili 1 ciklus, moramo podijeliti odgovor s 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 potrebe bilo 125000/880 = 142.045 ili 142, jer vrijednost mora biti cijeli broj. Ciljane frekvencije bilješki mogu se pronaći gotovo bilo gdje na internetu i općenito su sve iste. I dalje želim dodati izjavu slučaja umjesto da koristim hrpu If -ova i koristiti PWM za bolju kontrolu glasnoće i visine zvučnika, ali za sada ovo funkcionira.

Preporučeni: