ساخت دماسنج و کنترل دما
در این بخش دانلود پروژه کنترل دما با میکروکنترلر AVR و سنسور DS1820, توسط تیم الکترونیک و برنامه نویسی الکترونیک ۹۸ برای شما علاقه مندان به پروژه های میکروکنترلر AVR آماده شده است. در این پروژه درجه حرارت با دقت 0.06 درجه سانتی گراد توسط سنسور دمای DS1820 اندازه گیری می شود با استفاده از میکروکنترلر AVR مقدار دما اندازه گیری شده را بر روی یک ال سی دی کارکتری 2*16 نمایش می دهیم.
نقشه شماتیک پروژه کنترل دما با میکروکنترلر AVR و سنسور DS1820
از دیگر ویژگی های این پروژه امکان کنترل دما می باشد, عملکرد این قسمت از پروژه به اینگونه می باشد که با رسیدن دمای محیط به دمای از قبل مشخص شده توسط کاربر, میکروکنترلر اقدام به فعال کردن BUZZER می نماید (شما می توانید به جای BUZZER از یک رله جهت کنترل تجهیزات برقی استفاده کنید).
همانطور که مشاهده می کنید برای تنظیم دمای هشدار در طراحی مدار پروژه از سه سوئیچ استفاده شده است, که توسط دو سوئیچ مقدار دمای مورد نظرمان را انتخاب می کنیم و توسط سوئیچ سوم دمای مورد نظر را در حافظه EEPROM میکروکنترلر ATmega8515 ذخیره می کنیم تا در صورت قطع برق, اطلاعات تنظیم شده از بین نرود.
برنامه نوشته شده در نرم افزار BASCOM-AVR به زبان بیسیک BASIC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
$regfile = "m8515.dat" ' Specify The Used Micro $crystal = 8000000 ' used crystal frequency Declare Sub Read1820 Config 1wire = Portd.7 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0 Upbtn Alias Pinb.5 Downbtn Alias Pinb.6 Enterbtn Alias Pinb.7 Alarm Alias Pinc.3 Config Upbtn = Input Config Downbtn = Input Config Enterbtn = Input Config Portc = Output 'Temp variables Dim Bd1 As Byte Dim Bd2 As Byte Dim Bd7 As Byte Dim Bd8 As Byte Dim Alrmtemp As Byte Dim I As Byte , Tmp As Byte Dim T As Integer , T1 As Integer Dim Bd(9) As Byte 'Scratchpad 0-8 72 bits incl CRC, explanations for DS1820 'Sc(1) 'Temperature LSB 'Sc(2) 'Temperature MSB 'Sc(3) 'TH/user byte 1 also SRAM 'Sc(4) 'TL/user byte 2 also SRAM 'Sc(5) 'config also SRAM x R1 R0 1 1 1 1 1 – the r1 r0 are config for resolution – write FF to byte for 12 bit – others dont care 'Sc(6) 'res 'Sc(7) 'res 'Sc(8) 'res 'Sc(9) ’8 CRC 'DALLAS DS1820 ROM and scratchpad commands"""""""""""""1wwrite…. '&H 33 read rom – single sensor '&H CC skip rom '&H BE read scratchpad '&H 44 convert T ' Main loop Cls Cursor Off 'Read the alarm temperature from EEPROM Readeeprom Alrmtemp , 10 If Alrmtemp = &HFF Then Alrmtemp = 30 Do 1wwrite &HCC : 1wwrite &H44 ' start measure Waitms 400 ' wait for end of conversion Read1820 Debounce Upbtn , 0 , Uppr , Sub Debounce Downbtn , 0 , Dwnpr , Sub Debounce Enterbtn , 0 , Alarmpr , Sub Waitms 300 Debounce Upbtn , 0 , Uppr , Sub Debounce Downbtn , 0 , Dwnpr , Sub Debounce Enterbtn , 0 , Alarmpr , Sub Waitms 300 Debounce Upbtn , 0 , Uppr , Sub Debounce Downbtn , 0 , Dwnpr , Sub Debounce Enterbtn , 0 , Alarmpr , Sub Waitms 300 Loop End 'end program Uppr: If Alrmtemp < 98 Then Alrmtemp = Alrmtemp + 1 Cls Lcd "Temp:" ; T1 ; "." ; T Lowerline Lcd "Alarm Temp:" ; Alrmtemp End If Return Dwnpr: If Alrmtemp > 1 Then Alrmtemp = Alrmtemp - 1 Cls Lcd "Temp:" ; T1 ; "." ; T Lowerline Lcd "Alarm Temp:" ; Alrmtemp End If Return Alarmpr: Writeeeprom Alrmtemp , 10 Cls Lcd "Data Stored…" Waitms 500 Return 'Read the DS1820 by skipping the ROM checking, since we are using only 1 sensor Sub Read1820 ' reads sensor ans calculate ' T for 0.1 C 1wreset ' reset the bus 1wwrite &HCC ' read internal RAM 1wwrite &HBE ' read 9 data bytest Bd(1) = 1wread(9) Bd1 = Bd(1) Bd2 = Bd(2) Bd7 = Bd(7) Bd8 = Bd(8) ' read bytes in array 1wreset ' reset the bus Tmp = Bd1 And 1 If Tmp = 1 Then Decr Bd1 ' 0.1C precision T = Bd1 T = T * 50 T = T - 25 T1 = Bd8 - Bd7 T1 = T1 * 100 T1 = T1 / Bd8 T = T + T1 T1 = T / 100 'store tens T = T Mod 100 'store decimal number Cls Lcd "Temp:" ; T1 ; "." ; T Lowerline Lcd "Alarm Temp:" ; Alrmtemp If Alrmtemp > T1 Then Portc = &B00000100 Else Portc = &B00000000 End If End Sub End |
سلام
آیا این پروژه امکان تنظیم کردن حد بالا و حد پایین هم دارد؟
سلام دوست عزیز
خیر در این پروژه تنها می توانید یک حد دما تعریف کنید.