Índice:

Suporte para chave de jack de guitarra do Arduino com reconhecimento de jack e OLED: 7 etapas
Suporte para chave de jack de guitarra do Arduino com reconhecimento de jack e OLED: 7 etapas

Vídeo: Suporte para chave de jack de guitarra do Arduino com reconhecimento de jack e OLED: 7 etapas

Vídeo: Suporte para chave de jack de guitarra do Arduino com reconhecimento de jack e OLED: 7 etapas
Vídeo: Policia brasileira x polícia Russa quem ganha #shorts 2024, Julho
Anonim
Image
Image
Suporte para chave de jack de guitarra do Arduino com reconhecimento de jack e OLED
Suporte para chave de jack de guitarra do Arduino com reconhecimento de jack e OLED

Introdução:

Este instrutível irá detalhar a construção do meu titular da chave do plugin Guitar Jack baseado em Arduino

Este é o meu primeiro instrutível, portanto, tenha paciência comigo, pois posso fazer alterações / atualizações ao longo do caminho

Etapa 1: Peças e Ferramentas

Peças e Ferramentas
Peças e Ferramentas
Peças e Ferramentas
Peças e Ferramentas
Peças e Ferramentas
Peças e Ferramentas

A maioria das peças que comprei na Amazon.co.uk ou no eBay, algumas que eu já tinha comprado - aqui está uma lista do que você precisará.

Os links da Amazon são todos links de afiliados, você pode encontrar mais barato em outro lugar - eu uso muito o Amazon Prime, então a Amazon acabou de ser minha preferência.

Eu queria manter esta construção de custo relativamente baixo e acessível. Você poderia usar uma tela TFT maior se desejar, assim como um Arduino diferente. Não use um NANO, pois ele travará devido ao alto uso de memória. O código usa cerca de 72% da RAM do Pro Micro e é estável, mas a partir dos testes, um NANO irá travar e congelar.

(Mais detalhes na etapa Código.)

PEÇAS

1x Arduino Pro Micro -

1x 0,96 OLED com display amarelo e azul -

4x WS2812 'Pixels' -

1x DS3231 RTC -

4x 1/4 Mono Jack (ou quantos você quiser) - Amazon (Gold) ou Amazon (Silver) ou eBay.co.uk

1x Pacote de Resistor Misto -

4 tomadas de guitarra de 1/4 -

1x cabo de extensão de cabo micro USB -

4 parafusos M3

FERRAMENTAS E MATERIAIS

