基于纳芯微NSHT30和NSPAS3N设计环境检测桌搭
该项目使用了纳芯微NSHT30和NSPAS3N,实现了环境检测的设计,它的主要功能为:检测温度、湿度及大气压,输出到屏幕显示。
标签
MicroPython
RP2040
纳芯微
NSHT30
NSPAS3N
CX反C
更新2024-12-26
10

一、项目介绍

本项目主控使用带屏12指神探,传感器使用的是纳芯微NSHT30温湿度传感器和NSPAS3N大气压力传感器,并显示到屏幕上,实现桌面环境检测

二、项目设计思路

本项目使用I2C传输和ADC模拟量读取数据,主要围绕着主控读取传感器信息,并通过SPI传输数据,将数据显示在屏幕上,可以直观的看到当前环境的温度湿度及大气压力。

image.png

  1. 主控使用I2C通讯方式连接NSHT30,NST30开始测量环境温湿度开始转化为数字量,并上传至主控
  2. NSPAS3N测量环境大气压力,转换为对应模拟量电压,主控通过ADC采样,读取当前电压数值,通过计算算出当前大气压力
  3. 主控使用SPI通讯上屏幕,将已经读取出来的温湿度及大气压力显示到屏幕上。

三、PCB电路设计思路

  1. NSHT30为温湿度传感器,应当劲量减少其他温度影响,可采取:
    • 传感器应当靠近边缘放置;
    • 为了对于上下拉电阻、电容应当尽量与传感器隔离放置,不要靠传感器太近;
    • 传感器周围应当禁止铺铜,防止热量通过地平面传递过来
  1. NSPAS3N为大气压力传感器,只需注意检测位置即可,无太大要求
  2. 对于需要接线的针脚,注意标注标签。

image.png

PS:请忽略焊接痕迹,该板为传感器板,使用洗板水可能会导致传感器损坏。

image.png

PS:实体板的排针没有标明标签,已在新PCB板更新好,因不影响实际使用,未重新打板。

四、焊接技巧介绍

  1. 先焊接不容易焊接的,比如NSHT30,防止后焊接,焊接难度大,导致已经焊接在上面的元器件报废,增加成本。
  2. 对于大元器件的周围有下的电阻或者电容的,应当后焊接电阻电容,防止电阻电容焊接完毕后会干涉大元器件的焊接。
  3. 在焊接传感器之前,可以在检测口贴高温胶带,防止在焊接时,焊油或者焊锡进入检测口,导致传感器损坏

五、原理图及PCB设计遇到的问题

  1. 电气规则检查(ERC)触发告警为:类型为”电源输入”和“未指定”的引脚已连接。
    • 排查过程:首先百度告警内容,但并无收获;分析告警内容关键词 :”电源输入” “未指定” “引脚”,怀疑为元器件符号引脚相关,打开元器件符号,检查发现对应引脚电气类型为“未指定”,确认为在元器件符号绘制过程中引脚的电气类型未选择;
    • 解决方法:将对应引脚电气类型更改为对应电气类型。
  1. 电气规则检查(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、I2CPWM
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库文件及字库

七、实物演示

image.png

正常检测环境温湿度及大气压力


image.png

将手指按在温湿度传感器,温度及湿度升高,传感器正常检测及显示

image.png

手动按压压力传感器,模拟加压,传感器检测大气压力升高,并成功显示

五、心得收获

本次任务第一次体验到Micropython编程语言的便利性,对于刚接触Micropython的人来说,Micropython的方便上手程度不低于Arduino,是另一款适合初学者的编程语言。



KiCad文件
使用说明
全屏
附件下载
桌面环境气象站.7z
团队介绍
个人爱好开发者
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号