• 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?
 
#2
Powinno działać Wink

Kod:
#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.

long pauza1 = 0;
long pauza2 = 0;
byte status1 = 0;
byte status2 = 0;


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(){
 
 long  sek = millis()/1000;

 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) {

if ( status1 == 0 ){pauza1 = sek;}
    status1 = 1;    
    digitalWrite(A5, HIGH);}
   
if ( sek - pauza1 > 120 ){                                      
    status1 = 0;
    digitalWrite(A5, LOW);    
}

if (digitalRead(A4) == LOW) {

if ( status2 == 0 ){pauza2 = sek;}
    status2 = 1;    
    digitalWrite(8, HIGH);}
   
if ( sek - pauza2 > 120 ){                                      
    status2 = 0;
    digitalWrite(8, LOW);    
}

    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.
   
   

A poniżej masz czysty kod do adaptacji

Kod:
// ------------- 1 ----------------

int pauza1 = 0;
byte status1 = 0;
int czas1 = 10;

// ------------- 2 ----------------

int pauza2 = 0;
byte status2 = 0;
int czas2 = 10;

void setup() {

Serial.begin(9600);

pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);

}

void loop() {
  
long sek = millis()/1000;

// ------------- 1 ----------------

if (digitalRead(2) == LOW) {

if ( status1 == 0 ){pauza1 = sek;}
     status1 = 1;    
     digitalWrite(7,HIGH);}

if ( sek - pauza1 > czas1 ){                                      
     status1 = 0;
     digitalWrite(7,LOW);}

// ------------- 2 ----------------

if (digitalRead(3) == LOW) {

if ( status2 == 0 ){pauza2 = sek;}
     status2 = 1;    
     digitalWrite(8,HIGH);}
    
if ( sek - pauza2 > czas2 ){                                      
     status2 = 0;
     digitalWrite(8,LOW);}
    
// a to tak co by nie liczył w nieskończoność
// dzięki temu możemy użyć zmiennej int a nie long

if ( (sek - pauza1) > 500 )pauza1 = sek;
if ( (sek - pauza2) > 500 )pauza2 = sek;
  
// kontrola stanu

Serial.print(status1);
Serial.print(" / ");
Serial.print(sek - pauza1);
Serial.print(" / ");
Serial.print(digitalRead(2));
Serial.print(" ----- ");
Serial.print(status2);
Serial.print(" / ");
Serial.print(sek - pauza2);
Serial.print(" / ");
Serial.println(digitalRead(3));
  
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
#3
Cześć.
Bardzo dziękuje za szybką odpowiedz i zainteresowanie . Dla mnie jest to czarna magia, ale bardzo wciąga jak sex. Od miesiąca kombinuje z rekuperatorem w domu, aby ręcznie go nie sterować.
Będę jeszcze kombinował z auto by-pass aby przekaznik był wysterowany 120s.


Kod:
[code]
      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 zewnatrz (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;
   }
Dziękuje i pozdrawiam.[/code]
 
#4
Wieczorem zerknę właśnie do pracy się zbieram , napisz co się dzieje przy jakich temperaturach będzie mi łatwiej niż z kodu .
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
#5
Czasowe wysterowanie 120 s bp1, bp2 nie sprawdzi się . Mój błąd przepraszam.

O co chodzi?
DOM- to temp. w domu i steruje przekaźnikiem bp1.  ZEWNATRZ- temp. na zewnątrz i steruje przekaźnikiem bp2.
z kodu :
DOM - przekaźnik bp1

do 22 c przekaźnik bp1 -off
od 23 c do 24 c przekaźnik bp1 -on
od 25 c przekaźnik bp1 -off
od 26 c do 27 c przekaźnik bp1 -on
od 28 c przekaźnik bp1 -off

ZEWNATRZ - przekaźnik bp2

do 16 c przekaźnik bp2 -off
od 17 c do 24 c przekaźnik bp2 -on
od 25 c przekaźnik bp2 -off
od 26 c do 27 c przekaźnik bp2 -on
od 28 c przekaźnik bp2 -off

Jeżeli dwa przekaźniki bp1, bp2 są wysterowane "-ON " włączają trzeci przekaźnik który otwiera siłownik z by-pas.
Chodzi o odzysk ciepła lub schłodzenie mieszkania.

No i teraz
Istnieje możliwość wykluczenia dwóch przekaźników bp1, bp2 co załączają trzeci przekaźnik, aby kod dwóch temperatur (DOM i ZEWNATRZ) od razu sterował jednym przekaźnikiem. Kody z temperaturami jest multum w internecie, ale nie umiem konkretnie tego skleić.

Jeżeli jest większy problem to zamykamy temat. Jestem zadowolony z tego co już mam.
Dziękuje za zainteresowanie i pomoc.
Pozdrowienia.
 
#6
Powinno działać , port zadeklarowany jako output możemy spokojnie odczytać poprzez funkcję digitalRead to w niczym nie przeszkadza .

Kod:
#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  mixbypas = 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.

long pauza1 = 0;
long pauza2 = 0;
byte status1 = 0;
byte status2 = 0;


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

pinMode(mixbypas, OUTPUT);

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(){

long  sek = millis()/1000;

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) {

if ( status1 == 0 ){pauza1 = sek;}
    status1 = 1;    
    digitalWrite(A5, HIGH);}
  
if ( sek - pauza1 > 120 ){                                      
    status1 = 0;
    digitalWrite(A5, LOW);    
}

if (digitalRead(A4) == LOW) {

if ( status2 == 0 ){pauza2 = sek;}
    status2 = 1;    
    digitalWrite(8, HIGH);}
  
if ( sek - pauza2 > 120 ){                                      
    status2 = 0;
    digitalWrite(8, LOW);    
}

    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 < 23.00 )bp1 = LOW;
     if( DOM > 23.00 and DOM < 25.00 )bp1 = HIGH;
     if( DOM > 25.00 and DOM < 26.00 )bp1 = LOW;
     if( DOM > 26.00 and DOM < 28.00 )bp1 = HIGH;
     if( DOM > 28.00 )bp1 = LOW;
    
     if(ZEWNATRZ < 17.00 )bp2 = LOW;                                             //czujnik ds18d20 zewnątrz (3) do sterowania auto bay-pas
     if(ZEWNATRZ > 17.00 and ZEWNATRZ < 25.00 )bp2 = HIGH;                            //temp. otwarcia bay-pas
     if(ZEWNATRZ > 25.00 and ZEWNATRZ < 26.00 )bp2 = LOW;
     if(ZEWNATRZ > 26.00 and ZEWNATRZ < 28.00 )bp2 = HIGH;
     if(ZEWNATRZ > 28.00 )bp2 = LOW;  
    
    if ( digitalRead(bp1) == 1 and digitalRead(bp2) == 1 ){
      mixbypas = HIGH;} else {mixbypas = 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;
       }
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
#7
Cześć.
Dziękuje za chęci, ale nie zadziałało .
Uprościłem kod  tylko do odczytu temp. i kombinowałem aby jeden przekaźnik z dwóch temp. działał. No i lipa.
Jeszcze zakupiłem dwa ds18b20 do prób bo reszta siedzi w centrali i oczywiście narodził się nowy pomysł. Ehhh .

Kod:
[code]
#include <OneWire.h>                                      
#include <DallasTemperature.h>                           //4 ds18d20
#include <PCD8544.h>                                      //lcd nokia 5110
#define ONE_WIRE_BUS 2
int one_wire = 2;                                      //Transmisja 1-Wire na pinie 2
OneWire oneWire(one_wire);
DallasTemperature sensors(&oneWire);                    //4 ds18d20
int  b1=11 ;                                        // PRZEKAZNIK bay-pas auto
int  b2=10 ;                                             // PRZEKAZNIK bay-pas auto
int  mixbypas = 12;                                          // PRZEKAZNIK bay-pas auto
int  bp1;                                                
int  bp2;
static PCD8544 lcd;

void setup() {

lcd.clear();
pinMode( b1, OUTPUT);                                // PRZEKAZNIK bay-pas auto
pinMode( b2, OUTPUT);                                 // PRZEKAZNIK bay-pas auto
pinMode(mixbypas, OUTPUT);
sensors.begin();
lcd.begin(84,48);                                           //lcd
}

  void loop(){
  sensors.requestTemperatures();                           //4 ds18d20
   
    float DOM = sensors.getTempCByIndex(0);                 //czujnik ds18d20 dom (0)do sterowania auto bay-pas
   float ZEWNATRZ = sensors.getTempCByIndex(1);              // czujnik ds18d20 zewnątrz (3)do sterowania auto bay-pas
   digitalWrite( b1,bp1);                                     // PRZEKAZNIK bay-pas auto
    digitalWrite( b2,bp2);                                       // PRZEKAZNIK bay-pas auto
 
    if( DOM < 22.00 )bp1 = LOW;
    if( DOM > 23.00 and DOM < 25.00 )bp1 = HIGH;
    if( DOM > 26.00 )bp1 = LOW;
   
    if(ZEWNATRZ < 22.00 )bp2 = LOW;                                            
    if(ZEWNATRZ > 23.00 and ZEWNATRZ < 25.00 )bp2 = HIGH;                          
    if(ZEWNATRZ > 26.00 )bp2 = LOW;  
   
   if ( digitalRead(bp1) == 1 and digitalRead(bp2) == 1 ){
    mixbypas = HIGH;} else {mixbypas = LOW;}

    lcd.setCursor(0,0);                       //ustaw kursor w pozycji 0,0
    lcd.print("CZER:");               //wyswietl "Temperatura: "
    lcd.print(sensors.getTempCByIndex(0));    //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  ");
  }

Chyba pozostanę przy tom co mam.
Dziękuje i pozdrawiam.


[/code]
 
#8
Napisz co nie działa
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
#9
Kolego opisz dokładnie ja to ma działać i napisze ci gotowca
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
#10
Witam .
To lepiej wyminie bo nazwać fachowo nie wiem.
Kod:
   if ( digitalRead(bp1) == 1 and digitalRead(bp2) == 1 ){
    mixbypas = HIGH;} else {mixbypas = LOW;}
Nie działa ten zapis. Domyślam się że dwie temp. "bp1" i "bp2" miały być wysterowane "mixbypas" jednym przekaźnikiem.

Kod:
int  mixbypas = 12;
to nie działa. A reszta jest ok.
Pozdrawiam.
 
  


Skocz do:


Przeglądający: 1 gości