Tabla de contenido:

Generador de tono de tejido de microcontrolador en código C: 8 pasos (con imágenes)
Generador de tono de tejido de microcontrolador en código C: 8 pasos (con imágenes)

Video: Generador de tono de tejido de microcontrolador en código C: 8 pasos (con imágenes)

Video: Generador de tono de tejido de microcontrolador en código C: 8 pasos (con imágenes)
Video: FPGAs para la Aceleración Hardware de Algoritmos 2024, Mes de julio
Anonim
Generador de tono de tejido de microcontrolador en código C
Generador de tono de tejido de microcontrolador en código C

A finales de octubre del año pasado, el usuario de instructables carmitsu me envió un mensaje después de ver mi sintetizador lunchbox. De su mensaje: enseño música en la escuela primaria. Tocamos mucha música de grabadora. es decir, los niños tocan pequeñas flautas … Tengo varios niños con necesidades especiales que pueden usar estas cartulinas negras con círculos que tienen el nombre de la nota en ellos. Estos estudiantes empujan los círculos con los nombres de las notas al mismo tiempo que el resto de los estudiantes están tocando una canción … La mayoría de los niños con necesidades especiales pueden hacerlo bastante bien y al compás de la música. Lo que estoy buscando es construir un generador de sonido muy simple para que estos niños puedan tocar el mismo tono que los estudiantes tocan en sus grabadoras. Solo sería unos pocos lanzamientos. Pensé que podría colocar algún tipo de botón pequeño en la parte inferior de sus círculos redondos para que cuando los presionen, el sonido salga de un altavoz pequeño, lo suficientemente alto como para que puedan escuchar. Tener una madre que es maestra y que le haya gustado la escuela, ¿cómo podría resistirme? A decir verdad, no podría. Esta es prácticamente una crónica del proyecto e instrucciones sobre cómo construir el tuyo propio.

Paso 1: El comienzo o por qué no pude seguir con lo analógico

El comienzo o por qué no podía seguir con lo analógico
El comienzo o por qué no podía seguir con lo analógico

Las cosas buenas comienzan en la página siguiente. Si quieres saber cómo terminé usando las partes que hice, sigue leyendo. El verdadero temporizador: Después de pensar un poco en el proyecto, inmediatamente pensé en el generador de tonos piezoeléctricos de mi libro de amplificadores operacionales Forest Mims III. Parecía un buen camino a seguir, es solo un piezo, un 741 IC y un par de componentes pasivos. No es gran cosa, ¿verdad? Bueno, tiene 2 problemas, 1) cuando presionas el interruptor, es posible cambiar el tono 2) es casi imposible sintonizar. El primero probablemente podría superarse con algo de tecnología antirrebote, aunque no sabía cómo hacerlo sin agregar otro contador. También podría ser un problema al usar un piezo. El segundo problema se volvió difícil de manejar cuando empezaste a intentar hacer un determinado lanzamiento. ¿Y el 555? La hoja de datos muestra una función de retardo de tiempo basada en resistencias y condensadores. Lo cual es genial hasta que comienzas a escribir valores reales de partes del mundo real, ahí es cuando encontrarás que alcanzar un tono de 440Hz comienza a ser un poco difícil. Puede usar ollas de recorte para sintonizarlo, pero con el tiempo tienden a moverse. Afinando constantemente el instrumento, compilado sobre un rápido aumento en el costo y la cantidad de partes, y mi esposa haciendo el cambio de tono cuando presionó el botón mató el 555 para este proyecto. Op-amp: No hay problema, la gente ha estado haciendo sintetizadores con amplificadores operacionales desde antes de que yo naciera. ¿Qué tan difícil puede ser hacer uno realmente simple, con pocas partes y notas específicas? Más duro de lo que pensaba. La mayoría de los diseños que existen son demasiado complicados para este proyecto. Los diseñadores de sintetizadores buscan la forma de onda / tono perfectos. Esto entra en conflicto directamente con un proyecto que se supone que es lo suficientemente barato para los presupuestos de la escuela o los profesores. Construir un teclado es bastante fácil, es solo un montón de resistencias y potencia o un montón de diodos y potencia. Es el resto del diseño del circuito y el costo de los PCB personalizados lo que comienza a salirse de control para alguien con un nivel principiante de electrónica. Redefinición del proyecto: así que el proyecto se redefinió antes de que yo me pusiera en marcha. Necesitaba algo que pudiera alternar un pin de altavoz, a tiempo, con solo presionar un botón. No quería tener que diseñar y comprar un PCB. Esto tenía que usar la menor cantidad posible de componentes y ensamblarse como un kit para principiantes. Me estuvo mirando a la cara todo el tiempo. ¡¡Duh !! ¡Microcontrolador! Microcontrolador: Entonces, después de comprar un kit Arduino Bare Bones de Modern Devices y una placa de objetivo simple Evil Mad Scientist y dejarlos reposar en mi escritorio durante meses sin usarlos, tuve el proyecto introductorio perfecto. Comencé a mirar el tiempo que lleva juntar ambos, la curva de aprendizaje del código, el costo, las partes adicionales necesarias y hacer que haga lo que quiero y me instalé en el tablero de destino. El costo era bastante uniforme, $ 15 más un cable FTDI de $ 20 para el Arduino, $ 12 más un programador USBtinyISP de $ 22. Ya sabía C ++ de la pequeña universidad que podía soportar y pensé que C para microcontroladores no sería tan malo, mientras que, aparte de hacer parpadear una luz para asegurarme de que armaba mi kit correctamente, no tenía experiencia con Arduino. Ambos se pueden montar. Fue más o menos un lanzamiento, así que me decidí por la menor cantidad de partes de las dos, el tablero objetivo.

Paso 2: Lo que necesita Rev 1

Lo que necesita Rev 1
Lo que necesita Rev 1

Costo de piezasUSBtinyISP AVR Programmer 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 $ 12 Encabezados, DIP de 6 pines, Paquete de 5 $ 2.75https://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (8-ohm Mini) $ 2.79https://www.radioshack.com/product/index.jsp? ProductId = 2062406SPST Interruptores momentáneos normalmente abiertos (usamos 5) $ 3.49 (paquete de 4) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA "Soporte de batería $ 1.79https://www.radioshack.com/product/index.jsp? ProductId = 2102735SPST Interruptor deslizante Submini (opcional para interruptor de encendido) $ 2.69 (paquete de 2) https://www.radioshack.com/product/index.jsp?productId=2062490LED y resistencia (opcional, si desea una luz de encendido) $ debería ser gratis si están por ahí Alambre $ también debería estar por ahí Soldadura de plata (si esto se acerca a los niños, probablemente no debería usar plomo, los padres se ponen bastante raros con ese tipo de cosas;)) Frotar alcohol (para volver a move flux) Si desea que algunos lugares ahorren dinero, no es necesario que obtenga piezas de RadioShack. Lo hice porque son cercanos y predecibles.

Paso 3: Montaje Rev 1

Asamblea Rev 1
Asamblea Rev 1
Asamblea Rev 1
Asamblea Rev 1

Junte las piezas como se muestra. Asegúrese de usar alcohol isopropílico y un cepillo de fundente cuando haya terminado para deshacerse de cualquier fundente de la soldadura. A continuación se muestra el esquema para aquellos que lo prefieran. D1 y R1 pueden ser lo que quieras, es solo una luz de encendido. C1 es solo para ayudar a que la potencia sea un poco más consistente. Usé un 10uF. Este esquema es el mismo para las versiones posteriores, simplemente cambie los botones pulsadores por interruptores de tela. en la última revisión agregué interruptores a PC4 y PC5 o pines 27 y 28.

Paso 4: Lo que necesita Rev 2

Lo que necesita Rev 2
Lo que necesita Rev 2

Básicamente, estás cambiando los botones de Radio Shack por botones de tela hechos a mano. Necesitas: varios colores de tela, o un color si quieres que todas las notas sean del mismo color. La sección de acolchados de la tienda de telas más cercana es el mejor lugar para conseguirla por poco dinero. Los cuartos de acolchado cuestan $ 1.50 y puedes obtener una tonelada de interruptores con uno. Tejido conductor, sugiero que el tejido Flectron de LessEMF cuesta $ 20 por una pieza de 12 "x54" Ojales para sujetar el cable a la tela. Puedes conseguirlos baratos en la mayoría de las tiendas de telas. JoAnn tiene la herramienta y 25 por $ 2 Necesitarás un martillo para esto. Alambre, yo usé 22AWG, sugiero más pequeño si lo tienes. Fusionar, para que la tela de color y conductora se pegue. Pregunte en la tienda y probablemente pueda comprarlo en el patio. Esto probablemente funcionaría bien, aunque te sugiero que le preguntes a alguien. Bateando, usé un material muy suelto al principio, luego cambié a algo más apretado. Te sugiero que pruebes un par de diferentes hasta que encuentres lo que funciona mejor. Tubos termorretráctiles, esto hizo que todo fuera mucho más manejable. Los cables termorretráctiles se juntan cuando se cruzan entre sí y se mantendrán mucho mejor.

Paso 5: Ensamblaje Rev 2

Asamblea Rev 2
Asamblea Rev 2
Asamblea Rev 2
Asamblea Rev 2
Asamblea Rev 2
Asamblea Rev 2

Coloque las telas multicolores una sobre la otra y corte un cuadrado, no tiene que ser perfecto. Planche la tela para sacar los pliegues, colóquelos uno encima del otro nuevamente y asegúrese de que todos los bordes coincidan. Corta los bordes que no lo hagan. Corta la parte superior e inferior redondas, dejando los lados derecho e izquierdo rectos. Vas a invertir el interruptor después de coser, así que no redondees demasiado los lados redondeados y deja suficiente altura en los lados planos para empujar el interruptor fácilmente cuando hayas terminado. Redondea el lado plano del primer y último interruptor. Dirígete a tu máquina de coser y junta dos de las vueltas de modo que el lado bueno quede frente a frente y cose una costura en las partes planas. cosido, corte cuadrados de la tela conductora y fusione un lado. Corte el cable a la medida y pele un extremo. suelde el cable alrededor de uno de los ojales. (Es probable que la soldadura no se adhiera al ojal) Corte un pequeño corte en la tela en una esquina y martille el ojal para unir la tela y el alambre. retire el respaldo de la fusión y fusione la tela conductora a la parte posterior de la tela de color. Repita para todos los interruptores. Para facilitar las cosas, puede encoger los cables con un tubo termorretráctil cada vez que un cable pasa por el cable para el siguiente interruptor. Obtenga o haga un trozo de tela del largo del interruptor y corte una tira de tela conductora a lo largo del mismo. A diferencia de los interruptores de colores, esta es una pieza larga. Esto será lo que toquen los botones para realizar la conexión. Corta una pequeña hendidura y pégale un cable con un ojal, como las tapas de los interruptores de colores. Fúndelo en la parte posterior de la tela inferior. Cosa la parte superior e inferior junto con la tela conductora hacia afuera, usa una vara para invertir el conjunto después de coserlo. Corta algunos agujeros pequeños en la guata, usé un palillo para obtener haz un círculo, luego quita el palillo y haz el corte. Córtelos para darles forma e insértelos en los interruptores. Esto es lo que mantiene la tela conductora separada. Puede ser más fácil insertar la guata mientras inviertes los interruptores en lugar de después. Las cosas que solía romper bastante mientras lo insertaba y tuve que obtener diferentes bates. Finalmente, conecte los cables a la placa de destino y ya está todo listo. Se rectificará la franja inferior larga.

Paso 6: Lo que necesita Rev 3

Lo que necesita Rev 3
Lo que necesita Rev 3

En Rev 3 hice los interruptores independientes del cableado. Esto ahorró mucho tiempo. También me gusta mucho más el aspecto del resultado final, así que aquí tienes las piezas nuevas que necesitas: Snaps, las acabo de conseguir de JoAnn. Vinieron con una herramienta de instalación que no estaba mal por $ 7. Sugeriría una de las herramientas de alicates en su lugar, ya que tuve que desmontar mi herramienta para instalar los broches en el medio. Coser sería una buena alternativa, aunque tardan más en adherirse. Hilo conductor, Spark Fun tiene cosas que pueden ir en su máquina de coser. Tuve que ir muy lento en mi máquina o el hilo se rompería. Su experiencia puede ser diferente

Paso 7: Ensamblaje Rev 3

Asamblea Rev 3
Asamblea Rev 3
Asamblea Rev 3
Asamblea Rev 3
Asamblea Rev 3
Asamblea Rev 3
Asamblea Rev 3
Asamblea Rev 3

