描述
<div>
<p style="line-height:1.8">注:* 为必填项</p>
<p style="line-height:1.8"><strong><span style="color:#0093e6">请在报名阶段填写 ↓</span></strong></p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">* 1、项目功能介绍</h3>
<hr>
<p>这个基于STM32G030K6T6的桌面温湿度检测装置是一款小型的电子设备,用于监测和显示环境中的温度和湿度。它适用于家用、办公环境等多种场景。以下是对该装置的详细介绍:</p>
<p>装置组成</p>
<p>1.STM32G030K6T6微控制器<br> - 负责装置的核心控制和数据处理。<br> - 具有低功耗、高性能的特点,适用于小型嵌入式应用。</p>
<p>2. SHT40温湿度传感器<br> - 用于测量环境中的温度和湿度。<br> - 具有高精度和快速响应时间。</p>
<p>3. OLED显示屏<br> - 显示实时的温度和湿度数据。<br> - 采用I2C接口,低功耗,适合小型设备。</p>
<p>4. 电源管理<br> - 使用AMS1117-3.3稳压器,将5V电压转换为3.3V,提供给系统各部分使用。<br> - 通常通过USB接口供电,方便连接和使用。</p>
<p>5. 调试接口<br> - SWD接口用于程序的下载和调试,方便开发和维护。</p>
<p>功能描述</p>
<p>1. 实时监测温湿度<br> - 通过SHT40传感器实时采集环境中的温度和湿度数据。<br> - 数据采集频率可根据实际需求进行配置。</p>
<p>2. 数据处理<br> - STM32G030K6T6微控制器接收并处理传感器数据。<br> - 对原始数据进行转换,得到实际的温度和湿度值。</p>
<p>3. 数据显示<br> - 通过OLED显示屏显示实时的温度和湿度值。<br> - 显示界面简洁明了,易于阅读。</p>
<p>4. 低功耗设计<br> - 采用低功耗的元器件,延长设备的使用时间。<br> - 适合长时间持续监测的应用场景。</p>
<p>工作原理</p>
<p>1. 电源管理<br> - 通过两节5号电池供电,方便快捷<br> <br>2. 初始化<br> - 上电后,STM32G030K6T6初始化I2C总线和其他外设。<br> - 配置并初始化SHT40传感器和OLED显示屏。</p>
<p>3. 数据采集和处理<br> - 定期从SHT40传感器读取温度和湿度原始数据。<br> - 将原始数据转换为实际的温度和湿度值。</p>
<p>4. 数据展示<br> - 将处理后的数据在OLED显示屏上显示。<br> - 显示内容包括当前的温度和湿度值。</p>
<p> 使用方法</p>
<p>1. 连接电源<br> - 装入5号电池两节,提供电源。<br> <br>2. 查看数据<br> - 设备启动后,OLED显示屏上会显示当前的温度和湿度数据。<br> - 数据实时更新,用户可以随时查看环境的温湿度情况。</p>
<p>应用场景</p>
<p>1. 家庭环境监测<br> - 用于监测家庭室内的温度和湿度,帮助用户保持舒适的居住环境。</p>
<p>2. 办公环境监测<br> - 在办公室放置该装置,帮助监测办公环境的温湿度,提升工作舒适度。</p>
<p>3. 实验室环境监测<br> - 用于实验室环境的温湿度监测,确保实验条件的稳定性。</p>
<p>4. 绿色农业<br> - 监测温室中的温湿度,帮助调控植物生长环境。</p>
<p> 装置优势</p>
<p>1. 小巧便携<br> - 设备体积小,易于摆放在桌面或其他平面上。<br> <br>2. 高精度<br> - 采用高精度的SHT40传感器,确保数据的准确性。</p>
<p>3. 实时显示<br> - 实时更新和显示温湿度数据,用户可以随时查看。</p>
<p>4. 低功耗<br> - 设计注重低功耗,适合长时间持续运行。</p>
<p>这个基于STM32G030K6T6的桌面温湿度检测装置是一款实用的环境监测设备,能够帮助用户随时了解环境的温度和湿度情况,从而提升生活和工作环境的舒适度。</p>
<h3 style="line-height:1.8">*2、项目属性</h3>
<hr>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">首次公开,无获奖</span></p>
<p style="line-height:1.8">首次公开,原创,无获奖</p>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">注:请说明项目是否首次公开;项目是否为原创;项目是否曾经在其他比赛中获奖,若有获奖则叙述获奖详情;项目是否在学校参加过答辩。</span></p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">* 3、开源协议</h3>
<hr>
<p style="line-height:1.8">GPL3.0开源协议</p>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">注:利他即利己,请认真阅读下述内容。</span></p>
<ol style="line-height:1.8">
<li style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">拥抱开源,赋予项目无限价值。建议项目核心功能开源80%以上;</span></li>
<li style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">2、若某一部分功能不可替代且删掉之后项目无法解决对应的问题,则这一部分实现的功能就是项目的核心功能;比如设计了一台电子负载且设计了一款上位机软件监控功率变化,则电子负载为核心功能,上位机软件为辅助功能;比如电子负载中使用了一款隔离485模块与上位机通信,则此485模块实现的通讯功能为辅助功能; </span></li>
<li style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">项目应选择适合自己的<span style="text-decoration:underline"><a href="/posts/98fdb2accd754af7b51990790db3b47a" target="_blank">开源协议</a></span>,若项目引用其他开源项目,应注明来源并遵循原作者的开源协议规定;原创项目推荐使用GPL3.0开源协议;</span></li>
<li style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">直接引用开源项目的原电路或原代码实现的功能不可作为自己项目的核心功能、使用市场上通用模块直接实现的功能不可作为自己项目的核心功能。</span></li>
</ol>
<p style="line-height:1.8"> </p>
<p style="line-height:1.8"><strong><span style="color:#0093e6">请在竞赛阶段填写 ↓</span></strong></p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">*4、硬件部分</h3>
<hr>
<h3>硬件选择</h3>
<ol>
<li><strong>微控制器</strong>: STM32G030K6T6</li>
<li><strong>温湿度传感器</strong>: SHT40</li>
<li><strong>电源管理</strong>: 两节5号电池</li>
<li><strong>通信接口</strong>: I2C接口</li>
<li><strong>显示器</strong>: 小型OLED显示屏(例如SSD1306)</li>
<li><strong>调试接口</strong>: SWD调试接口</li>
<li><strong>其他</strong>: 去耦电容、上拉电阻等。</li>
</ol>
<h3>电路设计</h3>
<h4>1. 微控制器</h4>
<ul>
<li>STM32G030K6T6核心电路</li>
<li>供电:3.3V</li>
<li>复位电路:一个10kΩ电阻和一个100nF电容</li>
</ul>
<h4>2. 温湿度传感器(SHT40)</h4>
<ul>
<li>连接I2C接口(SCL和SDA)</li>
<li>供电:3.3V</li>
<li>上拉电阻:两个4.7kΩ电阻分别连接SCL和SDA引脚</li>
</ul>
<h4>3. 电源管理</h4>
<ul>
<li>输入电压:5V</li>
<li>输出电压:3.3V,给STM32和传感器供电</li>
</ul>
<h4>4. 显示器(OLED)</h4>
<ul>
<li>连接I2C接口(与SHT40共用SCL和SDA)</li>
<li>供电:3.3V</li>
</ul>
<h4>5. 调试接口</h4>
<ul>
<li>SWD接口(SWDIO、SWCLK、GND、3.3V)</li>
</ul>
<p style="line-height:1.8"> </p>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px"> 注:请前往<span style="text-decoration:underline"><a href="https://lceda.cn/editor" target="_blank">嘉立创EDA</a> </span>生成/上传设计文件,文件完成后,相关文稿将自动生成至项目详情;这里可以详细说明您的项目实现原理和机制、注意事项、调试方法、测试方法等。推荐图文并茂的形式向别人介绍您的想法。 </span></p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">*5、软件部分</h3>
<hr>
<h3>程序说明</h3>
<ol>
<li>
<p><strong>I2C总线初始化</strong></p>
<ul>
<li><code>I2C1_Init()</code>函数初始化I2C1接口,配置了GPIO引脚和I2C参数。</li>
<li><code>RCC_APB1PeriphClockCmd</code>和<code>RCC_APB2PeriphClockCmd</code>函数使能I2C1和GPIOB的时钟。</li>
<li>配置GPIOB的PB6(SCL)和PB7(SDA)引脚为开漏输出模式,速度50MHz。</li>
<li>配置I2C1为I2C模式,时钟速度为100kHz,启用ACK,应答地址为7位。</li>
</ul>
</li>
<li>
<p><strong>发送数据到SHT40</strong></p>
<ul>
<li><code>SHT40_WriteByte()</code>函数发送一个字节数据到SHT40传感器。</li>
<li>通过I2C协议发送数据,包括开始信号、设备地址、数据字节和停止信号。</li>
</ul>
</li>
<li>
<p><strong>读取SHT40的数据</strong></p>
<ul>
<li><code>SHT40_ReadData()</code>函数读取SHT40传感器的原始数据。</li>
<li>通过I2C协议接收数据,包括开始信号、设备地址、两个数据字节和停止信号。</li>
</ul>
</li>
<li>
<p><strong>主函数</strong></p>
<ul>
<li><code>main()</code>函数初始化I2C1总线,并读取SHT40的温度和湿度数据。</li>
<li>读取到的原始数据需要根据SHT40手册进行转换计算。</li>
<li>这里假设有显示函数来显示温度和湿度数据。</li>
</ul>
</li>
</ol>
<h3>改进建议</h3>
<p><strong>数据转换</strong></p>
<ul>
<li>需要根据SHT40的手册进行温度和湿度的转换计算,手册上会有具体的公式。</li>
</ul>
<div>
<div><code><span>// 假设这里读取到的数据是原始数据,需要进行转换计算</span>
</code></div>
<div><code><span>float</span> temperature = <span>-45</span> + <span>175</span> * ((<span>float</span>)rawData / <span>65535</span>);
</code></div>
<div><code><span>float</span> humidity = <span>100</span> * ((<span>float</span>)rawData / <span>65535</span>);
</code></div>
</div>
<ol>
<li>
<p><strong>错误处理</strong></p>
<ul>
<li>需要增加错误处理机制,例如超时处理、NACK处理等。</li>
</ul>
</li>
<li>
<p><strong>封装I2C通信</strong></p>
<ul>
<li>可以将I2C通信相关的操作封装成独立的函数,提高代码的可读性和复用性。</li>
</ul>
</li>
<li>
<p><strong>低功耗处理</strong></p>
<ul>
<li>如果需要,可以增加低功耗处理,例如在不需要通信时关闭I2C时钟等。</li>
</ul>
</li>
<li>
<p><strong>调试信息</strong></p>
<ul>
<li>可以增加调试信息输出,帮助调试和定位问题。</li>
</ul>
</li>
</ol>
<p>以下是一个包含数据转换和错误处理的示例:</p>
<div>
<div><code><span>#<span>include</span> <span>"stm32f10x.h"</span> <span>// 根据实际芯片型号选择对应的头文件</span></span>
</code></div>
<div><code><span>#<span>define</span> SHT40_I2C_ADDR 0x70</span>
</code></div>
<div><code><span>void</span> <span>I2C1_Init</span><span>(<span>void</span>)</span> </code></div>
<div><code>{
</code><code> RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
</code></div>
<div><code> RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
</code></div>
<div><code> GPIO_InitTypeDef GPIO_InitStruct;
</code></div>
<div><code> GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
</code></div>
<div><code> GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD; <span>// 开漏输出</span>
</code></div>
<div><code> GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
</code></div>
<div><code> GPIO_Init(GPIOB, &GPIO_InitStruct);
</code></div>
<div><code> I2C_InitTypeDef I2C_InitStruct;
</code></div>
<div><code> I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
</code></div>
<div><code> I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
</code></div>
<div><code> I2C_InitStruct.I2C_OwnAddress1 = <span>0x00</span>; <span>// 主模式下不需要</span>
</code></div>
<div><code> I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStruct.I2C_ClockSpeed = <span>100000</span>; <span>// 100kHz</span>
</code></div>
<div><code> I2C_Init(I2C1, &I2C_InitStruct);
</code></div>
<div><code> I2C_Cmd(I2C1, ENABLE);
</code></div>
<div><code>}
<span>int</span> <span>I2C1_WriteByte</span><span>(<span>uint8_t</span> address, <span>uint8_t</span> data)</span> </code></div>
<div><code>{
<span>while</span> (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
</code></div>
<div><code> I2C_GenerateSTART(I2C1, ENABLE);
</code></div>
<div><code> <span>if</span> (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT))
<span>return</span> <span>-1</span>;
</code></div>
<div><code> I2C_Send7bitAddress(I2C1, address, I2C_Direction_Transmitter);
</code></div>
<div><code> <span>if</span> (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
<span>return</span> <span>-1</span>;
</code></div>
<div><code> I2C_SendData(I2C1, data);</code></div>
<div><code> <span>if</span> (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
<span>return</span> <span>-1</span>;
</code></div>
<div><code> I2C_GenerateSTOP(I2C1, ENABLE);
</code></div>
<div><code> <span>return</span> <span>0</span>;
</code></div>
<div><code>}</code></div>
<div><code><span>int</span> <span>I2C1_ReadData</span><span>(<span>uint8_t</span> address, <span>uint16_t</span> *data)</span> </code></div>
<div><code>{
<span>while</span> (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
</code></div>
<div><code> I2C_GenerateSTART(I2C1, ENABLE);</code></div>
<div><code> <span>if</span> (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT))
<span>return</span> <span>-1</span>;
</code></div>
<div><code> I2C_Send7bitAddress(I2C1, address, I2C_Direction_Receiver);
</code></div>
<div><code> <span>if</span> (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
<span>return</span> <span>-1</span>;
</code></div>
<div><code> <span>while</span> (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
</code></div>
<div><code> *data = I2C_ReceiveData(I2C1) << <span>8</span>;
</code></div>
<div><code> <span>while</span> (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
</code></div>
<div><code> *data |= I2C_ReceiveData(I2C1);</code></div>
<div><code> I2C_GenerateSTOP(I2C1, ENABLE);</code></div>
<div><code> <span>return</span> <span>0</span>;
}</code></div>
<div><code><span>int</span> <span>main</span><span>(<span>void</span>)</span></code></div>
<div><code> {
I2C1_Init();</code></div>
<div><code> <span>uint16_t</span> rawData;
</code></div>
<div><code> <span>if</span> (I2C1_ReadData(SHT40_I2C_ADDR, &rawData) == <span>0</span>)</code></div>
<div><code> {
<span>float</span> temperature = <span>-45</span> + <span>175</span> * ((<span>float</span>)rawData / <span>65535</span>);</code></div>
<div><code> <span>float</span> humidity = <span>100</span> * ((<span>float</span>)rawData / <span>65535</span>);
<span>// 显示温度和湿度数据,具体根据数码管驱动进行编写</span>
} </code></div>
<div><code><span>else</span> {
<span>// 处理错误</span>
}</code></div>
<div><code> <span>while</span> (<span>1</span>) {
<span>// 主循环</span>
}
}</code></div>
</div>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">注:若您的项目涉及软件开发,请在附件上传对应的工程源码。这里可以详细说明您的软件流程图、功能模块框图、相关算法的解释或科普、源码结构、编译环境的搭建和配置、源码编译方法、程序烧录方法等。推荐图文并茂的形式向别人介绍您的想法。</span></p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">*6、BOM清单</h3>
<hr>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/d9d84f1a567a4d99b65e9f798625a07e.png"></p>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">注:项目涉及的BOM清单。在<span style="text-decoration:underline"><a href="https://lceda.cn/editor" target="_blank">嘉立创EDA</a> </span>生成/上传设计文件后,BOM将自动生成至项目详情;建议包括型号、品牌、名称、封装、采购渠道、用途等内容。具体内容和形式应以表达清楚项目构成为准。 </span></p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">*7、大赛LOGO验证</h3>
<hr>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/5d55fade01e845ff8d9fa11c34bc0671.png"></p>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">请上传包含大赛logo的项目图片,logo以丝印形式印刷在PCB上面。</span></p>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">点击zip下载大赛logo标识! <span style="text-decoration:underline"><a href="https://image.lceda.cn/easyedaResource/images/d1bbfd69f9404f56901a0e7b849b7245.rar" target="_blank">(大赛标识).zip</a></span></span></p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">* 8、演示您的项目并录制成视频上传</h3>
<hr>
<p style="line-height:1.8"> </p>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">视频要求:请横屏拍摄,分辨率不低于1280×720,格式Mp4/Mov,单个视频大小限100M内;</span></p>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">视频标题:立创电赛:{项目名称}-{视频模块名称};如立创电赛:《自动驾驶》-团队介绍。</span></p>
<p style="line-height:1.8"> </p>
<p style="line-height:1.8"><span style="font-size:14px"><a href="/posts/de460543d4cf4dacb5f0326612455578" target="_blank">前往查看更多详情 ></a></span></p>
<p style="line-height:1.8"> </p>
</div>
评论(0)