Cuprins:

Generator de tonuri de microcontroler în cod C: 8 pași (cu imagini)
Generator de tonuri de microcontroler în cod C: 8 pași (cu imagini)

Video: Generator de tonuri de microcontroler în cod C: 8 pași (cu imagini)

Video: Generator de tonuri de microcontroler în cod C: 8 pași (cu imagini)
Video: How to use XH-M603 Battery Charger Controller - Lead Acid only, not Lithium 2024, Noiembrie
Anonim
Microcontroler Fabric Tone Generator in C-code
Microcontroler Fabric Tone Generator in C-code

La sfârșitul lunii octombrie anul trecut, utilizatorul instructables carmitsu mi-a trimis un mesaj după ce mi-am văzut sintetizatorul. Din mesajul său: Învăț muzică în școala elementară. Cântăm o mulțime de muzică pentru fluture. adică copiii cântă la flauturi mici …… Am mai mulți copii cu nevoi speciale care pot folosi aceste panouri negre cu cercuri care au numele notei pe ele. Acești studenți împing cercurile cu nume de note în același timp, restul elevilor cântă o melodie ….. Majoritatea copiilor cu nevoi speciale pot face acest lucru destul de bine și în timp cu muzica. Ceea ce vreau să fac este să construiesc un generator de sunet foarte simplu, astfel încât acești copii să poată juca același ton cu cei redați de studenți pe înregistratoarele lor. Aș fi doar câteva pitch-uri. Am crezut că aș putea atașa un fel de buton mic la partea de jos a cercurilor lor rotunde, astfel încât atunci când apasă pe ele, sunetul să iasă dintr-un difuzor mic, suficient de puternic pentru a putea auzi. Având o mamă care este profesor și că i-a plăcut școala, cum aș putea rezista? Adevărul să fie spus că nu aș putea. Aceasta este aproape o cronică a proiectului și instrucțiuni despre cum să-ți construiești propriul.

Pasul 1: Începutul sau de ce nu m-am putut lipi de analog

Începutul sau De ce nu aș putea să mă țin de analog
Începutul sau De ce nu aș putea să mă țin de analog

Lucrurile bune încep pe pagina următoare. Dacă doriți să știți cum am ajuns să folosesc părțile pe care le-am făcut, citiți mai departe. Verificatorul temporizator: După ce am gândit proiectul, m-am gândit imediat la generatorul de ton piezo din cartea mea de op-amperi Forest Mims III. Pare o modalitate bună de a merge, este doar un piezo, un IC 741 și câteva componente pasive. Nu e mare lucru nu? Ei bine, are 2 probleme, 1) când apăsați comutatorul, este posibil să schimbați tonul 2) este aproape imposibil de reglat. Primul ar putea fi depășit cu ajutorul unei tehnologii de debounce, deși nu știam cum să fac asta fără a adăuga un alt contor. Ar putea fi, de asemenea, o problemă cu utilizarea unui piezo. Al doilea număr tocmai a devenit dificil când ați început să încercați să atingeți un anumit pitch. Dar 555? Fișa tehnică prezintă o funcție time dlay bazată pe rezistențe și condensatori. Ceea ce este grozav până când începeți să tastați valorile reale ale pieselor din lumea reală, atunci veți găsi că atingerea unui pitch de 440Hz începe să devină puțin dificil. Puteți folosi ghivece de tăiere pentru a-l regla, dar în timp acestea tind să se miște. Reglând constant instrumentul, compilat pe lângă creșterea rapidă a costului și cantității de piese, iar soția mea făcând schimbarea tonului când a apăsat butonul a ucis 555 pentru acest proiect. Amplificator opțional: Nicio problemă, oamenii au făcut op-amps de când am fost născut. Cât de greu ar putea fi să faci una cu adevărat simplă, cu câteva părți și note specifice? Mai greu decât credeam. Majoritatea proiectelor de acolo sunt foarte complicate pentru acest proiect. Designerii de sintetizatori sunt pregătiți pentru forma de undă / ton perfectă. Acest lucru intră în conflict direct cu un proiect care ar trebui să fie suficient de ieftin pentru bugetele școlii sau ale profesorilor. Construirea unei tastaturi este suficient de ușoară, este doar o grămadă de rezistențe și putere sau o grămadă de diode și putere. Restul proiectării circuitului și costul plăcilor personalizate sunt cele care încep să scape de sub control pentru cineva la un nivel electronic inițial. Redefinirea proiectului: Deci, proiectul a fost redefinit înainte de a începe chiar. Aveam nevoie de ceva care să poată comuta un difuzor, din timp, prin apăsarea unui buton. Nu am vrut să trebuiască să proiectez și să cumpăr un PCB. Aceasta trebuia să utilizeze cât mai puține componente și să fie asamblată ca un kit pentru începători. Mă privea în față tot timpul. Duh !! Microcontroler! Microcontroler: Așadar, după ce am achiziționat atât un kit Modern Devices Bare Bones Arduino, cât și un Evil Mad Scientist Simple Target Board și le-am lăsat să stea pe biroul meu luni întregi neutilizate, am avut proiectul introductiv perfect. Am început să mă uit la timpul necesar pentru a pune împreună, curba de învățare pentru cod, cost, părțile suplimentare necesare și să-l fac să facă ceea ce vreau și m-am așezat pe placa țintă. Costul a fost destul de uniform, 15 USD plus un cablu FTDI de 20 USD pentru Arduino, 12 USD plus un programator USBtinyISP de 22 USD. Știam deja C ++ de la micul colegiu în care puteam să stau și mi-am dat seama că C pentru microcontrolere nu ar fi atât de rău, în timp ce, în afară de clipirea unei lumini pentru a mă asigura că mi-am asamblat corect kitul, nu aveam experiență Arduino. Ambele ar putea fi montate. A fost cam o aruncare, așa că m-am hotărât asupra celor mai puține părți ale celor două, tabla țintă.

Pasul 2: De ce aveți nevoie Rev 1

De ce aveți nevoie Rev 1
De ce aveți nevoie Rev 1

Piese CostUSBtinyISP AVR Programmer Kit (USB SpokePOV Dongle) v2.0 22,00 $ https://www.adafruit.com/index.php? Main_page = product_info & cPath = 16 & products_id = 46 Evil Mad Scientist labs ATmegaXX8 Mini Dev Kits 12 $ Headers, 6-pin DIP, 5-pk 2,75 USD https://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (8 ohmi Mini) 2,79 USD https://www.radioshack.com/product/index.jsp? ProductId = 2062406SPST Comutatoare momentane deschise în mod normal (am folosit 5) 3,49 USD (4 pachete) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA "Suport baterie 1,79 USD https://www.radioshack.com/product/index.jsp? ProductId = 2102735SPST Switch Slide Submini (opțional pentru comutatorul de alimentare) 2,69 USD (2 pachete) https://www.radioshack.com/product/index.jsp?productId=2062490LED și rezistor (opțional, dacă doriți o lumină de alimentare) dacă zac în jur Wire $ ar trebui, de asemenea, să se întindă în jurul valorii de argint (dacă acest lucru se întâmplă undeva lângă copii, probabil că nu ar trebui să folosiți plumb, părinții devin destul de ciudați în legătură cu acest tip de lucruri;)) move flux) Dacă doriți unele locuri pentru a economisi bani, nu trebuie să obțineți piese de la RadioShack. Am făcut-o pentru că sunt apropiați și previzibili.

Pasul 3: Asamblarea Rev. 1

Adunarea Rev. 1
Adunarea Rev. 1
Adunarea Rev. 1
Adunarea Rev. 1

