quinta-feira, 18 de abril de 2013

6º Projeto: Bomba de airsoft

    Nesse sexto projeto venho apresentar um caro amigo de faculdade e estudos de Arduino, Alberto Pena. Ele desenvolveu uma bomba para o uso de airsoft e pediu minha humilde ajuda para encontrar e retirar alguns "bugs" de seu sketch. Ao encontro-la para estudar seu projeto achei  muito interessante e propus á ele q cedesse seu código mais seu esquema para eu postar no meu blog. Bom, como podemos ver, ele aceitou!!
    Então vamos logo ao projeto:


Material:

    - Arduino
    - Protoboard
    - Fios Jumpers
    - Display cristal liquido
    - 2 Resistores 220ohms (pushbuttons)
    - 2 Resistor 1Kohm (Buzzer e LCD)
    - Led Resistor 220Ohms (Led)
    - 1 potenciômetro
    - 2 pushbottons
    - 1 buzzer
    - Fonte externa de alimentação do arduino(pilhas, baterias,...)

Esquema:







Código:



 /*Projeto de Arduino desenvolvido por Alberto Pena e Ajudado por Felipe Amaral.  
 O uso desse projeto é para uma bomba de airsoft.  
                visite-nos: www.arduinoprog.blogspot.com    */  
 #include <LiquidCrystal.h> //inclusao da biblioteca do Cristal Liquido  
 #define luz 7 //define o pino 7 como luz de fundo  
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //pinos do cristal liquido conectado ao arduino  
 const int buttonPin = 10; //pino do botao 1   
 const int buttonPin1 = 8; //pino do botao 2   
  int buttonPushCounter = 0; //contador do pushbotton    
  int buttonState7 = 0; //variavel de estado do 1º botao      
  int buttonState8 = 0; //vairiavel de estado do 2º botao     
  int lastButtonState = 0; //variavel do último estado do botao    
  int redled = 9; //pino do led  
  int buzzer = 13; // pino do buzzer  
 void setup() {   
  pinMode(luz, OUTPUT); //luz como saida  
  pinMode(buttonPin, INPUT); //botao como entrada    
  pinMode(buttonPin1, INPUT);    
  pinMode(redled, OUTPUT); //led como saida    
  pinMode(buzzer,OUTPUT); //buzzer como saida  
  digitalWrite(luz, HIGH); //luz de fundo ligado  
   lcd.begin(16,2); //display de 16X2  
   lcd.setCursor(0,0); /*local de escrita  
             da palavra tempo*/  
   lcd.print("Tempo:");   
  }  
 void loop() {   
   buttonState7 = digitalRead(buttonPin); //verificando o estado o 1º botao  
   if (buttonState7 != lastButtonState) { //se o estado for diferente o botao e setado  
    if (buttonState7 == HIGH)    
    {  
    buttonPushCounter+=10; //Ao setar o botao é incrementado 10segundo ao contador  
    delay(100); //o uso desse delay é para um controle de incremento   
    lcd.setCursor(7,1); //coordenadas onde aparecerá o contador  
    lcd.print(buttonPushCounter); //escrita do valor ao ser precionado o botão  
    }     
    delay(100);   
   }    
     buttonState8 = digitalRead(buttonPin1); //verificando o estado o 2º botao  
    if(buttonState8 == HIGH){ //se o estado for diferente o botao e setado       
     while(buttonPushCounter != 0){  
     buttonPushCounter = buttonPushCounter - 1; //contagem regressiva  
     digitalWrite(redled, HIGH); //brilho do led  
     delay(500);  
     digitalWrite(redled, LOW);  
     delay(500);  
     lcd.setCursor(0,0); //coordenadas da escrita detonação em:  
     lcd.print("Detonacao em:");  
     lcd.setCursor(7,1); //coordenadas da escrita da contagem regressiva  
     lcd.print(buttonPushCounter);  
     if (buttonPushCounter <= 10) /* retirada do espaços em branco*/   
     {           
        lcd.setCursor(8,1);       
        lcd.print(" ");  
      }   
      if (buttonPushCounter <= 100)  
      {  
        lcd.setCursor(9,1);  
        lcd.print(" ");  
      }   
      if (buttonPushCounter <= 1000)  
      {  
        lcd.setCursor(10,1);       
        lcd.print(" ");  
      }   
     if (buttonPushCounter <= 10000)  
      {  
        lcd.setCursor(11,1);       
        lcd.print(" ");  
      }    
    }   
      if(buttonPushCounter == 0){ //se o a contagem chegar a zero a escrita Terroristas Vencerão ira aparacer  
       lcd.setCursor(0,0);  
       lcd.print(" ");  
       lcd.setCursor(1,0);  
       lcd.print(" ");  
       lcd.setCursor(0,1);  
       lcd.print(" ");  
       lcd.setCursor(2,0);       
      lcd.print("Terroristas ");      
      lcd.setCursor(3,1);  
      lcd.print("Vencerao");  
      delay(1000);  
      for(int buttonPushCounter = 0;buttonPushCounter < 10 ; buttonPushCounter++){ //laço para apito do buzzer e efeito no display  
       lcd.noDisplay();  
      delay(250);  
      lcd.display();  
      delay(250);  
       tone(buzzer,1500);  
      delay(500);  
     noTone(buzzer);  
     delay(500);  
      }       
     }  
    }  
   }  


Vídeo:





12 comentários:

  1. Boa tarde, segui todo o esquema do seu projeto...
    Mas não aparece a msg no lcd... pode me ajudar?
    Obrigado

    ResponderExcluir
    Respostas
    1. nenhuma hr aparece msgn? qual display q vc ta usando? vc verificou o datasheet dele?

      Excluir
  2. quanto gusta uma maleta de bomba de airsoft eu e-mail wellington.ceste@hotmail.com

    ResponderExcluir
  3. Fala wellignton,
    Entao entre em contato por favor com esse email que vamos conversar melhor.


    albertopesoli@gmail.com


    vlws

    ResponderExcluir
  4. Quero tirar uma dúvida. Na lista vc utiliza 3 resistores de 3k, porem no desenho, vc utiliza 5 resistores, sendo um deles de valor diferente dos outros 4. Poderia explicar melhor?

    ResponderExcluir
    Respostas
    1. Fala Thiago, blz? Então, vamos lá! Os resistores do pushbotton e apenas para fazer o pull-down. O resistor do led e para protege-lo. O resistor o buzzer tbm. Ja o do lcd e para controle do contraste dos caracteres juntamente com o poteciometro.

      Vc pode usar respectivamente os seguintes valores:
      - PushButton -> 220ohms (x2)
      - Buzzer -> 1Kohm
      - Led -> 220ohms
      - LCD -> 1Kohms

      Realmente vou editar aq o post e arrumar isso. Vlws

      Excluir
  5. Este comentário foi removido pelo autor.

    ResponderExcluir
  6. Este comentário foi removido pelo autor.

    ResponderExcluir
  7. Grande Felipe, desde já quero agradecer pela explicação e pela paciência.
    Eu gostaria de tirar mais umas dúvidas:
    - Poderia usar um resistor de 330 no lugar dos de 220?
    - O Segundo pino que sai do lcd (azul da esquerda para direita), não da para ver o lugar certo que ele está entrando na protoboard. É no positivo, no negativo? Ele parece estar entrando no meio da proto mas não vejo nenhuma outra ligação lá.
    - o pino 7 está definido para a luz do LCD no codigo, porem no esquema o 7 vai ligado no segundo botão. Está correto isso?

    ResponderExcluir
    Respostas
    1. Fala Thiago, desculpa a demora em responder!!! Vamos lá:
      -Poderia usar um resistor de 330 no lugar dos de 220? Sim, voce pode usar um de 330ohms

      - O Segundo pino que sai do lcd (azul da esquerda para direita), não da para ver o lugar certo que ele está entrando na protoboard. É no positivo, no negativo? Ele parece estar entrando no meio da proto mas não vejo nenhuma outra ligação lá. - Resposta: ele e no positivo.
      - o pino 7 está definido para a luz do LCD no codigo, porem no esquema o 7 vai ligado no segundo botão. Está correto isso? - Resposta: Otimo olhar clinico o seu! Realmente esta errado e ao repara na programação podemos perceber que declaramos o uso do pino 10 mas nao tem nenhum fio ligado nele. Então substitua o pino 7 pelo 10 no botao.

      Excluir
  8. Felipe pode me explicar como programo o arduino com esse codigo?
    Eu nunca programei nenhum equipamento mas gostava de aprender a programar o arduino para poder fazer uma bomba de airsoft para a minha equipa

    ResponderExcluir
  9. Felipe pode me explicar como programo o arduino com esse codigo?
    Eu nunca programei nenhum equipamento mas gostava de aprender a programar o arduino para poder fazer uma bomba de airsoft para a minha equipa

    ResponderExcluir