Помогите реализовать. Розлив воды (5 литров от кнопки).

TDV26
Offline
Зарегистрирован: 29.09.2016

Доброе утро (день, вечер)! Всем привет Ардуиноводам! Помогите пожалуйста написать скетч для моей приблуды, есть датчик холла (расходомер воды) YF-S201 и электромагнитный клапан хочу, чтоб при достижении в расходомере 5 литров воды электромагнитный клапан закрывался и чтоб это все включалось кнопкой (то есть нажал я на кнопку водичка потекла в тару наполнилась и клапан закрылся, захотел повторить процесс, так же нажал на кнопку, и водичка потекла повторно до полного уровня воды (5 литров)) и + кнопочку вторую для не прерывного подачи воды.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

где пример вашего скетча, где хоть что-то работает?

Иначе - в тему "Ищу исполнителя".

TDV26
Offline
Зарегистрирован: 29.09.2016

Спасибо за ответ! В данное время нахожусь на работе( Позже скину. Половину дописал при помощи гугла половину не осилил. Нуждаюсь господин Tomasina в вашей помощи!

Miamin
Offline
Зарегистрирован: 29.02.2016

Что бы отсчитать 5 литром, вам нужно понять сколько импульсов должно придти на 10 грам воды, и уже высти отсчет пролитой воды! Почему десять - дискретность! По примеру работы ТРК,есть обьемамер, в котором есть камера обьемам 10см-куб, при заполнении этой камеры, вращяется механический вал. На вал одивается так называемый счетчик имульсов, при повороте вала , счетчик отдает импульсы. МК, по кольчеству поступивших импульсов, понимат что пролилось 10грам, ну и далее

Думаю что принцеп будет такой!

Еще, думаю нужно два клапана. Один клапан снежения, другой полностью закрывае поток. Это нужно что бы небыло переливов.

TDV26
Offline
Зарегистрирован: 29.09.2016

Вот начало скетча, далее думаю еще...(

  const int sensor = 2; // датчика расхода YF-S201
  int litros_Hora; //Переменная, которая хранит поток (л / ч)
  volatile int pulsos = 0; //Переменная, которая хранит число импульсов
  unsigned long tiempoAnterior = 0; // Переменная, чтобы вычислить время, прошедшее 
  unsigned long pulsos_Acumulados = 0; // Переменная, которая хранит количество накопленных импульсов
  float litros; // // Переменная, которая хранит накопленное количество литров
  
  // Служба обработки прерывания (ISR)
  void flujo() 
  {
    pulsos++; //Увеличение на единицу числа импульсов
  }
   
  void setup()
  {
    pinMode(sensor, INPUT_PULLUP); // 
    // Прерывание INT0, вызывает ISR называемый "поток" в каждом нарастающем фронте в цифровом выводе 2
    attachInterrupt(digitalPinToInterrupt(sensor), flujo, RISING);  
    tiempoAnterior = millis(); // Держит время, необходимое для запуска установки
  }
   
  void loop ()
  {
    // Каждую секунду рассчитываем и выводим количество литров
    if(millis() - tiempoAnterior > 1000)
    {
      //выполняем вычисления
      tiempoAnterior = millis(); // Обновление нового времени
      pulsos_Acumulados += pulsos; // Количество накопленных импульсов
      litros_Hora = (pulsos * 60 / 7.5); // Q = frecuencia * 60/ 7.5 (L/chasa)
      litros = pulsos_Acumulados*1.0/450; // Каждый 450 пульс один литр
      pulsos = 0; // Опять же, число импульсов в ноль      
    }
  }