wskaźnik poziomu zbiornika bezodpływowego nieczystości ciekłych - szambo!

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
Post Reply
NetAs
Posts: 73
Joined: Mon May 28, 2018 7:06 am
Location: Wrocław
Contact:

Tue Jan 15, 2019 9:56 am

Czekam na części z Alli, wcześniejszy projekt na czujniku ultradźwiękowym nie działa za dobrze u mnie, zachodzi kroplami "wody" :x i pokazuje bzdury. Zamówiłem czujniki ciśnienia i na nich spróbuje to zrobić.
Patryk
Posts: 451
Joined: Mon Jan 07, 2019 7:51 pm

Tue Jan 15, 2019 12:51 pm

Czy może ma Pan na myśli czujnik MPX53DP ? Jak by się coś takiego udało zgrać z esp8266 to według mnie było by super. Kiedyś widziałem podobny projekt tylko że na arduino chyba z czujnikiem MPX2010DP.
NetAs
Posts: 73
Joined: Mon May 28, 2018 7:06 am
Location: Wrocław
Contact:

Wed Jan 16, 2019 4:22 pm

zamówiłem MPX5010DP, na nim to zrobię.

Kategoria: Czujniki, przetwornik ciśnienia
Seria: MPX5010
Ciśnienie typ: Różnicowego
Ciśnienie robocze: 1.45 PSI
Port rozmiar: Mężczyzna, 0.194 "(4.9276mm) tube
Wyjście: 0 ~ 4.7 v
Napięcie zasilania: 4.75 v ~ 5.25 v
Zakończenie Typ: PCB
Temperatura pracy:-40 °C do 125 °C
elmaya
Posts: 317
Joined: Wed Jun 27, 2018 5:48 pm
Location: Sevilla

Wed Jan 16, 2019 4:54 pm

MPX5010DP ten model mierzy maksymalnie 1 metr głębokości
MPX5050DP Środki do 5 metrów
Patryk
Posts: 451
Joined: Mon Jan 07, 2019 7:51 pm

Wed Jan 16, 2019 6:23 pm

Dlatego wydaje mi się, że MPX53DP był by najlepszy. Bo mierzy do 5m oraz napięcie zasilania ma 3-6V , więc by nie było problemów z zasilaniem prosto z 3,3V.
Ale to już szczegół.
Najważniejsze by się udało napisać taki program pod SUPLE, a potem to tylko zmiana parametrów czujnika.
Trzymam kciuki.
Patryk
Posts: 451
Joined: Mon Jan 07, 2019 7:51 pm

Wed Jan 16, 2019 6:59 pm

Przepraszam, że tak post za postem.
Gdyż bardzo mnie ten temat interesuje.
Czy ma Pan już może jakiś szkic programu ?
Gdyż zasada działania tego czujnika jest bardzo prosta.
Np MPX5010DP podaje na wyjściu napięcie liniowo od 0V przy 0m do 5V przy 1m. Tak, że nawet bez czujnika można by już taki program przetestować podając na wejście analogowe nap od 0V do 3.3V i widzieć jak się program zachowuje.
Z góry dziękuję za odpowiedź.
elmaya
Posts: 317
Joined: Wed Jun 27, 2018 5:48 pm
Location: Sevilla

Thu Jan 17, 2019 10:53 pm

zamówiłem MPX5100DP, na nim to zrobię.

Image

oprogramowanie testowe

dla MPX5010-MPX5050-MPX5100.
przycisk w konfiguracji Wifi Gpio 0 (D3).
przycisk do kalibracji (zero) Gpio 14 (D5).
zmienić linię 28 zgodnie z typem czujnika.


dla modułów z wejściem 1.1v
Image


dla modułów z wejściem 3.3v
Image

Code: Select all

#include <FS.h>       // ---- esp board manager 2.4.2 --- iwip Variant V2 higher Bandwidth
#include <EEPROM.h>
#include <ESP8266WiFi.h>
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <DNSServer.h>
#include <WiFiManager.h>     //--------- https://github.com/tzapu/WiFiManager/tree/0.14 -------------
#include <ArduinoJson.h>     //--------- https://github.com/bblanchon/ArduinoJson/tree/v5.13.2 ------
#include <Ticker.h> 
extern "C"
{
#include "user_interface.h"
}
#include <DHT.h>
#include <OneWire.h>
WiFiClient client;
Ticker ticker;
#define onboard_led 2      //D4           status led
#define TRIGGER_PIN 0      // D3     wifi configuration pin --------pin konfiguracji wifi
#define Calibration_PIN 14 // D5    MPX zero calibration pin -------Pin kalibracji zerowej MPX
unsigned long wifi_checkDelay = 60000;
unsigned long wifimilis; 
int C_W_state = HIGH; 
int last_C_W_state = HIGH;
unsigned long time_last_C_W_change = 0; 
long C_W_delay = 5000;               // config delay 5 seconds           ----------        opóźnienie konfiguracji 5 sekund
int MPX_mtbs = 15000;                // mean time between MPX update 
double MPX_tipo = 200.0;             // --------------- MPX5100= 100.0 ----- MPX5050= 200.0 ----- MPX5010= 1000.0 ---------------
unsigned long MPX_lasttime;   
double MPX_Value = 0;
double distance = 0;
int MPX_Calibration = 0;
int timeout           = 120;
char Supla_server[40];
char Location_id[15];
char Location_Pass[20];
byte mac[6];

//flag for saving data
bool shouldSaveConfig = false;
bool initialConfig = false;

void get_MPX(){ 
  MPX_Value = (analogRead(A0)- MPX_Calibration); //Read analog value from A0 pin
  yield();
  MPX_Value = map(MPX_Value, 1, (980 - MPX_Calibration) , 1, 1024) / MPX_tipo; 
  Serial.print("depth: ");  
  Serial.print(MPX_Value,2);
  Serial.println(" m"); 
  yield();
  SuplaDevice.channelDoubleValueChanged(0, MPX_Value);
}

void tick(){
  int state = digitalRead(onboard_led);  
  digitalWrite(onboard_led, !state);  
}

void saveConfigCallback () {
  Serial.println("Should save config");
  shouldSaveConfig = true;
}

void ondemandwifiCallback () {
  ticker.attach(0.2, tick);
  WiFiManagerParameter custom_Supla_server("server", "supla server", Supla_server, 40);
  WiFiManagerParameter custom_Location_id("ID", "Location_id", Location_id, 15);
  WiFiManagerParameter custom_Location_Pass("Password", "Location_Pass", Location_Pass, 20);

  WiFiManager wifiManager;

  wifiManager.setSaveConfigCallback(saveConfigCallback);

  wifiManager.addParameter(&custom_Supla_server);
  wifiManager.addParameter(&custom_Location_id);
  wifiManager.addParameter(&custom_Location_Pass);

  wifiManager.setCustomHeadElement("<style>html{ background-color: #01DF3A;}</style><div class='s'><svg version='1.1' id='l' x='0' y='0' viewBox='0 0 200 200' xml:space='preserve'><path d='M59.3,2.5c18.1,0.6,31.8,8,40.2,23.5c3.1,5.7,4.3,11.9,4.1,18.3c-0.1,3.6-0.7,7.1-1.9,10.6c-0.2,0.7-0.1,1.1,0.6,1.5c12.8,7.7,25.5,15.4,38.3,23c2.9,1.7,5.8,3.4,8.7,5.3c1,0.6,1.6,0.6,2.5-0.1c4.5-3.6,9.8-5.3,15.7-5.4c12.5-0.1,22.9,7.9,25.2,19c1.9,9.2-2.9,19.2-11.8,23.9c-8.4,4.5-16.9,4.5-25.5,0.2c-0.7-0.3-1-0.2-1.5,0.3c-4.8,4.9-9.7,9.8-14.5,14.6c-5.3,5.3-10.6,10.7-15.9,16c-1.8,1.8-3.6,3.7-5.4,5.4c-0.7,0.6-0.6,1,0,1.6c3.6,3.4,5.8,7.5,6.2,12.2c0.7,7.7-2.2,14-8.8,18.5c-12.3,8.6-30.3,3.5-35-10.4c-2.8-8.4,0.6-17.7,8.6-22.8c0.9-0.6,1.1-1,0.8-2c-2-6.2-4.4-12.4-6.6-18.6c-6.3-17.6-12.7-35.1-19-52.7c-0.2-0.7-0.5-1-1.4-0.9c-12.5,0.7-23.6-2.6-33-10.4c-8-6.6-12.9-15-14.2-25c-1.5-11.5,1.7-21.9,9.6-30.7C32.5,8.9,42.2,4.2,53.7,2.7c0.7-0.1,1.5-0.2,2.2-0.2C57,2.4,58.2,2.5,59.3,2.5z M76.5,81c0,0.1,0.1,0.3,0.1,0.6c1.6,6.3,3.2,12.6,4.7,18.9c4.5,17.7,8.9,35.5,13.3,53.2c0.2,0.9,0.6,1.1,1.6,0.9c5.4-1.2,10.7-0.8,15.7,1.6c0.8,0.4,1.2,0.3,1.7-0.4c11.2-12.9,22.5-25.7,33.4-38.7c0.5-0.6,0.4-1,0-1.6c-5.6-7.9-6.1-16.1-1.3-24.5c0.5-0.8,0.3-1.1-0.5-1.6c-9.1-4.7-18.1-9.3-27.2-14c-6.8-3.5-13.5-7-20.3-10.5c-0.7-0.4-1.1-0.3-1.6,0.4c-1.3,1.8-2.7,3.5-4.3,5.1c-4.2,4.2-9.1,7.4-14.7,9.7C76.9,80.3,76.4,80.3,76.5,81z M89,42.6c0.1-2.5-0.4-5.4-1.5-8.1C83,23.1,74.2,16.9,61.7,15.8c-10-0.9-18.6,2.4-25.3,9.7c-8.4,9-9.3,22.4-2.2,32.4c6.8,9.6,19.1,14.2,31.4,11.9C79.2,67.1,89,55.9,89,42.6z M102.1,188.6c0.6,0.1,1.5-0.1,2.4-0.2c9.5-1.4,15.3-10.9,11.6-19.2c-2.6-5.9-9.4-9.6-16.8-8.6c-8.3,1.2-14.1,8.9-12.4,16.6C88.2,183.9,94.4,188.6,102.1,188.6z M167.7,88.5c-1,0-2.1,0.1-3.1,0.3c-9,1.7-14.2,10.6-10.8,18.6c2.9,6.8,11.4,10.3,19,7.8c7.1-2.3,11.1-9.1,9.6-15.9C180.9,93,174.8,88.5,167.7,88.5z'/></svg>");

  wifiManager.setMinimumSignalQuality();

    wifiManager.setConfigPortalTimeout(timeout);

    if (!wifiManager.startConfigPortal("SuplaMPX")) {   //    ----wifi configuration ap name---
      Serial.println("failed to connect and hit timeout");
      delay(3000);
      ESP.restart();
      delay(5000);
    }
    Serial.println("connected...yeey :)");
    
    strcpy(Supla_server, custom_Supla_server.getValue());
    strcpy(Location_id, custom_Location_id.getValue());
    strcpy(Location_Pass, custom_Location_Pass.getValue());
}

double get_distance(int channelNumber, double distance) {
    //return distance;      
    }

void setup() {    //    ------------------------ Setup --------------------------

   wifi_set_sleep_type(NONE_SLEEP_T);

  Serial.begin(115200);
  EEPROM.begin(128);  
  pinMode(TRIGGER_PIN, INPUT_PULLUP);
  pinMode(Calibration_PIN, INPUT_PULLUP);
  pinMode(onboard_led, OUTPUT);
  
  if (WiFi.SSID()==""){
    initialConfig = true;
  }
  ticker.attach(0.8, tick);
  
  Serial.println("mounting FS...");
  
  if (SPIFFS.begin()) {
    Serial.println("mounted file system");
    if (SPIFFS.exists("/config.json")) {
      //file exists, reading and loading
      Serial.println("reading config file");
      File configFile = SPIFFS.open("/config.json", "r");
      if (configFile) {
        Serial.println("opened config file");
        size_t size = configFile.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf(new char[size]);

        configFile.readBytes(buf.get(), size);
        DynamicJsonBuffer jsonBuffer;         
        JsonObject& json = jsonBuffer.parseObject(buf.get());
        Serial.println(jsonBuffer.size());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed json");

          strcpy(Supla_server, json["Supla_server"]);
          strcpy(Location_id, json["Location_id"]);
          strcpy(Location_Pass, json["Location_Pass"]);

        } else {
          Serial.println("failed to load json config");
          
        }
      }
    }
  } else {
    Serial.println("failed to mount FS");
  }
  MPX_Calibration = EEPROM.read(1);
  Serial.print("Read MPX Calibration: ");
  Serial.println(MPX_Calibration);

  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.macAddress(mac);
  char GUID[SUPLA_GUID_SIZE] = {mac[WL_MAC_ADDR_LENGTH - 6], mac[WL_MAC_ADDR_LENGTH - 5], mac[WL_MAC_ADDR_LENGTH - 4], mac[WL_MAC_ADDR_LENGTH - 3],                                
                                mac[WL_MAC_ADDR_LENGTH - 2], mac[WL_MAC_ADDR_LENGTH - 1], mac[WL_MAC_ADDR_LENGTH - 1], mac[WL_MAC_ADDR_LENGTH - 2], 
                                mac[WL_MAC_ADDR_LENGTH - 3], mac[WL_MAC_ADDR_LENGTH - 4], mac[WL_MAC_ADDR_LENGTH - 5], mac[WL_MAC_ADDR_LENGTH - 6]};
  
  SuplaDevice.addDistanceSensor();

  SuplaDevice.setName("supla Mpx");    // Supla device name

  int LocationID = atoi(Location_id);
  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    Supla_server,      // SUPLA server address
                    LocationID,        // Location ID 
                    Location_Pass);    // Location Password
 WiFi.mode(WIFI_STA);
}

