Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
21.04.2014, 14:47
|
|
Прохожий
Регистрация: 21.04.2014
Адрес: Минск
Сообщений: 5
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
RFID на Arduino с использованием Parallax RFID reader/writer
Господа, появилось желание соорудить устройства для чтения и самое главное для ЗАПИСИ, RFID карт.
Собственно после долгих поисков и раздумий было принято решение использовать в качестве контроллера - Arduino ( о боже, как неожиданно ![Рот до ушей](images/smilies/icon_doushei.gif) ).
В качестве катушки был найден интересный шилд для него : Называется RFID Read/Write Module и выглядит так :
Я думаю есть и Китайские аналоги. Но я отталкивался от оригинала.
Цитата:
|
.....а это читатель/писатель RFID 125 kHz.
|
http://www.parallax.com/sites/defaul...?itok=f6Eu6HHQ
На официальном форуме Arduino нашелся и скетч для этого устройства :
Цитата:
|
Code for using the Arduino with the Parallax RFID reader/writer
This page is specifically for help with interfacing the Arduino with the newer, black read/write RFID modules from Parallax. If you need help with the blue, read-only module, please visit its page.
To learn more about the module itself, click here.
For the sample code below, the wiring should be set up as:
VCC -› +5V (arduino)
SIN -› digital pin 6 (this is the txPin)
SOUT -› digital pin 8 (this is the rxPin)
GND -› GND (arduino)
Here are three example codes. The first is for reading data from the older EM4100 RFID tags and displaying the value in the serial monitor.
//Code to read data from Parallax RFID reader/writer 28440 via Arduino
//Program reads data from the old EM4100-based tags and prints their value in the serial monitor.
//Writen by vgrhcp, uberdude, sebflippers and sixeyes
#include ‹SoftwareSerial.h›
#define txPin 6
#define rxPin 8
#define RFID_LEGACY 0x0F
SoftwareSerial mySerial(rxPin, txPin);
int val = 0;
char code[11]; //Note this is 11 for the extra null char?
int bytesread = 0;
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
pinMode(txPin, OUTPUT); //pin 6
pinMode(rxPin, INPUT); //pin 8
Serial.println("RFID Read/Write Test");
}
void loop()
{
mySerial.print("!RW");
mySerial.write(byte(RFID_LEGACY));
//mySerial.print(32, BYTE);
if(mySerial.available() › 0) { // if data available from reader
if((val = mySerial.read()) == 10) { // check for header
bytesread = 0;
while(bytesread‹10) { // read 10 digit code
if( mySerial.available() › 0) {
val = mySerial.read();
if((val == 10)||(val == 13)) { // if header or stop bytes before the 10 digit reading
break; // stop reading
}
code[bytesread] = val; // add the digit
bytesread++; // ready to read next digit
}
}
if(bytesread == 10) { // if 10 digit read is complete
Serial.print("TAG code is: "); // possibly a good TAG
Serial.println(code); // print the TAG code
}
bytesread = 0;
delay(500); // wait for a 1/2 second
}
}
}
The following code reads the newer EM4x50 tags and displays them in the serial monitor.
#include ‹SoftwareSerial.h›
#define RFID_READ 0x01
#define txPin 6
#define rxPin 8
SoftwareSerial mySerial(rxPin, txPin);
int val;
int runs = 0;
void setup()
{
Serial.begin(9600);
Serial.println("RFID Read/Write Test");
mySerial.begin(9600);
pinMode(txPin, OUTPUT);
pinMode(rxPin, INPUT);
}
void suppressAll() //suppresses the "null result" from being printed if no RFID tag is present
{
if(mySerial.available() › 0)
{ mySerial.read();
suppressAll();
}
}
void loop()
{
int val;
mySerial.print("!RW");
mySerial.write(byte(RFID_READ));
mySerial.write(byte(32));
if(mySerial.available() › 0)
{
val = mySerial.read(); //The mySerial.read() procedure is called, but the result is not printed because I don't want the "error message: 1" cluttering up the serial monitor
if (val != 1) //If the error code is anything other than 1, then the RFID tag was not read correctly and any data collected is meaningless. In this case since we don't care about the resultant values they can be suppressed
{suppressAll();}
}
if(mySerial.available() › 0) {
val = mySerial.read();
Serial.print("1st:");
Serial.println(val, HEX);
}
if(mySerial.available() › 0) {
val = mySerial.read();
Serial.print("2nd:");
Serial.println(val, HEX);
}
if(mySerial.available() › 0) {
val = mySerial.read();
Serial.print("3rd:");
Serial.println(val, HEX);
}
if(mySerial.available() › 0) {
val = mySerial.read();
Serial.print("4th:");
Serial.println(val, HEX);
Serial.println("-----------------");
}
delay(750);
}
The following code is for writing 4 bytes of data (as defined by first, second, third, and fourth) to a specific address (as defined by whichSpace). Upon successful write operation, a confirmation is printed in the serial monitor.
//Code to write data to Parallax RFID reader/writer 28440 from Arduino
//Program writes to one of the 29 user-defined addresses (3-31) as define by whichSpace
//The four bytes to be written are defined by first, second, third, and fourth
//Coded by vgrhcp, adapted to arduino 1.0 by sebflippers
#include ‹SoftwareSerial.h›
#define RFID_WRITE 0x02
#define txPin 6
#define rxPin 8
#define whichSpace 4
#define first 1 // first, second, thrid, and fourth are four arbitrary values which will be written to the RFID tag at address whichSpace
#define second 26
#define third 3
#define fourth 27
SoftwareSerial mySerial(rxPin, txPin);
void setup()
{
Serial.begin(9600);
Serial.println("RFID Write Test");
mySerial.begin(9600);
pinMode(txPin, OUTPUT);
pinMode(rxPin, INPUT);
}
void suppressAll() //Keeps error code & the "write confirmation" codes from being printed in the serial monitor
{
if(mySerial.available() › 0)
{ mySerial.read();
suppressAll();
}
}
void loop()
{
int val;
mySerial.print("!RW");
mySerial.write(byte(RFID_WRITE));
mySerial.write(byte(whichSpace));
mySerial.write(byte(first));
mySerial.write(byte(second));
mySerial.write(byte(third));
mySerial.write(byte(fourth));
if(mySerial.available() › 0) {
val = mySerial.read();
if (val == 1) //If data was written successfully
{ Serial.println("Data written succesfully!");
suppressAll();
}
else suppressAll(); //If an error occured during writing, discard all data recieved from the RFID writer
}
delay(250);
}
|
Собственно как вариант можно и использовать обыкновенную катушку :
В это видио показано как считывать.
Может кто-нибудь может описать код С, русским языком и посоветовать все-таки как это реализовать именно для того, что бы можно было записывать информацию на карту.
Возможно кто-то это уже собирал, поделитесь опытом, может схемами т .д. Заранее спасибо.
Последний раз редактировалось IvanPuzirev; 22.04.2014 в 08:24.
|
|
|
|
21.04.2014, 20:53
|
|
Гражданин KAZUS.RU
Регистрация: 08.03.2013
Сообщений: 549
Сказал спасибо: 23
Сказали Спасибо 80 раз(а) в 55 сообщении(ях)
|
Re: RFID на Arduino с использованием Parallax RFID reader/writer.
А поиском на этом сайте не пробовали искать похожие темы?
Если просто нужен копир карт/брелков, вот на пике https://kazus.ru/forums/showthread.php?t=101597 , без исходников, если просто собрать.
Вот на Атмеге8 и 16 https://kazus.ru/forums/showthread.php?t=101565 с исходниками.
У этого автора есть страничка serg22.sibgtu.ru там проекты serg22.sibgtu.ru/radio/RFID-mega16-writer-freeware.rar и serg22.sibgtu.ru/radio/RFID-mega8-writer-freeware.rar
|
|
|
|
21.04.2014, 22:49
|
|
Супер-модератор
Регистрация: 09.06.2011
Сообщений: 2,637
Сказал спасибо: 73
Сказали Спасибо 1,796 раз(а) в 648 сообщении(ях)
|
Re: RFID на Arduino с использованием Parallax RFID reader/writer.
novodrodskiy, мне кажется, ТС хочет вовсе не домофонные ключи копировать...
А поскольку он не сказал, какие именно карты ему нужны, могу предположить, что речь идет о MIFARE...
|
|
|
|
21.04.2014, 23:08
|
|
Гражданин KAZUS.RU
Регистрация: 08.03.2013
Сообщений: 549
Сказал спасибо: 23
Сказали Спасибо 80 раз(а) в 55 сообщении(ях)
|
Re: RFID на Arduino с использованием Parallax RFID reader/writer.
MIFARE сейчас уже все производители домофонов взяли на вооружение, так что можно домофонными считать ![Улыбка](images/smilies/icon_smile.gif) .
P.S. ТС ссылается вот на эту продукцию parallax http://www.parallax.com/product/28440 а это читатель/писатель RFID 125 kHz.
Последний раз редактировалось novodrodskiy; 21.04.2014 в 23:16.
|
|
|
|
22.04.2014, 08:22
|
|
Прохожий
Регистрация: 21.04.2014
Адрес: Минск
Сообщений: 5
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: RFID на Arduino с использованием Parallax RFID reader/writer.
Дело в том, что бы реализовать ус-во, готовое и проверенное, которое могли-бы использовать многие, с использованием универсальных средств (Arduino). А не создавать аналоги.
Дело в том, что я не имею возможности все это воедино согрести, не хватает опыта работы с этим. Вот и прошу помощи.
|
|
|
|
22.04.2014, 08:46
|
|
Гражданин KAZUS.RU
Регистрация: 08.03.2013
Сообщений: 549
Сказал спасибо: 23
Сказали Спасибо 80 раз(а) в 55 сообщении(ях)
|
Re: RFID на Arduino с использованием Parallax RFID reader/writer.
IvanPuzirev, моё ИМХО, если уж осваивать программирование Атмеловских МК, то осваивать их конкретно, и никаких Arduino, они для убогих юзеров ![Очень смешно](images/smilies/icon_veryhappy.gif) .
Посмотрите исходники из темы https://kazus.ru/forums/showthread.php?t=101565, с автором поговорите в личке, может чего и прояснится.
|
|
|
|
22.04.2014, 08:54
|
|
Прохожий
Регистрация: 21.04.2014
Адрес: Минск
Сообщений: 5
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: RFID на Arduino с использованием Parallax RFID reader/writer.
Сообщение от novodrodskiy
|
IvanPuzirev, моё ИМХО, если уж осваивать программирование Атмеловских МК, то осваивать их конкретно, и никаких Arduino, они для убогих юзеров .
Посмотрите исходники из темы https://kazus.ru/forums/showthread.php?t=101565, с автором поговорите в личке, может чего и прояснится.
|
Arduino хорошо тем, что получается готовое ус-во, хорошего товарного вида и достаточно надежное, а САМОЕ глаавное, не нужно травить , утюжить и т.д. Никакого хлорного железа, фоторезиста и т.д., надоело. За Ссылку спасибо.
|
|
|
|
22.04.2014, 09:02
|
|
Гражданин KAZUS.RU
Регистрация: 08.03.2013
Сообщений: 549
Сказал спасибо: 23
Сказали Спасибо 80 раз(а) в 55 сообщении(ях)
|
Re: RFID на Arduino с использованием Parallax RFID reader/writer
Arduino плохо с точки зрения программирования, не экономно память МК используется, лоадер его кушает, среда программирования........ А от травить утюжить и пр. можно как то уйти, готовые платы покупать, в ДИП на готовых макетках собирать, в конце концов используйте эти самые Arduino, но программируйте в нормальной среде, как обычный МК. ИМХО.
|
|
|
|
22.04.2014, 09:44
|
|
Прохожий
Регистрация: 21.04.2014
Адрес: Минск
Сообщений: 5
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: RFID на Arduino с использованием Parallax RFID reader/writer
Ну вот собственно это и есть цель всей этой работы, разработать систему, и хочется это сделать как можно более профессионально. Я так полагаю среду для программирования лучше использовать MS VS, или может существует что по лучше. Кстати было-бы не плохо еще какие-нибудь ссылки и название литературы почитать что-нибудь. Для начинающих, более-менее читабельное... Я сам программист, (учусь), а вот что касается микроконтроллеров тут не хватает знаний.
Последний раз редактировалось IvanPuzirev; 22.04.2014 в 09:45.
Причина: Дополнение.
|
|
|
|
22.04.2014, 10:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
|
Re: RFID на Arduino с использованием Parallax RFID reader/writer
И, как частенько бывает, опять сплелись мухи и котлеты. Начнём сортировать.
Сообщение от IvanPuzirev
|
выглядит так :
|
Непонятно как выглядит, но будем полагать что этот - http://www.parallax.com/sites/defaul...?itok=f6Eu6HHQ
Ардуино тут совсем не нужен. А нужен преобразователь USB‹-›TTL UART. Чтобы не путать вас в проводах: вот пример преобразователя именно с нужным вам количеством - www.ebay.com/itm/301004701296, но подойдёт и любой другой. Имейте ввиду что на приведённой мной ссылке не просто провод, а ПРЕОБРАЗОВАТЕЛЬ.
Подключаете всё в кучу, втыкаете в комп, появляется виртуальный ком порт - он и будет средством связи с вашим модулем. Дальше пишите программу на любом языке, какой вам больше нравится.
Сообщение от IvanPuzirev
|
Может кто-нибудь может описать код С, русским языком и посоветовать все-таки как это реализовать именно для того, что бы можно было записывать информацию на карту.
|
Открываете ком порт с параметрами 9600,8,N,1 пишите в него "!RW", 0x02, 0x04, first, second, third, fourth. Где последние четыре байта - номер, который хотите записать. В случае успеха модуль вернёт 0x01
Последний раз редактировалось Wiza_; 22.04.2014 в 11:03.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:10.
|
|