Sommario:

Scatola puzzle Arduino: 7 passaggi
Scatola puzzle Arduino: 7 passaggi

Video: Scatola puzzle Arduino: 7 passaggi

Video: Scatola puzzle Arduino: 7 passaggi
Video: Regalo last minute. Scatola e puzzle con laser Ortur Master 3 2024, Novembre
Anonim
Scatola di puzzle Arduino
Scatola di puzzle Arduino

Per questo progetto realizzeremo una scatola puzzle che funzioni con la musica. L'essenza di base è che quando si preme un pulsante rilascia una melodia e Arduino calcola quali pulsanti vengono premuti in modo che sappia qual è la risposta giusta e qual è la risposta sbagliata.

Forniture

1 x Arduino uno

1 x 1k Ohm resistore

5 x 220 Ohm resistori

1 x cicalino piezo

5 x pulsante 6x6 mm

1 x set di cavi per ponticelli

1 x perf/strip board

1 x set di saldatura

1 x cerniera

1 x morsetto

1 x cassettiera piccola/legna

1x pistola per colla a caldo + stick di colla

1 x batteria 9v + supporto

un po' di worbla

dipingere

Passo 1:

Immagine
Immagine

Per iniziare devi premere i pin nella breadboard. Ora collega l'analogico 2 con un filo all'angolo della scheda. Collegheremo due resistori in una linea. Il primo è un resistore da 10k Ohm. All'altra estremità di questo resistore colleghiamo il filo alla terra analogica. Il secondo resistore è un resistore da 220 Ohm che colleghiamo al primo pulsante. Utilizzare un altro resistore dello stesso valore per collegare il secondo lato aperto del pulsante con il secondo pulsante. Continua a collegare i pulsanti in questo modo fino all'ultimo. All'ultimo prendi un filo e lo colleghi a un corrispondente lato chiuso del pulsante e lo colleghi a quello successivo in linea. Ora ripeti il processo che hai fatto con i resistori che conosci solo con fili semplici. Collega il primo pulsante alla porta analogica 3, 3V sul tuo Arduino. Tutto sommato otterrai una sorta di croce come illustrato di seguito.

Passo 2:

Quindi collega il cicalino alla breadboard e fissa un lato alla terra digitale e l'altro alla porta 12. È intelligente caricare già il seguente codice nel tuo Arduino in modo da poter verificare se tutto funziona correttamente. Se lo è, puoi iniziare a saldare i componenti insieme. Fai questo estraendoli dalla breadboard e saldando direttamente i fili e le connessioni. Se pensi di aver bisogno di più lunghezza tra i pulsanti, puoi aggiungere del filo extra tra i resistori. La breadboard non è più necessaria a questo punto.

Passaggio 3:

Immagine
Immagine

Dopo che tutto è stato saldato, è il momento di creare la scatola stessa. Ho usato una cassettiera economica come base per la mia. Ho semplicemente tagliato a metà nel senso della lunghezza e rimosso il retro e il lato che ho tagliato. Dovresti avere due pezzi a forma di C ora. Taglia un lato di uno di loro da usare come coperchio. Ora ruota uno dei pezzi rimanenti in modo che si incastrino come una scatola senza coperchio e incollali insieme. Una volta che la colla si è fissata correttamente, pratica un piccolo foro su ciascun lato della scatola per i pulsanti e uno più grande per il cicalino nel coperchio.

Passaggio 4:

Immagine
Immagine
Immagine
Immagine

Ora puoi iniziare a dipingere la scatola. Ho fatto il mio con un disegno floreale basato su BOTW ma puoi davvero scegliere qualsiasi disegno tu voglia. Fatto ciò, puoi inserire i bottoni all'interno dei fori e mettere un po' di colla sul retro del bottone e sul legno circostante. Lo stesso principio vale per il cicalino ma il mio si inserisce perfettamente nel foro rendendolo superfluo. Quindi prendi del worbla e scaldalo e taglialo per fare dei piccoli bottoni. Incollali con cura sui pulsanti, ma assicurati di non usare troppa colla perché potresti accidentalmente bloccarli. Ora puoi dipingerli per farli fondere maggiormente con la scatola.

Passaggio 5:

Infine si incollano o si avvitano il morsetto e le cerniere sulla scatola e sul coperchio che collegano i due.

Passaggio 6:

Ora che la tua scatola è completa, tutto ciò che devi fare è inserire Arduino e la batteria al suo interno e chiudere il coperchio.

Passaggio 7: codice

// Questo è il codice per un puzzle/carillon a tema Zelda.

// questo collega il tuo codice all'elenco delle note nell'altra scheda

#include "pitch.h"

// questa variabile assicurerà che Arduino veda una pressione più lunga del pulsante come una sola pressione

int stesso = 0;

// da qui leggerà il tuo input

intk = 2;

//questo è il tuo pin di output

int altoparlante = 12;

// sotto ci sono le melodie finali

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_A NOTE_B4;, NOTE

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

