Anda di halaman 1dari 8

8/21/2016 TemperaturecontrolledfanusingPIC16F877AGadgetronicx

TemperaturecontrolledfanusingPIC16F877A
Gadgetronicx>Microcontroller>PIC>PICProjects>TemperaturecontrolledfanusingPIC16F877A

l FrankDonald } September18,2014 v 36Comments

m PICProjects dcmotor

TemperatureControlledDCmotor

Youmighthavecomeacrossseveralapplicationswhereweneedtocontrolaspecificdevicebasedonanalogparameter.This
Embedded system works in a similar concept where we are about to control the speed of a DC motor using based on the
external temperature. The rise in temperature will result in increase in speed of the motor and vice versa. These type of
Temperaturecontrolledfansystemscangenerallybeusedtomaintaintemperatureofaroomorobjectautomatically.

DESIGNOFTEMPERATURECONTROLLEDFANSYSTEM:
ThetemperatureismeasuredbymeansofatemperaturesensorLM35.
TheoutputvoltageofthesensorisfedtotheA/DchanneloftheMicrocontroller.
BasedonthesensedtemperaturethespeedofthemotoriscontrolledusingPWM.
Severaltemperaturerangeswassetinthecodetovarythemotorspeedbasedontheleveloftemperaturesensed.
ThespeedofthemotoriscontrolledbyusingPWM.

http://www.gadgetronicx.com/temperaturecontrolledfanpic/ 1/8
8/21/2016 TemperaturecontrolledfanusingPIC16F877AGadgetronicx

ThemotorisdrivenusingadriverICl293D,Seeabriefexplanationonitsworkingandwiringhere.

LM35:

LM35PinDiagram

Lm35isusedtosensetheexternaltemperaturewhichiscapableofsensingtemperaturerangesfrom55to150C.Theoutput
voltageisproportionaltothetemperaturehencethereisnoneedoftrimmerstocalibratethereading.Theoutputvoltageofthis
sensorvariesby10mvperdegreechangeintemperature.

CALIBRATION:
Weareusinga10bitADCandVccasVreftotheADCmoduleoftheController.Soinordertodeterminethestepsizewehave
todividetheVrefbyourresolutionthatis2^10(1024).

StepSize=5/1024=4.83mV

Weobtainachangeof10mVwitheachriseorfallintemperaturefromthesensor.AndvalueintheADCregisterwillalterby
twostepswitheachdegreechangeinthesensorsincetwoincrementsofstepsizei.e4.833mV*2=9.96mVwhichis
approximatelyequalto10mV.SoinordertoobtaintheoriginalvaluewehavetodividethecontentsintheADCregisterby2

Realvalue=ADCvalue/2

CODE:
ThiscodewasbuiltusingCCScompilerforPICMicrocontrollers.

01. #include<16F877A.h>
02. #deviceADC=10//SettingADCbits
03. #FUSESNOWDT
04. #FUSESNOBROWNOUT
05. #FUSESNOLVP
06. #usedelay(crystal=20000000)

http://www.gadgetronicx.com/temperaturecontrolledfanpic/ 2/8
8/21/2016 TemperaturecontrolledfanusingPIC16F877AGadgetronicx

07. #bytelcd=0x08
08. #byteTRIS_lcd=0x88
09. #bitrs=0x06.2
10. #biten=0x06.3
11. #bitTRIS_rs=0x86.2
12. #bitTRIS_en=0x86.3
13. longintadc_value,real_value
14. inti
15. charvalue[4]
16. unsignedchartext[]="Temperature:"
17. voiddisplay(unsignedchara,intb)
18. voidmotor()
19. voidmain()
20. {
21. TRIS_lcd=TRIS_rs=TRIS_en=0
22. display(0x38,0)
23. display(0x01,0)
24. display(0x0c,0)
25. for(i=0i<=12i++)
26. {
27. display(text[i],1)
28. }
29. setup_timer_2(T2_DIV_BY_16,255,1)//SettingtimersforPWM
30. SETUP_ADC_PORTS(AN0)//SettingADCPORTS
31. SET_ADC_CHANNEL(0)//SelectingChannel
32. SETUP_ADC(ADC_CLOCK_INTERNAL)
33. while(TRUE)
34. {
35. delay_us(20)
36. adc_value=READ_ADC()//ReadingADCvalue
37. delay_us(10)
38. real_value=adc_value/2//Obtainingrealvalue
39. motor()
40. sprintf(value,"%lu",real_value)//Changinginttochar
41. display(0x8c,0)
42. for(i=0i<=3i++)
43. {
44. display(value[i],1)
45. }
46. }
47. }
48. voiddisplay(unsignedchara,intb)//LCDsubroutine
49. {
50. lcd=a
51. rs=b
52. en=1
53. delay_ms(10)
54. en=0
55. delay_ms(10)
56. }
57.
58. voidmotor()
59. {
60. if(real_value<10)
61. {
62. setup_ccp1(CCP_OFF)
63. }

http://www.gadgetronicx.com/temperaturecontrolledfanpic/ 3/8
8/21/2016 TemperaturecontrolledfanusingPIC16F877AGadgetronicx

64. if(real_value>10)
65. {
66. setup_ccp1(CCP_PWM)
67. if(real_value>=10&&real_value<=29)
68. {
69. set_pwm1_duty((int16)204)//20%dutycyclePWM
70. }
71. elseif(real_value>=30&&real_value<=69)
72. {
73. set_pwm1_duty((int16)510)//50%dutycyclePWM
74. }
75. elseif(real_value>=70&&real_value<=99)
76. {
77. set_pwm1_duty((int16)715)//70%dutycyclePWM
78. }
79. elseif(real_value>=100&&real_value<=150)
80. {
81. set_pwm1_duty((int16)919)//90%dutycyclePWM
82. }
83. }
84. }

The above code uses built in functions in the CCS compiler to use the A/D and PWM feature in the Microcontroller. The
receivedanalogvalueiscalibratedtodisplaythetemperatureintheLCD.Thereal_valueintvalueisconvertedtocharacter
usingsprintfinordertodisplaythetemperaturevalues.

ThetemperaturerangesanddutycycleofthePWMisgivenusingthesubroutine.motor.Sothemicrocontrollerrunsacheck
onthetemperatureeverytimeandaltersthespeedofthemotorbasedonit.

EasyEDA:FreeCircuitDesignTool&LowCostPCBPrototype
10pcs2layersonly$10,registertoget$5CashCoupon

SelectLanguageonEasyEDA
English()FrenchPortugueseSpanishThaiArabicDutch

HebrewVietnameseRussianItalianPolishAfrikaansPersianGerman

http://www.gadgetronicx.com/temperaturecontrolledfanpic/ 4/8
8/21/2016 TemperaturecontrolledfanusingPIC16F877AGadgetronicx

RelatedDesignsandSchematics

Remotecontrolled Howtobuilda Weathermeterusing ElectronicCode


LEDlightingeffects Remotecontrol(RC) PIC16F877 lockingsystemusing
carathome Microcontroller PIC16F877Mi...

Bio LatestPosts

FrankDonald
JuniorNetworkEngineeratTataCommunications

FrankDonaldisanElectronicsandCommunicationEngineerwhoisverypassionate
abouthissubject.Reading,SurfingandBloggingarethethingsheloves.

Previouspost Nextpost

Askyourquery

http://www.gadgetronicx.com/temperaturecontrolledfanpic/ 5/8
8/21/2016 TemperaturecontrolledfanusingPIC16F877AGadgetronicx

36Commentson"TemperaturecontrolledfanusingPIC16F877A"

Notifyof Notifyofallnewfollowupcomments Email

Jointhediscussion

Sortby:newest|oldest|mostvoted

Aytu 3months11daysago

Helloguys..
Guest
Ishouldconvertthiscodetohexfile.Anyonehavethisone?
Myemailaytugdemiregen@gmail.com

0 | ReplyShare

firdaus 3months20daysago

SIR..PLSHELP..INEEDTHEHEXFILE..IHAVINGPROBLEMWITHTHECODE..PLSSENDTOMY
Guest
EMAIL..mohdfirdaus007.mf@gmail.com

0 | ReplyShare

sean 4months14daysago

plsIneedthehexfile.amhavingproblemscompilingthecode.myemailistoscliff_2011@yahoo.com
Guest

0 | ReplyShare

sylvesterwalter 4months27daysago

whrecanigettheccscompiler..canugivemealink..cozicantfindthesametypeasyour
Guest

0 | ReplyShare

khalid 4months28daysago

howtoconfigtwovalueforvoltage5,12thatusedinL293Dthanks
Guest

0 | ReplyShare

http://www.gadgetronicx.com/temperaturecontrolledfanpic/ 6/8
8/21/2016 TemperaturecontrolledfanusingPIC16F877AGadgetronicx

khalid 4months28daysago

whatisthe10KsymbolthatconnecttoVDDinLCDandhowtogetitfromproteus
Guest

0 | ReplyShare HideReplies

Hammad 2months26daysago

DearKhaliddidyou.Getyouranswer.
Guest

0 | ReplyShare

swami 5months5daysago

pleasesendmecompressedfileofthatproject
Guest

0 | ReplyShare

pat 5months16daysago

needtoaddlightingcontrolltocodeanyhelp
Guest

0 | ReplyShare

pat 5months16daysago

needtoaddlightinfcontrolltotheprojectsoitcancontrolthelntheroom
Guest

0 | ReplyShare HideReplies

FrankDonald 5months6daysago

Pat,
Author UseanLDRsensorandconnectittoanADCpinmeasureitsvoltageandwriteyourcontrolcondition
loopsbasedonthosevalues.

0 | ReplyShare

dave 6months26daysago

thanksalotthesimulationisworkingfine.plsiwouldliketochangethereferrencetemperaturefrom10to30
Guest degrees(whenceitwouldincreaseinitiallyby30%)andalsowantthespeedofthefantoincreaseby10%per
degreeafter40degrees.iknowthiseditionshouldbemadeontheprogrambutidontknowwhere.alsoplsif

http://www.gadgetronicx.com/temperaturecontrolledfanpic/ 7/8
8/21/2016 TemperaturecontrolledfanusingPIC16F877AGadgetronicx

itsnottoomuchtroublecanyouhelpmewithastepbystepexplanationofeachlineofthecodestartingfrom
theheaderfiles.

0 | ReplyShare

LoadMoreComments

http://www.gadgetronicx.com/temperaturecontrolledfanpic/ 8/8

Anda mungkin juga menyukai