arduino uno r3 + SIM900 + USB打火機 實現電話觸發點火


 

 

需求來源

1.兒子過完年6歲,喜歡玩煙花,但是膽子小,於是我就負責點火,從年前26到大年初八,每天晚上要給兒子點鞭炮啊點鞭炮。

2.這邊過年要打關門炮跟開門炮,大年初一凌晨還要起來幫老媽點鞭炮,說實在的那個整串的小鞭炮也炸的太快了,每次沒跑幾步就開響,哥也心臟不好啊。

 

設計:

根據需求,我們需要個遠程點火的打火機,上taobao上逛了一圈,找到了usb打火機,續電器,外加一張SIM900 arduino擴展板,回來簡單的一連,就了了了。

 代碼:

#include <SoftwareSerial.h>
#include <String.h>
 
SoftwareSerial GPRS(7, 8);
String currentLine = ""; // string to hold the text from server
String triggerNo="13616761237";
String mobile = "";  
boolean readingNo=false;
long lastTriggerTime=0;
boolean fireing=false;
int led=4;
void setup()
{
  GPRS.begin(19200);               // the GPRS baud rate   
  Serial.begin(19200);    // the GPRS baud rate 
   pinMode(9, OUTPUT); 
  pinMode(led,OUTPUT);
  digitalWrite(led,LOW);
  delay(500);
  powerUpOrDown();
}
void loop()
{
  if(fireing){
    if(  millis() - lastTriggerTime >= 12 * 1000){
     Serial.println("stop fire!"); 
     digitalWrite(led,LOW);
    fireing=false;
    }else{
     return; 
    }
  }
  
  
  while(GPRS.available()){
     char inChar=GPRS.read();
     currentLine +=inChar;
   
     if(inChar=='\n')currentLine="";
     
     if(currentLine.endsWith( "+CLIP: \"")){
       readingNo=true;
       mobile="";
     }
     
     if(readingNo){
       
       if(inChar !=','){
         if(inChar !='"')mobile+=inChar;
       }else{
         readingNo=false;
         Serial.println(mobile);
         if(mobile==triggerNo){
           lastTriggerTime=millis();
           Serial.println("fire!!"); 
           fireing=true;
           
           currentLine="";
           mobile="";
           delay(1000);
           digitalWrite(led,HIGH);
           delay(4000);
           
           GPRS.println("ATH");
           while(GPRS.available()){
             GPRS.read(); 
           }
           
         }
         
       }
     }
  } 
}

void powerUpOrDown()
{
 
  digitalWrite(9,LOW);
  delay(1000);
  digitalWrite(9,HIGH);
  delay(2000);
  digitalWrite(9,LOW);
  delay(3000);
}

 

效果圖(分待機狀態跟觸發狀態):

#include <SoftwareSerial.h>
#include <String.h>
 
SoftwareSerial GPRS(7, 8);
String currentLine = ""; // string to hold the text from server
String triggerNo="13616761237";
String mobile = "";  
boolean readingNo=false;
long lastTriggerTime=0;
boolean fireing=false;
int led=4;
long lastReadTime=0;
void setup()
{
  GPRS.begin(19200);               // the GPRS baud rate   
  Serial.begin(19200);    // the GPRS baud rate 
   pinMode(9, OUTPUT); 
  pinMode(led,OUTPUT);
  digitalWrite(led,LOW);
  delay(500);

}
void loop()
{
  if(fireing){
    if(  millis() - lastTriggerTime >= 12 * 1000){
     Serial.println("stop fire!"); 
     digitalWrite(led,LOW);
    fireing=false;
    }else{
     return; 
    }
  }
  
  
  while(GPRS.available()){
     lastReadTime=millis();
     
     char inChar=GPRS.read();
     currentLine +=inChar;
   
     if(inChar=='\n')currentLine="";
     
     if(currentLine.endsWith( "+CLIP: \"")){
       readingNo=true;
       mobile="";
     }
     
     if(readingNo){
       
       if(inChar !=','){
         if(inChar !='"')mobile+=inChar;
       }else{
         readingNo=false;
         Serial.println(mobile);
         if(mobile==triggerNo){
           lastTriggerTime=millis();
           Serial.println("fire!!"); 
           fireing=true;
           
           currentLine="";
           mobile="";
           delay(1000);
           digitalWrite(led,HIGH);
           delay(4000);
           
           GPRS.println("ATH");
           while(GPRS.available()){
             GPRS.read(); 
           }
           
         }
         
       }
     }
  }
 
  if(millis()- lastReadTime >= 1000 * 30)
  {
    tryPowerUp();
  } 
}
void tryPowerUp(){
  GPRS.println("AT");
  delay(500);
  if(GPRS.available())return;
  
   powerUpOrDown();
}
void powerUpOrDown()
{
 
  digitalWrite(9,LOW);
  delay(1000);
  digitalWrite(9,HIGH);
  delay(1000);
  digitalWrite(9,LOW);
  delay(5000);
}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM