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

Lampu Meja Reaktif Audio Arduino

Komponen dan persediaan

Arduino Nano R3
× 1
modul suara
× 1
Breadboard (generik)
× 1
Kabel jumper (generik)
× 1
Led yang Dapat Dialamatkan
× 1
Ikea DROPPAR Jar
× 1
Pipa PVC berukuran kecil
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

HALO DUNIA!!

Hai! Dalam build ini kita akan membuat cahaya yang terlihat bagus yang menari mengikuti semua suara dan musik, menggunakan komponen sederhana dan beberapa Arduino dasar pemrograman. Itu membuat efek luar biasa saat berdiri di atas meja saat bermain game, memutar musik, dan apa pun yang benar-benar menghasilkan suara. Ayo berangkat!

Ini adalah proyek yang saya ikuti berdasarkan "Natural Nerd" youtuber yang mereka lakukan. Ini adalah proyek versi saya. Semua pujian diberikan kepada mereka dan teriakan keras untuk mereka karena memberikan saya detail tentang cara melakukan proyek.

Tautan YouTube

LANGKAH 1:PERSEDIAAN UTAMA

Hal pertama yang pertama:jenis persediaan apa yang kita butuhkan dan berapa biayanya? Yah, mereka sebagian besar opsional, dan dapat dibuat dengan banyak improvisasi. Meski begitu, beberapa item kunci diperlukan jika Anda ingin mengikuti panduan ini:

  • Arduino Nano (atau jenis Arduino yang sama kecilnya) (tautan beli RM 12,50)
  • Modul Detektor Suara (Link beli RM 5,90)
  • 5 volt catu daya (atau 12 volt dengan Modul Stepdown)
  • Satu per satu LED yang dapat dialamatkan strip 60 led per. meteran (tautan beli)

Tergantung pada tampilan yang Anda inginkan, Anda mungkin ingin mengatur strip secara berbeda atau menyebarkan cahaya dengan cara lain. Di sinilah Anda bisa berkreasi. Jika Anda menyukai pendekatan saya, saya menggunakan item berikut:

  • Jaringan Kendi Droppar IKEA tertinggi (Tautan IKEA)
  • Pipa PVC berukuran kecil.
  • Papan Busa
  • Pistol Lem Panas

Semua hal dianggap saya menghabiskan sekitar RM 83,30 tergantung pada toko yang Anda kunjungi dan membeli barang, di mana strip LED sejauh ini merupakan bagian paling mahal yang harganya RM 40 hanya untuk 1 Meter.

LANGKAH 2:MENDAPATKAN DAYA KOMPONEN

Memberi daya pada komponen akan menjadi metode yang lurus ke depan. Saya hanya menggunakan kabel USB Arduino Nano dan langsung colok ke pc. Jika Anda menggunakan catu daya eksternal seperti sumber daya AC ke DC, Anda akan memerlukan modul step down untuk membantu Anda mengurangi jumlah aliran arus ke sirkuit Anda. Jika tidak, jika Anda tidak menggunakannya dan Anda mungkin memiliki peluang yang sangat tinggi untuk membakar Arduino termasuk komponen yang terhubung.

Bintang pertunjukannya adalah modul pendeteksi suara. Ini akan memberikan sinyal analog ke Arduino, yang dapat kita gunakan untuk (semoga) dengan cerdik menyalakan lampu RGB. Untuk dapat melakukan ini, kita perlu menyalakan kedua perangkat. Untungnya keduanya membutuhkan input 5 volt. Saya menggunakan modul step down untuk turun dari 12 volt menjadi 5 volt, tetapi akan lebih mudah menggunakan sumber listrik 5 volt secara langsung. Hubungkan VIN pada Arduino dan pada papan pendeteksi suara ke input positif. Kemudian hubungkan GND pada Arduino dan detektor ke negatif. Lihat kabel hitam dan kabel merah pada skema terlampir. Kita juga perlu menghubungkan input positif dan negatif pada strip LED ke sumber listrik.

LANGKAH 3:DETEKTOR &STRIP

Setelah menghubungkan ketiga bagian ke daya, kita perlu menghubungkannya satu sama lain.

Modul pendeteksi suara akan berkomunikasi dengan Arduino melalui pin input analog. Saya akan menggunakan pin nomor 0 dalam kasus ini.

Strip LED membutuhkan pulsa digital untuk dapat memahami LED mana yang ingin kita arahkan. Oleh karena itu kita perlu menghubungkan pin output digital ke Arduino nano. Saya akan menggunakan pin nomor 6.

Gunakan shrinking tube pada area yang dipilih agar kabel tidak saling berbenturan di ruang sempit nantinya.

Cukup ikuti diagram skema yang saya berikan di sini dan Anda akan baik-baik saja!

Luar biasa, sekarang sebagian besar kita sudah selesai dengan elektronik!

LANGKAH 4:UPLOAD KODE

Bagian terpenting dari build ini bisa dibilang adalah kodenya. Itu dapat mengubah bangunan ini dari sangat keren menjadi sangat luar biasa. Anda dapat menggunakan kode yang saya berikan bersama dengan proyek ini. Prinsip utamanya adalah memetakan nilai analog yang kita dapatkan dari sensor, ke sejumlah LED untuk ditampilkan.

LANGKAH 5:MEMPERSIAPKAN KASING

Awalnya saya pikir tutupnya terbuat dari akrilik, setelah saya membeli toples dan menyadari itu bukan akrilik tapi kaca. Jadi saya perlu menyesuaikan kembali rencana saya dengan membuat penutup yang mudah dicolek dan dipasang Arduino dan lednya. Jadi saya memilih papan busa.

Langkah pertama , saya perlu memotong papan busa yang persis melingkar dan memiliki diameter yang sama dengan penutup kaca toples. Saya tidak memiliki alat ukur diameter yang tepat , jadi saya mengimprovisasi metode dengan menggunakan spidol basah dan menandai diameter kaca dan menempelkannya di selembar kertas. Setelah itu, saya menempelkan kertas ke papan busa dan papan dengan mengikuti tepi lingkaran di atas kertas. Ini tidak sempurna tetapi harus cukup baik untuk menampung semua Arduino dan komponen yang dipimpin.

Langkah kedua , saya harus memecahkan kaca di tutup toples. PERHATIAN! tolong tutup toples dengan kantong plastik tebal untuk mencegah kaca berserakan di sekitar ruangan dan lakukan di ruang terbuka. Sadar dengan sekitar Anda. Setelah kaca pecah, pastikan semua kaca yang menempel di celah samping tutup toples sudah dilepas. Hal ini untuk mencegah Anda atau orang lain cedera karena terpotong sendiri pada kaca yang tersangkut.

Langkah ketiga , letakkan papan busa berbentuk lingkaran di tengah tutup toples. Pastikan busanya kencang dan tidak terlalu longgar sehingga pas dengan toples.

Langkah keempat, saya baru menyadari bahwa saya perlu mengubah tata letak proyek ini. saya ingin membuat pengguna akan mudah mengakses komponen Arduino jika terjadi kesalahan. Jadi, saya memutuskan untuk menggunakan papan tempat memotong roti mini dan meletakkannya di tengah tutupnya. Tidak hanya itu, saya memotong dua lubang untuk kabel dari Modul Suara yang akan saya tempatkan di bagian bawah tutup toples untuk masuk ke dalam toples dan ke papan tempat memotong roti dan satu lubang lagi untuk Arduino untuk terhubung dengan kabel USB untuk bertindak sebagai catu daya untuk sirkuit.

Langkah kelima , saya menandai pipa pvc dengan selotip dan menggambar garis di tengah selotip. Kemudian, saya rekatkan di pipa pvc. Penandaan tersebut merupakan indikator saya untuk memotong pipa pvc secara merata dan berusaha untuk mendapatkan potongan yang bersih.

Setelah mengukur panjang pvc yang saya perlukan, saya memotongnya dengan hati-hati dengan mengikuti tanda yang saya berikan. Panjang pipa pvc tergantung pada tinggi toples Anda. Anda dapat menggunakan panjang apa pun yang Anda inginkan.

Langkah keenam , saya membengkokkan pipa PVC yang saya potong dengan strip LED di sekelilingnya dan membuatnya sedikit miring dan berputar ke atas PVC. Saya memastikan bahwa saya membuat lubang kecil untuk kelebihan panjang kabel untuk disembunyikan di dalam tabung PVC untuk manajemen kabel. Saya kemudian perlu menemukan cara untuk menahan PVC ke papan tempat memotong roti. Dengan menggunakan lem tembak atau selotip dua sisi, saya bisa merekatkan pipa PVC ke papan busa ekstra kemudian menempelkannya di area yang tidak terpakai di papan tempat memotong roti. Selama langkah ini, saya dapat menghubungkan beberapa komponen ke papan tempat memotong roti.

Gunakan diagram skematik yang disediakan untuk menghubungkan semua komponen.

