描述
<h1><strong>目录</strong></h1>
<ul>
<li>1 项目概述
<ul>
<li>1.1 项目功能介绍</li>
<li>1.2 实物展示</li>
<li>1.3 优化建议</li>
</ul></li>
<li>2 项目属性&开源协议
<ul>
<li>2.1 项目属性</li>
<li>2.2 开源协议</li>
</ul></li>
<li>3 硬件部分
<ul>
<li>3.1 原理图</li>
<li>3.1.1 主控部分</li>
<li>3.1.2 传感器部分</li>
<li>3.1.3 移位寄存器</li>
<li>3.1.4 显示部分</li>
<li>3.1.5 电源部分</li>
<li>3.2 PCB
<ul>
<li>3.2.1 页面布局</li>
<li>3.2.2 Layout注意事项</li>
<li>3.2.3 焊接</li>
</ul></li>
<li>3.3 外壳 </li>
</ul></li>
<li>4 软件部分</li>
<li>5 BOM清单 </li>
<li>6 大赛LOGO验证 </li>
<li>7 演示视频</li>
<li>写在最后的话
注:本来写了目录跳转,结果立创不支持,还得把相关部分删掉
<h2><strong>1 项目概述</strong></h2>
<h3><strong>1.1 项目功能介绍</strong></h3>
<p>该项目是基于<a href="https://item.szlcsc.com/549609.html?fromZone=s_s__%2522stm32g030k6t6%2522" target="_blank">STM32G030K6T6</a>的桌面温湿度检测仪。
传感器使用<a href="https://list.szlcsc.com/brand/506.html" target="_blank">瑞士盛思锐</a>的<a href="https://item.szlcsc.com/3188621.html?fromZone=s_s__" target="_blank">SHT40-AD1B</a>,该传感器有功耗低,高精度,小尺寸的优点,非常适合板载使用。
显示部分使用<a href="https://item.szlcsc.com/261987.html?fromZone=s_s__%252274hc595%2522" target="_blank">SN74HC595</a>+三位数码管。
电源部分使用4.2V锂电池。</p>
<h3><strong>1.2 实物展示</strong></h3>
<p><strong>正面</strong>
<img src="//image.lceda.cn/oshwhub/f04a24719b7a4ea8a11a017fb868db1f.jpg" alt="正面.jpg">
<strong>背面</strong>
<img src="//image.lceda.cn/oshwhub/3f0152bce7df4f3db7a4b575b7234b19.jpg" alt="背面.JPG"></p>
<h3><strong>1.3 优化建议</strong></h3></li>
<li>将电池电压映射到百分比并显示</li>
<li>优化采样</li>
<li>更改显示方式
<h2><strong>2 项目属性&开源协议</strong></h2>
<h3><strong>2.1 项目属性</strong></h3>
<p>该项目首次公开,在官方原理图和源码的基础上进行改进,未在别的比赛中获奖。</p>
<h3><strong>2.2 开源协议</strong></h3>
<p>开源协议使用GPL 3.0</p>
<p>GPL 3.0:<a href="https://www.gnu.org/licenses/gpl-3.0.html" target="_blank">https://www.gnu.org/licenses/gpl-3.0.html</a></p>
<h2><strong>3 硬件部分</strong></h2>
<h3><strong>3.1 原理图</strong></h3>
<h4><strong>3.1.1 主控部分</strong></h4>
<p>主控使用STM32G030K6T6。
<img src="//image.lceda.cn/oshwhub/1d6a8701814047a984d97f6fcfddf298.png" alt="原理图_0.png"></p>
<h4><strong>3.1.2 传感器部分</strong></h4>
<p>传感器使用瑞士盛思锐的SHT40-AD1B,相比于模块,需要增加滤波电容C1和总线上拉电阻R2R3。
<img src="//image.lceda.cn/oshwhub/3ab0508a208a4db28253a6594f1972a4.png" alt="原理图_1.png"></p>
<h4><strong>3.1.3 移位寄存器</strong></h4>
<p>数码管移位寄存器使用74HC595。
<img src="//image.lceda.cn/oshwhub/e16a89edc4b94f739f309eece812ea8b.png" alt="原理图_2.png"></p>
<h4><strong>3.1.4 显示部分</strong></h4>
<p>显示部分采用0.56寸三位数码管。
<img src="//image.lceda.cn/oshwhub/99b93f04d35a456fbb69a853c84ae2d6.png" alt="原理图_3.png">
原使用的是立创商城购买的(如图一),买了六个,最后只有一个剩下,于是只好在某宝购买(如图二),价格是图一的四分之一,焊接温度稍微高一点也完全没问题,不像某些一样,一焊就坏,还死贵死贵的。 </p>
</li>
</ul>
<p><img src="//image.lceda.cn/oshwhub/66283068feb94e12a2228dc93afe7a0c.png" alt="原理图_4.png"></p>
<h4><strong>3.1.5 电源部分</strong></h4>
<h5><strong>(1)电源框图</strong></h5>
<p><img src="//image.lceda.cn/oshwhub/b6835aea6d7147bd9b37eadccf1cd520.png" alt="原理图_5.png"></p>
<h5><strong>(2)锂电池充电电路</strong></h5>
<p>相信大家对TP4056都不陌生,我就不做介绍了。
<img src="//image.lceda.cn/oshwhub/5c1f607729de403da3715ca1396b9470.png" alt="原理图_6.png"></p>
<h5><strong>(3)LDO电路</strong></h5>
<p>LDO使用RT9013-33GB。
<img src="//image.lceda.cn/oshwhub/4c21dd46f6fc4ca7a569450a0e6281cb.png" alt="原理图_7.png">
这里注意,由于锂电池的电压在3.3-4.2V,故普通的LDO不行(如AMS1117-3.3),因为它们的压差太大了,在1V左右,而RT9013-33GB的压差较小,故选用RT9013-33GB。
此处使用ME6211C33也可以,两者电路基本相同,由于我手头RT9013-33GB更多(立创16-15薅的),而ME6211C33没几个了,故选用RT9013-33GB。
DC-DC效率更高,但成本有所提升,故不选用。</p>
<h3><strong>3.2 PCB</strong></h3>
<h4><strong>3.2.1 页面布局</strong></h4>
<p><strong>正面</strong>
<img src="//image.lceda.cn/oshwhub/2a45d43247024e738956da53fa0b71d9.png" alt="PCB_0.png">
<strong>背面</strong>
<img src="//image.lceda.cn/oshwhub/87912e27fe1148cc9e467f4b72268ad6.png" alt="PCB_1.png"></p>
<p><strong>采用1MM板材,整体尽量使用贴片,电阻电容均使用0603。</strong></p>
<h4><strong>3.2.2 Layout注意事项</strong></h4>
<h5><strong>(1) 铺铜禁止区域</strong></h5>
<p><img src="//image.lceda.cn/oshwhub/1d24a66268bf42509b8165074a5a48be.png" alt="PCB_2.png"></p>
<h5><strong>(2) 禁止走线区域</strong></h5>
<p><img src="//image.lceda.cn/oshwhub/f2d422434a3646558f3873931e128ee1.png" alt="PCB_3.png"></p>
<h5><strong>(3) 元件放置</strong></h5>
<p><img src="//image.lceda.cn/oshwhub/6a26aa5690ee4933910a6a2a9531d382.png" alt="PCB_4.png">
传感器的放置建议
<img src="//image.lceda.cn/oshwhub/d9815c72f8b44cd3992c6baeb47eb793.png" alt="PCB_5.png"></p>
<h4><strong>3.2.3 焊接</strong></h4>
<p>用锡膏和焊油(如图一),然后用加热台(如图二)和热风枪进行贴片焊接,然后使用电烙铁焊接插件,我的加热台损坏了,所以使用恒温磁力加热器,温度也有两三百度,足够了。
<img src="//image.lceda.cn/oshwhub/c1f3b2fc74ca47c99b1fb73c817cfc9c.png" alt="PCB_6.png">
焊接成品
<img src="//image.lceda.cn/oshwhub/3958df7dcabc462694d9ed25695e1d5f.png" alt="PCB_7.png"></p>
<h3><strong>3.3 外壳</strong></h3>
<p>外壳部分采用2MM亚克力。
<img src="//image.lceda.cn/oshwhub/81beb1df57784683b10a9587a93a0e3e.png" alt="PCB_面板_2024-07-28.png">
<img src="//image.lceda.cn/oshwhub/9abe2a51f6d948d9a9575c8a8ce59b29.png" alt="外壳_0.png">
使用单刃锥形钻头(如图一)在亚克力上开出四个沉孔(如图二),由于我使用的是手电钻,故使用单刃。
<img src="//image.lceda.cn/oshwhub/098384bf2ca4479690aed541e8b17722.png" alt="外壳_1.png">
将M3-5MM沉头螺丝和M3-6MM铜柱进行组装。
<img src="//image.lceda.cn/oshwhub/543f440382ed42cbaf5975d9c792e330.png" alt="外壳_3.png"></p>
<h2><strong>4 软件部分</strong></h2>
<p>由于本人水平有限,如有错误,请多多指出 </p>
<p>为了实现短按开机,再次短按实现功能切换,长按关机的功能,我在<code>gpio.c</code>中添加了以下代码,以实现长短按判定。
0.1s-1s为短按,1s以上为长按</p>
<pre><code>void Key_scan(void)
{
uint8_t val = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5);
static uint16_t count=0;
if (!val)//记录时间
{
count++;
}
else
{
if(count>100)
{
device_paramter.KeyScan = 2;//长按
}
else if(count>10 && count<100)
{
device_paramter.KeyScan = 1;//短按
}
count=0;
}
} </code></pre>
<p>为了防止短按开机的同时判定了Key_scan短按,我在主循环中添加了延时。
<code>HAL_Delay(150);</code>
相应的,<code>mian.c</code>中也要进行修改。</p>
<pre><code>if(device_paramter.KeyStatus == KEY_SHAKE_STATE)
{
HAL_Delay(150);
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) == GPIO_PIN_RESET)
{
while(1)
{
device_paramter.sleepStatus = 0;//清除休眠标志
while(device_paramter.KeyScan == 0)
{
SHT40_Read_RHData(&temperature,&humidity);//读取温湿度
device_paramter.Temp = temperature * 10;//放大温湿度
device_paramter.Humi = humidity * 10;
device_paramter.Dispiay_Type = 1;
HAL_TIM_Base_Start_IT(&htim14);//开始定时器,显示数据
Key_scan( );
}
if(device_paramter.KeyScan == 2)
{
device_paramter.KeyStatus = KEY_NO_PRESS;//清除按下标志
device_paramter.KeyScan = 0;//重置长短按判断
device_paramter.sleepStatus = 1;//启动休眠标志
break;//跳出循环
}
else if(device_paramter.KeyScan == 1)
{
/*功能跳转*/
break;//跳出循环
}
}
}
}</code></pre>
<p>为了实现同时显示温湿度,我修改了<code>tim.c</code>的相关内容。</p>
<pre><code>if(htim->Instance == TIM14)
{
if(device_paramter.Dispiay_Type == 1)
{
HAL_TIM_Base_Stop_IT(&htim14);
updata_flag++;
if(updata_flag <= 1000)
{
ShowNum(1,1,(device_paramter.Temp/100));
ShowNum(1,2,(device_paramter.Temp / 10 % 10));
ShowNum(1,3,device_paramter.Temp%10);
ShowNum(2,1,(device_paramter.Humi/100));
ShowNum(2,2,(device_paramter.Humi / 10 % 10));
ShowNum(2,3,device_paramter.Humi%10);
}
else
{
updata_flag = 0;
sleep_flag++;
}
__HAL_TIM_SetCounter(&htim14,0);
if(sleep_flag >= 1)
{
sleep_flag = 0;
SN74HC595_Send_Data(SN_DIG,0xFF);
SN74HC595_Send_Data(SN_LED1,0x00);
SN74HC595_Send_Data(SN_LED2,0x00);
}
else
{
HAL_TIM_Base_Start_IT(&htim14);
}
}
}</code></pre>
<p>功能跳转中,为了实现检测电池电压,增加了相关代码,但效果不好。</p>
<pre><code>/* ADC采集电压*/
HAL_ADCEx_Calibration_Start(&hadc1);
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); //获取ADC值
Data = (ADC_Value*3.324f)/4095.0f; //12位ADC,获取到的值在0到4095之间,参考电压3.3V()
}
ol_Value = (uint16_t)(Data * 100)*2; //由于用两个电阻分压
device_paramter.Dispiay_Type = 2;
HAL_TIM_Base_Start_IT(&htim14);
device_paramter.KeyScan = 0; //重置长短按判断
device_paramter.sleepStatus = 0; //清除休眠标志
device_paramter.KeyStatus = KEY_NO_PRESS; //清除按下标志</code></pre>
<h2><strong>5 BOM清单</strong></h2>
<table>
<tr>
<th>名称</th>
<th>位号</th>
<th>封装</th>
<th>数量</th>
<th>型号</th>
<th>品牌</th>
<th>编号</th>
<th>备注</th>
<th>价金额</th>
</tr>
<tr>
<td>STM32G030K6T6</td>
<td>U1</td>
<td>LQFP-32_L7.0-W7.0-P0.80-LS9.0-BL</td>
<td>1</td>
<td>STM32G030K6T6</td>
<td>ST(意法半导体)</td>
<td>C529331</td>
<td>tb</td>
<td>3.2</td>
</tr>
<tr>
<td>10K</td>
<td>R1,R2,R3,R10,R11</td>
<td>R0603</td>
<td>5</td>
<td></td>
<td></td>
<td></td>
<td>0.01/pcs</td>
<td>0.05</td>
</tr>
<tr>
<td>100nF</td>
<td>C2,C1,C10,C12,C13,C14</td>
<td>C0603</td>
<td>6</td>
<td></td>
<td></td>
<td></td>
<td>0.01/pcs</td>
<td>0.06</td>
</tr>
<tr>
<td>32.768kHz</td>
<td>X1</td>
<td>OSC-SMD_L3.2-W1.5</td>
<td>1</td>
<td>SMD31327681252090</td>
<td>JGHC(晶光华)</td>
<td>C390740</td>
<td>tb</td>
<td>0.5</td>
</tr>
<tr>
<td>12pF</td>
<td>C4,C3</td>
<td>C0603</td>
<td>2</td>
<td></td>
<td></td>
<td></td>
<td>0.01/pcs</td>
<td>0.02</td>
</tr>
<tr>
<td>SHT40-AD1B-R2</td>
<td>U2</td>
<td>DFN-4_L1.5-W1.5-P0.8-TL-EP</td>
<td>1</td>
<td>SHT40-AD1B-R2</td>
<td>Sensirion(瑞士盛思锐)</td>
<td>C2909890</td>
<td>tb</td>
<td>8.6</td>
</tr>
<tr>
<td>10uF</td>
<td>C5,C6,C11</td>
<td>C0603</td>
<td>3</td>
<td></td>
<td></td>
<td></td>
<td>0.01/pcs</td>
<td>0.03</td>
</tr>
<tr>
<td>1K</td>
<td>R4,R5,R8,R9</td>
<td>R0603</td>
<td>4</td>
<td></td>
<td></td>
<td></td>
<td>0.01/pcs</td>
<td>0.04</td>
</tr>
<tr>
<td>TP4056</td>
<td>U3</td>
<td>ESOP-8_L4.9-W3.9-P1.27-LS6.0-BL-EP</td>
<td>1</td>
<td>TP4056</td>
<td>UMW(友台半导体)</td>
<td>C725790</td>
<td>lc-GX4056</td>
<td>0.23</td>
</tr>
<tr>
<td>LED_0603-R</td>
<td>LED1</td>
<td>LED_0603</td>
<td>1</td>
<td></td>
<td></td>
<td></td>
<td>0.05/pcs</td>
<td>0.05</td>
</tr>
<tr>
<td>LED_0603-G</td>
<td>LED2,LED3,LED4</td>
<td>LED_0603</td>
<td>3</td>
<td></td>
<td></td>
<td></td>
<td>0.05/pcs</td>
<td>0.15</td>
</tr>
<tr>
<td>SN74HC595PWR</td>
<td>U4,U5,U6</td>
<td>TSSOP-16_L5.0-W4.4-P0.65-LS6.4-BL</td>
<td>3</td>
<td>SN74HC595PWR</td>
<td>TI(德州仪器)</td>
<td>C273642</td>
<td>lc</td>
<td>3.6</td>
</tr>
<tr>
<td>1uF</td>
<td>C7,C8,C9</td>
<td>C0603</td>
<td>3</td>
<td></td>
<td></td>
<td></td>
<td>0.01/pcs</td>
<td>0.01</td>
</tr>
<tr>
<td>TYPE-603-T3</td>
<td>USB1</td>
<td>USB-C-SMD_TYPE-603-T3</td>
<td>1</td>
<td>TYPE-603-T3</td>
<td>Yuandi(元迪)</td>
<td>C2689837</td>
<td>lc</td>
<td>0.49</td>
</tr>
<tr>
<td>5.1K</td>
<td>R6,R7</td>
<td>R0603</td>
<td>2</td>
<td></td>
<td></td>
<td></td>
<td>0.01/pcs</td>
<td>0.01</td>
</tr>
<tr>
<td>RT9013-33GB</td>
<td>U7</td>
<td>SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BL</td>
<td>1</td>
<td>RT9013-33GB</td>
<td>RICHTEK(立锜)</td>
<td>C47773</td>
<td>lc</td>
<td>0.94</td>
</tr>
<tr>
<td>TS-1086E-AC03526</td>
<td>SW1</td>
<td>SW-SMD_TS-1086E-AC03526</td>
<td>1</td>
<td>TS-1086E-AC03526</td>
<td>XUNPU(讯普)</td>
<td>C720473</td>
<td>lc</td>
<td>0.29</td>
</tr>
<tr>
<td>SLR0563CR5C1BD-4.8</td>
<td>LED5,LED6</td>
<td>LED-SEG-TH_SLR0563CR5C1BD-4.8</td>
<td>2</td>
<td>SLR0563CR5C1BD-4.8</td>
<td>SUNLIGHT(光华)</td>
<td>C225945</td>
<td>tb</td>
<td>1.8</td>
</tr>
<tr>
<td>XL-5050UWC</td>
<td>LED7</td>
<td>LED-ARRAY-SMD_6P-L5.0-W5.0-TL-RD-2</td>
<td>1</td>
<td>XL-5050UWC</td>
<td>XINGLIGHT(成兴光)</td>
<td>C2843867</td>
<td>lc</td>
<td>0.17</td>
</tr>
<tr>
<td>TS5215A 250gf</td>
<td>SW2</td>
<td>SW-SMD_4P-L5.2-W5.2-P3.70-LS6.4</td>
<td>1</td>
<td>TS5215A 250gf</td>
<td>SHOU HAN(首韩)</td>
<td>C388295</td>
<td>lc</td>
<td>0.01</td>
</tr>
<tr>
<td>ZX-XH2.54-2PWT</td>
<td>CN1</td>
<td>CONN-SMD_2P-P2.54_MEGASTAR_ZX-XH2.54-2PWT</td>
<td>1</td>
<td>ZX-XH2.54-2PWT</td>
<td>Megastar(兆星)</td>
<td>C7429671</td>
<td>选焊</td>
<td>0</td>
</tr>
<tr>
<td>PZ254V-11-04P</td>
<td>H1,H2</td>
<td>HDR-TH_4P-P2.54-V-M</td>
<td>2</td>
<td>PZ254V-11-04P</td>
<td>XFCN(兴飞)</td>
<td>C2691448</td>
<td>选焊</td>
<td>0</td>
</tr>
<tr>
<td>250mah锂电池</td>
<td>BAT+</td>
<td>502030</td>
<td>1</td>
<td>-</td>
<td></td>
<td></td>
<td>贴于PCB上</td>
<td>2</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>合计:</td>
<td>22.25</td>
</tr>
</table>
<p>注:由于大部分0603电阻电容是料盘或拆机,故统一算作0.01/pcs
请以此BOM表为准。</p>
<h2><strong>6 大赛LOGO验证</strong></h2>
<p><img src="//image.lceda.cn/oshwhub/4d2964fb5a954c02a41696ea5615cdb8.jpg" alt="背面.JPG"></p>
<h2><strong>7 演示视频</strong></h2>
<p>立创电赛:《桌面温湿度仪》-功能演示。</p>
<h2><strong>写在最后的话</strong></h2>
<p>这是第三次参加训练营了,感谢立创不断的给我机会提升自己,前两次由于时间和能力问题(初二时),没有完成,甚至焊接完成烧录程序都没做到,这一次终于是在中考完的暑假“独立”的做完了(这里的独立是相较于小学六年级时参加NOC是老师手把手带着),也算是对初中生活的结束的纪念,我自己的能力也得到了提升,但编程能力仍需要加强,所有说代码不近完善。
这个作品本来也是桌面摆件,所以我在板子背后加上了我对未来的期许,希望我的高中生活能像那样,同时也祝愿嘉立创越做越大,越做越好,希望未来有我加入的机会!
<strong><em>2024/7/29</em></strong></p>
评论(3)