am831220 發表於 2016-11-16 02:51:00

想請教有關於Sharp DN7C3CA006 PM2.5偵測器+WIFI模組的問題

程式碼如下,想請教各位前輩,
(1).為何在數值呈現的時候電壓總是偏低,而PM2.5總是呈現負值呢?
(2).為何溫溼度跟PM2.5的數值無法同時偵測,而溫溼度總慢了幾秒?
(3).程式碼中該如何修改才能一併將PM2.5的數值上傳到thinkspeak 呢?

煩請前輩們幫忙解惑,感恩


#include
#include "DHT.h"
#define DEBUG
#define _ledpin   13
#define _rxpin      0
#define _txpin      1
SoftwareSerial debug( _rxpin, _txpin ); // RX, TX

#define _dhtpin   8
#define _dhttype    DHT11
DHT dht11( _dhtpin, _dhttype );
uint8_t dhtbuf;

int measurePin = 0; //Connect dust sensor to Arduino A0 pin
int ledPower = 3;   //Connect 3 led driver pins of dust sensor to Arduino D2

int samplingTime = 460;
int deltaTime = 40;
int sleepTime = 9500;

float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
int mean_pm, mean_v0;
char pm;
char HT;
char pm_SD;

#define SSID "889"
#define PASS "sf000093"
#define IP "184.106.153.149" // ThingSpeak IP Address: 184.106.153.149
// 使用 GET 傳送資料的格式
// GET /update?key=&field1=&filed2=...;
String GET = "GET /update?key=UR0WZRMIAUXQVUBI";

void setup() {
Serial.begin(9600);
debug.begin(9600);

sendDebug("AT");
    delay(5000);
    if(Serial.find("OK"))
    {
      debug.println("RECEIVED: OK\nData ready to sent!");
      connectWiFi();
    }

dht11.begin();
pinMode( _ledpin, OUTPUT );
digitalWrite( _ledpin, LOW );
}

void loop() {

    float h = dht11.readHumidity();
    float tt = dht11.readTemperature();

    // 確認取回的溫溼度數據可用
    if( isnan(dhtbuf) || isnan(dhtbuf) )
    {
      debug.println( "Failed to read form DHT11" );
    }
    else
    {
      digitalWrite( _ledpin, HIGH );
      char buf;
      String HH, TT;
      buf = 0x30 + dhtbuf / 10;
      buf = 0x30 + dhtbuf % 10;
      TT = (String(buf)).substring( 0, 2 );
      buf = 0x30 + dhtbuf / 10;
      buf = 0x30 + dhtbuf % 10;
      HH = (String(buf)).substring( 0, 2 );

      updateDHT11( TT, HH );
      #ifdef DEBUG
            debug.print("Humidity: ");
            debug.print( HH );
            debug.print(" %\t");
            debug.print("Temperature: ");
            debug.print( TT );
            debug.println(" *C\t");
      #endif
      digitalWrite( _ledpin, LOW );
    }

    delay(2000);   // 60 second


dustDensity = 0;
mean_v0=0;
float vs=140;

for (int i = 0; i <= 29; i++) {
   
    digitalWrite(ledPower, LOW);
    delayMicroseconds(samplingTime);
    voMeasured = analogRead(measurePin);
    delayMicroseconds(deltaTime);
    digitalWrite(ledPower, HIGH);
    delayMicroseconds(sleepTime);
   
    calcVoltage = voMeasured * (5.0 / 1024.0);
   mean_v0=mean_v0+voMeasured;
   if (h>50) {
      dustDensity = 0.6*(1-0.01467*(h-50))*(voMeasured-vs);
    }
    else {
       dustDensity = 0.6*(voMeasured-vs);
    }

   Serial.print("Raw input voltage: ");
   Serial.print(calcVoltage);
   Serial.print("   Raw Signal Valued: ");
   Serial.print(voMeasured);
   Serial.print("   PM2.5: ");
   Serial.println(dustDensity);
   Serial.println(" ug/m3 ");   
   Serial.print("RH:");
   Serial.print(h);
   Serial.print("% ");
   Serial.print("T:");
   Serial.print(tt);
   Serial.print("C ");

    delay(2000);
};



}
void updateDHT11( String T, String H, String PM2.5)
{
    // 設定 ESP8266 作為 Client 端
    String cmd = "AT+CIPSTART=\"TCP\",\"";
    cmd += IP;
    cmd += "\",80";
    sendDebug(cmd);
    delay(2000);
    if( Serial.find( "Error" ) )
    {
      debug.print( "RECEIVED: Error\nExit1" );
      return;
    }

    cmd = GET + "&field1=" + T + "&field2=" + H "&field3=" + PM2.5 +"\r\n";
    Serial.print( "AT+CIPSEND=" );
    Serial.println( cmd.length() );
    if(Serial.find( ">" ) )
    {
      debug.print(">");
      debug.print(cmd);
      Serial.print(cmd);
    }
    else
    {
      sendDebug( "AT+CIPCLOSE" );
    }
    if( Serial.find("OK") )
    {
      debug.println( "RECEIVED: OK" );
    }
    else
    {
      debug.println( "RECEIVED: Error\nExit2" );
    }
}

void sendDebug(String cmd)
{
    debug.print("SEND: ");
    debug.println(cmd);
    Serial.println(cmd);
}

boolean connectWiFi()
{
    Serial.println("AT+CWMODE=1");
    delay(2000);
    String cmd="AT+CWJAP=\"";
    cmd+=SSID;
    cmd+="\",\"";
    cmd+=PASS;
    cmd+="\"";
    sendDebug(cmd);
    delay(5000);
    if(Serial.find("OK"))
    {
      debug.println("RECEIVED: OK");
      return true;
    }
    else
    {
      debug.println("RECEIVED: Error");
      return false;
    }

    cmd = "AT+CIPMUX=0";
    sendDebug( cmd );
    if( Serial.find( "Error") )
    {
      debug.print( "RECEIVED: Error" );
      return false;
    }
}

超新手 發表於 2016-11-16 06:20:53

應該寫錯了吧
int measurePin = A0;
而且
#define _rxpin      0
#define _txpin      1
竟然和 serial 的 io 衝到
頁: [1]
查看完整版本: 想請教有關於Sharp DN7C3CA006 PM2.5偵測器+WIFI模組的問題