RFID считыватель YR8001
Я делаю проект на пассивной системе RFID с использованием считывателя RFID YR8001. Я новичок и не знаю много об этом. После прочтения различных статей и блогов я узнал, что большинство читателей позволяют пользователю использовать RS232 (YR 8001 также делает). RS232 и TTL работают на двух разных уровнях напряжения, и если кто-то хочет подключить считыватель к компьютеру через микроконтроллер, вам нужен преобразователь RS232 -TTL (для этого я использую MAX232).
Сайт, с которого я заказал эту часть, предоставляет вместе с продуктом программное обеспечение, которое помогает вам взаимодействовать с ридером, но не дает никакой возможности отправить вывод на микроконтроллер. Мне нужно прочитать метку RFID, и если это произойдет, он должен выводить на микроконтроллер. Поэтому я пытаюсь сделать свою собственную программу с использованием Arduino.
Чтобы проверить, подключен ли мой ридер к моему ПК, я использую coolTerm (программное обеспечение для последовательной связи). Хотя я могу успешно подключить его, нажав кнопку подключения в coolTerm, я не уверен, действительно ли он подключается, так как я не вижу ничего на экране Serial Monitor и, насколько я понимаю, после чтения различных блогов, читатель должен отправить несколько Уведомление о том, что ваш компьютер подключен к читателю, и теперь они оба могут общаться.
Любые подсказки о том, что я должен делать, будут мне очень полезны, так как я застрял и не могу думать о том, как действовать сейчас.
1 ответ
Это пример того, что я работал несколько месяцев назад. Я думаю, что это работает отлично. Программа сбрасывает антенну, затем устанавливает рабочую антенну и затем работает как инвентарь в реальном времени. Если вы знаете немного об Arduino, вы можете прочитать в коде. (Там есть некоторые испанские комментарии, потому что я в Мексике)
#include <SPI.h>
#include <SD.h>
File myFile;
byte reset_Message[] = {0xA0, 0x03, 0x01, 0x70, 0xEC };
byte set_WorkingAntenna[] = {0xA0, 0x04, 0x01, 0x74, 0x00, 0xE7 };
byte real_TimeInventory[] = {0xA0, 0x04, 0x01, 0x89, 0x01, 0xD1 };
int cont = 0;
int contSD = 1;
byte tag_ID[21];
String tag_IDInt="";
unsigned long previousMillis = 0; // will store last time LED was updated
// constants won't change :
const long interval = 100; // interval at which to blink (milliseconds)
boolean found = false;
void setup() {
// initialize both serial ports:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial2.begin(115200);
Serial.print("Inicializando Memoria SD...");
if (!SD.begin(4)) {
Serial.println("Inicializacion Fallida!");
return;
}
Serial.println("Inicializacion Correcta.");
delay(100);
Serial2.write(reset_Message, sizeof(reset_Message));
delay(500);
Serial2.write(set_WorkingAntenna, sizeof(set_WorkingAntenna));
delay(50);
Serial2.write(real_TimeInventory, sizeof(real_TimeInventory));
tag_IDInt.reserve(200);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
Serial2.write(set_WorkingAntenna, sizeof(set_WorkingAntenna));
delay(50);
Serial2.write(real_TimeInventory, sizeof(real_TimeInventory));
}
// read from port 2, send to port 0:
if (Serial2.available()) {
byte inByte = (byte)Serial2.read();
tag_ID [cont] = inByte;
//Serial.write(inByte);
cont++;
if (cont == 6 && tag_ID[3] == 116){ cont = 0;}
if (cont == 12 && tag_ID[4] == 0 ){ cont = 0;}
if (cont == 21){
for (int i=7; i<19; i++){
tag_IDInt += String(tag_ID[i],HEX);
//Serial.print(tag_ID[i], HEX);
//Serial.print(" ");
}
tag_IDInt += (char)'\r';
Serial.print("Tu ID es: ");
Serial.print(tag_IDInt);
if (lookForID(tag_IDInt)){
Serial.println(", Acceso Permitido");
}else{
Serial.println(", Acceso Denegado");
}
found = false;
tag_IDInt = "";
cont = 0;
}
}
}
boolean lookForID(String read_ID){
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
myFile = SD.open("TAGIDS.csv", FILE_WRITE);
// re-open the file for reading:
myFile = SD.open("TAGIDS.csv");
if (myFile) {
// read from the file until there's nothing else in it:
while (myFile.available() && !found) {
String line = myFile.readStringUntil('\n');
if (line == read_ID){
//Serial.print(" Found in Line ");
//Serial.print(contSD);
found = true;
contSD = 1;
return true;
}
else
contSD++;
}
// close the file:
myFile.close();
if(!found){
contSD = 1;
return false;
}
} else {
// if the file didn't open, print an error:
Serial.println("Error Abriendo TAGIDS.csv");
}
}