Pomóżcie mi nie zalać mieszkania
Chciałbym do swojego sterownika dodać opcję dolewania wody, ale musi to być jakoś zabezpieczone aby nie narobić sobie bałaganu i wymyśliłem sobie coś takiego:
1. pompa wody 12V + zasilacz 230VAC->12VDC ale sterowanie ma się odbywać poprzez załączanie napięcia 230V (triak + optotiak)
2. czujnik pływakowy Wszytko ma działać na jednym czujniku NO - myślałem też aby dodać drugi nad lustrem wody, ale NC - jeżeli z jakiegoś powodu pierwszy by nie zadziałał to drugi przerwie obwód.
Co chciałbym uzyskać?
Działać ma to tak, co 10ms program sprawdza stan pływaka
1. jeżeli stan wody jest OK to pływak ma przerwany obwód i program sobie idzie dalej nic nie robiąc
2. jeżeli stan wody jest poniżej ustalonego:
- program odczekuje ustalony czas, dla przykładu 5 sekund - chodzi o jakieś falowanie wody czy coś
- załącza pompę i odlicza ustalony czas, dla przykładu 15 sekund - chodzi o to aby nie przelać akwarium w razie jakieś awarii lub aby pompa nie pracowała na sucho gdy nie ma wody w dolewce
- jeżeli pompa będzie dolewać wodę, a pływak zaraportuje poprawny stan przed upływem 15 sekund to po prostu program wyłącza pompę i ma iść dalej
- jeżeli pompa będzie dolewać wodę, a pływak nie zaraportuje poprawnego stanu w ciągu 15 sekund to pompa zostanie rozłączona i zostanie uruchomiony alarm
3. jeżeli występuje alarm to można go tylko skasować:
- poprzez dolanie wody do zbiornika dolewki - brakło wody i pompa nie mogła dolać wody w ustalonym czasie
- poprzez dolanie wody do akwarium - brakło wody w dolewce lub pływak się zaciął
Kod okrojony do totalnego minimum.
- $regfile = "m328pdef.dat"
- $crystal = 16000000
- $hwstack = 64
- $swstack = 64
- $framesize = 128
- Config Watchdog = 2048
- Config Timer2 = Timer , Prescale = 1024 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
- Compare2a = 155 '10ms@16MHz/1024
- Plywak Alias Pinb.3 : Config Plywak = Input : Set Plywak 'krancowka/pływak
- Pompa Alias Portb.1 : Config Pompa = Output : Reset Pompa 'pompa dolewki
- Buzz Alias Portc.0 : Config Buzz = Output : Reset Buzz 'buzzer
- Dim 100ms , 1s , 10s As Byte
- Dim Alarm As Byte
- Dim Dolewka , Dolewka_opoznienie , Dolewka_czas , Dolewaj As Byte
- Dim Czas_opoznienia As Byte
- Dim Czas_dolewania As Byte
- Dolewka_opoznienie = 0
- Dolewka_czas = 0
- Czas_opoznienia = 5
- Czas_dolewania = 15
- Alarm = 0
- Enable Interrupts
- Start Watchdog
- Do
- If Tifr2.ocf2a = 1 Then
- Tifr2.ocf2a = 1
- Gosub Sprawdz_wejscia
- If 100ms < 9 Then
- Incr 100ms
- Else
- 100ms = 0
- Reset Buzz
- If 1s < 9 Then
- Incr 1s
- Else
- 1s = 0
- Reset Watchdog
- If Dolewka = 1 Then
- Dolewka = 0
- If Dolewka_opoznienie > 0 Then
- Decr Dolewka_opoznienie
- Else
- Dolewka_opoznienie = 0
- Dolewka_czas = Czas_dolewania
- Set Pompa
- End If
- End If
- If Dolewka_czas > 0 Then
- Decr Dolewka_czas
- Else
- Dolewka_czas = 0
- Reset Pompa
- Alarm = 1
- End If
- If 10s < 9 Then
- Incr 10s
- Else
- 10s = 0
- If Alarm = 1 Then Set Buzz
- End If
- End If
- End If
- End If
- Loop
- End
- Sprawdz_wejscia:
- If Plywak = 0 Then
- Dolewka = 1
- Dolewka_opoznienie = Czas_opoznienia
- Else
- Dolewka = 0
- Dolewka_opoznienie = 0
- Dolewka_czas = 0
- Reset Pompa
- Alarm = 0
- End If
- Return