Inhoudsopgave:

Arduino-puzzeldoos: 7 stappen
Arduino-puzzeldoos: 7 stappen

Video: Arduino-puzzeldoos: 7 stappen

Video: Arduino-puzzeldoos: 7 stappen
Video: 7 уровень - 100 Doors Puzzle Box (100 Дверей Головоломки) прохождение 2024, November
Anonim
Arduino puzzeldoos
Arduino puzzeldoos

Voor dit project gaan we een puzzeldoos maken die werkt met muziek. De essentie ervan is dat wanneer je op een knop drukt, er een deuntje vrijkomt en de Arduino berekent welke knoppen worden ingedrukt, zodat hij weet wat het juiste en wat het verkeerde antwoord is.

Benodigdheden

1 x Arduino-uno

1 x 1k Ohm weerstand

5 x 220 Ohm weerstanden

1 x piëzo-zoemer

5 x drukknop 6x6 mm

1 x set Jumper draden

1 x perf/strip board

1 x soldeerset

1 x scharnier

1 x klem

1 x kleine ladekast/hout

1x heet lijmpistool + lijmstiften

1 x 9v batterij + houder

beetje worbla

verf

Stap 1:

Afbeelding
Afbeelding

Om te beginnen moet je je pinnen in je breadboard drukken. Sluit nu analoog 2 met een draad aan op de hoek van het bord. We gaan er twee weerstanden in een lijn op aansluiten. De eerste is een weerstand van 10k Ohm. Aan het andere uiteinde van deze weerstand verbinden we draad met de analoge aarde. De tweede weerstand is een 220 Ohm weerstand die we op de eerste knop aansluiten. Gebruik een andere weerstand van dezelfde waarde om de tweede open zijde van de knop met de tweede knop te verbinden. Blijf de knoppen op deze manier aansluiten tot de laatste. Bij de laatste pak je een draad en sluit je deze aan op een overeenkomstige gesloten kant van de knop en sluit je deze aan op de volgende in de rij. Je herhaalt nu het proces dat je deed met de weerstanden die je alleen kent met gewone draden. Sluit de eerste knop aan op de analoge 3, 3V-poort op je Arduino. Al met al krijg je een soort kruispatroon zoals hieronder afgebeeld.

Stap 2:

Sluit vervolgens je zoemer aan op het breadboard en bevestig de ene kant aan de digitale aarde en de andere aan de 12-poort. Het is slim om onderstaande code alvast in je Arduino te uploaden zodat je kunt testen of alles goed werkt. Als dit het geval is, kunt u beginnen met het aan elkaar solderen van de componenten. Doe dit door ze uit het breadboard te halen en de draden en verbindingen direct aan elkaar te solderen. Als je denkt dat je meer lengte tussen de knoppen nodig hebt, kun je wat extra draad tussen de weerstanden toevoegen. Het breadboard is op dit moment niet meer nodig.

Stap 3:

Afbeelding
Afbeelding

Nadat alles is gesoldeerd, is het tijd om de doos zelf te maken. Ik gebruikte een goedkope set lades als basis voor de mijne. Ik sneed gewoon in de lengte doormidden en verwijderde de achterkant en de zijkant die ik doorsneed. Je zou nu twee c-vormige stukken moeten hebben. Snijd een kant van een van hen om als deksel te gebruiken. Draai nu een van de resterende stukken zodat ze in elkaar passen als een doos zonder deksel en lijm ze aan elkaar. Zodra de lijm goed is uitgehard, boort u een klein gaatje aan elke kant van de doos voor de knoppen en een groter gaatje voor de zoemer in het deksel.

Stap 4:

Afbeelding
Afbeelding
Afbeelding
Afbeelding

Nu kun je beginnen met het schilderen van de doos. Ik deed de mijne met een bloemontwerp op basis van BOTW, maar je kunt echt elk ontwerp kiezen dat je wilt. Hierna kun je de knopen in de gaten plaatsen en een klodder lijm op de achterkant van de knop en het omringende hout doen. Hetzelfde principe is van toepassing op de zoemer, maar de mijne past perfect in het gat waardoor het overbodig is. Vervolgens pak je wat worbla en verwarm je en knip je het om wat kleine knopen te maken. Lijm ze voorzichtig op de knopen, maar zorg ervoor dat je niet te veel lijm gebruikt, omdat de knopen per ongeluk kunnen vast komen te zitten. Nu kun je ze overschilderen om ze meer in de doos te laten opgaan.

Stap 5:

Ten slotte lijm of schroef je de klem en de scharnieren op de doos en het deksel die de twee verbinden.

Stap 6:

Nu je doos compleet is, hoef je alleen nog maar de Arduino en de batterij erin te doen en het deksel te sluiten.

Stap 7: Coderen

// Dit is de code voor een puzzel/muziekdoos met Zelda-thema.

// dit verbindt je code met de lijst met notities in het andere tabblad

#include "pitches.h"

// deze variabele zorgt ervoor dat de Arduino een langere druk op de knop ziet als slechts één druk

