Índice:

Gerador de tons de tecido do microcontrolador em código C: 8 etapas (com imagens)
Gerador de tons de tecido do microcontrolador em código C: 8 etapas (com imagens)

Vídeo: Gerador de tons de tecido do microcontrolador em código C: 8 etapas (com imagens)

Vídeo: Gerador de tons de tecido do microcontrolador em código C: 8 etapas (com imagens)
Vídeo: Simulando Função Senoidal de Microcontrolador de 8 Bits para Controle de Inversores de Frequência 2024, Julho
Anonim
Gerador de tom de tecido do microcontrolador em código C
Gerador de tom de tecido do microcontrolador em código C

No final de outubro do ano passado, o usuário instructables carmitsu me enviou uma mensagem depois de ver meu sintetizador de lancheira. De sua mensagem: Eu ensino música na escola primária. Tocamos muita música de flauta. ou seja, as crianças tocam flautas pequenas … Tenho várias crianças com necessidades especiais que podem usar esses cartazes pretos com círculos que têm o nome da nota. Esses alunos empurram os círculos com nomes de notas ao mesmo tempo que o resto dos alunos está tocando uma música … A maioria das crianças com necessidades especiais pode fazer isso muito bem e no ritmo da música. O que estou procurando é construir um gerador de som muito simples para que essas crianças possam tocar o mesmo tom que os alunos tocam em seus gravadores. Eu seria apenas alguns arremessos. Achei que poderia colocar algum tipo de pequeno botão na parte inferior de seus círculos redondos para que, quando eles pressionassem, o som sairia de um pequeno alto-falante, alto o suficiente para que eles pudessem ouvir. Ter mãe professora e ter gostado da escola, como resistir? Verdade seja dita, eu não poderia. Esta é basicamente uma crônica do projeto e instruções sobre como construir o seu próprio.

Etapa 1: O começo ou por que não pude me limitar ao analógico

O começo ou por que não pude me limitar ao analógico
O começo ou por que não pude me limitar ao analógico

As coisas boas começam na próxima página. Se você quer saber como acabei usando as partes que usei, continue lendo. O verdadeiro cronômetro: Depois de pensar um pouco sobre o projeto, pensei imediatamente no gerador de tons piezoelétrico do meu livro de amplificadores operacionais Forest Mims III. Pareceu ser um bom caminho a percorrer, é apenas um piezo, um 741 IC e alguns componentes passivos. Não é grande coisa, certo? Bem, tem 2 problemas, 1) quando você pressiona o botão, é possível mudar a afinação 2) é quase impossível de afinar. O primeiro provavelmente poderia ser superado com alguma tecnologia de debounce, embora eu não soubesse como fazer isso sem adicionar outro contador. Também pode ser um problema com o uso de um piezo. A segunda questão ficou complicada quando você começou a tentar acertar um determinado arremesso. E quanto ao 555? A folha de dados mostra uma função de dlay de tempo baseada em resistores e capacitores. O que é ótimo até você começar a digitar valores reais de partes do mundo real, quando você descobrirá que acertar um tom de 440 Hz começa a ficar um pouco difícil. Você pode usar potes de acabamento para sintonizá-lo, mas com o tempo eles tendem a se mover. Afinar constantemente o instrumento, compilado em cima do rápido aumento no custo e na quantidade de peças, e minha esposa mudando a afinação quando apertou o botão matou o 555 para este projeto. P-amp: Sem problema, as pessoas têm feito sintetizadores com amplificadores operacionais desde antes de eu nascer. Quão difícil pode ser fazer um realmente simples, com poucas partes e notas específicas? Mais forte do que eu pensava. A maioria dos designs lá fora são muito complicados para este projeto. Os designers de sintetizadores buscam a forma de onda / tom perfeito. Isso entra em conflito direto com um projeto que deveria ser barato o suficiente para o orçamento da escola ou dos professores. Construir um teclado é fácil, é apenas um monte de resistores e energia ou um monte de diodos e energia. É o resto do projeto do circuito e o custo de pcbs customizados que começa a ficar fora de controle para alguém que está começando a nível de eletrônica. Redefinição do projeto: o projeto foi redefinido antes mesmo de eu realmente começar. Eu precisava de algo que pudesse alternar um pino de alto-falante, a tempo, com o pressionar de um botão. Eu não queria ter que projetar e comprar um PCB. Ele precisava usar o mínimo de componentes possível e ser montado como um kit para iniciantes. Ele estava me encarando o tempo todo. Duh !! Microcontrolador! Microcontrolador: Então, depois de comprar um kit Bare Bones Arduino de dispositivos modernos e uma placa de destino simples Evil Mad Scientist e deixá-los sentar na minha mesa por meses sem serem usados, eu tive o projeto introdutório perfeito. Comecei a observar o tempo que leva para juntar os dois, a curva de aprendizado do código, o custo, as partes adicionais necessárias e fazer com que ele faça o que eu quero e resolva no quadro de destino. O custo era bastante uniforme, US $ 15 mais um cabo FTDI de US $ 20 para o Arduino, US $ 12 mais um programador USBtinyISP de US $ 22. Eu já conhecia C ++ da pequena faculdade que suportava e imaginei que C para microcontroladores não seria tão ruim, enquanto além de piscar uma luz para ter certeza de que montava meu kit corretamente, não tinha nenhuma experiência com Arduino. Ambos podem ser montados. Era praticamente um lance para cima, então decidi pelas menos partes dos dois, o tabuleiro de destino.

