Методическая разработка открытого занятия «Кодовый замок на матричной клавиатуре»

  • Разработки уроков
  • docx
  • 20.08.2025
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Проект на Arduino
Иконка файла материала Методразработка занятия «Кодовый замок на матричной клавиатуре».docx

 

Методическая разработка открытого занятия

«Кодовый замок на матричной клавиатуре»

 

 

 

Направление: «Современный урок и внеурочная деятельность»

 

Возраст учащихся: (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

Посмотрите также