• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterowanie centralą wentylacyjną
#1
Kod:
// Jest to franke-zlepek różnych projektów. Chcę tym sterować centralą wentylacyjną .
// Na obecnym  etapie nie potrafię samodzielnie od podstaw napisać kodu, bo od paru dni siedzę przy arduino uno.
// Dziwne, jakoś działa, ale z przerwą . Na czas  otwarcia bay-pas zablokowane są zmiany prędkosci wentylatorów.
// Arduino 1.6.7 . Biblioteki chyba nowe bo były auto aktualizacje. Siłownik bay-pas to Belimo i czas otwarcia-zamknięcia to 120 s.
// I tu pytanie.
// Da się uprościć kod do płynności działania i poprawności ogólnej?




#include "DHT.h"                                          // DHT 22  (AM2302)
#include <OneWire.h>                                      
#include <DallasTemperature.h>                           //4 ds18d20
#include <PCD8544.h>                                      //lcd nokia 5110
#define ONE_WIRE_BUS 2                                   //1-Wire
#define DHTPIN 1                                         // pin wejście dla DHT 22  (AM2302)
#define DHTTYPE DHT22                                    // DHT 22  (AM2302)
#define wilgoc 9                                         // alarm wilgoci np. buzer //
int maxHum = 60;                                         // nastawa alarmu wilgoci  60% //
int one_wire = 2;                                      //Transmisja 1-Wire na pinie 2
OneWire oneWire(one_wire);
DallasTemperature sensors(&oneWire);                    //4 ds18d20
int  b1 = 13;                                          // PRZEKAZNIK bay-pas auto
int  b2 = 12;                                          // PRZEKAZNIK bay-pas auto
int  bp1;                                                // PRZEKAZNIK bay-pas auto
int  bp2;                                                 // PRZEKAZNIK bay-pas auto
static PCD8544 lcd;                                     // lcd nokia 5110 pin 3,4,5,6,7
DHT dht(DHTPIN, DHTTYPE);                                 // DHT 22  (AM2302)
volatile int power=55;                                  // nastawa momentu załączenia zasilania.(obroty wentylatorów).
// wartość power=55;1;200 są dla transoptora, który steruje napięcie falownika wentylatorów.


void setup() {
 
  lcd.clear();
  pinMode(wilgoc, OUTPUT);                             // alarm wilgoci np. buzer //                                      
 pinMode( bp1, OUTPUT);                                // PRZEKAZNIK bay-pas auto
 pinMode( bp2, OUTPUT);                                // PRZEKAZNIK bay-pas auto
 pinMode(A5, OUTPUT);                                   //Dioda jako wyjście   RĘCZNY Bay-Pas
 pinMode(A3, INPUT_PULLUP);                             //Przycisk jako wejście
 digitalWrite(A5, LOW);                                 //Wyłączenie diody
 pinMode(8, OUTPUT);                                    //Dioda jako wyjście     RĘCZNY Bay-Pas
 pinMode(A4, INPUT_PULLUP);                            //Przycisk jako wejście
 digitalWrite(8, LOW);                                //Wyłączenie diody
 
 pinMode(A0,INPUT);digitalWrite(A0,HIGH);             // klawisz MIN OBROTY
 pinMode(A1,INPUT);digitalWrite(A1,HIGH);              // klawisz ŚRED OBROTY
 pinMode(A2,INPUT);digitalWrite(A2,HIGH);              // klawisz MAX OBROTY
 dht.begin();                                           // DHT 22  (AM2302)
 sensors.begin();
 lcd.begin(84,48);                                     // LCD
}

void loop(){
 delay(50);
  if (digitalRead(A2)==LOW)power=200;                    //OBROTY wentylatora//
  if (digitalRead(A1)==LOW)power=55;                 //OBROTY  wentylatora//
  if (digitalRead(A0)==LOW)power=1;                  //OBROTY  wentylatora //
      delay(50);
      analogWrite(11,power);                         // tu dioda   //OBROTY //

     float t = dht.readTemperature();                      // DHT 22  (AM2302)
     float h = dht.readHumidity();                         // DHT 22  (AM2302)
     
 if (digitalRead(A3) == LOW) {                            //Jeśli przycisk wciśnięty bay-pas
    digitalWrite(A5, HIGH);                               //Włącz diodę przekaznik bay-pas
    delay(120000);                                         //Czekamy x sekund na  siłownik bay-pas
    digitalWrite(A5, LOW);                                 //Wyłączamy diodę przekaznik bay-pas
 }
 if (digitalRead(A4) == LOW) {                             //Jeśli przycisk wciśnięty bay-pas
    digitalWrite(8, HIGH);                                 //Włącz diodę przekaznik bay-pas
    delay(120000);                                         //Czekamy x sekund na siłownik bay-pas
    digitalWrite(8, LOW);                                     //Wyłączamy diodę przekaznik bay-pas
 }
 // Ostatnie dwa polecenia if z delay(120000) blokują wszystko na dwie minuty. Założenie spełniają (120 s tylko wysterowany
 //jest siłownik) i tu pytanie, czy można to naprawić innymi poleceniami, aby nie blokowało reszty?
 
     sensors.requestTemperatures();                           //4 ds18d20
      digitalWrite( bp2,b1);                                     // PRZEKAZNIK bay-pas auto
      digitalWrite( bp2,b2);                                       // PRZEKAZNIK bay-pas auto
      float DOM = sensors.getTempCByIndex(0);                 //czujnik ds18d20 dom (0)do sterowania auto bay-pas
     float ZEWNATRZ = sensors.getTempCByIndex(3);              // czujnik ds18d20 zewnątrz (3)do sterowania auto bay-pas

 // Tu dwa ds 18d20 mają sterować siłownikiem już w automacie czyli: w domu temp. jest powyżej zadanej a na zewnątrz
 // mniejsza, to następuje otwarcie bay-pas by schłodzić i tak w koło. Tu też chciałbym otwierać i zamykać przez 120 s
 // aby przekazniki nie pracowały ciągle. Siłownik i tak odcina zasilanie a praca długa przekaznika jest bez celowa.
     
      if(DOM <= 22)                                           //temp.zamknięcie bay-pas
   {                                                              
      bp1 = LOW;
    }
   else if(DOM > 23 && DOM < 24)                                  //temp. otwarcia bay-pas
   {
      bp1 = HIGH;
     }
   else if (DOM > 25)                                             //temp.zamknięcie bay-pas
    {  
    bp1 = LOW;
   }
   if(DOM > 26 && DOM < 27)                                        //temp. otwarcia bay-pas
   {
      bp1 = HIGH;          
   }
    if (DOM > 28)                                                   //temp.zamknięcie bay-pas
    {
    bp1 = LOW;
    }
//***********************************************************//
   if(ZEWNATRZ <= 22)                                             //czujnik ds18d20 zewnątrz (3) do sterowania auto bay-pas
   {                                                              //temp.zamknięcie bay-pas
      bp2 = LOW;    
   }
   else if(ZEWNATRZ > 23 && ZEWNATRZ < 24)                            //temp. otwarcia bay-pas
   {    
      bp2 = HIGH;  
   }
   else if(ZEWNATRZ > 25)                                              //temp.zamknięcie bay-pas
   {    
      bp2 = LOW;
    }
   if(ZEWNATRZ >26 && ZEWNATRZ < 27)                                     //temp. otwarcia bay-pas
   {    
      bp2 = HIGH;
   }
      if(ZEWNATRZ > 28)                                                //temp.zamknięcie bay-pas
   {
     bp2 = LOW;
   }
// Wyświetlane są temp. ds18d20.
    lcd.setCursor(0,0);                       //ustaw kursor w pozycji 0,0
      lcd.print("CZER:");               //wyswietl "Temperatura: "
      lcd.print(sensors.getTempCByIndex(3));    //wyswietl wartosc z czujnika 3
      lcd.print((char)0);                       //wyswietl znak stopnia
      lcd.print("C  ");      
      lcd.setCursor(0,1);                       //ustaw kursor w pozycji 0,1
      lcd.print("WYRZ:");               //wyswietl "Temperatura: "
      lcd.print(sensors.getTempCByIndex(1));    //wyswietl wartosc z czujnika 1
      lcd.print((char)0);                       //wyswietl znak stopnia
      lcd.print("C  ");                            
      lcd.setCursor(0,2);                       //ustaw kursor w pozycji 0,2
      lcd.print("NAWI:");               //wyswietl "Temperatura: "
      lcd.print(sensors.getTempCByIndex(2));    //wyswietl wartosc z czujnika 2
      lcd.print((char)0);                       //wyswietl znak stopnia
      lcd.print("C  ");  
      lcd.setCursor(0,3);                       //ustaw kursor w pozycji 0,3
      lcd.print("WYWI:");               //wyswietl "Temperatura: "
      lcd.print(sensors.getTempCByIndex(0));    //wyswietl wartosc z czujnika 0
      lcd.print((char)0);                       //wyswietl znak stopnia
      lcd.print("C  ");
//Wyświetlana  jest wilgoć i temp. czujnika o raz awaria   DHT 22  (AM2302).
     
            if(h > maxHum ) {                       // DHT 22  (AM2302)
         digitalWrite(wilgoc, HIGH);                  
     } else {                                          // przekroczenie wilgoci
        digitalWrite(wilgoc, LOW);
     }
         lcd.setCursor(0,4);      
      lcd.print("");                          //wyswietl WILG z czujnika
      lcd.print(h);                           //wyswietl wartosc z czujnika
      lcd.print("% ");      
      lcd.setCursor(45,4);
      lcd.print("");                           //wyswietl Temp z czujnika
      lcd.print(t);                            //wyswietl wartosc z czujnika
      lcd.print("c ");
        if (isnan(h) || isnan(t)) {                // DHT 22  (AM2302)
       lcd.setCursor(0,4);
       lcd.print("NAJEBAL SENSOR");            //powiadomienie o awarii dth22
       delay(5000);
         return;
        }
}

// Na końcu mam pytanie. Jest możliwość zgrania z procka kodu  programem. Przykład. Te wypociny wgram np. do UNO i z UNO
// chcę programem odczytać .Pozdrowienia.
     
Cześć .
Nie wiem co i jak zmienić aby dobrze działało. Może ktoś doradzi?
 
  


Wiadomości w tym wątku
Sterowanie centralą wentylacyjną - przez przycisk - 19-04-2016, 22:13
RE: Sterowanie centralą wentylacyjną - przez JasQ - 19-04-2016, 23:26
RE: Sterowanie centralą wentylacyjną - przez JasQ - 20-04-2016, 11:58
RE: Sterowanie centralą wentylacyjną - przez JasQ - 21-04-2016, 00:05
RE: Sterowanie centralą wentylacyjną - przez JasQ - 21-04-2016, 22:46
RE: Sterowanie centralą wentylacyjną - przez adix - 21-04-2016, 23:21
RE: Sterowanie centralą wentylacyjną - przez adix - 21-04-2016, 23:40
RE: Sterowanie centralą wentylacyjną - przez JasQ - 21-04-2016, 23:51
RE: Sterowanie centralą wentylacyjną - przez JasQ - 22-04-2016, 00:20
RE: Sterowanie centralą wentylacyjną - przez JasQ - 22-04-2016, 18:57
RE: Sterowanie centralą wentylacyjną - przez JasQ - 22-04-2016, 23:26
RE: Sterowanie centralą wentylacyjną - przez JasQ - 23-04-2016, 02:07
RE: Sterowanie centralą wentylacyjną - przez CEO - 24-04-2016, 18:46

Skocz do:


Przeglądający: 1 gości