İçindekiler:

Arduino Yapboz Kutusu: 7 Adım
Arduino Yapboz Kutusu: 7 Adım

Video: Arduino Yapboz Kutusu: 7 Adım

Video: Arduino Yapboz Kutusu: 7 Adım
Video: Arduino ile Akıllı Çöp Kutusu! #shorts 2024, Kasım
Anonim
Arduino Yapboz Kutusu
Arduino Yapboz Kutusu

Bu proje için müzikle çalışan bir bulmaca kutusu yapacağız. Temel amacı, bir düğmeye bastığınızda bir melodi serbest bırakması ve Arduino'nun hangi düğmelere basıldığını hesaplaması, böylece neyin doğru neyin yanlış cevap olduğunu bilmesidir.

Gereçler

1 x Arduino uno

1 x 1k Ohm direnç

5 x 220 Ohm dirençler

1 xPiezo Buzzer

5 x buton 6x6 mm

1 x set Jumper telleri

1 x mükemmel/şerit tahtası

1 x lehim seti

1 x menteşe

1 x kelepçe

1 x küçük çekmeceli/ahşap

1x sıcak tutkal tabancası + tutkal çubukları

1 x 9v pil + tutucu

biraz işkembe

boya

Aşama 1:

resim
resim

Başlamak için, breadboard'unuzdaki pinlerinize basmanız gerekir. Şimdi analog 2'yi bir tel ile kartın köşesine bağlayın. Bir hatta iki direnç bağlayacağız. Birincisi 10k Ohm'luk bir dirençtir. Bu direncin diğer ucuna kabloyu analog toprağa bağlarız. İkinci direnç 220 Ohm'luk bir direnç ise birinci butona bağlıyoruz. Butonun ikinci açık tarafını ikinci butona bağlamak için aynı değerde başka bir direnç kullanın. Sonuncuya kadar düğmeleri bu şekilde bağlamaya devam edin. Sonuncusunda bir kabloyu alıp düğmenin ilgili kapalı tarafına bağlayıp sıradaki bir sonrakine bağlarsınız. Artık sadece düz kablolarla bildiğiniz dirençlerle yaptığınız işlemi tekrarlıyorsunuz. İlk düğmeyi Arduino'nuzdaki analog 3, 3V bağlantı noktasına bağlayın. Sonuç olarak, aşağıda gösterildiği gibi bir tür çapraz desen elde edeceksiniz.

Adım 2:

Ardından sesli uyarınızı devre tahtasına takın ve bir tarafını dijital zemine, diğerini 12 bağlantı noktasına sabitleyin. Aşağıdaki kodu Arduino'nuza yüklemek akıllıcadır, böylece her şeyin doğru çalışıp çalışmadığını test edebilirsiniz. Öyleyse, bileşenleri birlikte lehimlemeye başlayabilirsiniz. Bunu, bunları devre tahtasından çıkararak ve telleri ve bağlantıları doğrudan birbirine lehimleyerek yapın. Düğmeler arasında daha fazla uzunluğa ihtiyacınız olduğunu düşünüyorsanız, dirençler arasına fazladan kablo ekleyebilirsiniz. Breadboard artık bu noktada gerekli değildir.

Aşama 3:

resim
resim

Her şey lehimlendikten sonra kutunun kendisini yapma zamanı geldi. Benim için bir üs olarak ucuz bir çekmece seti kullandım. Sadece boyuna ikiye böldüm ve kestiğim arka ve yanları çıkardım. Artık iki adet c şeklinde parçanız olmalı. Kapak olarak kullanmak için bir tarafını kesin. Şimdi kalan parçalardan birini kapaksız bir kutu gibi birbirine oturacak şekilde döndürün ve birbirine yapıştırın. Tutkal düzgün bir şekilde yerleştiğinde, kutunun her iki yanına düğmeler için küçük ve kapaktaki sesli uyarı için daha büyük bir delik açın.

4. Adım:

resim
resim
resim
resim

Şimdi kutuyu boyamaya başlayabilirsiniz. Benimkini BOTW'a dayalı bir çiçek tasarımıyla yaptım ama gerçekten istediğiniz herhangi bir tasarımı seçebilirsiniz. Bu yapıldıktan sonra düğmeleri deliklerin içine yerleştirebilir ve düğmenin arkasına ve çevresindeki tahtaya bir küre yapıştırıcı koyabilirsiniz. Aynı prensip buzzer için de geçerlidir, ancak benimki deliğe mükemmel bir şekilde oturur ve gereksiz hale gelir. Sonra biraz Worbla alıp ısıtıp küçük düğmeler yapmak için kesiyorsunuz. Bunları dikkatlice düğmelere yapıştırın, ancak çok fazla yapıştırıcı kullanmadığınızdan emin olun çünkü yanlışlıkla düğmeler sıkışabilir. Artık kutuyla daha fazla karışmalarını sağlamak için onları boyayabilirsiniz.

Adım 5:

Son olarak, kutunun üzerindeki kelepçeyi ve menteşeleri ve ikisini birbirine bağlayan kapağı yapıştırır veya vidalarsınız.

6. Adım:

Artık kutunuz tamamlandığında yapmanız gereken tek şey Arduino ve pili içine koyup kapağı kapatmak.

7. Adım: Kod

// Bu, Zelda temalı bir bulmaca/müzik kutusunun kodudur.

// bu, kodunuzu diğer sekmedeki notlar listesine bağlar

#include "pitch.h"

// bu değişken Arduino'nun düğmeye uzun süre basıldığını tek bir basış olarak görmesini sağlayacaktır.

int aynı = 0;

// buradan girişinizi okuyacaktır

int k = 2;

// bu senin çıkış pinin

int konuşmacı = 12;

// bitiş melodileri aşağıdadır

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

// bir notun normal süresi

int BEATTIME = 300;

// takip edilecek sayaç çözümde miydik

int veznedar = 0;

geçersiz kurulum() {

Seri.başla(9600);

pinMode(2, GİRİŞ);

pinMode(1, GİRİŞ);

}

boşluk döngüsü () {

// pinlerden girişi okur

k = analogRead(2);

int p = analogRead(1);

// basılan herhangi bir tuş yoksa ton da olmamalıdır

if (vezneci == 0) {

tonsuz(12);

}

// okunan veriler parametrelere karşılık geliyorsa, açıklanan kod bitini çalıştırın

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

rechts();

}

//""

aksi takdirde (k 290) {

bağlantılar();

}

//""

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

boven();

}

//""

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

onder();

}

//""

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

a();

}

// olmazsa (hiçbir tuşa basılmadığında), bu kodu çalıştırın

Başka {

// aynısını sıfırla, böylece bir sonraki düğmeye basıldığında kullanılabilir

aynı = 0;

// sayaç belirli bir sayıya kadar ise, açıklanan kod bitini çalıştırın

if (vezneci == 166) {

zelda();

}

//""

else if (teller == 386) {

saria();

}

//""

else if (teller == 266) {

epona();

}

//""

else if (teller == 999) {

// hatayı işaretlemek için bu tonu çal

ton(hoparlör, NOTE_C3, BEATTIME);

// sayacı 0'a sıfırla

veznedar = 0;

}

}

//giriş ve çıkış arasındaki gecikme

gecikme(100);

// girişinizin değerlerini seri monitörde yazdırır

Seri.println(k);

}

// bu ilk melodi

geçersiz zelda() {

// bu, melodiyi çalarken kendisini güncelleyen bir sayaç ayarlar, böylece melodiyi okuyabilir ve gerektiğinde durabilir

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

// bir notun ne kadar sürmesi gerektiğini söyler

int ZTime = 1000 / ZeldaTime;

//tonları üretir

ton (hoparlör, Zelda, ZTime);

// doğru gecikmeyi yaratır

int duraklama = ZZaman * 1.30;

gecikme(duraklatma);

// sayacı sıfırlar

veznedar = 0;

// girişinizin değerlerini seri monitörde yazdırır

Serial.println(vezne);

}

}

//""

boşluk epona() {

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

int ETime = 1000 / EponaTime;

ton (hoparlör, Epona, ETime);

int duraklama = ETime * 1.30;

gecikme(duraklatma);

veznedar = 0;

Serial.println(vezne);

}

}

//""

geçersiz saria() {

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

int STime = 1000 / SariaTime;

ton (hoparlör, Saria, STime);

int duraklama = STime * 1.30;

gecikme(duraklatma);

veznedar = 0;

Serial.println(vezne);

}

}

geçersiz kayıt

hts() {

// bu zaten basılmamışsa

if (aynı == 0) {

// sayaç şu anda bu değerlerden birine sahipse bunu ona ekleyin

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

veznedar = veznedar + 1;

}

// aksi halde 999'a ayarlayın, böylece hata sesini duyarsınız

Başka {

veznedar = 999;

}

// Arduino'nun uzun süreli basışı birden fazla basış olarak okumaması için aynı değeri bire ayarlayın

aynı = 1;

}

// tonu çal

Başka {

ton(hoparlör, NOTE_A4, BEATTIME);

}

// girişinizin değerlerini seri monitörde yazdırır

Serial.println(vezne); }

//""

geçersiz bağlantılar () {

if (aynı == 0) {

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

veznedar = veznedar + 11;

}

else if (teller == 0) {

veznedar = 111;

}

Başka {

veznedar = 999;

}

aynı = 1;

} Başka{

ton(hoparlör, NOTE_B4, BEATTIME);

} Serial.println(teller);

}

//""

void boven() {

if (aynı == 0) { if (vezneci == 111 || veznedar == 144 || veznedar == 233) {

veznedar = veznedar + 21;

}

else if (teller == 0) {

veznedar = 221;

}

Başka {

veznedar = 999;

}

aynı = 1;

}

Başka {

ton(hoparlör, NOTE_D5, BEATTIME);

Serial.println(vezne);

}

}

//""

geçersiz onder() {

if (aynı == 0) {

if (vezneci == 343) {

veznedar = veznedar + 31;

}

else if (teller == 0) {

veznedar = 331;

} Başka {

veznedar = 999;

} aynı = 1;

} Başka {

ton(hoparlör, NOTE_F4, BEATTIME);

Serial.println(vezne);

}

}

//""

geçersiz a() {

if (aynı == 0) {

if (vezneci == 0) {

veznedar = 461;

}

Başka {

veznedar = 999;

}

aynı = 1;

}

ton(hoparlör, NOTE_D4, BEATTIME);

Serial.println(vezne);

}

Önerilen: