锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED...

时间:2022-10-25 09:00:04 7p8pin连接器

主要由系统模块组成Arduino UNO R3开发板 MQ-2烟雾浓度传感器 火焰传感器 舵机 无源蜂鸣器 风扇 步进电机 WIFI模块 RGB三色LED灯 SIM900A所组成,MQ-当烟雾浓度传感器达到不同阈值时,LED灯会通过不同的颜色来进行警示。烟雾浓度增加,LED灯依次显示绿色、蓝色和红色,步进电机驱动风扇旋转不同档位的速度,蜂鸣器会发出警报。烟雾浓度超过最大阈值,或检测到火焰,红灯亮,蜂鸣器响,步进电机以最大速度驱动风扇旋转,SIM900A拨打指定用户。
因为模块有WiFi模块也可以连接WiFi通过APP控制步进电机的速度驱动,也可以手动控制风扇的速度。

一、设备准备

Arduino UNO R3Arduino UNO R3开发板 MQ-2烟雾浓度传感器 舵机 无源蜂鸣器 风扇 步进电机 WIFI模块 RGB三色LED灯 SIM900A所构成。MQ-2烟雾浓度传感器实时检测室内烟雾浓度值。如果超过阈值,风扇会旋转
在这里插入图片描述
WIFI模块

MQ-2烟雾浓度传感器

火焰传感器模块

舵机

无源蜂鸣器

风扇

RGB三色LED灯

步进电机

SIM900A

二、设备连接

烟雾浓度传感器

烟雾浓度传感器 Arduino UNO R3
VCC 5V
GND GND
DO P7
AO A0

火焰传感器

火焰传感器 Arduino UNO R3
DO P2
GND GND
VCC 5V

无源蜂鸣器

无源蜂鸣器 Arduino UNO R3
GND GND
I/O P8
VCC 5V

三色LED灯

三色LED灯 Arduino UNO R3
R P11
G P12
B P13
GND GND

步进电机

步进电机 Arduino UNO R3
IN3 P9
IN4 P4
5V
- GND

风扇

风扇 步进电机
红线 B灯处
黑线 C灯处

WIFI模块(局域模式)

WIFI模块 Arduino UNO R3
RX TX
TX RX
GND GND
5V 5V

SIM900A模块

SIM900A Arduino UNO R3
5VR TX
5VT RX
GND GND
VCC5 5V
GND GND

舵机模块

舵机 Arduino UNO R3
黄线 P6
灰线 GND
红线 5V

三、网络配置

下载代码Arduino UNO R3开发板上
WIFI当打开手机时,需要将模块调整到局域模式wifi可以检测到热点WiFi连接由模块组成的网络。
APP下载路径,打开下载安装的手机APP

然后单击右上角的连接
连接成功后,可点击
(49),加速,减速,蜂鸣器开(50),蜂鸣器关(51) 控制舵机、蜂鸣器和风扇。

四、完整代码

/****************************************************** * connection: * MQ-2 gas sensor Uno R3 * D0 7 * A0 A0 * GND GND * VCC 5V * * * Dual-color LED Arduin Uno R3 * R 11 * G 12 * B 13 * GND GND * * * buzzerPin 8 * GND GND * VCC 5V * * * motorIn1 = 9; * motorIn2 = 10; * *******************************************************/ include  //Arduino IDE自带的舵机库文件
const int Servo_Pin = 6;      //模拟开门
Servo myservo;      //定义舵机对象myservo

const int digitalInPin = 2; //D0 attach to digital 2

const int analogPin=A0; //the DO on the Module attach to Pin7 on the SunFounder 
const int digitalPin=7;  //the D0 attach to pin7
int Astate=0;
boolean  Dstate=0;

int redPin = 11;    // select the pin for the red LED
int greenPin = 12; 
int bluePin = 13; 

int buzzerPin = 8;//the pin of the active buzzer attach to pin8
int comdata;
const int motorIn1 = 9;
const int motorIn2 = 4;
#define rank1 150
#define rank2 200
#define rank3 250

void set_tele(void)
{ 
        
    Serial.begin(115200);                  //波特率为115200
    delay(1000);
    Serial.println("AT\r\n");                  //判断模块是否正常
    delay(1000);
}
void tele(void)
{ 
        
    Serial.println("AT+CPIN?\r\n");         
    delay(1000);
    Serial.println("AT+CSQ\r\n");              
    delay(3000);
    Serial.print("AT+CREG?\r\n");          
    delay(3000);
    Serial.println("AT+CGATT?\r\n");  
    delay(1000);
    Serial.println("ATD15336551683;\r\n");      
    delay(30000);
}


void setup() 
{ 
        
  pinMode(digitalInPin,INPUT);
  
  //set the pins state 
  pinMode (digitalPin,INPUT);

  pinMode(redPin, OUTPUT); //set redPin as OUTPUT
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  
  pinMode(buzzerPin,OUTPUT);//set the buzzer as as OUTPUT
  digitalWrite(buzzerPin,LOW);//initialize the buzzerPin as LOW level

  pinMode(motorIn1,OUTPUT);
  pinMode(motorIn2,OUTPUT);

  pinMode(Servo_Pin, OUTPUT);  //初始化舵机为输出模式
  myservo.attach(Servo_Pin);    //设置舵机控制引脚为6
  myservo.write(0);    //初始化舵机位置0
  set_tele();
  Serial.begin(9600);
} 
void loop()
{ 
          
  boolean stat = digitalRead(digitalInPin);
  Serial.print("D0: "); 
  Serial.println(stat); // print to serial monitor 
  Serial.println(" ");

  
  Astate=analogRead(analogPin);//read the value of A0
  Serial.println(Astate); //peint 

  if( stat == LOW)
  { 
        
    analogWrite(motorIn1,0);
    analogWrite(motorIn2,rank3);
    
    analogWrite(redPin, 255); //red
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 0);
    //digitalWrite(buzzerPin,LOW);

    myservo.write(90); //舵机旋转至90度
    delay(5000);      // 延时3000ms
    myservo.write(0);//舵机旋转至0度
    delay(1000);      // 延时3000ms

    for(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800
      { 
        
        tone(8,i);   //in pin7 generate a tone,it frequence is i
        delay(2);    //wait for 5 milliseconds 
      }
      delay(1000);   //wait for 4 seconds on highest frequence
      for(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200
      { 
        
        tone(8,i);  //in pin7 generate a tone,it frequence is i
        delay(2);  //delay 10ms
      }

      tele();
  }

  
  if((Astate>120 && Astate<150))
  { 
        
    analogWrite(motorIn1,0);
    analogWrite(motorIn2,rank1);
    
    analogWrite(redPin, 0); //red
    analogWrite(greenPin, 255);
    analogWrite(bluePin, 0);
    
    //digitalWrite(buzzerPin,LOW);

    myservo.write(90); //舵机旋转至90度
    delay(5000);      // 延时3000ms
    myservo.write(0);//舵机旋转至0度
    delay(1000);      // 延时3000ms


    for(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800
      { 
        
        tone(8,i);   //in pin7 generate a tone,it frequence is i
        delay(10);    //wait for 5 milliseconds 
      }
      delay(4000);   //wait for 4 seconds on highest frequence
      for(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200
      { 
        
        tone(8,i);  //in pin7 generate a tone,it frequence is i
        delay(10);  //delay 10ms
      }

  }
  else if((Astate>=150 && Astate<200))
  { 
        
    analogWrite(motorIn1,0);
    analogWrite(motorIn2,rank2);
    
    analogWrite(redPin, 0); //red
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 255);
    //digitalWrite(buzzerPin,LOW);

    myservo.write(90); //舵机旋转至90度
    delay(5000);      // 延时3000ms
    myservo.write(0);//舵机旋转至0度
    delay(1000);      // 延时3000ms

    for(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800
      { 
        
        tone(8,i);   //in pin7 generate a tone,it frequence is i
        delay(5);    //wait for 5 milliseconds 
      }
      delay(2000);   //wait for 4 seconds on highest frequence
    for(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200
      { 
        
        tone(8,i);  //in pin7 generate a tone,it frequence is i
        delay(5);  //delay 10ms
      }
    
  }
  else if((Astate>=200))
  { 
        
    analogWrite(motorIn1,0);
    analogWrite(motorIn2,rank3);
    
    analogWrite(redPin, 255); //red
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 0);
    //digitalWrite(buzzerPin,LOW);

    myservo.write(90); //舵机旋转至90度
    delay(5000);      // 延时3000ms
    myservo.write(0);//舵机旋转至0度
    delay(1000);      // 延时3000ms

    for(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800
      { 
        
        tone(8,i);   //in pin7 generate a tone,it frequence is i
        delay(2);    //wait for 5 milliseconds 
      }
      delay(1000);   //wait for 4 seconds on highest frequence
      for(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200
      { 
        
        tone(8,i);  //in pin7 generate a tone,it frequence is i
        delay(2);  //delay 10ms
      }

      tele();
/* Serial.print("AT+CMGD=1"); Serial.print("\r\n"); Serial.print("AT"); Serial.print("\r\n"); Serial.print("AT+CPIN?"); Serial.print("\r\n"); Serial.print("AT+CSQ"); Serial.print("\r\n"); Serial.print("AT+CREG?"); Serial.print("\r\n"); Serial.print("AT+CGATT?"); Serial.print("\r\n"); Serial.print("ATD15336551683;"); Serial.print("\r\n"); */    
  }
  else
  { 
        
    analogWrite(redPin, 0); //red
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 0);
    
    //digitalWrite(buzzerPin,HIGH);
    pinMode(buzzerPin,INPUT);
    pinMode(motorIn1,0);
    pinMode(motorIn2,0);
  }

  
  
  delay(200);//delay 200ms


 while (Serial.available())
    { 
        
      comdata= Serial.read();
      if(comdata==49)
      { 
        
        Serial.print("open the door\n");
        myservo.write(90); //舵机旋转至90度
        delay(1000);      // 延时3000ms
        myservo.write(0);//舵机旋转至0度
        delay(1000);      // 延时3000ms
      }
      if(comdata==50)
      { 
        
        Serial.print("open fmq\n");
        for(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800
      { 
        
        tone(8,i);   //in pin7 generate a tone,it frequence is i
        delay(5);    //wait for 5 milliseconds 
      }
      delay(4000);   //wait for 4 seconds on highest frequence
      for(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200
      { 
        
        tone(8,i);  //in pin7 generate a tone,it frequence is i
        delay(10);  //delay 10ms
      }
        delay(100);
     }
     if(comdata==51)
      { 
        
        Serial.print("close fmq\n");
        pinMode(buzzerPin,INPUT);
        delay(100);
     }
     if(comdata==52)
      { 
        
        Serial.print("111\n");
        analogWrite(motorIn1,0);
        analogWrite(motorIn2,rank1);
        delay(100);
     }
     if(comdata==74)
      { 
        
        Serial.print("222\n");
        analogWrite(motorIn1,0);
        analogWrite(motorIn2,rank2);
        delay(100);
     }
     if(comdata==54)
      { 
        
        Serial.print("333\n");
        analogWrite(motorIn1,0);
        analogWrite(motorIn2,rank3);
        delay(100);
     }
    }
}


五、演示视频

B站演示视频
CSDN演示视频

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章