Attiny841 使用 SGP40 传感器时出现问题

问题描述 投票:0回答:1

简介: 我想尝试一下定制印刷电路板组件,其中包括一个微控制器和一个外围传感器、SGP40,以及一些 LED,这些 LED 会根据从传感器通过一些 I2C 数据线获得的 VOC 指数来确定。我不久前开始了这个项目,组装了电路板并用 LED 测试了微控制器,这就是我开始返回学校和工作之前所做的一切。

SGP40 数据表: https://sensirion.com/media/documents/296373BB/6203C5DF/Sensirion_Gas_Sensors_Datasheet_SGP40.pdf

脚本:

#include "SparkFun_SGP40_Arduino_Library.h" // Click here to get the library: http://librarymanager/All#SparkFun_SGP40
#include <Wire.h>

SGP40 mySensor; 

void setup()
{
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);

  Wire.begin();

  if (mySensor.begin() == false)
  {
    while (1)
    digitalWrite(3, HIGH);
    digitalWrite(2, HIGH);
      ;
  }
}

void loop()
{
  int32_t vocIndex = mySensor.getVOCindex();


  if (vocIndex > 0 && vocIndex <= 165) {
    digitalWrite(1, LOW);
    digitalWrite(2, LOW);
    digitalWrite(3, HIGH);
  } 
  else if (vocIndex > 165 && vocIndex <= 330) {
    digitalWrite(1, LOW);
    digitalWrite(3, LOW);
    digitalWrite(2, HIGH);
  } 
  else if (vocIndex > 330) { 
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(1, HIGH);
  } 
  else if (vocIndex == -100){
    digitalWrite(1, HIGH);
    digitalWrite(2, LOW);
    digitalWrite(3, HIGH);
  }
  else {
    digitalWrite(1, HIGH);
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
  }


  delay(1000); 
}

示意图:

我在哪里: 目前我遇到一个问题,我不确定如何修复或知道我做错了什么。使用下面的脚本,微控制器获得的值似乎是 -100,我想我记得这是来自 SGP40 的错误代码,但是自从我查看此草图以及有关 -100 和传感器错误的信息以来已经有一段时间了可能不准确,但至少在我的 if else if 语句中,我看到两个 LED 亮起,并且为 vocIndex 读取的值为 -100。

我做了什么: 我使用“老化”插座将 Attiny841 移动到不同的板上,并且两个 LED(1 和 3)点亮时得到相同的输出。我已经对脚本进行了编辑,但似乎不起作用。

目标状态: 理想情况下,这个小板将完成获取 VOC 指数的简单工作,并根据 VOC 指数将 LED 设置为高电平,该高电平对应于该指数内的范围。

arduino sensors
1个回答
0
投票

由于您的设置尝试从 3 个 LED 收集有关设置状态的数据,因此很难诊断问题。我建议您使用不带 LED 的最简单设置进行面包板,并使用此代码,这是 SparkFun 的电路板示例代码。它将输出发送到串行监视器,这将为您提供一些具体的工作依据。

#include "SparkFun_SGP40_Arduino_Library.h" // Click here to get the library: http://librarymanager/All#SparkFun_SGP40
#include <Wire.h>

SGP40 mySensor; //create an object of the SGP40 class

void setup()
{
  Serial.begin(115200);
  Serial.println(F("SGP40 Example"));

  Wire.begin();

  //mySensor.enableDebugging(); // Uncomment this line to print useful debug messages to Serial

  //Initialize sensor
  if (mySensor.begin() == false)
  {
    Serial.println(F("SGP40 not detected. Check connections. Freezing..."));
    while (1)
      ; // Do nothing more
  }
}

void loop()
{
  Serial.print(F("VOC Index is: "));
  Serial.println(mySensor.getVOCindex()); //Get the VOC Index using the default RH (50%) and T (25C)

  delay(1000); //Wait 1 second - the Sensirion VOC algorithm expects a sample rate of 1Hz
}

如果这有效,您可以在面包板设置上尝试您的代码(添加 3 个 LED 后)。您还可以将串行输出添加到原始代码中,以便它可以显示完整的响应。

如果上面的代码在面包板设置上运行时没有给你带来任何有用的东西,我会很想在 Arduino UNO 之类的东西上运行它,其中引脚使用等没有歧义。如果你从中得不到任何乐趣,我会在 Arduino 上运行 I2C 扫描仪程序,检查您的 SGP40 是否连接到正确的引脚,并在 I2C 总线上做出响应。

© www.soinside.com 2019 - 2024. All rights reserved.