Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

PuzzleBox

Komponen dan persediaan

Arduino MKR IoT Bundle
× 1

Aplikasi dan layanan online

Blynk

Tentang proyek ini

Catatan:Tutorial ini mungkin sudah usang, silakan buka di sini untuk versi yang lebih baru.

Menjaga barang-barang berharga Anda dari pengintaian terkadang sulit, kecuali jika Anda menyimpannya di brankas besar atau sejenisnya... tapi siapa yang punya tempat untuk itu?

Sebagai gantinya, buat kotak teka-teki Anda sendiri menggunakan komponen dari Bundel MKR IoT dan beberapa karton! Kami tidak bisa menjamin keamanan barang-barang Anda, tapi setidaknya itu akan menjadi pencegah yang menyenangkan bagi calon pencuri.

Tentu saja, kami menyarankan Anda untuk menyimpan permen di sana... bukan barang berharga yang sebenarnya.

Singkatnya

Untuk membuka kotak yang ditutup dengan motor servo, Anda harus memutar potensiometer sampai Anda mendapatkan kombinasi yang tepat. Kombinasi tersebut dapat diatur melalui aplikasi online Blynk. LED akan membantu Anda menebak, memberi Anda masukan warna:semakin dekat Anda, semakin hangat warnanya.

Ketika kombinasi yang tepat telah ditebak, buzzer akan mulai memainkan lagu sementara servo akan membuka kotak.

Untuk membuat kotak teka-teki kami, kami membutuhkan komponen berikut:

  • Buzzer
  • LED RGB
  • 3 potensiometer
  • Layar LCD
  • Motor servo

Tujuan Pembelajaran

  • Memperkenalkan platform internet Blynk
  • Menghubungkan kabel dan menggunakan layar LCD
  • Memainkan tema Star Wars dengan buzzer

Ingin Tahu Lebih Banyak?

Tutorial ini adalah bagian dari serangkaian eksperimen yang membiasakan Anda dengan MKR1000 dan IoT. Semua eksperimen dapat dibuat menggunakan komponen yang terdapat dalam Bundel MKR IoT.

  • Aku Mencintaimu Bantal
  • Kotak Teka-teki
  • Kucing Pavlov
  • Si kutu buku
  • Komunikasi tanaman

Memperkenalkan Blynk

Blynk adalah aplikasi seluler populer untuk Internet of Things, memungkinkan kita untuk mengontrol Arduino yang terhubung ke internet dengan mudah dari mana saja, kapan saja.

Itu didirikan di Kickstarter dan dengan cepat menjadi salah satu aplikasi yang paling banyak digunakan di bidang ini, berkat dokumentasinya yang mengagumkan dan kesederhanaannya.

Memulai dengan Blynk

Membuat proyek baru sangat mudah, cukup ikuti beberapa langkah sederhana ini atau lihat persiapan resmi dari Blynk.

Setelah Anda berhasil membuat proyek baru, Anda juga akan menerima Auth Token melalui surat. Ini adalah pengidentifikasi unik yang diperlukan untuk menghubungkan perangkat keras Anda ke ponsel cerdas Anda. Setiap proyek baru yang Anda buat akan memiliki Token Otentikasi sendiri.

Untuk menghubungkan Arduino ke aplikasi, kita perlu menginstal perpustakaan Blynk. Jika Anda menggunakan Arduino Web Editor, perpustakaan akan diunduh secara otomatis saat Anda memasukkannya ke dalam sketsa, jika tidak, Anda dapat mengunduhnya dari pengelola perpustakaan.

Sekarang kita siap untuk pergi. Unggah sketsa ini dan mainkan penggeser untuk melihat hasilnya:

#include  #include  const char* ssid =SECRET_SSID; // SSID jaringan Anda (nama) const char* kata sandi =SECRET_PSWD; // kata sandi jaringan Anda char auth[] =SECRET_TOKEN; // token API Blynk Anda // Variabel untuk menyimpan nilai kombinasi // Atur kombinasi awal ke ( 1 1 1 ) int SliderValueOne =1; int SliderValueTwo =1; int SliderValueTiga =1; // Blynk berfungsi untuk mengambil nilai BLYNK_WRITE(V1) { SliderValueOne =param.asInt(); // menetapkan nilai yang masuk dari pin V1 ke variabel } BLYNK_WRITE(V2) { SliderValueTwo =param.asInt(); // menetapkan nilai yang masuk dari pin V1 ke variabel } BLYNK_WRITE(V3) { SliderValueThree =param.asInt(); // menetapkan nilai yang masuk dari pin V1 ke variabel } void setup() { Serial.begin(9600); Blynk.begin(auth, ssid, password); // mulai fungsi Blynk dan sambungkan ke WiFi} void loop() { // Bervariasi untuk menyimpan sementara kombinasi int Temp_Slider_One_value =SliderValueOne; int Temp_Slider_Two_value =SliderValueTwo; int Temp_Slider_Three_value =SliderValueThree; Blynk.run(); // polling nilai kombinasi baru dari aplikasi online // periksa apakah nilai kombinasi diubah dan cetak di konsol if(Temp_Slider_One_value !=SliderValueOne || Temp_Slider_Two_value !=SliderValueTwo || Temp_Slider_Three_value !=SliderValueThree){ Serial.print("Baru kombinasi:"); Serial.print(SliderValueOne); Serial.print(""); Serial.print(SliderValueTwo); Serial.print(""); Serial.println(SliderValueThree); } }  

Menggunakan Layar LCD

Saatnya menghubungkan layar!

Layar LCD mudah digunakan tetapi membutuhkan banyak kabel, jadi bersiaplah untuk membuktikan kesabaran Anda.

Perhatikan bahwa kami menggunakan catu daya 5V dan resistor 220 Ohm.

Kecerahan dapat diatur dengan mengubah nilai keluaran pin Analog 3 dari 0 menjadi 255 dengan 0 sebagai nilai maksimum.

analogWrite(A3, 0);  

Sekarang kita dapat mengunggah sketsa contoh dan melihat apakah semuanya berfungsi dengan baik.

// sertakan kode perpustakaan:#include  // inisialisasi perpustakaan dengan mengaitkan pin antarmuka LCD yang diperlukan // dengan nomor pin arduino yang terhubung ke const int rs =12, en =11, d4 =2, d5 =3, d6 =4, d7 =5; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); void setup() { analogWrite(A3, 0); // Atur kecerahan ke nilai maksimumnya // atur jumlah kolom dan baris LCD:lcd.begin(16, 2); // Mencetak pesan ke LCD. lcd.print("halo, dunia!"); } void loop() { // atur kursor ke kolom 0, baris 1 // (catatan:baris 1 adalah baris kedua, karena penghitungan dimulai dengan 0):lcd.setCursor(0, 1); // cetak jumlah detik sejak reset:lcd.print(millis() / 1000); }  

Tambahkan Potensiometer

Untuk membaca nilai potensiometer, kita hanya memerlukan analogRead() pada pin yang benar. Kami menghubungkannya ke pin Analog 0 , 1 , 2.

Perhatikan bahwa nilai potensiometer berkisar dari 0 hingga 1023 membuat kombinasi tidak mungkin ditebak. Untuk memetakan nilai-nilai dari 0 sampai 9 kita akan menggunakan map() fungsi,

 int PotOne =peta(analogRead(A0), 0, 1023, 0, 9);  

Anda dapat menggunakan kode contoh ini untuk mencetak pada layar LCD nilai potensiometer.

#include  // Pin layar LCD const int rs =12, en =11, d4 =2, d5 =3, d6 =4, d7 =5; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); void setup() { analogWrite(A3, 0); // atur kecerahan layar LCD ke nilai maksimum Serial.begin(9600); lcd.begin(16, 2); // memulai layar LCD dengan 16 kolom dan 2 baris } void loop() { int PotOne =map(analogRead(A0), 0, 1023, 0, 9); int PotTwo =peta(analogRead(A1), 0, 1023, 0, 9); int PotThree =peta(analogRead(A2), 0, 1023, 0, 9); lcd.setCursor(0, 0); lcd.print(PotOne); lcd.setCursor(2, 0); lcd.print(PotDua); lcd.setCursor(4, 0); lcd.print(PotTiga); }  

Tambahkan LED RGB

Kami akan menggunakan LED RGB sebagai umpan balik untuk membantu orang menebak kombinasi, semakin dekat mereka ke nilai yang tepat, semakin hangat warna LED, mulai dari biru, aqua, kuning, dan merah.

Anda dapat menggunakan sketsa contoh ini untuk melihat RGB beraksi!

// Pin LED RGB int redPin =6; int pin hijau =8; int pin biru =7; void setup() { pinMode(redPin, OUTPUT); pinMode(pin hijau, OUTPUT); pinMode(bluePin, OUTPUT); Serial.begin(9600); } void loop() { setColor(0, 0, 255); // penundaan biru(1000); setWarna (0, 255, 255); // aqua delay(1000); setColor(255, 255, 0); // penundaan kuning(1000); setWarna(255, 0, 0); // Penundaan merah(1000); } // Kirim nilai RGB ke pin LED void setColor(int red, int green, int blue){ analogWrite(redPin, red); analogWrite(pin hijau, hijau); analogWrite(bluePin, biru); }  

Hubungkan ke Blynk

