Uefi или legacy что лучше. Uefi - что это такое?Загрузочная флешка Uefi. Установка Uefi. Чем uefi лучше биос

Ведущего канала youtube “AlexGyver” просили сделать электронный замок своими руками. Добро пожаловать на цикл видео про электронные замки на arduino. В общих чертах мастер объяснит идею.

Есть несколько вариантов создания системы электронного замка. Чаще всего используются для запирания дверей и ящиков, шкафов. А также для создания тайников и потайных сейфов. Поэтому нужно сделать макет, с которым удобно работать и можно наглядно и подробно показывать устройство системы изнутри и снаружи. Поэтому решил сделать раму с дверцей. Для этого понадобится квадратный брус 30 x 30. Фанера 10мм. Дверные петли. Изначально хотел сделать фанерный ящик, но вспомнил, что в комнате всё завалено запчастями. Подобный ящик некуда поставить. Поэтому будет сделан макет. Если кто-то хочет поставить себе электронный замок, то, глядя на макет можно с легкостью всё повторить.

Все, что нужно для замка, найдете в этом китайском магазине .

Цель – разработать максимально эффективные схемы и прошивки для электронных замков. Вы сможете использовать эти результаты для установки этих систем на свои двери, ящики, шкафы и тайники.

Дверца готова. Теперь нужно придумать, как открывать и закрывать электронным способом. Для этих целей подходит мощная соленоидная щеколда с aliexpress (ссылка на магазин выше). Если подать на выводы напряжения, она откроется. Сопротивление катушки почти 12 ом, значит при напряжении 12 вольт катушка будет кушать около 1 ампера. С такой задачей справится и литиевый аккумулятор и повышающий модуль. Настраиваем на соответствующее напряжения. Хотя можно и чуть больше. Щеколда крепится на внутренней стороне дверцы на расстоянии, чтобы не цепляла край и могла захлопываться. Щеколды должна быть ответной частью в виде металлического короба. Использовать ее без этого неудобно и неправильно. Придётся поставить ступеньку, хотя бы создавалась видимость нормальной работы.

В холостом режиме щеколда открывается нормально, то есть если на дверце есть ручка, подаем импульс, дверку за ручку открываем. Но если подпружинить, этот способ уже не подходит. Повышающий преобразователь не справляется с нагрузкой. Для открытия подпружиненный дверцы придется использовать большие аккумуляторов и более мощный преобразователь. Либо сетевой источник питания и забить на автономности системы. В китайских магазинах есть щеколды больших размеров. Они подойдут для ящиков. Питания можно подавать при помощи реле или мосфет транзистора, либо силового ключа на том же транзисторе. Более интересно и менее затратный вариант – сервопривод, соединенный с шатуном с любым запирающим элементом – шпингалет или более серьёзные задвижка. Он может понадобиться также кусочек стальной спицы, выполняющей роль шатуна. Такой системе не нужен большой ток. Но она занимает больше места и более хитрая логика управления.

Есть два типа сервоприводов. Маленькие слабенькие и большие мощные, которыми можно спокойно задвинуть в отверстия в серьёзные металлические штыри. Оба показанных вариантов работают как на дверцах, так и на выдвижных ящиках. С ящиком придется повозиться, проделывая отверстие в выдвижной стенке.

Вторая часть

В данном уроке мы научимся делать простую систему, которая будет отпирать замок по электронному ключу (Метке).

В дальнейшем Вы можете доработать и расширить функционал. Например, добавить функцию "добавление новых ключей и удаления их из памяти". В базовом случае рассмотрим простой пример, когда уникальный идентификатор ключа предварительно задается в коде программы.

В этом уроке нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

2) Теперь нужно подключить Зуммер, который будет подавать сигнал, если ключ сработал и замок открывается, а второй сигнал, когда замок закрывается.

Зуммер подключаем в следующей последовательности:

Arduino Зуммер
5V VCC
GND GND
pin 5 IO

3) В роли отпирающего механизма будет использоваться сервопривод. Сервопривод может быть выбран любой, в зависимости от требуемых вам размеров и усилий, который создает сервопривод. У сервопривода имеется 3 контакта:

Более наглядно Вы можете посмотреть, как мы подключили все модули на картинке ниже:

Теперь, если все подключено, то можно переходить к программированию.

Скетч:

#include #include #include // библиотека "RFID". #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате Servo servo; void setup() { Serial.begin(9600); Serial.println("Waiting for card..."); SPI.begin(); // инициализация SPI / Init SPI bus. mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. servo.attach(6); servo.write(0); // устанавливаем серву в закрытое сосотояние } void loop() { // Поиск новой метки if (! mfrc522.PICC_IsNewCardPresent()) { return; } // Выбор метки 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("Card UID: "); Serial.println(uidDec); // Выводим UID метки в консоль. if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданому то серва открывает. { tone(5, 200, 500); // Делаем звуковой сигнал, Открытие servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.) delay(3000); // пауза 3 сек и механизм запирается. tone(5, 500, 500); // Делаем звуковой сигнал, Закрытие } servo.write(0); // устанавливаем серву в закрытое сосотояние }

Разберем скетч более детально:

Для того, что бы узнать UID карточки(Метки), необходимо записать данный скетч в arduino, собрать схему, изложенную выше, и открыть Консоль (Мониторинг последовательного порта). Когда вы поднесете метку к RFID, в консоли выведется номер

Полученный UID необходимо ввести в следующую строчку:

If (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданному то сервопривод открывает задвижку.

У каждой карточки данный идентификатор уникальный и не повторяется. Таком образом, когда вы поднесете карточку, идентификатор которой вы задали в программе, система откроет доступ с помощью сервопривода.

Видео:

Arduino является лучшей системой для копирования какого-либо оборудования. Большинство идей не смогли бы воплотиться без нее. Давно существует такая мысль: создать специальный кодовый замок на ардуино. Для его открытия необходимо зажатие определенной клавиши. При этом замок не должен открываться, даже если знать нужную кнопку. Чтобы его отрыть необходимо выдержать определенные интервалы, используя мышечную память. Такое преступник не сможет совершить. Но это все лишь теория.

Чтобы его собрать нужно воспользоваться специальным прибором прямоугольных импульсов, а также несколько счетчиков и ворох. Но готовое устройство имело бы большие габаритные размеры и его неудобно было бы использовать. Как правило, такие мысли не дают покоя. Первым этапом при воплощении мечты стало создание программы под Arduino. Именно она будет служить в качестве кодового замка. Для того чтобы открыть его понадобится нажать не одну клавишу, а несколько, причем делать это одновременно. Готовая схема выглядит таким образом:

Качество картинки не лучшее, но подключение выполняется к земле, D3, D5, D7, D9 и D11.

Код представлен ниже:

Const int ina = 3; const int inb = 5; const int inc = 9; const int ledPin = 13; int i = 1000; byte a = 0; byte b = 0; byte c = 0; byte d = 0; unsigned long time = 0; //не забывайте всё, что принимает значение millis() unsigned long temp = 0; //хранить в unsigned long byte keya = { 0, 0, 0, 0, 0, 0, 0, 0}; //коды собственно byte keyb = { 1, 1, 1, 1, 0, 1, 0, 0}; byte keyc = { 1, 0, 1, 0, 1, 1, 1, 0}; byte k = 0; void setup() { pinMode(ina, INPUT_PULLUP); //3 входа, подключаемые к кнопкам pinMode(inb, INPUT_PULLUP); pinMode(inc, INPUT_PULLUP); pinMode(ledPin, OUTPUT); //встроенный светодиод на 13-ом пине pinMode(7, OUTPUT); pinMode(11, OUTPUT); digitalWrite(7, LOW); //заменяют землю digitalWrite(11, LOW); time = millis(); //нужно для отсчёта времени } void blinktwice() { //двойное мигание светодиодом digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(100); digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(200); } void loop() { if(k==0) { blinktwice(); //приглашение ввести код } if (k == 8) { digitalWrite(ledPin, HIGH); delay(3000); k = 0; } a = digitalRead(ina); //считываются уровни сигналов с кнопок - нажата/не нажата b = digitalRead(inb); c = digitalRead(inc); delay(100); //следующий if - защита против ложных срабатываний, можно не использовать if((digitalRead(ina) == a)&&(digitalRead(inb) ==b)&&(digitalRead(inc)==c)) { if (a == keya[k]) { if (b == keyb[k]) { if (c == keyc[k]) { k++; } } } } if (k==1) { if (d ==0) { time = millis (); d++; } } temp = millis(); temp = temp - time; if (temp > 10000) { k= 0; d=0; time = millis (); } }

Чтобы не возникало лишних вопросов по коду, следует разъяснить некоторые моменты. Функция setup используется для назначения портов. Следующая функция – Input_Pullup, которая необходима для увеличения напряжения пина на 5 В. Это осуществляется с помощью резистора. Благодаря этому не будут возникать различные короткие замыкания. Для большего удобства рекомендуется применять функцию blinktwice. Вообще при создании различных программ нужно пробовать другие функции.

После назначения функций происходит считывание сигнала с портов. Если кнопка нажата, то это будет обозначаться цифрой 1, а если нет – 2. Далее, происходит анализ всех значений. Например, появилась такая комбинация, как 0,1,1. Это означает, что первая клавиша нажата, а остальные две нет. Если все значения выполняются верно, то условие 8 тоже верно. Об этом свидетельствует загоревшийся светодиод на передней панели. Далее необходимо вписать определенный код, который будет служить для открывания двери.

Последние элементы кода служат для сбрасывания значений счетчика. Такая функция выполняется, если после последнего нажатия клавиши прошло более 10 секунд. Без этого кода можно было перебрать все возможные варианты, хоть их достаточно много. После создания данного устройства необходимо его протестировать. Еще

Данный проект является модульным, т.е. можно подключать/отключать разные элементы и получить разную функциональность. На картинках выше показан вариант с полной функциональность, а именно:

  • Запирающий механизм . Служит для ОТКРЫТИЯ и ЗАКРЫТИЯ двери. В этом проекте рассмотрено использование трёх разных механизмов:
    • Сервопривод. Бывают большие, бывают маленькие. Очень компактный, и вкупе с тяжёлым засовом – отличный вариант
    • Электропривод замка дверей автомобиля. Большая и мощная штука, но жрёт просто безумные токи
    • Соленоидная щеколда. Хороший вариант, так как сама захлопывается

    В настройках прошивки можно выбрать любой из трёх типов (настройка lock_type )

  • Кнопка внутри . Служит для ОТКРЫТИЯ и ЗАКРЫТИЯ двери изнутри. Может быть размещена на ручке двери (со стороны ладони или со стороны пальцев), на самой двери, либо на косяке
  • Кнопка снаружи . Служит для ЗАКРЫТИЯ двери, а также для ПРОБУЖДЕНИЯ из энергосбережения. Может быть размещена на ручке двери (со стороны ладони или со стороны пальцев), на самой двери, либо на косяке
  • Концевик на закрытие двери. Служит для автоматического закрытия замка при закрывании двери. Им может быть:
    • Тактовая кнопка
    • Датчик холла + магнит на самой двери
    • Геркон + магнит на самой двери
  • Секретная кнопка сброса доступа . Служит для сброса пароля/ввода нового пароля/запоминания нового ключа/комбинации и т.д. Может быть спрятана где-то в корпусе
  • Светодиод для индикации работы. Светодиод RGB, используются красный и зелёный цвета (при смешении дают жёлтый):
    • Горит зелёный - замок ОТКРЫТ. Горит чтобы не забыть закрыть дверь
    • Горит жёлтый - система проснулась и ожидает ввод пароля
    • Мигает красный - сел аккумулятор

Любой из этих элементов можно исключить из системы:

  • Убираем концевик. В прошивке в настройках тоже его отключаем (настройка tail_button ). Теперь чтобы закрыть замок, нужно нажимать кнопку
  • Убираем наружную кнопку. В прошивке в настройках тоже её отключаем (настройка wake_button ). Теперь систему не нужно будить, она просыпается сама (потребление энергии чуть больше). А также у нас теперь нет кнопки закрыть на передней части двери, и нужен концевик. Либо замок – щеколда
  • Убираем внутреннюю кнопку. Этот вариант годится для шкафов и сейфов. В настройках ничего менять не нужно
  • Убираем светодиод. В настройках ничего менять не нужно
  • Кнопку сброса доступа можно отпаять после первого использования, либо переписать код под себя
  • Дверь закрыта, нажато СНАРУЖИ - проснуться, ждать ввод пароля/RFID метку/электронный ключ/отпечаток пальца
  • Дверь закрыта, система проснулась, ждёт ввод пароля. Время можно настроить (настройка sleep_time )
  • Дверь закрыта, введён пароль/метка/ключ и т.д. - открыть
  • Дверь закрыта, нажато ВНУТРИ - открыть
  • Дверь открыта, нажато СНАРУЖИ - закрыть
  • Дверь открыта, нажато ВНУТРИ - закрыть
  • Дверь открыта, нажат КОНЦЕВИК - закрыть

В замке предусмотрена работа от аккумулятора в режиме пониженного энергосбережения (включить выключить: настройка sleep_enable ), а именно:

  • Просыпаться каждые несколько секунд, следить за СОБЫТИЕМ (опциональный вариант, если снаружи нет кнопки. Включить можно в настройке wake_button )
  • Каждые несколько минут следить за напряжением акума (вкл/выкл настройка battery_monitor )
  • Если акум разряжен (напряжение устанавливается в настройке bat_low ):
    • открыть дверь (опционально, можно настроить в прошивке open_bat_low )
    • запретить дальнейшее открытие и закрытие
    • при нажатии на кнопки мигать красным светодиодом
    • перестать следить за СОБЫТИЕМ (т.е. ввод пароля/метка и т.д.)

Когда система не спит, нажать кнопку смены пароля (скрытая кнопка). Попадаем в режим смены пароля :
Вводим пароль из цифр (МАКСИМУМ 10 ЦИФР!!! )

  • При нажатии * пароль записывается в память и система выходит из смены пароля
  • При нажатии # пароль сбрасывается (можно вводить заново)
  • Если ничего не нажимать 10 секунд, автоматически выйдем из режима смены пароля, пароль останется старый

Когда система не спит (проснулись по кнопки или сон отключен), нажать * для входа в режим ввода пароля
Если система спит и периодически просыпается проверять СОБЫТИЕ, то нажимаем * и удерживаем, пока не загорится красный светодиод
Режим ввода пароля:

  • Обработка пароля сделана таким образом, что правильный пароль засчитывается только при наборе правильной последовательности цифр, то есть если пароль 345, то вводить можно любые числа до тех пор, пока не появится последовательность 345, т.е. 30984570345 откроет замок, так как оканчивается на 345.
  • Если пароль введён верно, дверь откроется
  • Если ничего не нажимать, через 10 секунд система вернётся в обычный (дежурный) режим
  • Если нажать #, сразу выйдем из режима ввода пароля
  • Если нажать секретную кнопку смены пароля в режиме ввода пароля, то тоже из него выйдем

Сегодня урок о том как использовать RFID-ридер с Arduino для создания простой системы блокировки, простыми словами - RFID-замок.

RFID (англ. Radio Frequency IDentification, радиочастотная идентификация) - способ автоматической идентификации объектов, в котором посредством радиосигналов считываются или записываются данные, хранящиеся в так называемых транспондерах, или RFID-метках. Любая RFID-система состоит из считывающего устройства (считыватель, ридер или интеррогатор) и транспондера (он же RFID-метка, иногда также применяется термин RFID-тег).

В уроке будет использоваться RFID-метка с Arduino. Устройство читает уникальный идентификатор (UID) каждого тега RFID, который мы размещается рядом со считывателем, и отображает его на OLED-дисплее. Если UID тега равен предопределенному значению, которое хранится в памяти Arduino, тогда на дисплее мы увидим сообщение «Unlocked» (англ., разблокировано). Если уникальный идентификатор не равен предопределенному значению, сообщение "Unlocked" не появится - см. фото ниже.

Замок закрыт

Замок открыт

Детали, необходимые для создания этого проекта:

  • RFID-ридер RC522
  • OLED-дисплей
  • Макетная плата
  • Провода

Дополнительные детали:

  • Аккумулятор (powerbank)

Общая стоимость комплектующих проекта составила примерно 15 долларов.

Шаг 2: RFID-считыватель RC522

В каждой метке RFID есть небольшой чип (на фото белая карточка). Если направить фонарик на эту RFID-карту, можно увидеть маленький чип и катушку, которая его окружает. У этого чипа нет батареи для получения мощности. Он получает питание от считывателя беспроводным образом используя эту большую катушку. Можно прочитать RFID-карту, подобную этой, с расстояния до 20 мм.

Тот же чип существует и в тегах RFID-брелка.

Каждый тег RFID имеет уникальный номер, который идентифицирует его. Это UID, который показывается на OLED-дисплее. За исключением этого UID, каждый тег может хранить данные. В этом типе карт можно хранить до 1 тысячи данных. Впечатляет, не так ли? Эта функция не будет использована сегодня. Сегодня все, что интересует, - это идентификация конкретной карты по ее UID. Стоимость RFID-считывателя и этих двух карт RFID составляет около 4 долларов США.

Шаг 3: OLED-дисплей

В уроке используется OLED-монитор 0.96" 128x64 I2C.

Это очень хороший дисплей для использования с Arduino. Это дисплей OLED и это означает, что он имеет низкое энергопотребление. Потребляемая мощность этого дисплея составляет около 10-20 мА, и это зависит от количества пикселей.

Дисплей имеет разрешение 128 на 64 пикселя и имеет крошечный размер. Существует два варианта отображения. Один из них монохромный, а другой, как тот, который использован в уроке, может отображать два цвета: желтый и синий. Верхняя часть экрана может быть только желтой, а нижняя часть - синей.

Этот OLED-дисплей очень яркий и у него отличная и очень приятная библиотека, которую разработала компания Adafruit для этого дисплея. В дополнение к этому дисплей использует интерфейс I2C, поэтому соединение с Arduino невероятно простое.

Вам нужно только подключить два провода, за исключением Vcc и GND. Если вы новичок в Arduino и хотите использовать недорогой и простой дисплей в вашим проекте, начните с этого.

Шаг 4: Соединяем все детали

Связь с платой Arduino Uno очень проста. Сначала подключим питание как считывателя, так и дисплея.

Будьте осторожны, считыватель RFID должен быть подключен к выходу 3,3 В от Arduino Uno или он будет испорчен.

Так как дисплей также может работать на 3,3 В, мы подключаем VCC от обоих модулей к положительной шине макета. Затем эта шина подключается к выходу 3,3 В от Arduino Uno. После чего соединяем обе земли (GND) с шиной заземления макета. Затем мы соединяем GND-шину макета с Arduino GND.

OLED-дисплей → Arduino

SCL → Аналоговый Pin 5

SDA → Аналоговый Pin 4

RFID-ридер → Arduino

RST → Цифровой Pin 9

IRQ → Не соединен

MISO → Цифровой Pin 12

MOSI → Цифровой Pin 11

SCK → Цифровой Pin 13

SDA → Цифровой Pin 10

Модуль RFID-считывателя использует интерфейс SPI для связи с Arduino. Поэтому мы собираемся использовать аппаратные штыри SPI от Arduino UNO.

Вывод RST поступает на цифровой контакт 9. Контакт IRQ остается несвязным. Контакт MISO подключается к цифровому выходу 12. Штырь MOSI идет на цифровой контакт 11. Контакт SCK переходит на цифровой контакт 13, и, наконец, вывод SDA идет на цифровой вывод 10. Вот и все.

Считыватель RFID подключен. Теперь нам нужно подключить OLED-дисплей к Arduino, используя интерфейс I2C. Таким образом, вывод SCL на дисплее переходит к аналоговому выводу Pin 5 и SDA на дисплее к аналоговому Pin 4. Если теперь мы включим проект и разместим RFID-карту рядом с ридером, мы увидим, что проект работает нормально.

Шаг 5: Код проекта

Чтобы код проекта был скомпилирован, нам нужно включить некоторые библиотеки. Прежде всего, нам нужна библиотека MFRC522 Rfid.

Чтобы установить её, перейдите в Sketch -> Include Libraries -> Manage libraries (Управление библиотеками). Найдите MFRC522 и установите её.

Нам также нужна библиотека Adafruit SSD1306 и библиотека Adafruit GFX для отображения.

Установите обе библиотеки. Библиотека Adafruit SSD1306 нуждается в небольшой модификации. Перейдите в папку Arduino -> Libraries , откройте папку Adafruit SSD1306 и отредактируйте библиотеку Adafruit_SSD1306.h . Закомментируйте строку 70 и раскомментируйте строку 69, т.к. дисплей имеет разрешение 128x64.

Сначала мы объявляем значение метки RFID, которую должен распознать Arduino. Это массив целых чисел:

Int code = {69,141,8,136}; // UID

Затем мы инициализируем считыватель RFID и дисплей:

Rfid.PCD_Init(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

После этого в функции цикла мы проверяем тег на считывателе каждые 100 мс.

Если на считывателе есть тег, мы читаем его UID и печатаем его на дисплее. Затем мы сравниваем UID тега, который мы только что прочитали, со значением, которое хранится в кодовой переменной. Если значения одинаковы, мы выводим сообщение UNLOCK, иначе мы не будем отображать это сообщение.

If(match) { Serial.println("\nI know this card!"); printUnlockMessage(); }else { Serial.println("\nUnknown Card"); }

Конечно, вы можете изменить этот код, чтобы сохранить более 1 значения UID, чтобы проект распознал больше RFID-меток. Это просто пример.

Код проекта:

#include #include #include #include #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class MFRC522::MIFARE_Key key; int code = {69,141,8,136}; //This is the stored UID int codeRead = 0; String uidString; void setup() { Serial.begin(9600); SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64) // Clear the buffer. display.clearDisplay(); display.display(); display.setTextColor(WHITE); // or BLACK); display.setTextSize(2); display.setCursor(10,0); display.print("RFID Lock"); display.display(); } void loop() { if(rfid.PICC_IsNewCardPresent()) { readRFID(); } delay(100); } void readRFID() { rfid.PICC_ReadCardSerial(); Serial.print(F("\nPICC type: ")); MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); Serial.println(rfid.PICC_GetTypeName(piccType)); // Check is the PICC of Classic MIFARE type if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println(F("Your tag is not of type MIFARE Classic.")); return; } clearUID(); Serial.println("Scanned PICC"s UID:"); printDec(rfid.uid.uidByte, rfid.uid.size); uidString = String(rfid.uid.uidByte)+" "+String(rfid.uid.uidByte)+" "+String(rfid.uid.uidByte)+ " "+String(rfid.uid.uidByte); printUID(); int i = 0; boolean match = true; while(i

Шаг 6: Итоговый результат

Как видно из урока - за небольшие деньги можно добавить RFID-ридер в ваши проекты. Можно легко создать систему безопасности с помощью этого ридера или создать более интересные проекты, например, чтобы данные с USB-диска считывались только после разблокировки.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: