Я задачу с счётчиком решил иначе. В моём случае был просто геркон. И первые 10л он замкнут, следующие 10л разомкнут, и так по кругу. Одно изменение состояния контакта на противоположное - 10 литров. Если влупить воду на всю катушку, то смена состояний происходит не чаще ~ 15 сек., то есть частота низкая, можно несколько счётчиков опрашивать. Ну и делаете цикл, счётчик +1, и считаете литры. Меня интересовала больше динамика расхода, а не общее кол-во потребляемой воды, поэтому данные кидал в базу get запросом, через изернет модуль в режиме клиента.
Можно было заморочится, хранить значение в постоянной памяти, на случай перезагрузок, выкидывать их на сайтик прямо средствами изернет шилда, сделать поправочку на тариф и считать также в рублях. Но меня интересовали только графики расхода в сутки.
Просто я согласен с интересами, но дом - это то, что надо береч. Я делаю проекты по организации учёта расхода гвс, хвс, отопления. Приборов море по доступным ценам и открытым протоколом, можно подключить модем и пожалуста.
Ардуину я только начал использовать но кое кто дал понять - нужна перезагрузка ее, питание тоже надо 24ч и непрерывно, разработка интерфейса .
Во сколько тут люди готовы за решение именно этой прооблемы взять денег??
Я лучше пойду проверенным путём и простым. А сами сигналы у нас сами приборы выдают, тотже тмк-н20. Промприбор Калуга.
Если надо то могу подсказать по интерфейсу, но лучше зайдите на сайт того кто производит их и упростите для себя их интерфейс. В программе надо вводить такой параметр как импульс на литр. Потом время, усреднение часовое и суточное. Отчёт по часам, дням, месяцам и годовой отчёт (у нас так принято, для принятия в теплоснабжайку).
Счетчик сделал на основе простого делителя (так же можно и в Омметр переделать :) ).
Сами счетчик замыкаются при переходе с 0 на 9 и размыкание происходит при переходе с 2 на 3.
Алгоритм выполняется при срабатывании счетчиков последовательно, а так же если сробатывает один из счетчиков при замкнутом другом (то есть одновременное замыкание)
evgen66, в принципе можно сделать очень хитрый ход, настроив отрицательный вход компаратора на ту же ногу, где сидит INT0 (главный по пробудке), в режиме компаратора будет сравниваться напряжение на этой ноге, и опорное 1,1 вольта, с этим вообще нет проблем. Но в режиме пробудки через INT0 важно что-бы сигнал с датчика давал чёткую единицу на входе, это примерно 60% от величины напряжения питания. На компараторах я уже собаку сьел, могу помочь, но совмещать всё это с режимами сна и просыпанием через внешнее прерывания, - это совсем другая история.
Компаратор тоже имеет прерывания, но он здесь лишний ИМХО
Есть три варианта:
1. Привести входной сигнал к цифровому и по прерываниям на него реагировать. достаточно правильно подобрать сопротивление в верхнем плече. В крайнем случае можно npn транзистор на вход. Плюс этого варианта в простоте и схемы и программы
2. Использовать аналоговый вход. Просыпаться по таймеру и делать замер. Плюс в возможности обнаруживать обрыв провода к датчику. Минус в отсутствии прерывания по входу.
1+2 скомбинировать оба варианта, использовать аналоговый вход. В обычном режиме использовать его как вход прерываний PCINT. И периодически перенастраивать на АЦП и проверять обрыв
3. Компаратор. Прерывания будут, но в настройке сложнее чем 1.
Ой, и напридумали тут, компараторы, аналоговый вход... Здесь надо то всего-то по возрастающему фронту импульс засечь. Дискретный сигнал, что может быть проще?
Ой, и напридумали тут, компараторы, аналоговый вход... Здесь надо то всего-то по возрастающему фронту импульс засечь. Дискретный сигнал, что может быть проще?
Я конечно новичек ,но от ваших схем уши вянут! я подкличил через прерывания и без них очень просто!
тут все расписано прямо в скетче с прерыванием :
//
// светодиод, подключённый к digital pin 13 будет изменять своё
// состояние при изменении напряжения на digital pin 2
//
// 1 пин со счетчика воды на +5v ( он белый)
// 3 пин(синий) на землю - без резистора там он уже есть
// 4 пин(красный) на pin2 ардуина
// 2 пин (серый) не нужен
int r=0;
int pin = 13;
volatile int x = LOW;
void setup()
{
pinMode(pin, OUTPUT); // пин как выход
attachInterrupt(0, blink,CHANGE ); // привязываем 0-е прерывание к функции blink().
// mode: определяет, когда должно сработать прерывание. Определены следующие константы:
//LOW — вызов прерывания всякий раз, когда на порту низкий уровень напряжения;
//CHANGE – прерывание вызывается при изменении значения на входе;
//RISING – вызов прерывания при изменении уровня напряжения с низкого (LOW) на высокое(HIGH)
//FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкое (LOW)
}
void loop()
{
digitalWrite(pin, x);// выводим х
}
void blink()
{
x = !x; // меняем значение на противоположное
r=r++;
}
Позвольте поинтересоваться на на какое значение вы умножаете свою r чтобы получить кол-во воды в литрах , :)
Вопрос конечно с подвохом.. Потому как у вас два раза за 10 литров воды будет прерывание CHANGE.
Синий зачем на землю? Он при релейном подкючении не нужен. При релейной схеме используются белый и красный. Белый - верно на +5V arduino, красный - сигнал, НО нужно притянуть его через 10 кОм на землю, иначе на 20 метрах кабеля воду будут расодовать зеленные человечки - проходили знаем..
По всей теме конечно удивился.. Таких городулин понагородили - труба просто..
У меня год счетчик работает без всяки прерываний.. У меня loop проскакивает за 27-57 мс, у счетчика от 0 до 1 - 4литра воды, от 1 до 0 соотвественно 6, чтобы я за 57мс не поймал так назыаваемый "импульс", то нужно 0,057/4=0,01425 нужно времени чтобы проскочил 1 литр воды, соотвественно 1сек/0,01425= 70,175 ЛИТРА В СЕКУНДУ!!! Или 70,175*60=4 207,5 ллитра в минуту!!! Час даже считать не буду :) Впечатляет? Дальше становиться понятно, что ардуино должна быть наглухо тупая и медленная чтобы не успеть, поэтому я отказался от прерываний. все просто как в танке - ниже кусок из 10 000 срочек моего умного дома, работает год - нареканий нет, что в базе, то и на счетчике - цифры одинковые: (Вчера вечером приехали на дом в баню, взрослые всю ночь гульвасили, дети с утра "хочу джакузю" - результат по воде на графике ниже :) )
//===============Куда воткнут счетчик============
#define pinVoda_tick 12 //счетчик воды
//=================переменная для предыдущего состояния счетчика воды
boolean stateCheck_voda;
//=============Считаем расход воды================
void voda_tick(){
boolean current_status=digitalRead(pinVoda_tick);
if (stateCheck_voda && !current_status){
// ВОТ ТУТ ПОЛУЧИЛИ ЗАВЕТНЫЕ 10 ЛИТРОВ пишем действия для этого события
stateCheck_voda=current_status;
}
if (!stateCheck_voda && current_status)stateCheck_voda=current_status;
}
void setup(){
// уравниваем предыдущего и начального состояния иначе каждый запуск arduino будет расходовать 10 литров воды :)
stateCheck_voda=digitalRead(pinVoda_tick);
}
void loop(){
voda_tick();
}
Я задачу с счётчиком решил иначе. В моём случае был просто геркон. И первые 10л он замкнут, следующие 10л разомкнут, и так по кругу. Одно изменение состояния контакта на противоположное - 10 литров. Если влупить воду на всю катушку, то смена состояний происходит не чаще ~ 15 сек., то есть частота низкая, можно несколько счётчиков опрашивать. Ну и делаете цикл, счётчик +1, и считаете литры. Меня интересовала больше динамика расхода, а не общее кол-во потребляемой воды, поэтому данные кидал в базу get запросом, через изернет модуль в режиме клиента.
Можно было заморочится, хранить значение в постоянной памяти, на случай перезагрузок, выкидывать их на сайтик прямо средствами изернет шилда, сделать поправочку на тариф и считать также в рублях. Но меня интересовали только графики расхода в сутки.
Просто я согласен с интересами, но дом - это то, что надо береч. Я делаю проекты по организации учёта расхода гвс, хвс, отопления. Приборов море по доступным ценам и открытым протоколом, можно подключить модем и пожалуста.
Ардуину я только начал использовать но кое кто дал понять - нужна перезагрузка ее, питание тоже надо 24ч и непрерывно, разработка интерфейса .
Во сколько тут люди готовы за решение именно этой прооблемы взять денег??
Я лучше пойду проверенным путём и простым. А сами сигналы у нас сами приборы выдают, тотже тмк-н20. Промприбор Калуга.
Если надо то могу подсказать по интерфейсу, но лучше зайдите на сайт того кто производит их и упростите для себя их интерфейс. В программе надо вводить такой параметр как импульс на литр. Потом время, усреднение часовое и суточное. Отчёт по часам, дням, месяцам и годовой отчёт (у нас так принято, для принятия в теплоснабжайку).
Счетчик сделал на основе простого делителя (так же можно и в Омметр переделать :) ).
Сами счетчик замыкаются при переходе с 0 на 9 и размыкание происходит при переходе с 2 на 3.
Алгоритм выполняется при срабатывании счетчиков последовательно, а так же если сробатывает один из счетчиков при замкнутом другом (то есть одновременное замыкание)
Схема
Посмотрите по поиску тиграэлектроникс только по аглицки. Я их железкипользую давно, вполне устраивают...
Помогите разобраться, пожалуйста.
Подключил счетчик воды, со схемой НАМУРа внутри, через компаратор MAX942 к ATTiny85
На выходе с компаратора появляется 0 или 1,7В в зависимости от состояния схему Намура.
Как получить на выходе 0 и 3 В?
evgen66, не поверите -самый простой способ выкинуть Max942, и воспользоваться встроенным компаратором Tiny85
А просыпание контроллера по прерыванию тоже можно осуществить? Не могли бы посоветовать, где почитать про это.
первоистоник информации - даташит от атмела http://www.atmel.com/Images/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny2...
у вас геркон внутри датчика? я делал без компаратора, используя цифровой вход
evgen66, в принципе можно сделать очень хитрый ход, настроив отрицательный вход компаратора на ту же ногу, где сидит INT0 (главный по пробудке), в режиме компаратора будет сравниваться напряжение на этой ноге, и опорное 1,1 вольта, с этим вообще нет проблем. Но в режиме пробудки через INT0 важно что-бы сигнал с датчика давал чёткую единицу на входе, это примерно 60% от величины напряжения питания. На компараторах я уже собаку сьел, могу помочь, но совмещать всё это с режимами сна и просыпанием через внешнее прерывания, - это совсем другая история.
Компаратор тоже имеет прерывания, но он здесь лишний ИМХО
Есть три варианта:
1. Привести входной сигнал к цифровому и по прерываниям на него реагировать. достаточно правильно подобрать сопротивление в верхнем плече. В крайнем случае можно npn транзистор на вход. Плюс этого варианта в простоте и схемы и программы
2. Использовать аналоговый вход. Просыпаться по таймеру и делать замер. Плюс в возможности обнаруживать обрыв провода к датчику. Минус в отсутствии прерывания по входу.
1+2 скомбинировать оба варианта, использовать аналоговый вход. В обычном режиме использовать его как вход прерываний PCINT. И периодически перенастраивать на АЦП и проверять обрыв
3. Компаратор. Прерывания будут, но в настройке сложнее чем 1.
Ой, и напридумали тут, компараторы, аналоговый вход... Здесь надо то всего-то по возрастающему фронту импульс засечь. Дискретный сигнал, что может быть проще?
Ой, и напридумали тут, компараторы, аналоговый вход... Здесь надо то всего-то по возрастающему фронту импульс засечь. Дискретный сигнал, что может быть проще?
TIMER1 в режиме захвата.
Я конечно новичек ,но от ваших схем уши вянут! я подкличил через прерывания и без них очень просто!
тут все расписано прямо в скетче с прерыванием :
Позвольте поинтересоваться на на какое значение вы умножаете свою r чтобы получить кол-во воды в литрах , :)
Вопрос конечно с подвохом.. Потому как у вас два раза за 10 литров воды будет прерывание CHANGE.
Синий зачем на землю? Он при релейном подкючении не нужен. При релейной схеме используются белый и красный. Белый - верно на +5V arduino, красный - сигнал, НО нужно притянуть его через 10 кОм на землю, иначе на 20 метрах кабеля воду будут расодовать зеленные человечки - проходили знаем..
По всей теме конечно удивился.. Таких городулин понагородили - труба просто..
У меня год счетчик работает без всяки прерываний.. У меня loop проскакивает за 27-57 мс, у счетчика от 0 до 1 - 4литра воды, от 1 до 0 соотвественно 6, чтобы я за 57мс не поймал так назыаваемый "импульс", то нужно 0,057/4=0,01425 нужно времени чтобы проскочил 1 литр воды, соотвественно 1сек/0,01425= 70,175 ЛИТРА В СЕКУНДУ!!! Или 70,175*60=4 207,5 ллитра в минуту!!! Час даже считать не буду :) Впечатляет? Дальше становиться понятно, что ардуино должна быть наглухо тупая и медленная чтобы не успеть, поэтому я отказался от прерываний. все просто как в танке - ниже кусок из 10 000 срочек моего умного дома, работает год - нареканий нет, что в базе, то и на счетчике - цифры одинковые: (Вчера вечером приехали на дом в баню, взрослые всю ночь гульвасили, дети с утра "хочу джакузю" - результат по воде на графике ниже :) )