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> | ||