Differences

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

Link to this comparison view

pm:prj2024:sseverin:iconstantinescu1206 [2024/05/27 04:11]
iconstantinescu1206 [Software Design]
pm:prj2024:sseverin:iconstantinescu1206 [2024/05/27 04:44] (current)
iconstantinescu1206 [Concluzii]
Line 35: Line 35:
 ===Mediu de Dezvoltare=== ===Mediu de Dezvoltare===
   * **Arduino IDE**   * **Arduino IDE**
 +
  
 ===Librării și surse 3rd-party=== ===Librării și surse 3rd-party===
Line 42: Line 43:
   * **Servo.h**:​ Biblioteca pentru controlul servo motoarelor.   * **Servo.h**:​ Biblioteca pentru controlul servo motoarelor.
   * **Keypad.h**:​ Biblioteca pentru interfațarea cu un keypad matricial.   * **Keypad.h**:​ Biblioteca pentru interfațarea cu un keypad matricial.
 +
  
 === Algoritmi și structuri implementate === === Algoritmi și structuri implementate ===
Line 64: Line 66:
   * Activarea servo-ului pentru a deschide compartimentul de hrană la ora 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.   * Folosirea unui timer pentru a menține servo-ul activat pentru o perioadă specificată de timp.
 +
  
 ===Surse şi Funcţii Implementate=== ===Surse şi Funcţii Implementate===
  
-=1. Configurarea hardware:=+1. Configurarea hardware:
  
 **void configure_timer2()**:​ Configurarea timerului 2 pentru generarea unei întreruperi la fiecare 1 ms. **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. **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. **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):
  
-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(TIMER2_COMPA_vect):​ Funcția de întrerupere pentru Timerul 2 care controlează durata de activare a servo-ului. +**ISR(PCINT2_vect)**: Funcția de întrerupere pentru butonul de setare a orei de hrănire. 
-ISR(PCINT2_vect):​ Funcția de întrerupere pentru butonul de setare a orei de hrănire. +<​code>​ 
-Funcții de inițializare:​+ISR(PCINT2_vect) 
 +
 +  if (!(PIND & (1 << PD2)))  
 +  { 
 +    setTimeMode = true; 
 +  } 
 +
 +</​code>​
  
-void setup(): Funcția ​de setup pentru inițializarea tuturor componentelor hardware și setarea inițială a RTC-ului. +3.Setarea timpului ​de hrănire:
-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+**DateTime getDateTime()**: Funcția care permite utilizatorului să introducă ora de hrănire folosind keypad-ul ​și returnează un obiect DateTime cu ora setată. 
-Setarea timpului de hrănire:+<​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>​
  
-DateTime getDateTime(): ​Funcția care permite utilizatorului să introducă ora de hrănire folosind keypad-ul și returnează un obiect DateTime cu ora setată.+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 =====
Line 97: Line 245:
 ===== 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 =====
  
Line 103: Line 252:
 </​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.1716772299.txt.gz · Last modified: 2024/05/27 04:11 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