描述
<h1>1.介绍</h1>
<p>在日常生活的各种场景中,适当的温湿度环境对于人的舒适感、工作效率以及设备维护非常重要。然而,传统温湿度计常常面临测量不准和频繁更换电池的问题,既不便捷也不环保。</p>
<p>为了解决这些问题,我设计了一款兼具低功耗、高精度和低成本的桌面温湿度计。款产品的核心优势在于它巧妙地平衡了性能与成本,提供一个既实用又环保的温湿度解决方案。它具有以下特点:</p>
<ol>
<li>
<p><strong>低功耗</strong>:使用STM32F103C8T6作为MCU,大幅度降低能耗,延长单次充电后的使用时间。</p>
</li>
<li>
<p><strong>高精度测量</strong>:采用瑞士盛思锐SHT40温湿度传感器,以确保在广泛的温度和湿度范围内提供准确且稳定的数据。</p>
</li>
<li>
<p><strong>可充电</strong>:使用锂电池作为电源,避免频繁更换电池带来的不便,同时减少废旧电池对环境的污染。</p>
</li>
</ol>
<h1>2.硬件部分</h1>
<h2>2.1电源部分</h2>
<p><strong>设计思路</strong>
使用锂电池进行供电,需要设计充放电电路和升压,稳压电路。经过选型,采用了TP4054锂电池充放芯片,MT3608,MT2492两个DC-DC芯片进行锂电池升压至4.7V与降压至3.3V。</p>
<p><img src="//image.lceda.cn/oshwhub/3a3316ed7ae24d4193a442e85ea4f29d.png" alt="屏幕截图 2024-07-23 155041.png"></p>
<p><img src="//image.lceda.cn/oshwhub/7ae85329ea3b418da0ee7e0df05c8e94.png" alt="屏幕截图 2024-07-23 155048.png"></p>
<p><img src="//image.lceda.cn/oshwhub/fe43915511944b2e9b5fc1d4b0706a3c.png" alt="屏幕截图 2024-07-23 155056.png">
在电池升压的电路中,EN引脚由一个三极管控制,当由外接电源时,芯片不使能,但由于芯片不使能是输出仍有电池的电压,所以使用了一个场效应管来控制BAT5V的通断,同时接入二极管防止倒灌,保险丝防止短路,总开关来控制电源通断。</p>
<p><img src="//image.lceda.cn/oshwhub/9369af4157674ddaa0a6f2b37fb2c62b.png" alt="屏幕截图 2024-07-23 155827.png"></p>
<p>经过测试,电路可以完美的输出3.3v</p>
<h2>2.2温湿度显示单元</h2>
<p>使用了两个共阴极数码管,并使用三个74HC595移位寄存器控制
74HC595的功能框图如下</p>
<p><img src="//image.lceda.cn/oshwhub/5bbb5fa0d9f54a129cde0ee5f8b70c1f.png" alt="efd3040e4f1342809d7c84c93f7fc6d2.png"><br>
使用两个71HC595分别控制数码管的ABCDEFG段,剩下一个71HC595控制SIG段通过三个芯片配合工作从而显示数据。</p>
<h2>2.3 蜂鸣器模块</h2>
<p>选用无源蜂鸣器,由于单片机的驱动能力不强,为了提高蜂鸣器的响度,选用了一个三极管放大电流同时放置了一个二极管保护蜂鸣器。</p>
<p><img src="//image.lceda.cn/oshwhub/c702fa2cbfa74b389d415b2e8c66fdc8.png" alt="屏幕截图 2024-07-23 161131.png"></p>
<h2>2.4 传感器电路设计</h2>
<p>查看芯片手册,发现芯片需要的一个100nf去耦电容已集成,i2c总线需要上拉,手册中给的是10k上拉,固采用10K而不是教程上的4.7K。</p>
<p><img src="//image.lceda.cn/oshwhub/e2f98b6e6ac44457bd7973f522da967a.png" alt="屏幕截图 2024-07-23 162015.png"></p>
<h2>2.5 layout部分</h2>
<p>对于电源部分的所有电阻与电容采用了0603封装统一放置在背面方便加热台焊接,正面放置主控与数码管,蜂鸣器等比较好焊接的器件。</p>
<h2>2.6 外壳</h2>
<p>绘制了上下盖板,使用M2.5铜柱连接</p>
<p><img src="//image.lceda.cn/oshwhub/85efa14657584724aab333757b59b75b.png" alt="屏幕截图 2024-07-23 173023.png"></p>
<h1>3. 软件部分</h1>
<p>使用hal库进行开发,主逻辑如下</p>
<pre><code class="language-c"> while (1)
{
if(flash == 1){ //在触发TIM2中断或按键中断时进行更新温湿度
get_data_task();
Temp = get_temp()*10;
Humi = get_hum()*10;
flash = 0;
}
if(state == 0){ // 显示温湿度,当state为1时关闭显示
ShowNum(1,1,Temp/100);
ShowNum(1,2,Temp/ 10 % 10);
ShowNum(1,3,Temp%10);
ShowNum(2,1,Humi/100);
ShowNum(2,2,Humi/ 10 % 10);
ShowNum(2,3,Humi%10);
}
if(Humi / 10 > 80 || Temp / 10 >35){ //温湿度超过阈值时使能蜂鸣器报警
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);
delay_us(200);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET);
delay_us(500);
}</code></pre>
<p>与传感器通讯的代码如下,使用硬件i2c</p>
<pre><code class="language-c">void get_data_task(void)
{
HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)SHT40_Write, (uint8_t *)writeData, 1, HAL_MAX_DELAY);
HAL_Delay(10);
HAL_I2C_Master_Receive(&hi2c1, (uint16_t)SHT40_Read, (uint8_t *)readData, 6, HAL_MAX_DELAY);
Temperature = (1.0 * 175 * (readData[0] * 256 + readData[1])) / 65535.0 - 45;
Humidity = (1.0 * 125 * (readData[3] * 256 + readData[4])) / 65535.0 - 6.0;
Temp = (uint16_t)(Temperature * 10);
Humi = (uint16_t)(Humidity * 10);
}</code></pre>
<h1>4. 项目属性</h1>
<p>此项目为首次公开,在温湿度检测仪训练营官方原理图上增加了锂电池充放电电路与蜂鸣器,并更换了主控。</p>
<h1>5.实物图</h1>
<p><img src="//image.lceda.cn/oshwhub/847f9fc3d74a4d8d82e90433a2e6d0c7.jpg" alt="微信图片_20240723173410.jpg"></p>
<p><img src="//image.lceda.cn/oshwhub/6fd064062eea44f7833bda457e67b494.jpg" alt="微信图片_20240725131707.jpg">
<img src="//image.lceda.cn/oshwhub/48e14c4cb5a345c096866be6998982a5.jpg" alt="微信图片_20240723173402.jpg"></p>
评论(0)