В этой статье я расскажу вам про кодовый электромеханический замок на базе микроконтроллера Ардуино, который я сделал в прошлом году. Я расскажу вам, как сделать кодовый замок своими руками. Так как в то время я не писал инструкций по сборке чего-либо, фото процесса у меня нет, только готового замка.
Содержание статьи
Шаг 1: Нужные материалы
- Arduino Mega 2560
- Набор проводов-перемычек для макетных плат
- LCD дисплей (16 знаков х 2 строки)
- Резистор переменного сопротивления
- Клавиатура
- Зеленый и красный диоды
- Кусок ДСП
- Печатная плата
- Сервопривод
Шаг 2: Проверяем клавиатуру
На картинке изображена электронная схема подключения, но я бы советовал проверить клавиатуру просто мультиметром.
Шаг 3: Код
Я не могу точно вспомнить, кто поделился со мной этим кодом, но спасибо этому доброму человеку. От того кода я оставил основу, основные моменты изменил под свои нужды.
Прежде чем вы скопируете код, подключите готовую библиотеку, которая находится в папке библиотек. Находится она по следующему пути: Windows C: —> program files (x86) —> Arduino.
Скопируйте код (но лучше загрузить файл):
#include #include #include #include Servo myservo; //constants for LEDs int greenLED = 22; int redLED = 23; LiquidCrystal lcd(13, 12, 11, 10, 9, 8, 7); Password password = Password( "4155" ); int currentPosition = 0; const byte ROWS = 4; // Four rows const byte COLS = 4; // Four columns // Define the Keymap char keys[ROWS][COLS] = { { '1','2','3','A', } , { '4','5','6','B', } , { '7','8','9','C', } , { '*','0','#','D', } }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. byte rowPins[ROWS] = { 47, 46, 45, 44}; //connect to the row pinouts of the keypad byte colPins[COLS] = { 51, 50, 49, 48}; //connect to the column pinouts of the keypad // Create the Keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ lcd.begin(16, 2); Serial.begin(9600); keypad.setDebounceTime(50); displayCodeEntryScreen(); keypad.addEventListener(keypadEvent); //add an event listener for this keypad myservo.attach(2); myservo.write(180); //setup and turn off both LEDs pinMode(redLED, OUTPUT); pinMode(greenLED, OUTPUT); digitalWrite(redLED, LOW); digitalWrite(greenLED, LOW); } void displayCodeEntryScreen() { password.reset(); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Enter Code:"); lcd.setCursor(0,1); keypad.addEventListener(keypadEvent); //add an event listener for this keypad //setup and turn off both LEDs pinMode(redLED, OUTPUT); pinMode(greenLED, OUTPUT); digitalWrite(redLED, LOW); digitalWrite(greenLED, LOW); } void loop(){ keypad.getKey(); } //take care of some special events void keypadEvent(KeypadEvent eKey){ switch (keypad.getState()){ case PRESSED: lcd.print(eKey); switch (eKey){ case '#': checkPassword(); break; case '*': displayCodeEntryScreen(); break; default: password.append(eKey); } switch (keypad.getState()){ case PRESSED: switch (eKey){ case 'D': myservo.write(180); displayCodeEntryScreen(); } } } } void checkPassword(){ if (password.evaluate()){ digitalWrite(greenLED, HIGH); lcd.clear(); delay(30); lcd.setCursor(1, 0); lcd.print("Acces Granted"); lcd.setCursor(4, 1); lcd.print("Welcome"); unlockdoor(); delay(2500); displayCodeEntryScreen(); } else{ loop(); { redlight(); } lcd.clear(); delay(10); lcd.setCursor(2, 0); lcd.print("Acces Denied"); delay(2500); lcd.clear(); displayCodeEntryScreen(); } } void unlockdoor(){ //controls servo that locks the door myservo.write(90); digitalWrite(greenLED, HIGH); delay(5000); } void redlight(){ digitalWrite(redLED, HIGH); delay(100); digitalWrite(redLED, LOW); delay(100); digitalWrite(redLED, HIGH); delay(100); digitalWrite(redLED, LOW); delay(100); digitalWrite(redLED, HIGH); delay(100); digitalWrite(redLED, LOW); delay(100); digitalWrite(redLED, HIGH); delay(100); digitalWrite(redLED, LOW); delay(100); digitalWrite(redLED, HIGH); delay(100); digitalWrite(redLED, LOW); delay(100); digitalWrite(redLED, HIGH); delay(100); digitalWrite(redLED, LOW); delay(100); digitalWrite(redLED, HIGH); delay(100); digitalWrite(redLED, LOW); delay(100); digitalWrite(redLED, HIGH); delay(100); }
Файлы
Шаг 4: Подключаем компоненты и помещаем в корпус
Подключите все компоненты, как показано на схеме и поместите их в корпус.
Пока что я не поместил начинку в корпус, но сделаю это в ближайшее время. Без корпуса все перепутается и ничего хорошего не выйдет.
Если вы хотите вывести клавиатуру, диоды и дисплей на столешницу или дверцу шкафа, вам останется только поместить контроллер и плату в коробку.
Файлы
Шаг 5: Устанавливаем на место
- Нарисуйте, как примерно вы представляете себе результат
- Выберите место на столешнице, где вы будете устанавливать прибор (я советую установить прибор в верхний ящик стола и вывести периферию на поверхность столешницы)
- Наметьте на столе линии, по которым будете вырезать
- В углах контура просверлите отверстия (края отверстий не должны выходить за пределы контура)
- Вставьте полотно электролобзика в одно из отверстий и выпиливайте отверстие по контуру, посверленные отверстия облегчат вам процесс выпиливания углов
- Выпилите из листа ДСП (не толще 2,5 мм) кусок такого же размера, как и отверстие в столешнице
- На этом куске наметьте отверстия под клавиатуру, диоды и дисплей
- Просверлите отверстие для лобзика и выпилите намеченные фигуры
- Припаяйте провода-перемычки к контактам дисплея, клавиатуры и диодов
- Вставьте дисплей, клавиатуру и диоды в соответствующие отверстия в ДСП
- Кусок ДСП поместите в отверстие в столешнице
- Закрепить кусок ДСП можно маленькими уголками или клеем, я рекомендую первый вариант
По желанию:
Если закрепили поверхность кодового замка была утоплена в столешницу, можно добавить сверху еще один кусок ДСП, закрывающий электрокомпоненты. Этот кусок должен быть чуть больше, чем вырез в столешнице, и с маленькой петлей.
Шаг 6: Устанавливаем запирающий механизм
Эта часть достаточно сложная, поэтому заранее извиняюсь, если что-то написал непонятно.
Найдите где-нибудь металлическую пластину и согните ее буквой П. «Ноги» буквы сделайте по 3 см, а перекладину — 2 см.
В одной из «ног» просверлите 2 отверстия.
В дверце ящика просверлите 2 отверстия на таком же расстоянии друг от друга, как и отверстия на металлической детали.
Просверлите 2 отверстия по середине дверцы (не так, как это сделал я), если, конечно, вы не используете два сервопривода (что гораздо лучше в том случае, если дверца большая).
Закрепите П-образный крепеж на дверце двумя заклепками.
При установке сервопривода ориентируйтесь на фото. Установите привод в 2 см (или в 1см, это зависит от того, какую перекладину вы сделали П-образному крепежу) от дверцы.
Я приклеил сервопривод на суперклей, но вам я советую так не делать.
Шаг 7: Ставим выключатель на питание
Пару месяцев назад я поменял 12В адаптер от ноутбука на блок питания от старого компьютера.
Я соединил световой выключатель с проводом блока питания и с 12В выходом контроллера. Теперь я выключателем могу включать-выключать питание и кодовый замок. Блок питания подает ток на 2 диодных полосы, диоды замка и сам замок.
Провода блока питания, подключенные к выключателю – зеленый и черный. Если соединить эти два провода, а блок питания в это время будет включен в сеть, он заработает.
Шаг 8: Заключение
Работа над замком доставила мне огромное удовольствие. Я впервые сам писал код для микроконтроллера, и для этого мне пришлось многому научиться.
Квадрат в столешнице нужно было вырезать аккуратнее.
Я хотел бы внести следующие изменения:
- заменить Arduino Mega 2560 на Arduino Uno и подключить клавиатуру к аналоговому входу (используя пороговый сигнал)
- поместить замок в корпус
- напечатать на 3Д-принтере нормальную панель, которая бы закрыла неаккуратный вырез в столешнице. Я напечатаю панель, как только заработает нормально мой самодельный 3Д-принтер (пока что сопло постоянно забивается, а филамент скручивается)
- заменить сервопривод на соленоид