一、项目介绍
本项目主控使用带屏12指神探,传感器使用的是纳芯微NSHT30温湿度传感器和NSPAS3N大气压力传感器,并显示到屏幕上,实现桌面环境检测
二、项目设计思路
本项目使用I2C传输和ADC模拟量读取数据,主要围绕着主控读取传感器信息,并通过SPI传输数据,将数据显示在屏幕上,可以直观的看到当前环境的温度湿度及大气压力。
- 主控使用I2C通讯方式连接NSHT30,NST30开始测量环境温湿度开始转化为数字量,并上传至主控
- NSPAS3N测量环境大气压力,转换为对应模拟量电压,主控通过ADC采样,读取当前电压数值,通过计算算出当前大气压力
- 主控使用SPI通讯上屏幕,将已经读取出来的温湿度及大气压力显示到屏幕上。
三、PCB电路设计思路
- NSHT30为温湿度传感器,应当劲量减少其他温度影响,可采取:
- 传感器应当靠近边缘放置;
- 为了对于上下拉电阻、电容应当尽量与传感器隔离放置,不要靠传感器太近;
- 传感器周围应当禁止铺铜,防止热量通过地平面传递过来
- NSPAS3N为大气压力传感器,只需注意检测位置即可,无太大要求
- 对于需要接线的针脚,注意标注标签。
PS:请忽略焊接痕迹,该板为传感器板,使用洗板水可能会导致传感器损坏。
PS:实体板的排针没有标明标签,已在新PCB板更新好,因不影响实际使用,未重新打板。
四、焊接技巧介绍
- 先焊接不容易焊接的,比如NSHT30,防止后焊接,焊接难度大,导致已经焊接在上面的元器件报废,增加成本。
- 对于大元器件的周围有下的电阻或者电容的,应当后焊接电阻电容,防止电阻电容焊接完毕后会干涉大元器件的焊接。
- 在焊接传感器之前,可以在检测口贴高温胶带,防止在焊接时,焊油或者焊锡进入检测口,导致传感器损坏
五、原理图及PCB设计遇到的问题
- 电气规则检查(ERC)触发告警为:类型为”电源输入”和“未指定”的引脚已连接。
- 排查过程:首先百度告警内容,但并无收获;分析告警内容关键词 :”电源输入” “未指定” “引脚”,怀疑为元器件符号引脚相关,打开元器件符号,检查发现对应引脚电气类型为“未指定”,确认为在元器件符号绘制过程中引脚的电气类型未选择;
- 解决方法:将对应引脚电气类型更改为对应电气类型。
- 电气规则检查(ERC)触发错误为:输入电源引脚不受任何输出电源引脚驱动。
- 排查过程:首先百度告警内容,确认为在ERC中,并不认为VCC、+5V等电源端口就一定有电源(power source),需要添加“PWR_FLAG”标签来告诉ERC,这个就是电源端口。
- 解决方法:添加“PWR_FLAG”标签。
五、硬件介绍
1.主控采用带屏12指神探
- 采用树莓派Pico核心芯片RP2040
- 配备了一块240*240分辨率的LCD彩屏
- 两个可程控按键和一个拨轮
- 引出12个引脚,包含SPI、I2C、UART、PWM、ADC
2.纳芯微NSHT30温湿度传感器
高精度、低功耗I2C数字接口温湿度传感器
NSHT30是一款基于CMOS-MEMS的相对湿度(RH)和温度传感器。NSHT30在单芯片上集成了一个完整的传感器系统,包括电容式的相对湿度传感器,CMOS温度传感器和信号处理器以及I2C数字通信接口。
• 相对湿度(RH):
- 工作范围:0%RH~100%RH
- 精度:±3%RH(典型值)
• 温度:
- 工作范围:-40℃~125℃
- 精度:±0.3℃(典型值)
3.纳芯微NSPAS3N大气压力传感器
10kPa~400kPa汽车级集成式绝压传感器
NSPAS3系列是纳芯微针对汽车进气歧管压力传感器市场,推出的经过校准过的绝压传感器产品。该产品采用汽车级信号调理芯片对MEMS芯体输出进行校准和补偿,能将10kPa 至400kPa的压力信号转换为可自定义输出范围(0~5V)的模拟输出信号。
• 压力量程:
- 工作范围:10kPa~400kPa
- 输出模拟电压范围:0~5V(模拟量)
五、结果展示
六、代码介绍
import time # 导入时间模块
import machine # 导入机器模块
from machine import SPI, Pin, I2C ,ADC # 从机器模块中导入SPI、Pin、I2C、PWM类
import test.st7789 as st7789 # 导入test文件夹下的st7789模块
import NSHT30 # 导入NSHT30模块
from test.fonts import vga2_8x8 as font1 # 导入test文件夹下的vga2_8x8字体
from test.fonts import vga1_16x32 as font2 # 导入test文件夹下的vga1_16x32字体
# 配置LCD
st7789_res = 0 # LCD复位引脚
st7789_dc = 1 # LCD数据/命令引脚
disp_width = 240 # LCD显示宽度
disp_height = 240 # LCD显示高度
spi_sck = Pin(2) # SPI时钟引脚
spi_tx = Pin(3) # SPI传输引脚
spi = SPI(0, baudrate=40000000, polarity=1, phase=1, sck=spi_sck, mosi=spi_tx) # 初始化SPI
display = st7789.ST7789(spi, disp_width, disp_height,
reset=Pin(st7789_res, Pin.OUT),
dc=Pin(st7789_dc, Pin.OUT),
xstart=0, ystart=0, rotation=0) # 初始化LCD显示器
display.fill(st7789.BLACK) # 填充LCD为黑色
# 设置I2C总线
scl = Pin(21) # I2C时钟引脚
sda = Pin(20) # I2C数据引脚
i2c = I2C(0, scl=scl, sda=sda, freq=400000) # 初始化I2C总线
# 创建NSHT30对象
nsht = NSHT30.NSHT30(i2c, 0, 0, 0x44)
# 创建气压读取ADC引脚
Pressure_ADC = ADC(Pin(26))
while True:
# 获取温湿度数据
temp, huml = nsht.measure()
time.sleep(0.1)
# 获取气压数据
# 获取ADC读取电压
Pressure_voltage = Pressure_ADC.read_u16()*3.3/65535
# 转换电压数据为气压数据
Pressure= ((Pressure_voltage/2.5)-0.00095)/0.008095
#显示实时温湿度及气压数据
display.text(font2, "Temperature:", 24, 9)
display.text(font2, str('%.2f'% temp), 64, 47)
display.text(font2, "C", 160, 47)
display.text(font2, "Humidness:", 40, 85)
display.text(font2, str('%.2f'% huml), 64, 123)
display.text(font2, "%", 160, 123)
display.text(font2, "Pressure:", 48, 161)
display.text(font2, str('%.2f'% Pressure), 40, 199)
display.text(font2, "Kpa", 152, 199)
time.sleep(0.1)
使用该程序时,需注意上传st7789库文件及字库
七、实物演示
正常检测环境温湿度及大气压力
将手指按在温湿度传感器,温度及湿度升高,传感器正常检测及显示
手动按压压力传感器,模拟加压,传感器检测大气压力升高,并成功显示
五、心得收获
本次任务第一次体验到Micropython编程语言的便利性,对于刚接触Micropython的人来说,Micropython的方便上手程度不低于Arduino,是另一款适合初学者的编程语言。