Proses manufaktur
![]() |
| × | 1 |
![]() |
|
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:
Tujuan Pembelajaran
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.
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.
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){...}
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.
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.
Proses manufaktur
Komponen dan persediaan Arduino UNO × 1 Adafruit 16 Channel PWM Servo Motor Controller × 3 Motor servo mikro SG90 × 36 Sumber Daya Sakelar 5 volt 30 watt × 1 Ekstensi Kabel Motor Servo × 1 24 inci x 48 inci. Papan Pasak × 1 Stik es kr
Komponen dan persediaan Arduino MKR1000 × 1 Nano Hub Sensor Infineon × 1 LCD Nokia 5110 × 1 Modul Bluetooth HC-05 × 1 Breadboard (generik) × 1 Kabel jumper (generik) × 1 Sakelar Tombol Tekan SparkFun 12mm × 1 Buzzer
Komponen dan persediaan Arduino UNO Salah satu komponen utama. × 1 Sensor Ultrasonik - HC-SR04 (Generik) Salah satu komponen utama. × 1 Baterai Li-Ion 1000mAh Salah satu komponen utama. × 2 Katoda Umum Difusi RGB Salah satu komponen utama. × 1 Buzzer Sala
Komponen dan persediaan Arduino MKR IoT Bundle × 1 Aplikasi dan layanan online Zpier ThingSpeak API Tentang proyek ini Catatan:Tutorial ini mungkin sudah usang, silakan buka di sini untuk versi yang lebih baru. Pendahuluan Seperti yang pernah