Цифровой кодовый замок на arduino

«Цифровая лаборатория» NR05: делаем кодовый замок

Продолжаем цикл статей по использованию возможностей набора «Цифровая лаборатория» NR05 для изучения программирования микроконтроллеров на примере Ардуино и конструированию полезных электронных устройств.

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

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

Зададимся следующими требованиями:
1. Имеется 5 кнопок для ввода кода, открывающего замок;
2. Крайняя левая кнопка соответствует коду 1, далее слева направо — 2,3,4,5;
3. Количество цифр вводимого кода может быть любым (в разумных пределах) и просто устанавливаться в программе;
4. Набираемый код отображается звездочками;
5. При совпадении введенного кода с образцовым на исполнительный механизм подается положительный импульс задаваемой в программе длительности;
6. При ошибочном наборе кода появляется сообщение об ошибке;
7. Если код набрать частично, то через некоторое время набранные значения сбрасываются.
8. Используем дисплей, RGB-светодиод и звукоизлучатель, входящие в набор для отображения понятной для пользователя информации.
9. Будем открывать настоящий электромеханический замок, питающийся от 12 вольт.

Теперь подберем устройство, которое будет подавать на замок напряжение открывания. Это напряжение в соответствии с паспортом электромеханического замка, который мы и будем открывать, равно 12 вольтам при токе около 1 ампера. Плата расширения набора NR05 не может работать с такими напряжениями и токами, поэтому необходим дополнительный модуль коммутации. Такими модулями могут быть предлагаемые компанией Мастер Кит реле MP515, или блоки реле MP2211, MP4411 в зависимости от того, захотим ли мы управлять не только замком, но и другими устройствами, например, включить свет при открывании двери. Все эти устройства совместимы с уровнями управляющих сигналов Ардуино. В нашем конкретном случае используем MP2211 – модуль с двумя реле.

Учитывая сказанное выше, нарисуем схему соединений используемых устройств:

Если внимательно посмотреть на маркировку платы расширения, то мы увидим, что зеленый канал RGB-светодиода GREEN и выход на реле CH3 подключены к одному выводу D9 Arduino Nano. В данном случае это допустимо, так вход управляющей схемы реле имеет достаточно высокое входное сопротивление, а вывод D9 используется только как цифровой выход. В общем случае следует проверять, не подключены ли используемые вами выводы платы к одному и тому же выводу Ардуино, и не допускать такой ситуации.

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

// Кодовый замок на пяти кнопках с индикацией на ЖК и RGB-светодиоде
// на основе платы расширения из набора NR05
//——————————————————————-
// подключаем библиотеки LiquidCrystalRus
#include

  • #include
  • #include
  • // определяем выводы для RGB-светодиода и звукоизлучателя
    #define red 5
    #define blue 6
    #define green 9
    #define beep 12
    // определяем, сколько кнопок у нас подключено
    #define NUM_KEYS 5
    // для каждой кнопки заносим калибровочные значения(выведены экспериментально)
    int adcKeyVal[NUM_KEYS] = <30, 150, 360, 535, 760>;
    ///////////////////////////////////////////////////////////
    // длина кода, открывающего замок
    #define codeLength 6
    // массив, содержащий код, открывающий замок. Число элементов массива должно быть равным codeLength
    const int codeOrigin[codeLength] = <1, 2, 3, 4, 5, 3>;
    // время разблокировки замка, миллисекунд
    const int unlockTime = 400;
    ///////////////////////////////////////////////////////////
    // массив для записи номеров нажатых клавиш
    int codePressed[codeLength];
    // счетчик нажатий (замок разблокируется при пятом нажатии)
    int pressCount;
    // переменные для счетчика времени неактивности набора кода
    unsigned long oldTime;
    unsigned long currentTime;
    const int timeout = 5; // время таймаута при наборе кода, сек. После таймаута неполностью набранный код сбрасывается
    //————————————————————————
    // инициализируем дисплей, объясняя программе куда подключены линии RS,EN,DB4,DB5,DB6,DB7
    LiquidCrystalRus lcd(A1, A2, A3, 2, 4, 7);

    //————————————————————————
    // Эта функция будет выполнена 1 раз в момент запуска программы Arduino
    void setup()
    <
    // инициализируем LCD: 16 символов и 2 строки
    lcd.begin(16, 2);
    // курсор находится на первой строке (верхней) и первом слева символе
    // напишем на дисплее «Мастер Кит»
    lcd.print(«Мастер Кит»);
    // установим курсора в первую позицию втрой строки
    lcd.setCursor(0,1);
    lcd.print(«tоткр.: „);
    lcd.print(unlockTime);
    lcd.print(“ мс»);
    // выдержим паузу в 2000 миллисекунд = 2 секунды
    delay(2000);
    // очистим дисплей
    lcd.clear();
    // обнулим счетчик нажатий
    pressCount = 0;
    // зададим режим «на вывод» для подключения RGB-светодиода и звукоизлучателя
    pinMode(red, OUTPUT);
    pinMode(blue, OUTPUT);
    pinMode(green, OUTPUT);
    pinMode(beep, OUTPUT);
    >

    //————————————————————————
    // Эта функция будет выполнена после функции setup и будет бесконечное число раз повторятся после своего окончания.

    Источник

    Кодовый замок из ардуино

    В этой статье я расскажу, как сделать кодовый замок из ардуино. Для этого нам понадобятся красный и зелёный светодиоды, зуммер, ардуино нано, LCD дисплей с I2C конвертором, сервопривод и матричная клавиатура 4×4. При включении дисплей будет писать «Enter code.»,

    включится красный светодиод,

    а зелёный погаснет, сервопривод установится на 0°. При вводе цифр на дисплее будут загораться *.

    Если код введён неверно, то дисплей напишет «Enter cod.». Если код правильный, то прозвучит звуковой сигнал, серво привод повернётся на 180°, дисплей напишет «Open.»

    включится зелёный светодиод,

    а красный отключится. После 3 секунд сервопривод вернётся в начальное положение, включится красный светодиод, а зелёный погаснет, дисплей напишет «Close.»,

    затем дисплей напишет «Enter code.». Теперь о схеме. Сначала соединяем ардуино проводами с макетной платой (контакты питания).

    Потом подключаем к контактам D9 — D2 матричную клавиатуру.

    Далее подключаем дисплей. Контакты питания к макетной плате, SDA — А4, SCL — А5.

    Затем сервопривод. Его подключаем к контакту 10.

    Красный светодиод к контакту 11.

    Зелёный — к контакту 12.

    Зуммер — к контакту 13.

    Теперь загружаем скетч.

    Вот и всё. Наслаждайтесь кодовым замком!

    Источник

    Кодовый замок на Arduino за 20 минут

    Предыстория

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

    Порывшись на китайских барахолках и ebay я ничего дешевого и более-менее серьезного не нашел и решил сделать его своими руками. Оговорюсь сразу, что платформа Arduino была выбрана за свою простоту, так-как опыта общения с микроконтроллерами не было вообще.

    На двери с внешней стороны двери должна располагаться клавиатура, на которой вводится пароль, с внутренней стороны закреплена остальная конструкция. Для контроля полного закрытия двери используется геркон. Выходя из кабинета человек нажимает на клавиатуре «*» и не дожидаясь пока дверь закроется доводчиком идет по своим делам, когда дверь будет полностью закрыта, геркон замкнется и замок будет закрыт. Открывается дверь с помощью ввода 4х значного пароля и нажатием на «#».

    Комплектующие

    Arduino UNO = $18
    Arduino protoshield + breadboard = $6
    L293D = $1
    Пучок проводов 30шт для бредборда = $4
    2 розетки RJ45 = $4
    2 вилки RJ45 = $0.5
    актуатор центрального замка = 250 руб.
    Геркон = бесплатно оторван от старого окна.
    Шпингалет металлический гигантских размеров = бесплатно
    Корпус от старого хаба D-LINK из полуторамиллиметрового железа = бесплатно
    Блок питания от того же хаба D-LINK на 12 и 5в = тоже бесплатно
    Куча винтов и гаечек для крепления всего этого добра к корпусу = 100руб.
    Пульт управления от охранной сигнализации = бесплатно.

    Итого: $33,5 и 350руб.

    Не так уж и мало, скажете вы, и будете, определенно правы, но ведь за удовольствие надо платить! А собрать, что-то своими руками всегда приятно. К тому-же конструкцию можно сильно удешевить, если использовать голый МК без Arduino.

    Подготовка к сборке

    Хочется несколько слов сказать о покупке ключевого элемента конструкции актуатора. В местном авто-магазине мне предложили актуаторы двух видов: «с двумя проводами и с пятью». Со слов продавщицы они были абсолютно одинаковыми и различие в количестве проводов не значило абсолютно ничего. Однако, как оказалось позже, это не так! Я выбрал девайс с двумя проводами, он питался от 12в. В конструкции с пятью проводами установлены концевые выключатели, что позволяет контролировать движение рычага. Понял, что купил не тот я только когда разобрал его и менять его было поздно. Ход рычага оказался слишком коротким, чтобы нормально задвинуть щеколду, поэтому, необходимо было немного его доработать, а именно удалить две резиновые шайбы укорачивающие ход рычага актуатора. Для этого корпус пришлось распилить вдоль обычной ножовкой, потому, что вторая шайба находилась внутри. Синяя изолента нам, как всегда помогла нам в дальнейшем при сборке его назад.
    Для управления мотором актуатора был использован драйвер моторов L293D, который выдерживает пиковую нагрузку до 1200 мА, у нас при остановке двигателя актуатора пиковая нагрузка вырастала всего до 600 мА.
    Из пульта управления от охранной сигнализации были выведены контакты с клавиатуры, динамика и двух светодиодов. Пульт и основное устройство предполагалось соединить с помощью витой пары и RJ45 разъемов

    Программирование.

    Так, как опыта программирования Arduino у меня не было до сих пор. Я воспользовался чужими наработками и статьями с сайта arduino.cc. Кому интересно, может поглядеть этот безобразный код :)

    Фото и видео


    Ардуино и актуатор


    Блок питания


    Клавиатурка


    Шпингалет (соединен с актуатором металлической спицей и на которую надета термоусадка для красоты)

    Источник

    Необычный кодовый замок на Arduino

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

    Я уже даже был готов взять генератор прямоугольных импульсов, 3 десятеричных счётчика и ещё ворох какой-то логики, чтобы это всё собрать. Но даже в smd это выглядело бы слишком громоздко и неудобно для практического использования. Но идея вертелась в голове и зрела. Избавиться от неё удалось, только написав прогу под Ардуино, превращающую её в кодовый замок, в котором одом является не номер нажатой кнопки (как в обычных), а сочетание кнопок, нажатых одновременно. Нигде раньше не встречал такого решения, если встретите — сообщите :)

    Схема проста до безобразия. (код, впрочем, тоже )

    Не очень хорошо видно, но кнопки подключаются к: а) земле и D3 (третий цифровой пин), b) D5 и D7 c) D9 и D11.

    Кстати, fritzing оказалась удобной программой для создания таких рисунков — очень быстро, просто и наглядно. Не зря все уроки по ардуине с его помощью проиллюстрированы.

    И раз уж на то пошло, объясню всё так, чтобы ни у кого не осталось вопросов. В setup() стандартно — назначение портов и установка низкого уровня на тех, кому предстоит заменять землю. INPUT_PULLUP — это значит что пин подтянут к +5В внутренним резистором (10 кОм, вроде). Это позволяет избежать «плавающего» сигнала на нём и не коротнуть чего лишнего при замыкании кнопкой на землю. blinktwice выделен в отдельную функцию ради удобства — никогда не упускайте возможности попрактиковаться в использовании функций! Далее считываются уровни сигнала на портах (они будут LOW, т.е 0, когда кнопка нажата, и 1, когда не нажата), и сравниваются с записанными в массивах значениями — например нулевые значения 0,1,1 означают, что первая кнопка должна быть нажата, а две других обязательно отжаты. Если условие выполняется, происходит переход к следующим значениям. Когда все 7 последовательных условий выполнились, выполняется условие k==8 и светодиод загорается на 3 секунды, сигнализируя о правильности введённого кода. В этот кусок кода надо вписывать то, что и должно происходить при этом — открытие двери, звуковой сигнал и т.д.

    Оставшийся кусок кода сбрасывает счётчик, если с момента первого введения комбинации (при этом гаснет светодиод) прошло больше 10 секунд. Без этого было бы в принципе возможно перебрать все последовательности нажатых кнопок, хотя их число составляет (2^3)^7 = 2^21, что больше двух миллионов. Очень полезно помнить при этом, что в году всего лишь 31 миллион секунд. А время введения правильного кода — 5 секунд после небольшой тренировки, так что можно ещё зажать по времени. Мне пока не на ком тестировать систему, но если кому система понравится настолько, чтобы воплотить её в жизнь — пожалуйста, напишите о результатах!

    Источник

  • Adblock
    detector