久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16004|回復(fù): 5
收起左側(cè)

HR202L HR31濕敏電阻使用電路和單片機例程等資料下載

  [復(fù)制鏈接]
ID:272776 發(fā)表于 2018-5-2 18:43 | 顯示全部樓層 |閱讀模式
傳感器資料,新手,求照顧
一、產(chǎn)品概述
HR202L 濕敏電阻器是采用有機高分子材料的一種新型濕度敏感元件,具有感濕范圍寬,響應(yīng)迅速,抗污染能力強,無需加熱清洗及長期使用性能穩(wěn)定可靠等諸多特點。

0.jpg 0.png
三、應(yīng)用范圍
  用于溫濕度顯示計、溫濕度禮品表、大氣環(huán)境監(jiān)測、工業(yè)過程控制、農(nóng)業(yè)、測量儀表等應(yīng)用領(lǐng)域。

四、產(chǎn)品亮點
  外型小巧美觀、長期穩(wěn)定性好、溫濕度測量范圍寬、高低溫濕度測量精確。

五、電路圖
0.jpg
0.png
濕敏電阻測試31K1004

RC測濕
注:Rs   為標(biāo)準(zhǔn)電阻 RH 為濕敏電阻
檢測原理:
         RC 測濕的實現(xiàn)方法是利用電阻 R 給電容 C 充放電時間來測量濕度的(此處的濕度感
         測器為濕敏電阻) 。
         用不同的電阻給電容充放電時間不一樣,對 RC測量濕度的精度與電阻 R 和電容 C的
         選取有關(guān)。我們通常是選用一個標(biāo)準(zhǔn)電阻(隨濕度變化其阻值變化很小,可忽略不計,通
         常為高精度的金屬膜電阻)它的阻值 Rs 與濕度感測器在標(biāo)準(zhǔn)大氣壓下、25℃時的阻值相
         同。當(dāng)濕度發(fā)生變化時,濕敏電阻的阻值 RH發(fā)生變化,那麼濕敏電阻 RH 給電容C的充放
         電時間也發(fā)生變化。而標(biāo)準(zhǔn)電阻 Rs給電容 C 的充放電時間則基本不發(fā)生變化。
         由RC充電原理我們知道,電阻 R 與電容 C 充電時間的關(guān)係可知         
         TH=K*RH*C       (1)
         Ts=K*Rs*C       (2)
         其中K 為常數(shù)
         由1,2可知充電時間的比例與 R 有關(guān),而 C 無關(guān)。
         RH=(Rs*TH)/Ts
         當(dāng)然,隨著環(huán)境濕度的變化電容 C 變化比較大,我們完成標(biāo)準(zhǔn)電阻和濕敏電阻對同一電
         容的充放電在很短的時間內(nèi),因而電容C 變化引起的誤差可以消除。為了提高精度,對電
         容 C 的選取也有關(guān)係,電容容量不能太小,也不能太大,與感測器的標(biāo)稱值有關(guān)。
   
         這樣我們就計算出拉濕敏電阻阻值RH,通過濕阻特性查表就可以得到濕度值;當(dāng)然也可以分段計算出濕度值。

硬件摘要:
         PD0、PD2和PD3是AVR單片機的3個I/O腳;
         RK為10k的精密電阻;
         RH為31K-精度為1%的濕敏電阻;
         R1為100Ω的普通電阻;
         C1為0.47μ的瓷介電容。
程序要點:
         先將 PD0、PD2,PD3都設(shè)為低電平高阻輸出,使C1放電至放完。
         將PD2、PD3設(shè)置為高阻輸入狀態(tài),PD0設(shè)為高電平輸出,通過RK電阻對C1充電,單片機內(nèi)部計時器清零并開計         時檢測PD3口狀態(tài),當(dāng)PD3口檢測為高電平時,即C1上的電 壓達 到單片機 高電平輸入的門嵌電壓時,單片機         計時器記錄下從開始充電到PD3口轉(zhuǎn)變?yōu)楦唠娖降臅r間T1即TS。
         將PD0、PD2,PD3都設(shè)為低電平高阻輸出,使C1放電至放完。
         再將PD0、PD3設(shè)置為輸入狀態(tài),PD2設(shè)為高電平輸出,通過RH電阻對C1充電,單片機內(nèi)部計時器清零并開始計         時,檢測PD3口狀態(tài),當(dāng)PD3口檢測為高電平時,單片機計時           器記錄下從開始充電到PD3口轉(zhuǎn)變?yōu)?nbsp;          高電平的時間T2即TH。


注意事項:
        從上面所述可以看出,該測濕電路的誤差來源于這幾個方面:單片機的定時器精度,RK電阻的精度,濕敏電           阻RH的精度,而與單片機的輸出電壓值、門嵌電壓值、電容精          度無關(guān)。 因此,適當(dāng)選取濕敏電阻          和精密電阻的精度,單片機的工作頻率夠高,就可以得到較好的測濕精度。
        當(dāng)單片機選用4M工作頻率,RK、RH均為1%精度的電阻時,濕度誤差可以做到小于1℃。
        如果PD3具有外部上升沿中斷的功能,程序可以更簡單,效果更好。  


單片機源程序如下:
  1. /******************************************************************************
  2. * Copyright (c) 2010,濕敏電阻測試
  3. * All rights reserved.
  4. *
  5. * 文件名稱:R_TEST.C   
  6. * 文件標(biāo)識:
  7. * 摘 要:   系統(tǒng)程序。   
  8. *
  9. * 當(dāng)前版本:1.1
  10. * 作 者:   OASONG
  11. * 完成日期:待定
  12. ******************************************************************************/
  13. //ICC-AVR application builder : 2010-04-00 22:43:30
  14. // Target : M88
  15. // Crystal: 8Mhz
  16. //單片機資源分配 PD0-R標(biāo)定電阻接口PD2-R濕敏電阻接口PD3檢測口PC2熱敏電阻接口  12864顯示
  17. #include "Config.h"
  18. //函數(shù)聲明
  19. extern display_cuont1(unsigned int cuont );
  20. extern display_cuont2(unsigned int cuont );  
  21. extern display_cuont3(long int cuont );
  22. extern void init_lcd(void);
  23. void get_temp_vule(void);
  24. extern void display_cuont5(unsigned int cuont);       //顯示濕敏電阻阻值         
  25. extern void display_cuont7(long int cuont);           //顯示濕度值
  26. //全局變量定義
  27. unsigned char sreg,num1=0,num2=0,num3=0;  //記數(shù)值益出次數(shù)
  28. unsigned int HUMI_vule,temp_vule;  //濕溫值
  29. long int  count_vule1,count_vule2,count_vule3; //存取RC充電計數(shù)值
  30. long int R_Humideal_int,R_TEMP;  //濕溫電阻阻值
  31. /*****************************************
  32. 看門狗初始化
  33. *****************************************/
  34. void watchdog_init(void)
  35. {
  36.   //WDR();        //this prevents a timout on enabling
  37.   WDTCSR = (1<<WDCE)|(1<<WDE);
  38.   WDTCSR = 0x28; //WATCHDOG ENABLED - dont forget to issue WDRs
  39. }
  40. /*****************************************
  41. //延時子程序    1.010ms
  42. *****************************************/
  43. void DelaymS(long int dly)                     //延時子程序    1.010ms
  44. {
  45.         unsigned char i;
  46.         for ( ; dly>0; dly--)
  47.         {
  48.             WDR();
  49.                 for (i=0; i<(1050); i++);           //1131
  50.         }
  51. }
  52. /*****************************************
  53. 延時為   接近10us
  54. *****************************************/
  55. void Delay_10us(void)
  56.       {
  57.         unsigned char i;                     
  58.         i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;
  59.                 i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;
  60.                 i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;
  61.                 i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;
  62.                 i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;
  63.                 i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;
  64.                 i--;i--;i--;i--;i--;i--;i--;i--;
  65.        }
  66. /*****************************************
  67. //定時器1初始化
  68. *****************************************/
  69. void timer1_init(void)
  70. {
  71. CLI();              //全局中斷關(guān)
  72. TCCR1B = 0x00;      //stop
  73. TCNT1= 0x0000;     //set count初值
  74. TCCR1A = 0x00;    //普通模式
  75. STOP_TIMES ;     //停止記數(shù)
  76. }
  77. /*****************************************
  78. 讀TCNT1
  79. 輸入數(shù)據(jù):從讀取記數(shù)值
  80. 輸出:無
  81. 作者:
  82. 修改時間:
  83. *****************************************/
  84. unsigned int read_TCNT1(void)
  85. {
  86. unsigned int i;
  87. sreg=SREG;          //保存中斷標(biāo)志位
  88. CLI();             //禁止中斷

  89. i=TCNT1;           //讀取記數(shù)值

  90. //SEI();        //全局中斷
  91. SREG=sreg;     //恢復(fù)標(biāo)志位
  92. return i;
  93. }
  94. /*****************************************
  95. //控制C放完電
  96. *****************************************/
  97. void fang_C()
  98. {
  99. D0_OUT;   //D0低電平輸出
  100. D0_CLR;  //

  101. D2_OUT;   //D2低電平輸出
  102. D2_CLR;  

  103. D3_OUT;   //D3低電平輸出
  104. D3_CLR;  

  105. C2_OUT; //D3低設(shè)置輸出
  106. C2_CLR;
  107. //while(D3_R);   //判斷是否放完電
  108. DelaymS(50); //時間控制電容放完電
  109. }
  110. /*****************************************
  111. //控制10K標(biāo)定電阻沖電記下充電時間T*count_vule1
  112. *****************************************/
  113. void chong_R1()
  114. {
  115.   fang_C();        //電容釋電
  116.   
  117.    D2_IN;
  118.    D2_CLR;
  119.   
  120.    D3_IN;     //D2 D3設(shè)置高阻輸入
  121.    D3_CLR;   
  122.   
  123.    C2_IN;   //D3低設(shè)置輸出
  124.    C2_CLR;  
  125.   
  126.   D0_OUT;
  127.   D0_SET;   //R1C開始充電
  128.   
  129.   START_TIMES ;   //馬上開始記數(shù)  
  130. loop1:if(TCNT1==65535)//防止記數(shù)溢出
  131.     {
  132.           TCNT1=0;
  133.           num1+=1;
  134.         }      
  135.   while(!D3_R) goto loop1;    //判斷電平是否置高
  136.   count_vule1=TCNT1;//讀取記數(shù)值
  137.   STOP_TIMES ;     //停止記數(shù)
  138.   TCNT1=0;       //記數(shù)值清0
  139.   
  140.   fang_C();    //電容釋電
  141. }
  142. /*****************************************
  143. //控制濕敏電阻R2C沖電記下充電時間T*count_vule2
  144. *****************************************/
  145. void chong_R2()
  146. {
  147.   fang_C();        //電容釋電
  148.   
  149.    D0_IN;
  150.    D0_CLR;
  151.    D3_IN;     //D0 D3設(shè)置高阻輸入
  152.    D3_CLR;  
  153.   
  154.    C2_IN;  //D3低設(shè)置輸出
  155.    C2_CLR;   
  156.   
  157.    D2_OUT;
  158.    D2_SET;   //R2C開始充電
  159.   
  160.   START_TIMES ;   //馬上開始記數(shù)  
  161. loop2:if(TCNT1==65535)//防止記數(shù)溢出
  162.     {
  163.           TCNT1=0;
  164.           num2+=1;
  165.         }      
  166.   while(!D3_R) goto loop2;    //判斷電平是否置高
  167.   count_vule2=TCNT1;//讀取記數(shù)值
  168.   STOP_TIMES ;     //停止記數(shù)
  169.   TCNT1=0;       //記數(shù)值清0   
  170.   
  171.   fang_C();    //電容釋電
  172. }
  173. /*****************************************
  174. //控制熱敏電阻R3C沖電記下充電時間T*count_vule3
  175. *****************************************/
  176. void chong_R3()
  177. {
  178.   fang_C();        //電容釋電
  179.   
  180.    D0_IN;
  181.    D0_CLR;
  182.    D3_IN;    //D0 D3設(shè)置高阻輸入
  183.    D3_CLR;  
  184.   
  185.    C2_IN;   //D3低設(shè)置輸出
  186.    C2_CLR;  
  187.   
  188.    D2_OUT;
  189.    D2_SET;    //R2C開始充電
  190.   
  191.   START_TIMES ;   //馬上開始記數(shù)  
  192. loop3:if(TCNT1==65535)//防止記數(shù)溢出
  193.     {
  194.           TCNT1=0;
  195.           num3+=1;
  196.         }      
  197.   while(!D3_R) goto loop3;    //判斷電平是否置高
  198.   count_vule3=TCNT1;//讀取記數(shù)值
  199.   STOP_TIMES ;     //停止記數(shù)
  200.   TCNT1=0;       //記數(shù)值清0   
  201.   
  202.   fang_C();    //電容釋電
  203. }
  204. /*****************************************
  205. //濕敏電阻采集數(shù)據(jù) 返回濕敏阻值R_Humideal_int
  206. *****************************************/
  207. void  dataHM_colleck()
  208. {
  209.   chong_R1();   //標(biāo)定電阻充電
  210.   chong_R2();   //濕敏電阻充電
  211.   R_Humideal_int=10000*(count_vule2+(65535*num2))/(count_vule1+(65535*num1));  //得到電阻整數(shù)位小數(shù)位忽略
  212.   num2=0;
  213.   num1=0;            //溢出次數(shù)清0
  214. }
  215. /*****************************************
  216. //熱敏電阻采集數(shù)據(jù)返回?zé)崦糇柚?R_TEMP
  217. *****************************************/
  218. void  dataTM_colleck()
  219. {
  220.   chong_R1();   //標(biāo)定電阻充電
  221.   chong_R3();   //濕敏電阻充電
  222.   R_TEMP=10000*(count_vule3+(65535*num3))/(count_vule1+(65535*num1));//得到電阻整數(shù)位小數(shù)位忽略
  223.   num3=0;
  224.   num1=0;        //溢出次數(shù)清0
  225. }
  226. /*****************************************
  227. //31K濕敏電阻獲取濕度值
  228. *****************************************/
  229. void get_31HUMI_vule()
  230. {
  231.   //分段計算濕度值
  232.   if((R_Humideal_int/1000)>=2600)    HUMI_vule=(146000-10*(R_Humideal_int/1000))*10/4800; //20-25
  233.   else if(1300<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<2600)  HUMI_vule=(91000-10*(R_Humideal_int/1000))*10/2600; //25-30
  234.   else if(630<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<1300)  HUMI_vule=(53200-10*(R_Humideal_int/1000))*10/1340; //30-35
  235.   else if(310<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<630)   HUMI_vule=(28700-10*(R_Humideal_int/1000))*10/640; //35-40
  236.   
  237.   else if(160<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<310)  HUMI_vule=(15100-10*(R_Humideal_int/1000))*10/300; //40-45
  238.   
  239.   else if(87<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<160)  HUMI_vule=(8170-10*(R_Humideal_int/1000))*10/146; //45-50
  240.   else if(49<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<87)  HUMI_vule=(4670-10*(R_Humideal_int/1000))*10/76; //50-55
  241.   else if(31<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<49)  HUMI_vule=(2470-10*(R_Humideal_int/1000))*10/36; //55-60     
  242.   else if(20<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<31)  HUMI_vule=(1630-10*(R_Humideal_int/1000))*10/22; //60-65  
  243.   else if(13<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<20)  HUMI_vule=(1110-10*(R_Humideal_int/1000))*10/14; //65-70
  244.   else if(8<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<13)   HUMI_vule=(7740-100*(R_Humideal_int/1000))*10/92;//70-75
  245.   else if(6<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<8)   HUMI_vule=(4890-100*(R_Humideal_int/1000))*10/54;//75-80
  246.   //else if(5<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<6)  HUMI_vule=(2010-100*(R_Humideal_int/1000))*10/18;//80-85
  247.   else if(0<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<6)  HUMI_vule=(388-10*(R_Humideal_int/1000))*10/4;//85-90
  248.   
  249.   //溫度補償0-60℃
  250.   if((0<=temp_vule)&(temp_vule<=25))  HUMI_vule= HUMI_vule+((25-temp_vule)*2);   //小于25一度加0.2
  251.   if((25<temp_vule)&(temp_vule<=40))  HUMI_vule= HUMI_vule-((temp_vule-25)*2);   //大于25一度減0.2
  252.   if(HUMI_vule>=999)  HUMI_vule=999;  //大于99  
  253. }
  254. /*****************************************
  255. //得到溫度數(shù)據(jù)temp_vule  0-60℃
  256. *****************************************/
  257. void get_temp_vule()
  258. {
  259.    if(17960<=(R_TEMP)&(R_TEMP)<27280)       temp_vule=(136400-5*(R_TEMP))/4660; //0-10
  260.    else if(12091<=(R_TEMP)&(R_TEMP)<17960)  temp_vule=(238290-10*(R_TEMP))/5869; //10-20
  261.    else if(8312<=(R_TEMP)&(R_TEMP)<12091)   temp_vule=(196490-10*(R_TEMP))/3779; //20-30
  262.    else if(5827<=(R_TEMP)&(R_TEMP)<8312)    temp_vule=(157670-10*(R_TEMP))/2485; //30-40
  263.    else if(4161<=(R_TEMP)&(R_TEMP)<5827)    temp_vule=(62455-5*(R_TEMP))/833; //40-50
  264.    else if(3020<=(R_TEMP)&(R_TEMP)<4161)    temp_vule=(98660-10*(R_TEMP))/1141; //50-60
  265.    else  temp_vule=0;                       //其它溫度不補償
  266. }
  267. /*****************************************
  268. //系統(tǒng)初始化
  269. *****************************************/
  270. void system_init()
  271. {
  272. //電容放電
  273. D0_OUT;   //D0低電平輸出
  274. D0_CLR;  //

  275. D2_OUT;   //D2低電平輸出
  276. D2_CLR;  

  277. D3_OUT;   //D3低電平輸出
  278. D3_CLR;  

  279. C2_OUT; //D3低設(shè)置輸出
  280. C2_CLR;

  281. timer1_init();  //定時器1初始化
  282. }

  283. /*****************************************

  284. /*****************************************
  285. //主函數(shù)
  286. *****************************************/
  287. void main()
  288. {
  289. watchdog_init();  //喂狗
  290. init_lcd();    //顯示初始化
  291. system_init();//系統(tǒng)初始化
  292. while(1)
  293.      {               
  294.          //調(diào)試濕度                  
  295.          dataHM_colleck(); //濕度數(shù)據(jù)采集
  296.          get_31HUMI_vule(); //轉(zhuǎn)化濕度值
  297.          dataTM_colleck();         //溫度數(shù)據(jù)采集
  298.      get_temp_vule();          //得到temp_vule
  299.          //display_cuont1(count_vule1+(65535*num1));   //顯示標(biāo)定電阻記數(shù)值
  300.          //display_cuont2(count_vule2+(65535*num2));  //顯示濕敏電阻記數(shù)值
  301.          display_cuont5(R_Humideal_int);       //顯示濕敏電阻阻值         
  302.          display_cuont7(HUMI_vule);           //顯示濕度值
  303.          DelaymS(8000);                  //顯示刷新數(shù)據(jù)時間控制               
  304.           
  305.         //溫度調(diào)試
  306.         //dataTM_colleck();         //溫度數(shù)據(jù)采集
  307.         //get_temp_vule();          //轉(zhuǎn)化溫度值
  308.         //display_cuont1(count_vule1+(65535*num1));   //顯示標(biāo)定電阻記數(shù)值
  309.         //display_cuont2(count_vule3+(65535*num3));  //顯示熱敏電阻記數(shù)值
  310. ……………………

  311. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.jpg

所有資料51hei提供下載:
55681 HR202 濕度模塊 濕敏電阻模塊 濕度檢測模塊 濕度傳感器(1).rar (4.87 MB, 下載次數(shù): 303)



回復(fù)

使用道具 舉報

ID:551587 發(fā)表于 2019-5-31 07:21 | 顯示全部樓層
感謝分享, 正想來研究低成本的濕度方案.
回復(fù)

使用道具 舉報

ID:57925 發(fā)表于 2022-3-26 19:41 | 顯示全部樓層
感謝分享,正準(zhǔn)備玩這個濕敏電阻!
回復(fù)

使用道具 舉報

ID:298582 發(fā)表于 2024-3-14 20:14 | 顯示全部樓層
好帖子,可惜我的硬件做完了,用的其他的圖,自己不分析,還是你這個好理解,很完整,贊
回復(fù)

使用道具 舉報

ID:1123004 發(fā)表于 2024-5-30 13:50 | 顯示全部樓層
判斷條件怎么都是位與”&“?  不應(yīng)該是&&嗎?雖然結(jié)果一樣
回復(fù)

使用道具 舉報

ID:1125932 發(fā)表于 2024-6-20 10:21 | 顯示全部樓層
想問下c2是電容接哪個引腳啊
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费观看毛片 | 91视频一区二区 | 亚洲综合一区二区三区 | 国产一区二区三区在线看 | 成人精品在线视频 | 狠狠的日 | 天天天天天天天干 | 中文字幕 亚洲一区 | 久草视| 日韩欧美三区 | 亚洲国产成人精品久久久国产成人一区 | 午夜影院视频 | 在线成人免费观看 | 日日操夜夜摸 | 亚洲精品国产一区 | 日本一区高清 | 在线成人免费视频 | 亚洲一区二区视频在线播放 | 欧美日韩精品专区 | 日韩在线视频免费观看 | 亚洲国产第一页 | 日本久久精品视频 | 天堂网中文字幕在线观看 | 九九热在线视频观看这里只有精品 | 一级视频在线免费观看 | 国产亚洲精品精品国产亚洲综合 | 一区二区三区高清在线观看 | 久久专区 | 日本不卡高清视频 | 国产成人高清 | 欧美中文字幕在线观看 | 精国产品一区二区三区四季综 | av激情在线 | 免费视频一区二区 | 亚洲精品乱码 | 国产精品免费av | 亚洲一区av| 仙人掌旅馆在线观看 | 天天综合网7799精品 | 国产精品美女久久久久aⅴ国产馆 | 日本高清视频在线播放 |