سلام
من یک مدار رطوبت سنج ساختم که با استفاده از آیسی 555 تولید فرکانس میکنه و با همون فرمولی که داره تبدیل به درصد رطوبتش میکنم.
حالا مشکلی که دارم خطای نسبتا زیاد مدارم هست.مثلا الان رطوبت 25% رو 54% نشون میده.
تقریبا 25 30 درصد اختلاف داره.
به نظر شما برای حل مشکلش چیکار کنم؟چون سنسور خطی عمل میکنه میخام با برنامه نویسی حلش کنم...
میشه کسی کمکم کنه؟
شماتیک:دانلود کنید
اینم برنامه:
من یک مدار رطوبت سنج ساختم که با استفاده از آیسی 555 تولید فرکانس میکنه و با همون فرمولی که داره تبدیل به درصد رطوبتش میکنم.
حالا مشکلی که دارم خطای نسبتا زیاد مدارم هست.مثلا الان رطوبت 25% رو 54% نشون میده.
تقریبا 25 30 درصد اختلاف داره.
به نظر شما برای حل مشکلش چیکار کنم؟چون سنسور خطی عمل میکنه میخام با برنامه نویسی حلش کنم...
میشه کسی کمکم کنه؟
شماتیک:دانلود کنید
اینم برنامه:
کد:
$regfile = "M8def.dat" $crystal = 8000000 Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , _ Db7 = Portb.2 , E = Portc.1 , Rs = Portc.3 Config Lcd = 16 * 2 '************************************************* Cursor Off Config Portb.0 = Output Config Timer1 = Counter , Edge = Rising Config Timer0 = Timer , Prescale = 1024 Enable Interrupts Enable Timer0 Enable Timer1 On Ovf1 Pulsecount On Ovf0 Lable Config Pinc.4 = Input Config Pinc.5 = Input '************************************************ Dim R As Integer R = 60 'Dim H1 As Single 'Dim H As Integer 'H = 35 Dim A As Long , I As Long , B As Byte , M As Integer , U As Long B = 0 Start Timer0 Cls Lcd " Rotobat sanj" Wait 2 '************************************************ First: Do If Pinc.5 = 1 Then Goto Rkam If Pinc.4 = 1 Then Goto Rziad Loop End Lable: Incr I If I > 30 Then Stop Timer0 Cls Home M = -7587.2 A = B * 65536 A = A + Counter1 A = A - 110 U = A - 7351 U = U * M U = U / 100000 'Lcd "freq is:" ; A ; "HZ" Home L : Lcd "humidity:" ; U ; "% " Locate 1 , 1 Lcd "Range:" ; R ; "%" '*********************************** If U < R Then 'Locate 2 , 14 'Lcd "<55" Waitms 500 Set Portb.0 End If If U > R Then 'Locate 2 , 14 'Lcd ">55" Waitms 500 Reset Portb.0 End If Wait 2 '*********************************** B = 0 I = 0 Counter1 = 0 Start Timer0 End If Return Pulsecount: Incr B : Counter1 = 0 Return '*********************************** Rziad: Waitms 100 Incr R Goto First Rkam: Waitms 100 Decr R Goto First


دیدگاه