Arduino Defuseable Bomb, Perfect for Airsoft Games! (with Timer, LCD, Keypad, Sound and More!)

110,990

189

193

Introduction: Arduino Defuseable Bomb, Perfect for Airsoft Games! (with Timer, LCD, Keypad, Sound and More!)

Hello
This is a project I made a long time ago, but decided to upload anyways, feel free to ask me about it!
The bomb has several features:
- Password input by keypad to arm the bomb
- Timer/count down
- Sound
- Flashy LEDs
- Defusing via the password
- LCD display
- Keypad
- Simple to edit and change

So to get started you would need:
- Arduino
- LCD (I used a 16x2 from sparkfun)
- Potentiometer for the contrast on the LCD 
- Keypad (again from sparkfun)
- Jumperwires
- Resistors for the LEDs (I used 330 Ohm)
- Piezo/buzzer
- LEDs

Step 1: Assembly

Connect the components as according to the circuit schematic

Step 2: Upload the Code

Upload the bomb project4 code to your arduino, and add the following libraries: Keypad, Tone, and liquid crystal to your libraries folder in the arduino folder

and now you're ready to use the bomb!

First edit the time in the code, to match your needs, then start the arduino and enter your desired password, then the bomb timer will start, and you can press the * to begin defusing the bomb, if you press a wrong key, pressing # will delete what you've written. If you write a wrong password, or the timer reaches 0, the bomb will "explode"!

Feel free to ask :)

Microcontroller Contest

Participated in the
Microcontroller Contest

13 People Made This Project!

Recommendations

  • Make it Glow Contest

    Make it Glow Contest
  • First Time Author Contest

    First Time Author Contest
  • PCB Challenge

    PCB Challenge

193 Discussions

thank you :D it worked like a charm: https://www.youtube.com/watch?v=5O5KRUmsD6o&feature=youtu.be

0
MaltheF
MaltheF

Reply 5 years ago on Introduction

Glad you found it useful! Your prop looks great!

0
TheGrimDemon
TheGrimDemon

Reply 5 years ago on Introduction

Hey, I am having a issue with the LCD screen. When I turn it on nothing is being displayed on the screen, the keypad, LED's and buzzer work fine, when I enter the code and it start counting I am able to enter password again after the * and it is being defused or explode but the LCD screen itself does not display anything. I am including the picture of how the LCD is displayed

20150930_181052.jpg20150930_181103.jpg
0
MarkM339
MarkM339

Reply 4 years ago

I'm having the same issue

0
toporagno
toporagno

Reply 5 years ago

hi, have you found a solution i have your same problem.....the lcd makes only a long line like in your photos...

0
jrmaniac
jrmaniac

Reply 4 years ago

did you find a solution?

0
TheGrimDemon
TheGrimDemon

Reply 5 years ago on Introduction

I may found the reason for the LCD to not work correctly.....

The schematics of the LCD does not show which order are the pins, if they are VSS, VDD, VO, RS, RW, E, D0, D1, D2, D3, D4, D5, D6 ,D7, A, K, or other way round... I will Re-solder them and we will see if it helps.

0
iain.connolly.359
iain.connolly.359

Reply 5 years ago

Hi
Do you have any detailed photos of your wiring ? I'm having some trouble getting this to work

0
Ricochet2152
Ricochet2152

Question 8 days ago

is it possible to run the program via bluetooth or wireless on your phone? that way you can start the game remotely?

0
roberto.vukomanovic
roberto.vukomanovic

Question 1 year ago

It's a stupid question maybe, but where goes the battery ?

0
Lord60
Lord60

Answer 2 months ago

if you hook to a battery, the VIN to battery positive, GND to battery negative.
Put a toggle switch on either wire for on and off control

0
OutDatedCandy
OutDatedCandy

Reply 2 months ago

/////////////////////////////
// Airsoft Bomb //
// by Malthe Falkenstjerne //
/////////////////////////////
#include <Keypad.h>
#include <LiquidCrystal.h>
#include <Tone.h>
#define pound 14
Tone tone1;
int Scount = 12; // count seconds
int Mcount = 10; // count minutes
int Hcount = 0; // count hours
int DefuseTimer = 0; // set timer to 0
long secMillis = 0; // store last time for second add
long interval = 1000; // interval for seconds
char password[4]; // number of characters in our password
int currentLength = 0; //defines which number we are currently writing
int i = 0;
char entered[4];
int ledPin = 4; //red led
int ledPin2 = 3; //yellow led
int ledPin3 = 2; //green led
LiquidCrystal lcd(7,8,10,11,12,13); // the pins we use on the LCD
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {5, A5, A4, A2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {A1, A0, A3}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(ledPin2, OUTPUT); // sets the digital pin as output
pinMode(ledPin3, OUTPUT); // sets the digital pin as output
tone1.begin(9);
lcd.begin(16, 2);
Serial.begin(9600);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Enter Code: ");
while (currentLength < 4)
{
lcd.setCursor(currentLength + 6, 1);
lcd.cursor();
char key = keypad.getKey();
key == NO_KEY;
if (key != NO_KEY)
{
if ((key != '*')&&(key != '#'))
{
lcd.print(key);
password[currentLength] = key;
currentLength++;
tone1.play(NOTE_C6, 200);
}
}
}
if (currentLength == 4)
{
delay(500);
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print("You've Entered: ");
lcd.setCursor(6,1);
lcd.print(password[0]);
lcd.print(password[1]);
lcd.print(password[2]);
lcd.print(password[3]);
tone1.play(NOTE_E6, 200);
delay(3000);
lcd.clear();
currentLength = 0;
}
}
void loop()
{
timer();
char key2 = keypad.getKey(); // get the key
if (key2 == '*')
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Code: ");
while (currentLength < 4)
{
timer();
char key2 = keypad.getKey();
if (key2 == '#')
{
currentLength = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Code: ");
}
else
if (key2 != NO_KEY)
{
lcd.setCursor(currentLength + 7, 0);
lcd.cursor();
lcd.print(key2);
entered[currentLength] = key2;
currentLength++;
tone1.play(NOTE_C6, 200);
delay(100);
lcd.noCursor();
lcd.setCursor(currentLength + 6, 0);
lcd.print("*");
lcd.setCursor(currentLength + 7, 0);
lcd.cursor();
}
}
if (currentLength == 4)
{
if (entered[0] == password[0] && entered[1] == password[1] && entered[2] == password[2] && entered[3] == password[3])
{
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print("Bomb Defused");
currentLength = 0;
digitalWrite(ledPin3, HIGH);
delay(2500);
lcd.setCursor(0,1);
lcd.print("Reset the Bomb");
delay(1000000);
}
else
{
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print("Wrong Password!");
if (Hcount > 0)
{
Hcount = Hcount - 1;
}
if (Mcount > 0)
{
Mcount = Mcount - 59;
}
if (Scount > 0)
{
Scount = Scount - 59;
}
delay(1500);
currentLength = 0;
}
}
}
}
void timer()
{
Serial.print(Scount);
Serial.println();
if (Hcount <= 0)
{
if ( Mcount < 0 )
{
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print("The Bomb Has ");
lcd.setCursor (0,1);
lcd.print("Exploded!");
while (Mcount < 0)
{
digitalWrite(ledPin, HIGH); // sets the LED on
tone1.play(NOTE_A2, 90);
delay(100);
digitalWrite(ledPin, LOW); // sets the LED off
tone1.play(NOTE_A2, 90);
delay(100);
digitalWrite(ledPin2, HIGH); // sets the LED on
tone1.play(NOTE_A2, 90);
delay(100);
digitalWrite(ledPin2, LOW); // sets the LED off
tone1.play(NOTE_A2, 90);
delay(100);
digitalWrite(ledPin3, HIGH); // sets the LED on
tone1.play(NOTE_A2, 90);
delay(100);
digitalWrite(ledPin3, LOW); // sets the LED off
tone1.play(NOTE_A2, 90);
delay(100);
}
}
}
lcd.setCursor (0,1); // sets cursor to 2nd line
lcd.print ("Timer:");
if (Hcount >= 10)
{
lcd.setCursor (7,1);
lcd.print (Hcount);
}
if (Hcount < 10)
{
lcd.setCursor (7,1);
lcd.write ("0");
lcd.setCursor (8,1);
lcd.print (Hcount);
}
lcd.print (":");
if (Mcount >= 10)
{
lcd.setCursor (10,1);
lcd.print (Mcount);
}
if (Mcount < 10)
{
lcd.setCursor (10,1);
lcd.write ("0");
lcd.setCursor (11,1);
lcd.print (Mcount);
}
lcd.print (":");
if (Scount >= 10)
{
lcd.setCursor (13,1);
lcd.print (Scount);
}
if (Scount < 10)
{
lcd.setCursor (13,1);
lcd.write ("0");
lcd.setCursor (14,1);
lcd.print (Scount);
}
if (Hcount <0)
{
Hcount = 0;
}
if (Mcount <0)
{
Hcount --;
Mcount = 59;
}
if (Scount <1) // if 60 do this operation
{
Mcount --; // add 1 to Mcount
Scount = 59; // reset Scount
}
if (Scount > 0) // do this oper. 59 times
{
unsigned long currentMillis = millis();
if(currentMillis - secMillis > interval)
{
tone1.play(NOTE_G5, 200);
secMillis = currentMillis;
Scount --; // add 1 to Scount
digitalWrite(ledPin2, HIGH); // sets the LED on
delay(10); // waits for a second
digitalWrite(ledPin2, LOW); // sets the LED off
delay(10); // waits for a second
//lcd.clear();
}
}
}

0
Lord60
Lord60

Question 2 months ago on Introduction

I figured it out, code and all. Everything works with I2C LCD ... Thanks

nuke 2.jpg
0
zort1024
zort1024

Question 9 months ago

hi,

I cant make the sound working

thanks

0
MMStar64
MMStar64

Question 1 year ago

Hello! I wanted to ask if i can use any other LCD or does it have to be from sparkfun? Thank you!

1
vandenbrande
vandenbrande

4 years ago

Cool i fixed it with a 4x4 Keypad. I needed to change the code. Below is the code:

Also i added a image of the pin on the keypad.

//replace these lines in the code when u have a 4x4 instead of 3x4 keypad.

//and add a cable to pin 6 which is pin 1 on the keypad.

const byte ROWS = 4; //four rows

const byte COLS = 4; //four columns

char keys[ROWS][COLS] = {

{'1','2','3','A'},

{'4','5','6','B'},

{'7','8','9','C'},

{'*','0','#','D'}

};

byte rowPins[ROWS] = {A0, 5, A1, A2}; //connect to the row pinouts of the keypad

byte colPins[COLS] = {A3, A4, A5, 6}; //connect to the column pinouts of the keypad

//Pins 8, 7, 6, 5 on the keypad should be connected to digital pins A0, 5, A1, A2 on //the Arduino.

//Pins 4, 3, 2, 1 on the keypad should be connected to digital pins A3, A4, A5, 6 on //the Arduino.

4x4.jpg
0
RafyR2
RafyR2

Reply 1 year ago

You, sir, are a life saver. Thank you very much!

0
HectorO40
HectorO40

Reply 3 years ago

can you please upload the full code you use, i also have a 4x4 keypad and im having issues to verify the code, you realy help me