Sekarang kita siap untuk menyatukan semuanya:sambungkan papan ke Blynk, potensiometer ke layar LCD dan buat LED berkedip hijau saat kombinasinya benar.

  • Perhatikan bahwa kita akan menggunakan fungsi giveColorFeedback() untuk mengatur warna LED ketika nilai absolut setiap potensiometer lebih dekat dari ambang batas tertentu ke kombinasi yang benar.
void giveColorFeedback(int PotOne, int PotTwo, int PotThree){...} 
  • Kami juga akan menggunakan variabel ini untuk menyimpan nilai yang dikirim dari aplikasi dan kombinasinya.
int SliderValueOne =1; int SliderValueTwo =1; int SliderValueTiga =1;  

Perhatikan bahwa nilai awal diatur ke 1, itu akan berubah hanya jika Anda mengubah nilai slider pada aplikasi. Jika Anda menyetel ulang papan, kombinasi akan kembali ke nilai default.

  • Variabel boolean bool start =true; digunakan untuk mendeteksi ketika kombinasi sudah ditebak, jadi untuk menghindari membuka kembali kotak di setiap loop.

Unggah sketsa contoh ini untuk melihatnya beraksi:

#include  #include  #include  #include  // pin LED RGB int redPin =6; int pin hijau =8; int pin biru =7; const char* ssid =SECRET_SSID; // SSID jaringan Anda (nama) const char* kata sandi =SECRET_PSWD; // kata sandi jaringan Anda char auth[] =SECRET_TOKEN; // token API Blynk Anda // pin layar LCD const int rs =12, en =11, d4 =2, d5 =3, d6 =4, d7 =5; bool mulai =benar; // Variabel untuk menyimpan nilai kombinasi // Atur kombinasi awal ke ( 1 1 1 ) int SliderValueOne =1; int SliderValueTwo =1; int SliderValueTiga =1; // Blynk berfungsi untuk mengambil nilai BLYNK_WRITE(V1) { SliderValueOne =param.asInt(); // menetapkan nilai yang masuk dari pin V1 ke variabel } BLYNK_WRITE(V2) { SliderValueTwo =param.asInt(); // menetapkan nilai yang masuk dari pin V1 ke variabel } BLYNK_WRITE(V3) { SliderValueThree =param.asInt(); // memberikan nilai yang masuk dari pin V1 ke variabel } LiquidCrystal lcd(rs, en, d4, d5, d6, d7); void setup() { pinMode(redPin, OUTPUT); pinMode(pin hijau, OUTPUT); pinMode(bluePin, OUTPUT); analogWrite(A3, 0); // atur kecerahan layar LCD ke nilai maksimum Serial.begin(9600); lcd.begin(16, 2); // memulai layar LCD dengan 16 kolom dan 2 baris Blynk.begin(auth, ssid, password); // mulai fungsionalitas Blynk } void loop() { // Variabel untuk menyimpan sementara kombinasi int Temp_Slider_One_value =SliderValueOne; int Temp_Slider_Two_value =SliderValueTwo; int Temp_Slider_Three_value =SliderValueThree; Blynk.run(); // polling nilai kombinasi baru dari aplikasi online // periksa apakah nilai kombinasi diubah dan cetak di konsol if(Temp_Slider_One_value !=SliderValueOne || Temp_Slider_Two_value !=SliderValueTwo || Temp_Slider_Three_value !=SliderValueThree){ Serial.print("Baru kombinasi:"); Serial.print(SliderValueOne); Serial.print(""); Serial.print(SliderValueTwo); Serial.print(""); Serial.println(SliderValueThree); } int PotOne =peta(analogRead(A0), 0, 1023, 0, 9); int PotTwo =peta(analogRead(A1), 0, 1023, 0, 9); int PotThree =peta(analogRead(A2), 0, 1023, 0, 9); lcd.setCursor(0, 0); lcd.print(PotOne); lcd.setCursor(2, 0); lcd.print(PotDua); lcd.setCursor(4, 0); lcd.print(PotTiga); if (mulai) { giveColorFeedback(PotOne, PotTwo, PotThree); if (PotOne ==SliderValueOne &&PotTwo ==SliderValueTwo &&PotThree ==SliderValueThree) { blinkGreenLed(); mulai =salah; } } if(!start) { if(PotOne ==0 &&PotTwo ==0 &&PotThree ==0){ start =true; } } } // Berikan feedback berdasarkan seberapa dekat potensiometer dengan nilai kombinasi // Semakin dekat semakin hangat warna LED void giveColorFeedback(int PotOne, int PotTwo, int PotThree) { if (abs(PotOne - SliderValueOne) <=1 &&abs(PotTwo - SliderValueTwo) <=1 &&abs(PotThree - SliderValueThree) <=1 ) { // Red setColor(255, 0, 0); } else if (abs(PotOne - SliderValueOne) <=3 &&abs(PotTwo - SliderValueTwo) <=3 &&abs(PotThree - SliderValueThree) <=3 ) { // yellow setColor(255, 255, 0); } else if (abs(PotOne - SliderValueOne) <=4 &&abs(PotTwo - SliderValueTwo) <=4 &&abs(PotThree - SliderValueThree) <=4 ) { // aqua setColor(0, 255, 255); } else { // warna set biru(0, 0, 255); } } void blinkGreenLed() { for (int a =0; a <2; a++) { for (int b =0; b <=255; b +=5) { setColor(0, b, 0); penundaan (5); } for (int b =255; b>=0; b -=5) { setColor(0, b, 0); penundaan (5); } } for (int b =0; b <=255; b +=5) { setColor(0, b, 0); penundaan (5); } } // Mengirim nilai RGB ke pin LED void setColor(int red, int green, int blue){ analogWrite(redPin, red); analogWrite(pin hijau, hijau); analogWrite(bluePin, biru); }  

