Taula de continguts:

Generador de tons de tela de microcontrolador en codi C: 8 passos (amb imatges)
Generador de tons de tela de microcontrolador en codi C: 8 passos (amb imatges)

Vídeo: Generador de tons de tela de microcontrolador en codi C: 8 passos (amb imatges)

Vídeo: Generador de tons de tela de microcontrolador en codi C: 8 passos (amb imatges)
Vídeo: SKR Pro v1.x - установка Klipper 2024, Juliol
Anonim
Generador de tons de tela de microcontrolador en codi C
Generador de tons de tela de microcontrolador en codi C

A finals d'octubre de l'any passat, l'usuari instructiu carmitsu em va enviar un missatge després de veure el sintetitzador de la meva carmanyola. Des del seu missatge: faig classes de música a l'escola primària. Posem molta música de flauta de bec. és a dir, els nens toquen petites flautes …… Tinc diversos nens amb necessitats especials que poden utilitzar aquests cartells negres amb cercles que porten el nom de la nota. Aquests estudiants empenyen els cercles amb noms de notes al mateix temps que la resta d'estudiants toquen una cançó … La majoria dels nens amb necessitats especials poden fer-ho bastant bé i a temps amb la música. El que busco és construir un generador de so molt senzill perquè aquests nens puguin tocar el mateix to que els que toquen els estudiants a les seves gravadores. Jo només seria un parell de llançaments. Vaig pensar que podia fixar algun tipus de botó petit a la part inferior dels seus cercles rodons perquè, quan els pressionessin, sortís el so d’un altaveu petit, prou fort perquè poguessin sentir. Tenir una mare mestra i haver agradat l’escola, com podia resistir-me? La veritat és que no podia. Aquesta és pràcticament una crònica del projecte i instruccions sobre com construir el vostre.

Pas 1: el principi o per què no em podia quedar amb l'analògic

El principi o Per què no em podia quedar amb l’analògic
El principi o Per què no em podia quedar amb l’analògic

Les coses bones comencen a la pàgina següent. Si voleu saber com he acabat fent servir les parts que he fet, seguiu llegint. El veritable temporitzador: després de pensar-ho en el projecte, vaig pensar immediatament en el generador de tons piezo del meu llibre d'amplis operatius Forest Mims III. Sembla un bon camí a seguir, és només un piezo, un IC 741 i un parell de components passius. No hi ha gran cosa, oi? Doncs té 2 problemes, 1) quan premeu l'interruptor, és possible canviar el to 2) és gairebé impossible d'afinar. El primer es podria superar amb alguna tecnologia de rebounce, tot i que no sabia com fer-ho sense afegir un altre comptador. També podria ser un problema amb l’ús d’un piezo. El segon número es va fer difícil quan es va començar a intentar fer un to determinat. Què passa amb el 555? El full de dades mostra una funció de dlay de temps basada en resistències i condensadors. Cosa fantàstic fins que comenceu a escriure els valors reals de les parts del món real, és llavors quan veureu que tocar un to de 440Hz comença a ser una mica difícil. Podeu utilitzar olles de retall per ajustar-les, però amb el pas del temps tendeixen a moure’s. Afinant constantment l’instrument, compilat a més d’un ràpid augment del cost i la quantitat de peces, i la meva dona que va canviar el to quan va prémer el botó va matar el 555 per a aquest projecte. op-amps des d'abans de néixer. Què tan difícil pot ser fer-ne una de molt senzilla, amb poques parts i notes específiques? Més difícil del que em pensava. La majoria dels dissenys que hi ha són molt complicats per a aquest projecte. Els dissenyadors de sintetitzadors tenen la forma d’ona / el to perfectes. Això entra directament en conflicte amb un projecte que se suposa que és prou barat per al pressupost escolar o de professors. Construir un teclat és prou fàcil, només és un munt de resistències i potència o un munt de díodes i potència. És la resta del disseny del circuit i el cost dels equips personalitzats que comencen a escapar-se de les mans per a algú amb un nivell electrònic inicial. Redefinició del projecte: de manera que el projecte es va redefinir fins que fins i tot no em posés en marxa. Necessitava alguna cosa que pogués commutar un passador d’altaveu amb el temps, amb només prémer un botó. No volia haver de dissenyar i comprar un PCB. Això havia d’utilitzar el mínim de components possibles i s’havia de muntar com un kit per a principiants. Em va estar mirant a la cara tot el temps. Duh !! Microcontrolador! Microcontrolador: per tant, després d’haver comprat tant un kit Modern Arduino de Bare Bones Devices com una placa Target Simple Evil Mad Scientist i deixar-los reposar al meu escriptori durant mesos que no s’utilitzaven, vaig tenir el projecte introductori perfecte. Vaig començar a mirar el temps que es necessita per ajuntar tots dos, la corba d’aprenentatge del codi, el cost, les parts addicionals necessàries i fer-lo fer el que vull i em vaig instal·lar al tauler objectiu. El cost era força uniforme, 15 $ més un cable FTDI de 20 $ per a l’Arduino, 12 $ més un programador USBtinyISP de 22 $. Ja sabia C ++ des de la petita universitat que podia suportar i vaig pensar que C per als microcontroladors no seria tan dolent, tot i que, a part de parpellejar una llum per assegurar-me que vaig posar el kit correctament, no tenia experiència Arduino. Tots dos es podrien muntar. Va ser pràcticament un llançament, així que vaig decidir per les parts menys de les dues, el tauler objectiu.

Pas 2: què necessiteu Rev. 1

El que necessiteu Rev. 1
El que necessiteu Rev. 1

Parts 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 Malvat Laboratoris científics ATmegaXX8 Mini Dev Kits 12 $ Headers, 6 pins DIP, 5-pk 2,75 $ https://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (Mini de 8 ohm) 2,79 $ https://www.radioshack.com/product/index.jsp? ProductId = 2062406SPST Commutadors momentanis oberts normalment (hem utilitzat 5) 3,49 dòlars (4pack) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA "Suport de bateria 1,79 dòlars https://www.radioshack.com/product/index.jsp? ProductId = 2102735SPST Interruptor de diapositiva Submini (opcional per a l’interruptor d’alimentació) $ 2,69 (paquet de 2) https://www.radioshack.com/product/index.jsp?productId=2062490LED i resistència (opcional, si voleu un llum d’alimentació) Si estan estirats al voltant, $ $ també hauria d’estar estirat Soldadura de plata (si això passa a prop dels nens, probablement no hauríeu d’utilitzar plom, els pares es tornen bastant estranys en aquest tipus de coses;)) Fregant alcohol (per re move flux) Si voleu alguns llocs per estalviar diners, no cal que obtingueu peces de RadioShack. Ho vaig fer perquè són propers i previsibles.

Pas 3: Assemblea Rev 1

Assemblea Rev 1
Assemblea Rev 1
Assemblea Rev 1
Assemblea Rev 1

Poseu les peces juntes com es mostra. Assegureu-vos d’utilitzar alcohol per fregar i un raspall de flux quan hàgiu acabat per eliminar qualsevol flux de soldadura. A continuació, es mostra Schematic per a aquells que ho prefereixin. D1 i R1 poden ser el que vulgueu, només és una llum de potència. C1 és només per ajudar a fer que la potència sigui una mica més consistent. He utilitzat un 10uF. Aquest esquema és el mateix per a les versions posteriors, només cal canviar els botons polsadors per als interruptors de tela. a la darrera revisió vaig afegir interruptors a PC4 i PC5 o als pins 27 i 28.

Pas 4: què necessiteu Rev 2

El que necessiteu Rev. 2
El que necessiteu Rev. 2

Per tant, bàsicament canvieu els botons de Radio Shack per uns de tela fets a mà. Necessiteu: diversos colors de tela o un color si voleu que cada nota tingui el mateix color. La secció de cobriment de la botiga de teixits més propera és el millor lloc per aconseguir-ho a un preu més baix. Els quarts de cobrelliment costen 1,50 dòlars i podeu obtenir un munt d’interruptors d’un. Teixit conductor, li suggereixo que el teixit Flectron de LessEMF val 20 dòlars per una peça de 12 "x54". Els podeu aconseguir a la majoria de botigues de teixits barates. JoAnn té l'eina i 25 per 2 dòlars. Per a això, necessitareu un martell. Cable, he utilitzat 22AWG, us suggereixo que sigui més petit si el teniu. Pregunteu a la botiga i probablement el podreu comprar al pati. Probablement funcionaria bé, tot i que us suggereixo que ho demaneu a algú que batte, al principi vaig utilitzar coses molt fluixes i després vaig canviar a un punt més estret. Us proposo que en proveu un parell de diferents fins que trobeu el que funciona millor. Els tubs encongits de calor, van fer que tot sigui molt més manejable. es redueixen els cables a mesura que es passen i es quedaran molt millor.

Pas 5: Assemblea Rev 2

Assemblea Rev 2
Assemblea Rev 2
Assemblea Rev 2
Assemblea Rev 2
Assemblea Rev 2
Assemblea Rev 2

Col·loqueu el teixit multicolor l’un sobre l’altre i retalleu un quadrat, no ha de ser perfecte. Planxa la tela per treure’n els plecs, torna-los a posar cap sobre l’altre i assegura’t que les vores coincideixin. Talla les vores que no ho facin. Talla les rodones superior i inferior, deixant els costats dret i esquerre. Invertireu l’interruptor després de cosir, així que no feu que els costats arrodonits siguin massa rodons i deixeu prou alçada als costats plans per fer passar l’interruptor fàcilment quan hàgiu acabat. Arrodoneu el costat pla del primer i de l’últim interruptor. Dirigiu-vos a la màquina de cosir i poseu dues de les rodones de manera que el costat bo s’enfrontin i cosiu les costures a les parts planes. cosides, tallades quadrades del teixit conductor i fusionades per un costat. Tallar el filferro a la longitud i desprendre’l d’un extrem. soldeu el filferro al voltant d’un dels traus. (És probable que la soldadura no s’enganxi a l’ullet). Talla una petita esqueixada al teixit en una cantonada i bat el martell per fixar el teixit i el filferro. traieu el suport del fusor i fusioneu el teixit conductor a la part posterior del teixit de colors. Repetiu per a tots els commutadors. Per fer les coses més fàcils, podeu escalfar els cables contra els cables cada vegada que un fil passi el cable per al següent interruptor. Obteniu o feu un tros de tela de la longitud del conjunt d’interruptors i talleu una tira de tela conductora de la seva longitud. A diferència dels interruptors de colors, es tracta d’una peça llarga. Això serà el que toquen els botons per establir la connexió. Talleu una escletxa petita i poseu-hi un cable amb un trau, com les tapes de l'interruptor de colors. Feu-lo a la part posterior de la tela inferior. Cosiu la part superior i la inferior junt amb la tela conductora cap a fora, utilitzeu un pal de jardí per invertir el joc després de cosir-lo. fer un cercle i després treure l’escuradents i fer el tall. Talleu-los amb forma i inseriu-los als interruptors. Això és el que separa el teixit conductor. Pot ser més fàcil inserir la batuda mentre inverteix els interruptors en lloc de després. Les coses que utilitzava es van desgastar força malament mentre l’inseria i vaig haver d’obtenir diferents batudes. Finalment, enganxeu els cables al tauler objectiu i ja esteu a punt. La llarga franja inferior es triturarà.

Pas 6: què necessiteu Rev 3

El que necessiteu Rev 3
El que necessiteu Rev 3

A Rev 3 vaig fer que els interruptors fossin independents del cablejat. Això va estalviar un munt de temps. També m’agrada molt més l’aspecte del resultat acabat. Per tant, aquí teniu les noves parts que necessiteu: Snaps, només les he obtingut de JoAnn. Venien amb una eina d’instal·lació que no estava gens malament per 7 dòlars. Suggeriria una de les eines d’alicates, ja que vaig haver de desmuntar la meva eina per instal·lar els retalls al centre. Les costures serien una bona alternativa, tot i que triguen més a adherir-se. Fil conductor, Spark Fun té coses que poden anar a la màquina de cosir. Havia d’anar molt lent a la meva màquina perquè el fil es trenqués. El vostre quilometratge pot variar

Pas 7: Assemblea Rev 3

Assemblea Rev 3
Assemblea Rev 3
Assemblea Rev 3
Assemblea Rev 3
Assemblea Rev 3
Assemblea Rev 3
Assemblea Rev 3
Assemblea Rev 3

