This shows you the differences between two versions of the page.
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> |