Projek Arduino Rocket Launcher
Dalam projek ini kita akan menciptakan timer penghitung mundur yang dapat diprogram yang akan kita gunakan untuk meluncurkan roket dengan menyala fuse saat countdown mencapai 0.
Komponen yang diperlukan :
1. Arduino board
2. Breadboard
3. Kabel Jumper
4. Four-digit, seven-segment serial display
5. Piezo buzzer
6. 2 momentary tactile four-pin pushbutton
7. 50k-ohm potentiometer
8. 3 LEDs (red, green, yellow)
9. 3 220-ohm resistors
Diperlukan librari SoftwareSerial
Kami akan menggunakan empat digit, seven segmen tampilan serial yang memiliki sirkuit terintegrasi built-in untuk mengontrol LED dan dapat dihubungkan ke Arduino hanya dengan tiga kabel. Saat memilih tampilan Anda, pastikan memiliki input RX sehingga Anda dapat mengontrolnya hanya dengan satu kabel.
Cara Kerja :
Anda dapat menggunakan pengatur waktu seperti ini untuk menyalakan apa pun yang membutuhkan daya, seperti motor servo, LED, atau alarm. Anda akan menggunakan potensiometer untuk memilih durasi hitungan mundur Anda (mulai dari 5 hingga 60 detik). Layar LED akan menampilkan angka sehingga Anda dapat melihat apa yang Anda atur hitungan mundurnya. Kami akan menyertakan dua tombol: tombol Lengan dan tombol Luncurkan. Setelah Anda memilih durasi hitung mundur, tekan tombol Lengan untuk menyiapkan penghitung waktu. Lampu LED merah menunjukkan bahwa itu bersenjata. (Tombol Lengan adalah fitur keamanan untuk mencegah Anda secara tidak sengaja mematikan peluncur.) Setelah Anda mempersenjatai roket, tekan tombol Luncurkan untuk memulai hitungan mundur. Lampu LED hijau menandakan bahwa itu sudah siap, dan hitungan mundur dimulai.
Saat penghitung waktu mundur, bel piezo berbunyi bip setiap detik. Saat penghitung mencapai lima detik, timer berbunyi semakin cepat hingga diluncurkan. Ketika pengatur waktu mencapai 0, daya dikirim melalui pin 7 ke output apa pun yang Anda miliki di sana-dalam hal ini, lampu LED kuning menyala. Anda dapat menghubungkan pengatur waktu ini ke bel, motor servo untuk membuka kunci pintu, atau bahkan sekering untuk menyalakan roket. Saya akan menunjukkan cara membuat pengapian sederhana sendiri untuk sekering nanti dalam proyek ini.
Cara membuat rangkaian :
1. Hubungkan pin RX display seven segmen ke pin 3 Arduino, sambungkan VCC ke +5V, dan sambungkan GND ke Arduino GND melalui breadbord, seperti yang ditunjukkan pada Gambar. Anda mungkin perlu melepas sebagian kabel untuk membuat sambungan.
2. Masukkan potensiometer ke breadboard dan hubungkan pin kiri ke +5V, pin tengah ke pin Arduino AO, dan pin kanan ke GND, seperti yang ditunjukkan pada Gambar.
#define FuseTIME 1500 // Duration of fuse current in ms
#include <SoftwareSerial.h> // Call the SoftwareSerial library
#define Fuse 7 // Pin connected to fuse (your LED or igniter)
#define GoButt 6 // Pin connected to Launch button
#define ArmButt 5 // Pin connected to Arm button
#define BuzzPin 4 // Pin connected to piezo buzzer
#define TXdata 3 // Pin connected to RX of display
#define RXdata 2 // Not used
#define SetPot 0 // Analog pin connected to potentiometer
SoftwareSerial mySerialPort(RXdata, TXdata);
void setup() {
pinMode(TXdata, OUTPUT);
pinMode(RXdata, INPUT);
pinMode(Fuse, OUTPUT);
pinMode(ArmButt, INPUT); // Set Arm button pin to input
pinMode(GoButt, INPUT); // Set Launch button pin to input
digitalWrite(Fuse, LOW); // Open igniter circuit
digitalWrite(ArmButt, HIGH); // Turn on resistor
digitalWrite(GoButt, HIGH); // Turn on resistor
mySerialPort.begin(9600);
delay(10); // Wait for serial display startup
mySerialPort.print("v"); // Reset the serial display
mySerialPort.print("z"); // Brightness
mySerialPort.write(0x40); // 3/4 intensity
mySerialPort.print("w"); // Decimal point control
mySerialPort.write(0x10); // Turn on colon in serial display
}
int DownCntr; // Countdown (1/10 seconds)
int Go = 0; // Stopped
void loop() {
if (!digitalRead(GoButt) || !digitalRead(ArmButt)) {
Go = 0; // Abort the countdown
tone(BuzzPin, 440, 1500);
delay(1500);
}
if (Go == 0) {
WaitARM();
WaitGO();
}
ShowTimer();
if (DownCntr > 50) {
if (DownCntr % 10 == 0)tone(BuzzPin, 1000, 50); // One beep/sec
}
else if (DownCntr % 2 == 0)tone(BuzzPin, 1000, 50); // Beep faster
if (DownCntr == 0) {
tone(BuzzPin, 440, FuseTIME); // Launch tone
digitalWrite(Fuse, HIGH); // Close the fuse circuit
delay(FuseTIME);
digitalWrite(Fuse, LOW); // Open the fuse circuit
Go = 0;
}
while (millis() % 100); // Wait 50 ms
delay(50);
DownCntr--;
}
void WaitGO() {
ShowTimer();
while (digitalRead(GoButt));
Go = 1;
delay(20);
while (!digitalRead(GoButt)); // Debounce Launch button
}
void ReadTimer() {
DownCntr = map(analogRead(SetPot), 0, 1023, 5, 60);
DownCntr *= 10;
}
void ShowTimer() {
String seconds = String (DownCntr, DEC);
while (seconds.length() < 3)seconds = "0" + seconds; // Format to
// 3 numbers
mySerialPort.print(seconds); // Write to serial display
mySerialPort.print(" "); // Last digit off
}
void WaitARM() {
while (digitalRead(ArmButt) == 1) {
ReadTimer();
delay(50);
ReadTimer();
ShowTimer();
delay(150);
}
Go = 0;
ShowTimer();
tone(BuzzPin, 2000, 150);
delay(200);
tone(BuzzPin, 2000, 150);
delay(200);
tone(BuzzPin, 2000, 150);
delay(20);
while (!digitalRead(ArmButt)); // Debounce Arm button
}







0 Comments