Πίνακας περιεχομένων:

Arduino Puzzle Box: 7 Βήματα
Arduino Puzzle Box: 7 Βήματα

Βίντεο: Arduino Puzzle Box: 7 Βήματα

Βίντεο: Arduino Puzzle Box: 7 Βήματα
Βίντεο: Electronic Puzzle Box 2024, Ιούλιος
Anonim
Κουτί παζλ Arduino
Κουτί παζλ Arduino

Για αυτό το έργο θα φτιάξουμε ένα κουτί παζλ που λειτουργεί με μουσική. Η βασική ουσία είναι ότι όταν πατάτε ένα κουμπί, εκπέμπει μια μελωδία και το Arduino υπολογίζει ποια κουμπιά πατούν έτσι ώστε να γνωρίζει ποια είναι η σωστή και ποια η λάθος απάντηση.

Προμήθειες

1 x Arduino uno

Αντίσταση 1 x 1k Ohm

5 x 220 Ohm αντιστάσεις

1 xPiezo Buzzer

5 x κουμπί 6x6 mm

1 x σετ καλώδια Jumper

1 x πίνακας perf/strip

1 x συγκολλητικό

1 x μεντεσέ

1 x σφιγκτήρας

1 x μικρή συρταριέρα/ξύλο

1x πιστόλι θερμής κόλλας + ξυλάκια κόλλας

1 x μπαταρία 9V + θήκη

λίγο βούρμπλα

χρώμα

Βήμα 1:

Εικόνα
Εικόνα

Για να ξεκινήσετε, πρέπει να πιέσετε τις καρφίτσες σας στο breadboard σας. Τώρα συνδέστε το αναλογικό 2 με ένα καλώδιο στη γωνία του πίνακα. Θα συνδέσουμε δύο αντιστάσεις σε αυτό σε μια γραμμή. Το πρώτο είναι μια αντίσταση 10k Ohm. Στο άλλο άκρο αυτής της αντίστασης συνδέουμε το καλώδιο στην αναλογική γείωση. Η δεύτερη αντίσταση είναι μια αντίσταση 220 Ohm που συνδέουμε στο πρώτο κουμπί. Χρησιμοποιήστε μια άλλη αντίσταση της ίδιας τιμής για να συνδέσετε τη δεύτερη ανοιχτή πλευρά του κουμπιού με το δεύτερο κουμπί. Συνεχίστε να συνδέετε τα κουμπιά όπως αυτό μέχρι το τελευταίο. Στο τελευταίο πιάνετε ένα καλώδιο και το συνδέετε σε μια αντίστοιχη κλειστή πλευρά του κουμπιού και το συνδέετε με το επόμενο στη σειρά. Επαναλαμβάνετε τώρα τη διαδικασία που κάνατε με τις αντιστάσεις που γνωρίζετε μόνο με απλά καλώδια. Συνδέστε το πρώτο κουμπί στην αναλογική θύρα 3, 3V στο Arduino σας. Συνολικά θα πάρετε ένα είδος σταυρού πατέρα όπως απεικονίζεται παρακάτω.

Βήμα 2:

Στη συνέχεια, συνδέστε το βομβητή στη σανίδα ψύξης και ασφαλίστε τη μία πλευρά στο ψηφιακό έδαφος και την άλλη στη θύρα 12. Είναι έξυπνο να ανεβάσετε ήδη τον ακόλουθο κώδικα στο Arduino σας, ώστε να μπορείτε να ελέγξετε αν όλα λειτουργούν σωστά. Εάν είναι, μπορείτε να αρχίσετε να κολλάτε τα εξαρτήματα μαζί. Κάντε το βγάζοντάς τα από το breadboard και συγκολλώντας τα καλώδια και τις συνδέσεις μεταξύ τους απευθείας. Εάν πιστεύετε ότι χρειάζεστε μεγαλύτερο μήκος μεταξύ των κουμπιών, μπορείτε να προσθέσετε επιπλέον καλώδιο μεταξύ των αντιστάσεων. Το breadboard δεν είναι πλέον απαραίτητο σε αυτό το σημείο.

Βήμα 3:

Εικόνα
Εικόνα

Αφού συγκολληθούν όλα, ήρθε η ώρα να φτιάξετε το ίδιο το κουτί. Χρησιμοποίησα ένα φτηνό σετ συρταριών ως βάση για το δικό μου. Απλά έκοψα στη μέση κατά μήκος και αφαίρεσα την πλάτη και την πλευρά που έκοψα. Θα πρέπει τώρα να έχετε δύο κομμάτια σε σχήμα c. Κόψτε τη μία πλευρά του ενός για να το χρησιμοποιήσετε ως καπάκι. Τώρα περιστρέψτε ένα από τα υπόλοιπα κομμάτια έτσι ώστε να ταιριάζουν μεταξύ τους σαν ένα κουτί χωρίς καπάκι και κολλήστε τα μεταξύ τους. Μόλις στερεωθεί σωστά η κόλλα, ανοίξτε μια μικρή τρύπα σε κάθε πλευρά του κουτιού για τα κουμπιά και μια μεγαλύτερη για το βομβητή στο καπάκι.

Βήμα 4:

Εικόνα
Εικόνα
Εικόνα
Εικόνα

Τώρα μπορείτε να βάψετε το κουτί. Έκανα το δικό μου με σχέδιο λουλουδιών βασισμένο στο BOTW αλλά μπορείτε πραγματικά να επιλέξετε όποιο σχέδιο θέλετε. Αφού γίνει αυτό, μπορείτε να βάλετε τα κουμπιά μέσα στις τρύπες και να βάλετε μια σφαίρα κόλλας στο πίσω μέρος του κουμπιού και το γύρω ξύλο. Η ίδια αρχή ισχύει και για το βομβητή, αλλά το δικό μου ταιριάζει απόλυτα στην τρύπα καθιστώντας το περιττό. Στη συνέχεια, αρπάζετε λίγη worbla και ζεσταίνετε και την κόβετε για να φτιάξετε μερικά μικρά κουμπιά. Κολλήστε τα προσεκτικά πάνω στα κουμπιά, αλλά βεβαιωθείτε ότι δεν χρησιμοποιείτε πολύ κόλλα γιατί μπορεί να κολλήσετε κατά λάθος τα κουμπιά. Τώρα μπορείτε να τα βάψετε για να αναμειχθούν περισσότερο με το κουτί.

Βήμα 5:

Τέλος κολλάτε ή βιδώνετε, τον σφιγκτήρα και τους μεντεσέδες στο κουτί και το καπάκι που συνδέει τα δύο.

Βήμα 6:

Τώρα που το κουτί σας έχει ολοκληρωθεί το μόνο που έχετε να κάνετε είναι να βάλετε το Arduino και την μπαταρία μέσα του και να κλείσετε το καπάκι.

Βήμα 7: Κωδικός

// Αυτός είναι ο κωδικός για ένα παζλ/μουσική με θέμα Zelda.

// αυτό συνδέει τον κωδικό σας με τη λίστα σημειώσεων στην άλλη καρτέλα

#include "pitches.h"

// αυτή η μεταβλητή θα διασφαλίσει ότι το Arduino βλέπει μεγαλύτερο πάτημα του κουμπιού ως ένα μόνο πάτημα

int ίδιο = 0;

// από εδώ θα διαβάσει την εισαγωγή σας

int k = 2;

// αυτό είναι το pin σας εξόδου

int ηχείο = 12;

// παρακάτω είναι οι τελικές μελωδίες

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_5, NOT_B5, NOT_B5, NOTE_D5, NOTE_D5, NOTE_D5, NOTE_55, NOTEB5, NOTE_D5, NOTEB5, NOTE_DE, NOTE_5, NOTE_5, NOTE_5, NOTE_5, NOTEB5, NOTE_DE, NOTE_5, NOTE_DE, NOTE_5

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_4, NOTE4, NOTE_4, NOTE

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

// η κανονική διάρκεια μιας νότας

int BEATTIME = 300;

// ο μετρητής που θα παρακολουθεί αν βρισκόμαστε στη λύση

int teller = 0;

void setup () {

Serial.begin (9600);

pinMode (2, ΕΙΣΟΔΟΣ);

pinMode (1, ΕΙΣΟΔΟΣ);

}

void loop () {

// διαβάζει την είσοδο από τις ακίδες

k = analogRead (2);

int p = analogRead (1);

// εάν δεν πατήσετε κάποιο κουμπί, δεν πρέπει να υπάρχει τόνος

εάν (ταμίας == 0) {

noTone (12);

}

// εάν τα δεδομένα ανάγνωσης αντιστοιχούν στις παραμέτρους εκτελέστε το περιγραφόμενο κομμάτι κώδικα

αν (k> 320 && k <350) {

rechts ();

}

//""

αλλιώς αν (k 290) {

συνδέσεις();

}

//""

αλλιώς αν (k> 260 && k <280) {

πλεγμένο ();

}

//""

αλλιώς αν (k> 240 && k <260) {

onder ();

}

//""

αλλιώς αν (k> 220 && k <240) {

ένα();

}

// αν δεν το κάνει (όταν δεν πατηθεί κανένα κουμπί), εκτελέστε αυτόν τον κωδικό

αλλιώς {

// επαναφέρετε το ίδιο ώστε να μπορεί να χρησιμοποιηθεί την επόμενη φορά που θα πατήσετε ένα κουμπί

ίδιο = 0;

// εάν ο μετρητής είναι έως έναν συγκεκριμένο αριθμό, εκτελέστε το περιγραφόμενο κομμάτι κώδικα

εάν (ταμίας == 166) {

zelda ();

}

//""

αλλιώς αν (ταμίας == 386) {

σαρια ()?

}

//""

αλλιώς αν (ταμίας == 266) {

epona ();

}

//""

αλλιώς αν (ταμίας == 999) {

// παίξτε αυτόν τον τόνο για να επισημάνετε το σφάλμα

τόνος (ηχείο, NOTE_C3, BEATTIME)

// επαναφέρετε τον μετρητή στο 0

ταμείο = 0;

}

}

// η καθυστέρηση μεταξύ εισόδου και εξόδου

καθυστέρηση (100)?

// εκτυπώνει τις τιμές της εισόδου σας στη σειριακή οθόνη

Serial.println (k);

}

// αυτή είναι η πρώτη μελωδία

void zelda () {

// αυτό θέτει έναν μετρητή που ενημερώνεται κατά την αναπαραγωγή της μελωδίας, ώστε να μπορεί να την διαβάσει και να σταματήσει όταν πρέπει

για (int i = 0; i <sizeof (Zelda); i ++) {

// λέει πόσο καιρό πρέπει να διαρκέσει μια νότα

int ZTime = 1000 / ZeldaTime ;

// δημιουργεί τους τόνους

τόνος (ηχείο, Zelda , ZTime);

// δημιουργεί τη σωστή καθυστέρηση

int pause = ZTime * 1,30;

καθυστέρηση (παύση)?

// επαναφέρει τον μετρητή

ταμείο = 0;

// εκτυπώνει τις τιμές της εισόδου σας στη σειριακή οθόνη

Serial.println (ταμείο);

}

}

//""

void epona () {

για (int i = 0; i <sizeof (Epona); i ++) {

int ETime = 1000 / EponaTime ;

τόνος (ηχείο, Epona , ETime);

int pause = ETime * 1,30;

καθυστέρηση (παύση)?

ταμείο = 0;

Serial.println (ταμείο);

}

}

//""

void saria () {

για (int i = 0; i <sizeof (Saria); i ++) {

int STime = 1000 / SariaTime ;

τόνος (ηχείο, Saria , STime);

int pause = STime * 1,30;

καθυστέρηση (παύση)?

ταμείο = 0;

Serial.println (ταμείο);

}

}

void rec

hts () {

// εάν αυτό δεν ήταν ήδη πατημένο

αν (ίδιο == 0) {

// εάν ο μετρητής έχει αυτήν τη στιγμή μία από αυτές τις τιμές, προσθέστε το σε αυτό

εάν (ταμίας == 0 || πωλητής == 132 || πωλητής == 165 || πωλητής == 232 || πωλητής == 265 || πωλητής == 331 || πωλητής == 374) {

ταμίας = ταμίας + 1;

}

// αλλιώς ρυθμίστε το στο 999, ώστε να ακούτε θόρυβο σφάλματος

αλλιώς {

ταμίας = 999;

}

// ορίστε το ίδιο σε ένα έτσι ώστε το Arduino να μην διαβάζει παρατεταμένο πάτημα ως πολλαπλά πατήματα

ίδιο = 1;

}

// παίξτε τον τόνο

αλλιώς {

τόνος (ηχείο, NOTE_A4, BEATTIME)

}

// εκτυπώνει τις τιμές της εισόδου σας στη σειριακή οθόνη

Serial.println (ταμείο); }

//""

άκυροι σύνδεσμοι () {

αν (ίδιο == 0) {

εάν (ταμίας == 133 || πωλητής == 254 || ταμίας == 244 || ταμίας == 332 || πωλητής == 375 || ταμίας == 221) {

ταμίας = ταμίας + 11;

}

αλλιώς αν (ταμίας == 0) {

ταμείο = 111;

}

αλλιώς {

ταμίας = 999;

}

ίδιο = 1;

} αλλο {

τόνος (ηχείο, NOTE_B4, BEATTIME)

} Serial.println (ταμίας);

}

//""

void boven () {

αν (ίδιο == 0) {αν (ταμείο == 111 || ταμείο == 144 || ταμείο == 233) {

ταμίας = ταμίας + 21;

}

αλλιώς αν (ταμίας == 0) {

ταμίας = 221;

}

αλλιώς {

ταμίας = 999;

}

ίδιο = 1;

}

αλλιώς {

τόνος (ηχείο, NOTE_D5, BEATTIME)

Serial.println (ταμείο);

}

}

//""

void onder () {

αν (ίδιο == 0) {

εάν (ταμίας == 343) {

ταμίας = ταμίας + 31;

}

αλλιώς αν (ταμίας == 0) {

πωλητής = 331;

} αλλο {

ταμίας = 999;

} ίδιο = 1;

} αλλο {

τόνος (ηχείο, NOTE_F4, BEATTIME)

Serial.println (ταμείο);

}

}

//""

void a () {

αν (ίδιο == 0) {

εάν (ταμίας == 0) {

ταμίας = 461;

}

αλλιώς {

ταμίας = 999;

}

ίδιο = 1;

}

τόνος (ηχείο, NOTE_D4, BEATTIME)

Serial.println (ταμείο);

}

Συνιστάται: