Kilat dan petir: Arduino Halloween DIY project
|
Untuk perayaan Halloween tahun ini, saya akan melakukan beberapa proyek menyenangkan dengan alat-alat yang sudah saya siapkan. Proyek ini tentang mensimulasikan kilat dan petir dengan badai Arduino (pengendali mikro single-board papan rangkaian elektronik open source), LEDs dan DFplayer Mini MP3 player module (anda bisa melihat dokumentasi). Proyek ini mudah untuk dilakukan dan bekerja dengan sangat baik. Jadi, inilah proyeknya untuk setiap orang yang ingin membuat kaget atau menakuti teman / tamu kalian tahun depan.
Untuk catatan: Ini bukanlah sistem “suara ke cahaya”. Program (secara acak) terlebih dahulu menyalakan LED dan kemudian memainkan file suara setelah jeda yang pendek (secara acak). Saya rasa itu akan lebih nyata daripada menyalakan LEDs sebagai reaksi dari volume suara daripada proyek-proyek yang lainnya. Cahaya bergerak lebih cepat daripada suara. Oleh karena itu, pada waktu badai yang nyata terjadi, kalian biasanya melihat kilatan cahaya lebih dahulu. Suara petir akan tertunda, tergantung pada seberapa lama kilatan cahaya berlangsung.
Proyek Simulasi Kilat: daftar alat-alat yang dipakai
Alat-alat yang dibutuhkan untuk proyek ini:
- Arduino Nano
- DFPlayer Mini MP3 player module
- Micro SD card (8 GB)
- Breadboard dan jumper wires
- MOSFET (1x IRFZ44N)
- Resistor (2x 1K)
- LED strip (5m, 12V, cool white)
- Test leads with alligator clips
- Power supply (12V, 2A)
Tentu saja, kalian dapat menggunakan lampu LED 12v yang lainnya.. File MP3 (lihat di bawah) hanya sekitar 6MB sehingga kartu SD apa pun dapat melakukannya..


Pengkabelan simulator petir Arduino
Kabelnya cukup mudah, lihat gambar di bawah ini:
- Catu daya 12V terhubung ke rel daya papan tempat memotong roti merah di papan tempat memotong roti.
LED mendapatkan 12V dari power rail (kabel merah).
Arduino Nano mendapatkan daya 12V dari power rail ke pin Vin (kabel merah) dan pin GND Nano terhubung ke common rail (kabel biru). - Mini DFPlayer mendapatkan 5V pada pin VCC-nya dari Nano (kabel merah).
Pin RX dari DFPlayer masuk ke pin 10 pada Nano (kabel hitam) melalui resistor 1K.
Pin TX dari DFPlayer masuk ke pin 11 pada Nano (kabel ungu) melalui resistor 1K.
Pin SIBUK dari DFPlayer pergi ke pin 12 pada Nano (kabel putih).
DAC-L (kabel hijau) dan DAC-R (kabel kuning) digunakan untuk amplifier audio stereo.
Pin GND dari DFPlayer masuk ke common ground rail (kabel biru). - Pin MOSFET GATE (kiri) menuju ke Nano pin 9 (kawat oranye).
Pin MOSFET DRAIN (tengah) menuju ke kabel ground LED (kabel hitam).
Pin MOSFET SOURCE (kanan) menuju ke common ground rail (kabel hitam). - Ground amplifier terhubung ke common ground rail.


Pastikan catu daya, Arduino, MOSFET, DFplayer, dan koneksi audio berbagi kesamaan. Pastikan juga 12V terhubung ke pin kanan (Vin) pada Nano.
Pastikan Anda memiliki polarisasi 12V dan ground dari catu daya dan LED yang tepat.
Saya menggunakan beberapa kabel dengan klip buaya untuk dengan mudah menghubungkan LED dan audio ke papan tempat memotong roti.


File suara kilat dan petir
Saya telah mengumpulkan 17 sampel suara petir dan guntur yang berbeda dalam file .zip. Mereka dapat diunduh menggunakan tautan di bawah ini. File-file (0001.mp3 hingga 0017.mp3) harus dimasukkan ke dalam folder bernama ‘mp3’ pada kartu SD. Kartu dapat diformat FAT16 atau FAT32.
Memprogram Arduino
Anda dapat mengunggah sketsa ke Arduino dengan cara biasa, menggunakan kabel USB. Nano mendapatkan kekuatannya dari catu daya 12V, bukan dari USB. Jadi setelah mengunggah, Anda dapat mencabut kabel USB.
Sketsa menggunakan pustaka DFRobotDFPlayerMini, periksa halaman GitHub dan dokumentasi untuk detailnya.
#include "Arduino.h" #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" int ledPin = 9; // LEDs (via MOSFET) connected to pin 9 int rxPin = 10; // DFplayer RX to Arduino pin 10 int txPin = 11; // DFplayer TX toArduinopin 11 int busyPin = 12; // DFplayer BUSY connected to pin 12 SoftwareSerial mySoftwareSerial(rxPin, txPin); DFRobotDFPlayerMini myDFPlayer; void setup() { pinMode(ledPin, OUTPUT); pinMode(busyPin, INPUT); mySoftwareSerial.begin(9600); Serial.begin(115200); Serial.println(F("Initializing DFPlayer...")); if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3. Serial.println(F("Unable to begin. Check connection and SD card, or reset the Arduino.")); while (true); } Serial.println(F("DFPlayer Mini online.")); myDFPlayer.setTimeOut(500); // Set serial communictaion time out 500ms myDFPlayer.volume(30); // Set volume value (0~30). myDFPlayer.EQ(DFPLAYER_EQ_BASS); // Set EQ to BASS (normal/pop/rock/jazz/classic/bass) myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD); // Set device we use SD as default myDFPlayer.enableDAC(); // Enable On-chip DAC } void loop() { int flashCount = random (3, 15); // Min. and max. number of flashes each loop int flashBrightnessMin = 10; // LED flash min. brightness (0-255) int flashBrightnessMax = 255; // LED flash max. brightness (0-255) int flashDurationMin = 1; // Min. duration of each seperate flash int flashDurationMax = 50; // Max. duration of each seperate flash int nextFlashDelayMin = 1; // Min, delay between each flash and the next int nextFlashDelayMax = 150; // Max, delay between each flash and the next int thunderDelay = random (500, 3000); // Min. and max. delay between flashing and playing sound int thunderFile = random (1, 17); // There are 17 soundfiles: 0001.mp3 ... 0017.mp3 int loopDelay = random (5000, 30000); // Min. and max. delay between each loop Serial.println(); Serial.print(F("Flashing, count: ")); Serial.println( flashCount ); for (int flash = 0 ; flash <= flashCount; flash += 1) { // Flashing LED strip in a loop, random count analogWrite(ledPin, random (flashBrightnessMin, flashBrightnessMax)); // Turn LED strip on, random brightness delay(random(flashDurationMin, flashDurationMax)); // Keep it tured on, random duration analogWrite(ledPin, 0); // Turn the LED strip off delay(random(nextFlashDelayMin, nextFlashDelayMax)); // Random delay before next flash } Serial.print(F("Pausing before playing thunder sound, milliseconds: ")); Serial.println(thunderDelay); delay(thunderDelay); Serial.print(F("Playing thunder sound, file number: ")); Serial.println(thunderFile); myDFPlayer.playMp3Folder(thunderFile); delay(1000); // Give the DFPlayer some time while (digitalRead(busyPin) == LOW) { // Wait for the DFPlayer to finish playing the MP3 file } Serial.print(F("Pausing before next loop, milliseconds: ")); Serial.println(loopDelay); delay(loopDelay); }