描述
<h2>题目要求</h2>
<p><span style="color:#999AAA">基于STM32的桌面温湿度检测仪设计</span></p>
<h2>题目分析</h2>
<p><span style="color:#999AAA">本设计使用了STM32G030K6T6芯片为主处理器,盛思锐的SHT40温湿度传感器模块为数据采集前端模块,将采集到的温湿度数据通过SN74HC595PWR移位寄存器送入3位数码管显示,上面的三位数码管显示温度值,下面的三个数码管显示湿度值。</span></p>
<h2></h2>
<p><span style="color:#999AAA">总体设计方案框图:</span></p>
<pre><code class="language-mermaid">graph TD
主芯片STM32 <--> 温湿度采集</code></pre>
<h2>原理图设计说明</h2>
<p><span style="color:#999AAA">原理图的设计主要包括主处理器芯片、数码管显示电路、温湿度采集电路和电源电路等内容,主要模块介绍如下:
原理图如下所示:
<img src="//image.lceda.cn/oshwhub/4485b09a86ce4e0b8fb17c89572179cc.png" alt="桌面温湿度检测仪原理图PDF.png">
主控芯片介绍:
桌面温湿度仪项目使用STM32G030K6T6芯片作为主控芯片,该芯片使用Arm Cortex-M0+内核;最大主频64Mhz;具有32KB的Flash以及8K的SRAM,供电电压在2.0V~3.6V之间,可用来采集和控制温湿度数据。
数码管模块:
本项目使用了2个三位的数码管,数据输入部分采用以为寄存器SN74HC595,其引脚设置为推挽输出、快速模式。SN74HC595驱动时序时,首先输入高电平或低电平到SER引脚中,随后产生一个SCLK的上升沿,将数据发送出去,这里是8位数据移位寄存器,所以循环8次,最后一个RCLK的上升沿将数据锁存住,保持不变,直到下一次发送。
温湿度模块采集:
桌面温湿度仪上使用一个SHT40温湿度传感器模块用于检测温湿度,SHT40采用IIC进行通信。模块上R8、R9是IIC通信的上拉电阻,起到“线与”的作用,支持挂载多个设备。
电源电路:
桌面温湿度仪使用两节5号电池用于整个系统供电,这里加入一个分压电阻用于检测电池电压。使用两个10K对电压值进行分压,然后通过单片机ADC进行电压读取,对于3V电池,其实可以直接输入到单片机的IO口进行读取,但是大多数情况都是使用分压电阻来进行,这里我也不做改动。</span></p>
<h2>PCB设计说明</h2>
<p><span style="color:#999AAA">
本项目的设计的温湿度仪,整体上尺寸比较小,非常适合摆放在桌面上,所使用的元器件尺寸也比较小,整体上只有两节5号电池的大小,这为焊接增加了一定的难度,尤其是对于初学者,具有一定的挑战性,比如SN74HC595PWR和STM32G030K6T6的引脚都比较小,焊接时一定要仔细,小心翼翼。
在进行布局时,首先要摆放好两节电池壳的位置,并且把他们摆放在背面,在正面摆放元器件。元器件的摆放首先放置好较大的数码管位置,然后在摆放三个移位寄存器和STM32芯片的位置,剩下的电阻、电容和LED灯灯元器件相对简单一点,还需要注意的是按键,下载器SWD要摆放在边缘位置,便于后面的调试。
在布线方面,要注意走线一定要注意整齐,尤其是多条线并排走的时候一定要对齐位置,否则会非常乱,也不便于后面的维护。这里地线设置为30mil,电源线设置为15mil,信号线设置为10mil,最后尽量双面铺铜。</span></p>
<p><img src="//image.lceda.cn/oshwhub/3660033198a44d5782c8ef36f88901aa.png" alt="温湿度仪PCB图.png"></p>
<h2>软件说明</h2>
<p><span style="color:#999AAA">
<strong>代码块:</strong></span></p>
<pre><code>/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
HAL_Delay(100);
SN74HC595_Send_Data(SN_DIG,0x00);
SN74HC595_Send_Data(SN_LED1,0x00);
SN74HC595_Send_Data(SN_LED2,0x00);
HAL_ADCEx_Calibration_Start(&hadc1); //ADC校准
HAL_ADC_Start(&hadc1); //启动ADC转换
HAL_ADC_PollForConversion(&hadc1, 50); //等待转换完成,50为最大等待时间,单位为ms
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
{
ADC_Value = HAL_ADC_GetValue(&hadc1); //获取AD值
Data = (ADC_Value*3.3f)/4095.0f;
}
/* USER CODE END 2 */
Vol_Value = (uint16_t)(Data * 100)*2;
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
ShowNum(1,1,Vol_Value / 100);
ShowNum(1,2,Vol_Value /10 %10);
ShowNum(1,3,Vol_Value % 10);
/* USER CODE BEGIN 3 */
}
</code></pre>
<h2>实物展示说明</h2>
<p><span style="color:#999AAA">提示:作品的实物图片,图片可以加上说明。</span></p>
<p><img src="//image.lceda.cn/oshwhub/2f744bf1a79e4aa3bcf6ee64f5f76a53.jpg" alt="温湿度仪.jpg"></p>
<h2>注意事项</h2>
<p><span style="color:#999AAA">
1、一定要选择好元器件,尤其是电阻电容的数值。
2、STM32处理器和595移位寄存器的焊接一定要小心。
3、软件的调试要结合硬件工具,最好能有万用表和示波器。</span></p>
<h2>演示视频</h2>
<p><span style="color:#999AAA">参考附件。</span></p>
<h2>其它附件上传</h2>
<p><span style="color:#999AAA">程序参考附件。
</span></p>
-
温湿度仪介绍.mp4
-
作品演示.mp4
-
制作心得.mp4
评论(0)