第1步:材料
我從墨西哥的sparkfun發行訂購我的資料,因為這是我的住所,但是如果您在美國居住,您幾乎無法從Sparkfun訂購所有材料。
http://www.sparkfun.com/products/8630
9.95 d olar
http://www.sparkfun.com/products/10533
4.95 dolar
1 rf發射器315mhz
http://www.sparkfun.com/products/10535
3.95 dolar
1 attiny85
http://www.sparkfun.com/products/9378
2.84 dolar
1 arduino uno
1開關
4電阻180ohm
1電阻10k歐姆
常開按鈕(可選)
1 8歐姆揚聲器(可選)
1 ic 8引腳基座
1pnp晶體管(您可以使用2n2222,只需檢查一下集電極和發射極引腳在正確的位置)
1 lm7805(5V穩壓器)
3個電解電容器10uf 50v
步驟2:硬件
正如您在圖像中看到的那樣,電路中的所有電路都可在5V電壓下工作,而pir傳感器可在9至12V電壓下工作。要解決此問題并節省將電路連接到2種不同電壓的工作和花費的時間,我使用lm7805(即5V穩壓器),并將所有電路都連接到9V(方形)電池。
如果要制作一個pcb以更干凈的方式包含所有連接,我將在下面放置一個pdf文件,以便您可以打印它并使用所需的方法進行傳輸。
2連接不適合設計,因此請用電線放置它們。 (第二個連接中的兩個連接是黃色的)。對于接收器,我也打算使用attiny85設備,但是時間很短,所以我最終用揚聲器制作了arduino屏蔽。 (如果有人要購買attiny85接收器的PCB,我已經處于半生產階段,稍后我將上載。感謝您的理解。)
如果打印arduino接收器護罩,請務必小心,底部銅質端在頂部向上,引腳也放置在底部,并通過PCB上的孔進行焊接,但是所有其他組件都是從上部直接將引腳彎曲的焊料。您可以在5到8張圖像中擁有更好的外觀。
步驟3:軟件
attiny85可以將arduino uno用作isp程序員。您可以查看此鏈接(http://hlt.media.mit.edu/?p=1706),以獲取有關此過程的更多信息,但您無需這樣做,因為我將詳細解釋所有內容。
我使用attiny是因為它比使用arduino便宜。您可以以2.84USD的價格購買attiny85,相比之下,arduino的價格約為38美元。使用attiny通過rf鏈接進行通信代表了一個挑戰,因為attiny默認情況下沒有rx或tx串行通信。我要感謝這個博客(http://mchr3k-arduino.blogspot.mx/)制作的程序,可以與attiny進行通訊。
好。因此,請逐步進行編程。
1。轉到arduino官方網站并下載arduino-0022軟件。 (不要使用arduino 1.0,它不起作用)。解壓縮文件。您應該看到一個文件夾名稱arduino-0022。
2。轉到此鏈接。
http://mchr3k-arduino.blogspot.mx/2012/01/wireless-sensor-node-part-2.html?showComment=1338749638806#c853067277980266192
下載 attiny45_85 .zip 和 manchester.zip 文件。結果3。解壓縮attiny45_85.zip文件。復制文件夾。
打開arduino-0022文件夾。打開硬件,然后將attiny45_85文件夾粘貼到其中。
4.解壓縮manchester.zip文件。打開那個曼徹斯特文件夾,您應該看到另外兩個文件夾。核心和MANCHESTER。
復制DE MANCHESTER文件夾。
再次打開arduino-0022文件夾。但這次打開庫文件夾。將MANCHESTER文件夾粘貼到此處。
現在,您可以進行編程了。
5。啟動arduino-0022程序。單擊彈出箭頭(打開),然后打開ArduinoISP示例。單擊工具》面板》 arduino uno。 (現在您已經擁有了所有的權限)。
上載程序。
6。將attiny85放置在原型板(面包板)中,并將所有圖像都連接到arduino。請確保以正確的方式放置Attin,否則將要燒掉它。 (發生在我身上:P)。
7。在arduino程序上,轉到“工具”》“板”》“ attiny85”(使用Arduino作為ISP)。再次單擊工具》刻錄引導程序》帶Arduino的ISP。 (您可能會看到一個錯誤,但是沒關系)。
好,讓我們為發送器編寫程序。
第4步:發送器
這是發送器的程序。如果您現在按順序進行最后一步,則只需將代碼放在arduino程序中并上傳它即可。
#include//包括用于通信的庫
#define TxPin 2//使用的引腳發送數據
unsigned int Tdata = 0;//從0
int TRANSISTOR_PIN = 1開始數據;//將晶體管導通和截止的引腳
int PIR_SENSOR_PIN = 0;//運動傳感器引腳
void setup()
{
MANCHESTER.SetTxPin(TxPin);//設置通信的引腳
pinMode(TRANSISTOR_PIN,OUTPUT);
pinMode(PIR_SENSOR_PIN,INPUT);
}
無效循環()
{
int pirVal = digitalRead(PIR_SENSOR_PIN);//讀取運動傳感器的狀態
if(pirVal == LOW)//如果運動傳感器檢測到運動,則
{/*動作,在這種情況下,將晶體管導通以給發射器供電,然后發送消息,關閉晶體管*/
digitalWrite(TRANSISTOR_PIN,HIGH);//打開晶體管
delay(1000);
Tdata = 50;//我使用50作為sensor1警報編號,但是您可以使用所需的編號
//請確保在發送方和接收方中使用相同的編號
MANCHESTER.Transmit(Tdata);//發送信號
delay(100);
digitalWrite(TRANSISTOR_PIN,LOW);//關閉晶體管以節省電池
}
delay(2000);
}
第5步:接收器
《對于接收器,您只需要對arduino進行編程。因此,轉到“工具”》“主板”,然后選擇“ arduino uno”。
復制此代碼。并上傳。
#include//包含通信庫
#define RxPin 6//定義接收器引腳
#define揚聲器9
#define sensor1alarm 12
#define sensor2alarm 11
#define sensor3alarm 10 void setup()
{ MANCHESTER.SetRxPin(RxPin);//用戶將rx引腳設置為默認值6
MANCHESTER.SetTimeOut(1000);//用戶設置超時默認塊
Serial.begin(9600);//僅調試
//在arduino中設置引腳
pinMode(sensor1alarm,OUTPUT);
digitalWrite(sensor1alarm,LOW);
pinMode(sensor2alarm,OUTPUT);
digitalWrite(sensor2alarm) ,LOW);
pinMode(sensor3alarm,OUTPUT);
digitalWrite(sensor3alarm,LOW);
pinMode(speaker,OUTPUT);
digitalWrite(speaker,LOW);
}//設置結束
void loop()
{
unsigned int data = MANCHESTER.Receive();
if(data == 50)//將此數字與傳感器編號匹配
{
digitalWrite(sensor1alarm,HIGH);//打開sensor1alarm led
for(int i = 0; i 《500; i ++){//產生1KHz音頻持續1/2秒
digitalWrite(speaker,HIGH);
delayMicroseconds( 500);
digitalWrite(speaker,LOW);
delayMicroseconds(500);
}//揚聲器的結尾
digitalWrite(sensor1alarm,LOW);//關閉sensor1警報led
delay(500);
}//如果結束
//如果有另一個變送器,請粘貼到此處
}//循環結束
/*如果您有多個發送器,則只需給發送器提供一個不同的編號,然后將其從if(data == 50)復制到if的末尾,然后將其粘貼到指示中。并將數字50更改為另一個發射機中的數字。*/
步驟6:結論
您可以在每種情況下放置傳感器。我把我的飲料放在汽水罐中,因為我認為沒有人會檢查汽水罐是否有問題。而且您可以放置在任何地方,而且看起來并不奇怪。因此,享受成為秘密間諜的樂趣,或在夜間保護您的房子不受陌生人的侵害。使用無止境,您只需要稍微發揮自己的創造力即可。
p.d. (您可以更改運動傳感器,而對于其他許多傳感器,只要在設計上稍作改動,就可以以低廉的價格獲得溫度傳感器,聲音傳感器,超聲波傳感器,氣體傳感器,紅外線傳感器以及許多其他傳感器可以從安全距離感知事物)。
我希望您喜歡這個可指導的方法:),抱歉,如果我的英語不是最好的話。
步驟7:如何在一個接收器上使用3個發射器
這是使用一個接收器使用3個運動傳感器的代碼:
//將其用于接收器
//************* ************************************************** ************************************
#include//包括通訊庫
#define RxPin 6//定義接收器引腳
#define揚聲器9
#define sensor1alarm 12
#define sensor2alarm 11
#define sensor3alarm 10 void setup()
{
MANCHESTER。 SetRxPin(RxPin);//用戶將rx引腳設置為默認值6
MANCHESTER.SetTimeOut(1000);//用戶設置超時默認塊
Serial.begin(9600);//僅調試
//在arduino中設置引腳
pinMode(sensor1alarm,OUTPUT);
digitalWrite(sensor1alarm,LOW);
pinMode(sensor2alarm,OUTPUT);
digitalWrite(sensor2alarm) ,LOW);
pinMode(sensor3alarm,OUTPUT);
digitalWrite(sensor3alarm,LOW);
pinMode(speaker,OUTPUT);
digitalWrite(speaker,LOW);
}//設置結束
void loop()
{
unsigned int data = MANCHESTER.Receive();
if(data == 50)//將此數字與傳感器編號匹配
{
digitalWrite(sensor1alarm,HIGH);//打開sensor1alarm led
for(int i = 0; i 《500; i ++){//產生1KHz音頻持續1/2秒
digitalWrite(speaker,HIGH);
delayMicroseconds( 500);
digitalWrite(speaker,LOW);
delayMicroseconds(500);
}//揚聲器的結尾
digitalWrite(sensor1alarm,LOW);//關閉sensor1alarm led
delay(500);
}//if if
else if(data == 100)的結尾//將此編號與傳感器編號
{
digitalWrite(sensor2alarm,HIGH);//打開sensor1alarm led
for(int i = 0; i 《500; i ++){//產生1KHz音頻持續1/2秒
digitalWrite(speaker,HIGH);
delayMicroseconds( 500);
digitalWrite(speaker,LOW);
delayMicroseconds(500);
}//揚聲器的結尾
digitalWrite(sensor2alarm,LOW);//關閉sensor1alarm led
delay(500);
}
否則if(data == 150)//將此編號與傳感器編號匹配
{
digitalWrite(sensor3alarm,高);//打開sensor1alarm led
for(int i = 0; i 《500; i ++){//產生1KHz音頻持續1/2秒
digitalWrite(speaker,HIGH);
delayMicroseconds( 500);
digitalWrite(speaker,LOW);
delayMicroseconds(500);
}//揚聲器的結尾
digitalWrite(sensor3alarm,LOW);//關閉sensor1警報指示燈
delay(500);
}
}//循環結束
//***************** ************************************************** **************************************
//將此用于發射器之一
//發射器1 。
#include//包括用于通信的庫
#define TxPin 2//用于發送數據的引腳
unsigned int Tdata = 0;//從0
int TRANSISTOR_PIN = 1開始數據;//將晶體管導通和截止的引腳
int PIR_SENSOR_PIN = 0;//運動傳感器引腳
void setup()
{
MANCHESTER.SetTxPin(TxPin);//設置通信的引腳
pinMode(TRANSISTOR_PIN,OUTPUT);
pinMode(PIR_SENSOR_PIN,INPUT);
}
void loop()
{
int pirVal = digitalRead( PIR_SENSOR_PIN);//讀取運動傳感器的狀態
if(pirVal == LOW)//如果運動傳感器檢測到運動,則
{/*動作,在這種情況下,將晶體管導通以給發射器供電,然后發送消息,請關閉晶體管*/
digitalWrite(TRANSISTOR_PIN,HIGH);//將晶體管ON
delay(1000);
Tdata = 50;
MANCHESTER.Transmit( TDATA);//發送信號
delay(100);
digitalWrite(TRANSISTOR_PIN,LOW);//關閉晶體管以節省電池
}
delay(2000);
}
//********* ********************************************結果//使用
//發送器2。
#include//包含用于通信的庫
#define TxPin 2//用于發送數據的引腳
unsigned int Tdata = 0;//從0
int TRANSISTOR_PIN = 1開始數據;//將晶體管導通和截止的引腳
int PIR_SENSOR_PIN = 0;//運動傳感器引腳
void setup()
{
MANCHESTER.SetTxPin(TxPin);//設置通信的引腳
pinMode(TRANSISTOR_PIN,OUTPUT);
pinMode(PIR_SENSOR_PIN,INPUT);
}
void loop()
{
int pirVal = digitalRead( PIR_SENSOR_PIN);//讀取運動傳感器的狀態
if(pirVal == LOW)//如果運動傳感器檢測到運動,則
{/*動作,在這種情況下,將晶體管導通以給發射器供電,然后發送消息,請關閉晶體管*/
digitalWrite(TRANSISTOR_PIN,HIGH);//將晶體管ON
delay(1000);
Tdata = 100;
MANCHESTER.Transmit( TDATA);//發送信號
delay(100);
digitalWrite(TRANSISTOR_PIN,LOW);//關閉晶體管以節省電池
}
delay(2000);
}
//********* ***********************************************
//使用此用于發送器3
//發送器3。
//接收器2。#include//包括用于通信的庫
#define TxPin 2//用于發送數據的引腳
unsigned int Tdata = 0;//從0
int TRANSISTOR_PIN = 1開始數據;//將晶體管導通和截止的引腳
int PIR_SENSOR_PIN = 0;//運動傳感器引腳
void setup()
{
MANCHESTER.SetTxPin(TxPin);//設置通信的引腳
pinMode(TRANSISTOR_PIN,OUTPUT);
pinMode(PIR_SENSOR_PIN,INPUT);
}
void loop()
{
int pirVal = digitalRead( PIR_SENSOR_PIN);//讀取運動傳感器的狀態
if(pirVal == LOW)//如果運動傳感器檢測到運動,則
{/*動作,在這種情況下,將晶體管導通以給發射器供電,然后發送消息,請關閉晶體管*/
digitalWrite(TRANSISTOR_PIN,HIGH);//將晶體管ON
delay(1000);
Tdata = 150;
MANCHESTER.Transmit( TDATA);//發送信號
delay(100);
digitalWrite(TRANSISTOR_PIN,LOW);//關閉晶體管以節省電池
}
delay(2000);
}
第8步:接收器2.0
有些人問我是否可以上傳接收器pcb,用于使接收器具有attiny85像發送器一樣,以避免使用arduino uno。所以在這里,它們是使接收器便宜的文件。我希望您喜歡它們。
我將3個led燈保留為arduino版本,但不要放置揚聲器,而是放置繼電器,以便您可以激活任何喜歡的設備。例如,您的房屋照明燈,警報器或您喜歡的任何設備。
警告:確保您使用的繼電器用于要用于電路的電壓。如果您使用的是12V繼電器,請確保在BAT1位置使用12v繼電器。
代碼如下:
/********************** ************************************************** ***********/
#include//包括通訊庫
#define RxPin 0//定義接收器引腳
#define繼電器4
#define sensor1alarm 1
#define sensor2alarm 2
#define sensor3alarm 3
void setup()
{ MANCHESTER.SetRxPin(RxPin);//用戶將rx引腳設置為默認值6
MANCHESTER.SetTimeOut(1000);//用戶設置超時默認塊
Serial.begin(9600);//僅調試
//在arduino中設置引腳
pinMode(sensor1alarm,OUTPUT);
digitalWrite(sensor1alarm,LOW);
pinMode(sensor2alarm,OUTPUT);
digitalWrite(sensor2alarm) ,LOW);
pinMode(sensor3alarm,OUTPUT);
digitalWrite(sensor3alarm,LOW);
pinMode(relay,OUTPUT);
digitalWrite(relay,LOW);
}//設置結束
void loop()
{
unsigned int data = MANCHESTER.Receive();
if(data == 50)//將此數字與傳感器編號匹配
{
for(int i = 0; i 《15; i ++)
{
digitalWrite(sensor1alarm,HIGH);//打開sensor1alarm led
delay(500);
digitalWrite(sensor1alarm,LOW);//關閉sensor1警報led
delay(500);
}
}//if
if(data == 100)的結尾//將此編號與傳感器編號匹配
{(int i = 0; i 《15; i ++)
{
digitalWrite(sensor2alarm,HIGH);//打開sensor2alarm led
delay(500);
digitalWrite(sensor2alarm,LOW);//關閉sensor2alarm led
delay(500);
}
}//if
if(data == 150)的結尾//將此編號與傳感器編號匹配
{(int i = 0; i 《15; i ++)
{
digitalWrite(sensor3alarm,HIGH);//打開sensor3alarm led
delay(500);
digitalWrite(sensor3alarm,LOW);//關閉sensor3alarm led
delay(500);
}
}//if
if(data == 200)的結尾//將此編號與傳感器編號匹配
{(int i = 0; i 《15; i ++)
{
digitalWrite(relay,HIGH);//打開繼電器
delay(500);
}
}//if
}的結束//循環結束
/********** ************************************************** ****************************/
責任編輯:wv
-
運動傳感器
+關注
關注
9文章
168瀏覽量
31159
發布評論請先 登錄
無線傳感器網絡:智能監測的未來
無線位移傳感器的優勢與應用
ACE無線溫度電流復合傳感器

無線壓力傳感器的未來發展趨勢是什么?

評論