Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:mdinica:andrei.dragomir1401 [2024/05/17 23:06]
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/​iJEfM4j.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>​ 
 +<p> 
 +<button class="​toggle-button"​ onclick="​toggleImage('​image2'​)">​Vezi Hardware milestone 1</​button>​ 
 +<div id="​image2"​ class="​image-container">​ 
 +    ​<img src="​https://​i.imgur.com/​yQM2sp7.jpeg" alt="​Hardware Design Image 1">​ 
 +</​div>​ 
 +<p> 
 +<button class="toggle-button"​ onclick="​toggleImage('​image3'​)">Vezi Hardware milestone ​2</button
 +<div id="​image3"​ class="​image-container">​ 
 +    ​<img src="​https://​i.imgur.com/​cioxv89.jpeg" alt="​Hardware Design Image 2"
 +</​div>​ 
 +</​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>
         ​         ​
-        <h3 id="​software-design">​Hardware milestone 2</​h2>​ +
-        <img src="​https://​i.imgur.com/​cioxv89.jpeg"​ alt="​Hardware Design Image 3">​ +
-         +
-        <h3 id="​software-design">​Hardware milestone 3</​h2>​ +
-        <img src="​https://​i.imgur.com/​HbFsXPM.jpeg"​ alt="​Hardware Design Image 4">​ +
-         +
-        <h3 id="​software-design">​Hardware milestone 4</​h2>​ +
-        <img src="​https://​i.imgur.com/​3hROTNs.jpeg"​ alt="​Hardware Design Image 4">​ +
-         +
-        <h3 id="​software-design">​Hardware milestone 5</​h2>​ +
-        <img src="​https://​i.imgur.com/​aw3MsaR.jpeg"​ alt="​Hardware Design Image 5">​ +
-         +
-         +
-        <​ul>​ +
-            <​li>​Listă de piese</​li>​ +
-            <​li>​Scheme electrice</​li>​ +
-            <​li>​Diagrame de semnal</​li>​ +
-            <​li>​Rezultatele simulării</​li>​ +
-        </ul>+
         <h2 id="​software-design">​Software Design</​h2>​         <h2 id="​software-design">​Software Design</​h2>​
 +<div style="​font-family:​ Arial, sans-serif; line-height:​ 1.6; color: #​333;">​
 +
 +    <​p><​strong>​Stadiul actual al implementării software:</​strong>​ Stadiul actual al implementării software include un sistem complet funcțional de acces RFID, afișaj LCD și joystick pentru navigare în meniurile administrative. Utilizatorii autorizați pot accesa memento-uri personalizate și loga timpul petrecut. Codul principal folosește biblioteci externe și funcții dedicate pentru fiecare componentă.</​p>​
 +
 +    <​p><​strong>​Motivați alegerea bibliotecilor folosite în cadrul proiectului:</​strong>​ Bibliotecile <​code>​MFRC522</​code>,​ <​code>​LiquidCrystal_I2C</​code>,​ <​code>​Wire</​code>,​ și <​code>​RtcDS1302</​code>​ sunt esențiale pentru comunicarea cu cititorul RFID, ecranul LCD și ceasul în timp real (RTC). Ele simplifică interfațarea cu hardware-ul și permit implementarea rapidă a funcțiilor necesare. De exemplu, inițializarea structurilor de biblioteca:
 +<​pre><​code>​MFRC522 mfrc522(SS_PIN,​ RST_PIN);
 +mfrc522.PCD_Init();​
 +</​code></​pre>​
 +
 +<​pre><​code>​LiquidCrystal_I2C lcd(0x27, 16, 2);
 +lcd.init();
 +lcd.backlight();​
 +</​code></​pre>​
 +</p>
 +    ​
 +<​pre><​code>​RtcDS1302<​ThreeWire>​ Rtc(myWire);​
 +Rtc.Begin();​
 +</​code></​pre>​
 +</p>
 +
 +    <​p><​strong>​Evidențiați elementul de noutate al proiectului:</​strong>​ Elementul de noutate constă în integrarea unui sistem de vizualizare a timpilor si productivitatii angajatilor,​ ceea ce deschide posibilitatea comercializarii catre firme.
 +
 +    <​p><​strong>​Justificați utilizarea funcționalităților din laborator în cadrul proiectului:</​strong>​ Proiectul utilizează funcționalități studiate în diverse laboratoare pentru a interacționa cu componentele hardware:
         <ul>         <ul>
-            <li>Mediu de dezvoltare ​(e.g.AVR StudioCodeVisionAVR)</li+            <li><​strong>​Laboratorul 0: GPIO</​strong>​ - Configurarea și utilizarea pinilor GPIO pentru LED-uri și buzzer: 
-            <li>Librării și surse 3rd-party ​(e.g., Procyon AVRlib)</​li>​ +                <​pre><​code>​pinMode(GREEN_PINOUTPUT); 
-            <li>Algoritmi și structuri pe care plănuiți să le implementați</​li>​ +digitalWrite(GREEN_PINHIGH)
-            <li>(Etapa 3surse și funcții implementate</li>+</code></​pre
 +            </li> 
 + 
 + <​li><​strong>​Laboratorul 1: UART</​strong>​ - Comunicarea serială pentru debug și afișarea mesajelor în consola serială: 
 +                <​pre><​code>​Serial.begin(9600); 
 +Serial.println("​Approximate your card to the reader..."​);​ 
 +</​code></​pre>​ 
 +            </​li>​ 
 +            <​li><​strong>​Laboratorul 3: Timere. PWM</​strong>​ - Utilizarea PWM pentru controlul buzzer-ului:​ 
 +                <​pre><​code>​tone(BUZZER_PINNOTE_C5, 250)
 +</​code></​pre>​ 
 +            ​</​li>​ 
 +            <li><​strong>​Laboratorul 4: ADC</​strong>​ - Citirea valorilor analogice de la joystick: 
 +                <​pre><​code>​int joyX = analogRead(JOYSTICK_URY_PIN);​ 
 +if (joyX < 200) { /* move left */ } 
 +</​code></​pre>​ 
 +            ​</​li>​ 
 +            <li><​strong>​Laboratorul 5: SPI</​strong>​ - Comunicarea cu cititorul RFID: 
 +                <​pre><​code>​SPI.begin()
 +mfrc522.PCD_Init();​ 
 +</​code></​pre>​ 
 +            </​li>​ 
 +            <​li><​strong>​Laboratorul 6: I2C</​strong>​ - Comunicarea cu ecranul LCD și RTC-ul: 
 +                <​pre><​code>​Wire.begin();​ 
 +lcd.init();​ 
 +Rtc.Begin();​ 
 +</​code></​pre>​ 
 +            ​</li>
         </ul>         </ul>
-        ​<h2 id="​rezultate-obținute">Rezultate Obținute</h2+    ​</p> 
-        <​p></​p>​ + 
-        <h2 id="​concluzii"​>Concluzii</h2+ 
-        <h2 id="download">Download</h2+    <​p><​strong>​Explicați scheletul proiectului,​ interacțiunea dintre funcționalități și modul în care a fost validat că acestea funcționează conform:</​strongScheletul proiectului este structurat în funcții specifice pentru fiecare componentă și aspect al interacțiunii utilizatorului. Codul principal este organizat în funcții de configurare,​ funcții de loop principal și funcții de manipulare a componentelor hardware. Funcțiile de configurare inițializează componentele hardware și variabilele globale:</p
-        <​p></​p>​ + 
-        <h2 id="jurnal">Jurnal</​h2>​ +<p>Funcția <​code>​setup</​code>​ inițializează componentele hardware și variabilele globale:</p> 
-        <​p></​p>​+ 
 +<​pre><​code>​void setup() { 
 +    // Initialize serial communication,​ I2C, SPI, LCD, RTC, GPIO pins, etc. 
 +
 +</​code></​pre>​ 
 + 
 +<​p>​Funcția <​code>​loop</​code>​ gestionează logica de acces și navigarea în meniurile administrative:</​p>​ 
 + 
 +<​pre><​code>​void loop() { 
 +     -> Verifica admin 
 +        ​-> Verifică proximitate card 
 +           -> Verifica access/​iesire 
 +           -> Printează mesaje de acces 
 +              -> Logheaza timer 
 +              -> Aprinde LED 
 +              -> Porneste buzzer 
 +     -> Printează mesaje idle, etc. 
 +
 +</​code></​pre>​ 
 + 
 +<​p>​Funcțiile auxiliare gestionează componentele hardware și interacțiunea utilizatorului,​ cum ar fi afișarea mesajelor pe LCD, citirea valorilor joystick-ului și operarea LED-urilor și buzzer-ului:</​p>​ 
 + 
 +<​pre><​code>​void adminLogged() { 
 +    // Gestionează meniurile administrative când administratorul este logat 
 +
 + 
 +void handleAdminAccess() { 
 +    // Gestionează accesul administratorului la sistem 
 +
 + 
 +void handleUserAccess(String readUID) { 
 +    // Gestionează accesul utilizatorilor obișnuiți la sistem 
 +
 + 
 +void displayAccessDenied() { 
 +    // Afișează mesajul de acces refuzat 
 +
 + 
 +void printIdle() { 
 +    // Afișează mesajul de așteptare 
 +
 + 
 +void printStringOnLCD(const char *message) { 
 +    // Afișează un mesaj pe ecranul LCD 
 +
 + 
 +String convertUID(MFRC522 &​mfrc522) { 
 +    // Convertește UID-ul citit de la cardul RFID într-un string 
 +
 + 
 +bool isAuthorizedUID(String uid) { 
 +    // Verifică dacă UID-ul citit este autorizat 
 +
 + 
 +void turnOffLEDs() { 
 +    // Stinge toate LED-urile 
 +
 + 
 +void setDateTime() { 
 +    // Setează data și ora în RTC 
 +
 +</​code></​pre>​ 
 + 
 +<​p>​Validarea funcționalităților a fost realizată prin teste individuale pentru fiecare componentă hardware și prin teste integrate pentru întregul sistem, asigurând astfel o funcționare corectă și eficientă.</​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 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>​ 
 + 
 +<​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
 + 
 +<p>​Calibrarea cititorului RFID:</​p>​ 
 +<​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++) { 
 +        if (authorizedUsers[i].uid == uid) return true; 
 +    } 
 +    return false; 
 +
 +</​code></​pre>​ 
 +    </​p>​ 
 + 
 + 
 +</​div>​ 
 +  
 + 
 +        <h2 id="video">Video</​h2>​ 
 +    <​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="​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>​
pm/prj2024/mdinica/andrei.dragomir1401.1715976410.txt.gz · Last modified: 2024/05/17 23:06 by andrei.dragomir1401
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0