Puneți piesele împreună așa cum se arată. Asigurați-vă că utilizați alcool de frecare și o perie de flux când ați terminat pentru a scăpa de orice flux din lipire. Schematic este mai jos pentru cei care îl preferă. D1 și R1 pot fi orice vrei, este doar o lumină de alimentare. C1 este doar pentru a ajuta la îmbunătățirea puterii. Am folosit un 10uF. Această schemă este aceeași pentru versiunile ulterioare, doar schimbați butoanele pentru comutatoarele din material. în ultima revizie am adăugat comutatoare la PC4 și PC5 sau pinii 27 și 28.

Pasul 4: De ce aveți nevoie Rev 2

Ce aveți nevoie Rev 2
Ce aveți nevoie Rev 2

Deci, practic schimbați butoanele Radio Shack pentru cele fabricate manual din țesături. Aveți nevoie de mai multe culori de țesătură sau de o culoare dacă doriți ca fiecare notă să aibă aceeași culoare. Secțiunea de matlasare a celui mai apropiat magazin de țesături este cel mai bun loc pentru a obține acest lucru ieftin. Paturile de matlasare sunt de 1,50 USD și puteți obține o mulțime de întrerupătoare dintr-unul. Țesătură conductivă, vă sugerez țesătura Flectron de la LessEMF este de 20 USD pentru o piesă de 12 "x54" Ochiete pentru atașarea firului la țesătură. Le puteți obține ieftin la majoritatea magazinelor de țesături. JoAnn are instrumentul și 25 pentru 2 USD. Veți avea nevoie de un ciocan pentru asta. Sârmă, am folosit 22AWG, vă sugerez mai mici dacă aveți. Întrebați la magazin și probabil îl puteți cumpăra în curte. Probabil că acest lucru ar funcționa bine, deși vă sugerez să întrebați pe cineva Bating, am folosit la început chestii foarte libere, apoi am trecut la tricot ceva mai strâns. Vă sugerăm să încercați doar câteva altele până când veți găsi ceea ce funcționează cel mai bine. termoconectați firele împreună când trec unul peste altul și vor rămâne mult mai bine.

Pasul 5: Asamblarea Rev. 2

Adunarea Rev. 2
Adunarea Rev. 2
Adunarea Rev. 2
Adunarea Rev. 2
Adunarea Rev. 2
Adunarea Rev. 2

Așezați țesătura multicoloră una peste alta și tăiați un pătrat, nu trebuie să fie perfect. Călcați țesătura pentru a scoate orice pliuri, puneți-le din nou unul peste celălalt și asigurați-vă că toate marginile se potrivesc. Tăiați orice margini care nu. Tăiați rotundele de sus și de jos, lăsând laturile stânga și dreapta drepte. Veți inversa comutatorul după coasere, așa că nu faceți laturile rotunjite prea rotunde și lăsați suficientă înălțime pe laturile plate pentru a împinge comutatorul cu ușurință când ați terminat. Rotunjiți partea plană a primului și ultimului comutator. Direcționați-vă spre mașina de cusut și puneți două runde împreună, astfel încât partea bună să fie una față de cealaltă și să coaseți o cusătură pe părțile plate. Odată ce vârfurile butoanelor sunt cusute, tăiate pătrate din țesătura conductivă și fuzionați o parte. Tăiați sârma la lungime și curățați un capăt. lipiți firul în jurul unuia dintre ochiuri. (lipirea probabil nu se va lipi de ochi) Tăiați o mică fântână în țesătură la un colț și ciocăniți ochiul pentru a atașa țesătura și sârma. îndepărtați suportul de fuziune și fuzionați țesătura conductivă cu partea din spate a țesăturii colorate. Repetați pentru toate comutatoarele. Pentru a face lucrurile mai ușoare, puteți încălzi tuburile de micșorare a firelor împreună ori de câte ori un fir trece firul pentru următorul comutator. Obțineți sau confecționați o bucată de țesătură pe lungimea setului de comutatoare și tăiați o bandă de țesătură conductivă pe lungimea acestuia. Spre deosebire de întrerupătoarele colorate, aceasta este o piesă lungă. Aceasta va fi ceea ce ating butoanele pentru a face conexiunea. Tăiați o fântână mică și atașați-o o sârmă cu un ochi, ca vârfurile comutatoare colorate. Fixați-l în partea din spate a țesăturii de jos. Coaseți partea de sus și de jos, împreună cu țesătura conductivă orientată spre exterior, folosiți un baston de curte pentru a inversa setul după ce este cusut. un cerc, apoi scoateți doar bețișorul și faceți tăietura. Tăiați-le în formă și introduceți-le în comutatoare. Acesta este ceea ce ține țesătura conductivă deoparte. Poate fi mai ușor să introduceți bătătura în timp ce inversați întrerupătoarele în loc de după. Lucrurile pe care le-am folosit s-au dezamăgit destul de rău în timp ce îl introduceam și a trebuit să obțin diferite bătăi. Banda lungă de jos va fi măcinată.

Pasul 6: De ce aveți nevoie Rev.3

Ce aveți nevoie Rev 3
Ce aveți nevoie Rev 3

În Rev 3 am făcut comutatoarele independente de cablare. Acest lucru a economisit o tonă de timp. De asemenea, îmi place mult mai mult aspectul rezultatului final. Deci, iată piesele noi de care aveți nevoie: Snaps, tocmai le-am primit de la JoAnn. Au venit cu un instrument de instalare care nu este rău pentru 7 USD. Aș sugera unul dintre instrumentele de clește în loc, deoarece a trebuit să-mi desfac instrumentul pentru a instala snapurile în mijloc. Cusuturile ar fi o alternativă bună, deși durează mai mult timp pentru a adera. Fir conductiv, Spark Fun are lucruri care pot merge în mașina dvs. de cusut. Trebuia să merg foarte încet în mașină, altfel firul se rupea. Kilometrajul dvs. poate varia

Pasul 7: Asamblarea Rev.3

Adunarea Rev 3
Adunarea Rev 3
Adunarea Rev 3
Adunarea Rev 3
Adunarea Rev 3
Adunarea Rev 3
Adunarea Rev 3
Adunarea Rev 3

Această revizuire a fost mult mai bună decât ultima în ceea ce privește timpul până la construire. În plus, având comutatoare detașabile mi-a salvat sănătatea de mai multe ori. Începeți făcând baza. Este doar un sfert de matlasare pliat în jumătate. Puneți un strat de bătut pe partea de sus și coaseți, lăsând o gaură pentru a o inversa. Împingeți lucrul prin gaură și aveți practic un lucru de tip pernă. L-am matlasat, astfel încât să fie mai ușor de lucrat. Utilizați un fir simplu și dați-le cu nuci. Am făcut diamante pe aceasta, dar poate data viitoare voi pune un dragon în spate sau ceva interesant. Acum, pe comutatoare. Îmi place acest design, deoarece în principiu puteți face o grămadă de acestea înainte de timp și pur și simplu folosiți ceea ce doriți. începeți prin utilizarea unei bucăți de carton, hârtie sau țesătură și tăiați o formă de pară din ea. Utilizați acest lucru ca ghid pentru a tăia partea superioară și inferioară pentru fiecare comutator. Am tăiat o culoare pentru fiecare fund și o culoare diferită pentru vârfuri, dar puteți fi creativ și puteți face ceea ce doriți. Alungiți „bățul” astfel încât să poată înfășura marginea „perei”. Tăiați forma din țesătura de fuziune și conductivă și fuzionați o parte a țesăturii conductive. Îndepărtați suportul din materialul de fuzionare și fuzionați-l în partea superioară a țesăturii care va fi pe partea inferioară și pe partea inferioară a țesăturii care va fi pe partea de sus. Înfășurați bitul suplimentar în jurul vârfului. Mergeți la mașina de cusut și puneți bătut cu găuri între țesătura superioară și inferioară. Coaseți în afara țesăturii conductive și săriți peste partea „lipită” a comutatorului. Am constatat că este posibil să coaseți țesătura conductivă superioară în partea inferioară, creând un scurt. Este mai bine să nu coaseți prin țesătura conductivă. Atașați snaps și comutatorul este gata. Mi s-a părut mai ușor să folosesc snapul masculin pentru toate conexiunile inferioare / GND și snapul feminin pentru toate vârfurile. Acest lucru face ca toate comutatoarele să fie interschimbabile. Mi-am luat resturile, am fuzionat bucăți mari de fuzionare cu bucăți mari de țesătură conductivă și le-am folosit pentru a tăia dreptunghiurile mai mici pe care le-am folosit ca tampoane. Așezați întrerupătoarele și fuzionați tampoanele la bază cu suficient spațiu pentru a coase o linie și a avea o clipă. Piciorul mașinii de cusut pe care l-am folosit nu a avut amabilitatea de a fi foarte aproape de dispozitivul de prindere, așa că rețineți acest lucru și acordați-vă spațiu. De când am un fir conductiv care ar putea merge în mașina mea de cusut, am cusut doar o linie de la pad la pad și înapoi. Trebuia să merg lent sau firul se rupea, dar era cu o tonă mai rapidă decât cusutul manual. De asemenea, cu fir conductiv pe bobină și ac, am obținut o conexiune solidă foarte bună. Lucrurile se prăbușesc ca o nebunie, dar un pic de adeziv meșteșugărește sau Elmers șterge asta. Încercați să păstrați liniile departe unul de celălalt și nu ar trebui să aveți probleme. Asamblarea finală: conectați toate comutatoarele, conectați placa, încărcați codul și ați terminat. Am folosit sârmă pentru a ajunge de la placă la tampon și apoi am cusut firul la bază cu mâna. Pentru următoarea versiune, voi monta placa într-o cutie de plastic cu butoane pentru a o atașa la bază, astfel încât degetele inactive să nu o despartă.

Pasul 8: Cod

Cod
Cod

Dacă nu ați programat niciodată un cip înainte, aceasta este o sarcină oarecum descurajantă. Nu ajută ca instrumentele să fie fulgiante și de cele mai multe ori trebuie să efectuați aceeași operație de mai multe ori. Cele mai bune două resurse pe care le-am găsit pentru a înțelege ce se întâmplă este pagina pentru USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ și cursul accidental în programarea jucăriei de zgomot, http: / /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Acestea ar trebui să vă poată începe.

O mulțime de oameni îi place Arduino pentru această codificare și nu este nimic în neregulă cu utilizarea acestuia, cu excepția faptului că simt că adaugă o mulțime de umflături unui program normal simplu. De asemenea, știam C și nu știu Arduino. Poate într-o zi, dacă e timp.:) Cod: {{{#include // Folosiți un pin pentru a activa 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); // Setați SPK pentru ieșirea PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Setare buton înalt PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Configurați temporizatorul în timp ce (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; }}}}}}} De unde vin pitch-urile? Era nevoie de puțină matematică. Ceasul cu temporizator de pe atmega 168 rulează la 1 MHz. Este mult prea rapid pentru audio, așa că trebuie să folosim prescalerul / 8. Apoi, de vreme ce trebuie să rotim pinul de ieșire în sus, apoi în jos, pentru a face 1 ciclu, trebuie să împărțim răspunsul la 2 pentru a obține tonul corect. Formula arată astfel, Pitch to put in code = (1000000/8) / (Frecvența țintă * 2) Pentru A (440) aceasta ar fi 125000/880 = 142.045 sau 142 pentru scopurile noastre, deoarece valoarea trebuie să fie un număr întreg. Frecvențele țintă ale notelor pot fi găsite aproape oriunde online și sunt, în general, la fel. Încă vreau să adaug o declarație de caz în loc să folosesc o grămadă de If-uri și să folosesc PWM pentru a controla mai bine volumul și înălțimea difuzorului, dar pentru moment, acest lucru funcționează.

Recomandat: