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

1 minutę temu, macizet napisał:

ja bym napisal to w ten sposob

A to niedobrze byś napisał.

Po co dwa razy czytasz A1, raz żeby wyświetlić a drugi raz aby użyć w programie?

Czemu jakiś delay a nie uczciwa histereza? Dlaczego 10 sekund?

 

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 macizet
Link do komentarza
Share on other sites

13 minut temu, macizet napisał:

//wlacz pompke do czasu az poziom wzrośnie do 200

Nic takiego w tym kodzie nie widzę.

14 minut temu, macizet napisał:

Kompilacja przebiegła pomyślnie.

Kompilacja pierwowzoru też przebiegła pomyślnie, co nie znaczy że ów pierwowzór ma jakikolwiek sens.

Zdanie "Ciotkę parowozu przetaczaj po sznyclach" też jest poprawne składniowo, prawda?

  • Lubię! 1
Link do komentarza
Share on other sites

po prostu z każdym obiegiem pętli będzie to sprawdzane, jeśli poziom będzie powyżej 200 to zostanie wykonane polecenie else, czyli nic nie zostanie wykonane.

Chyba że chcemy coś dodać jeszcze, to wtedy należałoby zmienić tę strukturę.

Czy jestem w błędzie?

Link do komentarza
Share on other sites

33 minuty temu, macizet napisał:

jeśli poziom będzie powyżej 200 to zostanie wykonane polecenie else

Po pierwsze: nic takiego w Twoim kodzie nie ma.

Po drugie: jeśli poziom wzrośnie powyżej 200 to coś się jednak ma stać. Wiesz co?

Czy w ogóle rozumiesz słowo "histereza"?

 

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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.