Выставка · проект 5
Электронный сейф с кодом
Клавиатура 4×4, экран LCD I2C, серво-защёлка SG90 и зуммер. Верный код — дверца открывается; неверный — писк и краткая блокировка. Библиотека Keypad из Library Manager.
Оглавление
1. Цель
Шкатулка-сейф на столе. Гость вводит код на мембранной/кнопочной клавиатуре, на LCD видит звёздочки. «#» — проверить. Верно — серво открывает защёлку и короткий «успех»; неверно — отказ и пауза.
1234) открывает защёлку; неверный даёт отказ на LCD + писк; после таймаута снова можно вводить; серво не дрожит в крайних положениях.2. Подготовка
Программы
- Подготовка Arduino IDE
- Tools → Manage Libraries → установить Keypad (автор Mark Stanley / Alexander Brevig)
- Установить LiquidCrystal_I2C (и зависимость Wire уже в IDE)
- Библиотека Servo — встроена
- Bambu Studio + setup-bambu-p2s.html — корпус шкатулки
Инструменты
- Провода «мама–папа» к шлейфу клавиатуры
- Макетка для LCD/серво/зуммера
- USB A↔B
Компоненты
| Что | Каталог | Сколько |
|---|---|---|
| Arduino Uno | arduino-uno-r3 | 1 |
| Клавиатура 4×4 | keypad-4x4 | 1 |
| LCD 1602 + I2C-адаптер | lcd-1602, i2c-lcd-adapter | 1 |
| Серво SG90 (защёлка) | servo-sg90 | 1 |
| Зуммер | buzzer-tmb12a05 | 1 |
| Тактовые кнопки (опционально «сброс») | tact-switches | 1 |
| Макетка, провода | breadboard-mb102, jumper-mf | — |
3. Распиновка (Uno → модуль)
У клавиатуры 4×4 обычно 8 выводов слева направо: 4 ряда (R0…R3), затем 4 столбца (C0…C3). Сверьте с modularным шлейфом — ориентация важна.
| Пин Uno | Куда | Пояснение |
|---|---|---|
| D2 | ряд 0 (R0) | Keypad |
| D3 | ряд 1 | |
| D4 | ряд 2 | |
| D5 | ряд 3 | |
| D6 | столбец 0 | |
| D7 | столбец 1 | |
| D8 | столбец 2 | |
| D9 | столбец 3 | |
| D10 | сигнал серво | Защёлка |
| D11 | зуммер | |
| A4 / A5 | SDA / SCL LCD | I2C |
| 5 V / GND | VCC/GND LCD, серво, общие минусы | Общий GND |
rowPins/colPins или физический порядок проводов.4. Сборка по шагам
LCD I2C
VCC→5 V, GND→GND, SDA→A4, SCL→A5. Включите подсветку (джампер на адаптере, если есть). Адрес часто 0x27 или 0x3F.
Клавиатура
Восемь проводов по таблице. Пока без корпуса — удобнее отлаживать.
Серво-защёлка и зуммер
Серво D10, зуммер D11. Углы LOCKED/OPEN подберите так, чтобы рычаг не упирался в пластик.
Библиотеки → Verify → Upload по согласию
Установите Keypad и LiquidCrystal_I2C. Скомпилируйте. Заливайте только после явного согласия.
5. Скетч (полный рабочий)
Смените SECRET перед выставкой. «*» — стереть, «#» — проверить. После трёх ошибок — пауза 5 секунд.
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
const char* SECRET = "1234";
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5};
byte colPins[COLS] = {6, 7, 8, 9};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo latch;
const int PIN_SERVO = 10;
const int PIN_BUZZ = 11;
const int ANGLE_LOCK = 20;
const int ANGLE_OPEN = 90;
String input;
int fails = 0;
unsigned long lockUntil = 0;
void beepOk() {
tone(PIN_BUZZ, 1400, 80);
delay(100);
tone(PIN_BUZZ, 1800, 120);
}
void beepBad() {
tone(PIN_BUZZ, 400, 400);
}
void showPrompt() {
lcd.clear();
lcd.print("Kod:");
lcd.setCursor(0, 1);
for (unsigned i = 0; i < input.length(); i++) lcd.print('*');
}
void setup() {
pinMode(PIN_BUZZ, OUTPUT);
latch.attach(PIN_SERVO);
latch.write(ANGLE_LOCK);
lcd.init();
lcd.backlight();
lcd.print("Safe gotov");
delay(800);
input = "";
showPrompt();
Serial.begin(115200);
}
void loop() {
if (millis() < lockUntil) {
return;
}
char k = keypad.getKey();
if (!k) return;
Serial.println(k);
if (k == '*') {
input = "";
showPrompt();
return;
}
if (k == '#') {
if (input == SECRET) {
lcd.clear();
lcd.print("Otkyto");
latch.write(ANGLE_OPEN);
beepOk();
fails = 0;
delay(4000);
latch.write(ANGLE_LOCK);
input = "";
showPrompt();
} else {
fails++;
lcd.clear();
lcd.print("Neverno");
beepBad();
delay(800);
input = "";
if (fails >= 3) {
lcd.clear();
lcd.print("Pauza 5s");
lockUntil = millis() + 5000;
fails = 0;
delay(500);
}
showPrompt();
}
return;
}
if (input.length() < 8) {
input += k;
showPrompt();
}
}
6. Печать на Bambu Lab P2S
Какие детали печатаем
- Основание шкатулки / сейфа.
- Дверца с вырезом под клавиатуру 4×4 и (по желанию) окно под LCD 1602.
- Карман под серво-защёлку SG90 (рычаг цепляет дверцу).
- Канал для USB наружу.
Модель: скачать или нарисовать простое
Путь A. Ищите: arduino safe box, keypad enclosure 4x4, servo latch box, LCD 1602 case.
Путь C (Tinkercad). Коробка + дверца. Вырезы: прямоугольник под клавиатуру и под LCD (замер модулей + 0,3…0,5 mm). Карман под серво; у защёлки зазор 0,5–1 mm — PLA чуть «плывёт». Петлю — нитка или винт M2–M3.
Проект в Bambu Studio
Импорт STL → дверцу печатайте плашмя → PLA, 0.2 mm, заполнение 15–20%. Отправка — setup-bambu-p2s.html.
Проверка качества
- Вырез клавиатуры: модуль входит, кнопки не упираются в край
- Окно LCD: экран читается, адаптер не выпирает
- Карман серво: корпус серво сидит, рычаг ходит свободно
Примерка без клея
Вставьте клавиатуру, LCD и серво «на сухую». Проверьте код 1234 + # на открытие без суперклея.
7. Скрипт демо
- «Это электронный сейф: пароль на клавиатуре, экран и защёлка на серво.»
- «Arduino сравнивает ввод с секретом в программе — как простой замок без интернета.»
- «Попробуйте код… (подскажите 1234 или сменённый). Решётка — ввод, звёздочка — стереть.»
- «Три ошибки — короткая блокировка. Дальше можно добавить RFID-карту вместо кода.»
8. Неисправности
| Симптом | Что проверить |
|---|---|
| Клавиши не те | Порядок row/col pins; ориентация шлейфа |
| LCD пустой | Адрес 0x27/0x3F; SDA/SCL; контраст крутилкой на I2C |
| Нет Keypad.h | Library Manager → Keypad установить |
| Защёлка не держит | ANGLE_LOCK/OPEN; рычаг соскакивает — подпилить модель |
| Сброс при серво | Общий GND; ток серво с USB — обсудить 5 V отдельно |
9. Безопасность
- Общий GND у Uno, LCD, серво и зуммера.
- Серво питайте с линии 5 V, не с сигнального пина.
- Upload — только после вашего согласия. Пароль в скетче — не «секрет дома»: для выставки отдельный код.
10. Что дальше
Следующий в каталоге выставки — турникет по RFID-карте (проект 6). Пока гайд RFID можно начать со сборки RC522 на 3.3 V и списка разрешённых карт.