Potrzebuję pomocy w napisaniu kodu - zaczynam robić sterownik do akwarium, ale największy problem mam z odczytem sondy pH
W tej chwili mam pożyczony sterownik Lajon 120, który działa idealnie - wyszukałem w internecie, że jest zbudowany na ATmega8 z kwarcem 8MHz
Próbowałem odczytywać ADC i uśredniać wynik, ale wszytko "pływało" i w poszukiwaniu innych metod na odczyt ADC trafiłem na kody Bartka (spodobał mi się sposób Mediana) na B.FORUM
Mój testowy kod:
- '---płytka Arduino UNO
- $regfile = "m328def.dat"
- $crystal = 16000000
- $hwstack = 32
- $swstack = 10
- $framesize = 40
- '---płytka LCD Shield dla Arduino UNO
- '---konfiguracja wyświetlacza
- Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , Rs = Portb.0
- Config Lcd = 16 * 2
- Cursor Off
- Cls
- Config Adc = Single , Prescaler = Auto , Reference = Avcc
- Dim Ph_pomoc_1 As Single , Ph_pomoc_2 As Single , Ph_pomoc_3 As Single
- Dim Ph_pomoc_4 As String * 4 , Ph_sonda As Single
- Dim Ph_7_buf As Single : Ph_7_buf = 6.98 'płyn kalibracyjny pH 7 - wartosc pH 6.98 w temp. 25st
- Dim Ph_4_buf As Single : Ph_4_buf = 4.01 'płyn kalibracyjny pH 4 - wartosc pH 4.01 w temp. 25st
- Dim Ph_7_adc As Single : Ph_7_adc = 507 'odczyt sondy zanurzonej w płynie pH 7
- Dim Ph_4_adc As Single : Ph_4_adc = 614 'odczyt sondy zanurzonej w płynie pH 4
- Dim Wynik As Word
- Const Ilosc_probek_adc = 5
- Const Mediana_adc =(ilosc_probek_adc + 1) / 2
- Dim Adcy(ilosc_probek_adc) As Word
- Dim N As Byte : N = Ilosc_probek_adc ': Adc_sum = 0
- Do
- '---odczyt sondy pH
- Do
- Adcy(n) = Getadc(2)
- Decr N
- Loop Until N = 0
- Sort Adcy(1)
- Wynik = Adcy(mediana_adc)
- '---przelicz odczyt ADC na pH
- '---pH = pH_7_buf + (ADC - pH_7_adc) * (pH_4_buf - pH_7_buf) / (pH_4_adc - pH_7_adc)
- Ph_pomoc_1 = Wynik - Ph_7_adc
- Ph_pomoc_2 = Ph_4_buf - Ph_7_buf
- Ph_pomoc_3 = Ph_4_adc - Ph_7_adc
- Ph_sonda = Ph_pomoc_1 * Ph_pomoc_2
- Ph_sonda = Ph_sonda / Ph_pomoc_3
- Ph_sonda = Ph_7_buf + Ph_sonda
- Ph_pomoc_4 = Fusing(ph_sonda , "#.##")
- '---wyświetl odczyty
- Locate 1 , 1 : Lcd "ADC " ; Wynik ; " "
- Locate 2 , 1 : Lcd "pH " ; Ph_pomoc_4 ; " "
- Wait 1
- Loop
- End
Kodu nie testowałem ponieważ jestem po za domem
Platforma testowa to:
- Arduino UNO (klon)
- nakładka na Arduino z LCD 16x2 - TAKIE COŚ
- moduł PH-4502c
- sonda pH HYDROMET ERH-AQ1
Może macie jakiś pomysł jak to ugryźć? Jak opanuję (stabilny) odczyt pH to reszta będzie z górki.