int zelfde = 0;

// vanaf hier zal het uw invoer lezen

intk = 2;

// dit is je output-pin

int-luidspreker = 12;

// hieronder staan de eindmelodieën

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_A5B4;

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};

// de normale duur van een noot

int BEATTIME = 300;

// de teller die bijhoudt waar we in de oplossing zitten

int teller = 0;

ongeldige setup() {

Serieel.begin(9600);

pinMode(2, INPUT);

pinMode (1, INGANG);

}

lege lus() {

// leest de invoer van de pinnen

k = analoog lezen (2);

int p = analoog lezen(1);

// als er geen knop wordt ingedrukt, hoort er geen toon te zijn

als (teller == 0) {

geen toon(12);

}

// als de gelezen gegevens overeenkomen met de parameters, voer dan het beschreven stukje code uit

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

rechts();

}

//""

anders als (k 290) {

koppelingen();

}

//""

anders als (k > 260 && k < 280) {

boven();

}

//""

anders als (k> 240 && k < 260) {

onder();

}

//""

anders als (k > 220 && k < 240) {

een();

}

// als dit niet het geval is (wanneer er geen knop wordt ingedrukt), voer dan deze code uit

anders {

// reset hetzelfde zodat het kan worden gebruikt de volgende keer dat een knop wordt ingedrukt

hetzelfde = 0;

// als de teller op een bepaald aantal staat, voer dan het beschreven stukje code uit

als (teller == 166) {

zelda();

}

//""

anders als (teller == 386) {

sari();

}

//""

anders als (teller == 266) {

epona();

}

//""

anders if (teller == 999) {

// speel deze toon om de fout te markeren

toon (luidspreker, NOTE_C3, BEATTIME);

// reset de teller naar 0

teller = 0;

}

}

//de vertraging tussen invoer en uitvoer

vertraging (100);

// drukt de waarden van uw invoer af in de seriële monitor

Serieel.println(k);

}

// dit is de eerste melodie

leegte zelda() {

//dit stelt een teller in die zichzelf bijwerkt tijdens het spelen van de melodie, zodat hij deze kan lezen en stoppen wanneer het zou moeten

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

// zegt hoe lang een notitie moet duren

int ZTime = 1000 / ZeldaTime;

// genereert de tonen

toon (luidspreker, Zelda, ZTime);

// creëert de juiste vertraging

int pauze = ZTijd * 1.30;

vertraging (pauze);

// reset teller

teller = 0;

// drukt de waarden van uw invoer af in de seriële monitor

Serial.println(teller);

}

}

//""

leegte epona() {

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

int ETime = 1000 / EponaTime;

toon (luidspreker, Epona, ETime);

int pauze = ETime * 1.30;

vertraging (pauze);

teller = 0;

Serial.println(teller);

}

}

//""

leegte saria() {

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

int STime = 1000 / SariaTime;

toon (spreker, Saria, STime);

int pauze = STime * 1.30;

vertraging (pauze);

teller = 0;

Serial.println(teller);

}

}

ongeldige recensie

hts() {

// als dit nog niet was ingedrukt

als (zelfde == 0) {

// als de teller momenteel een van deze waarden heeft, voeg dit dan toe

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

teller = teller + 1;

}

// zet het anders op 999 zodat je de foutruis hoort

anders {

teller = 999;

}

// stel hetzelfde in op één zodat de Arduino een langdurige druk niet leest als meerdere keren drukken

hetzelfde = 1;

}

// speel de toon

anders {

toon (luidspreker, NOTE_A4, BEATTIME);

}

// drukt de waarden van uw invoer af in de seriële monitor

Serial.println(teller); }

//""

ongeldige links() {

als (zelfde == 0) {

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

teller = teller + 11;

}

anders als (teller == 0) {

teller = 111;

}

anders {

teller = 999;

}

hetzelfde = 1;

} anders{

toon (luidspreker, NOTE_B4, BEATTIME);

} Serial.println(teller);

}

//""

leegte boven() {

if (zelfde == 0) { if (teller == 111 || teller == 144 || teller == 233) {

teller = teller + 21;

}

anders als (teller == 0) {

teller = 221;

}

anders {

teller = 999;

}

hetzelfde = 1;

}

anders {

toon (luidspreker, NOTE_D5, BEATTIME);

Serial.println(teller);

}

}

//""

leegte onder() {

als (zelfde == 0) {

als (teller == 343) {

teller = teller + 31;

}

anders als (teller == 0) {

teller = 331;

} anders {

teller = 999;

} hetzelfde = 1;

} anders {

toon (luidspreker, NOTE_F4, BEATTIME);

Serial.println(teller);

}

}

//""

ongeldig een() {

als (zelfde == 0) {

als (teller == 0) {

teller = 461;

}

anders {

teller = 999;

}

hetzelfde = 1;

}

toon (luidspreker, NOTE_D4, BEATTIME);

Serial.println(teller);

}

Aanbevolen: