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

Lagu Kebangsaan AS dengan Cahaya &Nada

Komponen dan persediaan

Arduino Nano R3
Perhatikan bahwa ini memiliki 4 prosesor berbeda Saya menggunakan 328P (bootloader lama)
× 1
Buzzer
Buzzer lama apa pun bisa digunakan. Saya menggunakan buzzer 16 Ohm.
× 1
Sakelar Tombol Tekan SparkFun 12mm
Tidak persis seperti yang saya gunakan tetapi milik saya berukuran 6x6x6mm
× 2
Sakelar Rocker 250V 3A
Sakelar daya apa pun dapat digunakan. Saya menggunakan kasing 9Volt dengan sakelar tetapi tersembunyi di kasing saya jadi saya menambahkan sakelar ke luar. Cari saja saklar rocker.
× 1
Resistor 330 ohm
Semua resistor dapat digunakan, tetapi lakukan penghitungan LED dan pastikan Anda tidak melampaui output LED atau Maksimum 40 mA per pin pada Nano. 330 ohm cukup standar di semua paket pemula Arduino.
× 3
LED (generik)
6 LED atau berapa pun yang Anda inginkan. 2 merah, 2 putih dan 2 biru. LED merah yang saya gunakan adalah 2.2V dan 3.2V lainnya masing-masing LED. Menghasilkan 9.7mA &6.7 mA menggunakan 330 ohm. (ingat saya menggunakan 2 per output jadi ~13 mA &~20mA yang merupakan setengah dari arus output pin maks)
× 6
Breadboard Dapat Disolder SparkFun - Mini
Semua papan tempat memotong roti akan berfungsi, menyolder atau menyolder panggilan Anda tentang tampilannya. Atau Anda dapat melakukannya tanpa satu dan hanya mengebor lubang dan kayu dan merekatkan bagian-bagiannya dengan lem panas.
× 1
Baterai 9V (generik)
banyak opsi daya. Saya menggunakan baterai 9 volt dengan kasing dan sakelar. Anda dapat menggunakan hanya kabel USB atau bahkan paket baterai AA 4x asalkan Anda memenuhi persyaratan input Nano. Saya menyesal membayar uang ekstra untuk yang memiliki sakelar hidup/mati karena saya menggunakan sakelar terpisah.
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)
Terserah Anda jika ingin menyolder

Tentang proyek ini

Saya sudah mulai selama setahun terakhir melakukan pemrograman untuk lampu Natal dan proyek musik akhirnya. Ini adalah proyek sampingan yang diminta seseorang untuk saya lakukan dan menurut saya itu akan menyenangkan. Awalnya ini hanya akan menjadi satu lagu dengan lampu tapi itu hanya timpang.

Berikut tautan jika Anda mengalami masalah dengan video:

https://youtu.be/C2jyn80Mjus

Proyek ini menggunakan Arduino Nano. Dalam proyek ini saya menggunakan dua tombol push yang berbeda untuk melakukan dua lagu yang berbeda menggunakan fungsi Tone(). Salah satunya adalah suara 'muatan' dan yang lainnya adalah 'Lagu Kebangsaan AS'. Sampai tombol ditekan, itu hanya melakukan pencahayaan acak untuk efek.

Dalam sketsa ini saya menggunakan banyak fungsi untuk menyederhanakan proses penulisan fungsi tetapi mempertahankan kontrol penuh dari proses pencahayaan/suara sehingga saya dapat membuat perubahan kecil jika saya tidak menyukai apa yang saya dengar/lihat dengan sedikit kesulitan. .

Tujuan saya memposting proyek ini adalah untuk membagikan beberapa hal yang telah saya pelajari dalam desain/pengkodean sehingga jika Anda melakukan hal serupa, ini dapat membantu.

Berikut adalah tampilan desain awal pada papan tempat memotong roti saat saya menguji sistem dan kode.

Berikut adalah pengaturan sistem tenaga. Saya memilih baterai 9Volt untuk ukuran dan tidak bergantung pada dinding USB atau daya komputer.

Beginilah tampilannya setelah semuanya disolder dari dalam. Sangat disarankan menyolder hanya dengan penutup atas lalu menambahkan sisinya nanti

Kode

  • USA_ANTHEM_Updated.ino
USA_ANTHEM_Updated.inoArduino
Spanduk Star Spangled dengan LED, Charge, tone, semua fungsi. Cukup salin dan tempel.
/*Star Spangled Banner dengan LEDDibuat oleh Ryan Aebi Juni 2018Struktur Kode-Basic Loop untuk merujuk fungsi lain-Tombol tekan melakukan Star Spangled Banner atau Mengisi suara dengan lampuStar Spangled Banner Notes-Funtion memiliki not yang ditetapkan oleh integer untuk Frequncy(Hz), &durasi(waktu dalam n)-LED dipilih sendiri secara semi-acak saat menulis fungsi-Fungsi dibangun untuk meningkatkan nada dengan setiap permainan (reset ke nada normal saat startup/reset perangkat keras)-Pitch dihitung adalah 1/12 dari keseluruhan atau .06 Desain Tombol/pengkabelan-3 set LED Merah, Biru &Hijau pada setiap saluran termasuk 2 masing-masing secara paralel.-Tombol reset eksternal-tombol mulai untuk lagu interupsi lagu untuk biaya* ///************************************************ ***************Deklarasi Bilangan Bulat const int ChargeButton=3; //(Nano D3) uno pin 2 harus menjadi pin interupt const int StartButton=5; //(Nano D5) uno pin 4 const int BuzzerPin=9; //(Nano D9) uno pin 9 const int RedLED=6; //(Nano D6) uno pin 6 const int WhiteLED=7; //(Nano D7) uno pin 7 const int BlueLED=8; //(Nano D8) uno pin 8 int n=1000; //deklarasikan bilangan bulat nilai ini akan berubah dengan setiap lagu int DurationOn=n; //deklarasi bilangan bulat untuk nanti akan digunakan dalam perhitungan stacatto int DurationRest=n; //deklarasi bilangan bulat untuk nanti akan digunakan dalam perhitungan stacatto //jumlah x &y harus 1 Saya punya lebih banyak catatan tentang ini nanti di float x=.66; //deklarasikan float untuk waktu pada float y=.34; //deklarasikan float untuk waktu istirahat // rate di mana lampu berkedip secara acak sambil menunggu tombol input int Twinkle_Rate=250; //perhatikan bahwa jika tombol dinaikkan secara drastis mungkin tidak merespons 100% setiap saat //tingkat kedipan yang lebih rendah meningkatkan respons tekan tombol //menetapkan bilangan bulat untuk status tombol int StartButtonState; int ChargeButtonState; //catatan C tengah adalah 4C (B flat &E flat) int Note1=233; //Bb 233Hz int Catatan2=294; //4D 294Hz int Catatan3=330; //4E 330Hz int Catatan4=349; //4F 349Hz int Catatan5=392; //4G 392Hz int Catatan6=440; //4A 440Hz int Catatan7=466; //4Bb 466Hz int Catatan8=523; ///5C 523Hz int Catatan9=587; ///5D 587Hz int Catatan10=622; ///5Eb 622Hz int Catatan11=698; //************************************************************************************ ******************Fungsi Pengisian Daya/Pengisian Songvoid(){ n=600; //tingkat perkembangan lagu //Format:tulis pin, nada pada frekuensi tertentu (dengan cara ini tidak terpengaruh //perubahan di akhir Lagu Kebangsaan, lebih lanjut tentang ini nanti), tunda untuk waktu yang sama nada untuk menyinkronkan musik, //matikan pin yang aktif dan tunda untuk istirahat digitalWrite(RedLED, HIGH); nada(Pin Buzzer, 392, n/3); penundaan (n/3); digitalWrite(LED Merah, RENDAH); penundaan (70); digitalWrite(LED Putih, TINGGI); nada(Pin Buzzer, 523, n/3); penundaan (n/3); digitalWrite(LED Putih, RENDAH); penundaan (70); digitalWrite(LED Biru, TINGGI); nada(Pin Buzzer, 659, n/3); penundaan (n/3); digitalWrite(LED Biru, RENDAH); penundaan (70); digitalWrite(LED Merah, TINGGI); digitalWrite(LED Putih, TINGGI); digitalWrite(LED Biru, TINGGI); nada(Pin Buzzer, 784, n*3/4); tunda(n*3/4); digitalWrite(LED Biru, RENDAH); digitalWrite(LED Merah, RENDAH); digitalWrite(LED Putih, RENDAH); penundaan (70); digitalWrite(LED Biru, TINGGI); nada(Pin Buzzer, 659, n/4); penundaan (n/4); digitalWrite(LED Biru, RENDAH); penundaan (70); digitalWrite(LED Merah, TINGGI); digitalWrite(LED Putih, TINGGI); digitalWrite(LED Biru, TINGGI); nada(Pin Buzzer, 784, n*2); tunda(n*2); digitalWrite(LED Biru, RENDAH); digitalWrite(LED Merah, RENDAH); digitalWrite(LED Putih, RENDAH); delay(70);}//****************************************** ********************SingleDW functionvoid SingleDWwithNote(int HZ, int TurnOn, int Duration, int Staccato){ //Hertz di mana nada berada (catatan referensi#) / /nyalakan=pin (LED merah/putih/biru) yang akan disetel //durasi adalah untuk berapa lama //Staccato 1=ya, 0=tidak menghasilkan nada yang sedikit memendek, atau nilai x int tinggi hanya sebagai jeda singkat if (Staccato==1){DurationOn=Duration*x;} //berapa lama nada &lampu menyala DurationShort else if (Staccato==0){DurationOn=Duration;} digitalWrite(TurnOn, HIGH); nada (Pin Buzzer, HZ, Durasi Aktif); penundaan (Durasi Aktif); digitalWrite(Aktifkan, RENDAH); if (Staccato==1) { DurationRest=Duration*y; delay(DurationRest); }}//********************************************* ****************Fungsi Lagu Kebangsaan Amerika Serikat/Songvoid USNationalAnthem(){ n=577; //kecepatan pemutaran suara dihitung dari:60.000 (faktor md/BPM) / 104 BPM =577 md /* nilai not seperempat adalah n nilai setengah not dalam n*2 not kedelapan n/2 not delapan putus-putus adalah n*3 /4 */ //x &y bilangan bulat untuk staccato/menambahkan istirahat setelah catatan //perhatikan bahwa x+y harus =1 atau int. n rate akan diturunkan //mengurangi x dan meningkatkan y meskipun untuk membuat nada lebih menonjol dan gelisah/menyenangkan x=.92; //stacatio sejati adalah sekitar 1/2 atau 2/3 nilai jadi nilai x sekitar .5 hingga .7 untuk staccato sejati y=.08; //1.00-.92(nilai x) =.08 //bar 1-5, baris 1 SingleDWwithNote(Note4, RedLED, n*3/4, 1); SingleDWwithNote(Note2, WhiteLED, n/4, 1); SingleDWwithNote(Catatan1, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note4, RedLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n*2, 1); SingleDWwithNote(Note9, BlueLED, n*3/4, 1); SingleDWwithNote(Note8, WhiteLED, n/4, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note3, BlueLED, n, 1); SingleDWwithNote(Note4, RedLED, n*2, 1); SingleDWwithNote(Catatan4, RedLED, n/2, 1); SingleDWwithNote(Catatan4, RedLED, n/2, 1); //bar6-9 baris 2 SingleDWwithNote(Note9, BlueLED, n*3/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note6, BlueLED, n*2, 1); SingleDWwithNote(Note5, WhiteLED, n/2, 1); SingleDWwithNote(Note6, BlueLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note4, BlueLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note1, BlueLED, n, 1); SingleDWwithNote(Note4, RedLED, n*3/4, 1); SingleDWwithNote(Note2, WhiteLED, n/4, 1); //bars 10-13 baris 3 SingleDWwithNote(Note1, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note4, RedLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n*2, 1); SingleDWwithNote(Note9, BlueLED, n*3/4, 1); SingleDWwithNote(Note8, WhiteLED, n/4, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note3, BlueLED, n, 1); SingleDWwithNote(Note4, RedLED, n*2, 1); SingleDWwithNote(Catatan4, RedLED, n/2, 1); SingleDWwithNote(Catatan4, RedLED, n/2, 1); //bar 14-17, baris 4, akhir halaman 1 SingleDWwithNote(Note9, BlueLED, n*3/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note6, BlueLED, n*2, 1); SingleDWwithNote(Note5, WhiteLED, n/2, 1); SingleDWwithNote(Note6, BlueLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note4, BlueLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Catatan1, RedLED, n, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); //bar 18-21, baris 5, awal halaman 2 SingleDWwithNote(Note9, BlueLED, n, 1); SingleDWwithNote(Note10, RedLED, n, 1); SingleDWwithNote(Note11, WhiteLED, n, 1); SingleDWwithNote(Note11, WhiteLED, n*2, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note8, WhiteLED, n, 1); SingleDWwithNote(Note9, BlueLED, n, 1); SingleDWwithNote(Note10, RedLED, n, 1); SingleDWwithNote(Note10, RedLED, n*2, 1); SingleDWwithNote(Note10, RedLED, n, 1); //bar 22-25, baris 6 SingleDWwithNote(Note9, WhiteLED, n*3/2, 1); SingleDWwithNote(Note8, BlueLED, n/2, 1); SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note6, RedLED, n*2, 1); SingleDWwithNote(Note5, BlueLED, n/2, 1); SingleDWwithNote(Note6, RedLED, n/2, 1); SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note2, BlueLED, n, 1); SingleDWwithNote(Note3, RedLED, n, 1); SingleDWwithNote(Note4, WhiteLED, n*2, 1); SingleDWwithNote(Note4, RedLED, n, 1); n=n*1,08; //60.000 / 96 bpm=625 md; hanya sedikit terbelakang //bar 26-28, baris 7 SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n/2, 1); SingleDWwithNote(Note6, BlueLED, n/2, 1); SingleDWwithNote(Note5, RedLED, n, 1); SingleDWwithNote(Note5, RedLED, n, 1); SingleDWwithNote(Note5, RedLED, n, 1); SingleDWwithNote(Note8, WhiteLED, n, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n/2, 1); //bars 29-30 SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note6, BlueLED, n*2, 1); //2x untuk menahan SingleDWwithNote(Note4, RedLED, n/2, 1); SingleDWwithNote(Catatan4, RedLED, n/2, 1); SingleDWwithNote(Note7, BlueLED, n*3/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); n=n*1.2; //retard besar //bar 31-34 akhir lagu SingleDWwithNote(Note11, WhiteLED, n*2, 1); //penahanan ekstra pada SingleDWwithNote gratis(Note7, RedLED, n/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n*3/2, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); SingleDWwithNote(Note8, WhiteLED, n, 1); SingleDWwithNote(Note7, RedLED, n*3, 1); //hanya memegang 3 nilai //rasie semua nada dengan 3 langkah //.06 berasal dari teori musik. Catat dalam hertz lalu bagi dengan //not di bawahnya (nada tajam dan datar dihitung sebagai nada) dibulatkan menjadi 1,06 //Anda dapat menghapus paragraf berikutnya untuk menghindari perubahan frekuensi atau mengubahnya jika Anda ingin Note1=Note1 *1,06*1,06*1,06; Catatan2=Catatan2*1,06*1,06*1,06; Catatan3=Catatan3*1,06*1,06*1,06; Catatan4=Catatan4*1,06*1,06*1,06; Catatan5=Catatan5*1,06*1,06*1,06; Catatan6=Catatan6*1.06*1.06*1.06; Catatan7=Catatan7*1.06*1.06*1.06; Catatan8=Catatan8*1.06*1.06*1.06; Catatan9=Catatan9*1.06*1.06*1.06; Note10=Catatan10*1.06*1.06*1.06; Note11=Catatan11*1.06*1.06*1.06;}//************************************* *************************Twinkle void Twinkle(int Twinkle_Time) //Menempatkan angka di () menunjukkan berapa lama binar terjadi{ //built fungsi ini untuk penggunaan lain sehingga memiliki perhitungan awal yang aneh //mengubah waktu&rate menjadi bilangan bulat yang lebih kecil, perhatikan putaran ujung depan Twinkle_Time=Twinkle_Time/Twinkle_Rate; // dalam hal ini Tiwkle Time adalah =untuk Twinkle Rate jadi nilainya adalah 1 for(Twinkle_Time;Twinkle_Time>0;Twinkle_Time--) //karena nilai adalah 1 hanya memproses sekali { int B=random(1,4); //integer acak 1, 2 atau 3 int C=random(1,4); //integer acak 1, 2 atau 3 //tidak ada masalah jika kedua integer sama, hanya satu LED yang menyala, menambah keacakan //mengevaluasi setiap integer untuk dijalankan pada LED warna tertentu if(B==1){ digitalWrite(LEDMerah, TINGGI);} if(B==2){digitalWrite(LED Putih, TINGGI);} if(B==3){digitalWrite(LED Biru, TINGGI);} if(C==1){digitalWrite( RedLED, HIGH);} if(C==2){digitalWrite(WhiteLED, HIGH);} if(C==3){digitalWrite(BlueLED, HIGH);} delay(Twinkle_Rate);// terus menyalakan LED selama a atur periode waktu // dan kemudian kami menulis LED yang sesuai rendah. dingin mungkin menyederhanakan dan hanya menulis semua 3 rendah dapat mempercepat waktu if(B==1){digitalWrite(RedLED, LOW);} if(B==2){digitalWrite(WhiteLED, LOW);} if(B==3){digitalWrite(BlueLED, LOW);} if(C==1){digitalWrite(RedLED, LOW);} if(C==2){digitalWrite(WhiteLED, LOW);} if(C==3) {digitalWrite(BlueLED, RENDAH);} }}//************************************* *************************Setupvoid setup(){ pinMode(ChargeButton, INPUT_PULLUP); //menempatkan sebagai input dan mengaktifkan resistor pull up internal untuk tombol pinMode(StartButton, INPUT_PULLUP); //menempatkan sebagai input dan mengaktifkan resistor pull up internal untuk tombol pinMode(RedLED, OUTPUT); //LED dikonfigurasi sebagai output pinMode(LED Putih, OUTPUT); //LED dikonfigurasi sebagai output pinMode(BlueLED, OUTPUT); //LED dikonfigurasi sebagai output pinMode(BuzzerPin, OUTPUT); //Buzzer dikonfigurasi sebagai output //digitalWrite(ChargeButton, HIGH); tidak perlu karena diaktifkan sebagai pullup, itu hanya berlebihan //digitalWrite(StartButton, HIGH); tidak perlu karena diaktifkan sebagai pullup, itu hanya redundan //menyetel semua LED ke RENDAH untuk menghindari kesalahan apa pun. Untuk desain saya HIGH=ON, LOW=OFF digitalWrite(RedLED, LOW); digitalWrite(LED Putih, RENDAH); digitalWrite(LED Biru, RENDAH); } //************************************************ ***************Main Loopvoid loop(){ //membaca status tombol, pin dihubungkan ke resistor internal yang dikonfigurasi sebagai high //pin akan menjadi rendah saat ditekan StartButtonState =digitalRead(StartButton); //rendah=ditekan ChargeButtonState =digitalRead(ChargeButton); //low=ditekan //mengevaluasi bilangan bulat untuk melakukan fungsi pin pertama yang ditolak sebagai rendah //laju pengambilan sampel untuk tombol membaca adalah int twinkle_rate (.25 detik) if (StartButtonState==LOW){USNationalAnthem();} else if (ChargeButtonState==LOW){Charge();} else{Twinkle(Twinkle_Rate);} // jika tidak ada pin yang ditekan maka nyalakan! lagi... dan lagi... dan lagi... }

Skema

Menunjukkan koneksi Listrik menggunakan papan tempat memotong roti Menampilkan sambungan kabel tanpa menyolder Ikuti kabelnya! Menampilkan biaya setiap item , total biaya dan tempat pembelian.

Proses manufaktur

  1. Sirkuit Dengan Sakelar
  2. Lampu Liburan
  3. Tissue dengan Lotion
  4. Acceed:12 port gigabit switch dengan 4 port SFP
  5. Memantau Suhu Dengan Raspberry Pi
  6. Beralih/Panel LED dengan Arduino untuk FS2020
  7. C++ Switch Case Statement dengan CONTOH
  8. switch…case di C (Switch Statement in C) dengan Contoh
  9. Pernyataan Java Switch-Case dengan Contoh
  10. Jaringan Nasional MEP™ Terhubung dengan Produsen Milik Minoritas