查看: 858|回复: 0

仅需10 欧元利用树莓派制作防盗报警器

[复制链接]

该用户从未签到

发表于 2016-8-2 08:51:49 | 显示全部楼层 |阅读模式
分享到:
树莓派让我最爱的地方就是 GPIO 引脚。它们允许你打破软件和访问外部硬件的限制。我一直都从事软件行业,但同时也希望通过软件来控制某些硬件。
所以我的第一个软硬件结合项目就是想实现一个原始的防盗报警器,门被打开时,会发送通知给我。
你将需要以下这些东西:

  • 树莓派
  • 簧片继电器(磁铁开关)
  • 一些旧的 IDE 电缆
  • 1 个 10kΩ 的电阻
如果你已经有一个树莓派了,这个项目将只会花费你 10 欧元。



第一步:电路
这一步很简单,第一次尝试就成功了。
第二步:簧片开关
簧片开关是该项目中最重要的部分,因为只有当磁铁靠近其头部的时候,它才会切换电源。所以如果门关闭,簧片将失去与电源的连接,然后树莓派就会通知有一个从 1 到 0 的状态变化。
为了测试,我只用胶带在门上固定了簧片开关,在它下面固定了磁铁,如下图中所示。开关的两条线自然是连接到电路,参考第一步中的电路。

第三步:软件
现在我们只需要几行代码就可以完成这个项目啦!我用的nodeJs来编写代码,因为我喜欢它的工作模式,并且作为一个Web开发者,使用JavaScript我觉得非常熟悉和自在。另外,包管理器(npm)对于node使用非常有帮助。
在这个例子中,当门的状态改变时,我让树莓派通过邮件来通知我,但是你还可以使用其他各种方式,比如播放声音、推送到Twitter(或许这不是最好的办法)。
你需要从npm安装两个包。使用如下命令来完成:

  • (如果你没有安装 nodejs ,用的是 raspian) apt-get install nodejs npm
  • npm install emailjs
  • npm install rpi-gpio
这就是代码:你需要改变以下这些地方:

  • 如果你使用的pin编号与我的电路中不同,则修改这个doorpin的值(文中作者使用的是7)
  • 修改你的邮箱认证信息(user、password、host 如果你用的不是gamil)
  • 在readInput方法中修改”from:”和”to:”的邮件地址
var gpio = require('rpi-gpio');
var email   = require("emailjs/email");
var doorpin = 7;
//the GPIO port you connected to the cicruit
var server  = email.server.connect({
            user:    "your.username",
            password:"YourPassword",
            host:    "smtp.gmail.com",
            ssl: true});
var laststate = 1;
gpio.setup(doorpin, gpio.DIR_IN,readInput);
function readInput()
{
gpio.read(doorpin, function(err, value){
    if(laststate!=value)
    {
            console.log(translateStatus(value));
            server.send({
//sending email
               text:    translateStatus(value),
               from:    "Door <youremail@gmail.com>",
               to:      "somebody <youremail@gmail.com>",
               subject: translateStatus(value)
            }, function(err, message) { console.log(err || message); });
    }
    laststate = value;
});
setTimeout(readInput,1000);
//recheck door every second
}
function translateStatus(s){
if(s==0) return 'The door is now open! '+getTime();
else return 'The door is now closed! '+getTime();
}
function getTime(){
    var h = new Date().getHours();
    var m = new Date().getMinutes();
    var s = new Date().getSeconds();
    if(h <10) h = '0'+h;
    if(m <10) m = '0'+m;
    if(s <10) s = '0'+s;
    return h+':'+m+':'+s;
}
你需要把代码保存为一个文件,例如 dooralert.js,然后通过如下命令运行:
nodejs dooralert.js
如果一切运行正常,你打开门再关门,就会收到一封如下的邮件:

文章来源网络
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

手机版|小黑屋|与非网

GMT+8, 2024-4-19 10:37 , Processed in 0.127931 second(s), 17 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.