微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > 紫外线灯管测试(结项)

紫外线灯管测试(结项)

时间:10-02 整理:3721RD 点击:
一。紫外线知识  
最常见的紫外线,主要是来源于太阳的辐射。


     从光谱图上可以看到,根据波长可把紫外线分为:
1.长波紫外线(ultraviolet A, UVA)   波长320-400nm
2.中波紫外线(ultraviolet B, UVB)   波长280-320nm
3.短波紫外线(ultraviolet C,UVC)    波长100-280nm
      紫外线受很多因素的影响,能够到达地球表面对人体健康起重大影响作用的紫外线辐射被称为紫外线生物有效辐射,这主要包括长波紫外线UVA和中波紫外线UVB,其中UVA占95-98%, UVB占2-5%,而短波紫外线UVC基本上全部被大气中的臭氧层吸收。
     紫外线对人体的健康起着双方面的作用:
     一方面适度的紫外线照射不仅能起到杀死和抑制皮肤表面细菌的作用,并且能促进维生素D的合成,以及治疗某些皮肤病,还有研究表明,适度的紫外线照射可以减少机体肿瘤的发生率如:结肠癌、前列腺癌、乳腺癌等。
     另一方面,当接受较多紫外线辐射时,皮肤会出现各种光敏性或光毒性病变,临床表现各异。随着波长的增加,紫外线对皮肤的穿透能力也越来越强。UVA可以影响到真皮组织,诱导细胞产生大量自由基以及脂质过氧化,使弹性纤维蛋白变性,胶原蛋白纤维明显减少,角质细胞层增厚,毛细血管扩张等,导致皮肤老化;由于穿透能力强,UVA不能直接影响DNA损伤,但可以间接产生活性氧,导致DNA氧化性损伤,促使其单链及双链的断裂。当有光敏性物质存在时,UVA照射还可以引起光敏性反应。UVB主要损害皮肤表皮层及真皮浅层,引起多种DNA损伤及蛋白质变性,其导致的急性反应主要是皮肤出现红斑和水肿,慢性损伤主要包括光老化、免疫抑制和致癌作用等。同时UVA和UVB协同作用可以引起表皮层及真皮层的各种病变。
      UVA区,长波紫外线,约占10%~20%,它是令皮肤提前衰老的最主要原因,可穿透真皮层,使皮肤晒黑,并导致脂质和胶原蛋白受损,引起皮肤的光老化甚至皮肤癌,其作用缓慢持久,具有累积性,故被称为“年龄紫外线”,不受窗户、遮阳伞等的阻挡,即使阴天下雨也如此。  
     UVB区,中波紫外线,约占80%~90%,它可到达真皮层,使皮肤被晒伤,引起皮肤脱皮、红斑、晒黑等现象,但它可被玻璃、遮阳伞、衣服等阻隔。
     UVC区,短波紫外线,它不能到达地面,因为它在通过臭氧层时已被吸收。
二、紫外线传感器VEML6075
      VEML6075显示了峰值敏感性在320 nm 对于UVB通道。
      带宽(λ0.5)的UVB峰的大约310 nm - 330 nm。
      带宽(λ0.5)的第二对紫外线a和紫外线b通道是在约310纳米至360纳米范围内。其发光响应率是大约一半相比比UVB通道。   
特性曲线:


三、紫外线灯管
      紫外线的应用:
     根据生物效应的不同,将紫外线按照波长划分为四个波段:
     UVA波段,波长320~400nm,又称为长波黑斑效应紫外线。它有很强的穿透力,可以穿透大部分透明的玻璃以及塑料。日光中含有的长波紫外线有超过98%能穿透臭氧层和云层到达地球表面,UVA可以直达肌肤的真皮层,破坏弹性纤维和胶原蛋白纤维,将我们的皮肤晒黑。360nm波长的UVA紫外线符合昆虫类的趋光性反应曲线,可制作诱虫灯。300-420nm波长的UVA紫外线可透过完全截止可见光的特殊着色玻璃灯管,仅辐射出以365nm为中心的近紫外光,可用于矿石鉴定、舞台装饰、验钞等场所。
     UVB波段,波长275~320nm,又称为中波红斑效应紫外线。中等穿透力,它的波长较短的部分会被透明玻璃吸收,日光中含有的中波紫外线大部分被臭氧层所吸收,只有不足2%能到达地球表面,在夏天和午后会特别强烈。UVB紫外线对人体具有红斑作用,能促进体内矿物质代谢和维生素D的形成,但长期或过量照射会令皮肤晒黑,并引起红肿脱皮。紫外线保健灯、植物生长灯发出的就是使用特殊透紫玻璃(不透过254nm以下的光)和峰值在300nm附近的荧光粉制成。
      UVC波段,波长100~275nm,又称为短波灭菌紫外线。它的穿透能力最弱,无法穿透大部分的透明玻璃及塑料。日光中含有的短波紫外线几乎被臭氧层完全吸收。短波紫外线对人体的伤害很大,短时间照射即可灼伤皮肤,长期或高强度照射还会造成皮肤癌。紫外线杀菌灯发出的就是UVC短波紫外线。
     UVD波段,波长小于100nm,又称为真空紫外线。
      紫外线的杀菌原理:
紫外线杀菌就是通过紫外线的照射,破坏及改变微生物的DNA(脱氧核糖核酸)结构,使细菌当即死亡或不能繁殖后代,达到杀菌的目的。真正具有杀菌作用的是UVC紫外线,因为C波段紫外线很易被生物体的DNA吸收,尤以253.7nm左右的紫外线最佳。
     紫外线杀菌灯的种类
     紫外线杀菌灯的发光谱线主要有254nm和185nm两条。254nm紫外线通过照射微生物的DNA来杀灭细菌,185nm紫外线可将空气中的O2变成O3(臭氧),臭氧具有强氧化作用,可有效地杀灭细菌,臭氧的弥散性恰好可弥补由于紫外线只沿直线传播、消毒有死角的缺点。
四、官方例程移植到mbed
      看完了紫外线灯管的知识,我真是晕了,这个紫外线传感器不能用在检测杀菌灯的场合或者说非常不适合。
工程结构:


主代码:

  1. #include "mbed.h"
  2. #include "spilcd.h"
  3. #include "eng.h"
  4. #include "chi.h"
  5. #include "logo.h"

  6. Serial pc(P0_4,P0_0);
  7. DigitalOut myled1(P0_27);
  8. I2C i2c_master(P0_11,P0_10);
  9. SPILCD lcd(P0_17, P0_13, P0_26, P0_24,NC, P0_25);

  10. char UVA_Data[2];
  11. char UVB_Data[2];
  12. char UVD_Data[2];
  13. char UVcomp1_Data[2];
  14. char UVcomp2_Data[2];
  15. char ID_data[2];
  16. char ID_com[3]={0x00,0x30,0x00};

  17. unsigned long UVA,UVB,UVD,UVcomp1,UVcomp2;
  18. unsigned long UVAcomp,UVBcomp,UVI;
  19. float a=2.5;
  20. float b=2.5;
  21. float c=2.75;
  22. float d=2.75;

  23. // 显示英文字符:row为页地址 col为列地址
  24. void PUTchar8x16(int row, int col,   char *pcStr, unsigned char flag){   
  25.   
  26.        unsigned char i;
  27.        unsigned int X=0;
  28.       
  29.   while((*pcStr)!= 0)  
  30.   {
  31.     if(col > 15) return;
  32.     if(row > 7) return;
  33.    
  34.     X = ((*pcStr++)-32)* 0x10;
  35.     lcd.locate(8*col, row);   
  36.     for(i=0;i<8;i++)
  37.     {
  38.       if(flag)lcd.write(~ENGLISH[X++]);
  39.       else lcd.write(ENGLISH[X++]);
  40.     }
  41.    
  42.     lcd.locate(8*col, row+1);
  43.     for(i=0;i<8;i++)
  44.     {
  45.       if(flag)lcd.write(~ENGLISH[X++]);
  46.       else lcd.write(ENGLISH[X++]);
  47.     }
  48.     col++;
  49.   }
  50. }
  51. //显示数值
  52. void PUTNum(int row,int col,unsigned long Num,unsigned char flag)
  53. {
  54.   unsigned long temp=0;
  55.   unsigned int X=0;
  56.   unsigned char i,BitNum=0;
  57.   if(Num==0)
  58.   {
  59.     PUTchar8x16(row,col,"0",flag);
  60.   }
  61.   else
  62.   {
  63.     temp=Num;
  64.     while(temp){temp/=10;BitNum++;}
  65.     temp=1;
  66.     for(i=0;i<(BitNum-1);i++)
  67.     {
  68.       temp*=10;
  69.     }
  70.     while(temp!=0)
  71.     {
  72.       if(col > 15)return;
  73.       if(row > 7)return;
  74.       
  75.       X = (Num/temp + 16) * 16;
  76.       
  77.       lcd.locate(8*col, row);
  78.       for(i=0;i<8;i++)
  79.       {
  80.         if(flag)lcd.write(~ENGLISH[X++]);
  81.         else lcd.write(ENGLISH[X++]);
  82.       }
  83.       
  84.       lcd.locate(8*col, row+1);
  85.       for(i=0;i<8;i++)
  86.       {
  87.         if(flag)lcd.write(~ENGLISH[X++]);
  88.         else lcd.write(ENGLISH[X++]);
  89.       }
  90.       
  91.       col ++;
  92.       Num%=temp;
  93.       temp/=10;
  94.     }
  95.   }
  96. }

  97. //显示中文字符
  98. void PUTchar16x16(unsigned char row,unsigned char col,unsigned char *pcStr,unsigned char flag)
  99. {   
  100.   unsigned char i;
  101.   unsigned int X=0;
  102.   unsigned int GBC;
  103.   unsigned char qh,wh;
  104.   
  105.   while(*pcStr != 0)  
  106.   {
  107.     qh  = *(pcStr) -0xa0;
  108.     wh  = *(pcStr+1) -0xa0;
  109.     GBC=qh*100+wh;
  110.     for(i=0;i<HZ_SIZE;i++)
  111.     if(GBC == GBC_Index[i])break;
  112.    
  113.     if(col > 15)return;
  114.     if(row > 7)return;
  115.    
  116.     X = i*0x20;
  117.    
  118.     lcd.locate(8*col, row);
  119.     for(i=0;i<16;i++)
  120.     {
  121.       if(flag)lcd.write(~CHINESE[X++]);
  122.       else    lcd.write(CHINESE[X++]);
  123.     }
  124.     lcd.locate(8*col, row+1);
  125.     for(i=0;i<16;i++)
  126.     {
  127.       if(flag)lcd.write(~CHINESE[X++]);
  128.       else    lcd.write(CHINESE[X++]);  
  129.     }
  130.     col +=2;
  131.     pcStr +=2;
  132.   }
  133. }


  134. //*********************************************************************
  135. //显示系统信息
  136. //*********************************************************************
  137. void Welcome_on(void)
  138. {
  139.     PUTchar8x16(0,0,"WPI ATU ",0);
  140.     PUTchar8x16(2,0,"Vishay Sensor",0);
  141.     PUTchar8x16(4,0,"RD: Claire",0);
  142.     PUTchar8x16(6,0,"2015-12-17 V1.0",0);
  143.     //Delay(5000);
  144. }

  145. //*********************************************************************
  146. //显示UV数据
  147. //*********************************************************************
  148. void UV_data(void)
  149. {
  150.     PUTchar8x16(0,0,"    UV Sensor ",0);
  151.     PUTchar8x16(2,0,"    VEML6075",0);
  152.     PUTchar8x16(4,0," UVA data = ",0);
  153.     PUTchar8x16(6,0," UVB data = ",0);
  154.     //Delay(5000);
  155. }

  156. int main() {
  157.     printf("LPC824+UV sensor Test!");
  158.     myled1=0;
  159.      lcd.PUTImage(LOGO);
  160.    wait(3);
  161.    lcd.cls();
  162.    Welcome_on();
  163.     wait(3);
  164.     lcd.cls();
  165.     UV_data();   
  166.      i2c_master.start();
  167.      i2c_master.write(0x20,ID_com,3,true);   
  168.      i2c_master.stop();
  169.       wait(3);   
  170.       
  171.           i2c_master.start();
  172.      i2c_master.write(0x20);
  173.      i2c_master.write(0x07);     
  174.      i2c_master.start();      
  175.      i2c_master.read(0x20, UVA_Data, 2, true);
  176.      i2c_master.stop();
  177.       wait(0.1);      
  178.         
  179.      i2c_master.start();
  180.      i2c_master.write(0x20);
  181.      i2c_master.write(0x09);     
  182.      i2c_master.start();      
  183.      i2c_master.read(0x20, UVB_Data, 2, true);
  184.      i2c_master.stop();
  185.      wait(0.1);
  186.    
  187.      i2c_master.start();
  188.      i2c_master.write(0x20);
  189.      i2c_master.write(0x08);     
  190.      i2c_master.start();      
  191.      i2c_master.read(0x20, UVD_Data, 2, true);
  192.      i2c_master.stop();
  193.      wait(0.1);     
  194.    
  195.      i2c_master.start();
  196.      i2c_master.write(0x20);
  197.      i2c_master.write(0x0A);     
  198.      i2c_master.start();      
  199.      i2c_master.read(0x20, UVcomp1_Data, 2, true);
  200.      i2c_master.stop();
  201.      wait(0.1);

  202.      i2c_master.start();
  203.      i2c_master.write(0x20);
  204.      i2c_master.write(0x0B);     
  205.      i2c_master.start();      
  206.      i2c_master.read(0x20, UVcomp2_Data, 2, true);
  207.      i2c_master.stop();   
  208.      wait(0.1);
  209.      
  210.      UVA= (int)UVA_Data[1]<<8|(int)UVA_Data[0];
  211.      printf(" UVA_Data_L:0x%x \r\n",UVA_Data[0]);
  212.      printf(" UVA_Data_H:0x%x \r\n",UVA_Data[1]);
  213.      printf(" UVA:0x%x \r\n",UVA);
  214.      
  215.      UVB= (int)UVB_Data[1]<<8|(int)UVB_Data[0];
  216.      printf(" UVB_Data_L:0x%x \r\n",UVB_Data[0]);
  217.      printf(" UVB_Data_H:0x%x \r\n",UVB_Data[1]);
  218.      printf(" UVB:0x%x \r\n",UVB);
  219.      
  220.      
  221.      UVD= (int)UVD_Data[1]<<8|(int)UVD_Data[0];
  222.      printf(" UVD_Data_L:0x%x \r\n",UVD_Data[0]);
  223.      printf(" UVD_Data_H:0x%x \r\n",UVD_Data[1]);
  224.      printf(" UVD:0x%x \r\n",UVD);
  225.      
  226.      UVcomp1= (int)UVcomp1_Data[1]<<8|(int)UVcomp1_Data[0];
  227.      printf(" UVcomp1_Data_L:0x%x \r\n",UVcomp1_Data[0]);
  228.      printf(" UVcomp1_Data_H:0x%x \r\n",UVcomp1_Data[1]);
  229.      printf(" UVcomp1_Data:0x%x \r\n",UVcomp1);
  230.      
  231.      UVcomp2= (int)UVcomp2_Data[1]<<8|(int)UVcomp2_Data[0];
  232.      printf(" UVcomp2_Data_L:0x%x \r\n",UVcomp2_Data[0]);
  233.      printf(" UVcomp2_Data_H:0x%x \r\n",UVcomp2_Data[1]);
  234.      printf(" UVcomp2_Data:0x%x \r\n",UVcomp2);
  235.      
  236.      UVAcomp = (unsigned long)(((UVA - UVD ) - a*(UVcomp1-UVD) - b*( UVcomp2-UVD))*100);
  237.      UVBcomp = (unsigned long)(((UVB - UVD ) - c*(UVcomp1-UVD) - d*( UVcomp2-UVD))*100);
  238.       PUTchar8x16(4,11,"       ",0);  
  239.       PUTNum( 4, 11,UVA, 0);
  240.       PUTchar8x16(6,11,"       ",0);
  241.       PUTNum( 6, 11,UVB, 0);
  242.       wait(1);
  243.       
  244.     while(1){
  245.         myled1 = !myled1;
  246.         wait(0.5);
  247.         
  248.           i2c_master.start();
  249.      i2c_master.write(0x20);
  250.      i2c_master.write(0x07);     
  251.      i2c_master.start();      
  252.      i2c_master.read(0x20, UVA_Data, 2, true);
  253.      i2c_master.stop();
  254.       wait(0.1);      
  255.         
  256.      i2c_master.start();
  257.      i2c_master.write(0x20);
  258.      i2c_master.write(0x09);     
  259.      i2c_master.start();      
  260.      i2c_master.read(0x20, UVB_Data, 2, true);
  261.      i2c_master.stop();
  262.      wait(0.1);
  263.      UVA= (int)UVA_Data[1]<<8|(int)UVA_Data[0];
  264.      UVB= (int)UVB_Data[1]<<8|(int)UVB_Data[0];
  265.      
  266.      PUTNum( 4, 11,UVA, 0);      
  267.       PUTNum( 6, 11,UVB, 0);
  268.     }
  269. }

复制代码

五、对紫外线灯管的简单测试
不同的距离测试的结果如下






六、结论
紫外线传感器不适合于紫外线灯管测试,不过作为户外紫外线UVA和UVB值增高预警还是非常不错的。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top