Балуюсь тут с сабжем - забавная штукенция, секса никакого, всё по двум проводкам, работает с SoftwareSerial, ляпота, да и только. Набросал быстренько скетчик, который лочит/разлочит "систему" при поднесении известных ключей: Код (C++): #include <SoftwareSerial.h> // на каких пинах подключен RFID-считыватель SoftwareSerial sSerial(8,9); // тестовый пин, на котором будем включать светодиод, говорящий о том, что система закрыта/открыта const int ledPin = 13; // флаг, что юзер залогинен bool isUserLoggedIn = false; // длина ключа RFID-метки const byte RFID_TAG_LENGTH = 14; // сюда будем читать ключ byte enteredKey[RFID_TAG_LENGTH] = {0}; // здесь будем хранить информацию о последнем сравненном ключе, чтобы избежать повторного выполнения кода byte lastKey[RFID_TAG_LENGTH] = {0}; // массив ключей, которые нам известны byte knownKeys[][RFID_TAG_LENGTH]= { { 0x02, 0x30, 0x39, 0x30, 0x30, 0x34, 0x46, 0x35, 0x33, 0x46, 0x33, 0x45, 0x36, 0x03 } , { 0x02, 0x30, 0x46, 0x30, 0x30, 0x36, 0x31, 0x42, 0x46, 0x39, 0x32, 0x34, 0x33, 0x03 } // сюда дописывать ключи , {0,0,0,0,0,0,0,0,0,0,0,0,0,0} // заглушка, признак окончания массива ключей }; byte writePos = 0; // позиция записи unsigned long eraseKeyTimer = 0; // таймер присутствия ключа в считывателе const unsigned int waitEraseInterval = 1000; // через сколько миллисекунд можно повторно приложить ключ void setup() { Serial.begin(57600); sSerial.begin(9600); pinMode(ledPin,OUTPUT); digitalWrite(ledPin,LOW); Serial.println(F("System ready, locked.")); } // сравниваем ключи на совпадение bool sameKey(byte* k1, byte* k2) { return !memcmp(k1,k2,RFID_TAG_LENGTH); } // проверяем - известен ли нам ключ bool isKnownKey(byte* key) { byte pos = 0; while(1) { if(!memcmp(knownKeys[pos],key,RFID_TAG_LENGTH)) // ключ совпал { return true; } if(knownKeys[pos][0] == 0) // дошли до конца массива известных ключей break; pos++; } return false; } void loop() { if(sSerial.available()) { // есть данные от ключа, считываем их while(sSerial.available()) { enteredKey[writePos++] = sSerial.read(); if(writePos >= RFID_TAG_LENGTH) { // прочитали весь ключ, проверяем его writePos = 0; if(isKnownKey(enteredKey)) // ключ известен { if(!sameKey(enteredKey,lastKey)) // если только его не продолжают держать у считывателя { // пишем, что мы узнали ключ Serial.println(F("Key known :)))")); // меняем статус системы isUserLoggedIn = !isUserLoggedIn; digitalWrite(ledPin,isUserLoggedIn ? HIGH: LOW); Serial.println(isUserLoggedIn ? F("System unlocked.") : F("System locked.")); } } else // ключ неизвестен { // если только ключ не тот же, т.е. если его не держат на считывателе if(!sameKey(enteredKey,lastKey)) Serial.println(F("Key unknown :(")); } // запоминаем, какой ключ на считывателе memcpy(lastKey,enteredKey,RFID_TAG_LENGTH); // обновляем таймер присутствия ключа в считывателе eraseKeyTimer = millis(); } // if(writePos >= RFID_TAG_LENGTH) } // while } // if // если ключ отсутствует больше N секунд - стираем информацию о последнем введённом ключе if(millis() - eraseKeyTimer > waitEraseInterval) { memset(lastKey,0,RFID_TAG_LENGTH); } /* // тестовый код для считывания поднесённых ключей if(sSerial.available()) { while(sSerial.available()) { char ch = sSerial.read(); Serial.print("0x"); if(ch < 16) Serial.print('0'); Serial.print(ch, 16); Serial.print(' '); } Serial.println(); } */ } Но вот возник, собственно, вопрос: а какие практические применения у подобных игрушек (RFID, я имею в виду) в DIY-сегменте? Открыть/закрыть замок какой - это понятно. Ну а дальше - что? Не будешь же делать систему допусков, как на предприятии? Зачем оно в DIY? А накидайте мне вариантов, плз - для чего всё это, кроме баловства?
А у меня метки к ней пришли неподходящие. ( Заказал правильных, сижу, жду. Меня в данном ридере привлекло заявленное расстояние чтения метки. Есть задачи, где 2-3 см мало, надо хотя бы 10. Потому к вам просьба: замерьте опытным путем максимальное расстояние с которого он берет метку. Если не трудно, конечно.
Да вот только сегодня игрался: питал от Uno, саму Uno - к USB-порту ноута. Не берёт метки с 10 см, максимум - те же 2-3 см, почти вплотную подносить приходится. Антенну пробовал переполюсовывать (ну а вдруг, хотя, понятно - там нету плюса и минуса в чистом виде) - на дальность считывания не влияет. Подключал только питание, RX/TX и антенну, выводы для внешнего светодиода не подключал. Так что не знаю, о каких 10 см может идти речь. Возможно, в идеальных условиях, да если поднять напругу на пару вольт (не стал копаться в даташите и смотреть диапазон рабочих напряжений) - ну может быть, хотя, если честно - я сомневаюсь, от слова "очень".
@ostrov: да, если что, то метки у меня такие: http://www.aliexpress.com/item/RFID...access-control-with-TK4100-EM/1041780272.html Сама плата - такая: http://www.aliexpress.com/item/UART...e-RDM6300-RDM630-For-Arduino/32258793222.html
О том, что он понимает только TK4100 и EM4100, а не любые 125КГцовые метки я понял позже чем надо. ) Расстояние замерьте, пожалуйста, а я подкину идей для воплощения. А, сорри, только сейчас заметил ответ выше! Вопрос снимается на обдумывание ответа.
Имею в наличии 6 казанных по ссылке меток. Вертикально если их подносить - не реагирует вообще, даже когда метка жопкой проходит ниже плоскости антенны. Если подносить горизонтально, то среднее расстояние, на котором происходит считывание - 2,5-3 см, не больше. Т.е. даже о 5 см речи не идёт. Повторюсь про условия: питается всё от Uno, 5В, сама Uno - от USB компа, выходное на пине 5В ардуины - 4,96В.
Да, я ответ не сразу увидел. Понял. Хреново. Я то купился на обещанные 10-15 см, придется что то другое придумывать теперь. Получается, что у него плюс только один: простота считывания кода и экономия памяти МК соответственно. А минусы: цена, хрупкость и редкость.
Можно попробовать перемотать антену\катушку. Я тоже выписывал подобный модуль, у меня он вообще не больше 1-1.5 см работал. Поэтому перешел на RC522 , низкая цена расстояние в таких же пределах(2-3см) что и у rdm630. Плюс читает NFC метки\ключи, так же проверял на телефоне Самсунг NFC , тоже работает.
Пришли еще два RDM6300 и благодаря им выяснилось почему первый не работал. Называется найди отличие (снизу рабочий): Но увы, метки видит, как сообщалось выше, еще ближе чем RC522 несмотря на внушительных размеров катушку. А потому плюс у него остался только один: простота считывания, не надо ни библиотек ни огромных кодов, сразу результат на лицо RX.
Принципиальная схема RDM6300 никому не попадалась? Думаю увеличить дальность можно увеличив размер катушки, соответственно пересчитав емкость в контуре.
Спасибо за такой хороший скетч! Я в программировании не силён, но у этого скетча есть небольшой баг, не могу определить почему. Если ключ подносить и сразу убирать - всё работает хорошо. А если ключ приложить и не убирать, то он перестаёт видеть ключ совсем, пока ресет не нажму. А в мониторе порта пишет вот так: System locked. Key known )) System unlocked. Key known )) System locked. - вот тут я ключ приложил и не убирал Key unknown Key unknown Key unknown Key unknown Несмотря на то, что это тот же самый ключ. да и вообще все известные ключи перестают работать. Помогите, кто сможет понять в чем дело)
У меня вот возникла одна безумная идея как увеличить дальность извращенным способом, но проверить пока не могу, так как ридер на руках только один. Исхожу из того, что дальность ограничена не приемником, а мощностью катушки, которая создает необходимый ток для работы чипа в брелке, это подтверждает тот факт, что карточка с бОльшим радиусом катушки срабатывает дальше. Соответственно, надо попробовать обеспечить брелок отдельным питанием. Сделать это, ничего не разбирая и не ломая, можно только одним способом - от другой катушки. То есть схема такая: одной катушкой расположенной рядом питаем, со второй считываем замеряя расстояние. Теоретически, должно ловить заметно дальше. Если это так, то кое-где вполне себе выход. У кого таких ридеров два и более? Проверить идею сможете?
А как насчет увеличить диагональ прямоугольной антенны до размеров входной двери? Это возможно? Если возможно, то что для этого нужно - пересчитать количество витков или длины провода для согласования резонанси с меткой или брелком, поставить другие транзисторы или опперационник добавить? Идея сделать охранные ворота для товаром в магазине одежды с метками на 125 КГц. Такие профессиональные ворота очень дорогие и используют другие частоты.
RFID метки EM4100 наклейки монеты 25 мм 125 кГц https://ru.aliexpress.com/item/10-RFID-EM4100-25/32873107360.html
Дистанция - 15 см. Мне это нравится)) Скорее всего попутали см с мм. Если модуляция амплитудная, то смотри считку ST-PR150EM - до 70см.