This shows you the differences between two versions of the page.
|
pm:prj2022:cstan:3 [2022/05/26 00:20] david.botoghina [Hardware Design] |
pm:prj2022:cstan:3 [2022/06/02 13:17] (current) david.botoghina [Hardware Design] |
||
|---|---|---|---|
| Line 21: | Line 21: | ||
| * 2x LEDs | * 2x LEDs | ||
| * 4x4 keypad | * 4x4 keypad | ||
| - | * 1x LCD I2C | + | * 1x LCD I2C |
| + | * Relay 5V | ||
| * Some Wires | * Some Wires | ||
| * A fan | * A fan | ||
| __//**Electrical Schematic:**//__ | __//**Electrical Schematic:**//__ | ||
| - | [[pm:prj2022:cstan:3|]] | + | |
| + | {{:pm:prj2022:cstan:captura_de_ecran_2022-06-01_201842.png?200|}} | ||
| </note> | </note> | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | #include <Wire.h> | ||
| + | #include <LiquidCrystal_I2C.h> | ||
| + | #include <Keypad.h> | ||
| + | #define Password_Length 8 | ||
| + | |||
| + | int signalPin = 12; | ||
| + | int relay_pin = 10; | ||
| + | |||
| + | char Data[Password_Length]; | ||
| + | char Master[Password_Length] = "123A456"; | ||
| + | byte data_count = 0, master_count = 0; | ||
| + | bool Pass_is_good; | ||
| + | char customKey; | ||
| + | |||
| + | const byte ROWS = 4; | ||
| + | const byte COLS = 4; | ||
| + | |||
| + | char hexaKeys[ROWS][COLS] = { | ||
| + | {'1', '2', '3', 'A'}, | ||
| + | {'4', '5', '6', 'B'}, | ||
| + | {'7', '8', '9', 'C'}, | ||
| + | {'*', '0', '#', 'D'} | ||
| + | }; | ||
| + | |||
| + | byte rowPins[ROWS] = {9, 8, 7, 6}; | ||
| + | byte colPins[COLS] = {5, 4, 3, 2}; | ||
| + | |||
| + | Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); | ||
| + | |||
| + | LiquidCrystal_I2C lcd(0x27, 16, 2); | ||
| + | |||
| + | void setup(){ | ||
| + | lcd.init(); | ||
| + | lcd.backlight(); | ||
| + | pinMode(signalPin, OUTPUT); | ||
| + | pinMode(13, OUTPUT); | ||
| + | pinMode(relay_pin, OUTPUT); | ||
| + | } | ||
| + | |||
| + | void loop(){ | ||
| + | |||
| + | lcd.setCursor(0,0); | ||
| + | lcd.print("Enter Password:"); | ||
| + | |||
| + | customKey = customKeypad.getKey(); | ||
| + | if (customKey){ | ||
| + | Data[data_count] = customKey; | ||
| + | lcd.setCursor(data_count,1); | ||
| + | lcd.print(Data[data_count]); | ||
| + | data_count++; | ||
| + | } | ||
| + | |||
| + | if(data_count == Password_Length-1){ | ||
| + | lcd.clear(); | ||
| + | |||
| + | if(!strcmp(Data, Master)){ | ||
| + | lcd.print("Correct"); | ||
| + | digitalWrite(signalPin, HIGH); | ||
| + | digitalWrite(13, HIGH); | ||
| + | delay(3000); | ||
| + | digitalWrite(signalPin, LOW); | ||
| + | digitalWrite(13, HIGH); | ||
| + | delay(3000); | ||
| + | digitalWrite(13, LOW); | ||
| + | } | ||
| + | else{ | ||
| + | lcd.print("Incorrect"); | ||
| + | digitalWrite(10, HIGH); | ||
| + | delay(1000); | ||
| + | digitalWrite(10, LOW); | ||
| + | } | ||
| + | lcd.clear(); | ||
| + | clearData(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | void clearData(){ | ||
| + | while(data_count !=0){ | ||
| + | Data[data_count--] = 0; | ||
| + | } | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | How it works: | ||
| + | |||
| + | The user needs to introduce a code, using the keyboard (the password). In the beginnig, on LCD is displayed the message "Enter Password", the password being composed by seven characters. | ||
| + | |||
| + | If the introduced password is incorrect, then the message "Incorrect" is displayed on LCD and the green LED from the relay will turn off for one second. | ||
| + | |||
| + | If the introduced password is correct, then on the display is displayed the message "Correct", and the fan will turn on. | ||
| + | |||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| + | {{:pm:prj2022:cstan:20220601_151524.jpg?200|}} | ||
| + | |||
| + | |||
| + | {{:pm:prj2022:cstan:20220601_152150.jpg?200|}} | ||
| + | |||
| + | |||
| + | {{:pm:prj2022:cstan:20220601_152655.jpg?200|}} | ||
| + | |||
| + | |||
| + | {{:pm:prj2022:cstan:20220601_191234.jpg?200|}} | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| + | It was an interesting project, that required several days. It also can be easily upgraded, for example, by adding something like a lamp or a lock at the output of the relay. | ||
| ===== Download ===== | ===== Download ===== | ||
| + | {{:pm:prj2022:cstan:pm_project.rar|}} | ||
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| + | 19/05/2022 - Hardware Assembly | ||
| + | 25/05/2022 - Software | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| + | github.com | ||
| <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||