- Ferro de soldar (este é o que eu comprei - um TS100 - pois veio com dicas adicionais

- solda

- Pistola de cola quente (https://amzn.to/2UTd9PN)

- Conexão (https://amzn.to/2VK2ILU)

- Cortadores de fio / decapantes (https://amzn.to/2KzqUzp)

- Impressora 3D ou serviço de impressão 3D

OPCIONAL - Esses itens são opcionais, dependendo de como você escolhe conectar tudo

- Veroboard / Stripboard (https://amzn.to/2KzMFPE)

- Conectores de terminal de parafuso (2 pólos | 3 pólos | 4 pólos)

- Cabeçalhos de PCB (https://amzn.to/2X7RjWf)

Etapa 2: impressão 3D do caso

Impressão 3D do caso
Impressão 3D do caso
Impressão 3D do caso
Impressão 3D do caso
Impressão 3D do caso
Impressão 3D do caso
Impressão 3D do caso
Impressão 3D do caso

Imprimi o meu no meu Creality CR-10S, usando Black PLA + (https://amzn.to/2X2SDtE)

Eu imprimi na altura de 0,2 camada, com 25% de preenchimento.

Etapa 3: Juntando Tudo + Esquemático

Juntando Tudo + Esquemático
Juntando Tudo + Esquemático
Juntando Tudo + Esquemático
Juntando Tudo + Esquemático
Juntando Tudo + Esquemático
Juntando Tudo + Esquemático
Juntando Tudo + Esquemático
Juntando Tudo + Esquemático

Como você escolhe conectar seu Arduino depende inteiramente de você - eu pessoalmente escolhi fazer para mim mesmo um "escudo", por assim dizer. Para fazer a blindagem, soldei conectores fêmeas ao veroboard para combinar com o Pro Micro e, em seguida, adicionei um trilho de + 5v e GND, nas extremidades opostas. Eu usei o fio jumper para conectar o + 5v ao meu 'trilho' agora 5v, e fiz o mesmo para o GND. Em seguida, adicionei meus resistores 4x 100k, uma extremidade conectada a + 5v para todos eles e, em seguida, o outro lado conecta-se a A0, A1, A2 e A3 respectivamente. Em seguida, adicionei terminais de parafuso aos pinos analógicos A0, A1, A2 e A3 e também aos pinos 2 (SDA), 3 (SCL) e 4

Meça a fiação e corte nos comprimentos apropriados. Comecei com os LEDs WS2812 Pixel primeiro - o PRIMEIRO LED WS2812 se conecta a + 5v do Arduino, o GND do Arduino e o DIN se conecta ao pino 4. Depois disso, os 3 restantes são encadeados, encadeando todos os 5v> 5v, GND> pinos GND e DOUT de um Pixel, conecta-se ao DIN do próximo. Depois de soldadas, pressione-as suavemente nos orifícios quadrados na parte superior e coloque cola quente no lugar e também para proteger a parte traseira de quaisquer conexões acidentais ou curtos-circuitos.

Depois dos LEDs, aparafusei os soquetes do Guitar Jack. Um pino de cada se conecta ao GND e, em seguida, o segundo pino de cada um se conecta a A0, A1, A2 e A3 de acordo. Então esse é o Soquete 1 para A0, Soquete 2 para A1, Soquete 3 para A2 e Soquete 4 para A3.

Em seguida, soldei 4 fios às conexões OLED e eliminei qualquer excesso de solda o máximo possível. Você deseja conectar os fios da parte traseira da tela, então você está soldando na parte frontal da tela.

Preste atenção nos pinos! Alguns OLEDs têm GND do lado de fora, depois VCC, alguns têm VCC do lado de fora e, em seguida, GND

Depois de soldada e você tiver aparado ou nivelado a conexão de solda tanto quanto possível, pressione suavemente a tela em seu local. É um ajuste um pouco apertado por design, mas esteja ciente de que diferentes tolerâncias de impressão podem afetar isso e, portanto, você pode ter que fazer um pequeno pós-processamento para fazer o ajuste. Uma vez no lugar, coloque um pouco de cola quente em cada um dos 4 cantos para mantê-lo no lugar.

Conecte tudo para coincidir com o esquema e as imagens e, quando estiver satisfeito, você pode colar o Pro Micro e o RTC Clock no lugar também e, em seguida, conectar a extensão USB ao Pro Micro.

Usei uma extensão micro USB para que a) o USB possa ser usado para fornecer energia, mas mais ainda, b) para que fosse possível reprogramar o Pro Micro se necessário sem separar tudo

Quando estiver satisfeito, aparafuse a caixa usando os 4 parafusos

Etapa 4: Os plugues

Os plugues!
Os plugues!
Os plugues!
Os plugues!
Os plugues!
Os plugues!

A forma como isso funciona, é que, para todos os efeitos, parte do design funciona como um "ohmímetro". Um ohmímetro é um instrumento para medir a resistência elétrica. A maioria dos multímetros tem essa função, por meio da qual você escolhe a escala e mede um resistor para encontrar seu valor. O princípio de funcionamento é que você conecte um resistor CONHECIDO ao + ve, que é então conectado a um resistor DESCONHECIDO, que se conecta ao -ve. A junção entre os 2 resistores se conecta ao pino analógico do Arduino para que ele possa ler a tensão e calcular a resistência.

Ele funciona como um divisor de tensão e calcula a resistência do resistor desconhecido.

Como uma rede divisora de tensão de resistores R1 e R2, Vout = Vin * R2 / (R1 + R2) - Estamos usando 100k para nosso resistor (R1) conhecido. Isso nos dá a "queda de tensão"

A partir disso, podemos agora calcular a resistência do resistor desconhecido (R2), R2 = Vout * R1 / (Vin - Vout) - onde R1 é nosso resistor de 100k (100.000 ohm)

Ao usar um resistor diferente em cada tomada que deseja usar, você pode ajustar o código de acordo com a tomada em uso.

Estou usando 4 plugues. Optei por usar:

Resistor conhecido (x4) - 100k

Jack Plug 1 - 5,6k

Jack Plug 2 - 10k

Jack Plug 3 - 22k

Jack Plug 4 - 39k

Você pode, é claro, expandir isso e codificar quantos quiser.

Etapa 5: O Código

O código
O código

Em primeiro lugar, você precisará do IDE do Arduino, disponível aqui:

Você também precisará ter certeza de ter algumas bibliotecas do Arduino também:

Adafruit NeoPixel:

u8g2:

Adafruit RTCLib:

Adafruit SleepyDog (opcional):

Uma nota sobre como escolher a placa "Arduino" certa. Originalmente, comecei este projeto com um Arduino Nano, porque eles são muito baratos, cerca de £ 3- £ 4 no Reino Unido, ou tão pouco quanto £ 1,50 se você comprar no AliExpress (mas não se importe com a espera de 30-50 dias) O problema com o Nano é que sua SRAM tem 2 KB (2048 bytes). Este esboço usa 1728 bytes de memória dinâmica com variáveis globais. Isso representa 84% da SRAM, deixando apenas 320 bytes livres para variáveis locais. Isso era insuficiente e faria com que o Nano travasse e congelasse.

O Pro Micro (Leonardo) tem 2,5K SRAM (2560 bytes), o que significa que há 694 bytes livres para variáveis locais (o esboço usa 72% da SRAM do Pro Micro). Até agora, isso se mostrou perfeitamente adequado e estável para o meu uso. Se você pretende usar muitos plugues jack, então você pode querer considerar o uso de algo com mais SRAM.

No que diz respeito ao armazenamento Flash, este esboço usa 88% (25252 bytes) de 30k (O ATMega328p [Nano] e ATMega32u4 [Pro Micro] ambos têm 32k, mas 2k é reservado para o bootloader)

Escrevi centenas de esboços do Arduino ao longo dos anos, mas sou um amador - então, tenha em mente que algumas partes do código podem ser ineficientes ou pode haver "maneiras melhores de fazer isso" cenários. Dito isso, está funcionando perfeitamente para mim e estou feliz com isso. Eu usei bibliotecas que DEVEM funcionar na maioria das placas, seja AVR (a maioria dos Arduino básicos) ou SAMD21 (eu tenho um punhado de dispositivos Cortex M0)

Eu queria exibir um gráfico diferente com base na tomada usada também. Se você quiser fazer o seu próprio, este é um guia simples e brilhante sobre como criar a matriz C para imagens a serem usadas com este monitor:

sandhansblog.wordpress.com/2017/04/16/interfacing-displaying-a-custom-graphic-on-an-0-96-i2c-oled/

Certifique-se de usar PROGMEM para seus gráficos. Por exemplo:

static const unsigned char YOUR_IMAGE_NAME PROGMEM = {}

Por design, a tela "expirará" após 5 segundos e voltará a exibir a hora.

A maioria das configurações pode ser encontrada em Settings.h, especificamente, o nome dos plugues jack associados são codificados aqui:

# define PLUG1 "CHAVES"

#define PLUG2 "P2" #define PLUG3 "P3" #define PLUG4 "P4" #define GENÉRICO "NA"

Existem também algumas partes importantes do código em Variables.h

float R1 = 96700,0;

float R2 = 96300,0; float R3 = 96500,0; float R4 = 96300,0;

Estes são os valores de resistência CONHECIDOS, em ohms, de cada um dos 4 resistores.

R1 conectado a A0, R2 a A1, R3 a A2 e R4 a A3.

É aconselhável medir seus resistores de 100k usando um multímetro e usar o valor exato do resistor. Faça a medição do resistor quando tudo estiver conectado. (Mas não ligado).

Ao escolher resistores para seus plugues, certifique-se de que haja uma boa lacuna de ohm entre eles e, ao codificá-los, dê a si mesmo uma boa faixa mais baixa e mais alta do que o resistor escolhido. Aqui está o que usei em meu código:

flutuante P1_MIN = 4000,0, P1_MAX = 7000,0; // 5,6K

flutuante P2_MIN = 8000,0, P2_MAX = 12000,0; // flutuante de 10K P3_MIN = 20000.0, P3_MAX = 24000.0; // flutuante de 22K P4_MIN = 36000.0, P4_MAX = 42000.0; // 39K

A razão para isso é levar em consideração a leitura analógica e as pequenas flutuações de tensão, etc.

Então o que acontece é que, se a resistência detectada está entre 4000 ohms e 7000 ohms, presumimos que você usou um resistor de 5,6k e, portanto, o código verá isso como Jack Plug 1. Se a resistência medida estiver entre 8000 ohms e 12000 ohms, presume-se que seja um resistor de 10k e seja Jack Plug 2 e assim por diante.

Se você precisar fazer alguma depuração (não deixe descomentado em 'produção', pois a depuração em série usa memória RAM preciosa) simplesmente descomente as linhas que você precisa no topo de Settings.h

// # define SERIAL_DEBUG

// # define WAIT_FOR_SERIAL

Para descomentar, simplesmente remova o //…. para comentar a linha de volta, adicione novamente // à frente da linha.

SERIAL_DEBUG permite a depuração serial e o uso de coisas como (por exemplo)

Serial.println (F ("olá, mundo"));

WAIT_FOR_SERIAL é uma etapa adicional, ou seja, até que você abra o Monitor Serial, o código não continuará. Isso ajuda a garantir que você não perca nenhuma mensagem serial importante. - NUNCA DEIXE ISTO ATIVADO

Se você deixar WAIT_FOR_SERIAL habilitado, você não poderá usar o seu portador de chave em qualquer ambiente do "mundo real", pois ele ficará preso esperando pelo monitor Arduino IDE Serial antes de continuar no loop principal do esboço. Depois de concluir a depuração, certifique-se de descomentar esta linha novamente e carregue novamente seu esboço para produção / conclusão.

Ao usar a opção SERIAL_DEBUG, meu código contém o seguinte:

#ifdef SERIAL_DEBUG

Serial.print (F ("ACTIVE JACK =")); Serial.println (ACTIVE_JACK); int len = sizeof (SOCKET_1234_HAS_PLUGTYPE_X) / sizeof (SOCKET_1234_HAS_PLUGTYPE_X [0]); para (int i = 0; i <len; i ++) {Serial.print (F ("SOCKET_1234_HAS_PLUGTYPE_X [")); Serial.print (i); Serial.print (F ("] =")); Serial.println (SOCKET_1234_HAS_PLUGTYPE_X ); } Serial.println (); if (INSERIDO [soquete]) {Serial.print (F ("Conecte o soquete")); Serial.print (soquete + 1); Serial.print (F ("tem uma resistência de:")); Serial.println (resistência); } #fim se

A última linha Serial.print dirá qual é a resistência, em ohms, do último conector inserido. Portanto, você também pode usar este esboço como uma espécie de ohmímetro para verificar a resistência de um plugue.

Etapa 6: Notas

Acho que já cobri tudo, mas por favor, comente e farei o meu melhor para ler e responder quando puder:)

Desculpas pelo vídeo um pouco ruim - eu não tenho um tripé, configuração de recodificação ou um espaço de trabalho adequado, por assim dizer, então isso foi filmado (mal) segurando o telefone com uma das mãos e tentando fazer uma demonstração com a outra.

Obrigado pela leitura.

Recomendado: