描述
<p>@<a href="%E7%9B%AE%E5%BD%95" target="_blank">TOC</a></p>
<h1>立创电赛&温湿度计</h1>
<h2>简介</h2>
<p>舒适的环境有利于提高画板子,焊板子,写程序的效率。传统的温湿度计存在功能单一,需要频繁更换电池,并且无法在温湿度不合适的情况下开启空调。
所以在嘉立创的支持下,我DIY了一个温湿度计
具有以下功能和特点
方便:使用两节干电池供电
低功耗:可以自动休眠,使用时按键唤醒
自动化:温度过高时打开空调制冷模式;当温度下降到合适温度时关闭空调。湿度过高时打开空调除湿模式,对应的湿度下降到设定值关闭空调除湿模式。</p>
<h3>实物展示</h3>
<p><img src="//image.lceda.cn/oshwhub/89d03a51039f4266ad1b447aa1a6c2ee.png" alt="image.png"></p>
<h2>硬件设计</h2>
<h3>供电</h3>
<p>本项目使用两节干电池供电,为防止反接导致元器件烧毁,我们使用WST3401作为防护,并且通过两个10K电阻来取样o判断电量是否充足。值得注意的是由于这里电阻采样而不是限流作用,所以对精度有要求,我们要使用0.1%误差的电阻
<img src="//image.lceda.cn/oshwhub/48a3cce36c6c475fa87e6ce67bfc3b29.png" alt="image.png"></p>
<h3>主控</h3>
<p>本项目使用<strong>STM32G030K6T6</strong>作为主控,该主控具有定时器、ADC和通信接口,方便我们读取温度湿度传感器数据。电压范围:2.0 V至3.6 V,这样我们可以使用连接干电池供电,非常便利,并且有:睡眠、停止、待机三个低功耗模式,这样使用电池供电可以通过程序使其休眠来降低能耗</p>
<p>PCB布局上供电一定要先经过滤波电容再进去MCU
晶振要尽量靠近MCU,并且做包地处理,且放置禁止铺铜区域,晶振所在区域所有层尽量不要走线</p>
<p><img src="//image.lceda.cn/oshwhub/55db78bc023449559f85e486266c5e50.png" alt="image.png"></p>
<h3>显示</h3>
<p>为了节省成本,以及降低能耗使用数码管来显示温度以及湿度。这里我们使用两个三位数码来显示温度以及湿度。为节省引脚资源,我们使用74系列595芯片来串行输入,并行输出的操作</p>
<p><img src="//image.lceda.cn/oshwhub/c94a0806c9ba4fca86ea6652a95dbc10.png" alt="image.png"></p>
<p><img src="//image.lceda.cn/oshwhub/966f914a64104155a24cc21c0090963a.png" alt="image.png">
在PCB设计中我们同样要注意,供电要先经过滤波电容在进入595芯片,并且由于引脚密集GND可以使用拉线加过孔的方式接入底层的大面积铺铜区域</p>
<p><img src="//image.lceda.cn/oshwhub/d12329c72e9e40249038891fa453fc57.png" alt="image.png">
由于数目管布线比较多,我们要注意尽量避免频繁交叉,绕线等操作,以免影响铺铜区域的完整性</p>
<p><img src="//image.lceda.cn/oshwhub/5e61e6127e574afa8d5ea568ed2e8ea7.png" alt="image.png"></p>
<h3>传感器</h3>
<p>传感器使用盛思锐的 SHT40 为了方便,我们使用模块而非传感器直接焊接,我们使用1.27的4p排母来连接模块,传感器使用I²C通讯,注意使用上拉电阻</p>
<p><img src="//image.lceda.cn/oshwhub/454697f83bf54d968eaf278b64f305da.png" alt="image.png">
PCB设计上,要注意的是,因为这是温湿度传感器,所以要尽可能地远离发热元件,并且保留足够的高度来放置模块</p>
<p><img src="//image.lceda.cn/oshwhub/0468f6b85682498299a7643b90952cdd.png" alt="image.png">
<strong>此外值得注意的是,根据群友的反馈,此模块非常的脆弱,反接必烧,连接时注意方向</strong></p>
<h3>红外</h3>
<p>随着家用电器、视听产品的普及,红外线遥控器已被广泛使用在各种类型的家电产品上,体积小、抗干扰能力强、功耗低,一般而言,一个通用的红外遥控系统由发射和接收两大部分组成,这里只有控制,所以只做发射部分。
<img src="//image.lceda.cn/oshwhub/2f5fed2b4f9548e183d51759511f908e.png" alt="image.png">
红外部分使用一个8550三极管来驱动红外发射管。该部分作用是根据温度变化来控制空调
<img src="//image.lceda.cn/oshwhub/543e563505754f039fb775ec3edced8e.png" alt="image.png"></p>
<p><img src="//image.lceda.cn/oshwhub/eccd5a1641644b219d0a6c5258f459af.png" alt="image.png">
示波器捕捉眼妆遥控器红发发射管信号
<img src="//image.lceda.cn/oshwhub/6f402950b0b7460291a7161f79462351.png" alt="image.png"></p>
<h2>软件设计</h2>
<h3>红外</h3>
<p>通过示波器信号捕捉分析+资料搜索,大致推断为NEC红外协议,引导码 + 8位用户码 + 8位用户反码 + 8位数据码 + 8位数据反码+停止位
这里的红外使用STC试验箱来读取红外数据,并将开启空调的数据写入程序中
STC试验箱连接电脑
<img src="//image.lceda.cn/oshwhub/c3739049feeb460fb51707685d90af10.png" alt="image.png">
遥控器对准这里按键
<img src="//image.lceda.cn/oshwhub/e61eb41d709e4ccd895dd9d240e724ba.png" alt="image.png">
串口读取
<img src="//image.lceda.cn/oshwhub/8686d640be0f4ae99c7a5b82ab77f79d.png" alt="image.png">
不一样的遥控器可能编码略有区别,实际编码请实际操作</p>
<pre><code class="language-C"> u8 SampleTime;
IR_SampleCnt++; //Sample + 1
F0 = P_IR_RX_temp; //Save Last sample status
P_IR_RX_temp = P_IR_RX; //Read current status
if(F0 && !P_IR_RX_temp) //Pre-sample is high,and current sample is low, so is fall edge
{
SampleTime = IR_SampleCnt; //get the sample time
IR_SampleCnt = 0; //Clear the sample counter
if(SampleTime > D_IR_SYNC_MAX) B_IR_Sync = 0; //large the Maxim SYNC time, then error
else if(SampleTime >= D_IR_SYNC_MIN) //SYNC
{
if(SampleTime >= D_IR_SYNC_DIVIDE)
{
B_IR_Sync = 1; //has received SYNC
IR_BitCnt = D_IR_BIT_NUMBER; //Load bit number
}
}
else if(B_IR_Sync) //has received SYNC
{
if(SampleTime > D_IR_DATA_MAX) B_IR_Sync=0; //data samlpe time too large
else
{
IR_DataShit >>= 1; //data shift right 1 bit
if(SampleTime >= D_IR_DATA_DIVIDE) IR_DataShit |= 0x80; //devide data 0 or 1
if(--IR_BitCnt == 0) //bit number is over?
{
B_IR_Sync = 0; //Clear SYNC
if(~IR_DataShit == IR_data) //判断数据正反码
{
UserCode = ((u16)IR_UserH << 8) + IR_UserL;
IR_code = IR_data;
B_IR_Press = 1; //数据有效
}
}
else if((IR_BitCnt & 7)== 0) //one byte receive
{
IR_UserL = IR_UserH; //Save the User code high byte
IR_UserH = IR_data; //Save the User code low byte
IR_data = IR_DataShit; //Save the IR data byte
}
}
}
}</code></pre>
<h2>失败记录</h2>
<p>本模块记录本人再本项目硬件软件设计制作过程中出现的问题以及解决过程,如果您遇到相同的问题,希望对您有所帮助。</p>
<ol>
<li>烧录问题,很多童鞋出现了无法烧录或者只能烧录一次的问题,经排查,由于芯片低功耗模式下休眠状态,无法烧录。需要将其唤醒后才能再次烧录。
<h2>鸣谢</h2>
<p>感谢 嘉立创 以及 瑞士盛思锐 提供的学习平台以及物料支持</p></li>
</ol>
-
WeChat_20240805000001.mp4
-
WeChat_20240806002642.mp4
评论(0)