niedziela, 10 marca 2019

Budujemy aktywator, sejf, zamek do drzwi lub włącznik 230 volt z kodem odblokowania

W mojej serii filmów i artykułów o arduino staram się inaczej niż wszyscy tłumaczyć krok po kroku wszystkie etapy budowy konkretnych rozwiązań, tak aby nawet początkujący mógł sobie coś zbudować, udostępniam także gotowce. Kolejny projekt oparty o arduino jaki sobie zbudujemy to zamek bądź aktywator, który uruchomimy wpisując prawidłowy kod na klawiaturze membranowej.



Co potrzebujemy?

Jeśli mamy już zestaw, który omawialiśmy w poprzedniej części, czyli:
arduino Mega 2560 oraz wyświetlacz LCD shield:


To możemy przejść dalej, do tego projektu musimy zaopatrzyć się w 2 kolejne moduły:



Klawiatura membranowa 4x4
https://botland.com.pl/pl/klawiatury/1680-klawiatura-numeryczna-membranowa-samoprzylepna-16-klawiszy.html




1 kanałowy przekaźnik 5V 10A AVR ARM ARDUINO:
https://diolut.pl/modul-1-kanalowy-przekaznik-5v-10a-avr-arm-arduino-p-8746.html?






Łączymy w całość:


















Gotowy program do wgrania:



/* Program zamka od drzwi, sejfu lub aktywatora zasilania 230 volt
Autor: www.elektrodynka.tk
marzec 2019
*/

#include <LiquidCrystal.h> // biblioteka do wyświetlacza LCD
#include <Keypad.h> //biblioteka do klawiatury 4x4

int przekaznik = 24; //pin przekaźnika

char* password ="1234AD"; //hasło do wprowadzenia
int pozisyon = 0;
int przycisk = 0;
const byte rows = 4;
const byte cols = 4;

char keyMap [rows] [cols] = { //mapowanie klawiatury

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

byte rowPins [rows] = {52, 50, 48, 46}; //piny, poziome linie klawiatury
byte colPins [cols] = {53, 51, 49, 47}; //piny, pionowe linie klawiatury

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

LiquidCrystal lcd (8, 9, 4, 5, 6, 7); // piny odpowiedzialne za wyświetlacz

void setup(){
int przekaznik = 24; //pin odpowiedzialny za sterowanie przekaźnikiem
pinMode(przekaznik,OUTPUT);//ust. pinu jako wyjście
digitalWrite(przekaznik, HIGH);//przekaźnik nieaktywny
  lcd.begin(16, 2);//ilość znaków i linijek wyświetlacza
  setLocked (true);
  przycisk = 0;
}

void loop(){
  char whichKey = myKeypad.getKey();//ekran startowy
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("BLOKADA ZAMKA");
  lcd.setCursor(0, 1);
  lcd.print("WPISZ KOD");

 
if(whichKey == '#'){//zamykanie zamka klawiszem #
  setLocked (true);
    przycisk=0;
    pozisyon=0; 
    digitalWrite(przekaznik, HIGH);//przekaźnik aktywny
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ZAMYKAM");
    lcd.setCursor(0, 1);
    lcd.print("ZAMEK");
    delay(3000);
    lcd.clear();
    lcd.print("BLOKADA");
    lcd.setCursor(0, 1);
    lcd.print("WPISZ KOD");
}


  if(whichKey == '*'){//klawisz podpowiedzi
    przycisk=0;
    pozisyon=0;
    setLocked (true);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("PODPOWIEDZ:");
    lcd.setCursor(0, 1);
    lcd.print("DATA URODZENIA");
    delay(2000);
    lcd.clear();


 
  }
  if(whichKey == '0' || whichKey == '1' || whichKey == '2' || whichKey == '3' ||       //jakie klawisze chcesz używać
  whichKey == '4' || whichKey == '5' || whichKey == '6' || whichKey == '7' || whichKey == '8' || whichKey == '9' || whichKey == 'A' || whichKey == 'B' || whichKey == 'C' || whichKey == 'D'){
    przycisk++;
    }
    if(przycisk == 7){
      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 == 5){
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.write("      *****");
    }
         if(przycisk == 6){
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.write("      ******");
    }
    if(przycisk == 6 && pozisyon < 4){
      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 == 6){//otwieranie zamka na poprawny 6 cyfrowy kod
    przycisk = 0;
    pozisyon = 0;
    setLocked (false);
    digitalWrite(przekaznik, LOW);//przekaźnik aktywny
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("*** OTWARTE ***");
    lcd.setCursor(0, 1);
    lcd.print("!!!!!!!!!!!!!!!");
    delay(2000);//czas wyświetlania napisu otwarte
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ABY ZAMKNAC");
     lcd.setCursor(0, 1);
    lcd.print("NACISNIJ #");
     delay(3000);//czas wyświetlania napisu aby zamknąć
  }

  delay(100);
}

 //powrót do ekranu powitalnego

void setLocked(int locked){
 if(locked){
   }
    else{
      przycisk = 0;
    }

  }
  



Gotowiec do pobrania (wersja z ręcznym wyłącznikiem klawiszem #):
https://drive.google.com/open?id=1cItIu86Rh8o4rEpWsV0MxS_RZYjY_1Dl


Jeśli interesuje was automatyczne zamykanie/wyłączanie po określonym czasie, to musicie wgrać tego gotowca:
https://drive.google.com/open?id=11oYj5kezspUJdjND8_h5pF3nPUcG4Gy-




Whatsapp Button works on Mobile Device only

Wpisz czego szukasz i kliknij w ikonkę lupy