Moldoveanu Alex-Adrian 333CA
Proiectul consta în realizarea unui cooler pad pentru laptop care pe langa funcționalitatea propriu zisa de a raci laptop-ul , are caracteristica ca puterea de răcire și viteza ii sunt ajustate automat prin intermediul unui senzor de temperatura iar pentru a înștiința utilizatorul despre aceste date folosește un display.Intrucat prin senzorul de temperatura trece curent , el se încălzește iar acest lucru influențează senzorul am ales sa implementez un filtru , acest filtru este de fapt o formula matematica prin care sa înlătur acea eroare a senzorului , voi vorbi mai mult despre acest filtru în paragrafele următoare.
Scopul este unul relativ simplu , acela de a raci componentele unui laptop, și de a le păstra la o temperatura optimă de funcționare . Atunci când componentele unui laptop precum procesorul se încălzesc acestea pierd din randament iar acest lucru poate fi înlăturat prin folosirea unui cooler.
Am ales sa implementez un obiect pe care l-am cumpărat de atâtea ori și de care aproape de fiecare data am fost nemulțumit. Este un obiect atât de util dar și foarte interesant . E o provocare pentru mine sa implementez un obiect pe care îl utilizez în fiecare zi aproape și sa îl fac mai bun decât ceea ce este deja în comerț.
Pentru a porni dispozitivul, utilizatorul trebuie sa conecteze cooler-ul la calculator. Cooler-ul este automatizat în sensul că se activează atunci când temperatura prestabilită este depășită, iar când temperatura scade sub o limită inferioară, ventilatoarele se opresc. Prin actionarea asupra potentiometrului de catre utilizator, acesta poate ajusta viteza ventilatoarelor. Pentru a evita influențarea temperaturii înregistrate de curentul care trece prin senzorul de temperatură, am integrat un filtru în circuit.Led-urile sunt folosite pentru a oferi o estetica aparte cooler-ului , iar pentru ele am ales sa folosesc o photo rezistenta pentru ca led-urile sa facă lumina doar atunci când este întuneric în încăpere. Pentru a fi mai interactiv am ales sa folosesc un ecran LCD care sa afiseze in timp real temperatura pe care o inregistreaza senzor-ul.
Partea de software am dezvoltat-o folosind Arduino IDE cu ajutorul unor biblioteci externe precum #include <Wire.h>, #include <LiquidCrystal_I2C.h> si #include <DHT11.h> pentru senzorul de temperatură si pentru pentru ecranul LCD.
Global am initializat senzorul folosind o functie de biblioteca pe pinul 6.
DHT11 dht11(9);
In functia de loop mi-am declarat 2 variabile temperature si humidity in care cu ajutorul unei functii de biblioteca stochez temperatura si umiditatea inregsitrata de senzor.
int temperature = 0; int humidity = 0; // Attempt to read the temperature and humidity values from the DHT11 sensor. dht11.readTemperatureHumidity(temperature, humidity);
Global am declarat pin-ul pentru led si pentru fotorezistenta.
const int ledPin = 6; const int fotoLedPin = A0;
In functia de setup am declarat pin-ul led-ului ca pin de output.
// Setăm pinul LED-ului ca OUTPUT pinMode(ledPin, OUTPUT);
In functia de loop am citit intr-o variabila ce inregistreaza fotorezistenta. Iar daca valorea este mai mare de 600 atunci led-ul se poate aprinde.
int value = analogRead(fotoLedPin); if(value <= 600){ digitalWrite(ledPin,HIGH); }else{ digitalWrite(ledPin,LOW); }
Global am folosit functia de biblioteca pentru a initializa ecranul la adersa 0x3F.
LiquidCrystal_I2C lcd(0x3F,16,2);
In functia de setup() afisam pe ecran un mesaj de inceput.
lcd.init(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("Hello, world!"); lcd.setCursor(0,1); lcd.print("Optimus Digital"); delay(2000); lcd.clear();
In functia de loop afisam pe ecran temperatura inregistrata de senzor sub formatul de grade celsius.
lcd.setCursor(0, 0); lcd.print("Temp: "); lcd.print(temperature); lcd.print(char(223)); lcd.print("C");
Global am declarat pinii pentru motor si driver. Apoi am apelat functia construita de mine in fisierul DCMDriverL293D.cpp pentru initializarea motoras-ului si a driver-ului.
// Pin Definitions #define DCMOTORDRIVERB_PIN_ENABLE1 3 #define DCMOTORDRIVERB_PIN_IN1 2 #define DCMOTORDRIVERB_PIN_IN2 4 #define DCMOTORDRIVERB_PIN_ENABLE2 5 #define DCMOTORDRIVERB_PIN_IN3 7 #define DCMOTORDRIVERB_PIN_IN4 8 // object initialization DCMDriverL293D dcMotorDriverB(DCMOTORDRIVERB_PIN_ENABLE1,DCMOTORDRIVERB_PIN_IN1,DCMOTORDRIVERB_PIN_IN2,DCMOTORDRIVERB_PIN_ENABLE2,DCMOTORDRIVERB_PIN_IN3,DCMOTORDRIVERB_PIN_IN4);
In functia de loop daca temperatura este mai mare sau egala cu 30 grade Celsius activam mototras-ul folosind functia setMotorA/setMotorB cu o viteza ce este reglata de potentiometru si directia de invartire a elicei alese aleator.
if(temperature >= 30){ dcMotorDriverB.setMotorA(value2,true); dcMotorDriverB.setMotorB(value2,false); }else{ dcMotorDriverB.stopMotors(); }
In functia de loop , pentru ca potentiometrul citea valori in 25 si 1005 , am sacalat valoarea citita intre 10 si 200, 255 fiind valoarea maxima pe care o poate primii motoras-ul, valoare cu care ii este reglata viteza elicei.
int value2 = analogRead(A1); value2 = map(value2, 25, 1005, 10, 200);
https://app.diagrams.net/ - pentru realizarea schemei bloc
https://support.arduino.cc/hc/en-us/articles/360019833020-Download-and-install-Arduino-IDE - pentru scrierea cod-ului incarcat pe placuta
Proiectul final, cât și funcționalitatea acestuia pot fi observate mai jos.
Download: proiect_pm_vasilache_george.zip