Помогите реализовать. Розлив воды (5 литров от кнопки).
- Войдите на сайт для отправки комментариев
Чт, 29/09/2016 - 04:31
Доброе утро (день, вечер)! Всем привет Ардуиноводам! Помогите пожалуйста написать скетч для моей приблуды, есть датчик холла (расходомер воды) YF-S201 и электромагнитный клапан хочу, чтоб при достижении в расходомере 5 литров воды электромагнитный клапан закрывался и чтоб это все включалось кнопкой (то есть нажал я на кнопку водичка потекла в тару наполнилась и клапан закрылся, захотел повторить процесс, так же нажал на кнопку, и водичка потекла повторно до полного уровня воды (5 литров)) и + кнопочку вторую для не прерывного подачи воды.
где пример вашего скетча, где хоть что-то работает?
Иначе - в тему "Ищу исполнителя".
Спасибо за ответ! В данное время нахожусь на работе( Позже скину. Половину дописал при помощи гугла половину не осилил. Нуждаюсь господин Tomasina в вашей помощи!
Что бы отсчитать 5 литром, вам нужно понять сколько импульсов должно придти на 10 грам воды, и уже высти отсчет пролитой воды! Почему десять - дискретность! По примеру работы ТРК,есть обьемамер, в котором есть камера обьемам 10см-куб, при заполнении этой камеры, вращяется механический вал. На вал одивается так называемый счетчик имульсов, при повороте вала , счетчик отдает импульсы. МК, по кольчеству поступивших импульсов, понимат что пролилось 10грам, ну и далее
Думаю что принцеп будет такой!
Еще, думаю нужно два клапана. Один клапан снежения, другой полностью закрывае поток. Это нужно что бы небыло переливов.
Вот начало скетча, далее думаю еще...(
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; // Опять же, число импульсов в ноль } }