Esta revisión fue mucho mejor que la anterior en términos de tiempo hasta su construcción. Además, tener interruptores extraíbles me salvó la cordura más de una vez. Empiece por hacer la base. Es solo un cuarto de acolchado doblado por la mitad. Ponga una capa de guata en la parte superior y cosa, dejando un agujero para invertirlo. Empuja la cosa a través del agujero y básicamente tienes una cosa tipo almohada. Lo acolché para que fuera más fácil trabajar con él. Usa hilo liso y vuélvete loco. Hice diamantes en este, pero tal vez la próxima vez ponga un dragón atrás, o algo genial. Ahora, en los interruptores. Me gusta este diseño porque básicamente puedes hacer un montón de estos con anticipación y usar lo que quieras. Comience usando un trozo de cartón, papel o tela y corte una forma de pera. Úselo como guía para cortar una parte superior e inferior para cada interruptor. Corté un color para cada parte inferior y un color diferente para la parte superior, pero puedes ser creativo y hacer lo que quieras. Corta tu guía a una forma de piruleta que quepa fácilmente dentro del interruptor. Alargue el "palo" para que pueda envolver el borde de la "pera". Corte la forma de la tela conductora y de fusión y fusione un lado de la tela conductora. Retire el respaldo del material de fusión y fúndalo en la parte superior de la tela que estará en la parte inferior y la parte inferior de la tela que estará en la parte superior. Envuelva el trozo extra alrededor de la parte superior. Dirígete a tu máquina de coser y coloca guata con agujeros entre la tela superior e inferior. Cosa por fuera de la tela conductora y omita la parte del "palo" del interruptor. Descubrí que es posible coser la tela conductora superior a la inferior creando un corto. Es mejor no coser a través de la tela conductora. Coloque broches y el interruptor está listo. Me resultó más fácil usar el broche macho para todas las conexiones inferiores / GND y el broche hembra para todas las partes superiores. Esto hace que todos los interruptores sean intercambiables. El circuito: Lo que pasa con el corte de rondas es que tienes muchos bits adicionales. Tomé mis restos, fusioné grandes trozos de fusión en grandes trozos de tela conductora y los usé para cortar los rectángulos más pequeños que usé como almohadillas. Extienda de manera aproximada sus conmutadores y fusione las almohadillas a la base con suficiente espacio para coserles una línea y hacer un chasquido. El pie de la máquina de coser que utilicé no le gustó estar muy cerca del chasquido, así que tenlo en cuenta y date algo de espacio. Desde que obtuve hilo conductor que podía entrar en mi máquina de coser, simplemente cosí una línea de almohadilla a almohadilla y viceversa. Tuve que ir lento o el hilo se rompería, pero era mucho más rápido que coser a mano. También con hilo conductor en la bobina y la aguja, obtuve una conexión sólida realmente buena. El material se deshilacha como loco, pero un poco de pegamento para manualidades o Elmers lo aclara de inmediato. Trate de mantener las líneas bien alejadas entre sí y no debería tener ningún problema. Ensamblaje final: coloque todos sus interruptores, conecte la placa, cargue el código y listo. Usé alambre para pasar de la tabla a la almohadilla y luego simplemente cosí el alambre a la base a mano. Para la próxima versión, montaré la placa en una caja de plástico con broches para sujetarla a la base para que los dedos inactivos no la separen.

Paso 8: Código

Código
Código

Si nunca antes ha programado un chip, esta es una tarea algo abrumadora. No ayuda que las herramientas sean inestables y la mayoría de las veces tenga que realizar la misma operación varias veces. Los dos mejores recursos que he encontrado para comprender lo que está sucediendo son la página de USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ y el curso intensivo de programación del juguete de ruido, http: / /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Estos deberían poder ayudarlo a comenzar.

A mucha gente le gusta Arduino para esta codificación y no hay nada de malo en usarlo, excepto que creo que agrega mucha hinchazón a un programa normalmente simple. Además, conocía C y no sé Arduino. Quizás algún día, si hay tiempo.:) Código: {{{#include // Use un pin para encender el SPK /// Typedefs ////////// typedef unsigned char u8; int main (vacío) {u8 btnState0; u8 btnState1; u8 btnState2; u8 btnState3; u8 btnState4; u8 btnState5; u8 btnState6; DDRB = (1 << DDB6); // Establecer SPK para la salida PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Establecer botón alto PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Configurar el temporizador while (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); // Voltear el pin SPK TCNT2 = 0; }} if (btnState1) {if (TCNT2> = 179) {PORTB ^ = (1 << PD6); // Voltear el pin SPK TCNT2 = 0; }} if (btnState2) {if (TCNT2> = 159) {PORTB ^ = (1 << PD6); // Voltear el pin SPK TCNT2 = 0; }} if (btnState3) {if (TCNT2> = 142) {PORTB ^ = (1 << PD6); // Voltear el pin SPK TCNT2 = 0; }} if (btnState4) {if (TCNT2> = 126) {PORTB ^ = (1 << PD6); // Voltear el pin SPK TCNT2 = 0; }} if (btnState5) {if (TCNT2> = 119) {PORTB ^ = (1 << PD6); // Voltear el pin SPK TCNT2 = 0; }} if (btnState6) {if (TCNT2> = 106) {PORTB ^ = (1 << PD6); // Voltear el pin SPK TCNT2 = 0; }}}}}}} ¿De dónde vienen los lanzamientos? Se necesitaba un poco de matemáticas. El reloj temporizador del atmega 168 funciona a 1MHz. Eso es demasiado rápido para el audio, así que tenemos que usar el prescaler / 8. Luego, dado que necesitamos cambiar el pin de salida hacia arriba y luego hacia abajo para hacer 1 ciclo, debemos dividir la respuesta por 2 para obtener el tono correcto. La fórmula se ve así, Paso para poner en el código = (1000000/8) / (Frecuencia objetivo * 2) Para A (440) esto sería 125000/880 = 142.045 o 142 para nuestros propósitos, ya que el valor debe ser un número entero. Las frecuencias de destino de las notas se pueden encontrar prácticamente en cualquier lugar en línea y, en general, son todas iguales. Todavía quiero agregar una declaración de caso en lugar de usar un montón de If y usar PWM para controlar mejor el volumen y el tono del altavoz, pero por ahora, esto funciona.

Recomendado: