Ha pouco tempo coloquei aqui um video da bombinha para Airsoft neste post:
http://www.ptairsoft.org/forum/index.php?topic=33501.0Agora vamos lá partilhar os dados necessário para a construir.
Lista de Componentes:
1x Atmega168
1x LCD 16*2
1x Cristal 16Mhz
2x Resistencia 10k
2x Condensadores 22pF
1x Condensador de 100nF
1x Buzzer
1x Potenciómetro (para o contraste do display)
2x Botões de pressão
Podem encontrar todos os componentes em:
http://www.digikey.ptEsquema das Ligações
free image hostingsó falta montar e programar o Atmel com o seguinte código:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPin = 8 ; // Pin onde está ligado o botão
int time = 300; // Tempo de detonação
int active = 0;
int buttonstate = 0;
// Melodia a ser tocada
int melody[] = {
262, 196,196, 220, 196,0, 247, 262};
int noteDurations[] = {
4, 8, 8, 4,4,4,4,4 };
void setup() {
pinMode(buttonPin, INPUT);
pinMode(13, OUTPUT);
// Linhas e Colunas do LCD:
lcd.begin(16, 2);
// Mensagem Primaria no LCD.
lcd.print("Power On.....");
}
void loop() {
buttonstate = digitalRead(buttonPin);
if (buttonstate == HIGH) {
switch (active)
{
case 0:
active = 1;
break;
case 1:
active = 0;
break;
default:
active = 0;
}
}
inicio:
delay(500);
switch (active)
{
case 0:
{
digitalWrite(13, LOW);
lcd.setCursor(0, 0);
lcd.print("StandBy....................."); // mensagem a ser mostrada quando a bomba está desactiva
lcd.setCursor(0, 7);
lcd.print(" JP Bombs");
time =300; // reset ao tempo da detonação
}
break;
case 1:
if (time > 0)
{
digitalWrite(13, HIGH); // Liga os Leds
lcd.setCursor(0, 0);
lcd.print("72 Virgens em"); // mensagem a ser mostrada quando a bomba está activa
lcd.setCursor(3, 7);
lcd.print(" ");
lcd.setCursor(3, 7);
lcd.print(time); // contagem decrescente
lcd.setCursor(7, 7);
lcd.print("Segundos ");
time = time - 1;
if (time > 30)
{
tone(6, 440, 200);
delay(200);
noTone(6);
buttonstate = digitalRead(buttonPin);
delay(800);
}
else
{
tone(6, 440, 200);
delay(100);
noTone(6);
buttonstate = digitalRead(buttonPin);
delay(100);
tone(6, 440, 200);
delay(100);
noTone(6);
buttonstate = digitalRead(buttonPin);
delay(100);
tone(6, 440, 200);
delay(100);
noTone(6);
buttonstate = digitalRead(buttonPin);
delay(100);
tone(6, 440, 200);
delay(100);
noTone(6);
buttonstate = digitalRead(buttonPin);
delay(100);
}
if (buttonstate == HIGH) {
active =0;
goto inicio;
}
}
else
{
// Mensagem exibida na detonação
lcd.setCursor(0, 0);
lcd.print("BOOOOOOOOMMMMMM");
lcd.setCursor(0, 7);
lcd.print("Beijinhos a Ala!");
// Aviso sonoro da detonação
for (int thisNote = 0; thisNote < 8; thisNote++) {
int noteDuration = 1000/noteDurations[thisNote];
tone(6, melody[thisNote],noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(6);
buttonstate = digitalRead(buttonPin);
if (buttonstate == HIGH) {
active =0;
goto inicio;
}
}
break;
}
}
}
Estejam á vontade para alterar o código ao vosso gosto, e se não for pedir muito dêem crédito ao programador

um abraço