Differences

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

Link to this comparison view

pm:prj2024:iotelea:gabriel.comisaru [2024/05/17 22:18]
gabriel.comisaru [Introducere]
pm:prj2024:iotelea:gabriel.comisaru [2024/05/26 23:30] (current)
gabriel.comisaru [Rezultate Obţinute]
Line 12: Line 12:
 Modul de functionare al automatului va fi urmatorul: Modul de functionare al automatului va fi urmatorul:
  
-  * Senzorul de temperatura masoara valoarea temperaturii din incapere la fiecare moment de timp.+  * Senzorul de temperatura masoara valoarea temperaturii din incapere la fiecare moment de timp
   * Informatia este procesata si se afiseaza pe un ecran LCD temperatura curenta   * Informatia este procesata si se afiseaza pe un ecran LCD temperatura curenta
   * Cand temperatura trece de un anumit threshold setat anterior utilizand joystick-ul,​ ventilatorul si pompa de apa vor porni   * Cand temperatura trece de un anumit threshold setat anterior utilizand joystick-ul,​ ventilatorul si pompa de apa vor porni
Line 31: Line 31:
   - duză de pulverizare   - duză de pulverizare
   - tranzistori & rezistoare   - tranzistori & rezistoare
 +  - diode
   - conectori & fire   - conectori & fire
   - sursă de alimentare   - sursă de alimentare
   - display lcd cu meniu   - display lcd cu meniu
-  - butoane de control / joystick+  - joystick
   - ventilator   - ventilator
 </​note>​ </​note>​
  
-{{ :​pm:​prj2024:​iotelea:​gabi_sch.jpg?800 |}}+{{ :​pm:​prj2024:​iotelea:​gabieagle.png?800 |}}
  
 {{ :​pm:​prj2024:​iotelea:​whatsapp_image_2024-05-17_at_22.08.45.jpeg?​800 |}} {{ :​pm:​prj2024:​iotelea:​whatsapp_image_2024-05-17_at_22.08.45.jpeg?​800 |}}
 +Updated:​\\ 
 +{{ :​pm:​prj2024:​iotelea:​gabiult.jpeg?​800 |}} 
 +Final product:​\\ 
 +{{ :​pm:​prj2024:​iotelea:​whatsapp_image_2024-05-26_at_22.35.22.jpeg?​800 |}}
 ===== Software Design ===== ===== Software Design =====
  
  
-<note tip> +**Mediu de dezvoltare:​** Arduino IDE\\ 
-TODO+**Versiunea:​** 1.8.19
  
-</note>+**Librarii si surse 3rd-Party:​**\\ 
 +  - LiquidCrystal.h 
 +    * Biblioteca este utilizata pentru a controla ecranul LCD oferind unfctii simple pentru a afisa text pe un LCD cu 16x2 caractere. 
 +    * <code c> #include <​LiquidCrystal.h>​ </​code>​ 
 +  - DallasTemperature.h 
 +      * Biblioteca folosita pentru citirea temperaturii de la senzorul de temperatura. 
 +      * <code c> #include <​DallasTemperature.h>​ </​code>​ 
 +  - OneWire.h 
 +      * Biblioteca folosita alaturi de cea Dallas pentru comunicarea cu senzorul de temperatura. 
 +      * <code c> #include <​OneWire.h>​ </​code>​ 
 +  - TimerOne.h 
 +      * Aceasta biblioteca permite utilizarea timerului 1 de pe microcontroller pentru a seta intreruperi temporizate. Am utilizat-o pentru a verifica temperatura la intervale regulate. 
 +      * <code c> #include <​TimerOne.h>​ </​code>​ 
 + 
 +**Algoritmi si structuri pe care le-am implementat:​** 
 +  - Meniul interactiv 
 +    * Meniul interactiv este controlat printr-un joystick. Structura meniului permite utilizatorului sa navigheze intre optiuni si sa selecteze diverse actiuni. Exista doua optiuni prinicpale:​ 
 +       - Afisarea temperaturii curente: Afiseaza temperatura citita de la senzor. 
 +       - Schimbarea temperaturii de prag: Permite utilizatorului sa seteze o noua valoare de preag pentru temperatura. 
 +    * Functii: 
 +       - <code c>​updateMenu()</​code>​ Actualizeaza meniul pe ecranul LCD in functie de selectiile utilizatorului. 
 +       - <code c>​menuSelection()</​code>​ Gestioneaza actiunile efectuate atunci cand utilizatorul selecteaza o optiune din meniu. 
 +   - Controlul pompei si al ventilatorului 
 +     Pompa si ventilatorul sunt controlate in functie de temperatura citita de la senzor. 
 +     * Daca temperatura depaseste pragul setat, ventilatorul este pornit si pompa este activata pentru o secunda, urmata de o perioada de pauza de 5 secunda, dupa care este pornita din nou s.a.m.d. 
 +     * Ventilatorul ramane pornit atata timp cat temperatura este peste pragul setat. 
 +     ​Functii:​ 
 +     * <code c> timerISR() </​code>​ Seteaza un flag la intervale de 5 secunde pentru a indica ca este timpul sa se verifice temperatura. 
 +     * <code c> loop() </​code>​ Codul din loop() gestioneaza activarea si dezactivarea pompei si ventilatorului. 
 + 
 +**Surse si functii implementate:​** 
 + 
 +<code c> setup() </​code>​ Initializarea LCD-ului, senzorului si configurarea piniilor pentru joystick, pompa si ventilator si a temporizatorului pentru verificarea temperaturii:​ 
 +   
 +<file c setup.c>​ 
 +  // set up the LCD's number of columns and rows: 
 +  lcd.begin(16,​ 2); 
 +  sensors.begin();​ 
 +  Serial.begin(9600);​ // Starting Serial for Joystick 
 +  lcd.setCursor(3,​0);​ 
 +   
 +  // Print the welcome message to the LCD. 
 +  lcd.print("​Welcome to"​);​ 
 +  lcd.setCursor(3,​1);​ 
 +  lcd.print("​AquaBreeze"​);​ 
 + 
 +  // Initial position of the JoyStick 
 +  xInit = analogRead(joyX);​ 
 +  yInit = analogRead(joyY);​ 
 + 
 +  pinMode(joyButton,​ INPUT_PULLUP);​ 
 +  pinMode(pumpPin,​ OUTPUT); 
 +  pinMode(fanPin,​ OUTPUT); 
 + 
 +  delay(5000);​ 
 + 
 +  // Check the temp every 5s 
 +  Timer1.initialize(5000000);​ 
 +  Timer1.attachInterrupt(timerISR);​ 
 +   
 +  updateMenu();​ 
 +</​file>​ 
 + 
 +<code c>​loop()</​code>​ 
 +Citirea valorilor de la joystick pentru navigarea in meniu: 
 +<file c joystick.c>​ 
 +int xValue = analogRead(joyX);​ 
 +int yValue = analogRead(joyY);​ 
 +int joyButtonState = digitalRead(joyButton);​ 
 +</​file>​ 
 +Actualizarea afisajului LCD. 
 +<file c lcd.c> 
 +f (yValue < yInit - DRIFT) { 
 +      menuIndex = 0; 
 +      updateMenu();​ 
 +      delay(300);​ 
 +    } else if (yValue > yInit + DRIFT) { 
 +      menuIndex = 1; 
 +      updateMenu();​ 
 +      delay(300); ​   
 +    } 
 +
 +</​file>​ 
 +Verificarea si actualizarea starii pompei si ventilatorului in functie de temperatura citita de la senzor. 
 +<file c motors.c>​ 
 +if (temp > tempThreshold) { 
 +    unsigned long currentTime = millis(); 
 +    digitalWrite(fanPin,​ HIGH); 
 +    if (!pumpActive && (currentTime - lastPumpTime >= pumpCooldown)) { 
 +        digitalWrite(pumpPin,​ HIGH); 
 +        delay(pumpActiveTime);​ 
 +        digitalWrite(pumpPin,​ LOW); 
 +        lastPumpTime = currentTime;​  
 +    } 
 +} else { 
 +        digitalWrite(fanPin,​ LOW); 
 +
 +</​file>​ 
 + 
 +<code c> menuSelection() </​code>​ 
 +Afisarea temperaturii curente. 
 +<file c currTemp.c>​ 
 +lcd.setCursor(0,​0);​ 
 +lcd.print("​Current Temp:"​);​ 
 +lcd.setCursor(0,​1);​ 
 +lcd.print(temp);​ 
 +lcd.print("​ C"); 
 +</​file>​ 
 +Afisarea schimbarii temperaturii de prag de catre utilizator. 
 +<file c changeTemp.c>​ 
 +lcd.setCursor(0,​0);​ 
 +lcd.print("​Set new temp:"​);​ 
 +lcd.setCursor(0,​1);​ 
 +lcd.print("<​ "); 
 +lcd.print(tempThreshold);​ 
 +lcd.print("​ C >"​);​ 
 +</file> 
 + 
 +===== Download ===== 
 +{{:​pm:​prj2024:​iotelea:​aquabreeze.zip|}}
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
 <note tip> <note tip>
-TODO+Video cu demo: https://​www.youtube.com/​watch?​v=FfeswgPBJQo&​ab_channel=GabrielComisaru
 </​note>​ </​note>​
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download ===== +Per total, proiectul a fost un succes, am implementat tot ce mi-am propus. Au existat destule probleme întâmpinate,​ precum gestionarea consumului de energie, având în vedere numărul de componente conectate la Arduino. Inițial, când conectam senzorul, joystick-ul,​ LCD-ul și pompa, Arduino-ul era suprasolicitat și se reseta de fiecare dată când se pornea pompa 8-O. A fost nevoie să folosesc o alimentare externă, dar pompa avea nevoie de 3-6V și nu am găsit astfel de baterii, așa că am conectat în serie două baterii de 1.5V folosind bandă adezivă ^_^. Din fericire, această improvizație a funcționat și am reușit să duc la bun sfârșit proiectul. ​
- +
-<note warning>​ +
-TODO +
-</​note>​+
  
 +Din acest lucru am învățat că pe viitor trebuie să fiu mai atent când îmi comand piesele și să mă gândesc mai bine dacă Arduino-ul este suficient ca sursă de alimentare pentru toate componentele pe care le voi avea.
 ===== Jurnal ===== ===== Jurnal =====
  
 <note tip> <note tip>
 05.05.2024 - Creare pagina wiki\\ 05.05.2024 - Creare pagina wiki\\
 +12.05.2024 - Comanda piese\\
 16.05.2024 - Compunere schema bloc\\ 16.05.2024 - Compunere schema bloc\\
-17.05.2024 - Adaugare schema hardware + poze+17.05.2024 - Adaugare schema hardware + poze\\ 
 +24.05.2024 - Adaugare implementare software\\ 
 +25.05.2024 - Rezultatele obtinute printr-un video\\
 </​note>​ </​note>​
  
Line 75: Line 198:
  
 <​note>​ <​note>​
-TODO+https://​www.sensingthecity.com/​tutorial-controlling-submersible-pump-with-arduino/​ 
 +https://​docs.arduino.cc/​built-in-examples/​usb/​JoystickMouseControl/​ 
 +https://​www.youtube.com/​watch?​v=s_-nIgo71_w&​ab_channel=ScienceBuddies 
 + 
 +https://​www.arduino.cc/​reference/​en/​libraries/​liquidcrystal/​ 
 +https://​www.arduino.cc/​reference/​en/​libraries/​dallastemperature/​ 
 +https://​github.com/​sparkfun/​SparkFun-Eagle-Libraries
 </​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/iotelea/gabriel.comisaru.1715973488.txt.gz · Last modified: 2024/05/17 22:18 by gabriel.comisaru
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