void loop() {

  SuplaDevice.iterate();

  if ( digitalRead(Calibration_PIN) == LOW )  {
    MPX_Calibration = analogRead(A0);
    Serial.print("Write MPX Calibration: ");
    Serial.println(MPX_Calibration);
    delay (1000);
    EEPROM.write(1, MPX_Calibration); 
    EEPROM.commit();
  }

  
  int C_W_read = digitalRead(TRIGGER_PIN);{  
   if (C_W_read != last_C_W_state) {       
     
     time_last_C_W_change = millis();
   }
   if ((millis() - time_last_C_W_change) > C_W_delay) {
     
     if (C_W_read != C_W_state) {     
       Serial.println("Triger sate changed");
       C_W_state = C_W_read;
       
       if (C_W_state == LOW) {
        ondemandwifiCallback () ;
       }
     }
    }
   last_C_W_state = C_W_read;            
   }

  if  (initialConfig)  {     
    ondemandwifiCallback () ;
    initialConfig = false; 
  }

  if (shouldSaveConfig) {
    Serial.println("saving config");
    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();
    json["Supla_server"] = Supla_server;
    json["Location_id"] = Location_id;
    json["Location_Pass"] = Location_Pass;

    File configFile = SPIFFS.open("/config.json", "w");
    if (!configFile) {
      Serial.println("failed to open config file for writing");
    }
    json.prettyPrintTo(Serial);
    json.printTo(configFile);
    configFile.close();
    Serial.println("config saved");
    shouldSaveConfig = false;
    WiFi.mode(WIFI_STA);
    ticker.detach();
    digitalWrite(onboard_led, HIGH);
    ESP.restart();
      delay(5000);
  }
  
  if (WiFi.status() != WL_CONNECTED) 
  {
    ticker.attach(0.8, tick);
    WiFi_up();
  }
  
if (millis() > MPX_lasttime + MPX_mtbs)  {    //--------------MPX callback--------------------
        get_MPX();

    MPX_lasttime = millis();
  } 
}

// 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 = NULL;
          cb.get_temperature_and_humidity = NULL;
          cb.get_distance = &get_distance;
          return cb;
}

void WiFi_up() // conect to wifi
{ 
  if (millis() > wifimilis)  {
  WiFi.begin(); 
  for (int x = 20; x > 0; x--) 
  {
    if (x == 1){
    wifimilis = (millis() + wifi_checkDelay) ; 
    } 
    if (WiFi.status() == WL_CONNECTED) 
    {    
     break;                           
    }
    else                              
    {
     yield();
     delay(500);   
      Serial.print(".");                
                         
    }
    
  }

  if (WiFi.status() == WL_CONNECTED)
  {
    ticker.detach();
    digitalWrite(onboard_led, HIGH);
    Serial.println("");
    Serial.println("CONNECTED");
    Serial.print("local IP: ");
    Serial.print(WiFi.localIP());
    Serial.print(" : ");
    Serial.print(WiFi.subnetMask());
    Serial.print(" : ");
    Serial.println(WiFi.gatewayIP());
    long rssi = WiFi.RSSI();
    Serial.print("Signal Strength (RSSI): ");
    Serial.print(rssi);
    Serial.println(" dBm");
  }
  if (WiFi.status() != WL_CONNECTED) 
  {
    Serial.println("");
    Serial.println("not connected");
  }
  }
}
Last edited by elmaya on Fri Jan 18, 2019 11:11 am, edited 1 time in total.
Patryk
Posts: 451
Joined: Mon Jan 07, 2019 7:51 pm

Fri Jan 18, 2019 12:30 am

BARDZO DZIĘKUJĘ !!!!!

Jestem początkującym i nie wiem co źle robię, ale nie widzi mi tego modułu SUPLA CLOUD.

Program wgrałem do wemos d1 mini - ok.
Połączyłem się z SuplaMPX - ok.
Następnie wchodzę przez 192.168.244.1 do konfiguracji - ok.
Jestem w panelu konfiguracyjnym.
Wpisuje własne dane w SSID i kod - ok.
Wpisuje własne dane w supla serwer, location_id oraz location_pass - ok.
Tu NIE wiem co wpisać (IP unset ) - więc nic nie wpisuje.
Daje SAVE.
Resetuje moduł.

Wchodzę do SUPLA CLOUD.
Zaznaczam rejestracje urządzeń : aktywna.

I NIC

Co źle robię ???
Bardzo dziękuje za odpowiedź.
elmaya
Posts: 317
Joined: Wed Jun 27, 2018 5:48 pm
Location: Sevilla

Fri Jan 18, 2019 9:07 am

stąd
Image
Patryk
Posts: 451
Joined: Mon Jan 07, 2019 7:51 pm

Fri Jan 18, 2019 9:14 am

Wpisałem podczas konfiguracji dane z żółtej tabelki.
I nic.
Post Reply