亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 以太网 Rfid 读卡器

组件和用品

Mifare MFRC522
任何类型的spi rfid阅读器都可以
× 1
Arduino UNO
任何 arduino 都可以
× 1
enc28j60
你必须修改任何不使用 ENC28J60 的代码
× 1
跳线(通用)
× 1
面包板(通用)
× 1
计算机
任何连接到互联网的计算机
× 1

必要的工具和机器

剪刀
或剥线钳

应用和在线服务

Pycharm
Arduino IDE

关于这个项目


您有没有想过在家中和/或办公室添加 RFID 标签/卡安全系统或监控系统。好吧,如果你到了这里,我敢打赌你已经看过它们的价格从 200 美元到 2000 美元不等,太贵了!??好吧,我和一个朋友决定制作一个成本低于 100 美元的系统,并且可以做的不仅仅是进入一扇门,所以这就是我们想出的。支持互联网的 arduino rfid 标签阅读器。多花 20 美元就可以开门。该系统旨在跟踪我们高中的学生,我们希望学校批准。

这是原型:

你可能认为这可能需要很长时间,yatta yatta yatta。然而,这件事只花了我大约 6 个小时(因为我有电源问题),但这可能需要大约 30 分钟的时间来设置,就像上面的例子一样。所有代码和图片都在下面,所以如果您在接下来的步骤中感到困惑,请继续查看下方的图片/代码。

以下是所有步骤:

开始之前(必要)

在我们开始扫描卡片并将它们发送到我们的 Telnet/TCP 服务器之前,我们需要一些库在此处获取 UIPEthernet https://github.com/ntruchsess/arduino_uip

在此处获取 MFRC522 https://github.com/miguelbalboa/rfid

将这两个库放在 Program Files(x86)/Arduino/Libraries/ Restart arduino

硬件

  1. Arduino Nano(您可以随时修改代码以适合您的设备)
  2. 带 MAIFARE 卡的 MFRC522
  3. 跳线(公对公)(公对母)
  4. enc28j60 以太网模块/sheild
  5. RGB LED
  6. 3V 或 5V 大于 700 英里的 AC-DC 转换器

设置

  1. 将 arduino 连接到面包板(如果是 nano 或 micro)
  2. 在线查找电路板的引脚排列以找到 SPI 设置(更改下面的值)
  3. 将 arduino 引脚 10 (SS) 连接到以太网模块 ss 或 CS
  4. 将 arduino 引脚 12 (MISO) 连接到 rfid MISO 和以太网 SO
  5. 将 arduino pin 11 (MOSI) 连接到 rfid MOSI 和以太网 SI
  6. 将 arduino 引脚 13 (SCK) 连接到 rfid SCK 和以太网 SCK
  7. 将 arduino 引脚 9 连接到 rfid RST 引脚
  8. 将 arduino 引脚 8 连接到 rfid SSN
  9. 将 arduino 引脚 5 连接到绿色 LED,将 4 连接到蓝色,将 3 连接到红色
  10. 将 AC 到 DC 连接到面包板上的 + 和 -
  11. 将您的 arduino 接地到交流到直流
  12. 将 rfid 和以太网上的 VCC 和 GND 连接到 ac-dc(请记住,这些设备只有 3v!!!!!不要提供 5v)如果出现问题,请使用电阻器将电压升至 3v
  13. 将 LED 上的 VCC 引脚连接到 arduino 3v 或 ac-dc 3v
  14. 将以太网电缆连接到模块并确保它与您的计算机在同一网络上
  15. 将 USB 数据线从计算机插入 arduino
  16. 将计算机连接到同一网络


修改代码以满足您的需求

  1. 代码注释得很好,因此您可以直接修改某些部分,但可以肯定的是 ehternet 模块
  2. Mac 地址可以保持不变(除非您计划构建多个)
  3. 如果您使用的是 192.168。基础ip网络,你可以保留ip
  4. 您可以再次保留 dns,只是时间更改为 8.8.4.4
  1. 运行 ipconfig 找到您的网关,默认为 192.168.1.1(如果您不知道)(当前代码为 192.168.1.5)
  2. 运行命令提示符并输入 ipconfig 以找出您计算机的 IP 地址
  1. 向下滚动找到 SEND TO SERVER,然后输入您的计算机的 ip 或者您的端口是否将您的路由器转发到您的公共 ip 地址
  2. 确保您有 Python 并运行服务器(请记住,这只是我们用于向学校进行演示的示例代码,因此 Python 服务器已经预制,几乎没有修改,您可以使用任何 Telnet/TCP 服务器)

以及您可能需要修改的其他代码:


运行代码

  1. 将 AC-DC 电源插入墙上
  2. 确保您的 arduino 当前已连接到计算机
  3. 确保两台设备在同一网络上
  4. 刷出你修改过的 arduino 代码,或者如果我有适合你的代码,那就太好了(你几乎没有机会修改它)
  5. 在您的网络上启动您的 Python、C++ 脚本或任何 Telnet/TCP 服务器
  6. 重新启动您的 arduino 以确保安全
  7. 等到指示灯变成蓝色并尝试扫描卡,如果您的服务器获得了卡的 ID,那么您就可以开始了
  8. 记住灯光的含义是紫色/渐隐的红色意味着正在启动
  9. 红色表示任何错误,例如卡处于奇怪的角度和/或服务器没有及时响应
  10. 绿色表示通过,因此服务器响应为通过,您可以读取下一张卡片
  11. 蓝色表示等待/加载等待卡片或响应
  12. 如果您的 arduino 开始滞后并且显示红灯超过 30 秒,则意味着 arduino 以太网模块根本无法连接到服务器。这可能是由多种原因引起的,首先您的 arduino 没有足够的功率,并且 arduino 以太网模块正在努力发送数据包,或者您的计算机服务器没有运行,或者您的 arduino 和计算机不在同一网络上。
  13. 如果您的 arduino 一直滞后,请尝试这些技巧来修复它们

  14. 关闭windows防火墙

  15. 进入高级防火墙设置并允许入站/出站端口 23
  16. 使用端口 23 将您的路由器转发到您的计算机
  17. 如果您是无线连接,则将 arduino 直接连接到路由器和您的计算机上
  18. 购买更耐用的 AC-DC 电源适配器
  19. 否则可能是你输入的ip地址或连接地址错误

  20. 如果有任何问题,请通过 [email protected] 与我联系

  21. 你可以走了!!!

请记住,门锁系统没有任何代码,因为我没有,这意味着如果您不仅要将其用作跟踪系统,还想将其用作门锁跟踪系统,则必须添加一些代码。


请阅读以下内容:

代码

  • Arduino 代码
  • 示例服务器代码
Arduino 代码C/C++
这是arduino上的软件差不多准备好了,所以你要做的只是调整网关,ip,网关,mac地址和dns
/* * ------------ -------------- * MFRC522 Arduino * Reader/PCD Nano v3 * 信号引脚 * -------------- -------------------- * RST/复位 RST D9 * SPI SS NSS D10 * SPI MOSI MOSI D11 * SPI MISO MISO D12 * SPI SCK SCK D13 *///需要安装的第一个库是UIP ETHERNET 第二个是MFRC522 两者都在GITHUB#include #include  //用于选择key#include  // RFID 密钥库#define RST_PIN 9 // 可配置,请参阅上面的典型引脚布局 - 这是针对 Arduino Nano - 对于 RFID#define SS_PIN 8 //我们使用 8 作为 RFID,因为以太网模块使用 10 字节扇区 =0;字节块地址 =0; ////////访问卡中的某些扇区/块,trail block是最后一个块字节trailerBlock =1;int red =3;int blue =4; // RGB LEDint green =5 的引脚;EthernetClient 客户端; //以太网实例MFRC522 mfrc522(SS_PIN, RST_PIN); // 创建 MFRC522 实例。MFRC522::MIFARE_Key key; //设置key instancesigned long timeout; //超时所以它不会永远坐在那里void setup(){ //UI BEGIN pinMode(red, OUTPUT); pinMode(蓝色,输出); //初始化RGB LED pinMode(green, OUTPUT);重启(); //从关闭 LED 开始 Serial.begin(9600); //以每秒 9600 位的速率启动计算机连接 //UI END //ETHERNET MODULE INITIAL SPI.begin(); // 初始化 SPI 总线 uint8_t mac[6] ={0x00,0x01,0x02,0x03,0x04,0x05}; //MAC =000102030405 IP地址mip(192,168,1,160); //IP =192.168.1.160 IP地址 mdns(8,8,8,8); //DNS =8.8.8.8 IPAddress mgate(192,168,1,5); //GATEWAY =192.168.1.5 IPAddress msubnet(255,255,255,0); //SUBNET =255.255.255.0 Ethernet.begin(mac, mip, mdns, mgate, msubnet); //使用上面的连接Serial.println("连接成功"); // 以太网结束 for(int t =255; t> 0; t--) { analogWrite(red, t); ////更多的展示,但让以太网的 SPI 和 RFID 延迟(10)之间至少有一秒钟; } //RFID 初始化 mfrc522.PCD_Init(); // 初始化 MFRC522 卡 for (byte i =0; i <6; i++) { // 准备密钥(用作密钥 A 和密钥 B) key.keyByte[i] =0xFF; // 使用 FFFFFFFFFFFFh,这是工厂芯片交付时的默认值 } Serial.println(F("Scan a Card")); dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); //获取key字节大小 timeout =0;延迟(2000); Reset();}//END RFID INITIALvoid loop() //永远运行{ // 寻找新卡 if ( ! mfrc522.PICC_IsNewCardPresent()) { digitalWrite(blue, LOW);返回; } // 选择一张卡片 if ( ! mfrc522.PICC_ReadCardSerial()) return;数字写入(蓝色,高); //向用户显示卡已被读取 byte piccType =mfrc522.PICC_GetType(mfrc522.uid.sak); // 检查与 Mifare 卡的兼容性 if ( piccType !=MFRC522::PICC_TYPE_MIFARE_MINI &&piccType !=MFRC522::PICC_TYPE_MIFARE_1K &&piccType !=MFRC522::PICC_TYPE_MIFARE_4K) { Error();返回; } 字节状态;字节缓冲区[18];字节大小 =sizeof(buffer);状态 =mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, TrailerBlock, &key, &(mfrc522.uid)); if (status !=MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() 失败:")); Serial.println(mfrc522.GetStatusCodeName(status));错误();返回; } // 从块中读取数据 status =mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status !=MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() 失败:")); Serial.println(mfrc522.GetStatusCodeName(status));错误(); } // 停止PICC mfrc522.PICC_HaltA(); // 在 PCD 上停止加密 mfrc522.PCD_StopCrypto1(); // 读完卡片后发送到服务器 if (client.connect(IPAddress(192,168,1,100),23)) { timeout =millis()+1000; Serial.println("客户端已连接"); const String ID =dump_byte_array(buffer, size); client.println(ID); Serial.println("发送:" + ID);延迟(10); while(client.available()==0) { if (timeout - millis() <0) goto close;整数大小; while((size =client.available())> 0) { uint8_t* msg =(uint8_t*)malloc(size);大小 =client.read(msg,size); Serial.write(msg,size); if(size ==sizeof("g") - 1) { Pass(); } else { 错误();自由(味精); }关闭:client.stop(); } else { Serial.println("无法连接到服务器");错误(); } //结束发送到服务器重置(); //重新启动没有 LED 灯的循环}// 将缓冲区数组变成一个大写的字符串,它等于我们的扇区 ID 和块字符串 dump_byte_array(byte *buffer, byte bufferSize) { String out =""; for (byte i =0; i  
示例服务器代码Python
下面是如何使用服务器的完整示例
import SocketServerclass MyTCPHandler(SocketServer.BaseRequestHandler):def handle(self):# self.request 是连接到客户端的TCP socket self.data =self.request.recv (1024).strip() print "{} 写道:".format(self.client_address[0]) print self.data """ SQL STUFF HERE if(self.data ==SQL NAME or something) { self.request .sendall("g")//send good //INSERT TIME AND LOCATION INTO SQL HERE { else { self.request.sendall("bb")//send bad //DO NOTHING 只是发送到 arduino 坏数据 } "" " self.request.sendall("g")if __name__ =="__main__":HOST, PORT ="", 23 server =SocketServer.TCPServer((HOST, PORT), MyTCPHandler) server.serve_forever()
在 GitHub 上更新代码
在这里可以获得最新的代码https://github.com/smerkousdavid/InternetRFIDTags

示意图

电路很简单,所以我只是用接线拍了一张照片

制造工艺

  1. 贺卡
  2. 信用卡
  3. 带有 RC522 的 Arduino RFID 锁 - MIFARE 协议 13.56 Mhz
  4. Arduino RFID 锁教程
  5. 使用 Arduino 和 RFID 和 Python 的考勤系统
  6. Arduino Spybot
  7. FlickMote
  8. 自制电视 B-Gone
  9. 主时钟
  10. 找到我
  11. Arduino Power
  12. Arduino Amiga 软盘阅读器 (V1)