【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】通过Ad采样读取光敏传感器结果

描述

本文来源电子发烧友社区,作者:jf_53933321, 帖子地址:https://bbs.elecfans.com/jishu_2289287_1_1.html


1. 光敏电阻介绍
通常,光敏电阻器都制成薄片结构,以便吸收更多的光能。当它受到光的照射时,半导体片(光敏层)内就激发出电子—空穴对,参与导电,使电路中电流增强。为了获得高的灵敏度,光敏电阻的电极常采用梳状图案,它是在一定的掩膜下向光电导薄膜上蒸镀金或铟等金属形的。用来检测有没有遮挡,比如门前有没有人来。
2. 板上资源

环境监测板上有一块光敏电阻,实物图和原理图如下图所示。
HiSpark HiSpark
3. 代码逻辑
当光敏电阻被遮挡住时电阻变小,原理图中的Q2和Q4不导通,因此输出电位为5V高电平。
  1. /* get gpio5 Voltage */
  2. void GetGpio5Voltage(const char *param)
  3. {
  4.     unsigned short data = 0;
  5.     unsigned short vlt = 0;
  6.     float voltage;
  7.     float vltMax = 0;
  8.     float vltMin = VLT_MIN;
  9.  
  10.     hi_unref_param(param);
  11.     memset_s(g_gpio5AdcBuf, sizeof(g_gpio5AdcBuf), 0x0, sizeof(g_gpio5AdcBuf));
  12.     for (int i = 0; i < ADC_TEST_LENGTH; i++) {
  13.         // ADC_Channal_2  自动识别模式  CNcomment:4次平均算法模式 CNend
  14.         unsigned int ret = AdcRead(IOT_ADC_CHANNEL_2, &data,
  15.                                    IOT_ADC_EQU_MODEL_4, IOT_ADC_CUR_BAIS_DEFAULT, 0xF0);
  16.         if (ret != HI_ERR_SUCCESS) {
  17.             printf("ADC Read Failn");
  18.             return  HI_NULL;
  19.         }
  20.         g_gpio5AdcBuf[i] = data;
  21.     }
  22.  
  23.     for (int i = 0; i < ADC_TEST_LENGTH; i++) {
  24.         vlt = g_gpio5AdcBuf[i];
  25.         voltage = (float)vlt * VOLTAGE_1_8_V *
  26.             VOLTAGE_4_tiMES / ADC_CHANNAL_RANGE; /* vlt * 1.8* 4 / 4096.0为将码字转换为电压 */
  27.         vltMax = (voltage > vltMax) ? voltage : vltMax;
  28.         vltMin = (voltage < vltMin) ? voltage : vltMin;
  29.     }
  30.     if (vltMax > VOLTAGE_0_6_V && vltMax < VOLTAGE_1_V) { /* 电压最大值大于0.6小于1.0 */
  31.         GpioKey1IsRFuncMode();
  32.     } else if (vltMax > VOLTAGE_1_V && vltMax < VOLTAGE_1_5_V) { /* 电压最大值大于1.0小于1.5 */
  33.         GpioKey2IsrFuncType();
  34.     } else if (vltMax < VOLTAGE_0_6_V) { /* 电压最大值小于0.6 */
  35.         printf("gpio9_LED_light:vltMax=%0.2f, vltMin=%0.2frn", vltMax, vltMin);
  36.         Gpio9LedLightFunc();
  37.     }
  38.     printf("key_5:vltMax=%0.2f, vltMin=%0.2frn", vltMax, vltMin);
  39. }
复制代码
其中调用了AdcRead方法,定义如下。
  1. unsigned int AdcRead(IotAdcChannelIndex channel, unsigned const short *data, IotAdcEquModelSel equModel,
  2.     IotAdcCurBais curBais, unsigned const short rstCnt)
  3. {
  4.     return hi_adc_read((hi_adc_channel_index)channel, (hi_u16*)data, (hi_adc_equ_model_sel)equModel,
  5.         (hi_adc_cur_bais)curBais, (hi_u16)rstCnt);
  6. }
复制代码

4. 实物演示
当光敏电阻被遮挡了,则led灯熄灭,否则led等亮起。如下视频。
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分