基于WeDesign第6期纳芯微传感器+环境检测桌搭
WeDesign第6期基于树莓派RP2040环境检测桌搭设计,使用纳芯微传感器来构建环境检测桌搭并实现数据读取,实时显示在RP2040TFT屏上和上传至电脑的项目。
标签
WeDesign第6期
meiyao
更新2024-12-26
27

一、 作品简介
WeDesign第6期基于树莓派RP2040的环境检测桌搭设计


项目基于树莓派RP2040微控制器,利用纳芯微传感器构建一个环境检测系统,实时获取并显示环境的温度、湿度、气压及角度数据。系统数据通过RP2040的TFT屏实时显示,并能够上传至电脑输出实时的采集数据与信息。


硬件简介:

温度传感器 NST112D-CWLR

用于获取当前环境的温度数据,采用IIC通信协议进行数据传输。读取地址0x4b。

温湿度传感器 NSHT30

用于获取环境的温湿度数据,采用IIC通信协议。读取地址0x44。

压力传感器 NSPAS3

用于监测环境的气压变化,数据通过ADC通道进行读取。压力量程10kPa~400kPa

角度传感器 NSM3013

用于检测设备或桌面角度变化,数据通过ADC通道读取。将两极磁铁的角度位置信息通过内部DSP解算,转化成模拟电压,PWM,SPI等各种输出形式。

TFT显示屏

实时显示温度、湿度、气压、角度等数据,并根据数据变化更新界面;采用SPI通信,屏的型号是st7789

数据上传PC

通过USB接口,将实时采集到的数据通过RP2040的通信接口上传至电脑,使用串口、USB加TYPE C线与电脑相连接。



二、 系统框图


image.png


设计思路

数据采集

RP2040通过I2C和ADC与各个传感器通信,实时获取数据。考虑到RP2040的I2C和ADC接口支持,可以高效地与每个传感器进行数据交换。


显示

考虑到是做的桌搭,那肯定是需要把所有的数据都需要显示,所以TFT屏幕就可以用来显示环境的实时数据,通过颜色、或文本呈现不同的数值。可以根据需要查看不同的环境参数。


数据上传

数据上传部分可以通过RP2040的USB端口直接与电脑连接,直接用十二指神探串口进行上传,通过串口助手打印出来,以便在电脑上实时查看监测数据,也是方便调试。



三、硬件功能说明


传感器转接板PCB图

image.png

左上角的为压力传感器:压力传感器 NSPAS3

左下角的为压力传感器:角度传感器 NSM3013

右上角的为压力传感器:温度传感器 NST112D-CWLR

右下角的为压力传感器:温湿度传感器 NSHT30


传感器板与十指神探对接接口图:

image.png

使用的IIC引脚是CH0、CH1,用于采集温度与湿度传感器。

CH6、CH8使用ADC来读取压力与磁角度的值,用的ADC分别是ADC0,ADC2。


各个传感器的原理图:

温湿度传感器 NSHT30:

image.png

温度传感器 NST112D-CWLR:

image.png

角度传感器 NSM3013:

image.png

压力传感器 NSPAS3:

image.png


四、 作品源码

STEP中的代码:

     tft.init();
     uint16_t transp = 0xFFFF; // 无透明色(全不透明)
     pinMode(22, OUTPUT);
     digitalWrite(22, HIGH);


     tft.fillScreen(TFT_BLACK);
     tft.setRotation(0);
     tft.begin();
     tft.setSwapBytes(true);
     tft.pushImage(0, 0, img1_width, img1_height, img1); // FIRST LOGO
     Serial.begin(115200);


    //tft.pushImage(0, 0, 240, 240, img1);
     delay(1000);
     tft.drawString("环境检测桌搭", 30, 215);
     Serial.print(" 环境检测桌搭 ");
    delay(100);
    tft.setTextSize(0);
    tft.fillRect(0, 210, 240, 30, TFT_WHITE);   //显示白色条杠
    tft.setTextColor(TFT_BLACK); // Adding a background colour erases previous text automatically
    tft.setTextFont(4);//设置显示字体
    tft.drawString("`C", 185, 35);
    tft.drawString("`C", 180, 70);
    tft.drawString("Pa", 165, 108);
    tft.drawString("Mg", 185, 148);
    tft.drawString("%", 195, 183);
    tft.setTextColor(TFT_BLACK); // Adding a background colour erases previous text automatically
    tft.fillRect(0, 0, 240, 30, TFT_WHITE);
    tft.drawString("www.eetree.cn Task3", 0, 215);
    tft.drawString("WeDesign6   RP2040 ", 0, 2);
   init_nst112();        //初始化温度计
   if (sht.init())
   {
      Serial.print("init(): success\n");
   }
   else
   {
      Serial.print("init(): failed\n");
   }
   sht.setAccuracy(SHTSensor::SHT_ACCURACY_MEDIUM); // only supported by SHT3x

上面的代码:

初始化TFT显示屏:

使用tft.init();初始化TFT显示屏。

设置显示屏旋转角度为0度。

使用tft.fillScreen(TFT_BLACK);填充整个屏幕为黑色。

通过tft.pushImage()函数在显示屏上显示一个图像(img1),图像的位置和尺寸由img1_width和img1_height确定。

在显示屏上显示文本“环境检测桌搭”,并调整文本的位置和颜色。

在特定位置显示一些符号和字母(~C, Pa, Mg, %),用于表示环境参数(温度、压力、质量、湿度)的单位。


     mgValue = analogRead(mgPin);
    paValue = analogRead(paPin);
     Serial.print("pa:  ");
    Serial.print(paValue);
     Serial.print(" v: ");
     Serial.print(float(paValue)*3.3/4095.0/0.617977528);
     Serial.print(" 气压: ");
     Serial.print(((float(paValue)*3.3/4095.0/0.617977528/5.0)-(-0.008095))/0.008095);
     float temperature = ((float(paValue) * 3.3 / 4095.0 / 0.617977528 / 5.0) - (-0.008095)) / 0.008095;
    //  sprintf(temperatureStr, "bmp: %2f", temperature); // 将温度转换为字符串
     sprintf(prestress, "NSPAS3: %.2f", temperature); // 将温度转换为字符串
     tft.fillRect(100, 108, 60, 20, TFT_RED);//刷新局部红色显示
     tft.drawString(prestress, 0,108); // 在屏幕上显示温度字符串


    //磁力计
     Serial.print("    mg:  ");
     Serial.print(mgValue);
     Serial.print(" v: ");
     Serial.print(float(mgValue)*3.3/4095.0/0.617977528);
     Serial.println();
      float magnetismStr = (float(mgValue)*3.3/4095.0/0.617977528);
   //  magnetism[20] = mgValue;
     sprintf(magnetism, "NSM3013: %d", mgValue); // 将温度转换为字符串
     tft.fillRect(100, 148, 80, 20, TFT_RED);//刷新局部红色显示
     tft.drawString(magnetism, 0, 148); // 在屏幕上显示温度字符串


    //温度计
    float temp;
    char temptemperaturevale[20],tempflat[20],humidity[20];
    if (sht.readSample())
    {
       //ht30
       // Serial.print("SHT:  ");
       Serial.print("  RH: ");
       Serial.print(sht.getHumidity(), 2);
       float humvale = sht.getHumidity();
       sprintf(humidity, "HT30hum: %0.2f", humvale); // 将温度转换为字符串
       tft.fillRect(100, 183, 85, 20, TFT_RED);//刷新局部红色显示
       tft.drawString(humidity, 0, 183); // 在屏幕上显示温度字符串


       Serial.print("  T:  ");
       Serial.print(sht.getTemperature(), 2);
       // char temperaturead = sht.getHumidity();
       float temperaturead = sht.getTemperature();
       sprintf(temptemperaturevale, "NSHT30: %0.2f", temperaturead); // 将温度转换为字符串



       //st112x
       Serial.print("  T:  ");
       Serial.print(temp, 2);
       Serial.print("\n");
       float tempst12flat = readTemperatureC();
       sprintf(tempflat, "NST112X: %0.2f", tempst12flat); // 将温度转换为字符串
       tft.fillRect(100, 35, 80, 20, TFT_RED);//刷新局部红色显示
       tft.drawString(tempflat, 0, 35); // 在屏幕上显示温度字符串

这段代码读取来自不同传感器的数据,并在TFT显示屏以及串行监视器上显示这些数据。


五、实际效果


实际显示界面:

image.png

显示采集的参数界面:

image.png

通过电脑上传到电脑采集的数据:

f6202de93663c224457bd890b946077.png


六、功能总结

通过这次的项目,实现了通过RP2040实时读取环境数据并通过屏幕显示,通过串口将数据上传至电脑,电脑端可以实时监控和绘制数据图表。

可视化界面提供直观的温湿度、压力、角度数据展示,便于实时监控。从中有了收获,提升了对RP2040的应用,也对纳芯微传感器的实测和性能的认可。

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