描述
<p><div class="document">
<h3>1、项目功能介绍</h3>
<hr />
<p>本项目是一款桌面温湿度核心板,主要功能是实时检测并显示环境中的温度和湿度值。该设备通过使用盛思睿(Sensirion)的SHT40传感器,精准读取环境中的温湿度数据。主控芯片采用STM32G030K6T6,这是一款高性能、低功耗的32位ARM Cortex-M0+微控制器,能够有效处理传感器数据并控制显示模块。</p>
<p><strong>功能特点:</strong></p>
<ul>
<li><strong>温湿度数据采集</strong>:利用SHT40传感器,通过I2C接口与STM32G030K6T6进行通信,实现高精度的温湿度数据采集。SHT40传感器具备出色的测量精度和稳定性,温度测量范围为-40°C至125°C,湿度测量范围为0%至100% RH。</li>
<li><strong>数据处理和显示</strong>:采集到的温湿度数据通过STM32G030K6T6进行处理,处理后的数据实时显示在共阴极三位数码管上。显示模块采用74HC595移位寄存器控制,节省了GPIO资源并简化了硬件设计。</li>
<li><strong>低功耗设计</strong>:考虑到功耗问题,系统设计了睡眠模式。在未使用时,设备进入低功耗模式,以延长电池寿命。通过按键唤醒系统,触发温湿度数据采集并更新显示。整个电源系统采用两节5号电池供电,提供大约3V的稳定电压。</li>
<li><strong>电源管理</strong>:采用了防反接保护电路和滤波电容,确保电源供电的稳定性和安全性。电源管理模块还包括电池电量检测功能,通过电阻分压电路实现,确保设备在电量不足时及时提示用户更换电池。</li>
<li><strong>系统扩展性</strong>:尽管项目基础功能单一,但设计预留了丰富的接口和扩展空间,开发者可以在此基础上添加更多的功能和传感器模块,如气压传感器、光照传感器等。</li>
</ul>
<p><strong>技术细节:</strong></p>
<ul>
<li><strong>硬件设计</strong>:电路设计采用模块化布局,主控芯片、传感器、显示模块、电源模块分区明确,减少了互相干扰。PCB设计采用双层板结构,优化了走线和元件布局,提高了电路的抗干扰能力和稳定性。</li>
<li><strong>软件实现</strong>:软件部分采用C语言编写,使用STM32CubeMX生成初始化代码,提高了开发效率和代码的可维护性。程序实现包括I2C通信驱动、数据处理算法、数码管显示控制和低功耗管理等模块。软件结构清晰,便于后续维护和功能扩展。</li>
<li><strong>调试与验证</strong>:在开发过程中,采用了多种调试方法,包括串口打印调试、示波器波形观测等,确保各个功能模块的可靠性和准确性。通过实物测试验证,设备在不同环境下的温湿度测量结果准确,显示稳定。</li>
</ul>
<p>通过以上功能和技术细节的介绍,可以看出本项目在硬件设计和软件实现上都具有较高的完整性和可扩展性,是一款实用且易于复刻的桌面温湿度检测仪。</p>
<p> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">2、开源协议</h3>
<hr class="horizontal-splitline normal-bold-2" />
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">开源协议:Public Domain:<a href="<a href="https://creativecommons.org/share-your-work/public-domain/" target="_blank">https://creativecommons.org/share-your-work/public-domain/</a>" target="_blank" rel="noopener"><a href="https://creativecommons.org/share-your-work/public-domain/</a></p" target="_blank">https://creativecommons.org/share-your-work/public-domain/</a></p</a>>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3>3、硬件部分</h3>
<hr />
<p>硬件部分包括以下几个主要模块及其详细设计方法、设计规范和资源配置:</p>
<p><strong>传感器模块</strong></p>
<ul>
<li><strong>温湿度传感器(SHT40)</strong>:</li>
<ul>
<li><strong>功能</strong>:SHT40传感器是用于检测环境中的温度和湿度的高精度传感器。它采用CMOSens®技术,集成温湿度传感单元和信号处理单元,具有优异的测量精度和长期稳定性。</li>
<li><strong>技术参数</strong>:温度测量范围为-40°C至125°C,湿度测量范围为0%至100% RH。典型的温度精度为±0.2°C,湿度精度为±1.8% RH。</li>
<li><strong>接口</strong>:SHT40通过I2C接口与主控芯片STM32G030K6T6通信,I2C接口速度可达1 MHz。传感器引脚通过上拉电阻连接到I2C总线上,确保通信稳定。I2C地址通过硬件配置,支持多个传感器并联使用。</li>
</ul>
</ul>
<p><strong>处理器模块</strong></p>
<ul>
<li><strong>主控芯片(STM32G030K6T6)</strong>:</li>
<ul>
<li><strong>功能</strong>:主控芯片负责处理来自传感器的数据,控制显示模块,管理设备的工作状态,并提供低功耗管理功能。</li>
<li><strong>技术参数</strong>:STM32G030K6T6是基于ARM Cortex-M0+内核的微控制器,最高主频为64 MHz,拥有32 KB的Flash存储和8 KB的SRAM。芯片集成丰富的外设接口,包括I2C、SPI、UART、ADC、GPIO等。</li>
<li><strong>外围电路</strong>:包括电源滤波电容(典型值为100nF和10uF),复位电路(通过上拉电阻和电容构成),以及32.768 kHz的外部晶振用于RTC(实时时钟)功能。时钟电路包括8 MHz的主晶振和相关负载电容。</li>
</ul>
</ul>
<p><strong>显示模块</strong></p>
<ul>
<li><strong>数码管显示(共阴极三位数码管)</strong>:</li>
<ul>
<li><strong>功能</strong>:显示实时的温度和湿度数据,采用共阴极设计,便于控制和节省资源。</li>
<li><strong>驱动电路</strong>:通过74HC595移位寄存器驱动数码管。74HC595是8位串行输入并行输出的移位寄存器,每个寄存器通过串行数据输入控制一个数码管段。多个74HC595级联使用,节省主控芯片的GPIO资源。移位寄存器的时钟、数据和锁存信号分别连接到STM32G030K6T6的GPIO引脚。</li>
<li><strong>电阻配置</strong>:每个数码管段连接适当的限流电阻(典型值为220欧姆),以保护数码管并确保显示亮度均匀。</li>
</ul>
</ul>
<p><strong>电源模块</strong></p>
<ul>
<li><strong>电源供应</strong>:</li>
<ul>
<li><strong>设计</strong>:使用两节5号电池串联供电,输出电压约为3V。电池盒设计确保电池更换方便且接触良好。</li>
<li><strong>电源管理</strong>:包括防反接保护电路,使用肖特基二极管防止电池接反对电路造成损坏。滤波电容(如100uF和1uF)用于平滑电源电压,防止电源波动对系统造成影响。</li>
<li><strong>电池电量检测</strong>:通过电阻分压器将电池电压降至合适范围,接入STM32G030K6T6的ADC通道进行检测。典型电阻值选择为100k欧姆和10k欧姆,通过公式计算实际电压。</li>
</ul>
</ul>
<p><strong>接口与调试</strong></p>
<ul>
<li><strong>调试接口(SWD接口)</strong>:</li>
<ul>
<li><strong>功能</strong>:提供程序调试和下载功能,便于开发过程中进行代码调试和系统调试。</li>
<li><strong>设计</strong>:预留标准的SWD调试接口,包括SWDIO、SWCLK、GND和VCC引脚,方便连接调试器(如ST-LINK)。</li>
</ul>
<li><strong>按键模块</strong>:</li>
<ul>
<li><strong>功能</strong>:用户通过按键实现设备的唤醒和操作功能,简单便捷。</li>
<li><strong>去抖设计</strong>:按键输入通过硬件去抖电路实现,典型配置为一个10k欧姆的上拉电阻和一个100nF的去抖电容,确保按键输入的可靠性。</li>
</ul>
</ul>
<p><strong>PCB设计</strong></p>
<ul>
<li><strong>布局和走线</strong>:</li>
<ul>
<li><strong>设计原则</strong>:采用模块化布局设计,将主控芯片、传感器、显示模块和电源模块分区布局,减少相互干扰,确保电路稳定性。</li>
<li><strong>双层板结构</strong>:采用双层PCB设计,上层主要布置信号线和元器件,下层布置电源和接地线,提高电路抗干扰能力和稳定性。</li>
<li><strong>散热和防护</strong>:合理安排元件布局,确保主控芯片和传感器的良好散热。对电源和信号线进行必要的防护处理,防止静电和外界电磁干扰。</li>
</ul>
</ul>
<p><strong>其他</strong></p>
<ul>
<li><strong>LED指示</strong>:</li>
<ul>
<li><strong>功能</strong>:LED指示灯用于显示设备的工作状态和调试信息,便于用户和开发者直观了解设备状态。</li>
<li><strong>设计</strong>:采用高亮度LED,通过限流电阻(典型值为330欧姆)连接到主控芯片的GPIO引脚,实现状态指示和调试功能。</li>
</ul>
</ul>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">项目的详细电路设计、实现原理和调试方法将在嘉立创EDA上传的设计文件中详细说明,包括原理图、PCB设计文件及相关文档,便于其他开发者参考和复刻。通过上述硬件设计,本项目在功能性、稳定性和可维护性方面均达到了较高的水平,确保设备在实际使用中的可靠性和易用性。</h3>
<p>原理图如下:</p>
<p><img src="//image.lceda.cn/pullimage/W1CQtyHnvQon8TwuS9djN4V6EBxIg0RbxkAO77Nh.png" alt="原理图" width="1190" height="845" />PCB如下:</p>
<p><img src="//image.lceda.cn/pullimage/6RlTYY04RUX9Xdmr5FVvXBrwX0J0mkGcbE7NJSsD.png" alt="PCB图" width="931" height="558" />3D预览图:</p>
<p><img src="//image.lceda.cn/pullimage/3jnA4iRdTetgXi00jblZEdeRkZ7fWfYEd0wO627Z.png" alt="" width="1363" height="703" /></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;">硬件实物:</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"><img src="//image.lceda.cn/oshwhub/8c7d88e19425487e8c070698a7460021.jpg" alt="" width="1701" height="957" /></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">4、软件部分</h3>
<hr class="horizontal-splitline normal-bold-2" />
<h4>软件架构</h4>
<p>本项目的软件部分由多个功能模块组成,包括数据读取、数据处理、数据存储、显示控制、低功耗管理和用户交互等模块。每个模块各司其职,确保系统功能的完整性和稳定性。以下是各模块的详细说明及其实现方法。</p>
<h4>数据读取模块</h4>
<ul>
<li><strong>功能</strong>:实现从SHT40温湿度传感器读取温度和湿度数据。</li>
<li><strong>实现方法</strong>:
<ul>
<li>使用STM32G030K6T6的I2C接口与SHT40传感器通信。</li>
<li>配置I2C的速度为100 kHz,确保通信稳定。</li>
<li>通过I2C读取传感器的温度和湿度寄存器,并进行数据转换。</li>
<li>使用定时器定期触发数据读取,实现实时监测。</li>
</ul>
</li>
</ul>
<p>示例代码:</p>
<p><code>c</p> <p>#include "i2c.h"<br />#include "sht40.h"</p> <p>void Read_SHT40_Data(void) {<br />&nbsp; &nbsp; uint8_t temp_data[6];<br />&nbsp; &nbsp; float temperature, humidity;</p> <p>&nbsp; &nbsp; I2C_Read(SHT40_ADDRESS, SHT40_TEMP_HUM_CMD, temp_data, 6);<br />&nbsp; &nbsp; temperature = Convert_Temperature(temp_data);<br />&nbsp; &nbsp; humidity = Convert_Humidity(temp_data);<br />}</p> <p></code></p>
<h4>数据处理模块</h4>
<ul>
<li><strong>功能</strong>:对读取的温湿度数据进行处理和格式化。</li>
<li><strong>实现方法</strong>:
<ul>
<li>将原始数据进行线性转换,得到实际的温度和湿度值。</li>
<li>对数据进行过滤处理,去除噪声,得到平滑的测量结果。</li>
<li>数据处理后将结果存储在全局变量中,供显示和存储模块使用。</li>
</ul>
</li>
</ul>
<p>示例代码:</p>
<p><code>c</p> <p>float Convert_Temperature(uint8_t *data) {<br />&nbsp; &nbsp; uint16_t raw_temp = (data[0] &lt;&lt; 8) | data[1];<br />&nbsp; &nbsp; return (raw_temp * 175.0 / 65535.0 - 45.0);<br />}</p> <p>float Convert_Humidity(uint8_t *data) {<br />&nbsp; &nbsp; uint16_t raw_hum = (data[3] &lt;&lt; 8) | data[4];<br />&nbsp; &nbsp; return (raw_hum * 100.0 / 65535.0);<br />}</p> <p></code></p>
<h4>数据存储模块</h4>
<ul>
<li><strong>功能</strong>:将处理后的温湿度数据存储到EEPROM中,便于后续分析。</li>
<li><strong>实现方法</strong>:
<ul>
<li>使用STM32G030K6T6的I2C接口与外部EEPROM通信。</li>
<li>定期将处理后的温湿度数据写入EEPROM,记录环境变化。</li>
<li>数据存储采用循环存储方式,防止EEPROM存储溢出。</li>
</ul>
</li>
</ul>
<p>示例代码:</p>
<p><code>c</p> <p>#include "eeprom.h"</p> <p>void Store_Data_To_EEPROM(float temperature, float humidity) {<br />&nbsp; &nbsp; static uint16_t addr = 0;<br />&nbsp; &nbsp; EEPROM_Write(addr, (uint8_t*)&amp;temperature, sizeof(float));<br />&nbsp; &nbsp; addr += sizeof(float);<br />&nbsp; &nbsp; EEPROM_Write(addr, (uint8_t*)&amp;humidity, sizeof(float));<br />&nbsp; &nbsp; addr += sizeof(float);</p> <p>&nbsp; &nbsp; if (addr &gt;= EEPROM_SIZE) {<br />&nbsp; &nbsp; &nbsp; &nbsp; addr = 0; &nbsp;// 循环存储<br />&nbsp; &nbsp; }<br />}</p> <p></code></p>
<h4>显示模块</h4>
<ul>
<li><strong>功能</strong>:将处理后的温湿度数据通过数码管显示。</li>
<li><strong>实现方法</strong>:
<ul>
<li>使用74HC595移位寄存器控制数码管的显示。</li>
<li>通过SPI接口与74HC595通信,更新显示数据。</li>
<li>显示刷新采用定时器中断驱动,确保显示稳定。</li>
</ul>
</li>
</ul>
<p>示例代码:</p>
<p><code>c</p> <p>#include "spi.h"<br />#include "display.h"</p> <p>void Update_Display(float temperature, float humidity) {<br />&nbsp; &nbsp; uint8_t display_data[4];<br />&nbsp; &nbsp; Convert_To_Display_Format(temperature, humidity, display_data);</p> <p>&nbsp; &nbsp; SPI_Write(DISPLAY_SPI, display_data, 4);<br />}</p> <p>void TIM_IRQHandler(void) {<br />&nbsp; &nbsp; if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {<br />&nbsp; &nbsp; &nbsp; &nbsp; TIM_ClearITPendingBit(TIM2, TIM_IT_Update);<br />&nbsp; &nbsp; &nbsp; &nbsp; Update_Display(current_temperature, current_humidity);<br />&nbsp; &nbsp; }<br />}</p> <p></code></p>
<h4>低功耗管理模块</h4>
<ul>
<li><strong>功能</strong>:管理系统的低功耗模式,延长电池使用寿命。</li>
<li><strong>实现方法</strong>:
<ul>
<li>使用STM32G030K6T6的低功耗模式,包括睡眠模式和停止模式。</li>
<li>系统默认进入睡眠模式,通过按键中断唤醒进行数据采集和显示。</li>
<li>配置RTC定时唤醒,实现定时数据采集。</li>
</ul>
</li>
</ul>
<p>示例代码:</p>
<p><code>c</p> <p>void Enter_Low_Power_Mode(void) {<br />&nbsp; &nbsp; HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);<br />}</p> <p>void EXTI0_IRQHandler(void) {<br />&nbsp; &nbsp; if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0) != RESET) {<br />&nbsp; &nbsp; &nbsp; &nbsp; __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);<br />&nbsp; &nbsp; &nbsp; &nbsp; HAL_PWR_DisableSleepOnExit();<br />&nbsp; &nbsp; }<br />}</p> <p></code></p>
<h4>用户交互模块</h4>
<ul>
<li><strong>功能</strong>:实现用户通过按键与系统进行交互,控制设备的工作状态。</li>
<li><strong>实现方法</strong>:
<ul>
<li>配置按键中断,响应用户的按键操作。</li>
<li>按键短按实现设备的唤醒和数据采集,长按实现系统设置。</li>
<li>用户交互状态通过LED指示灯显示,方便用户了解设备状态。</li>
</ul>
</li>
</ul>
<p>示例代码:</p>
<p><code>c</p> <p>void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {<br />&nbsp; &nbsp; if (GPIO_Pin == GPIO_PIN_0) {<br />&nbsp; &nbsp; &nbsp; &nbsp; if (HAL_GetTick() - last_press_time &gt; LONG_PRESS_THRESHOLD) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 长按操作<br />&nbsp; &nbsp; &nbsp; &nbsp; } else {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 短按操作<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; last_press_time = HAL_GetTick();<br />&nbsp; &nbsp; }<br />}</p> <p></code></p>
<p>以上是本项目软件部分的详细说明。软件设计遵循模块化、可维护性和低功耗的原则,通过STM32CubeMX生成初始化代码,并在此基础上进行功能开发。项目代码将在嘉立创EDA平台上开源,包含详细的源码、注释和使用说明,便于其他开发者参考和复刻。</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">5、BOM清单</h3>
<hr class="horizontal-splitline normal-bold-2" />
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">项目涉及的BOM清单将在嘉立创EDA上传设计文件后自动生成,具体内容和形式应以表达清楚项目构成为准。</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">6、大赛LOGO验证</h3>
<hr class="horizontal-splitline normal-bold-2" />
<p style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;"><img src="//image.lceda.cn/pullimage/FLLXVX80Iba35rBMUpgiwddW9cBVJJ7uUWLhjoHy.png" alt="" /></span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">7、温湿度核心板制成视频</h3>
<hr class="horizontal-splitline normal-bold-2" />
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
</div></p>
评论(0)