Etapa 2: O que você precisa Rev 1

O que você precisa Rev 1
O que você precisa Rev 1

Peças CostUSBtinyISP 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 $ 12Headers, 6 pinos DIP, 5-pk $ 2,75https://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (8 ohm Mini) $ 2,79https://www.radioshack.com/product/index.jsp? ProductId = 2062406SPST Comutadores momentâneos normalmente abertos (usamos 5) $ 3,49 (4 pack) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA "Suporte de bateria $ 1,79https://www.radioshack.com/product/index.jsp? ProductId = 2102735SPST Chave deslizante Submini (opcional para chave liga / desliga) $ 2.69 (2-pack) https://www.radioshack.com/product/index.jsp?productId=2062490LED e resistor (opcional, se você quiser uma luz de energia) $ deve ser gratuito se eles estão por aí, Wire $ também deve estar por perto. Solda de prata (se isso estiver chegando perto de crianças, você provavelmente não deve usar chumbo, os pais ficam muito estranhos com esse tipo de coisa;)) Esfregar álcool (para re mover fluxo) Se você quer alguns lugares para economizar dinheiro, você não precisa obter peças do RadioShack. Eu fiz porque eles são próximos e previsíveis.

Etapa 3: Montagem Rev 1

Montagem Rev 1
Montagem Rev 1
Montagem Rev 1
Montagem Rev 1

Junte suas peças conforme mostrado. Certifique-se de usar álcool isopropílico e uma escova de fluxo quando terminar para se livrar de qualquer fluxo da solda. O esquema está abaixo para aqueles que preferem. D1 e R1 podem ser o que você quiser, é apenas uma luz de poder. C1 serve apenas para ajudar a tornar a potência um pouco mais consistente. Usei um 10uF. Este esquema é o mesmo para as versões posteriores, apenas troque os botões de pressão por interruptores de malha. na última revisão, adicionei interruptores para PC4 e PC5 ou pinos 27 e 28.

Etapa 4: O que você precisa Rev 2

O que você precisa Rev 2
O que você precisa Rev 2

Basicamente, você está trocando os botões do Radio Shack pelos de tecido feitos à mão. Você precisa de: Várias cores de tecido, ou uma cor se quiser que todas as notas tenham a mesma cor. A seção de quilting da sua loja de tecidos mais próxima é o melhor lugar para conseguir isso por um preço baixo. Quartos acolchoados custam US $ 1,50 e você pode obter uma tonelada de interruptores com um. Tecido condutivo, sugiro o tecido Flectron da LessEMF que custa US $ 20 por uma peça de 12 "x54". Eyelets para prender o fio ao tecido. Você pode comprá-los na maioria das lojas de tecidos baratos. JoAnn tem a ferramenta e 25 por US $ 2. Você vai precisar de um martelo para isso. Fio, usei 22AWG, sugiro menor, se tiver. Fusão, para fazer o tecido colorido e condutor aderir. Pergunte na loja e provavelmente você poderá comprar no quintal. Isso provavelmente funcionaria bem, embora eu sugira que você pergunte a alguém. Batendo, eu usei um material bem solto no começo, depois mudei para algo mais apertado. Eu sugiro que você tente alguns diferentes até encontrar o que funciona melhor. Tubulação termorretrátil, isso tornou a coisa toda muito mais gerenciável. os fios termorretráteis juntos à medida que passam uns pelos outros e ficarão muito melhores.

Etapa 5: Montagem Rev 2

Montagem Rev 2
Montagem Rev 2
Montagem Rev 2
Montagem Rev 2
Montagem Rev 2
Montagem Rev 2

Coloque os tecidos multicoloridos uns sobre os outros e corte um quadrado, não precisa ser perfeito. Passe o tecido para obter as dobras, coloque-as em camadas novamente e certifique-se de que todas as bordas combinem. Corte todas as bordas que não o façam. Corte as partes superior e inferior, deixando os lados direito e esquerdo retos. Você vai inverter o interruptor depois de costurar, então não deixe os lados arredondados muito redondos e deixe altura suficiente nos lados planos para empurrar o interruptor facilmente quando terminar. Arredonde o lado plano do primeiro e do último interruptor. Dirija-se à sua máquina de costura e coloque dois dos círculos juntos de modo que o lado bom fique voltado um para o outro e faça uma costura nas partes planas. costurado, corte quadrados do tecido condutor e fundir um dos lados. Corte o fio no comprimento certo e descasque uma das pontas. soldar o fio ao redor de um dos ilhós. (a solda provavelmente não irá grudar no ilhó) Corte uma pequena luz no tecido em um dos cantos e martele o ilhó para prender o tecido e o fio. remova a proteção da fusão e funda o tecido condutor na parte de trás do tecido colorido. Repita para todos os interruptores. Para tornar as coisas mais fáceis, você pode usar um tubo termorretrátil para os fios juntos sempre que um fio passar pelo fio para a próxima chave. Pegue ou faça um pedaço de tecido do comprimento do conjunto de chaves e corte uma tira de tecido condutor do comprimento dele. Ao contrário dos interruptores coloridos, esta é uma peça longa. Isso será o que os botões tocarão para fazer a conexão. Corte uma pequena fenda e prenda um fio a ela com um ilhó, como as pontas dos interruptores coloridos. Fixe-o na parte de trás do tecido de baixo. Costure a parte de cima e a de baixo com o tecido condutor voltado para fora, use uma vara para inverter o conjunto depois de costurado. Corte alguns pequenos orifícios no enchimento, usei um pauzinho para obter um círculo então é só retirar o pauzinho e fazer o corte. Corte-os no formato adequado e insira-os nos interruptores. É isso que mantém o tecido condutor separado. Pode ser mais fácil inserir a manta enquanto você inverte as chaves, em vez de depois. O material que usei rasgou bastante enquanto o estava inserindo e tive que conseguir rebatidas diferentes. Por fim, conecte os fios à placa de destino e está tudo pronto. A longa faixa inferior será retificada.

Etapa 6: O que você precisa Rev 3

O que você precisa Rev 3
O que você precisa Rev 3

Na Rev 3, fiz os interruptores independentes da fiação. Isso economizou muito tempo. Também gosto muito mais da aparência do resultado final. Então, aqui estão as novas peças de que você precisa: Snaps, acabei de obtê-los na JoAnn's. Eles vieram com uma ferramenta de instalação não ruim por US $ 7 Eu sugeriria uma das ferramentas de alicate em vez disso, pois tive que desmontar minha ferramenta para instalar os encaixes no meio. Costurar seria uma boa alternativa, embora demore mais para aderir. Fio condutor, Spark Fun tem material que pode ir para sua máquina de costura. Eu tinha que ir muito devagar na minha máquina ou a linha iria quebrar. Sua milhagem pode variar

Etapa 7: Montagem Rev 3

Montagem Rev 3
Montagem Rev 3
Montagem Rev 3
Montagem Rev 3
Montagem Rev 3
Montagem Rev 3
Montagem Rev 3
Montagem Rev 3

Esta revisão foi muito melhor do que a anterior em termos de tempo até a construção. Além disso, ter interruptores removíveis salvou minha sanidade mais de uma vez. Comece fazendo a base. É apenas um quarto do acolchoado dobrado ao meio. Coloque uma camada de rebatidas por cima e costure, deixando um buraco para inverter. Empurre a coisa através do orifício e você terá basicamente um tipo de travesseiro. Eu fiz um acolchoado para que fosse mais fácil de trabalhar. Use rosca lisa e enlouqueça. Eu fiz diamantes neste, mas talvez da próxima vez eu coloque um dragão atrás, ou algo legal. Agora, nos interruptores. Eu gosto desse design porque você pode basicamente fazer uma tonelada deles com antecedência e usar o que quiser. comece usando um pedaço de papelão, papel ou tecido e corte um pedaço de pêra dele. Use isso como um guia para cortar uma parte superior e inferior para cada switch. Cortei uma cor para cada parte de baixo e uma cor diferente para a parte de cima, mas você pode ser criativo e fazer o que quiser. Corte seu guia em um formato de pirulito que caiba facilmente dentro do interruptor. Aumente o “palito” para que possa envolver a borda da “pêra”. Corte a forma do tecido condutor e de fusão e funda um lado do tecido condutor. Remova a parte de trás do material de fusão e funda na parte superior do tecido que ficará na parte inferior e na parte inferior do tecido que ficará na parte superior. Enrole o pedaço extra em torno da parte superior. Vá para a sua máquina de costura e coloque rebatidas com orifícios entre o tecido superior e inferior. Costure fora do tecido condutor e pule a parte "stick" da chave. Descobri que é possível costurar o tecido condutor superior na parte inferior criando um short. É melhor não costurar através do tecido condutor. Anexe os encaixes e a troca estará concluída. Achei mais fácil usar o encaixe macho para todas as conexões inferior / GND e o encaixe fêmea para todos os topos. Isso torna todos os interruptores intercambiáveis. O circuito: A questão de cortar rodadas é que você tem muitos bits extras. Peguei minhas sobras, fundi grandes pedaços de fusão em grandes pedaços de tecido condutor e usei-os para cortar os retângulos menores que usei como almofadas. Disponha seus interruptores de maneira aproximada e funda as almofadas na base com espaço suficiente para costurar uma linha nelas e fazer um estalo. O pé da máquina de costura que usei não gostou de ficar muito perto do snap, então lembre-se disso e dê um pouco de espaço. Como eu tenho uma linha condutora que pode ir para minha máquina de costura, eu apenas costurei uma linha de bloco em bloco e nas costas. Eu tinha que ir devagar ou a linha iria quebrar, mas era uma tonelada mais rápida do que costurar à mão. Também com linha condutiva na bobina e agulha, consegui uma conexão sólida muito boa. A coisa se desfia loucamente, mas um pouco de cola de artesanato ou Elmers esclarece tudo. Tente manter as linhas bem afastadas umas das outras e você não terá problemas. Montagem final: encaixe todos os seus interruptores, conecte a placa, carregue o código e pronto. Usei arame para ir da placa até a almofada e depois costurei o arame na base com a mão. Para a próxima versão, irei montar a placa em uma caixa de plástico com fechos para prendê-la à base para que dedos ociosos não a separem.

Etapa 8: Código

Código
Código

Se você nunca programou um chip antes, esta é uma tarefa um tanto quanto assustadora. Não ajuda o fato de as ferramentas serem instáveis e, na maioria das vezes, você precisa realizar a mesma operação várias vezes. Os dois melhores recursos que encontrei para entender o que está acontecendo é a página do USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ e o curso intensivo de programação do brinquedo de ruído, http: / /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Isso deve ajudar você a começar.

Muitas pessoas gostam do Arduino por causa dessa codificação e não há nada de errado em usá-lo, exceto que sinto que acrescenta muito inchaço a um programa normalmente simples. Além disso, eu conhecia C e não conheço Arduino. Talvez um dia, se houver tempo.:) Código: {{{#include // Use um pino para ligar o SPK /// Typedefs ////////// typedef unsigned char u8; int main (vazio) {u8 btnState0; u8 btnState1; u8 btnState2; u8 btnState3; u8 btnState4; u8 btnState5; u8 btnState6; DDRB = (1 << DDB6); // Define SPK para saída PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Definir botão alto PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Configure o temporizador enquanto (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); // Inverte o pino SPK TCNT2 = 0; }} if (btnState1) {if (TCNT2> = 179) {PORTB ^ = (1 << PD6); // Inverte o pino SPK TCNT2 = 0; }} if (btnState2) {if (TCNT2> = 159) {PORTB ^ = (1 << PD6); // Inverte o pino SPK TCNT2 = 0; }} if (btnState3) {if (TCNT2> = 142) {PORTB ^ = (1 << PD6); // Inverte o pino SPK TCNT2 = 0; }} if (btnState4) {if (TCNT2> = 126) {PORTB ^ = (1 << PD6); // Inverte o pino SPK TCNT2 = 0; }} if (btnState5) {if (TCNT2> = 119) {PORTB ^ = (1 << PD6); // Inverte o pino SPK TCNT2 = 0; }} if (btnState6) {if (TCNT2> = 106) {PORTB ^ = (1 << PD6); // Inverte o pino SPK TCNT2 = 0; }}}}}}} De onde vêm os argumentos de venda? Um pouco de matemática foi necessário. O relógio do temporizador no atmega 168 funciona a 1MHz. É muito rápido para áudio, então temos que usar o prescaler / 8. Então, como precisamos girar o pino de saída para cima e depois para baixo para fazer 1 ciclo, precisamos dividir a resposta por 2 para encontrar o tom correto. A fórmula se parece com esta, Pitch para colocar no código = (1000000/8) / (Frequência alvo * 2) Para A (440), isso seria 125000/880 = 142,045 ou 142 para nossos propósitos, já que o valor deve ser um número inteiro. As frequências-alvo das notas podem ser encontradas em qualquer lugar online e geralmente são todas iguais. Ainda quero adicionar uma declaração de caso em vez de usar um monte de Ifs e usar PWM para controlar melhor o volume e o tom do alto-falante, mas por enquanto, isso funciona.

Recomendado: