Кодовый замок на Arduino

На днях, листая книгу Уилли Соммера, наткнулся на интересный проект кодового замка на основе Arduino. Этот кодовый замок на Arduino изображен на рисунке ниже.

 

arduino scheme

Для данного замка используются две кнопки. Для ввода нужно нажимать эти кнопки определенное количество раз в определенной последовательности. Нажатие кнопок подтверждается с помощью вспышки красного светодиода и звукового сигнала зуммера. Если код введен с ошибкой, можно очистить ввод данных, подержав кнопку 2. О том, что произошел сброс сигнализируют мигающий красный светодиод и сигнал зуммера.
В свою очередь, к данной схемы я добавил сервопривод. Итак работает она следующим образом:
После пяти нажатий на кнопку 1 и трех нажатий на кнопку 2, на пять секунд загорается синий светодиод и происходит поворот сервопривода на заданный угол. Через пять секунд серво возвращается в исходное положение. Для работы требуется подключить заголовочный файл Servo.h

lock_arduino

arduino_servo_button_buzer_led_lock

Код программы для работы замка:

#include <servo.h>

Servo myservo;

int val=60;
int val2=-60;
int LED_rot=4;
int LED_gruen=7;
int SW1=2;
int SW2=3;
int Buzzer=9;
int x, y, code1, code2, resetTimer=0;

void setup ()
{
  myservo.attach(10);
  pinMode(LED_rot, OUTPUT);
  pinMode(Buzzer, OUTPUT);
  
  pinMode(SW1, INPUT);
  digitalWrite(SW1, HIGH);
  
  pinMode(SW2, INPUT);
  digitalWrite(SW2, HIGH);
  Clr_Code();
  
}

void loop()
{
  
  // Кнопка1 = 5 нажатий
 if (!digitalRead(SW1))
  {
    delay(50);
    if (!digitalRead(SW1))
    {
     Blink();
     x++;
     if(x==5)
     {
       code1=true;
     }else code1=false;
     
     do{
     }while (!digitalRead(SW1));
    }
  }
 
  // Кнопка2 = 3 нажатия
  if (!digitalRead(SW2))
  {
    delay(50);
    if (!digitalRead(SW2))
    {
     Blink();
     y++;
     if(y==3)
     {
       code2=true;
     }else code2=false;
     
     do{
     delay(50);
     resetTimer++;
     
     if (resetTimer>50)
     {
       Toggle_Flash();
       Clr_Code();
       break;
     }
     }while (!digitalRead(SW2));
     resetTimer=0;
    }
  }
  
  if (code1 == true && code2 == true)
  {
    digitalWrite(LED_gruen, HIGH);
    myservo.write(val);
    //delay(15);
    delay(5000);
    
    Clr_Code();
    digitalWrite(LED_gruen, LOW);
  }
  else
 {
   digitalWrite(LED_gruen, LOW);
 }
}
void Blink(void)
{
  digitalWrite(LED_rot, HIGH);
  tone(Buzzer, 500, 150);
  delay(200);
  digitalWrite(LED_rot, LOW);
}

void Toggle_Flash(void)
{
  int tog=0;
  for (x=0; x&lt;6; x++)
    {
      if (tog==0) tog=1; else tog=0;
      digitalWrite(LED_rot, tog);
      tone(Buzzer, 500, 250);
      delay(300);
    }
}

void Clr_Code (void)
{
  x=0;
  y=0;
  code1=0;
  code2=0;
  resetTimer=0;
  myservo.write(val2);
  delay(1000);
}

Некоторые наши читатели жаловались на неработоспособность описанного проекта. Очень жаль, если он некорректно работает и у Вас (возможные причины могут заключаться в разнице версий Arduino IDE, ошибках в схеме подключения и т. п.). Данный элементарный проект просто взят из книги Соммера и реализован. Он не может быть использован как устройство для реального применения. Просим считать все описанное в статье обыкновенными учебными материалами для изучения Arduino.

2 комментария к “Кодовый замок на Arduino”

  1. кодовый замок может работать самостоятельно ?, если его отключить от ПК и просто подавать питание.

Оставьте комментарий

Your email address will not be published. Required fields are marked *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.