Aquesta revisió va ser molt millor que l'anterior en termes de temps fins a la seva construcció. A més, tenir interruptors extraïbles m’ha estalviat el seny més d’una vegada. Comenceu fent la base. És només un quart encoixinat doblegat per la meitat. Poseu una capa de batuda a la part superior i cosiu, deixant un forat per invertir-la. Premeu la cosa pel forat i bàsicament teniu una cosa tipus coixí. El vaig encoixinar perquè fos més fàcil treballar. Utilitzeu un fil llis i aneu de rosca. Vaig fer diamants, però potser la propera vegada us posaré un drac al darrere o alguna cosa divertida. Ara, als interruptors. M’agrada aquest disseny perquè bàsicament podeu fer-ne un munt d’antelació i utilitzar el que vulgueu. comenceu utilitzant un tros de cartró, paper o tela i retalleu-ne una forma de pera. Utilitzeu això com a guia per tallar una part superior i inferior per a cada interruptor. Vaig tallar un color per a cada part inferior i un color diferent per a la part superior, però podeu ser creatiu i fer el que vulgueu. Reduïu la vostra guia a una forma de piruleta que s’adapti fàcilment a l’interruptor. Allargueu el "pal" perquè es pugui embolicar sobre la vora de la "pera". Retalleu la forma del teixit fusor i conductor i fusioneu un costat del teixit conductor. Traieu el suport del material de fusió i fusioneu-lo a la part superior del teixit que hi haurà a la part inferior i a la part inferior del teixit que hi haurà a la part superior. Emboliqueu la part extra per la part superior. Dirigeix-te cap a la màquina de cosir i fes batre amb forats entre la tela superior i inferior. Cosiu fora del teixit conductor i passeu per sobre de la part "enganxosa" de l'interruptor. Vaig trobar que era possible cosir la tela conductora superior cap a la part inferior creant un curt. És millor no cosir a través del teixit conductor. Adjuntar instantànies i el commutador està acabat. Em va resultar més fàcil fer servir el complement masculí per a totes les connexions inferiors / GND i el complement femení per a totes les parts superiors. Això fa que tots els commutadors siguin intercanviables. Vaig agafar els trossos, vaig fusionar grans trossos de fusió amb grans trossos de tela conductora i els vaig utilitzar per retallar els rectangles més petits que feia servir com a coixinets. Col·loqueu aproximadament els interruptors i fusioneu els coixinets a la base amb prou espai per cosir-los una línia i fer-hi un clic. El peu de la màquina de cosir que vaig utilitzar no va tenir la gràcia d’estar molt a prop de la presa, així que tingueu-ho en compte i doneu-vos una mica d’espai. Com que tenia un fil conductor que podia anar a la màquina de cosir, només vaig cosir una línia de coixinet a coixinet i cap enrere. Havia d’anar lent o el fil es trencaria, però era molt més ràpid que la costura manual. També amb fil conductor a la bobina i l’agulla, vaig obtenir una connexió sòlida molt bona. Les coses es trenquen com una bogeria, però una mica de cola artesanal o Elmers ho aclareix. Intenteu mantenir les línies allunyades les unes de les altres i no hauríeu de tenir cap problema. Muntatge final: connecteu tots els commutadors, connecteu la placa, carregueu el codi i ja haureu acabat. Vaig utilitzar filferro per anar del tauler al coixinet i després vaig cosir el fil a la base a mà. Per a la propera versió, muntaré el tauler en una caixa de plàstic amb claus per fixar-lo a la base de manera que els dits inactius no el separin.

Pas 8: Codi

Codi
Codi

Si mai no heu programat cap xip, aquesta és una tasca descoratjadora. No ajuda que les eines siguin escamoses i la majoria de les vegades haureu de realitzar la mateixa operació diverses vegades. Els dos millors recursos que he trobat per obtenir una comprensió del que està passant són la pàgina de l’USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ i el curs de programació de la joguina de soroll, http: / /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Aquests haurien de ser capaços de començar.

A molta gent li agrada Arduino per aquesta codificació i no hi ha res de dolent en fer-lo servir, excepte que crec que afegeix molta intensitat a un programa normalment senzill. A més, coneixia C i no sé Arduino. Potser algun dia, si hi ha temps.:) Codi: {{{#include // Useu un pin per activar 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); // Estableix SPK per a la sortida PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Establir botó alt PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Configura el temporitzador mentre (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); // Voltejar el pin SPK TCNT2 = 0; }} if (btnState1) {if (TCNT2> = 179) {PORTB ^ = (1 << PD6); // Voltejar el pin SPK TCNT2 = 0; }} if (btnState2) {if (TCNT2> = 159) {PORTB ^ = (1 << PD6); // Voltejar el pin SPK TCNT2 = 0; }} if (btnState3) {if (TCNT2> = 142) {PORTB ^ = (1 << PD6); // Voltejar el pin SPK TCNT2 = 0; }} if (btnState4) {if (TCNT2> = 126) {PORTB ^ = (1 << PD6); // Voltejar el pin SPK TCNT2 = 0; }} if (btnState5) {if (TCNT2> = 119) {PORTB ^ = (1 << PD6); // Voltejar el pin SPK TCNT2 = 0; }} if (btnState6) {if (TCNT2> = 106) {PORTB ^ = (1 << PD6); // Voltejar el pin SPK TCNT2 = 0; }}}}}}} D'on provenen els llançaments? Calia una mica de matemàtiques. El rellotge del temporitzador de l'atmega 168 funciona a 1 MHz. Això és massa ràpid per a l’àudio, de manera que hem d’utilitzar el prescaler / 8. Llavors, ja que hem de fer girar el pin de sortida alt i baix per fer 1 cicle, hem de dividir la resposta per 2 per arribar al to correcte. La fórmula té aquest aspecte: Pitch to put in code = (1000000/8) / (Freqüència objectiu * 2) Per a A (440) seria 125000/880 = 142.045 o 142 per als nostres propòsits, ja que el valor ha de ser un nombre enter. Les freqüències objectiu de les notes es poden trobar a qualsevol lloc en línia i, en general, són iguals. Encara vull afegir una declaració de majúscules i minúscules en lloc d’utilitzar un munt d’Ifs i utilitzar PWM per controlar millor el volum i l’altura de l’altaveu, però de moment, això funciona.

Recomanat: