Índice:

Arduino Puzzle Box: 7 etapas
Arduino Puzzle Box: 7 etapas

Vídeo: Arduino Puzzle Box: 7 etapas

Vídeo: Arduino Puzzle Box: 7 etapas
Vídeo: mind blowing arduino puzzle box (with electronics) 2024, Novembro
Anonim
Arduino Puzzle Box
Arduino Puzzle Box

Para este projeto vamos fazer uma caixa de quebra-cabeça que funciona com música. A essência disso é que, quando você pressiona um botão, ele libera uma melodia e o Arduino calcula quais botões são pressionados para saber qual é a resposta certa e qual é a errada.

Suprimentos

1 x Arduino uno

1 x resistor de 1k Ohm

5 x resistores de 220 Ohm

1 x Piezo Buzzer

5 x botão de pressão 6x6 mm

1 x conjunto de fios de jumper

1 x perf / placa de tira

1 x conjunto de solda

1 x dobradiça

1 x braçadeira

1 x cômoda pequena / madeira

1x pistola de cola quente + bastões de cola

1 x bateria de 9v + suporte

pedaço de worbla

pintar

Passo 1:

Imagem
Imagem

Para começar, você deve pressionar seus pinos na placa de ensaio. Agora conecte o analógico 2 com um fio no canto da placa. Vamos conectar dois resistores a ele em uma linha. O primeiro é um resistor de 10k Ohm. Na outra extremidade desse resistor, conectamos o fio ao aterramento analógico. O segundo resistor é um resistor de 220 Ohm que conectamos ao primeiro botão. Use outro resistor do mesmo valor para conectar o segundo lado aberto do botão com o segundo botão. Continue conectando os botões assim até o último. No último, você pega um fio e o conecta a um lado fechado correspondente do botão e o conecta ao próximo da linha. Agora você repete o processo que você fez com os resistores conhecidos apenas com fios comuns. Conecte o primeiro botão à porta analógica de 3, 3 V em seu Arduino. Em suma, você obterá uma espécie de padrão cruzado, conforme ilustrado abaixo.

Passo 2:

Em seguida, conecte a campainha à placa de ensaio e prenda um lado ao aterramento digital e o outro à porta 12. É inteligente já fazer o upload do código a seguir em seu Arduino para que você possa testar se tudo está funcionando corretamente. Se for, você pode começar a soldar os componentes juntos. Faça isso retirando-os da placa de ensaio e soldando os fios e as conexões diretamente. Se você acha que precisa de mais comprimento entre os botões, pode adicionar um fio extra entre os resistores. O breadboard não é mais necessário neste ponto.

Etapa 3:

Imagem
Imagem

Depois que tudo estiver soldado, é hora de fazer a própria caixa. Usei um conjunto barato de gavetas como base para a minha. Simplesmente cortei ao meio no sentido do comprimento e removi a parte de trás e o lado que cortei. Você deve ter duas peças em forma de C agora. Corte um lado de um deles para usar como tampa. Agora gire uma das peças restantes para que se encaixem como uma caixa sem tampa e cole-as. Assim que a cola estiver bem assentada, faça um pequeno orifício em cada lado da caixa para os botões e um maior para a campainha na tampa.

Passo 4:

Imagem
Imagem
Imagem
Imagem

Agora você pode começar a pintar a caixa. Eu fiz o meu com um desenho de flor baseado no BOTW, mas você pode realmente escolher qualquer desenho que quiser. Depois de fazer isso, você pode colocar os botões dentro dos orifícios e colocar uma bola de cola na parte de trás do botão e na madeira ao redor. O mesmo princípio se aplica à campainha, mas a minha se encaixa perfeitamente no orifício, tornando-a desnecessária. Em seguida, pegue um pouco de worbla e aqueça e corte para fazer alguns botões pequenos. Cole-os com cuidado nos botões, mas certifique-se de não usar muita cola, pois os botões podem ficar presos acidentalmente. Agora você pode pintá-los para que se misturem mais com a caixa.

Etapa 5:

Por fim, você cola ou aparafusa a braçadeira e as dobradiças da caixa e a tampa conectando os dois.

Etapa 6:

Agora que sua caixa está completa, tudo o que você precisa fazer é colocar o Arduino e a bateria dentro dela e fechar a tampa.

Etapa 7: Código

// Este é o código para um quebra-cabeça / caixa de música com tema Zelda.

// isso conecta seu código à lista de notas na outra guia

#include "pitches.h"

// esta variável irá garantir que o Arduino veja um toque mais longo do botão como apenas um toque

int mesmo = 0;

// a partir daqui, ele lerá sua entrada

int k = 2;

// este é o seu pino de saída

alto-falante interno = 12;

// abaixo estão as melodias finais

int Zelda = {NOTE_B4, NOTE_D5, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_D5, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_D5, NOTE_A5, NOTE_G5, NOTE_D5, NOTE_C5, NOTE_B4, NOTE_A5};

int ZeldaTime = {2, 4, 2, 4, 4, 2, 2, 2, 4, 4, 2, 4, 2, 2, 2, 4, 4, 2};

int Epona = {NOTE_D5, NOTE_B4, NOTE_A4, NOTE_D5, NOTE_B4, NOTE_A4, NOTE_D5, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_A4};

int EponaTime = {4, 4, 1,5, 4, 4, 1,5, 4, 4, 2, 2, 1};

int Saria = {NOTE_F4, NOTE_A4, NOTE_B4, NOTE_F4, NOTE_A4, NOTE_B4, NOTE_F4, NOTE_A4, NOTE_B4, NOTE_E5, NOTE_D5, NOTE_B4, NOTE_C5, NOTE_B4, NOTE_G4, NOTE_E4, NOTE_D4, NOTE_E4, NOTE_E4};

int SariaTime = {8, 8, 4, 8, 8, 4, 8, 8, 8, 8, 4, 8, 8, 8, 8, 3, 8, 8, 8, 2, 1};

// a duração normal de uma nota

int BEATTIME = 300;

// o contador que acompanhará onde estamos na solução

caixa interna = 0;

void setup () {

Serial.begin (9600);

pinMode (2, INPUT);

pinMode (1, INPUT);

}

void loop () {

// lê a entrada dos pinos

k = leitura analógica (2);

int p = analogRead (1);

// se não houver nenhum botão pressionado, não deve haver som

if (caixa == 0) {

noTone (12);

}

// se os dados lidos corresponderem aos parâmetros, execute o trecho de código descrito

if (k> 320 && k <350) {

rechts ();

}

//""

else if (k 290) {

links ();

}

//""

else if (k> 260 && k <280) {

boven ();

}

//""

else if (k> 240 && k <260) {

onder ();

}

//""

else if (k> 220 && k <240) {

uma();

}

// se não (quando nenhum botão é pressionado), execute este código

outro {

// redefine o mesmo para que possa ser usado na próxima vez que um botão for pressionado

mesmo = 0;

// se o contador está até um certo número, execute o trecho de código descrito

if (caixa == 166) {

zelda ();

}

//""

else if (caixa == 386) {

saria ();

}

//""

else if (caixa == 266) {

epona ();

}

//""

else if (caixa == 999) {

// toque este tom para marcar o erro

tom (alto-falante, NOTE_C3, BEATTIME);

// redefine o contador para 0

caixa = 0;

}

}

// o atraso entre entrada e saída

atraso (100);

// imprime os valores de sua entrada no monitor serial

Serial.println (k);

}

// esta é a primeira melodia

void zelda () {

// isso define um contador que se atualiza enquanto toca a melodia para que possa lê-la e parar quando deveria

para (int i = 0; i <sizeof (Zelda); i ++) {

// diz quanto tempo uma nota deve durar

int ZTime = 1000 / ZeldaTime ;

// gera os tons

tom (alto-falante, Zelda , ZTime);

// cria o atraso correto

pausa interna = ZTime * 1,30;

atraso (pausa);

// redefine o contador

caixa = 0;

// imprime os valores de sua entrada no monitor serial

Serial.println (caixa);

}

}

//""

void epona () {

para (int i = 0; i <sizeof (Epona); i ++) {

int ETime = 1000 / EponaTime ;

tom (alto-falante, Epona , ETime);

pausa interna = ETime * 1,30;

atraso (pausa);

caixa = 0;

Serial.println (caixa);

}

}

//""

void saria () {

para (int i = 0; i <sizeof (Saria); i ++) {

int STime = 1000 / SariaTime ;

tom (alto-falante, Saria , STime);

pausa interna = STime * 1,30;

atraso (pausa);

caixa = 0;

Serial.println (caixa);

}

}

void rec

hts () {

// se ainda não foi pressionado

if (mesmo == 0) {

// se o contador atualmente tem um desses valores, adicione isso a ele

if (caixa == 0 || caixa == 132 || caixa == 165 || caixa == 232 || caixa == 265 || caixa == 331 || caixa == 374) {

caixa = caixa + 1;

}

// caso contrário, defina-o para 999 para ouvir o ruído do erro

outro {

caixa = 999;

}

// defina o mesmo para um para que o Arduino não leia uma pressão prolongada como várias vezes

mesmo = 1;

}

// toque o tom

outro {

tom (alto-falante, NOTE_A4, BEATTIME);

}

// imprime os valores de sua entrada no monitor serial

Serial.println (caixa); }

//""

links vazios () {

if (mesmo == 0) {

if (caixa == 133 || caixa == 254 || caixa == 244 || caixa == 332 || caixa == 375 || caixa == 221) {

caixa = caixa + 11;

}

else if (caixa == 0) {

caixa = 111;

}

outro {

caixa = 999;

}

mesmo = 1;

} outro{

tom (alto-falante, NOTE_B4, BEATTIME);

} Serial.println (caixa);

}

//""

void boven () {

if (mesmo == 0) {if (caixa == 111 || caixa == 144 || caixa == 233) {

caixa = caixa + 21;

}

else if (caixa == 0) {

caixa = 221;

}

outro {

caixa = 999;

}

mesmo = 1;

}

outro {

tom (alto-falante, NOTE_D5, BEATTIME);

Serial.println (caixa);

}

}

//""

void onder () {

if (mesmo == 0) {

if (caixa == 343) {

caixa = caixa + 31;

}

else if (caixa == 0) {

caixa = 331;

} outro {

caixa = 999;

} mesmo = 1;

} outro {

tom (alto-falante, NOTE_F4, BEATTIME);

Serial.println (caixa);

}

}

//""

void a () {

if (mesmo == 0) {

if (caixa == 0) {

caixa = 461;

}

outro {

caixa = 999;

}

mesmo = 1;

}

tom (alto-falante, NOTE_D4, BEATTIME);

Serial.println (caixa);

}

Recomendado: