Înfruntând căldurile sufocante ale căminului și amenințările iminente de incendiu, AquaBreeze este răspunsul ingenios la climatul instabil din interior. Cu un singur scop: să aducă răcoare și siguranță în spațiile de viață, acest proiect revoluționar transformă căldura opresivă într-o adiere revigorantă de prospețime. Cu tehnologie de vârf și acțiuni rapide, AquaBreeze este soluția la incendiile și disconfortul termic, oferind un mediu confortabil și sigur pentru fiecare locuitor al căminului.
Modul de functionare al automatului va fi urmatorul:
Mediu de dezvoltare: Arduino IDE
Versiunea: 1.8.19
Librarii si surse 3rd-Party:
#include <LiquidCrystal.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <TimerOne.h>
Algoritmi si structuri pe care le-am implementat:
updateMenu()
Actualizeaza meniul pe ecranul LCD in functie de selectiile utilizatorului.
menuSelection()
Gestioneaza actiunile efectuate atunci cand utilizatorul selecteaza o optiune din meniu.
Pompa si ventilatorul sunt controlate in functie de temperatura citita de la senzor.
Functii:
timerISR()
Seteaza un flag la intervale de 5 secunde pentru a indica ca este timpul sa se verifice temperatura.
loop()
Codul din loop() gestioneaza activarea si dezactivarea pompei si ventilatorului.
Surse si functii implementate:
setup()
Initializarea LCD-ului, senzorului si configurarea piniilor pentru joystick, pompa si ventilator si a temporizatorului pentru verificarea temperaturii:
// 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();
loop()
Citirea valorilor de la joystick pentru navigarea in meniu:
int xValue = analogRead(joyX); int yValue = analogRead(joyY); int joyButtonState = digitalRead(joyButton);
Actualizarea afisajului LCD.
f (yValue < yInit - DRIFT) { menuIndex = 0; updateMenu(); delay(300); } else if (yValue > yInit + DRIFT) { menuIndex = 1; updateMenu(); delay(300); } }
Verificarea si actualizarea starii pompei si ventilatorului in functie de temperatura citita de la senzor.
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); }
menuSelection()
Afisarea temperaturii curente.
lcd.setCursor(0,0); lcd.print("Current Temp:"); lcd.setCursor(0,1); lcd.print(temp); lcd.print(" C");
Afisarea schimbarii temperaturii de prag de catre utilizator.
lcd.setCursor(0,0); lcd.print("Set new temp:"); lcd.setCursor(0,1); lcd.print("< "); lcd.print(tempThreshold); lcd.print(" C >");
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 . 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.
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.
https://www.arduino.cc/reference/en/libraries/liquidcrystal/ https://www.arduino.cc/reference/en/libraries/dallastemperature/ https://github.com/sparkfun/SparkFun-Eagle-Libraries