Differences

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

Link to this comparison view

pm:prj2024:sseverin:iconstantinescu1206 [2024/05/16 15:04]
iconstantinescu1206 [Hardware Design]
pm:prj2024:sseverin:iconstantinescu1206 [2024/05/27 04:44] (current)
iconstantinescu1206 [Concluzii]
Line 31: Line 31:
  
 {{:​pm:​prj2024:​sseverin:​feline_feeder2.jpeg?​300|}} {{:​pm:​prj2024:​sseverin:​feline_feeder2.jpeg?​300|}}
- 
 ===== Software Design ===== ===== Software Design =====
  
 +===Mediu de Dezvoltare===
 +  * **Arduino IDE**
  
-<note tip> + 
-Descrierea codului aplicaţiei ​(firmware): +===Librării și surse 3rd-party=== 
-  * mediu de dezvoltare ​(if any) (e.g. AVR Studio, CodeVisionAVR) +  * **Wire.h**: Biblioteca standard Arduino pentru comunicarea I2C. 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) +  * **RTClib.h**:​ Biblioteca pentru manipularea modulelor RTC, cum ar fi DS3231. 
-  * algoritmi şi structuri pe care plănuiţi ​să le implementaţi +  * **LiquidCrystal_I2C.h**:​ Biblioteca pentru controlul afișajului LCD I2C. 
-  * (etapa 3) surse şi funcţii implementate +  * **Servo.h**:​ Biblioteca pentru controlul servo motoarelor. 
-</note>+  * **Keypad.h**:​ Biblioteca pentru interfațarea cu un keypad matricial. 
 + 
 + 
 +=== Algoritmi și structuri implementate === 
 + 
 +**1. Inițializare și configurare hardware:​** 
 + 
 +  * Configurarea modulelor RTC, LCD și servo. 
 +  * Configurarea interfeței cu keypad-ul. 
 +  * Configurarea unui timer pentru controlul duratei de activare a servo-ului. 
 +  * Configurarea unui buton pentru intrarea în modul de setare a orei de hrănire. 
 + 
 +**2. Funcționalitate principală:​** 
 + 
 +  * Afișarea timpului curent pe afișajul LCD. 
 +  * Detectarea și intrarea în modul de setare a timpului de hrănire când se apasă butonul. 
 +  * Permite utilizatorului să introducă ora de hrănire utilizând keypad-ul. 
 +  * Stocarea și afișarea orei de hrănire setate. 
 + 
 +**3. Controlul hrănirii automate:​** 
 + 
 +  * Compararea orei curente cu ora de hrănire setată. 
 +  * Activarea servo-ului pentru a deschide compartimentul de hrană la ora setată. 
 +  * Folosirea unui timer pentru a menține servo-ul activat pentru o perioadă specificată de timp. 
 + 
 + 
 +===Surse şi Funcţii Implementate=== 
 + 
 +1. Configurarea hardware: 
 + 
 +**void configure_timer2()**:​ Configurarea timerului 2 pentru generarea unei întreruperi la fiecare 1 ms. 
 +<code> 
 +void configure_timer2()  
 +{ 
 +  TCCR2A = 0; 
 +  TCCR2B = 0; 
 +  TCNT2 = 0; 
 +  OCR2A = 249; 
 +  TCCR2A |= (1 << WGM21); 
 +  TCCR2B |= (1 << CS22); 
 +   
 +} 
 +</​code>​ 
 + 
 +**void init_timer2()**: Inițializarea timerului 2. 
 +<​code>​ 
 +void init_timer2()  
 +{ 
 +  ​TIMSK2 |= (1 << OCIE2A); 
 +} 
 +</​code>​ 
 + 
 +**void configure_button()**:​ Configurarea butonului ​de intrare în modul de setare a orei de hrănire. 
 +<​code>​ 
 +void configure_button()  
 +{ 
 +  DDRD&=~(1<<​PD2); 
 +  ​PORTD|=(1<<​PD2);​ 
 +  PCICR |= (1 << PCIE2); 
 +  PCMSK2 |= (1 << PCINT18); 
 +} 
 +</​code>​ 
 + 
 +2. Funcții ISR (Interrupt Service Routine): 
 + 
 +**ISR(TIMER2_COMPA_vect)**:​ Funcția de întrerupere pentru Timerul 2 care controlează durata de activare a servo-ului. 
 +<​code>​ 
 +ISR(TIMER2_COMPA_vect)  
 +{ 
 +  if (timer2Flag)  
 +  { 
 +    unsigned long currentMillis = millis(); 
 +    if (currentMillis - previousMillis >= interval)  
 +    { 
 +      servo.write(0); 
 +      timer2Flag = false; 
 +    } 
 +  } 
 +} 
 +</​code>​ 
 + 
 +**ISR(PCINT2_vect)**:​ Funcția de întrerupere pentru butonul de setare a orei de hrănire. 
 +<​code>​ 
 +ISR(PCINT2_vect) 
 +{ 
 +  ​if (!(PIND & (1 << PD2)))  
 +  { 
 +    setTimeMode = true; 
 +  } 
 +} 
 +</​code>​ 
 + 
 +3.Setarea timpului de hrănire: 
 + 
 +**DateTime getDateTime()**:​ Funcția ​care permite utilizatorului ​să introducă ora de hrănire folosind keypad-ul și returnează un obiect DateTime cu ora setată. 
 +<​code>​ 
 +DateTime getDateTime()  
 +{ 
 +  ​DateTime now = rtc.now();​ 
 +  int hour = 0; 
 +  int minute = 0; 
 +  int h = 0; 
 +  int m = 0; 
 +  while (1)  
 +  { 
 +    char key; 
 +    if (key = keypad.getKey()) 
 +    { 
 +      if (key >= '​0'​ && key <= '​9'​)  
 +      { 
 +        if(h == 0) 
 +        { 
 +          hour += (key - '​0'​);​ 
 +          h = 1; 
 +        } 
 +        else if(h == 1) 
 +        { 
 +          hour *= 10; 
 +          hour += (key - '​0'​); 
 +          h = 2; 
 +        }  
 +        else if(m == 0) 
 +        { 
 +          minute += (key - '​0'​);​ 
 +          m = 1; 
 +        }  
 +        else if(m == 1) 
 +        { 
 +          minute *= 10; 
 +          minute += (key - '​0'​);​ 
 +          m = 2; 
 +        } 
 +        lcd.setCursor(0,​ 1); 
 +        if(hour<​10 && h==2) 
 +        { 
 +          lcd.print("​0"​);​ 
 +        } 
 +        lcd.print(hour);​ 
 +        lcd.print(":"​);​ 
 +        if(minute<​10 && m==2) 
 +        { 
 +          lcd.print("​0"​);​ 
 +        } 
 +        lcd.print(minute);​ 
 +      }  
 +      else if (key == '​*'​)  
 +      { 
 +        hour = 0; 
 +        minute = 0; 
 +        h = 0; 
 +        m = 0; 
 +        lcd.setCursor(0,​ 1); 
 +        lcd.print(" ​     "); 
 +        lcd.setCursor(0,​ 1); 
 +        lcd.print("​00:​00"​);​ 
 +      }  
 +      else if (key == '#'​)  
 +      { 
 +        if (hour < 24 && minute < 60)  
 +        { 
 +          break; 
 +        }  
 +        else 
 +        { 
 +          hour = 0; 
 +          minute = 0; 
 +          h = 0; 
 +          m = 0; 
 +          lcd.clear();​ 
 +          lcd.print("​The time is"​);​ 
 +          lcd.setCursor(0,​ 1); 
 +          lcd.print("​incorrect."​);​ 
 +          delay(2000);​ 
 +          lcd.clear();​ 
 +          lcd.print("​Set feeding time:"​);​ 
 +          lcd.setCursor(0,​ 1); 
 +          lcd.print(" ​     "); 
 +          lcd.setCursor(0,​ 1); 
 +          lcd.print("​00:​00"​);​ 
 +        } 
 +      } 
 +    } 
 +  } 
 +  return DateTime(now.year(),​ now.month(),​ now.day(), hour, minute, 0); 
 +} 
 +</code> 
 + 
 +4.Funcții de inițializare:​ 
 + 
 +**void setup()**: Funcția de setup pentru inițializarea tuturor componentelor hardware și setarea inițială a RTC-ului. 
 + 
 +5.Funcția principală de loop: 
 + 
 +**void loop()**: Funcția principală care rulează în buclă infinită, afișând ora curentă și verificând dacă este timpul de hrănire.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
 <note tip> <note tip>
-Care au fost rezultatele obţinute în urma realizării proiectului vostru.+Demo: https://​youtube.com/​shorts/​5ol52AkM5Os?​si=_Y6OJJ0E64xwd0GT
 </​note>​ </​note>​
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +Mi-a placut foarte mult sa lucrez la acest proiect. Ma asteptam sa fie mai usor putin dar a fost super interesant sa lucrez la partea de hardware si chiar sa imi iasa :))). Poate voi testa proiectul si cu pisica mea. 
 ===== Download ===== ===== Download =====
  
 <note warning> <note warning>
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +Descarcare arhiva: **{{:pm:prj2024:sseverin:felinefeeder.zip|}}**
- +
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**.+
 </​note>​ </​note>​
  
-===== Jurnal ===== 
- 
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
 <​note>​ <​note>​
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**.+https://​www.youtube.com/​watch?​v=BiWoA81fgTE&​list=WL&​index=48&​t=1s 
 +https://​circuitdigest.com/​microcontroller-projects/​automatic-pet-feeder-using-arduino 
 +[[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab2-2023]]
 </​note>​ </​note>​
  
 <​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>​
  
pm/prj2024/sseverin/iconstantinescu1206.1715861049.txt.gz · Last modified: 2024/05/16 15:04 by iconstantinescu1206
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