Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Считыватель карт Arduino Ethernet Rfid

Компоненты и расходные материалы

Mifare MFRC522
Подходит любой тип считывателя spi rfid
× 1
Arduino UNO
Подойдет любой Arduino
× 1
enc28j60
Вам придется изменить код для всего, что не использует ENC28J60
× 1
Перемычки (общие)
× 1
Макет (общий)
× 1
Компьютер
Любой компьютер, подключенный к Интернету
× 1

Необходимые инструменты и машины

Ножницы
Или устройства для зачистки проводов

Приложения и онлайн-сервисы

Pycharm
IDE Arduino

Об этом проекте


Вы когда-нибудь думали о добавлении 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

Аппаратное обеспечение

  1. Arduino Nano (вы всегда можете изменить свой код, чтобы он соответствовал вашему устройству)
  2. MFRC522 с картами MAIFARE
  3. Перемычки (папа-папа) (папа-мама)
  4. Ethernet-модуль / оболочка enc28j60
  5. Светодиод RGB
  6. Преобразователь постоянного и переменного тока 3 В ИЛИ 5 В более 700 миль.

Настройка

  1. Присоедините arduino к макету (если нано или микро)
  2. Поищите в Интернете распиновку вашей платы, чтобы найти настройку SPI (измените значения ниже).
  3. Подключите контакт 10 (SS) Arduino к модулю Ethernet SS или CS.
  4. Подключите вывод 12 Arduino (MISO) к RFID MISO и Ethernet SO.
  5. Подключите вывод 11 Arduino (MOSI) к RFID MOSI и Ethernet SI.
  6. Подключите вывод 13 (SCK) Arduino к RFID SCK и Ethernet SCK.
  7. Подключите вывод 9 Arduino к выводу RFID RST
  8. Подключите контакт 8 Arduino к RFID SSN.
  9. Подключите вывод 5 Arduino к зеленому светодиоду, 4 - к синему и 3 - к красному.
  10. Подключите переменный ток к постоянному току к плюсам и минусам на макетной плате.
  11. Заземлите свой Arduino от переменного тока до постоянного тока.
  12. Подключите VCC и GND на RFID и Ethernet к AC-DC (ПОМНИТЕ, ЭТИ УСТРОЙСТВА ТОЛЬКО 3 В !!!!! не обеспечивают 5 В). В случае проблемы используйте резисторы, чтобы довести напряжение до 3 В
  13. Подключите вывод VCC светодиода к Arduino 3 В или 3 В переменного тока.
  14. Подключите кабель Ethernet к модулю и убедитесь, что он находится в той же сети, что и ваш компьютер.
  15. Подключите USB-кабель от компьютера к Arduino
  16. Подключите компьютер к той же сети


Измените код в соответствии со своими потребностями

  1. Код хорошо прокомментирован, поэтому вы можете просто войти и изменить определенные части, но одно точно - это модуль ehternet.
  2. Mac-адрес может оставаться неизменным (если вы не планируете создавать их несколько)
  3. Если вы используете 192.168. базовый IP-адрес сети вы можете оставить себе IP
  4. Опять же, DNS можно оставить, только время сменить на 8.8.4.4.
  1. запустите ipconfig, чтобы найти свой шлюз, значение по умолчанию - 192.168.1.1 (если вы его не знаете) (текущий код - 192.168.1.5)
  2. запустите командную строку и введите ipconfig, чтобы узнать IP-адрес вашего компьютера.
  1. прокрутите вниз, чтобы найти ОТПРАВИТЬ НА СЕРВЕР, и введите IP-адрес вашего компьютера, или если ваш порт перенаправляет ваш маршрутизатор на ваш общедоступный IP-адрес
  2. УБЕДИТЕСЬ, ЧТО У ВАС ЕСТЬ PYTHON И ЗАПУСТИТЕ СЕРВЕР (помните, что это просто пример кода, который мы использовали для нашей презентации в школе, поэтому сервер python уже был предварительно создан и почти не изменен, вы можете использовать любой сервер Telnet / TCP)

И другой код, который вам, вероятно, потребуется изменить:


Запуск кода

  1. Подключите питание переменного и постоянного тока к стене.
  2. Убедитесь, что ваш Arduino в настоящее время подключен к компьютеру.
  3. Убедитесь, что оба устройства находятся в одной сети.
  4. Прошейте ваш измененный код Arduino или, если тот, который у меня есть, работает для вас, тогда отлично (почти нет шансов, что вам придется его изменять)
  5. Запустите свой сценарий Python, C ++ или любой другой сервер Telnet / TCP в вашей сети.
  6. На всякий случай перезапустите Arduino.
  7. Подождите, пока индикатор не станет синим, и попробуйте сканировать карту. Если ваш сервер получил идентификатор карты, значит, вы готовы к работе.
  8. Помните, что означают индикаторы. Пурпурный / исчезающий красный означает загрузку.
  9. Красный цвет означает любую ошибку, такую ​​как карта была под странным углом и / или сервер не ответил вовремя.
  10. Зеленый цвет означает, что сервер прошел успешно, и вы можете прочитать следующую карточку.
  11. Синий означает ожидание / загрузка, ожидание карты или ответа.
  12. Если ваш arduino начинает отставать и горит красным светом требуется более 30 секунд, это означает, что модуль arduino ethernet вообще не может подключиться к серверу. Это может быть вызвано несколькими причинами:сначала ваш arduino не имеет достаточной мощности, и модуль arduino ethernet изо всех сил пытается отправить пакет, или что ваш компьютер-сервер не работает, или что ваш arduino и компьютер не находятся в одной сети.
  13. Если ваш Arduino продолжает отставать, попробуйте эти уловки, чтобы их исправить

  14. Отключить брандмауэр Windows

  15. перейдите в расширенные настройки брандмауэра и разрешите входящий / исходящий порт 23
  16. порт перенаправляет ваш маршрутизатор на ваш компьютер с портом 23
  17. Если вы используете беспроводное соединение, подключите Arduino прямо к маршрутизатору, а ваш компьютер - к одному и тому же.
  18. Купите более мощный адаптер питания переменного и постоянного тока.
  19. Иначе, возможно, вы неправильно ввели свой IP-адрес или адрес подключения

  20. Либо свяжитесь со мной по [email protected], если возникнут проблемы

  21. МОЖНО УЗНАТЬ !!!

Помните, что для системы дверных замков нет кода, потому что у меня его нет, это означает, что вам придется добавить код, если вы хотите использовать его не только в качестве системы отслеживания, но и в качестве системы отслеживания дверных замков.


Пожалуйста, прочтите ниже:

Код

  • Код 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

Схема

Схема простая, поэтому я просто сделал фото с проводкой.

Производственный процесс

  1. Поздравительная открытка
  2. Кредитная карта
  3. RFID-замок Arduino с RC522 - протокол MIFARE 13,56 МГц
  4. Учебное пособие по блокировке RFID для Arduino
  5. Система посещаемости с использованием Arduino и RFID с Python
  6. Arduino Spybot
  7. FlickMote
  8. Самодельный телевизор B-Gone
  9. Основные часы
  10. Считыватель гибких дисков Arduino Amiga (V1)