Считыватель карт Arduino Ethernet Rfid
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Необходимые инструменты и машины
|
Приложения и онлайн-сервисы
| ||||
|
Об этом проекте
Вы когда-нибудь думали о добавлении RFID-меток / системы безопасности карт или системы мониторинга в свой дом и / или офис. Хорошо, если вы попали сюда, держу пари, вы уже посмотрели, насколько они чертовски дорогие, в диапазоне от 200 до 2000 долларов, СЛИШКОМ ПРАВИЛЬНО! ?? Мы с другом решили создать систему, которая стоила бы меньше 100 долларов и могла бы делать даже больше, чем просто доступ к двери, поэтому мы и пришли к этому. Считыватель RFID-тегов Arduino с подключением к Интернету. что за 20 долларов больше можно открыть двери. Эта система была разработана для отслеживания учеников в нашей старшей школе, и мы надеемся, что школа одобряет ее.
Вот прототип:
Вы можете подумать, что это может занять много времени, ятта ятта ятта. Тем не менее, это заняло у меня всего около 6 часов (потому что у меня были проблемы с питанием), но это может занять у вас около 30 минут, чтобы настроить, как в примере выше. Весь код и изображения приведены ниже, поэтому, если вы запутались в следующих шагах, посмотрите на нижние изображения / код.
Вот все шаги:
Прежде чем мы начнем (необходимо)
Прежде чем мы сможем начать сканирование карт и их отправку на наш Telnet / TCP-сервер, нам понадобятся некоторые библиотеки. Получите UIPEthernet здесь https://github.com/ntruchsess/arduino_uip
получите MFRC522 здесь https://github.com/miguelbalboa/rfid
Поместите обе эти библиотеки в Program Files (x86) / Arduino / Libraries / Restart arduino
Аппаратное обеспечение
- Arduino Nano (вы всегда можете изменить свой код, чтобы он соответствовал вашему устройству)
- MFRC522 с картами MAIFARE
- Перемычки (папа-папа) (папа-мама)
- Ethernet-модуль / оболочка enc28j60
- Светодиод RGB
- Преобразователь постоянного и переменного тока 3 В ИЛИ 5 В более 700 миль.
Настройка
- Присоедините arduino к макету (если нано или микро)
- Поищите в Интернете распиновку вашей платы, чтобы найти настройку SPI (измените значения ниже).
- Подключите контакт 10 (SS) Arduino к модулю Ethernet SS или CS.
- Подключите вывод 12 Arduino (MISO) к RFID MISO и Ethernet SO.
- Подключите вывод 11 Arduino (MOSI) к RFID MOSI и Ethernet SI.
- Подключите вывод 13 (SCK) Arduino к RFID SCK и Ethernet SCK.
- Подключите вывод 9 Arduino к выводу RFID RST
- Подключите контакт 8 Arduino к RFID SSN.
- Подключите вывод 5 Arduino к зеленому светодиоду, 4 - к синему и 3 - к красному.
- Подключите переменный ток к постоянному току к плюсам и минусам на макетной плате.
- Заземлите свой Arduino от переменного тока до постоянного тока.
- Подключите VCC и GND на RFID и Ethernet к AC-DC (ПОМНИТЕ, ЭТИ УСТРОЙСТВА ТОЛЬКО 3 В !!!!! не обеспечивают 5 В). В случае проблемы используйте резисторы, чтобы довести напряжение до 3 В
- Подключите вывод VCC светодиода к Arduino 3 В или 3 В переменного тока.
- Подключите кабель Ethernet к модулю и убедитесь, что он находится в той же сети, что и ваш компьютер.
- Подключите USB-кабель от компьютера к Arduino
- Подключите компьютер к той же сети
Измените код в соответствии со своими потребностями
- Код хорошо прокомментирован, поэтому вы можете просто войти и изменить определенные части, но одно точно - это модуль ehternet.
- Mac-адрес может оставаться неизменным (если вы не планируете создавать их несколько)
- Если вы используете 192.168. базовый IP-адрес сети вы можете оставить себе IP
- Опять же, DNS можно оставить, только время сменить на 8.8.4.4.
- запустите ipconfig, чтобы найти свой шлюз, значение по умолчанию - 192.168.1.1 (если вы его не знаете) (текущий код - 192.168.1.5)
- запустите командную строку и введите ipconfig, чтобы узнать IP-адрес вашего компьютера.
- прокрутите вниз, чтобы найти ОТПРАВИТЬ НА СЕРВЕР, и введите IP-адрес вашего компьютера, или если ваш порт перенаправляет ваш маршрутизатор на ваш общедоступный IP-адрес
- УБЕДИТЕСЬ, ЧТО У ВАС ЕСТЬ PYTHON И ЗАПУСТИТЕ СЕРВЕР (помните, что это просто пример кода, который мы использовали для нашей презентации в школе, поэтому сервер python уже был предварительно создан и почти не изменен, вы можете использовать любой сервер Telnet / TCP)
И другой код, который вам, вероятно, потребуется изменить:
Запуск кода
- Подключите питание переменного и постоянного тока к стене.
- Убедитесь, что ваш Arduino в настоящее время подключен к компьютеру.
- Убедитесь, что оба устройства находятся в одной сети.
- Прошейте ваш измененный код Arduino или, если тот, который у меня есть, работает для вас, тогда отлично (почти нет шансов, что вам придется его изменять)
- Запустите свой сценарий Python, C ++ или любой другой сервер Telnet / TCP в вашей сети.
- На всякий случай перезапустите Arduino.
- Подождите, пока индикатор не станет синим, и попробуйте сканировать карту. Если ваш сервер получил идентификатор карты, значит, вы готовы к работе.
- Помните, что означают индикаторы. Пурпурный / исчезающий красный означает загрузку.
- Красный цвет означает любую ошибку, такую как карта была под странным углом и / или сервер не ответил вовремя.
- Зеленый цвет означает, что сервер прошел успешно, и вы можете прочитать следующую карточку.
- Синий означает ожидание / загрузка, ожидание карты или ответа.
- Если ваш arduino начинает отставать и горит красным светом требуется более 30 секунд, это означает, что модуль arduino ethernet вообще не может подключиться к серверу. Это может быть вызвано несколькими причинами:сначала ваш arduino не имеет достаточной мощности, и модуль arduino ethernet изо всех сил пытается отправить пакет, или что ваш компьютер-сервер не работает, или что ваш arduino и компьютер не находятся в одной сети.
-
Если ваш Arduino продолжает отставать, попробуйте эти уловки, чтобы их исправить
-
Отключить брандмауэр Windows
- перейдите в расширенные настройки брандмауэра и разрешите входящий / исходящий порт 23
- порт перенаправляет ваш маршрутизатор на ваш компьютер с портом 23
- Если вы используете беспроводное соединение, подключите Arduino прямо к маршрутизатору, а ваш компьютер - к одному и тому же.
- Купите более мощный адаптер питания переменного и постоянного тока.
-
Иначе, возможно, вы неправильно ввели свой IP-адрес или адрес подключения
-
Либо свяжитесь со мной по [email protected], если возникнут проблемы
- МОЖНО УЗНАТЬ !!!
Помните, что для системы дверных замков нет кода, потому что у меня его нет, это означает, что вам придется добавить код, если вы хотите использовать его не только в качестве системы отслеживания, но и в качестве системы отслеживания дверных замков.
Пожалуйста, прочтите ниже:
Код
- Код Arduino
- Пример кода сервера
Код Arduino C / C ++
Это программное обеспечение идет на Arduino, почти готовое к работе, поэтому вам нужно просто настроить шлюз, IP, шлюз, MAC-адрес и dns/ * * ------------ ---------------------- * MFRC522 Arduino * Считывающее устройство / 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 // Для выбора ключа # include // Библиотека ключей RFID # define RST_PIN 9 // Настраиваемая, см. Типичное расположение выводов выше - Это для Arduino Nano - Для RFID # define SS_PIN 8 // МЫ ИСПОЛЬЗУЕМ 8 ДЛЯ RFID, ПОТОМУ ЧТО МОДУЛЬ ETHERNET ИСПОЛЬЗУЕТ 10-байтовый сектор =0; byte blockAddr =0; //////// Доступ к определенным секторам / блокам на карте, блок трейлера - это последний байт блока трейлерBlock =1; int red =3; int blue =4; // Контакты для RGB LEDint green =5; EthernetClient client; // ETHERNET INSTANCEMFRC522 mfrc522 (SS_PIN, RST_PIN); // Создание экземпляра MFRC522. MFRC522 ::MIFARE_Key key; // Установить длительный тайм-аут экземпляра ключа; // ТАЙМ-АУТ, ТАК ЭТО НЕ СИДЕТСЯ ТАМ НАВСЕГДА, избегайте setup () {// НАЧИНАЕТСЯ пользовательский интерфейс pinMode (красный, ВЫХОД); pinMode (синий, ВЫХОД); // Запускаем светодиодный индикатор RGB pinMode (зеленый, ВЫХОД); Перезагрузить(); // Начинаем с выключенными светодиодами Serial.begin (9600); // Запускаем компьютерное соединение со скоростью 9600 бит в секунду // UI END // ETHERNET МОДУЛЬ НАЧАЛЬНЫЙ 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 IPAddress mdns (8,8,8,8); // DNS =8.8.8.8 IP-адрес mgate (192,168,1,5); // ШЛЮЗ =192.168.1.5 IP-адрес msubnet (255,255,255,0); // ПОДСЕТЬ =255.255.255.0 Ethernet.begin (mac, mip, mdns, mgate, msubnet); // ПОДКЛЮЧЕНИЕ С ИСПОЛЬЗОВАНИЕМ ВЫШЕ Serial.println ("Успешное соединение"); // КОНЕЦ ETHERNET for (int t =255; t> 0; t--) {analogWrite (red, t); //// Больше показа, но пусть хотя бы секунда между SPI Ethernet и задержкой RFID (10); } // НАЧАЛЬНЫЙ RFID mfrc522.PCD_Init (); // Инициализировать карту MFRC522 для (byte i =0; i <6; i ++) {// Подготовить ключ (используемый как как ключ A, так и как ключ B) key.keyByte [i] =0xFF; // используя FFFFFFFFFFFFh, который используется по умолчанию при доставке чипа с завода} Serial.println (F ("Сканировать карту")); dump_byte_array (key.keyByte, MFRC522 ::MF_KEY_SIZE); // Получить размер ключевого байта timeout =0; задержка (2000); Reset ();} // ЗАКОНЧИТЬ RFID INITIALvoid loop () // Бежать вечно {// Искать новые карты if (! Mfrc522.PICC_IsNewCardPresent ()) {digitalWrite (blue, LOW); возвращение; } // Выбираем одну из карточек if (! Mfrc522.PICC_ReadCardSerial ()) return; digitalWrite (синий, ВЫСОКИЙ); // Показываем пользователю, что карта прочитана байт 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 () {Ошибка) возвращение; } статус байта; байтовый буфер [18]; размер байта =sizeof (буфер); status =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 =mfrc522.MIFARE_Read (blockAddr, buffer, &size); if (status! =MFRC522 ::STATUS_OK) {Serial.print (F ("Ошибка MIFARE_Read ():")); Serial.println (mfrc522.GetStatusCodeName (статус)); Ошибка(); } // Остановить 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 (буфер, размер); client.println (ID); Serial.println ("отправлено:" + ID); задержка (10); while (client.available () ==0) {if (timeout - millis () <0) перейти к закрытию; } int size; в то время как ((размер =client.available ())> 0) {uint8_t * msg =(uint8_t *) malloc (размер); size =client.read (сообщение, размер); Serial.write (сообщение, размер); if (size ==sizeof ("g") - 1) {Pass (); } else {Ошибка (); } бесплатно (сообщение); } закрыть:client.stop (); } else {Serial.println ("Не удалось подключиться к серверу"); Ошибка(); } // КОНЕЦ ОТПРАВКИ НА СЕРВЕР Reset (); // ПЕРЕЗАПУСК ЦИКЛА БЕЗ СВЕТОДИОДОВ} // ПРЕВРАЩАЕМ БУФЕРНЫЙ Массив в ОДНУ СТРОКУ, КОТОРАЯ ЗАПИСЫВАЕТ НАШ ИДЕНТИФИКАЦИЮ СЕКТОРА И BLOCKString 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-сокет, подключенный к клиенту self.data =self.request.recv (1024) .strip () print "{} Written:". Format (self.client_address [0]) print self.data "" "ЗДЕСЬ ЗАДАЧИ SQL if (self.data ==SQL NAME или что-то в этом роде) {self.request .sendall ("g") // отправить хорошее // ВСТАВИТЬ ВРЕМЯ И МЕСТОПОЛОЖЕНИЕ В SQL ЗДЕСЬ {else {self.request.sendall ("bb") // отправить плохой // НИЧЕГО не отправлять, просто отправить в 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
Схема
Схема простая, поэтому я просто сделал фото с проводкой.Производственный процесс
- Поздравительная открытка
- Кредитная карта
- RFID-замок Arduino с RC522 - протокол MIFARE 13,56 МГц
- Учебное пособие по блокировке RFID для Arduino
- Система посещаемости с использованием Arduino и RFID с Python
- Arduino Spybot
- FlickMote
- Самодельный телевизор B-Gone
- Основные часы
- Считыватель гибких дисков Arduino Amiga (V1)