Robofun 機器人論壇

標題: 想請教有關於Sharp DN7C3CA006 PM2.5偵測器+WIFI模組的問題 [打印本頁]

作者: am831220    時間: 2016-11-16 02:51
標題: 想請教有關於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[2];

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[16];  
char HT[7];
char pm_SD[22];

#define SSID "889"
#define PASS "sf000093"
#define IP "184.106.153.149" // ThingSpeak IP Address: 184.106.153.149
// 使用 GET 傳送資料的格式
// GET /update?key=[THINGSPEAK_KEY]&field1=[data 1]&filed2=[data 2]...;
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[0]) || isnan(dhtbuf[1]) )
    {
        debug.println( "Failed to read form DHT11" );
    }
    else
    {
        digitalWrite( _ledpin, HIGH );
        char buf[3];
        String HH, TT;
        buf[0] = 0x30 + dhtbuf[1] / 10;
        buf[1] = 0x30 + dhtbuf[1] % 10;
        TT = (String(buf)).substring( 0, 2 );
        buf[0] = 0x30 + dhtbuf[0] / 10;
        buf[1] = 0x30 + dhtbuf[0] % 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
應該寫錯了吧
int measurePin = A0;
而且
#define _rxpin      0
#define _txpin      1
竟然和 serial 的 io 衝到




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2