int Epona = {NOTA_RE5, NOTA_B4, NOTA_A4, NOTA_RE5, NOTA_B4, NOTA_A4, NOTA_RE5, NOTA_B4, NOTA_A4, NOTA_B4, NOTA_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_E}

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

// la durata normale di una nota

int TEMPO DI BATTUTA = 300;

// il contatore che terrà traccia di dove siamo nella soluzione

int cassiere = 0;

void setup() {

Serial.begin(9600);

pinMode(2, INGRESSO);

pinMode(1, INGRESSO);

}

ciclo vuoto() {

// legge l'input dai pin

k = analogRead(2);

int p = analogRead(1);

//se non viene premuto alcun pulsante non dovrebbe esserci alcun tono

if (cassiere == 0) {

noTono(12);

}

//se i dati letti corrispondono ai parametri esegui il bit di codice descritto

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

retti();

}

//""

altrimenti se (k 290) {

link();

}

//""

altrimenti se (k > 260 && k < 280) {

boven();

}

//""

altrimenti se (k> 240 && k < 260) {

sotto();

}

//""

altrimenti se (k > 220 && k < 240) {

un();

}

// in caso contrario (quando non viene premuto alcun pulsante), esegui questo codice

altro {

// ripristina lo stesso in modo che possa essere utilizzato la prossima volta che viene premuto un pulsante

uguale = 0;

// se il contatore raggiunge un certo numero esegue il bit di codice descritto

if (cassiere == 166) {

zelda();

}

//""

altrimenti se (cassiere == 386) {

sario();

}

//""

altrimenti se (cassiere == 266) {

epona();

}

//""

altrimenti se (cassiere == 999) {

//riproduci questo tono per contrassegnare l'errore

tono (altoparlante, NOTE_C3, BEATTIME);

//ripristina il contatore a 0

cassiere = 0;

}

}

//il ritardo tra input e output

ritardo(100);

// stampa i valori del tuo input nel monitor seriale

Serial.println(k);

}

// questa è la prima melodia

vuoto zelda() {

//questo imposta un contatore che si aggiorna da solo durante la riproduzione della melodia in modo che possa leggerla e fermarsi quando dovrebbe

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

//dice quanto deve durare una nota

int ZTime = 1000 / ZeldaTime;

//genera i toni

tono (altoparlante, Zelda, ZTime);

//crea il ritardo corretto

int pausa = ZTime * 1.30;

ritardo (pausa);

//reimposta il contatore

cassiere = 0;

// stampa i valori del tuo input nel monitor seriale

Serial.println(cassiere);

}

}

//""

vuoto epona() {

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

int ETime = 1000 / EponaTime;

tono (altoparlante, Epona, ETime);

int pausa = ETime * 1.30;

ritardo (pausa);

cassiere = 0;

Serial.println(cassiere);

}

}

//""

vuoto saria() {

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

int STime = 1000 / SariaTime;

tono (altoparlante, Saria, STime);

int pausa = STime * 1.30;

ritardo (pausa);

cassiere = 0;

Serial.println(cassiere);

}

}

vuoto rec

hts() {

// se questo non fosse già stato premuto

if (stesso == 0) {

// se il contatore ha attualmente uno di questi valori aggiungi questo ad esso

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

cassiere = cassiere + 1;

}

// altrimenti impostalo su 999 in modo da sentire il rumore di errore

altro {

cassiere = 999;

}

// imposta lo stesso su uno in modo che Arduino non legga una pressione prolungata come pressioni multiple

stesso = 1;

}

// suona il tono

altro {

tono (altoparlante, NOTE_A4, BEATTIME);

}

// stampa i valori del tuo input nel monitor seriale

Serial.println(cassiere); }

//""

collegamenti vuoti() {

if (stesso == 0) {

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

cassiere = cassiere + 11;

}

altrimenti se (cassiere == 0) {

cassiere = 111;

}

altro {

cassiere = 999;

}

stesso = 1;

} altro{

tono (altoparlante, NOTE_B4, BEATTIME);

} Serial.println(cassiere);

}

//""

vuoto boven() {

if (stesso == 0) { if (cassiere == 111 || cassiere == 144 || cassiere == 233) {

cassiere = cassiere + 21;

}

altrimenti se (cassiere == 0) {

cassiere = 221;

}

altro {

cassiere = 999;

}

stesso = 1;

}

altro {

tono (altoparlante, NOTE_D5, BEATTIME);

Serial.println(cassiere);

}

}

//""

void on() {

if (stesso == 0) {

if (cassiere == 343) {

cassiere = cassiere + 31;

}

altrimenti se (cassiere == 0) {

cassiere = 331;

} altro {

cassiere = 999;

} stesso = 1;

} altro {

tono(altoparlante, NOTE_F4, BEATTIME);

Serial.println(cassiere);

}

}

//""

vuoto a() {

if (stesso == 0) {

if (cassiere == 0) {

cassiere = 461;

}

altro {

cassiere = 999;

}

stesso = 1;

}

tono (altoparlante, NOTE_D4, BEATTIME);

Serial.println(cassiere);

}

Consigliato: