Помогите с замком RFID
- Войдите на сайт для отправки комментариев
Помогите с замком. Хочу сделать чтобы открывается и закрывается одной картой - один раз приложил замок открылся второй раз приложил закрылся. В этом примере это реализуется двумя картами. Спасибо за помощь
#include <SPI.h>
#include <MFRC522.h>
/*
подключение для Arduino Uno и Mega, производится к разным Pin!
----------------------------------------------------- Nicola Coppola
* Pin layout should be as follows:
* Signal Pin Pin Pin
* Arduino Uno Arduino Mega MFRC522 board
* ------------------------------------------------------------
* Reset 9 5 RST
* SPI SS 10 53 SDA
* SPI MOSI 11 51 MOSI
* SPI MISO 12 50 MISO
* SPI SCK 13 52 SCK
*/
// два Pin (SS и RST)
// !(SS - он же - SDA).
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp;
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC.
Serial.println(" Waiting for card...");
SPI.begin();
mfrc522.PCD_Init();
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(7, HIGH);
}
void loop() {
// Look for new cards.
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards.
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
uidDec = 0;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
uidDecTemp = mfrc522.uid.uidByte[i];
uidDec = uidDec*256+uidDecTemp;
}
Serial.println("Serijnyj nomer karty / Card UID: ");
Serial.println(uidDec);
// ------------------------
// начинаем сравнивать номер "UID", поднесённой к ридеру карты,
// с записанным номером "UID" карты в sketch.
if (uidDec == 3000069413) // если "UID" номер совпал.
{
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
Serial.println("Hi 1");
}
else if (uidDec == 4088880000)
{
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
Serial.println("Hi 2");
}
else //
{
digitalWrite(5, HIGH);
Serial.println("unknown card");
}
Serial.println("=====================================");
delay(5000); // пауза
digitalWrite(5, LOW);
}
Помогите с замком. Хочу сделать чтобы открывается и закрывается одной картой - один раз приложил замок открылся второй раз приложил закрылся. В этом примере это реализуется двумя картами. Спасибо за помощь
Вместо прямого действия (номер карты совпал - открываем дверь) введите флаг состояния (номер карты совпал - меняем состояние на противоположное). Потом добавте еще один блок в программу - в зависимости от флага открыть или закрыть дверь.
Уже три дня пытаюсь сделать и ничего не получается можно подробнее какой то пример как использовать этот флаг состояния ? Спасибо
Вместо
Сделайте
Затем, в зависимости от состояния isLocked управляйте замком.
переделал как вы написали, очень благодарен за помощь я только начал осваивать программирование подскажите пожалуйста как управлять через boolean islocked меня интересует чтобы было только открыть digitalWrite(6, HIGH); digitalWrite(7, LOW); закрыть digitalWrite(7, HIGH); digitalWrite(6, LOW); и все. Мой скетч переработан по Вашим советам:
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp;
boolean isLocked = true;
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC.
Serial.println(" Waiting for card...");
SPI.begin();
mfrc522.PCD_Init();
pinMode(7, OUTPUT); //синий взято на охрану
pinMode(6, OUTPUT); // зеленый охрана отключена
pinMode(5, OUTPUT); // красный неверная карта
digitalWrite(7, HIGH);
}
void loop() {
// Look for new cards.
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards.
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
uidDec = 0;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
uidDecTemp = mfrc522.uid.uidByte[i];
uidDec = uidDec*256+uidDecTemp;
}
Serial.println("Serijnyj nomer karty / Card UID: ");
Serial.println(uidDec);
// ------------------------
// начинаем сравнивать номер "UID", поднесённой к ридеру карты,
// с записанным номером "UID" карты в sketch.
if (uidDec == 3000069413) // если "UID" номер совпал.
{
isLocked = !isLocked;
if (isLocked == true){
isLocked = false;
}else{
isLocked = true;
}
}
else //
{
digitalWrite(5, HIGH);
Serial.println("unknown card");
}
Serial.println("=====================================");
delay(5000); // пауза
digitalWrite(5, LOW);
}
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
За невыполнение ругают.
переделал как вы написали, очень благодарен за помощь я только начал осваивать программирование подскажите пожалуйста как управлять через boolean islocked меня интересует чтобы было только открыть digitalWrite(6, HIGH); digitalWrite(7, LOW); закрыть digitalWrite(7, HIGH); digitalWrite(6, LOW); и все. Мой скетч
вы об этом?
я так и делаю но когда прикладываю карту замок открывается а закрываться не хочет вот мой последний скетч
P.S Спасибо за подсказку о вставке кода
будьте внимательны:
эта строка:
и это конструкция:
равнозначны, т.е. по сути - одно и то-же.
Я конструкцию спрятал в комментарии. А вы поместили ее в свой код.
Это значит, что ваша программа делает одно и тоже два раза подряд.
Уберите что-то одно из программы и все должно заработать.
Действительно нашел ошибку. Все работает. Большое спасибо. Буду дальше экспериментировать)
подскажите плиз как сделать что бы опрос шёл переодически ну примерно пускай каждые 5 секунд и если карта отсутствует скажем 15 секунд замок закрылся
взять переменную куда записывать миллис() когда приложенна карта, и сравнивать разность миллис() и переменной с 15 секундами - если больше закрывать дверь. Так пока карта приложена разность всегда меньше.
Gippopotam здравствуйте помогите разобраться.
тоже собрал систему доступа на RFID. всё работало отлично.
решил добавить, чтоб и с радио брелка открыть можно было. в месте они не работают, кнопка и NFC, а по отдельности, если заремить, пол кода, вполне даже быстро. вот если за ремить с 37 по 56 строки , Радио брелок открывает замок. если оставить как есть то только, карты доступа. Радио доступ отазывается работать. и после После 56 строки ничего не работает. Ардвинка на код не ругается. подскажите как заставить их работать, чтоб и карта доступа работала и радио брелок. конечно не сенхронно. а на выбор. у кого есть карта, и удалённо с радио брелка кнопка. Что не так с этим кодом. возможно что тут конфликт библиотек ??
пробовал и через флаг, и через switch отделял блоки.
Кто нибудь поможет . с кодом, управление доступа по RFIF, и открыть по радио. #12
попробуй с 37 по 56 написать так:
Кто нибудь поможет . с кодом, управление доступа по RFIF, и открыть по радио. #12
Ваша проблема в строке 23.
homejk спасибо за скетч и всем кто помог доработать. Сам дуб в этом всём. Немного добавил от себя сохранение в еепром последнее состояние замка, что бы после выкл/вкл устройства он оставался, например, закрыт. Знающие проверте, пожалуйста, на кривизну кода ). Точнее, может быть есть способ проще и/или вообще минуя еепром?
строка 55 вызывает сомнения - я не знаток C++ но вроде бы так нельзя сравнивать.
строки 62,63 и 68,69 можно обьединить и вынести за IF
Сравнение меток утащил из какого то примера. А по 62,63 и 68,69 - точно. Спасибо.
Сравнение меток утащил из какого то примера.
Вот в этом и проблема. Когда тащат друг у друга неправильный код, даже не вникая и не проверяя.
Вместо запятой надо использовать логические операторы.
Я стащил и проверил на плате. Оба ключа работают в данной задаче. Ну и как чисто механник, решил что всё в порядке ), да и вычеслений дальнейших нет с использованием uid_ов, т.е. || или , в моём случае без разницы, я так думаю.
Не стреляйте, я лет 25 программированием не занимался.
дайте финальный скетч попробую на своем ардуино что у Вас получилось
После сброса, состояние выходов получалось вообщи ни какое, добавил конструкцию 27-35. Выглядит не элегантно, но работает ). Про запятую вы были правы.
зачем только это в loop пихать ?
Вот, уже элегантнее. Спасибо.
зачем только это в loop пихать ?
Из за отсутствия знаний. Я как в тёмном сарае с граблями.
Автор наверно не в курсе что по UID делать открытие замка нельзя, к вам воры залезут.
замок прекрасно работает уже 3 года как по Вашему «вор» подберет UID методом бутфорсу? или украдет карту?
Есть считыватели даже за 800 рублей, пройдете мимо его и все, номер карты прочитан. Склонировать номер карты на балванку все очень просто. Да и зачем тогда ставить Mifare если по такому же принципу работает EmMarin ? Посмотрите на алиэкспрес считыватели и видосы на ютюбе..но это дело лично ваше, спорить незачем.
А вот если бы вы написали как стереть запрограммированую карту к заводскому варианту то это да - заслуживает внимание.
замок прекрасно работает уже 3 года как по Вашему «вор» подберет UID методом бутфорсу? или украдет карту?
достаточно на долю секунды поднести вашу карту к своему считывателю - и UID прочитан. А собрать считыватель ровно также просто, как и замок - детали те же.
Вывод - RFID замок на принципе проверки UID - не замок вовсе, скорее как шпингалет в туалете
Не все так просто у меня брелок с четырьмя UID, без нажатия кнопки на нем вы ничего не считайте! Но если предложите вариант как организовать шифрование будет интересно посмотреть!
Элементарно.
на Мифаре есть закрытые блоки, которые можно прочитать, только зная пароль. Записываете UID карты в таком блоке, и замок должен открываться, только если ID в заголовке карты и в закрытом блоке совпали. Код элементарный, а надежность замка на несколько порядков выше. Теперь пусть кто угодно сканирует и копирует вашу карту - замок он не откроет
Сейчас уже можно купить считыватели именно стандарта NXP? Ссылку можно.
это все можно организовать на существующем оборудовании RC522 или нужно что-то другое? можно какой-то пример или ссылку на такой проект?
В библиотечных примерах это есть.
Или туда религия заглядывать не позволяет ?
в примерах к RC522 не нашел ничего по шифрованию, даже если есть вопрос насколько это все будет надежно так как теперь умудряются клонировать банковские карты для себя купил вот такой брелок на али ничего не скопируется пока не нажата кнопка плюс добавляется фунционал https://aliexpress.ru/item/4000555087326.html?spm=a2g0s.9042311.0.0.1f2033edvA3dQd
Доброго дня, простите за элементарный вопрос, но. Все получается только застрял над вопросом как в коде добавить еще несколько меток для замка...
ВОТ ЗДЕСЬ!!! if (content.substring(1) == "66 78 84 25" )
Какой синтаксис применить надо?
Заранее Благодарен)
Для начала научитесь правильно вставлять код в комментарий, в моем скетчи метки добавляются вот так
Enable GingerCannot connect to Ginger Check your internet connection
or reload the browserDisable in this text fieldEditEdit in GingerEdit in Ginger×
Благодарю, научусь обязательно, но..
У вас в десятичной, а у меня все построено в 16 ти(
БЛАГОДАРЮ. работает) Хорошего дня!
RFID по-мойму не дюже надёжная тема. Тонны подтверждений тому есть. Но даже не в этом дело. Как хто думает, а не надежней будет ИК ключик для замка с кодом? Считать такой со стороны нет возможности, совсем, ибо слабым его сотворить можно ( только чтоб доставал 20-30 см. не более), никуда не летит далеко. Подошел близко к окошку приемника, ПИН-код с мини-пульта ввел и сим-сим открылся) Гораздо всё проще будет, и не менее надежно.
Идеального замка не существует к сожалению, мы здесь обсуждаем замок на основе технологии RFID технические нюансы, совершенствования то что вы предлагаете это совсем другая технология ее можно добавить в этот замок или создать отдельный проект. Вопрос надежности это отдельный вопрос - взломать можно что угодно вопрос в наличии времени и ресурсов
RFID по-мойму не дюже надёжная тема. Тонны подтверждений тому есть.
можно сделать понадежнее, если внимательно читать документацию, а не как в этой ветке. Представленный в этой ветке замок - бесполезная игрушка, ключ от него может клонировать любой школьник. Автору об этом писали еще год назад - но он только отмахнулся.
автор написал как решил проблему возможного клонирования ключа (брелок с кнопкой или кошелек с защитой от считывания таких валом на али) а по поводу добавить шифрования легко писать «можно сделать понадежнее» о призрачных документациях и примерах которых по факту не существует если не так то наведите рабочий скетч данной реализации?
по поводу добавить шифрования легко писать «можно сделать понадежнее» о призрачных документациях и примерах которых по факту не существует если не так то наведите рабочий скетч данной реализации?
ну ты правда такой темный?
Почитал бы, как мифаре карты устроены. То, что кроме UID на карте 1К еще 16 секторов по 64 байта - не слыхал? и у каждого можно установить свой пароль и записать туда свои данные. Как читать и писать данные - есть в примерах к либе.
Ты хотя бы свой номер ключа для замка положи в такой блок и защити паролем, чтобы только твой замок мог эти данные прочитать - тогда клонировать карту будет бессмысленно и защита замка вырастет на несколько порядков.
Не ты а Вы, мы не знакомые, на счет «темный» не буду комментировать так как не могу опускаться до вашего уровня, для продолжения беседы рабочий скетч пожалуйста ?! бросать с «wiki» умные фразы может каждый вы покажите реализацию
homejk, если Вам нужна "реализация", ее уместнее просить в разделе "Ищу исполнителя".
мне ничего не нужно все прекрасно работает не один год, зачем меняете аккаунт никто вас ни к чему не принуждает научитесь признавать ошибки )
мне ничего не нужно все прекрасно работает не один год, зачем меняете аккаунт
homejk - никто ничего не меняет. мы два разных человека, правда :) Просто ваша дремучесть очевидна не только мне - вот народ и подтягивается. Вы бы все-таки прочитали что-то на тему"RFID для чайников", а то уже стыдно должно быть. Это уже выглядит так, будто я вам говорю "2х2 =4" - а вы мне "Не верю, покажите код"
Я вполне понимаю. что когда вы писали этот код в 2015 году - это был ваш первый скетч в Ардуино. И тогда такой код был простителен. Но неужели вы за 6 лет вообще не продвинулись в программировании и не научились читать документацию?