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:06]
iconstantinescu1206 [Download]
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===
 +
 +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 =====
Line 73: 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 79: 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.1716772000.txt.gz · Last modified: 2024/05/27 04:06 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