Бочка

Infernus
Offline
Зарегистрирован: 11.10.2018

Здравствуйте. Решил научиться програмированию в среде ардуино. создал новый проект под названием "бочка". Задача: изначально мониторинг уровня воды в бочке посредством 1602 экрана и датчика HC-SR04.вывод на экран количество воды в литрах. Но вот незадача. везде идет расстояние в см. Помогите пожалуйста завершить проект.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

та мерий для наглядности объем воды в сантиметрах, раз тебе в школе за формулу обьема цилиндра не рассказывали. 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Infernus, HC-SR04 не годится, заржавеет через пару месяцев от конденсата.  Нужен гермо-датчик.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Infernus пишет:

Но вот незадача. везде идет расстояние в см. 

А что, объём никак теперь не посчитать, если расстояние в сантиметрах? Подсказываю: один литр воды - это один кубический дециметр. Т.е. объём можно считать не только в кубометрах, внезапно. И переводить из одних единиц в другие - тоже можно, арифметика.

Если не секрет: в каком классе учишься? Если до шестого - я ещё пойму, если старше - лучше тогда бросить ардуину до тех пор, пока не будет повторен курс арифметики и начал геометрии.

Infernus
Offline
Зарегистрирован: 11.10.2018

Что это? Ни когда такого не видел.

 

Infernus
Offline
Зарегистрирован: 11.10.2018

Спасибо. заказал. ждем.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

дак там тоже расстояние до зеркала воды в сантиметрах будут

Infernus
Offline
Зарегистрирован: 11.10.2018
//сонар бочки 10,2018

// -------НАСТРОЙКИ-------
#include <LCD_1602_RUS.h>
LCD_1602_RUS lcd(0x3F,16,2);  // Устанавливаем какой дисплей


#define FIRST_KEY_PIN A0
#define KEY_CONT 3
// сонар
#define ECHO 3
#define TRIG 2
#define LED_PIN 6 
int brightness = 0;  // Диапазон от 0 до 255. Лампу не включать идут помехи на измерение датчиком HC-SR04


// крутая библиотека сонара
#include <NewPing.h>
NewPing sonar(TRIG, ECHO, 400);

float dist_3[3] = {0.0, 0.0, 0.0};   // массив для хранения трёх последних измерений
float middle, dist, dist_filtered;
float k;
byte i, delta;
unsigned long dispIsrTimer, sensTimer;

void setup() {
 pinMode(10,OUTPUT);     // Реле №1 , красный светодиод
  pinMode(11,OUTPUT);     // Реле №2 , желтый светодиод
  pinMode(12,OUTPUT);     // Реле №3, зеленый светодиод
  pinMode(LED_PIN,OUTPUT);
    // +12V лампа

  lcd.init();                      // инициализируем дисплей                
  lcd.backlight();                 // Включаем подсветку дисплея
  lcd.setCursor(0, 0);
  lcd.print(L"уровень в бочке");

}

void loop() {
  
  if (millis() - sensTimer > 500) {                          // измерение и вывод каждые 0,5с
    // счётчик от 0 до 2
    // каждую итерацию таймера i последовательно принимает значения 0, 1, 2, и так по кругу
    if (i > 1) i = 0;
    else i++;

    dist_3[i] = (float)sonar.ping() / 1; 
    if  (!digitalRead) dist_3[i];                                   // 
    dist = middle_of_3(dist_3[0], dist_3[1], dist_3[2]);                    // получить расстояние в текущую ячейку массива
                                                                             // фильтровать медианным фильтром из 3ёх последних измерений

    delta = abs(dist_filtered - dist);                      // расчёт изменения с предыдущим
    if (delta > 1) k = 0.7;                                 // если большое - резкий коэффициент
    else k = 0.1;                                           // если маленькое - плавный коэффициент

    dist_filtered = dist * k + dist_filtered * (1 - k);     // фильтр "бегущее среднее"
    
                                             // очистить дисплей
                         // вывести
    sensTimer = millis();                                   // сбросить таймер
  lcd.setCursor(1,1);
  lcd.print(dist_filtered,1);
  
  }
  if (digitalRead(A0)==HIGH){digitalWrite(11,LOW); }

  else {digitalWrite(11,HIGH);}
if (dist_filtered <= 250) {      // первое условие, если расстояние меньше либо равно 30,
    digitalWrite(12,LOW); // тогда включить первый светодиод
    
}
else  {
    digitalWrite(12,HIGH);  // если условие не выполняется, выключить светодиод
  }
  if (dist_filtered >= 2583) {      // первое условие, если расстояние меньше либо равно 30,
    digitalWrite(10,LOW); // тогда включить первый светодиод
    
}
else  {
    digitalWrite(10,HIGH);  // если условие не выполняется, выключить светодиод
  }
}

// медианный фильтр из 3ёх значений
float middle_of_3(float a, float b, float c) {
  if ((a <= b) && (a <= c)) {
    middle = (b <= c) ? b : c;
  }
  else {
    if ((b <= a) && (b <= c)) {
      middle = (a <= c) ? a : c;
    }
    else {
      middle = (a <= b) ? a : b;
    }
  }
  return middle;
}

 

Здесь что то не правильно. при отдних и тех же обьемах воды, показания всегда разные.
Infernus
Offline
Зарегистрирован: 11.10.2018

как сантиметры преобразовать в литры с обратным отсчетом. домустим 42 см= 0 литрам, а 3 см= равны 40 литрам???

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

из расстояния до дна пустой бочки вычесть измеренное расстояние.  

sva_khv
Offline
Зарегистрирован: 19.12.2016

Infernus пишет:

как сантиметры преобразовать в литры с обратным отсчетом. домустим 42 см= 0 литрам, а 3 см= равны 40 литрам???

https://o-builder.ru/kalkulyator-obema-zidkosti-bochki/

http://www.center-pss.ru/math/obiemvlitrah/emkost.htm

sadman41
Offline
Зарегистрирован: 19.10.2016

DetSimen пишет:

из расстояния до дна пустой бочки вычесть измеренное расстояние.  

Это если он пессимист.

А ежели человек оптимист, то надо бы прибавлять что-то.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Infernus пишет:

как сантиметры преобразовать в литры с обратным отсчетом. домустим 42 см= 0 литрам, а 3 см= равны 40 литрам???

А что - пропорциям нынче в школе не учат? Вот совсем всё так плохо?

Infernus
Offline
Зарегистрирован: 11.10.2018

вопрос не о геометрии, а как в скейтч это проприсать.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Infernus пишет:

вопрос не о геометрии, а как в скейтч это проприсать.

Пропорции - это не геометрия, а арифметика. На, дарю: https://planetcalc.ru/1028/

bwn
Offline
Зарегистрирован: 25.08.2014

1л.дист.=1дм.куб=1кг=1000мл.=1000см.куб.=1000мг. Меряйте в чем душа просит.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Чего данная тема делает в разделе "Проекты"? Пойду, пожалуй, попрошу Александра эту дичь отсюда перенести...

b707
Offline
Зарегистрирован: 26.05.2017

DIYMan пишет:

Чего данная тема делает в разделе "Проекты"? Пойду, пожалуй, попрошу Александра эту дичь отсюда перенести...

лучше вообще грохнуть :)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

b707 пишет:

DIYMan пишет:

Чего данная тема делает в разделе "Проекты"? Пойду, пожалуй, попрошу Александра эту дичь отсюда перенести...

лучше вообще грохнуть :)

Ну это уже на откуп всемогущим :)

bwn
Offline
Зарегистрирован: 25.08.2014

b707 пишет:

лучше вообще грохнуть :)

Вай, зачем такой как собак собак злой?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

bwn пишет:

b707 пишет:

лучше вообще грохнуть :)

Вай, зачем такой как собак собак злой?