Sterowanie centralą wentylacyjną - przycisk - 19-04-2016
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?
RE: Sterowanie centralą wentylacyjną - JasQ - 19-04-2016
Powinno działać
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));
}
RE: Sterowanie centralą wentylacyjną - przycisk - 20-04-2016
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]
RE: Sterowanie centralą wentylacyjną - JasQ - 20-04-2016
Wieczorem zerknę właśnie do pracy się zbieram , napisz co się dzieje przy jakich temperaturach będzie mi łatwiej niż z kodu .
RE: Sterowanie centralą wentylacyjną - przycisk - 20-04-2016
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.
RE: Sterowanie centralą wentylacyjną - JasQ - 21-04-2016
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;
}
}
RE: Sterowanie centralą wentylacyjną - przycisk - 21-04-2016
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]
RE: Sterowanie centralą wentylacyjną - JasQ - 21-04-2016
Napisz co nie działa
RE: Sterowanie centralą wentylacyjną - adix - 21-04-2016
Kolego opisz dokładnie ja to ma działać i napisze ci gotowca
RE: Sterowanie centralą wentylacyjną - przycisk - 21-04-2016
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.
to nie działa. A reszta jest ok.
Pozdrawiam.
|