Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'keyboard'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 2 wyniki

  1. #include <Servo.h> #include <LiquidCrystal_I2C.h> // biblioteka do LCD #include <Keypad.h> //biblioteka do klawiatury #include <Wire.h> Servo servo; int pos = 40; char* password ="2004"; //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] = {2, 3, 4, 5}; byte colPins [cols] = {6, 7, 8, 9}; Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, rows, cols); LiquidCrystal_I2C lcd(0x3F, 16, 2); void setup(){ servo.attach(10); lcd.begin(); 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' || // przyciski złe 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 == '9' || whichKey == '10'){ 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(" Złe"); 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("DOBRE HASLO"); delay(3000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Skrytka zamknie"); lcd.setCursor(0, 1); lcd.print(" sie za minute"); delay(60000); lcd.clear(); } delay(100); } void setLocked(int locked){ if(locked){ servo.write(40); } else{ przycisk = 0; servo.write(130); } } Gdy wpisuję hasło nie pojawiają się * oraz gdy wpiszę błędne hasło nie wyświetla się "Zle haslo" tylko pojawia się niebieskie tło tak jak na zdjęciu.
  2. Wstęp: Na wstępie chciałbym zaznaczyć, iż jest to mój pierwszy projekt, w którym miałem możliwość wykorzystać software do projektu własnej płytki PCB i skonstruować coś co nie bazuje na płytce Arduino i nie jest plątaniną przewodów na płytce stykowej. Proszę o wyrozumiałość, a zarazem o konstruktywną krytykę i cenne wskazówki, które mogą być przydatne przy tworzeniu kolejnych projektów. Wykonany prze ze mnie projekt nie jest innowacyjny, ale dzięki niemu mogłem spróbować swoich przede wszystkim w wytrawieniu pierwszej płytki PCB. Opis: Wynikiem końcowym projektu jest niewielkie pudełko/sejf do przechowywania drobnych rzeczy, które można otworzyć po wpisaniu hasła, bądź przyłożeniu karty. Sercem układu jest mikrokontroler, który można spotkać w Arduino UNO R3. Ze względu na prostotę środowiska ArduinoIDE zdecydowałem się na implementację kodu właśnie w tym programie. W związku z tym wybór padł na mikrokontroler ATmega328P z wgranym bootloaderem dla Adruino. Takie rozwiązanie pozwoliło mi na wykorzystanie gotowych bibliotek do obsługi modułu RFID i klawiatury numerycznej. Zdecydowałem się na brak wewnętrznego źródła zasilania. Został wyprowadzony przewód USB, dzięki któremu urządzenie można podpiąć pod dowolne wyjście USB (powerbank, port USB w komputerze, ładowarka sieciowa). Urządzenie jest więc zasilane napięciem 5V DC. Wykorzystane elementy: Na projekt składają się wymienione wcześniej elementy, tj.: ATmega328P moduł RFID klawiatura numeryczna 4x3 konwerter poziomów logicznych oraz: stabilizator napięcia LF33CV rezonator kwarcowy 16MHz serwomechanizm rezystory 22Ohm oraz 10kOhm kondensatory 100nF diody LED (czerwona i zielona) + oprawki przewód USB + odgiętka na przewód przewody połączeniowe drewniane pudełko (brak linku, elementy znaleziony w piwnicy w trakcie porządków) dystans nylonowy Budowa: Po przetestowaniu działania urządzenia na płytce prototypowej znalazłem odpowiednie pudełko, w którym zmieści się układ i będzie stosunkowo estetycznie wszystko rozmieszczone. Wyciąłem miejsce na klawiaturę, miejsce na blokadę serwomechanizmu oraz wywierciłem otwory na oprawki na diody. W kolejnym kroku pokryłem pudełko matową farbą i wnętrze wypełniłem materiałem zbliżonym do okleiny na głośnikach i tubach basowych. Po wykonaniu płytki przystąpiłem do lutowania elementów. Klawiatura, moduł RFID, diody, serwomechanizm oraz złącze zasilania zostały połączone z płytką poprzez przewody połączeniowe z końcówką żeńską. Płytka PCB została umieszczona w górnej części pudełka na nylonowych dystansach. Pod płytką znalazło się miejsce na moduł RFID oraz klawiaturę i diody. Na koniec wyciąłem odpowiedni fragment deseczki balsowej z miejscem na serwomechanizm, aby ukryć przewody połączeniowe. Deseczkę balsową okleiłem tym samym materiałem co wnętrze pudełka. Oprogramowanie: Kod programu został napisany w środowisku ArduinoIDE z wykorzystaniem następujących bibliotek: Servo.h Keypad.h Password.h SPI.h MFRC522.h Kod programu: #include <Servo.h> #include <Keypad.h> #include <Password.h> #include <SPI.h> #include <MFRC522.h> //Servo Servo servo; //Password Password password = Password("1234"); //RFID const byte UID1[] = {0x70, 0xC3, 0xF9, 0x65}; const byte UID2[] = {0x35, 0xDC, 0xD7, 0x65}; const byte ROWS = 4; const byte COLS = 3; char keys[ROWS][COLS] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'#', '0', '*'} }; byte rowPins[ROWS] = {4, 3, 2, 0}; byte colPins[COLS] = {8, 7, 6}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); MFRC522 rfid(10, 5); MFRC522::MIFARE_Key key; void setup() { Serial.begin(9600); SPI.begin(); rfid.PCD_Init(); pinMode(A0,OUTPUT); pinMode(A1,OUTPUT); servo.attach(9); servo.write(0); keypad.addEventListener(keypadEvent); digitalWrite(A0,HIGH); digitalWrite(A1,LOW); } void loop() { keypad.getKey(); if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) { if (rfid.uid.uidByte[0] == UID1[0] && rfid.uid.uidByte[1] == UID1[1] && rfid.uid.uidByte[2] == UID1[2] && rfid.uid.uidByte[3] == UID1[3]) { servo.write(90); digitalWrite(A0, LOW); digitalWrite(A1, HIGH); } else if (rfid.uid.uidByte[0] == UID2[0] && rfid.uid.uidByte[1] == UID2[1] && rfid.uid.uidByte[2] == UID2[2] && rfid.uid.uidByte[3] == UID2[3]) { servo.write(90); digitalWrite(A0, LOW); digitalWrite(A1, HIGH); } } } void keypadEvent(KeypadEvent eKey) { switch (keypad.getState()) { case PRESSED: Serial.println(eKey); switch (eKey) { case '#': checkPassword(); delay(1); break; case '*': closeBox(); delay(1); break; default: password.append(eKey); delay(1); } } } void checkPassword() { if (password.evaluate()) { servo.write(90); digitalWrite(A0, LOW); digitalWrite(A1, HIGH); } else { servo.write(0); digitalWrite(A0, HIGH); digitalWrite(A1, LOW); } } void closeBox() { password.reset(); servo.write(0); digitalWrite(A0, HIGH); digitalWrite(A1, LOW); } Działanie programu: Aby odblokować serwomechanizm i otworzyć pudełko należy wpisać odpowiedni kod zdefiniowany w programie i zatwierdzić znakiem "*" lub przyłożyć odpowiednią kartę (zdefiniowane są dwie karty). Po odblokowaniu gaśnie dioda czerwona, zapala się dioda czerwona i serwomechanizm zmienia położenie. Aby zamknąć pudełko należy wcisnąć przycisk "#". Podsumowanie: Projekt uważam za prawie zakończony. Po złożeniu całego urządzenia zwróciłem uwagę na brak możliwości zmiany kodu oraz dodania nowej karty (możliwe jedynie poprzez przeprogramowanie ATmegi). Projekt płytki zapewne pozostawia sporo do życzenia, dlatego liczę na cenne wskazówki aby nie popełniać błędów w przyszłości. Za wadę uważam też brak dodatkowej filtracji zasilania (stwierdziłem, że skoro biorę zasilanie z USB to nie trzeba nic dodawać). Zaletą (albo i wadą 😉) urządzenia są małe gabaryty. Ja wykorzystuje je do przechowywania zdjęć wykonanych Instaxem. Załączniki: W projekcie załączam kod programu, wykorzystane biblioteki i projekt Eagle do płytki PCB. Zdjęcia: safe_box_eagle.zip safe_box_software.zip
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.