Skocz do zawartości
Maks22

System wyrownywania poziomu wody w akwarium

Pomocna odpowiedź

(edytowany)

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

Udostępnij ten post


Link to post
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ę

Udostępnij ten post


Link to post
Share on other sites
29 minut temu, macizet napisał:

ZGADZA SIĘ?

Zgadza się 🙂

Udostępnij ten post


Link to post
Share on other sites

A ogółem można użyć do tego dwa IF

?

 

Udostępnij ten post


Link to post
Share on other sites
13 minut temu, macizet napisał:

A ogółem można użyć do tego dwa IF

Jeden ale piętrowy.

jeśli za mało to włącz; inaczej jeśli za dużo to wyłącz

 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
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

Udostępnij ten post


Link to post
Share on other sites

@Chumanistadawno takiego potworka nie widziałem 🙂 Teraz dorób do tego regulację temperatury...

A poza tym warunek początkowy to sam z siebie się weźmie? Jesteś na 100% pewien, że pinMode(11, OUTPUT) ustawi zero na pinie 11?

Udostępnij ten post


Link to post
Share on other sites

@BlackJack  czujniki poziomu wody do arduino są najczęściej analogowe, poza tym liniowe, A co za tym idzie, nie ma konieczności ustalania nie wiadomo czego.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@ethanakcieszę się że mogłem poprawić Twój dzień 😉

pinMode tylko ustawia DDRX w trochę dookoła sposób a PORTX na ATmegach jest domyślnie wyzerowany.

Fakt, można lepiej ale chciałem minimum linijek 😉

void setup(){
	pinMode(11, OUTPUT);
	digitalWrite(11, LOW); 
}
void loop(){
	if (digitalRead(11) && analogRead(A1) > 200){
		digitalWrite(11, LOW); 
	else if (!digitalRead(11) && analogRead(A1) < 150){
		digitalWrite(11, HIGH);
	}
	//cokolwiek innego tutaj
}

Jeszcze lepiej byłoby sprawdzać stan w przerwaniu żeby nie nalać za dużo jakby jakiś inny kod wykonywał się za długo ale to powinno działać 😉

@macizet teoretycznie tak, ale i tak lepiej sprawdzić na sucho jakie powinny być limity.

Edytowano przez Chumanista

Udostępnij ten post


Link to post
Share on other sites
6 minut temu, Chumanista napisał:

cieszę się że mogłem poprawić Twój dzień 😉

Przynajmniej chwila uśmiechu w czasie czekania od szóstej rano, aż Imć Pan Kurier raczy wrzucić mi paczuszkę z Botlandu do paczkomatu 🙂  Ciekawe, czy dzisiaj jeszcze to dostanę...

Udostępnij ten post


Link to post
Share on other sites

raczej nie 🤣

34 minuty temu, Chumanista napisał:

PORTX na ATmegach jest domyślnie wyzerowane

 

Co do tego nie jestem pewien.

Udostępnij ten post


Link to post
Share on other sites
11 minut temu, macizet napisał:

Co do tego nie jestem pewien.

Gdyby tylko dało się to sprawdzić...

aaa.thumb.PNG.5c610b13773aee22253fd6d4220635eb.PNG

Udostępnij ten post


Link to post
Share on other sites

ok

Udostępnij ten post


Link to post
Share on other sites

@Chumanistaczy tak jest w każdym mikrokontrolerze? Jeśli w dokumentacji biblioteki (w tym przypadku Wiringa/Arduino) nie mam wyraźnie napisane, że po resecie jest zero na wyjściu to zakładam, że jest hgw co i włos mi z głowy nie spadnie, jak wrzucę jedną instrukcję zerującą wyjście. Mała redundancja nikomu jeszcze nie zaszkodziła 🙂

 

Udostępnij ten post


Link to post
Share on other sites

Akurat w AVR tak jest, że rejestry DRR i PORT są zerowane przez sygnał RESET a kombinacja DDRn=0 i PORTn=0 daje konfigurację pinu jako wejście bez pullup. To się wydaje bezpieczne, ale nie jest to regułą. Są mikrokontrolery które włączają sobie na pinach pullup (więc widzisz de facto słabą jedynkę) albo takie w których pin co prawda jest wejściem, ale rejestr portu jest nieokreślony więc jeśli przełączysz tylko kierunek na wyjście bez zapisu do rejestru "danych" to dostaniesz stan przypadkowy. Podejrzewam, że na przestrzeni historii i w mnogości układów zrobiono i wykorzystano już wszystkie możliwości jakie tylko mogą nam przyjść do głowy. I dlatego zawsze warto.. RTFM 😉

 

  • Lubię! 1

Udostępnij ten post


Link to post
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!

Gość
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...