257 Median filter added to ultasonic

This commit is contained in:
Dmitry Borisenko
2020-10-12 01:30:24 +03:00
parent a1eb94c4b3
commit d9556f5b31
8 changed files with 80 additions and 39 deletions

View File

@@ -43,7 +43,7 @@
}, },
{ {
"type": "h4", "type": "h4",
"title": "LittleFS version: 256" "title": "LittleFS version: 257"
}, },
{ {
"type": "hr" "type": "hr"
@@ -130,6 +130,15 @@
"action": "/set?sceninit", "action": "/set?sceninit",
"class": "btn btn-block btn-default" "class": "btn btn-block btn-default"
}, },
{
"type": "hr"
},
{
"type": "link",
"title": "Ручная настройка",
"action": "/?set.manual",
"class": "btn btn-block btn-default"
},
{ {
"type": "link", "type": "link",
"title": "Инструкция к системе автоматизации", "title": "Инструкция к системе автоматизации",

View File

@@ -1,30 +1,38 @@
{ {
"configs": [ "configs": [
"/config.setup.json", "/config.setup.json",
"/config.option.json", "/config.option.json",
"/config.live.json", "/config.live.json",
"/lang/lang.ru.json" "/lang/lang.ru.json"
], ],
"class": "col-sm-offset-1 col-sm-10", "class": "col-sm-offset-1 col-sm-10",
"content": [ "content": [
{ {
"type": "h5", "type": "h5",
"title": "{{name}}", "title": "{{name}}",
"class": "alert-default" "class": "alert-default"
}, },
{ {
"type": "link", "type": "link",
"title": "{{ButMainPage}}", "title": "{{ButMainPage}}",
"action": "/", "action": "/",
"class": "btn btn-block btn-default" "class": "btn btn-block btn-default"
}, },
{ {
"type": "file", "type": "file",
"state": "s.conf.csv", "state": "s.conf.csv",
"style": "width:100%;height:350px", "style": "width:100%;height:350px",
"title": "Сохранить", "title": "Сохранить",
"action": "/set?saveItems", "action": "/set?saveItems",
"class": "btn btn-block btn-default" "class": "btn btn-block btn-default"
} },
] {
} "type": "file",
"state": "s.scen.txt",
"style": "width:100%;height:350px",
"title": "Сохранить",
"action": "/set?sceninit",
"class": "btn btn-block btn-default"
}
]
}

View File

@@ -2,7 +2,7 @@
//=================Firmeare================= //=================Firmeare=================
#define FIRMWARE_NAME "esp8266-iotm" #define FIRMWARE_NAME "esp8266-iotm"
#define FIRMWARE_VERSION 256 #define FIRMWARE_VERSION 257
#define FLASH_4MB true #define FLASH_4MB true
//=================System=================== //=================System===================

View File

@@ -4,6 +4,9 @@
#include "Class/LineParsing.h" #include "Class/LineParsing.h"
#include "Global.h" #include "Global.h"
#include "items/SensorConvertingClass.h" #include "items/SensorConvertingClass.h"
#include "GyverFilters.h"
GMedian<6, int> testFilter;
class SensorUltrasonic : public SensorConvertingClass { class SensorUltrasonic : public SensorConvertingClass {
public: public:
@@ -33,6 +36,8 @@ class SensorUltrasonic : public SensorConvertingClass {
long duration_ = pulseIn(echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m long duration_ = pulseIn(echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m
value = duration_ / 29 / 2; value = duration_ / 29 / 2;
value = testFilter.filtered(value);
value = this->mapping(key, value); value = this->mapping(key, value);
float valueFl = this->correction(key, value); float valueFl = this->correction(key, value);
eventGen(key, ""); eventGen(key, "");

View File

@@ -1,7 +1,7 @@
name=GyverFilters name=GyverFilters
version=2.0 version=2.1
author=AlexGyver <beragumbo@ya.ru> author=AlexGyver <alex@alexgyver.ru>
maintainer=AlexGyver <beragumbo@ya.ru> maintainer=AlexGyver <alex@alexgyver.ru>
sentence=Library with few filters for data. sentence=Library with few filters for data.
paragraph=Includes median, running average, AB, simplified Kalman and linear approximation filtering algorithms. paragraph=Includes median, running average, AB, simplified Kalman and linear approximation filtering algorithms.
category=Data Processing category=Data Processing

View File

@@ -7,7 +7,8 @@
#include <filters/runningAverage.h> #include <filters/runningAverage.h>
/* /*
GyverFilters - библиотека с некоторыми удобными фильтрами: GyverFilters - библиотека с некоторыми удобными фильтрами.
Документация: https://alexgyver.ru/gyverfilters/
- GFilterRA - компактная альтернатива фильтра экспоненциальное бегущее среднее (Running Average) - GFilterRA - компактная альтернатива фильтра экспоненциальное бегущее среднее (Running Average)
- GMedian3 - быстрый медианный фильтр 3-го порядка (отсекает выбросы) - GMedian3 - быстрый медианный фильтр 3-го порядка (отсекает выбросы)
- GMedian - медианный фильтр N-го порядка. Порядок настраивается в GyverFilters.h - MEDIAN_FILTER_SIZE - GMedian - медианный фильтр N-го порядка. Порядок настраивается в GyverFilters.h - MEDIAN_FILTER_SIZE
@@ -23,4 +24,5 @@
- Улучшен и исправлен median и median3 - Улучшен и исправлен median и median3
- Улучшен linear - Улучшен linear
- Смотрите примеры! Использование этих фильтров чуть изменилось - Смотрите примеры! Использование этих фильтров чуть изменилось
- 2.1: Исправлен расчёт дельты в линейном фильтре
*/ */

View File

@@ -19,7 +19,7 @@ public:
a = a - (long)sumX * sumY; a = a - (long)sumX * sumY;
a = (float)a / (arrSize * sumX2 - sumX * sumX); a = (float)a / (arrSize * sumX2 - sumX * sumX);
b = (float)(sumY - (float)a * sumX) / arrSize; b = (float)(sumY - (float)a * sumX) / arrSize;
delta = a * arrSize; // расчёт изменения delta = a * (x_array[arrSize-1] - x_array[0]); // расчёт изменения
} }
float getA() {return a;} // получить коэффициент А float getA() {return a;} // получить коэффициент А
float getB() {return b;} // получить коэффициент В float getB() {return b;} // получить коэффициент В
@@ -27,4 +27,23 @@ public:
private: private:
float a, b, delta; float a, b, delta;
}; };
/*
Сам алгоритм выглядит так:
void loop() {
sumX = 0;
sumY = 0;
sumX2 = 0;
sumXY = 0;
for (int i = 0; i < steps; i++) {
sumX += X[i];
sumY += Y[i];
sumX2 += X[i] * X[i];
sumXY += X[i] * Y[i];
}
a = (steps * sumXY - sumX * sumY) / (steps * sumX2 - sumX * sumX);
b = (sumY - a * sumX) / steps;
int delta = steps * a;
}
*/

View File

@@ -1,6 +1,4 @@
#include "Global.h" #include "Global.h"
//
#include <LITTLEFS.h> #include <LITTLEFS.h>
void sendLogData(String file, String topic); void sendLogData(String file, String topic);