Differences

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

Link to this comparison view

pm:prj2024:iotelea:cristina.mitu2512 [2024/05/26 20:07]
cristina.mitu2512 [Rezultate Obţinute]
pm:prj2024:iotelea:cristina.mitu2512 [2024/05/26 22:48] (current)
cristina.mitu2512 [Rezultate Obţinute]
Line 105: Line 105:
 RTC_DS3231 rtc; RTC_DS3231 rtc;
  
-const int buttonPin = A3;  // Pinul la care este conectat butonul +const int buttonPin = A3; // Pinul la care este conectat butonul 
-int buttonState = 0;       ​// Variabila pentru a stoca starea butonului (apasat sau nu) +int buttonState = 0; // Variabila pentru a stoca starea butonului (apasat sau nu) 
-bool showMenu = false; +bool showMenu = false; ​// Dacă este true se afișează meniul 
-boolean feed = false;+boolean feed = false; ​// Dacă a fost ales meniul A true, altfel false
 int feedingHour = -1; int feedingHour = -1;
 int feedingMinute = -1; int feedingMinute = -1;
 int menuSelected = 0;  // 0 = Niciun meniu, 1 = Meniu B dieta, 2 = Meniu C normal, 3 = Meniu A int menuSelected = 0;  // 0 = Niciun meniu, 1 = Meniu B dieta, 2 = Meniu C normal, 3 = Meniu A
-int presetFeedingTimes[3][3];​ // Ora și minutul ​pentru hrănirile prestabilite +int presetFeedingTimes[3][3];​ // Ora, minut, secundă  ​pentru hrănirile prestabilite 
-bool butB = false; +bool butB = false; ​// Dacă a fost ales meniul B true, altfel false 
-bool butC = false;+bool butC = false; ​// Dacă a fost ales meniul C true, altfel false
 </​code>​ </​code>​
   * **in setup():** Inițializez comunicarea I2C, necesară pentru interacțiunea cu ceasul în timp real (RTC) și display-ul LCD. Apoi, configurez display-ul LCD pentru a afișa informații,​ iar iluminarea de fundal este activată pentru o vizibilitate mai bună. Atașez servomecanismul la pinul specificat pentru a permite controlul său. De asemenea, stabilesc orele, minutele și secundele pentru hrănirile prestabilite,​ care sunt stocate într-o matrice. Apoi, verific și inițializez modulul RTC, iar dacă acesta nu poate fi accesat, se afișează un mesaj de eroare pe display. La final, configurez pinul butonului ca intrare, pentru a permite detectarea apăsărilor butonului și interacțiunea cu sistemul în timpul rulării programului. ​   * **in setup():** Inițializez comunicarea I2C, necesară pentru interacțiunea cu ceasul în timp real (RTC) și display-ul LCD. Apoi, configurez display-ul LCD pentru a afișa informații,​ iar iluminarea de fundal este activată pentru o vizibilitate mai bună. Atașez servomecanismul la pinul specificat pentru a permite controlul său. De asemenea, stabilesc orele, minutele și secundele pentru hrănirile prestabilite,​ care sunt stocate într-o matrice. Apoi, verific și inițializez modulul RTC, iar dacă acesta nu poate fi accesat, se afișează un mesaj de eroare pe display. La final, configurez pinul butonului ca intrare, pentru a permite detectarea apăsărilor butonului și interacțiunea cu sistemul în timpul rulării programului. ​
Line 124: Line 124:
   servo1.attach(servoPin);​   servo1.attach(servoPin);​
  
-  presetFeedingTimes[0][0] = 20;   ​// Prima ora de hrănire prestabilită +  presetFeedingTimes[0][0] = 20; // Prima ora de hrănire prestabilită 
-  presetFeedingTimes[0][1] = 44;   ​// Minutul +  presetFeedingTimes[0][1] = 44; // Minutul 
-  presetFeedingTimes[0][2] = 0; +  presetFeedingTimes[0][2] = 0;  // Secunda 
-  presetFeedingTimes[1][0] = 20;  // A doua ora de hrănire prestabilită +  presetFeedingTimes[1][0] = 20; // A doua ora de hrănire prestabilită 
-  presetFeedingTimes[1][1] = 44;   // Minutul+  presetFeedingTimes[1][1] = 44;
   presetFeedingTimes[1][2] = 20;   presetFeedingTimes[1][2] = 20;
-  presetFeedingTimes[2][0] = 20;  // A treia ora de hrănire prestabilită +  presetFeedingTimes[2][0] = 20; // A treia ora de hrănire prestabilită 
-  presetFeedingTimes[2][1] = 44;   // Minutul+  presetFeedingTimes[2][1] = 44;
   presetFeedingTimes[2][2] = 35;   presetFeedingTimes[2][2] = 35;
   ​   ​
Line 252: Line 252:
     lcd.print(now.year());​     lcd.print(now.year());​
  
-    // Verifică dacă este ora de hrănire setată+    // Verifică dacă este ora de hrănire setată ​pentru meniul A
     if (now.hour() == feedingHour && now.minute() == feedingMinute && feed) {     if (now.hour() == feedingHour && now.minute() == feedingMinute && feed) {
       servo1.write(-90);​       servo1.write(-90);​
Line 261: Line 261:
       feed = false; // Dezactivează hrănirea după efectuare       feed = false; // Dezactivează hrănirea după efectuare
     }     }
 +    // Dacă a fost ales meniul B
     if (butB == true) {     if (butB == true) {
       int i;       int i;
Line 277: Line 278:
       }       }
     }     }
 +    // Dacă a fost ales meniul C
     if (butC == true) {     if (butC == true) {
       int i;       int i;
Line 313: Line 315:
  
   lcd.clear();​   lcd.clear();​
-  lcd.setCursor(0,​0);​+  lcd.setCursor(0,​ 0);
   lcd.print("​Set feeding Time"​);​   lcd.print("​Set feeding Time"​);​
-  lcd.setCursor(0,​1);​+  lcd.setCursor(0,​ 1);
   lcd.print("​HH:​MM"​);​   lcd.print("​HH:​MM"​);​
-  lcd.setCursor(0,​2);​+  lcd.setCursor(0,​ 2);
   while(1){   while(1){
     key = keypad.getKey();​     key = keypad.getKey();​
     if(key >= '​0'​ && key <= '​9'​){ // Acceptă doar cifre     if(key >= '​0'​ && key <= '​9'​){ // Acceptă doar cifre
-      lcd.setCursor(j,​2);​+      lcd.setCursor(j,​ 2);
       lcd.print(key);​       lcd.print(key);​
       r[i] = key - '​0';​ // Convertește tasta apăsată la valoare numerică       r[i] = key - '​0';​ // Convertește tasta apăsată la valoare numerică
Line 348: Line 350:
 </​code>​ </​code>​
  
 +//​Funcționalități din laborator//
 +
 +Proiectul integrează mai multe noțiuni fundamentale învățate în laboratoare,​ cum ar fi utilizarea ADC, I2C, Keypad, RTC și Servo.
 +  * //Analog Digital Converter (ADC):// Codul utilizează ADC pentru a citi starea butonului conectat la pinul analogic A3, permițând detectarea interacțiunilor utilizatorului.
 +  * //I2C (Inter-Integrated Circuit):// Protocolul I2C este utilizat pentru comunicarea cu afișajul LCD și modulul RTC (Real-Time Clock). Funcțiile Wire.begin(),​ lcd.begin(),​ și rtc.begin() permit afișarea informațiilor în timp real despre starea sistemului și timpul actual.
 +  * //Keypad:// Utilizarea bibliotecii Keypad pentru a citi input-ul de la o tastatură matricială. Funcția keypad.getKey() permite citirea tastelor apăsate, esențială pentru interacțiunea utilizatorului cu sistemul.
 +  * //RTC (Real-Time Clock):// Modulul RTC DS3231 este utilizat pentru a menține și afișa data și ora curente. Funcția rtc.now() este folosită pentru a obține timpul actual, esențial pentru funcționalitatea de hrănire la ore prestabilite.
 +  * //Servo:// Biblioteca Servo este utilizată pentru a controla un servo motor. Funcțiile servo1.attach(servoPin) și servo1.write(angle) permit controlul precis al poziției servo-ului, esențial pentru mecanismul de distribuire a hranei.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
 Cu toate că Oscar, motanul meu, nu pare să fie impresionat de proiect, știu că are o latură entuziasmată pe care o păstrează pentru el.:-D Cu toate că Oscar, motanul meu, nu pare să fie impresionat de proiect, știu că are o latură entuziasmată pe care o păstrează pentru el.:-D
 +
 {{ :​pm:​prj2024:​iotelea:​proiect_oscar.png |}} {{ :​pm:​prj2024:​iotelea:​proiect_oscar.png |}}
 <note tip> <note tip>
 https://​youtu.be/​IaUBfM3O-8s https://​youtu.be/​IaUBfM3O-8s
 </​note>​ </​note>​
-//Rezumat video://+**//Rezumat video://** 
 Inițial, am selectat tasta '​C'​ pentru a seta meniul normal, cu orele prestabilite la 16:04:00, 16:04:20 și 16:04:35. În timp ce așteptam să se facă orele respective, am vrut să testez și alte funcționalități ale sistemului. Pentru a verifica dacă ecranul afișează mesajele corecte, am selectat un alt meniu la întâmplare. Am vrut să mă asigur că mesajul "Ai introdus deja un meniu!"​ apare pe ecran atunci când se încearcă setarea unui meniu nou după ce unul este deja activ. Exact așa s-a întâmplat:​ ecranul a afișat corect mesajul, indicând că nu pot seta un alt meniu până nu îl șterg pe cel actual. Apoi, am ales o tasta la întâmplare,​ alta decât cele specifice meniului, pentru a testa cum se comportă sistemul. După apăsarea tastei necorespunzătoare,​ ecranul a afișat mesajul "Tasta invalida!",​ confirmând că programul recunoaște și gestionează corect inputurile incorecte. La ora 16:04:00, sistemul a început să execute meniul '​C'​. Conform specificațiilor,​ meniul '​C'​ face două ture pentru fiecare oră prestabilită,​ rotind servomecanismul cu -90 de grade și apoi înapoi la 90 de grade. Această secvență s-a repetat și la 16:04:20 și 16:04:35, confirmând că funcția a fost implementată corect. După ce aceste ore au trecut și meniul '​C'​ și-a încheiat ciclul, am introdus meniul '​A'​. Pentru acesta, a trebuit să aleg ora de hrănire manual, introducând-o prin keypad. Am setat ora la 16:05, iar sistemul a acceptat și afișat noua oră corect. Ulterior, am ales meniul '​B'​ și am vrut să testez funcția de ștergere a meniului. Am apăsat tasta '​D',​ iar ecranul a afișat mesajul "​Meniul a fost sters!",​ indicând că toate meniurile active au fost resetate și sistemul este pregătit pentru o nouă selecție. Inițial, am selectat tasta '​C'​ pentru a seta meniul normal, cu orele prestabilite la 16:04:00, 16:04:20 și 16:04:35. În timp ce așteptam să se facă orele respective, am vrut să testez și alte funcționalități ale sistemului. Pentru a verifica dacă ecranul afișează mesajele corecte, am selectat un alt meniu la întâmplare. Am vrut să mă asigur că mesajul "Ai introdus deja un meniu!"​ apare pe ecran atunci când se încearcă setarea unui meniu nou după ce unul este deja activ. Exact așa s-a întâmplat:​ ecranul a afișat corect mesajul, indicând că nu pot seta un alt meniu până nu îl șterg pe cel actual. Apoi, am ales o tasta la întâmplare,​ alta decât cele specifice meniului, pentru a testa cum se comportă sistemul. După apăsarea tastei necorespunzătoare,​ ecranul a afișat mesajul "Tasta invalida!",​ confirmând că programul recunoaște și gestionează corect inputurile incorecte. La ora 16:04:00, sistemul a început să execute meniul '​C'​. Conform specificațiilor,​ meniul '​C'​ face două ture pentru fiecare oră prestabilită,​ rotind servomecanismul cu -90 de grade și apoi înapoi la 90 de grade. Această secvență s-a repetat și la 16:04:20 și 16:04:35, confirmând că funcția a fost implementată corect. După ce aceste ore au trecut și meniul '​C'​ și-a încheiat ciclul, am introdus meniul '​A'​. Pentru acesta, a trebuit să aleg ora de hrănire manual, introducând-o prin keypad. Am setat ora la 16:05, iar sistemul a acceptat și afișat noua oră corect. Ulterior, am ales meniul '​B'​ și am vrut să testez funcția de ștergere a meniului. Am apăsat tasta '​D',​ iar ecranul a afișat mesajul "​Meniul a fost sters!",​ indicând că toate meniurile active au fost resetate și sistemul este pregătit pentru o nouă selecție.
  
pm/prj2024/iotelea/cristina.mitu2512.1716743239.txt.gz · Last modified: 2024/05/26 20:07 by cristina.mitu2512
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