"Wariacje przekaźnika"

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
misiakool12
Majsterkowicz
Posty: 63
Rejestracja: 4 maja 2018, 12:51

"Wariacje przekaźnika"

Post autor: misiakool12 » 22 paź 2018, 10:05

Witam. Mam pewien problem i nie wiem jak go rozwiązać. Otóż napisałem sobie taki kod - odpowiada on za układ regulacji trójstawny(trójpołożeniowy). Jednak jest pewien problem - gdy wartość zadana dochodzi do np 71% , a aktualna wilgotność wynosi 72% to powinny wyłączyć się wszystkie urządzenia ( tak jak mówi ostatni warunek) - tak się dzieje , jednak na przekaźniku nieustannie miga[migotanie]( tak szybko miga jakby się jakieś spięcie robiło - ciężko mi to ująć w słowa) dioda oznaczająca uruchamianie się generatora pary ( generator pary czyli " digitalWrite(relay_pin, LOW); " ),a przecież jest napisany ostatni warunek , że +/-2 stopnie wilgotności mają wyłączyć się wszystkie urządzenia - tak jakby warunki "if(wartosc>WILG)" i "if(wartosc<WILG)" nieustannie były wykonywane w momencie strefy nieczułości ( "else if(wartosc >= WILG - 2 && wartosc <= WILG + 2" ) - po chwili takiego "migania" dane wyświetlone na wyświetlaczu zawieszają się - wraz z kręceniem potencjometrem nic nie nie zmienia na wyświetlaczu. W jakiej pozycji "utknął" tak jest do momentu odłączenia arduino od prądu i ponownego włączenia. Nie wiem czy się jasno wyraziłem lecz może ktoś jest mi w stanie pomóc :)

Kod jest taki :

Kod: Zaznacz cały

#include "DHT.h"                          // biblioteka DHT
#include "U8glib.h"                       // bibioteka OLED I2C

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);  // I2C / TWI 

#define DHTPIN 2                          // definicja PIN dla DHT
#define DHTTYPE DHT22                     // DHT 22
DHT dht(DHTPIN, DHTTYPE, 6);                  // deklaracja DHT
char str[10];                         // znak stopni celsujsza i procent
int WILG;                           // zmienna wilgotnosc
float TEMP;  // zmienna temperatura w stopniach C

unsigned long aktualnyCzas = 0; // do millis
unsigned long zapamietanyCzas = 0;  // do millis

int relay_pin = 8;                // przekaznik
int relay_pin2 = 12;              // przekaznik
int relay_pin3 = 7;                // przekaznik
int relay_pin4 = 9;
#define led_info_promiennik 4         // dioda od promiennika
#define led_info_generator 13      // dioda od generatora pary
#define led_info_nic 1


int potencjometr = A0;                // odczyt napiecia z potentcjometru pinem analogowym 0
int wartosc = 0;                       // zmienna przechowujaca wartosc napiecia odczytanego
int dane[5]; // do potencjometru do sredniej
int i=0;  // do potencjometru do sredniej
int srednia;  // do potencjometru do sredniej
  
void setup()
{
 dht.begin();                          // inicjalizacja DHT
pinMode(potencjometr, INPUT); //pin A0 (pot) jako wejście
pinMode(relay_pin, OUTPUT);
pinMode(relay_pin2, OUTPUT);
pinMode(relay_pin3, OUTPUT);
pinMode(relay_pin4, OUTPUT);
digitalWrite(relay_pin, HIGH);
digitalWrite(relay_pin2, HIGH);
digitalWrite(relay_pin3, HIGH);
digitalWrite(relay_pin4, HIGH);
pinMode(led_info_promiennik, OUTPUT);
pinMode(led_info_generator, OUTPUT);
pinMode(led_info_nic, OUTPUT);
}
 
// glowna petla programu
 
void loop() {
 aktualnyCzas = millis();

if (aktualnyCzas - zapamietanyCzas >= 50UL) {
    //Zapamietaj aktualny czas
    zapamietanyCzas = aktualnyCzas;
 }
                      
 WILG = dht.readHumidity();                     // odczytaj wilgotnosc
 TEMP = dht.readTemperature();                  // odczytaj temp
 wartosc = analogRead(A0);
 dane[i]=wartosc; // do sredniej potencjoemtru
i++;
if(i==5){
 i=0;
}
for(int j=0;j<5;j++){
  srednia+=dane[j]; // do sredniej potencjoemtru
}
srednia/=5.0; // do sredniej potencjoemtru
 wartosc  = map(wartosc, 0, 1023, 0, 100);           // skalowanie od 0 do 100             
 
// petla obrazu
 u8g.firstPage();              
 do {
 u8g.setFont(u8g_font_helvB08);               // ustaw mniejsza czcionke
 u8g.drawStr( 2, 27, "Wilgotnosc :");             // w pozycji 2/47 wyswietl txt
 u8g.drawStr( 80, 27, dtostrf(WILG, 5, 2, str));  // w pozycji 80/47 wartosc wilgotnosci
 u8g.drawStr( 110, 27, "%");                      // w pozycji 120/47 dopisz symbol %
 
 u8g.drawStr( 2, 42, "Temperatura :");            
 u8g.drawStr( 80, 42, dtostrf(TEMP, 5, 2, str));
 u8g.drawStr( 110, 42, "\260C");

 u8g.drawStr( 2, 57, "Wilg. zad.:");            
 u8g.drawStr( 80, 57, dtostrf(wartosc, 5, 2, str));
 u8g.drawStr( 110, 57, "%");
 } while( u8g.nextPage() );                       // koniec petli obrazu

// PETLA OD WARUNKOW 
if(wartosc>WILG) { // 
digitalWrite(relay_pin2, HIGH); //Wyłączenie Promiennika
digitalWrite(relay_pin3, LOW); // Włączenie wentylatora
digitalWrite(relay_pin4, LOW);  // Włączenie wentylatora
digitalWrite(relay_pin, LOW);  // Wlaczenie GENERATORA PARY  PIN 8 IN3
digitalWrite(led_info_generator, HIGH); //Włączenie diody od GENERATORA
digitalWrite(led_info_promiennik, LOW); //WYLACZENIE diody od PROMIENNIKA
digitalWrite(led_info_nic, LOW); // Wyłączenie diody od NIC
}
if(wartosc<WILG) //  
{
digitalWrite(relay_pin3, HIGH);  // Wyłączenie wentylatorow
digitalWrite(relay_pin4, HIGH);  // Wyłączenie wentylatorów
digitalWrite(relay_pin, HIGH);  // Wylaczenie GENERATORA 
digitalWrite(relay_pin2, LOW); // Wlaczenie Promiennika
digitalWrite(led_info_promiennik, HIGH); //Włączenie diody od PROMIENNIKA
digitalWrite(led_info_generator, LOW); //Wyłączenie diody od GENERATORA
digitalWrite(led_info_nic, LOW); // Wyłączenie diody od NIC
}
if(wartosc >= WILG - 2 && wartosc <= WILG + 2)  // tolerancja 2 stopni odnosnie rownosci ze wzgledu na te wahania potencjometru
{
digitalWrite(relay_pin, HIGH); // Wyłaczenie generatora
digitalWrite(relay_pin2, HIGH); // Wyłączenie promiennika
digitalWrite(relay_pin3, HIGH);  // Wyłączenie wentylatorow
digitalWrite(relay_pin4, HIGH);  // Wyłączenie wentylatorów
digitalWrite(led_info_promiennik, LOW); //WYLACZENIE diody od PROMIENNIKA
digitalWrite(led_info_generator, LOW); //WYLACZENIE diody od GENERATORA
digitalWrite(led_info_nic, HIGH);
}
}
Ostatnio zmieniony 22 paź 2018, 10:45 przez misiakool12, łącznie zmieniany 1 raz.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


uzi18
Majsterkowicz
Posty: 93
Rejestracja: 10 maja 2018, 05:06

Re: "Wariacje przekaźnika"

Post autor: uzi18 » 22 paź 2018, 10:18

przed 2 ostatnimi warunkami dodaj else, tak. aby zamiast if bylo else if

Wysłane z mojego MI MAX przy użyciu Tapatalka

misiakool12
Majsterkowicz
Posty: 63
Rejestracja: 4 maja 2018, 12:51

Re: "Wariacje przekaźnika"

Post autor: misiakool12 » 22 paź 2018, 10:43

Dodałem, nic to nie zmieniło :/
uzi18
Majsterkowicz
Posty: 93
Rejestracja: 10 maja 2018, 05:06

Re: "Wariacje przekaźnika"

Post autor: uzi18 » 22 paź 2018, 11:27

a zapisz warunki tak:

if (wartosc < (WILG - 2){}

else if(wartosc > (WILG +2){}

else{}


Wysłane z mojego MI MAX przy użyciu Tapatalka



misiakool12
Majsterkowicz
Posty: 63
Rejestracja: 4 maja 2018, 12:51

Re: "Wariacje przekaźnika"

Post autor: misiakool12 » 22 paź 2018, 11:46

Dam odpowiedz wieczorem ponieważ dopiero wtedy będę miał dostęp do arduino :) dziękuję jak narazie za zainteresowanie
misiakool12
Majsterkowicz
Posty: 63
Rejestracja: 4 maja 2018, 12:51

Re: "Wariacje przekaźnika"

Post autor: misiakool12 » 22 paź 2018, 16:52

Niestety po zmianie kod się nie kompiluję - wyskakuje błąd " exit status 1
expected ';' before '{' token" . Pomimo iż nigdzie nie ma średnika.
Awatar użytkownika
Marhef
Złota rączka
Posty: 1143
Rejestracja: 18 lis 2011, 02:18

Re: "Wariacje przekaźnika"

Post autor: Marhef » 22 paź 2018, 17:07

No bo właśnie średnika brakuje. Wstaw aktualny kod, poszukamy
misiakool12
Majsterkowicz
Posty: 63
Rejestracja: 4 maja 2018, 12:51

Re: "Wariacje przekaźnika"

Post autor: misiakool12 » 22 paź 2018, 17:15

Przepraszam, moje niedopatrzenie ! Dziękuję! ;) a czy wie ktoś jak np dodać do wyświetlania napis " chłodzenie" wyłącznie podczas chłodzenia i " ogrzewanie" wyłącznie podczas ogrzewania? :)
misiakool12
Majsterkowicz
Posty: 63
Rejestracja: 4 maja 2018, 12:51

Re: "Wariacje przekaźnika"

Post autor: misiakool12 » 22 paź 2018, 17:17

UP : działa, nie ma " spięć" lecz wyświetlacz nadal się zawiesza właśnie w tej strefie nieczułości :/
uzi18
Majsterkowicz
Posty: 93
Rejestracja: 10 maja 2018, 05:06

Re: "Wariacje przekaźnika"

Post autor: uzi18 » 22 paź 2018, 17:20

np. musialbys zapamietac w jakiejs zmiennej ktory warunek zadzialal np. 1 pierwszy, 2 drugi, 3 trzeci.
a pozniej w zaleznosci od wartosci drukowac na lcd odpowiedni tekst

specjalnie nie pisze gotowca abys troche poglowkowal latwiej Ci bedzie sie czegos nauczyc

Wysłane z mojego MI MAX przy użyciu Tapatalka

misiakool12
Majsterkowicz
Posty: 63
Rejestracja: 4 maja 2018, 12:51

Re: "Wariacje przekaźnika"

Post autor: misiakool12 » 22 paź 2018, 17:28

A masz pomysł czemu ten wyświetlacz sie zawiesza w tej strefie nieczułości? :)
misiakool12
Majsterkowicz
Posty: 63
Rejestracja: 4 maja 2018, 12:51

Re: "Wariacje przekaźnika"

Post autor: misiakool12 » 23 paź 2018, 12:59

Ktoś coś może? :/
uzi18
Majsterkowicz
Posty: 93
Rejestracja: 10 maja 2018, 05:06

Re: "Wariacje przekaźnika"

Post autor: uzi18 » 23 paź 2018, 13:06

sorki ale. sie temu nie przygladalem, zawiesza sie tylko lcd? czy wogole nie steruje wtedy przekaznikami?

Wysłane z mojego MI MAX przy użyciu Tapatalka

misiakool12
Majsterkowicz
Posty: 63
Rejestracja: 4 maja 2018, 12:51

Re: "Wariacje przekaźnika"

Post autor: misiakool12 » 23 paź 2018, 16:03

Tylko lcd sie zawiesza, przekaźnik działa poprawnie.
misiakool12
Majsterkowicz
Posty: 63
Rejestracja: 4 maja 2018, 12:51

Re: "Wariacje przekaźnika"

Post autor: misiakool12 » 24 paź 2018, 13:45

Wiesz może co może być nie tak? :/
ODPOWIEDZ

Strony partnerskie: