本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于单片机的报警器

发布时间:2021-05-23
分享到:

基于单片机的报警器

发布时间:2021-05-23
分享到:

该项目是关于计算进出公共休息室的人数。这个项目的最大容量是5人。如果“可以安全进入”,它将在液晶显示屏上显示公共休息室的人数和绿色LED灯。如果房间已满,它会在液晶显示屏上显示“请稍候”,并亮起红色LED灯。如果忽略或看不到最大容量,它将通过蜂鸣器报警。当你体温大于等于38时,也会通过蜂鸣器报警。

显示发光二极管,并在技术超过容量时报警:

MLX温度传感器上升达到38°时蜂鸣器报警: 

硬件组件:

  • 试验板
  • 电阻 100Ω 、221Ω
  • 发光二极管(5mm) 红色、绿色
  • PIR传感器 7m
  • 字符显示器 16*2
  • 跳线
  • 旋转电位计 10kΩ
  • 蜂鸣器
  • MLX90614非接触式传感器  3.3 V
  • 单片机

原理图:

代码:

#include <LiquidCrystal.h>
#include <Wire.h>
#include <Adafruit_MLX90614.h>
int in = 15;// 传感器模拟引脚A1信号
int inpr = 16;// 传感器模拟引脚A2信号
int out = 14;//传感器模拟引脚A0信号
int outpr = 17;//传感器模拟引脚A3信号
int ppl = 0;//声明ppl false
int buzzer = 9;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
bool pplin = 0;// 假
bool pplout = 0;// 假
int temp = 0;// 温度起点
const float alert_temp = 38.0;// 报警设定点
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
void setup() {
  Serial.begin(9600);
  Serial.println("B00123587 Project");  /// 串行监视器上的显示
  pinMode(15, INPUT);// 传感器模拟引脚A1信号
  pinMode(14, INPUT);// 传感器模拟引脚A0信号
  pinMode(16, OUTPUT);// 传感器模拟引脚A2信号
  pinMode(17, OUTPUT);// 传感器模拟引脚A3信号
  pinMode(6, OUTPUT);//LED入口

  pinMode(7, OUTPUT);//LED禁止进入
  lcd.begin(16, 2);
  mlx.begin();  
}

void loop() {
  digitalWrite(outpr, HIGH);// 模拟引脚A2传感器电源高
  digitalWrite(inpr, HIGH);// 模拟引脚A3传感器电源高
  pplin = digitalRead(in); //人进

  pplout = digitalRead(out);//人出
  if (pplin == 1){ // pplin true 
    ppl--;//更改值
    delay(500);
  }
  else if (pplout == 1){//pplout true
    ppl++ ;//更改值

    delay(500);
  }
  ppl = constrain(ppl, 0, 50);//传感器范围
  lcd.setCursor(0, 0);//液晶显示器要做什么
  lcd.print("People In:");
  lcd.setCursor(11, 0);//液晶显示器要做什么
  lcd.print(ppl);
  if (ppl >= 5){//入口分界点
     lcd.setCursor(0, 1);//液晶显示器要做什么
     lcd.print("PLEASE   WAIT");
    digitalWrite(6, LOW);//绿灯关
    digitalWrite(7, HIGH);//红色LED亮起
    }
    if (ppl >=6){//pplout true
    tone(buzzer,450);///HZ
     delay(500);
     noTone(buzzer);
     delay(500);
    
    }
    
  if (ppl <= 4){// 进入时小于4 ok
     lcd.setCursor(0, 1);// 液晶显示器要做什么
     lcd.print("Safe to enter");
    digitalWrite(7, LOW);//绿色led亮
    digitalWrite(6, HIGH);// 红色LED熄灭
    noTone(buzzer); ////
     delay(500);
  }
   lcd.setCursor(14,0);// 温度显示部分 
  Serial.print(mlx.readObjectTempC());//读取传感器
  Serial.println("*C");// 以摄氏度为单位打印
  lcd.print(mlx.readObjectTempC());//屏幕打印温度
  Serial.println();
  delay(500);
  temp = (mlx.readObjectTempC());
   if (temp >= alert_temp){/// 蜂鸣器报警,如果大于38度 
   tone(buzzer,450);///HZ
     delay(500);
     noTone(buzzer);
     delay(2000);
   } 
}

 

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论