物联网:透过RFID卡来开启您家的大门【转译】手工电子DIY教程
在生活中,家是我们最后也是最重要的归依,原有的铜锁,越来越不安全,而且携带一堆钥匙更是不方便,许多智慧家居都已寻求更简单、方便、快速的方式来保全我们最重要的家。如果我们能够用创客神器来Arduino来保全我们最重要的家,透过RFID卡,当成一个开门的Key卡,那该有多好?所以本月我们要使用Arduino,透过简单RFID Mifare卡,建立一个安全的门锁开门利器。
主要材料:
电控锁 | 模组 |
所需工具:
电脑 |
制作步骤:
第1步:
电控锁
一般门禁系统进出入口大部份为门,而门闭合与开合的关键装置则为锁(如下图所示),但是人力锁闭合与开合的关键装置需要透过人的开锁行为来运作,以联接门禁系统之辨识系统来闭合与开合,该‘锁’必须是电力装置方能达到需求。
所以一般都是电力控制之电控锁,方能在“开锁装置”(例如钥匙、密码、开锁卡片,或是指纹、掌纹、视网膜或声音等生物特征)辨识并判断使用者的身份正确后,启动回路通电(或断电)至电控锁开门。
第2步:
驱动MF RC522 RFID模块
MF RC522 RFID模块本身就可以读取Mifare卡片的数据,我们依照下表进行电路连接,连接MF RC522 RFID模块,进行电路组立。
(表1)RFID门禁管制接脚表:
第3步:
第4步:
电路组立之后,依照下表之RFID门禁管制机测试程序一进行程序攥写的动作。
RFID门禁管制接脚表:
第5步:
RFID門禁管制機測試程式一(doorcontrol01)
#include <LiquidCrystal.h>
#include <SPI.h>
#include <RFID.h>
/* LiquidCrystal display with:
LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
R/W Pin Read = LOW / Write = HIGH // if No Pin connect RW , please leave R/W Pin for Low State
Parameters
*/
LiquidCrystal lCD(8,9,10,38,40,42,44); //ok
RFID rfid(53,5); //this is used for Arduino Mega 2560
//RFID rfid(10,5); //this is used for Arduino UNO
void setup()
{
n(9600);
tln(“RFID Mifare Read");
n();
();
// PinMode(11,OUTPUT);
// digitalWrite(11,LOW);
n(20, 4);
// 設定 LCD 的行列數目 (4 x 20)
ursor(0,0);
// 列印 “Hello World" 訊息到 LCD 上
t(“RFID Mifare Read");
}
void loop()
{
// 將游標設到 column 0, line 1
// (注意: line 1 是第二行(row),因為是從 0 開始數起):
tln(millis()/1000);
delay(200);
if (rd()) { //找尋卡片
if (CardSerial()) { //取得卡片的ID+CRC校驗碼
//第0~3個byte:卡片ID
tln(" “);
t(“RFID Card Number is : “);
t(um[0],HEX);
t(" , “);
t(um[1],HEX);
t(" , “);
t(um[2],HEX);
t(" , “);
tln(um[3],HEX);
//第4個byte:CRC校驗位元
t(“CRC is : “);
tln(um[4],HEX);
ursor(2, 1);
t(um[0],HEX);
ursor(5, 1);
t(um[1],HEX);
ursor(8, 1);
t(um[2],HEX);
ursor(11, 1);
t(um[3],HEX);
}
}
(); //命令卡片進入休眠狀態
delay(500); //延時0.5秒
}
第6步:
RFID卡控制开锁
我们已经可以正确读取卡号号,我们加入继电器模块来控制外部电力装置开关与否,主要是将电磁锁(如图1所示)的开门开关电路,参照(表1)所示,接至继电器模块的Com与NC两接点,在正确读取到适合卡号时,启动继电器模块,使继电器模块的Com与NC两接点短路,让电磁锁(如图1所示)开门。
由于MF RC522 RFID模块本身就可以读取Mifare卡片的数据,我们依照表1进行电路连接,连接MF RC522 RFID模块,读者依照下表之RFID门禁管制机测试程序二进行程序攥写的动作。
(表 3)RFID 門禁管制機測試程式二:
#include <LiquidCrystal.h>
#include <SPI.h>
#include <RFID.h>
#include <String.h>
#define openkeyPin 4
int debugmode = 0;
/* LiquidCrystal display with:
LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
R/W Pin Read = LOW / Write = HIGH // if No Pin connect RW , please leave R/W Pin for Low State
Parameters
*/
LiquidCrystal lcd(8,9,10,38,40,42,44); //ok
RFID rfid(53,5); //this is used for Arduino Mega 2560
//RFID rfid(10,5); //this is used for Arduino UNO
String keyno1 = String(“6AE4E616″);
void setup()
{
n(9600);
tln(“RFID Mifare Read");
n();
();
pinMode(openkeyPin,OUTPUT);
digitalWrite(openkeyPin,LOW);
n(20, 4);
// 設定 LCD 的行列數目 (4 x 20)
ursor(0,0);
// 列印 “Hello World" 訊息到 LCD 上
t(“RFID Mifare Read");
}
void loop()
{
// 將游標設到 column 0, line 1
// (注意: line 1 是第二行(row),因為是從 0 開始數起):
if (rd()) { //找尋卡片
if (CardSerial()) { //取得卡片的ID+CRC校驗碼
//第0~3個byte:卡片ID
tln(" “);
t(“RFID Card Number is : “);
t(strzero(um[0],2,16));
t(“/");
t(um[0],HEX);
t(“/");
t(um[0],DEC);
t(" , “);
t(strzero(um[1],2,16));
t(“/");
t(um[1],HEX);
t(“/");
t(um[1],DEC);
t(" , “);
t(strzero(um[2],2,16));
t(“/");
t(um[1],HEX);
t(“/");
t(um[1],DEC);
t(" , “);
t(strzero(um[3],2,16));
t(“/");
t(um[0],HEX);
t(“/");
tln(um[0],DEC);
//第4個byte:CRC校驗位元
t(“CRC is : “);
t(strzero(um[4],2,16));
t(“/");
t(um[4],HEX);
t(“/");
tln(um[4],DEC);
ursor(2, 1);
t(strzero(um[0],2,16));
ursor(5, 1);
t(strzero(um[1],2,16));
ursor(8, 1);
t(strzero(um[2],2,16));
ursor(11, 1);
t(strzero(um[3],2,16));
ursor(4, 2);
t(getcardnumber(um[0],um[1],um[2],um[3]) );
}
}
(); //命令卡片進入休眠狀態
if (keyno1 == getcardnumber(um[0],um[1],um[2],um[3]))
{
digitalWrite(openkeyPin,HIGH);
ursor(0, 3);
t(“Access Granted:Open");
tln(“Access Granted:Door Open");
}
else
{
digitalWrite(openkeyPin,LOW);
ursor(0, 3);
t(“Access Denied:Closed");
tln(“Access Denied:Door Closed");
}
delay(500); //延時0.5秒
}
String getcardnumber(byte c1, byte c2, byte c3, byte c4)
{
String retstring = String(“");
at(strzero(c1,2,16));
at(strzero(c2,2,16));
at(strzero(c3,2,16));
at(strzero(c4,2,16));
return retstring;
}
String strzero(long num, int len, int base)
{
String retstring = String(“");
int ln = 1 ;
int i = 0 ;
char tmp[10] ;
long tmpnum = num ;
int tmpchr = 0 ;
char hexcode[]={‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’A’,’B’,’C’,’D’,’E’,’F’} ;
while (ln <= len)
{
tmpchr = (int)(tmpnum % base) ;
tmp[ln-1] = hexcode[tmpchr] ;
ln++ ;
tmpnum = (long)(tmpnum/base) ;
/*
t(“tran :(“);
t(ln);
t(“)/(“);
t(hexcode[tmpchr] );
t(“)/(“);
t(tmpchr);
tln(“)");
*/
}
for (i = len-1; i >= 0 ; i –)
{
at(tmp[i]);
}
return retstring;
}
unsigned long unstrzero(String hexstr)
{
String chkstring ;
int len = th() ;
if (debugmode == 1)
{
t(“String “);
tln(hexstr);
t(“len:");
tln(len);
}
unsigned int i = 0 ;
unsigned int tmp = 0 ;
unsigned int tmp1 = 0 ;
unsigned long tmpnum = 0 ;
String hexcode = String(“0123456789ABCDEF") ;
for (i = 0 ; i < (len ) ; i++)
{
// chkstring= tring(i,i) ;
perCase() ;
tmp = At(i) ; // give i th char and return this char
tmp1 = xOf(tmp) ;
tmpnum = tmpnum + tmp1* POW(16,(len -i -1) ) ;
if (debugmode == 1)
{
t(“char:( “);
t(i);
t(“)/(“);
t(hexstr);
t(“)/(“);
t(tmpnum);
t(“)/(“);
t((long)pow(16,(len -i -1)));
t(“)/(“);
t(pow(16,(len -i -1) ));
t(“)/(“);
t((char)tmp);
t(“)/(“);
t(tmp1);
t(“)");
tln(“");
}
}
return tmpnum;
}
long POW(long num, int expo)
{
long tmp =1 ;
if (expo > 0)
{
for(int i = 0 ; i< expo ; i++)
tmp = tmp * num ;
return tmp ;
}
else
{
return tmp ;
}
}
我們發現圖 3(a)所示,MF RC522 模組讀到卡(卡號:316C1155),為不是正確的開門卡,所以不會啟動繼電器,而見圖 3(b)所示,MF RC522 模組讀到卡(卡號:6AE4E616),為正確的開門卡,則Arduino 開發模組在 MF RC522 模組讀到該卡號之後,比對表 3 內‘String keyno1 = String(“6AE4E616″);’的變數,為相同的變數內容,則使繼電器模組的 Com 與 NC 兩接點短路,讓電磁鎖。
小贴士:
转载文章,感谢原作者 曹永忠 先生
-
【创马纪实】太阳能旅行音响手工电子DIY教程
【原址:】主要材料:太阳能电池光电池板导线共振音响螺丝电线魔术贴所需工具:刀片试电笔平口螺丝刀制作步骤:第1步:本次大赛主题是太阳能电池应用。我们阳光活力队提出的创意是“太阳能旅行音响”。旅行音响是驴友们的最爱,但长时间、大音量听歌也使其续航能力和电池...
-
只用3D打印机就可制作的机器人手工电子DIY教程
3D打印的一大优势在于它使得机器人制作更加简单易行。你可以设计出任何你梦寐以求的构型并且即刻得到实物。这也为实现快速的原型设计和实验提供了便捷,上图中3D打印的机器人就是一个很好的例子。【原址:】主要材料:Afnia3D打印机一台.标准的伺服系统2个(舵机)inomi...
-
DIY一把LED星光伞,雨天好心情!(转自肉丁)手工电子DIY教程
Geek中有也有一批文艺青莲,他们在灯火阑珊的雨夜会打着一顶布满星光的小伞,明明灭灭的光亮一如敏感震颤的心情……邂逅街头,会心一笑,说:“你也是暗夜小蘑菇吗?”创意来源一把稀松平常的伞,想法看起来怪诞,也有点异想天开。主要材料:防护胶带,强力胶64个贴片LED灯钎焊条S...
-
觉得换电池麻烦就把他改成充电的手工电子DIY教程
1一个就鼠标2一块适合装在鼠标离的电池主要材料:电池一块导线只要能够从鼠标接到锂电池上就好泡沫胶若干(主要用于固定电池)所需工具:电胶布若干小十字螺丝一把制作步骤:第1步:准备好鼠标然后,把电池盖打开去下电池,然后把鼠标的螺丝都取出来。第2步:拆开后就像这样。第...
相关文章
- [Maker Faire在堪萨斯城]【转译】手工电子DIY教程
- DIY水彩感谢卡【转译】手工手绘印染教程
- 哈佛大学基于开源硬件和3D打印开发的软体机器人套件【转译】手工电子DIY教程
- Arduino DIY巨型弹珠机,大家一起嗨到天亮!【转译】手工电子DIY教程
- 【译次元】震撼人心的摄影:从过往透视人性
- 【网转】自制意大利面微博@DIY达人翻译整理手工美食烘焙教程
- 看图小编带你玩转非洲Maker Faire【转译】手工电子DIY教程
- 人类的未來:透過THINGSPEAK网站监控居家亮度【转译】手工电子DIY教程
- VR视频项目开启 在家体验“太空遨游”的感觉!【转译】手工电子DIY教程
- 决绝被偷窥,6款DIY设备保护您的数字隐私。【转译】手工电子DIY教程