Obsługa GP2Y10 (czujnik pyłu) w SUPLA

dawidd
Posts: 161
Joined: Tue Dec 19, 2017 12:45 pm

Wed Oct 10, 2018 5:43 am

sroka222
W kodzie z pierwszej strony brakuje linijki przed setup
pinMode(5,OUTPUT)

Bez niej czujnik nie działa
dawidd
Posts: 161
Joined: Tue Dec 19, 2017 12:45 pm

Thu Oct 11, 2018 10:23 am

sroka222 kod poprawiony poniżej
bez ujemnych wartosci i nie rozgłasza sieci jak się zaloguje. Własnie go wrzuciłem do wemosa d1 mini i dziala od strzału. Po wsadzeniu ołówka w czujnik dostaje max wartość,po wyciągnięciu w pokoju ok 75-120 - pewnie trzeba by go wykalibrowac. Wydaje mi sie ze zmieniajac w
dustDensity = 0.17 * calcVoltage - 0.1; // ug/m3
cyfra 0,17 można dopasować go do właściwych wartosci. Tylko skąd je poznać? Ja myślałem jechać pod jakaś stacje jakości powietrza, ale gdy sprawdzam mapę prywatnych stacji to pokazuje normy przekroczone, a obok państwowa poskazuje ze normy w normie :) I komu tu wierzyć?

Code: Select all

#include <ESP8266WiFi.h>
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>

WiFiClient client;

const char* ssid     = "xxx";
const char* password = "xxx";


int measurePin = A0;
int ledPower = 5;

int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;

float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;



// DS18B20 Sensor read implementation
double get_temperature(int channelNumber, double last_val) {


    
    digitalWrite(ledPower,LOW); // power on the LED
    delayMicroseconds(samplingTime);

    voMeasured = analogRead(measurePin); // read the dust value
  
    delayMicroseconds(deltaTime);
    digitalWrite(ledPower,HIGH); // turn the LED off
    delayMicroseconds(sleepTime);

   calcVoltage = (5000.0 / 1024.0) * voMeasured; // Przeliczamy na mV. Calosc mnożymy przez 11, poniewaz w module
  
   // Obliczamy zanieczyszczenie jesli zmierzone napiecie ponad dolny prog
if (voMeasured>3.0)
dustDensity = 0.17 * calcVoltage - 0.1; // ug/m3
  
    Serial.print("Raw Signal Value (0-1023): ");
    Serial.print(voMeasured);
  
    Serial.print(" - Voltage: ");
    Serial.print(calcVoltage);
  
    Serial.print(" - Dust Density [ug/m3]: ");
    Serial.println(dustDensity);    
    
    
    
    
    
    
    
    double t = dustDensity;
    last_val = t;
    

    
    return t;  
}

void setup() {
pinMode(5, OUTPUT);
  Serial.begin(115200);
  WiFi.softAPdisconnect(true); // wyłączenie rozgłaszania sieci ESP"
  //sensors.begin();
   
  // Set temperature callback
  
 
 char GUID[SUPLA_GUID_SIZE] = {xxxxxxxxxxxxxxx};  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid
  uint8_t mac[6] = {0x00, 0x02, 0x01, 0x03, 0x04, 0x05};

  SuplaDevice.addRelay(12, true);                 
  SuplaDevice.addRelay(13, true);              
  SuplaDevice.addRelay(15, true);
  SuplaDevice.addDS18B20Thermometer();


  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "svr8.supla.org",  // SUPLA server address
                    xxxx,                 // Location ID 
                    "xxxx");               // Location Password
    
}


void loop() {
  
  if (WiFi.status() != WL_CONNECTED) // Jeżeli sieć WiFi nie jest podłączona, wywołaj procedurę łączenia
  {
    WiFi_up();
  }
  
  SuplaDevice.iterate();
  SuplaDevice.setTemperatureCallback(&get_temperature);
}


// Supla.org ethernet layer
    int supla_arduino_tcp_read(void *buf, int count) {
        _supla_int_t size = client.available();
       
        if ( size > 0 ) {
            if ( size > count ) size = count;
            return client.read((uint8_t *)buf, size);
        };
    
        return -1;
    };
    
    int supla_arduino_tcp_write(void *buf, int count) {
        return client.write((const uint8_t *)buf, count);
    };
    
    bool supla_arduino_svr_connect(const char *server, int port) {
          return client.connect(server, 2015);
    }
    
    bool supla_arduino_svr_connected(void) {
          return client.connected();
    }
    
    void supla_arduino_svr_disconnect(void) {
         client.stop();
    }
    
    void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) {

       WiFi_up();
    }

SuplaDeviceCallbacks supla_arduino_get_callbacks(void) {
          SuplaDeviceCallbacks cb;
          
          cb.tcp_read = &supla_arduino_tcp_read;
          cb.tcp_write = &supla_arduino_tcp_write;
          cb.eth_setup = &supla_arduino_eth_setup;
          cb.svr_connected = &supla_arduino_svr_connected;
          cb.svr_connect = &supla_arduino_svr_connect;
          cb.svr_disconnect = &supla_arduino_svr_disconnect;
          cb.get_temperature = &get_temperature;
           cb.get_temperature_and_humidity = NULL;
          cb.get_rgbw_value = NULL;
          cb.set_rgbw_value = NULL;
          
          return cb;
}

void WiFi_up() // Procedura podłączenia do sieci WiFi
{
  Serial.print("Proba podlaczenia do sieci ");
  Serial.println(ssid);

  WiFi.begin(ssid, password); // Próba podłączenia do sieci


  for (int x = 60; x > 0; x--) // Powtarzaj pętlę maksymanie maksymalnie 30 sekund (ponieważ przy każdym elsie jest 0,5 sekundy zwłoki)
  {
    if (WiFi.status() == WL_CONNECTED) // Jezeli WiFi jest podłączone
    {
      break;                           // to zatrzymaj pętlę
    }
    else                                 // w przeciwnym wypadku
    {
      Serial.print(".");               // wystaw na serial .
      delay(500);                      // i czekaj 0,5 sekundy
    }

  }

  if (WiFi.status() == WL_CONNECTED) // Jeżeli połączenie z siecią zostało nawiązane, wyślij na serial jego parametry
  {
    Serial.println("");
    Serial.println("Polaczenie nawiazane");
    Serial.println("Adres IP: ");
    Serial.print(WiFi.localIP());
    Serial.print(" / ");
    Serial.println(WiFi.subnetMask());
    Serial.print("Brama: ");
    Serial.println(WiFi.gatewayIP());
    long rssi = WiFi.RSSI();
    Serial.print("Sila sygnalu (RSSI): ");
    Serial.print(rssi);
    Serial.println(" dBm");
  }
  else    // w przeciwnym wypadku poinformuj przez serial o nieudanej próbie
  {
    Serial.println("");
    Serial.println("Polaczenia nie udalo sie nawiazac");
  }
}
sroka222
Posts: 22
Joined: Sun Sep 25, 2016 10:45 am

Thu Oct 11, 2018 5:32 pm

Dzięki, teraz odczyt wygląda o wiele lepiej :)
Post Reply