Методическая разработка открытого занятия
«Кодовый замок на матричной клавиатуре»
Направление: «Современный урок и внеурочная деятельность»
Возраст учащихся: (10-15) лет
Ковязин Владимир Анатольевич, Педагог дополнительного образования
МБОУ ДО ГДТ «Академия талантов»
Страна: Россия
629300 ЯНАО г. Новый Уренгой
Мкр.Дружба 2/10, СП «Академгородок»
E-mail: kovyazin.70@mail.ru
т: 89124307079
Цели:
1) познакомить учащихся с возможностями использования матричной клавиатуры;
2) активизировать практическую деятельность учащихся;
3) формировать потребность в получении новых знаний.
Задачи:
1) образовательная: развивать умения и навыки сборки электронных схем и программирования;
2) развивающая: развивать творческое воображение;
3) воспитательная: воспитывать трудолюбие и стремление добиваться выполнения поставленной задачи.
Оборудование: мембранная клавиатура, дисплей 1602 lcd с шиной I2C, пъезодинамик, сервомотор, самодельный замок из Лего, провода, плата Ардуино Уно, макетная плата, компьютер со средой программирования Arduino IDE.
Ход занятия
I. Организационный момент.
II. Блиц опрос.
1) Что такое пьезоэлемент?
2) Что такое сервопривод?
3) Что такое матричная клавиатура?
4) Что такое библиотека на Arduino?
5) Как установить нужную библиотеку в среду Arduino IDE?
III. Схема сборки проекта.
Схема сборки проекта без макетной платы.
Мы будем собирать эту схему с макетной платой (так нам будет удобнее).
Готовый проект замка будет выглядеть так:
IV. Комментарий к сборке проекта.
Подключаем матричную клавиатуру к плате Ардуино Уно. Подключаем дисплей 1602 lcd с шиной I2C к плате Ардуино Уно и макетной плате. Сервомотор сначала приклеиваем двухсторонним скотчем (или клеем) сверху на каркас замка, а вал сервомотора соединяем с задвижкой замка с помощью пластиковой насадки и проволоки. Далее подключаем сервомотор к плате Ардуино Уно и макетной плате. Подключаем пъезодинамик к плате Ардуино Уно и макетной плате. Подключаем макетную плату к плате Ардуино Уно. В плату Ардуино Уно загружаем программу для работы нашего проекта.
1) Подключаем матричную клавиатуру:
Матричную клавиатуру подключаем к цифровым пинам Ардуино, последовательно со 2 по 9 (первый контакт клавиатуры от кнопки D, подключаем ко 2 пину).
2) Подключаем дисплей 1602 lcd с шиной I2C:
GND дисплея на общий "-" макетной платы, VCC дисплея на общий "+" макетной платы, SCL дисплея на А5 Ардуино Уно, SDA дисплея на А4 Ардуино Уно.
3) Подключаем сервомотор:
Коричневый провод на общий "-" макетной платы, красный на общий "+" макетной платы, оранжевый на 10 пин Ардуино Уно.
4) Подключаем пъезодинамик:
"+" пьезодинамика на 11 пин Ардуино Уно, "-" пъезодинамика на общий "-" макетной платы.
Можно использовать модуль пьезодинамика (у него контакт "s" на 11 пин Ардуино Уно, контакты "+" и "-" на общие "+" и "-" макетной платы).
5) Подключаем макетную плату:
Общий "-" на GND Ардуино Уно, общий "+" на 5V Ардуино Уно.
V. Программа (скетч) для кодового замка на матричной клавиатуре.
// Кодовый замок
#include <Servo.h> // Библиотека для сервомотора
#include <LiquidCrystal_I2C.h> // Библиотека для дисплея 1602 lcd
#include <Keypad.h> // Библиотека для матричной клавиатуры
#include <Password.h> // Библиотека для проверки вводимого пароля
#define buzzer 11
Servo servo;
LiquidCrystal_I2C lcd (0x27, 16, 2);
String newPasswordString; //hold the new password
char newPassword [6]; //character string of newPasswordString
byte a = 5;
bool value = true;
Password password = Password ("0123"); //Enter your password
byte maxPasswordLength = 6;
byte currentPasswordLength = 0;
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
char keys [ROWS][COLS] = {
{'D', 'C', 'B', 'A'},
{'#', '9', '6', '3'},
{'0', '8', '5', '2'},
{'*', '7', '4', '1'},
};
byte rowPins [ROWS] = {2, 3, 4, 5};
byte colPins [COLS] = {6, 7, 8, 9};
Keypad keypad = Keypad (makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup () {
Serial.begin(9600);
pinMode (buzzer, OUTPUT);
servo. attach (10);
servo.write(10);
lcd.init();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print ("WELCOME TO");
lcd.setCursor(0, 1);
lcd.print ("DOOR LOCK SYSTEM");
delay (3000);
lcd.clear();
}
void loop() {
lcd.setCursor(1, 0);
lcd.print ("ENTER PASSWORD");
char key = keypad.getKey();
if (key != NO_KEY) {
delay (60);
if (key == 'C') {
resetPassword ();
} else if (key == 'D') {
if (value == true) {
doorlocked ();
value = false;
} else if (value == false) {
dooropen ();
value = true;
}
} else {
processNumberKey(key);
}
}
}
void processNumberKey (char key) {
lcd.setCursor(a, 1);
lcd.print ("*");
a++;
if (a == 11) {
a = 5;
}
currentPasswordLength++;
password.append(key);
if (currentPasswordLength == maxPasswordLength) {
doorlocked();
dooropen();
}
}
void dooropen() {
if (password.evaluate()) {
digitalWrite (buzzer, HIGH);
delay (300);
digitalWrite(buzzer, LOW);
servo.write(10);
delay (100);
lcd.setCursor(0, 0);
lcd.print ("CORRECT PASSWORD");
lcd.setCursor(0, 1);
lcd.print ("DOOR OPENED");
delay (2000);
lcd.clear();
a = 5;
} else {
digitalWrite (buzzer, HIGH);
delay (200);
digitalWrite (buzzer, LOW);
delay (200);
digitalWrite (buzzer, HIGH);
delay (200);
digitalWrite (buzzer, LOW);
delay (200);
digitalWrite (buzzer, HIGH);
delay (200);
digitalWrite (buzzer, LOW);
delay (200);
lcd.setCursor(0, 0);
lcd.print ("WRONG PASSWORD!");
lcd.setCursor(0, 1);
lcd.print ("PLEASE TRY AGAIN");
delay (2000);
lcd.clear();
a = 5;
}
resetPassword ();
}
void resetPassword () {
password.reset();
currentPasswordLength = 0;
lcd.clear();
a = 5;
}
void doorlocked() {
if (password.evaluate()) {
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(buzzer, LOW);
servo.write(130);
delay(100);
lcd.setCursor(0, 0);
lcd.print("CORRECT PASSWORD");
lcd.setCursor(2, 1);
lcd.print("DOOR LOCKED");
delay(2000);
lcd.clear();
a = 5;
} else {
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
lcd.setCursor(0, 0);
lcd.print("WRONG PASSWORD!");
lcd.setCursor(0, 1);
lcd.print("PLEASE TRY AGAIN");
delay(2000);
lcd.clear();
a = 5;
}
resetPassword();
}
Комментарий к программе:
В программе используются 4 основных библиотеки. После загрузки программы вводим наш код 0123 и нажимаем клавишу D на матричной клавиатуре. Программа выполнит проверку кода. Если он правильный сервомотор подвинет задвижку. Для сброса нажимаем клавишу C, затем снова можно вводить код. Начальное положение сервомотора корректируем в 88, 201 строках (оно у нас 10). Конечное положение сервомотора корректируем в 291 строке (оно у нас 130).
Программу нужно добавить в среду программирования Arduino IDE, дать имя codoviyzamok (или другое), а затем загрузить в нашу плату Arduino UNO.
VI. Принцип работы кодового замка на мембранной клавиатуре.
Если всё собрано правильно, и проект подключен к источнику питания (USB ПК или автономному аккумулятору), вводим пароль и проверяем работу нашего замка. Замок будет закрываться и открываться только при вводе правильного пароля.
V. Дополнительно.
Когда проекты у всех детей получились и работают, а время от занятия ещё осталось можно дать дополнительное задание:
русифицировать текст, выводимый на экран дисплея 1602 lcd.
Для этого придётся в среду программирования Arduino IDE установить библиотеку с выводом кириллицы LCD_1602_RUS_ALL.h.
В самой программе нужно будет заменить подключенную библиотеку LiquidCrystal_I2C.h на LCD_1602_RUS_ALL.h.
Также во всех командах программы, которые выводят текст на экран дисплея нужно будет заменить латинский текст на русский.
Например: lcd.print ("WELCOME TO") на lcd.print ("ДОБРО ПОЖАЛОВАТЬ").
Список текстов, которые нужно заменить в нашей программе:
WELCOME TO - ДОБРО ПОЖАЛОВАТЬ
DOOR LOCK SYSTEM - СИСТЕМА ЗАМКА ДВЕРИ
ENTER PASSWORD - ВВЕДИТЕ ПАРОЛЬ
CORRECT PASSWORD - ВЕРНЫЙ ПАРОЛЬ
WRONG PASSWORD! - НЕВЕРНЫЙ ПАРОЛЬ!
PLEASE TRY AGAIN - ПОВТОРИТЕ СНОВА
DOOR LOCKED - ДВЕРЬ ЗАКРЫТА
DOOR OPENED - ДВЕРЬ ОТКРЫТА
Посмотреть видео готового замка можно в нашем сообществе по ссылке: https://vk.com/club216107579?from=groups
Программу с выводом русского текста на экран дисплея codoviyzamok_ и все необходимые библиотеки можно скачать по следующей ссылке ниже.
https://disk.yandex.ru/d/Nuavz4unCaQRRA
Вывод
На этом занятии мы успешно собрали кодовый замок на мембранной клавиатуре.
Занимаясь Arduino проектами ребята, творчески проводят время, получают полезные навыки, опыт и знания. Которые могут пригодится им в дальнейшем.
Библиография:
1) Петин В.А., Биняковский А.А. Практическая энциклопедия Arduino. — М.: ДМК Пресс, 2017.
2) Краткий справочник по подключению датчиков, модулей и иных электронных устройств к плате Arduino-© ООО «БХВ-Петербург», 2020.
3) Интернет-ресурсы.
Скачано с www.znanio.ru
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.