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:03]
iconstantinescu1206
pm:prj2024:sseverin:iconstantinescu1206 [2024/05/27 04:44] (current)
iconstantinescu1206 [Concluzii]
Line 26: Line 26:
  
 {{:​pm:​prj2024:​sseverin:​feline_feeder1.jpeg?​300|}} {{:​pm:​prj2024:​sseverin:​feline_feeder1.jpeg?​300|}}
-{{ :​pm:​prj2024:​sseverin:​feline3.jpeg?​300 |}}+{{:​pm:​prj2024:​sseverin:​feline3.jpeg?​300|}}
  
 === Schemă Electrică === === Schemă Electrică ===
  
-{{ :​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.gProcyon AVRlib+  * **RTClib.h**:​ Biblioteca pentru manipularea modulelor RTC, cum ar fi DS3231. 
-  * algoritmi şi structuri pe care plănuiţi ​să le implementaţ+  * **LiquidCrystal_I2C.h**:​ Biblioteca pentru controlul afișajului LCD I2C. 
-  * (etapa 3surse ş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 ș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 proiectuluisurse, 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.1715860988.txt.gz · Last modified: 2024/05/16 15:03 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