如何在Arduino上使用PIR运动检测器

电子说

1.2w人已加入

描述

概述

在本课程中,您将学习如何在Arduino上使用PIR运动检测器,以及让Arduino与计算机上运行的Python程序进行通信,以便在检测到运动时发送电子邮件thesensor。

Arduino是该项目的核心。它“侦听” PIR传感器,并在检测到运动时通过USB端口指示计算机发送电子邮件。

检测器

零件

要构建本课中描述的项目,您将需要以下零件。

您还需要一台具有Internet连接的计算机(因此您可以通过它发送电子邮件)!

Part 数量

检测器

PIR传感器 1

检测器

Arduino Uno R3

1

检测器

半面包板 1

跳线束

电路板布局

您要连接到Arduino的唯一东西是PIR传感器,因此,如果您愿意,只需将连接到PIR传感器的电线直接推入Arduino,就可以了。但是,来自传感器的电线在Arduino插座中有点松动,因此最好使用下面的面包板布局。

检测器

Arduino代码

只要检测到运动,Arduino就会通过USB串行连接发送一条消息。但是,这可能会产生大量电子邮件。因此,如果Arduino太早就无法发送另一个电子邮件,则它会发送不同的消息。

下载:文件

复制代码

int pirPin = 7;

int minSecsBetweenEmails = 60; // 1 min

long lastSend = -minSecsBetweenEmails * 1000l;

void setup()

{

pinMode(pirPin, INPUT);

Serial.begin(9600);

}

void loop()

{

long now = millis();

if (digitalRead(pirPin) == HIGH)

{

if (now 》 (lastSend + minSecsBetweenEmails * 1000l))

{

Serial.println(“MOVEMENT”);

lastSend = now;

}

else

{

Serial.println(“Too soon”);

}

}

delay(500);

} int pirPin = 7;

int minSecsBetweenEmails = 60; // 1 min

long lastSend = -minSecsBetweenEmails * 1000l;

void setup()

{

pinMode(pirPin, INPUT);

Serial.begin(9600);

}

void loop()

{

long now = millis();

if (digitalRead(pirPin) == HIGH)

{

if (now 》 (lastSend + minSecsBetweenEmails * 1000l))

{

Serial.println(“MOVEMENT”);

lastSend = now;

}

else

{

Serial.println(“Too soon”);

}

}

delay(500);

}

可以将变量“ minSecsBetweenEmails”更改为您认为合理的值。此处设置为60秒,因此不会以超过一分钟的速度发送电子邮件。

为跟踪上次发送电子邮件发送请求的时间,使用了变量“ lastSend” 。初始化为负数,该负数等于“ minSecsBetweenEmails”变量中指定的毫秒数的负数。这确保了可以在Arduino草图启动后立即触发PIR。

在循环中,函数“ millis()”用于获取自Arduino启动以来的毫秒数,并将其与上次触发警报的时间进行比较,并且仅在自上次启动以来超过指定的秒数时才结束消息“ MOVEMENT”。否则,即使已检测到运动,它也只会发送消息“太早了”。

在将内容链接到Python程序之前,只需在Arduino IDE上打开串行监视器即可测试Arduino设置。

检测器

安装Python和PySerial

如果您使用的是Macor Linux计算机,则已经安装了Python。如果您使用的是Windows,则需要安装它。无论哪种情况,您都还需要安装PySerial库以允许与Arduino通信。

在Windows上安装Python

要在Windows上安装Python,请从http://www.python.org/getit/下载安装程序。

此项目是使用Python 2.7.3构建的

在Windows上,使用Python 3的PySerial存在一些已报告的问题,因此请坚持使用Python 2。

检测器

一旦安装了Python,您会在“开始”菜单上找到一个新的程序组。但是,我们将对Windows进行更改,以允许您使用命令提示符中的Python。您将需要此文件才能安装PySerial。

我们将向PATH环境变量中添加一些内容。

检测器

为此,您需要转到Windows“控制”面板并找到“系统属性”控件。然后单击标记为“环境变量”的按钮,然后在弹出的窗口的底部选择“路径”(系统变量)。单击“编辑”,然后在“变量值”末尾而不删除已有的任何文本,添加文本:; C: Python27

Don不要忘记“;”在新位之前!

要测试其是否正常,请启动新的命令提示符(DOS Prompt)并输入命令“ python”。您应该会看到类似这样的内容:

检测器

安装PySerial

无论您使用什么操作系统,请从https://pypi.python.org/pypi/pyserial

下载PySerial 2.6的.tar.gz安装包。这将为您提供一个名为pyserial-2.6.tar.gz

如果使用的是Windows,则需要将其解压缩到文件夹中。不幸的是,这不是正常的zip文件,因此您可能需要下载7-zip(http://www.7-zip.org/)之类的工具。

如果您使用的是Macor Linux计算机,然后在下载pyserial-2.6.tar.gz的任何地方打开终端会话“ cd”,然后发出以下命令来解压缩安装文件夹。

下载:文件

复制代码

$ tar -xzf pyserial-2.6.tar.gz $ tar -xzf pyserial-2.6.tar.gz

无论您使用什么操作系统,其余过程均相同。使用您的ComamndPrompt/Terminal会话并“ cd”进入pyserial-2.6文件夹,然后运行命令:

下载:文件

复制代码

sudo python setup.py install sudo python setup.py install

检测器

Python代码

现在,您需要创建Python程序。为此,请将下面的代码复制到一个名为“ movement.py”的文件中。在Mac/Linux上,您可以使用“ nano”编辑器,在Windows上,使用Python编辑器“ IDLE”来创建文件可能是最简单的,该编辑器可从开始菜单的Python程序组中获得。

下载:文件

复制代码

import time

import serial

import smtplib

TO = ‘[email protected]’

GMAIL_USER = ‘[email protected]’

GMAIL_PASS = ‘putyourpasswordhere’

SUBJECT = ‘Intrusion!!’

TEXT = ‘Your PIR sensor detected movement’

ser = serial.Serial(‘COM4’, 9600)

def send_email():

print(“Sending Email”)

smtpserver = smtplib.SMTP(“smtp.gmail.com”,587)

smtpserver.ehlo()

smtpserver.starttls()

smtpserver.ehlo

smtpserver.login(GMAIL_USER, GMAIL_PASS)

header = ‘To:’ + TO + ‘ ’ + ‘From: ’ + GMAIL_USER

header = header + ‘ ’ + ‘Subject:’ + SUBJECT + ‘ ’

print header

msg = header + ‘ ’ + TEXT + ‘ ’

smtpserver.sendmail(GMAIL_USER, TO, msg)

smtpserver.close()

while True:

message = ser.readline()

print(message)

if message[0] == ‘M’ :

send_email()

time.sleep(0.5)

import time

import serial

import smtplib

TO = ‘[email protected]’

GMAIL_USER = ‘[email protected]’

GMAIL_PASS = ‘putyourpasswordhere’

SUBJECT = ‘Intrusion!!’

TEXT = ‘Your PIR sensor detected movement’

ser = serial.Serial(‘COM4’, 9600)

def send_email():

print(“Sending Email”)

smtpserver = smtplib.SMTP(“smtp.gmail.com”,587)

smtpserver.ehlo()

smtpserver.starttls()

smtpserver.ehlo

smtpserver.login(GMAIL_USER, GMAIL_PASS)

header = ‘To:’ + TO + ‘ ’ + ‘From: ’ + GMAIL_USER

header = header + ‘ ’ + ‘Subject:’ + SUBJECT + ‘ ’

print header

msg = header + ‘ ’ + TEXT + ‘ ’

smtpserver.sendmail(GMAIL_USER, TO, msg)

smtpserver.close()

while True:

message = ser.readline()

print(message)

if message[0] == ‘M’ :

send_email()

time.sleep(0.5)

在运行Python程序之前,需要进行一些配置更改。这些都位于文件顶部附近。

程序假定电子邮件是通过gmail帐户设置的。因此,如果您没有一个,则即使您只为这个项目,也可能要自己做一个。

将“ TO”旁边的电子邮件地址更改为要接收通知的电子邮件。

这不必是您的电子邮件地址。

将“ GMAIL_USER”旁边的电子邮件地址更改为您的gmailaddress电子邮件地址,并将下一行的密码更改为该密码

如果需要,还可以在随后的几行上更改要发送的邮件的主题行和文本。

您还需要设置通过编辑以下行来更改Arduino的串行端口:

下载:文件

复制代码

ser = serial.Serial(‘COM4’, 9600) ser = serial.Serial(‘COM4’, 9600)

对于Windows,这将类似于Mac和Linux上的“ COM4”,而类似于“/dev/tty”。 usbmodem621”。您可以通过打开Arduino IDE并在右下角找到它,它会向您显示连接到Arduino的端口。

检测器

进行这些更改后,可以使用以下命令从命令提示符/终端运行程序:

下载:文件

复制代码

python movement.py python movement.py

触发运动后,您应该会得到这样的跟踪,并且在anemail到达收件箱后不久。

检测器

也请注意“ Toosoon”消息。

其他要做的事情

现在,您可以从Arduino发送电子邮件,这开辟了各种各样的可能性,您可以添加不同类型的传感器,也许每小时发送一次通过电子邮件发送温度报告。

PIR传感器可以直接与Arduino一起使用,以发出警告音或打开LED。

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分