jinglixixi 发表于 2023-1-11 00:18

[ ST NUCLEO-U575ZI-Q 测评]+ 光照强度检测及记录

<div class='showpostmsg'><p>对于环境监测记录仪,它涉及温度、湿度、光强、气压等的检测,这里仅以光照强度检测为例加以介绍。</p>

<p >进行光照强度的检测所用的传感器为BH1750,是一种I2C接口的器件,它与开发板的连接关系为:</p>

<p >SCL---PA5</p>

<p >SDA---PA6</p>

<p >为输出高低电平所做的语句定义为:</p>

<p >#define SCL_Set()&nbsp; HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1)</p>

<p >#define SCL_Clr()&nbsp; HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 0)</p>

<p >&nbsp;</p>

<p >#define SDA_Set()&nbsp; HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, 1)</p>

<p >#define SDA_Clr()&nbsp; HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, 0)</p>

<p >&nbsp;</p>

<p >其读取数据的语句定义为:</p>

<p >#define IIC_SDA_IN HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6)</p>

<p >&nbsp;</p>

<p>为转换数据引脚的工作模式,所配置的工作模式设置函数为:</p>

<pre>
<code class="language-cpp">void IIC_INPUT_MODE_SET()
{
        __HAL_RCC_GPIOA_CLK_ENABLE();
        GPIO_InitStruct.Pin = GPIO_PIN_6;
        GPIO_InitStruct.Mode= GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull= GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &amp;GPIO_InitStruct);
}

void IIC_OUTPUT_MODE_SET()
{
        __HAL_RCC_GPIOA_CLK_ENABLE();
        GPIO_InitStruct.Pin = GPIO_PIN_6;
        GPIO_InitStruct.Mode= GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull= GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &amp;GPIO_InitStruct);
}
</code></pre>

<p>为实现检测数据的更新显示及波形的绘制,其读取光照强度的函数为:</p>

<pre>
<code class="language-cpp">void Get_Sunlight_Value()
{
    int dis_data=0;
    float temp;
    char i=0;
    unsigned int sd;
    Single_Write_BH1750(0x01);
    Single_Write_BH1750(0x10);
    Delay_us(100);
    Multiple_Read_BH1750();
    for(i=0;i&lt;3;i++)    dis_data=BUF;
    dis_data=(dis_data&lt;&lt;8)+BUF;
    temp=(float)dis_data/1.2;
    sd=temp;
    if(sd &gt; 999)
                {
                zz = sd%10000/1000+'0';
                          zx =zz;
                }
                else
                {
                    zz = ' ';
                          zx ='0';
                }
          if(sd &gt; 99)
                {
                zz = sd%1000/100+'0';
                zx =zz;
                }
                else
      {
                      zz = ' ';
                          zx ='0';
                }
                if(sd &gt; 9)
                {
                        zz = sd%100/10+'0';
                zx =zz;
                }
                else
                {
                  zz =' ';
                }
          zz = sd%10+'0';
          zx =zz;
          HAL_UART_Transmit(&amp;huart2, (uint8_t *)zz,16, 100);
}
</code></pre>

<p>为使检测结果的输出与RTC的时间刷新同步,其RTC显示函数的内容为:</p>

<pre>
<code class="language-cpp">static void RTC_TimeShow(uint8_t *showtime)
{
        RTC_DateTypeDef sdatestructureget;
    RTC_TimeTypeDef stimestructureget;
    HAL_RTC_GetTime(&amp;hrtc, &amp;stimestructureget, RTC_FORMAT_BIN);
    HAL_RTC_GetDate(&amp;hrtc, &amp;sdatestructureget, RTC_FORMAT_BIN);
        if(p!=stimestructureget.Seconds)
        {
                zl=stimestructureget.Hours/10+'0';
          zl=stimestructureget.Hours%10+'0';
                zl=stimestructureget.Minutes/10+'0';
          zl=stimestructureget.Minutes%10+'0';
                zl=stimestructureget.Seconds/10+'0';
          zl=stimestructureget.Seconds%10+'0';
          p=stimestructureget.Seconds;
          HAL_UART_Transmit(&amp;huart2, (uint8_t *)zl,20, 100);
          Get_Sunlight_Value();
          HAL_UART_Transmit(&amp;huart2, (uint8_t *)zx,16, 100);
        }
}
</code></pre>

<p>在上述函数的配合下,光照强度检测的显示效果如图1所示。</p>

<p> 图1 显示效果</p>

<p >&nbsp;</p>

<p >由于环境监测记录仪不但要处理温度、湿度、光强、气压的检测、显示及波形绘制,还要涉及到数据的记录问题。为减轻其处理工作量,是将数据记录工作交由串口记录模块来完成的,记录的数据由串口发送到记录模块即可完成文件的记录处理,其记录的数据形式如图2所示。</p>

<p >图2 记录形式</p>

<p >&nbsp;</p>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

lugl4313820 发表于 2023-1-11 08:58

<p>由于环境监测记录仪不但要处理温度、湿度、光强、气压的检测、显示及波形绘制,还要涉及到数据的记录问题。为减轻其处理工作量,是将数据记录工作交由串口记录模块来完成的,记录的数据由串口发送到记录模块即可完成文件的记录处理,其记录的数据形式如图2所示。</p>

<p>老师的分享太好了!</p>

jinglixixi 发表于 2023-1-11 11:02

lugl4313820 发表于 2023-1-11 08:58
由于环境监测记录仪不但要处理温度、湿度、光强、气压的检测、显示及波形绘制,还要涉及到数据的记录问题。 ...

<p>哈哈,这样就基本全面了。</p>

okhxyyo 发表于 2023-1-12 09:38

<p>测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html</p>

吾妻思萌 发表于 2023-1-13 07:49

<p>老师测一测精度和GR&R呗~</p>

jinglixixi 发表于 2023-1-13 10:59

吾妻思萌 发表于 2023-1-13 07:49
老师测一测精度和GR&R呗~

<p>有机会的话找个项目试试</p>
页: [1]
查看完整版本: [ ST NUCLEO-U575ZI-Q 测评]+ 光照强度检测及记录