This is an old revision of the document!


Aparat Aer Conditionat

Student: Eduard Popa-Costin

Grupa: 332CC

Introducere

Proiectul ales este o simulare de aer conditionat, simplificat.Vor exista doi senzori de masurare a temperaturii si a umiditatii. Aceste informatii vor fi afisate pe ecran iar utilizatorul va putea controla temperatura dorita.

Descriere generală

Se va afisa pe ecran temperatura din camera masurata cu ajutorul senzorului de temperatura si umiditate. Utilizatorul va putea sa introduca o temperatura mai mica decat cea afisata prin apasarea succesiva a unui buton, moment in care ventilatorul va porni automat.

Hardware Design

Lista piese folosite:

  • Arduino
  • Ventilator
  • Senzor de temperatura si umiditate(DHT-11)
  • Ecran OLED 0.96”
  • Breadboard
  • Rezistente, fire
  • Butoane

Software Design

#include <dht11.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>

#define BUTTON_INCREMENT 2 #define BUTTON_DECREMENT 3 #define BUTTON_MODE 4 #define DHT11PIN_OUTSIDE 7 #define DHT11PIN_INSIDE 6

#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

dht11 DHT11;

int INA_OUTSIDE = 9; int INB_OUTSIDE = 10; int incrementButtonState = HIGH; int decrementButtonState = HIGH; int lastIncrementButtonState = HIGH; int lastDecrementButtonState = HIGH; unsigned long lastDebounceTime = 0; unsigned long debounceDelay = 50;

unsigned long previousTemperatureTime = 0; long referenceTemperature = 25.00; const unsigned long temperatureInterval = 2000;

bool buttonModeState = false; bool buttonModePressed = false;

bool fanOn = false; bool mode = false;

void setup() {

pinMode(BUTTON_INCREMENT, INPUT);
pinMode(BUTTON_DECREMENT, INPUT);
pinMode(BUTTON_MODE, INPUT_PULLUP);
pinMode(INA_OUTSIDE, OUTPUT); 
pinMode(INB_OUTSIDE, OUTPUT); 
digitalWrite(INA_OUTSIDE, LOW);
digitalWrite(INB_OUTSIDE, LOW);
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
  Serial.println(F("SSD1306 allocation failed"));
  for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);

}

void loop() {

unsigned long currentMillis = millis();
if (digitalRead(BUTTON_MODE) == LOW) {
  if (!buttonModePressed) {
    buttonModePressed = true;
    buttonModeState = !buttonModeState;
  }
} else {
  buttonModePressed = false;
}
if (!buttonModeState) {
  display.clearDisplay();
  display.setCursor(0, 10);
  display.println("Mode: Manual");
  display.setCursor(0, 25);
  display.print("Temp (C): ");
  display.println((float)DHT11.temperature, 2);
  display.setCursor(0, 40);
  display.print("Temp limit (C): ");
  display.println(referenceTemperature);
  display.setCursor(0, 52);
  display.print("Fan: ");
  if (fanOn) {
    display.println("ON");
  }
  else {
    display.println("OFF");
  }
  display.display();
  int reading_increment = digitalRead(BUTTON_INCREMENT);
  int reading_decrement = digitalRead(BUTTON_DECREMENT);
  if (reading_increment != lastIncrementButtonState) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading_increment != incrementButtonState) {
      incrementButtonState = reading_increment;
      if (incrementButtonState == LOW) {
        referenceTemperature++;
      }
    }
  }
  lastIncrementButtonState = reading_increment;
  if (reading_decrement != lastDecrementButtonState) {
    lastDebounceTime = millis();
  }
  
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading_decrement != decrementButtonState) {
      decrementButtonState = reading_decrement; 
      if (decrementButtonState == LOW) {
        referenceTemperature--;
      }
    }
  }
  lastDecrementButtonState = reading_decrement;
  if (currentMillis - previousTemperatureTime >= temperatureInterval) {
    previousTemperatureTime = currentMillis;
    DHT11.read(DHT11PIN_OUTSIDE);
    
    if ((float)DHT11.temperature > referenceTemperature) {
      if (!fanOn) {
        digitalWrite(INA_OUTSIDE, LOW);
        digitalWrite(INB_OUTSIDE, HIGH);
        fanOn = true;
        
      }
    } 
    else {
      if (fanOn) {
        digitalWrite(INA_OUTSIDE, LOW);
        digitalWrite(INB_OUTSIDE, LOW);
        fanOn = false;
      }
    }
  }
  display.display();
}
else {
  display.clearDisplay();
  display.setCursor(0, 10);
  display.println("Mode: Auto");
  if (currentMillis - previousTemperatureTime >= temperatureInterval) {
    previousTemperatureTime = currentMillis;
    DHT11.read(DHT11PIN_OUTSIDE);
    float temperature_outside = DHT11.temperature;
    DHT11.read(DHT11PIN_INSIDE);
    float temperature_inside = DHT11.temperature;
    display.setCursor(0, 25);
    display.print("Temp outside(C) ");
    display.println(temperature_outside, 2);
    display.setCursor(0, 40);
    display.print("Temp inside(C) ");
    display.println(temperature_inside, 2);
    if (temperature_inside <= temperature_outside) {
      if (!fanOn) {
        digitalWrite(INA_OUTSIDE, LOW);
        digitalWrite(INB_OUTSIDE, HIGH);
        fanOn = true;
        display.setCursor(0, 52);
        display.println("Fan: ON");
        display.display();
      }
    } 
    else {
      if (fanOn) {
        digitalWrite(INA_OUTSIDE, LOW);
        digitalWrite(INB_OUTSIDE, LOW);
        fanOn = false;
        display.setCursor(0, 52);
        display.println("Fan: OFF");
        display.display();
      }
    }
  }
}

}

Rezultate Obţinute

Concluzii

Download

Jurnal

27.04: Alegere tema proiect
05.05: Comanda piese
06.05: Creare pagina wiki

Bibliografie/Resurse

pm/prj2023/ndrogeanu/aerconditionat.1685273096.txt.gz · Last modified: 2023/05/28 14:24 by eduard_costin.popa
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