пятница, 17 октября 2014 г.

Сейфовый кодовый замок с семисегментным дисплеем - SafeLock with 1 pot and 7Seg display

SafeLock - one pot locking on arduino
В продолжение к разным кодовым замкам.
Появилась идея сделать "минимальный" кодовый замок, т.е. из минимального набора элементов: процессор (обработка инфо), резистор (ввод кода), светодиод (вывод инфо) и сервомотор (исполнительный механизм).
Но это будет чуть позже, т.к. в процессе творчества захотелось добавить блок Block7Seg, для более удобного вывода информации (а если честно, то просто нет под рукой из чего сделать диск с номерами для резистора, а в слепую вводить код не получится, поэтому контроль ввода кода происходит по Block7Seg).


Состав

Итак кодовый замок состоит из:
1 шт
1 шт
1 шт
1 шт
сервопривод
1 шт

Фото


Алгоритм работы

Код доступа задается статически (в планах сделать его изменяемым динамически, перепрограммировать и сохранять в постоянной памяти путем нажатия кнопки, которая доступна из "безопасной" зоны, т.е. изнутри сейфа/комнаты).
  • ждем пока код не станет отличным от нуля, чтобы начать работу программы (считывается код из аналоговый порта A5, куда подключен резистор CleClo-Pot, и преобразовывается диапазон 0-1023 в 0-9, все это делается в подпрограмме 'ReadCode')
  • считываем код
  • полученная цифра выводится на дисплей в нужную позицию (начиная с нулевой, т.е. крайней слева)
  • зажигается или гасится точка под цифрой (каждые 1/4 секунды)
  • сравнивается предыдущая полученная цифра с текущей
    • если совпадает, то увеличивается счетчик совпадений
    • если не совпадает, то счетчик обнуляется
  • проверяется счетчик, если больше 30ти совпадений (примерно равно трем секундам), то код считается считанным и переходим на следующую позицию
  • когда все 4 позиции пройдены то сравниваем полученный код с эталоном
    • если код совпадает, то:
      • открываем замок (выводим на экран надпись 'OPEN', зажигаем светодиод на порту D13, переводим сервомотор в позицию открытия замка)
      • ждем пока резистор не переведут в позицию '0'
      • закрываем замок (выводим на экран надпись 'SHUT', гасим светодиод на порту D13, переводим сервомотор в позицию закрытия замка
    • если код не совпадает, то выводим на экран надпись 'NOPE' (типа облом!) и ждем пока не изменится позиция резистора (для того чтоб не зацикливаться, если резистор оставили в положении отличном от нуля), начинаем все сначала.

Код


Видео отчет

Скоро...