В этой статье я расскажу вам про кодовый электромеханический замок на базе микроконтроллера Ардуино, который я сделал в прошлом году. Я расскажу вам, как сделать кодовый замок своими руками. Так как в то время я не писал инструкций по сборке чего-либо, фото процесса у меня нет, только готового замка.
Шаг 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Д-принтер (пока что сопло постоянно забивается, а филамент скручивается)
- заменить сервопривод на соленоид
