文章目录
0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 **PIR传感器**4.2 **mlx90614红外传感器**5 部分核心代码6 最后0 前言
🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩基于红外热释电的房间人数计数系统
🥇学长这里给一个题目综合评分(每项满分5分)
难度系数:3分工作量:3分创新点:5分
🧿选题指导, 项目分享:
/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md
1 简介
关于计算进出公共休息室的人数。
2 主要器件
试验板电阻 100Ω 、221Ω发光二极管(5mm) 红色、绿色PIR传感器 7m字符显示器 16*2跳线旋转电位计 10kΩ蜂鸣器MLX90614非接触式传感器 3.3 V单片机3 实现效果
本项目设定的房间最大容量是5人。如果“可以安全进入”,它将在液晶显示屏上显示公共休息室的人数和绿色LED灯。如果房间已满,它会在液晶显示屏上显示“请稍候”,并亮起红色LED灯。如果忽略或看不到最大容量,它将通过蜂鸣器报警。当你体温大于等于38时,也会通过蜂鸣器报警。
MLX温度传感器上升达到38°时蜂鸣器报警:
4 设计原理
4.1PIR传感器
简介
热释电红外运动传感器能检测运动的人或动物身上发出的红外线,输出开关信号,可以应用于各种需要检测运动人体的场合。PIR传感器可以让你感知运动。它们用于检测人是否进入或离开传感器的范围。通常出现在家庭或企业使用的电器和小工具中。它们通常被称为PIR,“被动红外”,“热电”或“IR运动”传感器。
组成
PIR由热电传感器制成,圆形金属罐中央有一个矩形晶体,可以检测红外辐射的水平。所有东西都发射出低水平的辐射,而东西越热发射的辐射就越多。运动检测器中的传感器分成两半。这是为了检测运动(变化)而不是平均IR水平。
触发模式
相关调试代码
#define pirPin 2int calibrationTime = 30;long unsigned int lowIn;long unsigned int pause = 5000;boolean lockLow = true;boolean takeLowTime;int PIRValue = 0;void setup() {Serial.begin(9600);pinMode(pirPin, INPUT);}void loop() {PIRSensor();}void PIRSensor() {if (digitalRead(pirPin) == HIGH) {if (lockLow) {PIRValue = 1;lockLow = false;Serial.println("Motion detected.");delay(50);}takeLowTime = true;}if (digitalRead(pirPin) == LOW) {if (takeLowTime) {lowIn = millis(); takeLowTime = false;}if (!lockLow && millis() - lowIn > pause) {PIRValue = 0;lockLow = true;Serial.println("Motion ended.");delay(50);}}}
4.2mlx90614红外传感器
MLX90614是一款红外非接触温度计。TO-39金属封装里同时集成了红外感应热电堆探测器芯片和信号处理专用集成芯片。由于集成了低噪声放大器、17位模数转换器和强大的数字信 号处理单元,使得高精度和高分辨度的温度计得以实现。温度计具备出厂校准化,有数字 PWM和 SMBus(系统管理 总线)输出模式。作为标准,配置为 10 位的 PWM 输出格式用于连续传送温 度范围为-20…120 ˚C 的物体温度,其分辨率为 0.14 ˚C。 POR 默认模式是 SMBus 输出格式。
实物
硬件电路图如下:
部分调试代码
MLX90614_SDA_Start();//Slave address 单个MLX90614时地址为0x00 地址+wrif(MLX90614_SDA_send(0x00) == 1) //有应答 return 0;//发送命令if(MLX90614_SDA_send(0x07) == 1)return 0;//-----------MLX90614_SDA_Start(); //Srif(MLX90614_SDA_send(0x01) == 1)return 0;//读Tobj1低八位并发送应答value_L = MLX90614_SDA_receive();//读Tobj1高八位并发送应答 value_H = MLX90614_SDA_receive();//读PEC出错数据包并发送应答 PEC = MLX90614_SDA_receive();MLX90614_SDA_Stop();
5 部分核心代码
#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 falseint 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 trueppl++ ;//更改值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 truetone(buzzer,450);///HZdelay(500);noTone(buzzer);delay(500);}if (ppl <= 4){// 进入时小于4 oklcd.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);///HZdelay(500);noTone(buzzer);delay(2000);} }