(Area breadboard kiri akan menjadi positif dan area kanan breadboard akan menjadi negatif. `

Langkah ketujuh, saya meletakkan modul suara di bagian luar tutup toples. Hal ini sengaja dilakukan untuk kemudahan modul memetik suara di luar toples nantinya. Setelah menempatkan modul, hubungkan dengan kabel dan cocokkan seperti yang tertera pada diagram skematik yang diberikan. Kemudian, sambungkan semua kabel dengan sensor dan Arduino ke papan tempat memotong roti. Arduino sedang diatur secara vertikal sehingga kabel untuk menyalakan sirkuit dapat terhubung dengan papan Arduino dengan mudah melalui papan busa.

Dan dengan demikian, saya menyelesaikan proyek. Saya membutuhkan beberapa saat ditambah dengan coba-coba tetapi saya berhasil menyelesaikannya.

Kode

  • Pengodean Untuk Arduino
Pengkodean Untuk ArduinoArduino
Kode ini akan mengaktifkan LED untuk bereaksi terhadap suara yang dideteksi oleh modul suara.
#include /** KONFIGURASI DASAR **///Jumlah LED dalam pengaturan#define NUM_LEDS 60 //Pin yang mengontrol LED#define LED_PIN 6//Pin yang kita baca bentuk nilai sensor#define ANALOG_READ 0//Confirmed microphone low value, dan max value#define MIC_LOW 0.0#define MIC_HIGH 200.0/** Makro lainnya * ///Berapa banyak nilai sensor sebelumnya yang mempengaruhi rata-rata operasi?#define AVGLEN 5//Berapa banyak nilai sensor sebelumnya yang menentukan apakah kita berada di puncak/TINGGI (misalnya dalam sebuah lagu)#define LONG_SECTOR 20//Mneumonics#define HIGH 3 #define NORMAL 2//Berapa lama kita menyimpan suara "rata-rata saat ini", sebelum memulai kembali pengukuran#define MSECS 30 * 1000#define CYCLES MSECS / DELAY/*Terkadang pembacaannya salah atau aneh. Berapa bacaan yang diperbolehkan untuk menyimpang dari rata-rata agar tidak dibuang? **/#define DEV_THRESH 0.8//Arduino loop delay#define DELAY 1float fscale( float originalMin, float originalMax, float baruMulai, float baruEnd, float inputValue, float curve);void insert(int val, int *avgs, int len);int compute_average(int *avgs, int len);void visualize_music();//Berapa banyak LED yang akan kami tampilkanint curshow =NUM_LEDS;/*Belum digunakan. Diperkirakan dapat beralih antara mode reaktif suara, dan gradien umum pulsa/warna statis*/mode int =0;//Menampilkan warna yang berbeda berdasarkan mode.int songmode =NORMAL;//Pengukuran suara rata-rata pada CYCLESunsigned long song_avg terakhir; //Jumlah iterasi sejak song_avg direset iter =0;//Kecepatan LED memudar menjadi hitam jika tidak dinyalakan kembali fade_scale =1.2;//Led arrayCRGB leds[NUM_LEDS];/*Suara pendek rata-rata digunakan untuk "menormalkan" nilai input.Kami menggunakan rata-rata pendek daripada menggunakan input sensor secara langsung */int avgs[AVGLEN] ={-1};//Suara lebih panjang avgint long_avg[LONG_SECTOR] ={-1};//Melacak seberapa sering , dan berapa lama kita mencapai modestruct time_keeping { unsigned long times_start; short times;};//Berapa penambahan atau pengurangan setiap warna setiap cyclestruct color { int r; int g; int b;};struct time_keeping tinggi;struct color Color; void setup() { Serial.begin(9600); //Atur semua lampu untuk memastikan semua berfungsi seperti yang diharapkan FastLED.addLeds(leds, NUM_LEDS); for (int i =0; i  (song_avg/iter * 1.1)) { if (high.times !=0) { if (millis() - high.times_start> 200.0) { high.times =0; mode lagu =NORMAL; } else { high.times_start =milis(); waktu tinggi++; } }else { high.times++; high.times_start =milis(); } } if (high.times> 30 &&millis() - high.times_start <50.0) songmode =HIGH; else if (millis() - high.times_start> 200) { high.times =0; mode lagu =NORMAL; }}//Fungsi utama untuk memvisualisasikan suara dalam visualisasi lampvoid visualize_music() { int sensor_value, mapped, avg, longavg; //Nilai sensor aktual sensor_value =analogRead(ANALOG_READ); //Jika 0, segera buang. Mungkin tidak benar dan menghemat CPU. if (nilai_sensor ==0) kembali; //Buang pembacaan yang terlalu menyimpang dari rata-rata sebelumnya. dipetakan =(float)fscale(MIC_LOW, MIC_HIGH, MIC_LOW, (float)MIC_HIGH, (float)sensor_value, 2.0); rata-rata =compute_average(rata-rata, AVGLEN); if (((rata-rata - dipetakan)> rata-rata*DEV_THRESH)) //|| ((rata-rata - dipetakan) <-avg*DEV_THRESH)) kembali; //Sisipkan rata-rata baru. nilai insert(dipetakan, rata-rata, AVGLEN); masukkan(rata-rata, panjang_avg, LONG_SECTOR); //Hitung nilai sensor "rata-rata lagu" song_avg +=avg; iter++; if (iter> CYCLES) { song_avg =song_avg / iter; iter =1; } longavg =compute_average(long_avg, LONG_SECTOR); //Periksa apakah kita memasuki mode TINGGI check_high(longavg); if (mode lagu ==TINGGI) { fade_scale =3; Warna.r =5; Warna.g =3; Warna.b =-1; } else if (mode lagu ==NORMAL) { fade_scale =2; Warna.r =-1; Warna.b =2; Warna.g =1; } //Menentukan berapa banyak LED yang akan menyala curshow =fscale(MIC_LOW, MIC_HIGH, 0.0, (float)NUM_LEDS, (float)avg, -1); /* Mengatur led yang berbeda. Kontrol untuk nilai yang terlalu tinggi dan terlalu rendah. Hal yang menyenangkan untuk dicoba:Jangan memperhitungkan overflow dalam satu arah, beberapa efek cahaya yang menarik muncul! */ for (int i =0; i  255) leds[i]. r =255; else if (leds[i].r + Color.r <0) leds[i].r =0; else leds[i].r =leds[i].r + Color.r; if (leds[i].g + Color.g> 255) leds[i].g =255; else if (leds[i].g + Color.g <0) leds[i].g =0; else leds[i].g =leds[i].g + Color.g; if (leds[i].b + Color.b> 255) leds[i].b =255; else if (leds[i].b + Color.b <0) leds[i].b =0; else leds[i].b =leds[i].b + Color.b; //Semua LED lainnya memulai perjalanan memudarnya ke kegelapan total akhirnya } else { leds[i] =CRGB(leds[i].r/fade_scale, leds[i].g/fade_scale, leds[i].b/fade_scale ); } FastLED.show(); }//Hitung rata-rata larik int, dengan penunjuk awal dan rata-rata komputasi panjang(int *avgs, int len) { int sum =0; for (int i =0; i  10) kurva =10; if (kurva <-10) kurva =-10; kurva =(kurva * -.1); // - inversi dan skala - ini tampaknya lebih intuitif - angka postive memberi bobot lebih pada high end pada kurva keluaran =pow(10, kurva); // mengonversi skala linier menjadi eksponen logratimik untuk fungsi pow lainnya // Memeriksa nilai input di luar rentang if (Nilai masukan  Maksimum asli) { Nilai masukan =Maksimum asli; } // Referensi Nol nilai OriginalRange =originalMax - originalMin; if (newEnd> newBegin){ NewRange =newEnd - newBegin; } else { NewRange =newBegin - newEnd; invFlag =1; } zeroRefCurVal =inputValue - originalMin; normalizedCurVal =zeroRefCurVal / OriginalRange; // normalisasi ke 0 - 1 float // Periksa originalMin> originalMax - matematika untuk semua kasus lain yaitu angka negatif tampaknya bekerja dengan baik jika (originalMin> originalMax ) { return 0; } if (invFlag ==0){ rangedValue =(pow(normalizedCurVal, curve) * NewRange) + newBegin; } else // membalikkan rentang { rangedValue =newBegin - (pow(normalizedCurVal, curve) * NewRange); } mengembalikan rangedValue;}

Skema


Proses manufaktur

  1. Detektor Bahasa TinyML Berbasis Edge Impulse &Arduino
  2. Game Arduino Gyroscope dengan MPU-6050
  3. Arduino Digital Dice
  4. Iron Man
  5. Temukan Saya
  6. Putar audio di Arduino
  7. Kontrol Humidifier Arduino
  8. Sonar menggunakan arduino dan ditampilkan pada pemrosesan IDE
  9. MobBob:Robot Arduino DIY Dikendalikan oleh Smartphone Android
  10. NeoMatrix Arduino Pong