电子说
第1步:材料
我从墨西哥的sparkfun发行订购我的资料,因为这是我的住所,但是如果您在美国居住,您几乎无法从Sparkfun订购所有材料。
1个Pir传感器
http://www.sparkfun.com/products/8630
9.95 d olar
1 rf接收器315mhz
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
全部0条评论
快来发表一下你的评论吧 !