Tambahkan Buzzer

Kami akan menggunakan bel untuk memainkan melodi saat kotak dibuka. Lebih tepatnya kita akan memainkan lagu tema Star Wars!

Menghubungkan bel itu sederhana:

Unggah kode contoh ini dan dengarkan:

const int c =261; konstanta int d =294; const int e =329; konstanta int f =349; konstanta int g =391; const int gS =415; konstanta int =440; const int aS =455; konstanta int b =466; const int cH =523; const int cSH =554; const int dH =587; const int dSH =622; const int eH =659; const int fH =698; const int fSH =740; konstanta int gH =784; const int gSH =830; const int aH =880; int penghitung =0; #define buzzerPin 1 void setup() { pinMode(buzzerPin, OUTPUT); Serial.begin(9600); } void loop() { play_jingle(); penundaan(3000); } void play_jingle() { bip(a, 500); bip(a, 500); bip(a, 500); bip(f, 350); bip(ch, 150); bip(a, 500); bip(f, 350); bip(ch, 150); bip(a, 650); penundaan (500); bip(eH, 500); bip(eH, 500); bip(eH, 500); bip(fH, 350); bip(ch, 150); bip(gS, 500); bip(f, 350); bip(ch, 150); bip(a, 650); penundaan (500); } void beep(int note, int duration) { //Memutar nada pada nada buzzerPin(buzzerPin, note, durasi); //Hentikan nada pada buzzerPin noTone(buzzerPin); penundaan (50); //Penghitung penghitung kenaikan++; }  

Tambahkan Motor Servo

Motor servo adalah kunci kotak kita, kita perlu memutar 90 derajat saat kombinasinya benar, sehingga kotak akan terbuka.

Menghubungkan servo hanya membutuhkan tiga kabel.

Untuk memutarnya 90 derajat kita akan menggunakan fungsi berikut:

#include  int pos =0; // variabel untuk menyimpan posisi servo Servo myservo; // membuat objek servo untuk mengontrol pengaturan kekosongan servo() { myservo.attach(9); // pasang servo pada pin 9 ke objek servo myservo.write(pos); // atur servo pada posisi 0 } void loop() { open_the_box(); penundaan(2000); tutup_kotak_(); penundaan(2000); } void open_the_box(){ for (pos =0; pos <=90; pos +=1) { // beralih dari 0 derajat ke 90 derajat myservo.write(pos); // memberitahu servo untuk pergi ke posisi dalam variabel 'pos' delay(15); // menunggu 15 md agar servo mencapai posisi } } void close_the_box(){ for (pos =90; pos>=0; pos -=1) { // beralih dari 90 derajat ke 0 derajat myservo.write(pos); // memberitahu servo untuk pergi ke posisi dalam variabel 'pos' delay(15); // menunggu 15 ms sampai servo mencapai posisi } }  

Perhatikan bahwa untuk mengembalikan servo dan menutup kotak, Anda hanya perlu memutar semua potensiometer ke 0.

Bangun Kotak Puzzle Anda

Ini tidak akan menjadi kotak tanpa kotak, jadi unduh file kasus di bawah ini dan gunakan sebagai panduan untuk membuatnya sendiri.

Perhatikan bahwa kami menggunakan karton 2mm.

Kode

Sketsa lengkap

Suku cadang dan penutup khusus

karton 2 mm box_E5j7tnFdNC.dxf

Skema


Proses manufaktur

  1. Komponen Sirkuit
  2. Sirkuit Terintegrasi
  3. SensorTag ke Blynk Menggunakan Node-RED
  4. Arduino Digital Dice
  5. Sensor Multi Suhu
  6. Pengontrol Game Arduino
  7. MOSMusic
  8. Apa itu Mikroelektronika?
  9. Komponen mesin bor
  10. Komponen mesin pembakaran dalam