电子说
概述
在本课程中,您将学习如何在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
全部0条评论
快来发表一下你的评论吧 !