概述
在本課程中,您將學習如何在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
-
檢測器
+關注
關注
1文章
888瀏覽量
48489 -
Arduino
+關注
關注
189文章
6493瀏覽量
190283
發布評論請先 登錄
LPV801 單路、5.5V、8kHz、超低靜態電流 (450nA)、1.6V 最小電源電壓、RRO 運算放大器技術手冊

LPV802 雙路、5.5V、8kHz、超低靜態電流 (320nA)、1.6V 最小電源電壓、RRO 運算放大器技術手冊

開源項目!基于Arduino做的“魷魚游戲”BOSS面具,支持動作檢測
使用MSP430掃描接口和光學傳感器進行旋轉和線性運動檢測

MSP430FR2355上集成智能模擬的PIR運動檢測器應用說明

采用低于1GHz Simplelink?無線MCU的無線運動檢測器

使用TLV320ADCx120和PCMx120-Q1中的語音活動檢測器(VAD)

高效液相色譜儀的檢測器有哪些
電路檢測器和電流檢測器的區別
使用被動式紅外傳感器的運動檢測方案

微功率磁感應檢測)技術的庫門異動檢測器產品優勢
基于PIR傳感器的電路圖 帶Arduino的PIR傳感器設計

評論