[ 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() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1)</p>
<p >#define SCL_Clr() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 0)</p>
<p > </p>
<p >#define SDA_Set() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, 1)</p>
<p >#define SDA_Clr() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, 0)</p>
<p > </p>
<p >其读取数据的语句定义为:</p>
<p >#define IIC_SDA_IN HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6)</p>
<p > </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, &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, &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<3;i++) dis_data=BUF;
dis_data=(dis_data<<8)+BUF;
temp=(float)dis_data/1.2;
sd=temp;
if(sd > 999)
{
zz = sd%10000/1000+'0';
zx =zz;
}
else
{
zz = ' ';
zx ='0';
}
if(sd > 99)
{
zz = sd%1000/100+'0';
zx =zz;
}
else
{
zz = ' ';
zx ='0';
}
if(sd > 9)
{
zz = sd%100/10+'0';
zx =zz;
}
else
{
zz =' ';
}
zz = sd%10+'0';
zx =zz;
HAL_UART_Transmit(&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(&hrtc, &stimestructureget, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &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(&huart2, (uint8_t *)zl,20, 100);
Get_Sunlight_Value();
HAL_UART_Transmit(&huart2, (uint8_t *)zx,16, 100);
}
}
</code></pre>
<p>在上述函数的配合下,光照强度检测的显示效果如图1所示。</p>
<p> 图1 显示效果</p>
<p > </p>
<p >由于环境监测记录仪不但要处理温度、湿度、光强、气压的检测、显示及波形绘制,还要涉及到数据的记录问题。为减轻其处理工作量,是将数据记录工作交由串口记录模块来完成的,记录的数据由串口发送到记录模块即可完成文件的记录处理,其记录的数据形式如图2所示。</p>
<p >图2 记录形式</p>
<p > </p>
<p> </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> <p>由于环境监测记录仪不但要处理温度、湿度、光强、气压的检测、显示及波形绘制,还要涉及到数据的记录问题。为减轻其处理工作量,是将数据记录工作交由串口记录模块来完成的,记录的数据由串口发送到记录模块即可完成文件的记录处理,其记录的数据形式如图2所示。</p>
<p>老师的分享太好了!</p>
lugl4313820 发表于 2023-1-11 08:58
由于环境监测记录仪不但要处理温度、湿度、光强、气压的检测、显示及波形绘制,还要涉及到数据的记录问题。 ...
<p>哈哈,这样就基本全面了。</p>
<p>测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html</p>
<p>老师测一测精度和GR&R呗~</p> 吾妻思萌 发表于 2023-1-13 07:49
老师测一测精度和GR&R呗~
<p>有机会的话找个项目试试</p>
页:
[1]