描述
<p><h1 style="text-align: center;"><span style="color: #3598db; font-size: 36pt;"><strong>桌面温湿度仪</strong></span></h1> <h3 style="text-align: right;"><span style="color: #3598db; font-size: 14pt;"><strong>————第九届立创电子设计大赛</strong></span></h3> <h2><span style="color: #000000; font-size: 24pt;">目录:</span></h2> <ul> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">1、项目描述</span></strong></span></li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">2、硬件部分</span></strong></span> <ul> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">2.1、电源管理</span></strong></span></li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">2.2、STM32外围电路</span></strong></span></li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">2.3、OLED屏幕显示</span></strong></span></li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">2.4、温度显示</span></strong></span></li> </ul> </li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">3、软件部分</span></strong></span><br /> <ul> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">3.1、OLED屏幕显示程序</span></strong></span></li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">3.2、电池电压显示程序</span></strong></span></li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">3.3、温湿度显示程序</span></strong></span></li> </ul> </li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">4、项目属性</span></strong></span></li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">5、开源协议</span></strong></span></li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">6、大赛LOGO验证</span></strong></span></li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">7、演示视频</span></strong></span></li> <li><span style="font-size: 14pt;"><strong><span style="color: #000000;">8、心得体会</span></strong></span></li> </ul> <p> </p> <h2><span style="font-size: 24pt;"><strong><span style="color: #000000;">1、介绍</span></strong></span></h2> <p><span style="color: #000000; font-size: 14pt;">已经使用了三年立创EDA,也知道有立创大赛这个东西,但是从来没有参加过,偶然的一次就决定报名参加了(其实是有个项目需求拨轮开关,想白嫖)。这次的大赛项目是用盛思锐传感器做桌面温湿度显示仪,按照官方给的例程,在保留原有功能的基础上,稍微做了一点改进。因为SHT40-AD1B传感器有高精度模式,以及STM32G030K6T6芯片的低功耗,完全可以将本项目作为桌面DIY设计。基本功能与改进部分如下:</span></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;"><span style="color: #000000;"><br /></span><span style="color: #000000;">1)温湿度采集:<span style="color: #e03e2d;">盛思锐传感器SHT40-AD1B</span>,是一个高精度、快速且具有多种采样方式的微型温湿度传感器。传感器通过I2C通信,可以通过发送不同命令,选择测量温湿度的不同模式。供电电压范围1.08V~3.6V可以适用于绝大多数控制场合,需要做一些小型化设计时,如果有温度湿度采集需求,可以尝试SHT40-AD1B模块。</span></span></p> <p style="padding-left: 40px;"><span style="color: #000000; font-size: 14pt;">2)温湿度显示:显示使用的是1.3寸的OLED屏幕,共有128*64个像素点,完全满足温湿度以及其他显示需求,可以选择I2C(4针版本)和SPI(7针版本)两种通信方式,开源项目众多,方便实现。</span></p> <p style="padding-left: 40px;"><span style="color: #000000; font-size: 14pt;">3)锂电池充电:官方例程为两节1.5V干电池,这里我改为3.7V锂电池做供电,可以搭配TP4056和micro USB母口完成充电电路,作为一个桌面小摆件,更加实用,同时增加了输入切换电路,可以在锂电池充电时,使用外部输入5V单独供电,不影响锂电池充电。再搭配低压差LDO(RT9193-33GB)实现电压由3.7V到3.3V的转换,而且低压差可以保证电池电压很低的情况下仍可以输出3.3V。</span></p> <p><span style="color: #000000; font-size: 14pt;">项目整体材料在立创商城采购,成本可以控制在<span style="color: #e03e2d;">45元以内</span>(主要是屏幕、电池、传感器较贵)。ps:屏幕、电池等可以与其他项目共用,实际成本为(<span style="color: #3598db;">20元以内</span>)</span></p> <h2><span style="font-size: 24pt;"><strong><span style="color: #000000;">2、硬件部分</span></strong></span></h2> <h3><span style="font-size: 18pt;"><strong><span style="color: #000000;">2.1、电源管理</span></strong></span></h3> <p style="padding-left: 240px;"><strong><span style="color: #000000;"><img src="//image.lceda.cn/pullimage/8nsp97x48h4fgUD89PYB1cf7naYzwccWYWxqucRg.png" alt="" width="467" height="331" /></span></strong></p> <p style="padding-left: 40px;"><span style="color: #000000; font-size: 14pt;">锂电池充电用的<span style="color: #3598db;">TP4056芯片</span>,设计直接copy之前的一个项目,设置最大充电电流为900mA(前提是输入口可以达到),详细的可以参照官方手册。</span></p> <p style="padding-left: 240px;"><img src="//image.lceda.cn/pullimage/vx7Va5eJ13Pvcl1nfYZ36LyANGNArTJF8vNppYTe.png" alt="" width="332" height="198" /><img src="//image.lceda.cn/pullimage/qFck6KrHZNmX1dzFSLBku83ZXTsrBVr5ND8RLYKO.png" alt="" width="310" height="133" /></p> <p style="padding-left: 40px;"><span style="color: #000000; font-size: 14pt;">输入切换是比较常用的<span style="color: #3598db;">PMOS切换电路</span>,①当没有外部5V输入时,D1截止,PMOS导通,BAT给到输出</span></p> <p style="padding-left: 280px;"><span style="color: #000000; font-size: 14pt;"> ②当外部5V输入,此时D1导通,因为Ugs = 5V,PMOS截止,5V给到输出</span></p> <p style="padding-left: 40px;"><span style="color: #000000; font-size: 14pt;">因为MOS是双向的,所以PMOS的体二极管是用来防止5V直接给到BAT,为了保证可以无缝切换,增加了10uF的输出电容。LDO这里不做过多介绍。</span></p> <h3><span style="font-size: 18pt;"><strong><span style="color: #000000;">2.2、STM32外围电路</span></strong></span></h3> <p style="padding-left: 240px;"><strong><span style="color: #000000;"><img src="//image.lceda.cn/pullimage/3PLXTjeG6wGkj3XdDmN1J9i12FusoaiBdSE19v3B.png" alt="" width="612" height="230" /></span></strong></p> <p style="padding-left: 40px;"><span style="color: #000000; font-size: 14pt;">这里STM32G030K6T6的外围电路完全复刻官方提供的原理图,只是对必要管脚做了重新配置,这里没有增加复位按键,而是与官方一致采用了唤醒按键</span></p> <h3><span style="font-size: 18pt;"><strong><span style="color: #000000;">2.3、OLED屏幕显示</span></strong></span></h3> <p style="padding-left: 240px;"><strong><span style="color: #000000;"><img src="//image.lceda.cn/pullimage/0NkoSEhpd92wa1IhKMs9u7JngvZ3Npc8hSNVDeMI.png" alt="" width="272" height="154" /><img src="//image.lceda.cn/pullimage/N7c1GKVUGykDuDUk1RII039leVfvgrR0msQaxOtl.png" alt="" width="274" height="163" /></span></strong></p> <p style="padding-left: 40px;"><span style="color: #000000; font-size: 14pt;">这里的OLED模块选用的SPI通信(7针版本),为什么选呢,因为之前用过,已经写好了显示代码,直接用就可以。这部分还保留了官方的GPIO_TEST_LED,可以在焊接以及调试程序时用这个LED来测试最小系统和代码的功能(类似于添加断点)</span></p> <h3><span style="font-size: 18pt;"><strong><span style="color: #000000;">2.4、温度显示</span></strong></span></h3> <p style="padding-left: 240px;"><strong><img src="//image.lceda.cn/pullimage/xgmGkLQuFUhBke4PZ0zhf3HZ7JIPGvBjf0kjHGbz.png" alt="" width="258" height="218" /><img src="//image.lceda.cn/pullimage/hPkeG1rClLQnr42ShydxntftWbk5CjhvtNvd40Ns.jpeg" alt="" width="258" height="201" /></strong></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;">传感器部分依旧是直接用官方原理图里的,只不过没有听官方的直播,所以在第一次上电时导致传感器反接损坏,在这里感谢群里大佬给标注的模块管脚图</span></p> <h2><span style="font-size: 24pt;">3、软件部分</span></h2> <p><span style="font-size: 18pt;"><strong>3.1、OLED屏幕显示程序</strong></span></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;">显示部分采用7针SPI通信的OLED屏幕,引脚配置为 PA1 ------> OLED_SCL 时钟线</span></p> <p style="padding-left: 480px;"><span style="font-size: 14pt;"> </span><span style="font-size: 18.6667px;">PA2 ------> OLED_SDA 数据线</span></p> <p style="padding-left: 480px;"><span style="font-size: 14pt;"> </span><span style="font-size: 18.6667px;">PA3 ------> OLED_RST 复位</span></p> <p style="padding-left: 480px;"><span style="font-size: 18.6667px;"> PA4 ------> OLED_D/C 数据/命令切换</span></p> <p style="padding-left: 80px;"><img src="//image.lceda.cn/pullimage/qiXQEENkvDn7RQjupw6uqo8oSp8CsEXDlqnlZdvn.png" alt="" width="800" height="361" /><img src="//image.lceda.cn/pullimage/oPtOy5Fix7CNlZsnZWoQtjiXoyF5TPmgXmIBgusY.png" alt="" width="800" height="307" /></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;">由于代码采用HAL库函数编写,SPI通信也为硬件实现,所以不做过多描述,工程文件已经上传附件,C文件内函数功能均有详细注释,需要的朋友可以直接copy</span></p> <p><span style="font-size: 18pt;"><strong>3.2、电池电压显示程序</strong></span></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;">由于电池电压最高可达4.2V,而STM32ADC采样最大电压为3.3V,所以将电池电压通过两个10K电阻分压,接到STM32的PA0管脚,利用STM32的硬件ADC完成电压采样,并读取数据,通过OLED的电池电压显示函数来实现电池电压的显示。程序中将电池电压数值转换成对应的电池小图标(PCtoLCD软件取模)显示。</span></p> <p style="padding-left: 80px;"><span style="font-size: 14pt;"><img src="//image.lceda.cn/pullimage/aAOGjzvSn7ouHdRIDfmU4FkhE9xQl8JCekVwAlKQ.png" alt="" width="800" height="242" /><img style="font-size: 14px;" src="//image.lceda.cn/pullimage/CwI3xIFewM2JlrZHRawyz4UhEErwDOSkOdg0tqea.png" alt="" width="800" height="289" /></span></p> <p><span style="font-size: 18pt;"><strong>3.3、温湿度显示程序</strong></span></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;">由于盛思锐SHT40-AD1B传感器自身的优势,再加上STM32硬件I2C的配合,使得温湿度显示程序非常简单且容易理解,官方手册中就给出了一个的代码段,从官方的代码中就可以了解到如何获取温湿度数据以及如何转换温湿度数据,这里只能说官方想的太周到了。</span></p> <p style="padding-left: 120px;"><img src="//image.lceda.cn/pullimage/ioCCMeaAoefV56jT4Ff9BZlb6IJmJptrlONmfkcT.png" alt="" width="1200" height="479" /></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;">下面是我根据官方这段代码,改写的HAL库代码,也是很简单,发命令、接收数据、再转换数据格式。</span></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;"><img src="//image.lceda.cn/pullimage/e7GND8amS0svaZWdt9wX1EHXG7ZW8cLf9BtPHlu5.png" alt="" width="800" height="227" /><img src="//image.lceda.cn/pullimage/kV3tPlXJyY4YS0AoeDuSjXg8KRTdn5kVtFAG7bpW.png" alt="" width="800" height="363" /></span></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;">如果是自己写代码的话,这里会涉及到C语言的指针传参,以及接受6个字节数据时,数组名直接为数组地址。传感器地址为0X44(这个官方手册也有写,不同型号传感器地址不同),采集模式也有很多种,这里我就选择了精度最高的模式(0XFD),只要保证命令不出错,剩下就没有什么难度了。</span></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;">下图为官方手册模式介绍和地址介绍</span></p> <p style="padding-left: 120px;"><span style="font-size: 14pt;"><img src="//image.lceda.cn/pullimage/2z5AcI68CHUN5AcZvoVCgJTb5ODFp2Hn8OAYBxIy.png" alt="" width="800" height="652" /><img src="//image.lceda.cn/pullimage/BgzuHomcGxHNLJ3y54f3PT5IhO2NbFHcv8AmhXWR.png" alt="" width="800" height="262" /></span></p> <p style="padding-left: 40px;"> </p> <h2><span style="font-size: 24pt;">4、项目属性</span></h2> <p style="padding-left: 40px;"><span style="font-size: 14pt;">首次公开,只用了官方的STM32外围电路以及传感器接口电路,其余电路如锂电池充电、输入切换、OLED屏幕接口等均为新增;PCB为新设计。</span></p> <h2><span style="font-size: 24pt;">5、开源协议</span></h2> <p style="padding-left: 40px;"><span style="color: #3598db; font-size: 14pt;">GPL 3.0</span></p> <h2><span style="font-size: 24pt;">6、大赛LOGO验证</span></h2> <p style="padding-left: 40px;"><span style="font-size: 14pt;">实物外观展示</span></p> <p style="padding-left: 120px;"><img src="//image.lceda.cn/pullimage/jAsQjU8C9IiXtfthi5K7r3q34obrNSiLwTVCqNGn.jpeg" alt="" width="1200" height="814" /></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;">温湿度及电池电量状态显示</span></p> <p style="padding-left: 120px;"><span style="font-size: 14pt;"><img src="//image.lceda.cn/pullimage/8WkMYKRmrxc4OtX46QIbAROtqIaNlTre9A2T0Nno.jpeg" alt="" width="1200" height="842" /></span></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;">待机状态</span></p> <p style="padding-left: 120px;"><span style="font-size: 14pt;"><img src="//image.lceda.cn/pullimage/9Dzc4NWJgAdyMGmuZBKK86yls5XTeMyerl1bUJDo.jpeg" alt="" width="1200" height="823" /></span></p> <h2>7、演示视频</h2> <p style="padding-left: 40px;"><span style="font-size: 14pt;">演示视频见项目附件</span></p> <h2>8、心得体会</h2> <p style="padding-left: 40px;"><span style="font-size: 14pt;"> 第一次参见立创的电子大赛,虽然之前已经做过很多东西,但是这次整体有组织有计划来做的话,仍可以学到很多。和之前不一样的首先是时间上有了合理的安排,必须保证每一步都没有疏漏,否则可能会出现模块反接这种小失误;也是第一次用G030系列芯片和SHT40传感器,也算是接触新东西了,以后做温湿度项目就可以直接copy,SHT40-AD1B要比DHT11小很多,而且手册内容特别齐全,甚至Github还有开源例程,接口充足的话完全可以直接移植。</span></p> <p style="padding-left: 40px;"><span style="font-size: 14pt;"> 最后非常感谢嘉立创平台给的机会,感谢群里小伙伴的帮助,以后多多参加,白嫖更多好项目。如果有该项目相关问题,欢迎大家评论区留言!!!</span></p> <p> </p></p>
评论(0)