Skocz do zawartości

System wyrownywania poziomu wody w akwarium


Maks22

Pomocna odpowiedź

Witam.

Jestem tutaj nowy a to moj pierwszy post.

Buduje urzadzenie do automatycznego wyrownywania poziomiu wody w akwarium. Wykorzystuje do tego:

- Czujnik poziomu cieczy  RKI-2350

-Arduino MEGA 2560

-Przekaznik do zalaczania pompki

O ile polaczenie elektryczne nie jest dla mnie problemem to potrzebuje pomocy z kodem.

Na minimalnym poziomie wody uruchamia sie pompka na pinie 11 jednak wylacza sie tuz po chwili jak poziom wody wzrasta ponad minimum.

 

Tutaj jest moj kod:

void setup(){
  Serial.begin(9600);
  pinMode(11, OUTPUT);
}
void loop(){

  int sensor=analogRead(A1);
Serial.println(sensor);

   if(digitalRead (A1) == 200<630){
  digitalWrite(11, HIGH);
}  
else{
  digitalWrite(11, LOW);
  }
}

Moze mi ktos powiedziec, co mam tu zmienic?

Z gory dziekuje 😉

Edytowano przez Maks22
Link do komentarza
Share on other sites

@Maks22 witam na forum 🙂

12 godzin temu, Maks22 napisał:

Na minimalnym poziomie wody uruchamia sie pompka na pinie 11 jednak wylacza sie tuz po chwili jak poziom wody wzrasta ponad minimum.

A jak chciałbyś, aby działało?

Co miał robić poniższy fragment kodu? Z góry podpowiem, że na pewno nie robi tego co miał robić, bo taka konstrukcja jest niepoprawna. Napisz co chciałeś uzyskać to naprowadzimy na rozwiązanie:

if(digitalRead (A1) == 200<630){

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

void setup(){
  Serial.begin(9600);
  pinMode(11, OUTPUT);
}
void loop(){

int sensor=analogRead(A1);        //dotad byla definicja wszystkiego
Serial.println(sensor);       

   if(analogRead(A1) <200){       //jesli poziom wody spadl do 200
  digitalWrite(11, HIGH);         //wlacz pompke na 10 sek.
     delay(10000);               
}  
else{
  digitalWrite(11, LOW);         //a jesli poziom nie spadl lub pompka dopompowala wody to nie rob nic
  }
}

ja bym napisal to w ten sposob

a tak poza tym, to po co ci do tego Arduino Mega 2560, Attiny jest 100 razy tańsze a też wystarczy, a tak masz niewykorzystany potencjał potwora jakim jest ardu mega 

Chyba że chcesz dorobić coś jeszcze?

Chętnie obejrzymy...  😉

Link do komentarza
Share on other sites

@ethanak A co ci przeszkadza delay? Ostatecznie to całkiem możliwy sposób, natomiast histereza... nie mogę nie przyznać ci racji bo w sumie mogłem tak zrobić. Jakoś tak nie wpadłem na to.

Wersja poprawiona kodu:

void setup(){
  Serial.begin(9600);
  pinMode(11, OUTPUT);
}
void loop(){

int sensor=analogRead(A1);        //dotad byla definicja wszystkiego     

  if(sensor <= 200 - 50){             //jesli poziom wody spadl o 50 lub wiecej ponizej 200
  digitalWrite(11, HIGH);         //wlacz pompke do czasu az poziom wzrośnie do 200
     Serial.println(sensor);      //wyswietl na serial monitorze (chociaz w sumie nie wiem po co to co chwile wyswietlac)           
}  
else{
  digitalWrite(11, LOW);          //a jesli poziom nie spadl lub pompka dopompowala wody to nie rob nic
  }
}

Może być? Kompilacja przebiegła pomyślnie.

Edytowano przez Gość
Link do komentarza
Share on other sites

Będzie. Ten z pierwszego posta też będzie.

Oba będą działać źle (Twój lepiej, ale nie całkiem dobrze).

Zacznijmy jeszcze inaczej: pokazujesz początkującemu użytkownikowi kod, informując go że coś tam robi (w tym przypadku, że powyżej 200 pompka jest wyłączona). Pokaż dokładnie miejsce w kodzie, gdzie jest to sprawdzane.

Bo faktycznie, powyżej 200 pompka jest wyłączona. Powyżej 175 też. A nawet powyżej 1020.

Link do komentarza
Share on other sites

Ja bym zaś proponował sobie najpierw czujnik wyskalować, czyli zdjąć jego charakterystykę. Z tego co widzę to bardzo proste urządzonko, które zwraca... no właśnie co? Napięcie. prąd ? w jakim zakresie? 

Jak zdejmiesz sobie charakterystykę, to przynajmniej nie będziesz zgadywał wartości, no i będziesz wiedział jak, się to zachowuje, w warunkach eksploatacji.

Edytowano przez BlackJack
Link do komentarza
Share on other sites

43 minuty temu, ethanak napisał:

Będzie. Ten z pierwszego posta też będzie.

Oba będą działać źle (Twój lepiej, ale nie całkiem dobrze).

Zacznijmy jeszcze inaczej: pokazujesz początkującemu użytkownikowi kod, informując go że coś tam robi (w tym przypadku, że powyżej 200 pompka jest wyłączona). Pokaż dokładnie miejsce w kodzie, gdzie jest to sprawdzane.

Bo faktycznie, powyżej 200 pompka jest wyłączona. Powyżej 175 też. A nawet powyżej 1020.

Mamy IF, które będzie załączać pompkę jeśli poziom spadnie poniżej 150. I teraz zauważyłem błąd, że zamiast dać jakieś sprawdzanie czy jest 200 to będzie cały czas oscylować wokół 150, a co za tym idzie pompka dostanie szału z włączaniem się i wyłączaniem. ZGADZA SIĘ?

czyli histerezy tak naprawdę nie ma

zaraz poprawię

Link do komentarza
Share on other sites

void setup(){
	pinMode(11, OUTPUT);
}
void loop(){
	while(analogRead(A1) > 150);
	digitalWrite(11, HIGH);
	while(analogRead(A1) < 200);
	digitalWrite(11, LOW); 
}

podpowiem że średniki za while są istotne 😉

Edytowano przez Chumanista
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.