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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15919|回復: 5
打印 上一主題 下一主題
收起左側

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

  [復制鏈接]
跳轉到指定樓層
樓主
傳感器資料,新手,求照顧
一、產品概述
HR202L 濕敏電阻器是采用有機高分子材料的一種新型濕度敏感元件,具有感濕范圍寬,響應迅速,抗污染能力強,無需加熱清洗及長期使用性能穩定可靠等諸多特點。


三、應用范圍
  用于溫濕度顯示計、溫濕度禮品表、大氣環境監測、工業過程控制、農業、測量儀表等應用領域。

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

五、電路圖


濕敏電阻測試31K1004

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

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


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


單片機源程序如下:
  1. /******************************************************************************
  2. * Copyright (c) 2010,濕敏電阻測試
  3. * All rights reserved.
  4. *
  5. * 文件名稱:R_TEST.C   
  6. * 文件標識:
  7. * 摘 要:   系統程序。   
  8. *
  9. * 當前版本: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標定電阻接口PD2-R濕敏電阻接口PD3檢測口PC2熱敏電阻接口  12864顯示
  17. #include "Config.h"
  18. //函數聲明
  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;  //記數值益出次數
  28. unsigned int HUMI_vule,temp_vule;  //濕溫值
  29. long int  count_vule1,count_vule2,count_vule3; //存取RC充電計數值
  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();              //全局中斷關
  72. TCCR1B = 0x00;      //stop
  73. TCNT1= 0x0000;     //set count初值
  74. TCCR1A = 0x00;    //普通模式
  75. STOP_TIMES ;     //停止記數
  76. }
  77. /*****************************************
  78. 讀TCNT1
  79. 輸入數據:從讀取記數值
  80. 輸出:無
  81. 作者:
  82. 修改時間:
  83. *****************************************/
  84. unsigned int read_TCNT1(void)
  85. {
  86. unsigned int i;
  87. sreg=SREG;          //保存中斷標志位
  88. CLI();             //禁止中斷

  89. i=TCNT1;           //讀取記數值

  90. //SEI();        //全局中斷
  91. SREG=sreg;     //恢復標志位
  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低設置輸出
  106. C2_CLR;
  107. //while(D3_R);   //判斷是否放完電
  108. DelaymS(50); //時間控制電容放完電
  109. }
  110. /*****************************************
  111. //控制10K標定電阻沖電記下充電時間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設置高阻輸入
  121.    D3_CLR;   
  122.   
  123.    C2_IN;   //D3低設置輸出
  124.    C2_CLR;  
  125.   
  126.   D0_OUT;
  127.   D0_SET;   //R1C開始充電
  128.   
  129.   START_TIMES ;   //馬上開始記數  
  130. loop1:if(TCNT1==65535)//防止記數溢出
  131.     {
  132.           TCNT1=0;
  133.           num1+=1;
  134.         }      
  135.   while(!D3_R) goto loop1;    //判斷電平是否置高
  136.   count_vule1=TCNT1;//讀取記數值
  137.   STOP_TIMES ;     //停止記數
  138.   TCNT1=0;       //記數值清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設置高阻輸入
  152.    D3_CLR;  
  153.   
  154.    C2_IN;  //D3低設置輸出
  155.    C2_CLR;   
  156.   
  157.    D2_OUT;
  158.    D2_SET;   //R2C開始充電
  159.   
  160.   START_TIMES ;   //馬上開始記數  
  161. loop2:if(TCNT1==65535)//防止記數溢出
  162.     {
  163.           TCNT1=0;
  164.           num2+=1;
  165.         }      
  166.   while(!D3_R) goto loop2;    //判斷電平是否置高
  167.   count_vule2=TCNT1;//讀取記數值
  168.   STOP_TIMES ;     //停止記數
  169.   TCNT1=0;       //記數值清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設置高阻輸入
  183.    D3_CLR;  
  184.   
  185.    C2_IN;   //D3低設置輸出
  186.    C2_CLR;  
  187.   
  188.    D2_OUT;
  189.    D2_SET;    //R2C開始充電
  190.   
  191.   START_TIMES ;   //馬上開始記數  
  192. loop3:if(TCNT1==65535)//防止記數溢出
  193.     {
  194.           TCNT1=0;
  195.           num3+=1;
  196.         }      
  197.   while(!D3_R) goto loop3;    //判斷電平是否置高
  198.   count_vule3=TCNT1;//讀取記數值
  199.   STOP_TIMES ;     //停止記數
  200.   TCNT1=0;       //記數值清0   
  201.   
  202.   fang_C();    //電容釋電
  203. }
  204. /*****************************************
  205. //濕敏電阻采集數據 返回濕敏阻值R_Humideal_int
  206. *****************************************/
  207. void  dataHM_colleck()
  208. {
  209.   chong_R1();   //標定電阻充電
  210.   chong_R2();   //濕敏電阻充電
  211.   R_Humideal_int=10000*(count_vule2+(65535*num2))/(count_vule1+(65535*num1));  //得到電阻整數位小數位忽略
  212.   num2=0;
  213.   num1=0;            //溢出次數清0
  214. }
  215. /*****************************************
  216. //熱敏電阻采集數據返回熱敏阻值 R_TEMP
  217. *****************************************/
  218. void  dataTM_colleck()
  219. {
  220.   chong_R1();   //標定電阻充電
  221.   chong_R3();   //濕敏電阻充電
  222.   R_TEMP=10000*(count_vule3+(65535*num3))/(count_vule1+(65535*num1));//得到電阻整數位小數位忽略
  223.   num3=0;
  224.   num1=0;        //溢出次數清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. //得到溫度數據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. //系統初始化
  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低設置輸出
  280. C2_CLR;

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

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

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

  311. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


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



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:551587 發表于 2019-5-31 07:21 | 只看該作者
感謝分享, 正想來研究低成本的濕度方案.
回復

使用道具 舉報

板凳
ID:57925 發表于 2022-3-26 19:41 | 只看該作者
感謝分享,正準備玩這個濕敏電阻!
回復

使用道具 舉報

地板
ID:298582 發表于 2024-3-14 20:14 | 只看該作者
好帖子,可惜我的硬件做完了,用的其他的圖,自己不分析,還是你這個好理解,很完整,贊
回復

使用道具 舉報

5#
ID:1123004 發表于 2024-5-30 13:50 | 只看該作者
判斷條件怎么都是位與”&“?  不應該是&&嗎?雖然結果一樣
回復

使用道具 舉報

6#
ID:1125932 發表于 2024-6-20 10:21 | 只看該作者
想問下c2是電容接哪個引腳啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 农夫在线精品视频免费观看 | 成人深夜福利 | 视频一区二区在线 | 久久这里只有 | 亚洲成人免费在线 | 亚洲欧洲日本国产 | 国产精品久久国产愉拍 | 欧美中国少妇xxx性高请视频 | 日日操夜夜干 | 中文字幕一区二区三区不卡 | 毛片国产 | 狠狠的干狠狠的操 | 久久99精品国产 | 色呦呦在线 | 久久成人亚洲 | 亚洲综合一区二区三区 | 色www精品视频在线观看 | 亚洲欧美视频一区 | 黄色免费av | 国产精品福利视频 | 欧美福利影院 | 日韩久久中文字幕 | 国产高清在线 | 国产精品精品视频一区二区三区 | 91精品国产欧美一区二区 | 91色网站 | www.av7788.com | 红色av社区| 精品99爱视频在线观看 | 天堂中文在线观看 | 欧美日韩在线免费 | 黑人巨大精品欧美一区二区免费 | 日韩精品成人网 | 人人干人人看 | 亚洲视频一区在线观看 | 成人国产精品免费观看 | 久久另类 | 午夜tv免费观看 | 亚洲成人免费视频在线 | 亚洲精品在线免费观看视频 | 欧美成人在线免费 |