This shows you the differences between two versions of the page.
|
pm:prj2024:mdinica:andrei.dragomir1401 [2024/05/23 19:02] andrei.dragomir1401 |
pm:prj2024:mdinica:andrei.dragomir1401 [2024/05/27 03:52] (current) andrei.dragomir1401 |
||
|---|---|---|---|
| Line 56: | Line 56: | ||
| } | } | ||
| } | } | ||
| + | .title { | ||
| + | font-size: 18px; /* Smaller font size for titles */ | ||
| + | font-weight: bold; | ||
| + | margin-top: 20px; | ||
| + | } | ||
| + | .toggle-button { | ||
| + | background-color: #87CEFA; /* Light blue background */ | ||
| + | color: white; /* White text */ | ||
| + | border: none; | ||
| + | padding: 8px 16px; /* Some padding */ | ||
| + | text-align: center; | ||
| + | text-decoration: none; | ||
| + | display: inline-block; | ||
| + | font-size: 14px; /* Set a font size */ | ||
| + | margin: 4px 2px; | ||
| + | cursor: pointer; /* Pointer/hand icon */ | ||
| + | border-radius: 12px; /* Rounded corners */ | ||
| + | } | ||
| + | .image-container { | ||
| + | display: none; | ||
| + | margin-top: 10px; | ||
| + | } | ||
| </style> | </style> | ||
| </head> | </head> | ||
| Line 91: | Line 113: | ||
| </ul> | </ul> | ||
| | | ||
| - | <h3 id="software-design">Schema electrica</h2> | + | <p> |
| - | <img src="https://i.imgur.com/KLG6f9M.jpeg" alt="Hardware Design Image 1"> | + | <button class="toggle-button" onclick="toggleImage('image1')">Vezi Schema Electrică</button> |
| - | + | <div id="image1" class="image-container"> | |
| - | <h3 id="software-design">Hardware milestone 1</h2> | + | <img src="https://i.imgur.com/KLG6f9M.jpeg" alt="Schema Electrică"> |
| - | <img src="https://i.imgur.com/yQM2sp7.jpeg" alt="Hardware Design Image 2"> | + | </div> |
| - | + | </p> | |
| - | <h3 id="software-design">Hardware milestone 2</h2> | + | <p> |
| - | <img src="https://i.imgur.com/cioxv89.jpeg" alt="Hardware Design Image 3"> | + | <button class="toggle-button" onclick="toggleImage('image2')">Vezi Hardware milestone 1</button> |
| - | + | <div id="image2" class="image-container"> | |
| - | <h3 id="software-design">Hardware milestone 3</h2> | + | <img src="https://i.imgur.com/yQM2sp7.jpeg" alt="Hardware Design Image 1"> |
| - | <img src="https://i.imgur.com/HbFsXPM.jpeg" alt="Hardware Design Image 4"> | + | </div> |
| - | + | <p> | |
| - | <h3 id="software-design">Hardware milestone 4</h2> | + | <button class="toggle-button" onclick="toggleImage('image3')">Vezi Hardware milestone 2</button> |
| - | <img src="https://i.imgur.com/3hROTNs.jpeg" alt="Hardware Design Image 4"> | + | <div id="image3" class="image-container"> |
| - | + | <img src="https://i.imgur.com/cioxv89.jpeg" alt="Hardware Design Image 2"> | |
| - | <h3 id="software-design">Hardware milestone 5</h2> | + | </div> |
| - | <img src="https://i.imgur.com/aw3MsaR.jpeg" alt="Hardware Design Image 5"> | + | </p> |
| + | <p> | ||
| + | <button class="toggle-button" onclick="toggleImage('image4')">Vezi Hardware milestone 3</button> | ||
| + | <div id="image4" class="image-container"> | ||
| + | <img src="https://i.imgur.com/HbFsXPM.jpeg" alt="Hardware Design Image 3"> | ||
| + | </div> | ||
| + | </p> | ||
| + | <p> | ||
| + | <button class="toggle-button" onclick="toggleImage('image5')">Vezi Hardware milestone 4</button> | ||
| + | <div id="image5" class="image-container"> | ||
| + | <img src="https://i.imgur.com/3hROTNs.jpeg" alt="Hardware Design Image 4"> | ||
| + | </div> | ||
| + | </p> | ||
| + | <p> | ||
| + | <button class="toggle-button" onclick="toggleImage('image6')">Vezi Hardware milestone 5</button> | ||
| + | <div id="image6" class="image-container"> | ||
| + | <img src="https://i.imgur.com/aw3MsaR.jpeg" alt="Hardware Design Image 5"> | ||
| + | </div> | ||
| + | </p> | ||
| + | |||
| + | <script> | ||
| + | function toggleImage(id) { | ||
| + | var img = document.getElementById(id); | ||
| + | if (img.style.display === "none") { | ||
| + | img.style.display = "block"; | ||
| + | } else { | ||
| + | img.style.display = "none"; | ||
| + | } | ||
| + | } | ||
| + | </script> | ||
| + | |||
| + | <script> | ||
| + | function toggleImage(id) { | ||
| + | var img = document.getElementById(id); | ||
| + | if (img.style.display === "none") { | ||
| + | img.style.display = "block"; | ||
| + | } else { | ||
| + | img.style.display = "none"; | ||
| + | } | ||
| + | } | ||
| + | </script> | ||
| | | ||
| Line 141: | Line 203: | ||
| </li> | </li> | ||
| - | <li><strong>Laboratorul 2: Întreruperi</strong> - Gestionarea întreruperilor pentru joystick: | + | <li><strong>Laboratorul 1: UART</strong> - Comunicarea serială pentru debug și afișarea mesajelor în consola serială: |
| - | <pre><code>attachInterrupt(digitalPinToInterrupt(JOYSTICK_SW_PIN), joystickISR, FALLING); | + | <pre><code>Serial.begin(9600); |
| + | Serial.println("Approximate your card to the reader..."); | ||
| </code></pre> | </code></pre> | ||
| </li> | </li> | ||
| Line 238: | Line 301: | ||
| <p><strong>Atașați demo video pentru întregul proiect însoțit de explicații:</strong> Demo video-ul va prezenta autentificarea utilizatorilor, afișarea memento-urilor, logarea timpului de acces și navigarea în meniuri. Explicațiile vor detalia funcționarea fiecărei componente.</p> | <p><strong>Atașați demo video pentru întregul proiect însoțit de explicații:</strong> Demo video-ul va prezenta autentificarea utilizatorilor, afișarea memento-urilor, logarea timpului de acces și navigarea în meniuri. Explicațiile vor detalia funcționarea fiecărei componente.</p> | ||
| - | <p><strong>Explicați cum ați realizat calibrarea elementelor de senzoristică:</strong> Calibrarea joystick-ului a fost realizată prin ajustarea valorilor brute pentru mișcări precise: | + | <p><strong>Explicați cum ați realizat calibrarea elementelor de senzoristică:</strong> Calibrarea elementelor de senzoristică a fost realizată pentru a asigura funcționarea corectă și precisă a fiecărei componente hardware. În această secțiune sunt prezentate metodele de calibrare utilizate pentru joystick, RFID, LCD, buzzer și LED-uri.</p> |
| - | <pre><code>int joyX = analogRead(JOYSTICK_URY_PIN); | + | |
| - | if (joyX < 200) { /* move left */ } | + | <p>Citirea și calibrarea valorilor joystick-ului:</p> |
| + | <pre><code>int joyX = analogRead(JOYSTICK_URX_PIN); | ||
| + | int joyY = analogRead(JOYSTICK_URY_PIN); | ||
| + | |||
| + | if (joyX < 200) | ||
| + | else if (joyX > 800) | ||
| + | |||
| + | if (joyY < 2000 | ||
| + | else if (joyY > 800) | ||
| </code></pre> | </code></pre> | ||
| - | </p> | ||
| - | <p><strong>Explicați cum, de ce și unde ați realizat optimizări:</strong> Optimizările au fost realizate în gestionarea afișajului LCD și a funcțiilor de citire a UID-urilor pentru a reduce timpul de procesare. Codul a fost modularizat pentru întreținere ușoară: | + | <p>Calibrarea cititorului RFID:</p> |
| - | <pre><code>bool isAuthorizedUID(String uid) { | + | <pre><code>MFRC522 mfrc522(SS_PIN, RST_PIN); |
| + | if (mfrc522.PICC_IsNewCardPresent()) | ||
| + | if (mfrc522.PICC_ReadCardSerial()) | ||
| + | </code></pre> | ||
| + | |||
| + | <p>Inițializarea și calibrarea afișajului LCD:</p> | ||
| + | <pre><code>LiquidCrystal_I2C lcd(0x27, 16, 2); | ||
| + | lcd.init(); | ||
| + | lcd.backlight(); | ||
| + | lcd.clear(); | ||
| + | </code></pre> | ||
| + | |||
| + | <p>Configurarea și calibrarea buzzer-ului:</p> | ||
| + | <pre><code>pinMode(BUZZER_PIN, OUTPUT); | ||
| + | digitalWrite(BUZZER_PIN, HIGH); | ||
| + | |||
| + | void playTone(int tone, int duration) { | ||
| + | digitalWrite(BUZZER_PIN, LOW); | ||
| + | tone(BUZZER_PIN, tone, duration); | ||
| + | delay(duration); | ||
| + | noTone(BUZZER_PIN); | ||
| + | digitalWrite(BUZZER_PIN, HIGH); | ||
| + | } | ||
| + | </code></pre> | ||
| + | |||
| + | <p>Calibrarea LED-urilor:</p> | ||
| + | <pre><code>pinMode(GREEN_PIN, OUTPUT); | ||
| + | pinMode(RED_PIN, OUTPUT); | ||
| + | pinMode(BLUE_PIN, OUTPUT); | ||
| + | |||
| + | void turnOffLEDs() { | ||
| + | digitalWrite(GREEN_PIN, LOW); | ||
| + | digitalWrite(RED_PIN, LOW); | ||
| + | digitalWrite(BLUE_PIN, LOW); | ||
| + | } | ||
| + | |||
| + | void setLEDColor(int red, int green, int blue) { | ||
| + | analogWrite(RED_PIN, red); | ||
| + | analogWrite(GREEN_PIN, green); | ||
| + | analogWrite(BLUE_PIN, blue); | ||
| + | } | ||
| + | </code></pre> | ||
| + | |||
| + | <p><strong>Explicați cum, de ce și unde ați realizat optimizări:</strong> <p>Optimizarea citirii și comparării UID-urilor RFID:</p> | ||
| + | <p>Această optimizare a fost realizată pentru a asigura citirea rapidă și compararea eficientă a UID-urilor cardurilor RFID. Funcția <code>convertUID</code> transformă UID-ul citit într-un format string pentru a facilita compararea cu UID-urile stocate ale utilizatorilor autorizați. Această conversie este necesară deoarece UID-urile sunt citite sub formă de byte și trebuie convertite într-un format ușor de utilizat pentru comparare:</p> | ||
| + | <pre><code>String convertUID(MFRC522 &mfrc522) { | ||
| + | String readUID = ""; | ||
| + | for (byte i = 0; i < mfrc522.uid.size; i++) { | ||
| + | readUID += String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "") + String(mfrc522.uid.uidByte[i], HEX); | ||
| + | } | ||
| + | readUID.toUpperCase(); | ||
| + | return readUID; | ||
| + | } | ||
| + | </code></pre> | ||
| + | <p>Prin convertirea UID-urilor la formatul string, codul poate compara eficient UID-urile citite cu cele stocate pentru a verifica autorizarea utilizatorilor:</p> | ||
| + | <pre><code>bool isAuthorizedUID(String uid) { | ||
| for (int i = 0; i < uidCount; i++) { | for (int i = 0; i < uidCount; i++) { | ||
| if (authorizedUsers[i].uid == uid) return true; | if (authorizedUsers[i].uid == uid) return true; | ||
| Line 254: | Line 380: | ||
| </p> | </p> | ||
| - | <p><strong>Milestone-urile de proiect se prezintă în cadrul laboratorului:</strong> Milestone-urile prezentate includ: | + | |
| - | <ul> | + | |
| - | <li>Configurarea hardware-ului și testele individuale.</li> | + | |
| - | <li>Integrarea RFID cu LCD și buzzer.</li> | + | |
| - | <li>Implementarea meniului administrativ și a joystick-ului.</li> | + | |
| - | <li>Testarea și validarea sistemului complet.</li> | + | |
| - | </ul> | + | |
| - | </p> | + | |
| </div> | </div> | ||
| + | |||
| - | + | <h2 id="video">Video</h2> | |
| - | <h2 id="rezultate-obținute">Rezultate Obținute</h2> | + | <p></p> |
| - | <p></p> | + | <iframe width="560" height="315" src="https://www.youtube.com/embed/o9jGTlWHWa4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> |
| - | <h2 id="concluzii">Concluzii</h2> | + | |
| - | <h2 id="download">Download</h2> | + | |
| - | <p></p> | + | |
| - | <h2 id="jurnal">Jurnal</h2> | + | |
| - | <p></p> | + | |
| <h2 id="bibliografieresurse">Bibliografie/Resurse</h2> | <h2 id="bibliografieresurse">Bibliografie/Resurse</h2> | ||
| - | <p>Listă cu documente, datasheet-uri, resurse Internet folosite...</p> | + | <p><a href="https://github.com/Dragomir1401/PRODUCTIVITY-LOGGER" target="_blank">https://github.com/Dragomir1401/PRODUCTIVITY-LOGGER</a></p> |
| </div> | </div> | ||
| </body> | </body> | ||
| </html> | </html> | ||