原文地址:https://circuitdigest.com/microcontroller-projects/automatic-door-opener-project-using-arduino
使用Arduino的自动开门器
经过**萨达姆** 2015年7月12日96
您一定在购物中心和其他商业建筑中看到过自动开门器。当有人靠近入口时,他们将门打开,过一段时间后将其关闭。有许多技术可用于制造这类系统,例如PIR传感器,雷达传感器,激光传感器,红外传感器等。在这个基于arduino的项目中,我们尝试通过使用PIR传感器来复制同一系统。
它使用运动检测传感器(PIR传感器)打开或关闭门,以检测人体遗漏的红外能量。当有人来到门前时,传感器检测到的红外能量发生变化,只要有人接近门,它就会触发传感器打开门。信号进一步发送到控制门的arduino uno。
电路元件
- Arduino UNO
- 16x2液晶屏
- 被动红外传感器
- 连接线
- 面包板
- 1 k电阻
- 电源供应
- 马达驱动器
- CD盒(DVD Troly)
被动红外传感器
PIR传感器检测到任何热量变化,每当检测到热量变化时,其输出PIN就会变为高电平。它们也称为热释电或IR运动传感器。
在这里,我们应该注意,每个物体在加热时都会发出一定量的红外光。人体也会因人体热量而发出红外线。 PIR传感器 可以检测到红外线的少量变化。每当物体通过传感器范围时,由于空气和物体之间的摩擦,它都会产生红外线,并被PIR捕获。
PIR传感器的主要组件是 热释电传感器( 如图所示)(塑料盖后面的矩形晶体)。连同BISS0001(“微功率PIR运动检测器IC”),一些电阻器,电容器和其他用于构建PIR传感器的组件。BISS0001 IC接收来自传感器的输入,并进行处理以相应地使输出引脚为HIGH或LOW。
热释电传感器分为两半,当没有运动时,两个半体保持相同状态,这意味着它们都感测到相同的红外水平。一旦有人进入上半部,一半的红外水平就会变得比另一半更大,这将导致PIR做出反应并使输出引脚变高。
热释电传感器被一个塑料盖覆盖,里面有许多菲涅尔透镜阵列。这些透镜是弯曲的,因此传感器可以覆盖很大的范围。
电路图和说明
上图显示了基于arduino的开门器电路的连接。此处,PIR传感器用于感测人体运动,该传感器具有三个端子Vcc,GND和Dout。Dout直接连接到arduino uno的针号14(A0)。16x2 LCD用于显示状态。连接到arduino的13和12的LCD的RS,EN引脚和数据引脚D0-D7连接到arduino数字引脚11、10、9、8。RW直接接地。L293D电机驱动器连接到arduino引脚0和1,用于打开和关闭门。在电路中,我们使用了门电机。
编程说明
此处用于编程的概念非常简单。在程序中,我们仅使用数字输入输出。
DigitalRead用于读取PIR传感器的输出。
此后,如果PIR传感器检测到任何运动,则程序会发送一条命令以打开闸门,停止闸门,关闭闸门和停止闸门。
请参阅以下基于arduino的自动开门器的完整代码。
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
#define PIR_sensor 14
#define m11 0
#define m12 1
void setup()
{
lcd.begin(16, 2);
pinMode(m11, OUTPUT);
pinMode(m12, OUTPUT);
pinMode(PIR_sensor, INPUT);
lcd.print(" Automatic ");
lcd.setCursor(0,1);
lcd.print(" Door Opener ");
delay(3000);
lcd.clear();
lcd.print("CIRCUIT DEGEST ");
delay(2000);
}
void loop()
{
if(digitalRead(PIR_sensor))
{
lcd.setCursor(0,0);
lcd.print("Movement Detected");
lcd.setCursor(0, 1);
lcd.print(" Gate Opened ");
digitalWrite(m11, HIGH); // gate opening
digitalWrite(m12, LOW);
delay(1000);
digitalWrite(m11, LOW); // gate stop for a while
digitalWrite(m12, LOW);
delay(1000);
lcd.clear();
lcd.print(" Gate Closed ");
digitalWrite(m11, LOW); // gate closing
digitalWrite(m12, HIGH);
delay(1000);
digitalWrite(m11, LOW); // gate closed
digitalWrite(m12, LOW);
delay(1000);
}
else
{
lcd.setCursor(0,0);
lcd.print(" No Movement ");
lcd.setCursor(0,1);
lcd.print(" Gate Closed ");
digitalWrite(m11, LOW);
digitalWrite(m12, LOW);
}
}