Skocz do zawartości

Pomocna odpowiedź

Witam wszystkich chciałbym Wam dzisiaj pokazać sejf mojego autorstwa. Może on być głównie wykorzystywany jako ciekawostka lub zabawka.

20190128_134357.thumb.jpg.2a318c747c2def67bbdccc99e1c75bf0.jpg

Projekt powstał w celu nauczenia się podstaw arduino. Ostatnio nauczyłem się sterowania silniczkami oraz przechwytywania liczb z klawiatury. Po połączeniu tych umiejętności z podstawami programowania powstał ten projekt sejfu.

Przy tworzeniu tego projektu wykorzystałem następujące materiały:

 

20190128_134701.thumb.jpg.a691ca193c7da38ee9122227e27b53df.jpg

Wykonanie:

Projekt został wykonany z elementów jakie posiadałem w domu. Do Arduino podłączone są przewody, które łączą się z serwem (zasilanie, masa oraz sygnał sterujący). Przewody z wyświetlacza są podłączone bezpośrednio do Arduino poza V0. Ponadto, V0 zostało zintegrowane z potencjometrem i służy do regulacji kontrastu wyświetlacza. Układ jest zasilany baterią 9V za pomocą odpowiedniego adaptera

Działanie projektu:

Program przechwytuje z klawiatury kod wpisywany przez użytkownika. Jeśli kod jest prawidłowy to uruchamia się serwo i otwiera skrytkę. Jeśli kod jest nie prawidłowy program informuje użytkownika o niepoprawnym haśle. Na klawiaturze znajdują się klawisze A, B, C, D, # i *. Mój program ich nie wykorzystuje, ale jeśli ktoś chce wykonać taki projekt to może je wykorzystać. Po kliknięciu wyżej wymienionych klawiszy program informuje o naciśnięciu złego klawisza.

Kod:

#include <Servo.h>
#include <LiquidCrystal.h> // biblioteka do LCD
#include <Keypad.h> //biblioteka do klawiatury



Servo servo;
int pos = 40;
char* password ="7890"; //hasło
int pozisyon = 0; 
int przycisk = 0;
const byte rows = 4; 
const byte cols = 4;

char keyMap [rows] [cols] = { 

  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins [rows] = {1, 2, 3, 4}; 
byte colPins [cols] = {5, 6, 7, 8};

Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, rows, cols);

LiquidCrystal lcd (A0, A1, A2, A3, A4, A5);

void setup(){
servo.attach(9);
  lcd.begin(16, 2);
  setLocked (true);
  przycisk = 0;
}

void loop(){
setLocked (true);
  char whichKey = myKeypad.getKey();
  lcd.setCursor(0, 0);
  lcd.print("     Witam");
  lcd.setCursor(0, 1);
  lcd.print("  Wpisz haslo");

  if(whichKey == '*' || whichKey == '#' || whichKey == 'A' ||       
  whichKey == 'B' || whichKey == 'C' || whichKey == 'D'){
    przycisk=0;
    pozisyon=0;
    setLocked (true);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ZLY PRZYCISK");
    delay(1000);
    lcd.clear();
    
  }
  if(whichKey == '0' || whichKey == '1' || whichKey == '2' || whichKey == '3' ||       //define keys
  whichKey == '4' || whichKey == '5' || whichKey == '6' || whichKey == '7' || whichKey == '8' || whichKey == '9'){
    przycisk++;
    }
    if(przycisk == 5){
      przycisk = 0;
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.write("    ZA DUZO");
      lcd.setCursor(0,1);
      lcd.write("     ZNAKOW");
      delay(1000);
      lcd.clear();
    }
    if(przycisk == 1){
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.write("      *");
    }
    if(przycisk == 2){
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.write("      **");
    }
    if(przycisk == 3){
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.write("      ***");
    }
    if(przycisk == 4){
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.write("      ****");
    }
    if(przycisk == 4 && pozisyon < 3){
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.write("     ZLE");
      lcd.setCursor(0,1);
      lcd.write("    HASLO");
      delay(1000);
      przycisk = 0;
      lcd.clear();
    }
  if(whichKey == password [pozisyon]){

    pozisyon ++;
  }
  if(pozisyon == 4){
    przycisk = 0;
    pozisyon = 0;
    setLocked (false);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("*** Verified ***");
    delay(3000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Skrytka zamknie");
    lcd.setCursor(0, 1);
    lcd.print("   sie za 5s");
    delay(7000);
   lcd.clear();
  }
 

  delay(100);
}

void setLocked(int locked){
 if(locked){
    servo.write(40);
   }
    else{
      przycisk = 0;
      servo.write(130);
    }
  }

Przyszłość projektu:

Projekt można modyfikować (np. zmiana hasła przez użytkownika). Można też zmienić rodzaj zabezpieczenia z kodu czterocyfrowego na hasło z literami lub odcisk palca użytkownika. W najbliższej przyszłości zamierzam to połączyć z Raspberry Pi (rozpoznawanie twarzy) i Google AIY Voice Kit  (komendy głosowe).

Film:

Zdjęcia:

20190128_134357.thumb.jpg.5c71cdd432cac20bcaf106ec821bdf94.jpg20190128_134431.thumb.jpg.4907f8ddf18a92b9ac1d55a3f8045840.jpg20190128_134442.thumb.jpg.701890f6337ceb69e7af1efe3bd1ed1c.jpg20190128_134541.thumb.jpg.13f5d42c98560b5aaddeffb7d19e0e1f.jpg20190128_134547.thumb.jpg.48a2f546f42d924656228b0c1a08fc87.jpg20190128_134551.thumb.jpg.1558d2f233524d50bc3c7b2b698330c3.jpg20190128_134554.thumb.jpg.7462f05fbbac5220af5d931d31f7eb96.jpg20190128_134557.thumb.jpg.d644a952f8e4f0acafd9a7006e994c86.jpg20190128_134559.thumb.jpg.356d65afe1850a700a6c02387572e896.jpg

20190128_134653.jpg20190128_134701.jpg

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

@Misioskiper, właśnie zaakceptowałem opis. Dziękuję za przedstawienie ciekawego projektu, zachęcam do prezentowania kolejnych DIY oraz aktywności na naszym forum 😉

Udostępnij ten post


Link to post
Share on other sites

Dzięki za informację o I2C. Może kiedyś ulepszę model. Jestem dopiero początkującym w świecie arduino i elektroniki. 

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...