имеется конечно,он кстати тоже дальностью не блещет. Антенны пробывал разные и четверть волновые и даже такие https://yadi.sk/d/FD4q15qxTqpbV . Будем разбираться ,очень похоже на то ,что рядом что то сильно фонит во всем дипазоне... Рядом дом ,в котором находиться ЖЭК и на крыше антенна диспетчерской:)
На счет Wi-Fi, для Андроида есть неплохая прога Wifi Analyzer, позволяет посмотреть занятые каналы. Во всяком случае мне дома помогло разнести 5ГГц на разные каналы, чтобы с соседом не пересекаться. Смотрит 5 и 2,4ГГц диапазоны, удобно.
На счет Wi-Fi, для Андроида есть неплохая прога Wifi Analyzer, позволяет посмотреть занятые каналы. Во всяком случае мне дома помогло разнести 5ГГц на разные каналы, чтобы с соседом не пересекаться. Смотрит 5 и 2,4ГГц диапазоны, удобно.
да знаю,спасибо.Свою точку доступа уже давно перестроил на более свободный канал....
Пытаюсь разобраться с прерываниями в скетче,пока не очень получается :)
Всем здравствуйте! Помогите разобраться с кодом,напрвтев нужное русло . Устройство- защита от протечки воды. Все в принципе работает как хотелось,за исключение одной детали. Не могу заставить срабатывать реле только на 4 секунды.
При нажатие кнопки "закрыть" загорается светодиод "closeLed" и срабатывает реле "closeRele" .На текущий момент рле работает синхронно вместе со светодиодом,а хотелось бы чтобы оно срабатывало только на 4 секунды..
Не судиде строго - первый скетчь :)
/* При срабатывание датчика протечки закрывается кран,начинает моргать светодиод "протечка",пищит бузер и блокируется кнопка открытия крана.
При нажатие кнопки "сброс" выключается бузер,гаснет светодиод "протечка" и разблокируется кнопка "открыть".
*/
const int alarmLed =6; // индикатор "протечка"
const int openLed =4; // индикатор состояния "открыто"
const int closeLed=5; // индикатор состояния "закрыто"
const int openRele=3; // реле закрытия крана
const int closeRele=12; // реле открытия крана
const int openButton=10; // кнопка "Открыть" кран
const int closeButton=11; // кнопка "Закрыть" кран
const int resetButton=2; // кнопка "Сброс" протечки
const int leaksensor=8; // датчик протечки,при срабатывание на входе LOW
bool openState=0;
bool opS=0;
bool lastopenState=0;
bool closeState=0;
bool lastcloseState=0;
bool clS=0;
bool leakState = 0;
bool lastleakState = 0;
bool resetState=0;
bool lastresetState=0;
int buttonPushCounter = 0;
int leakCounter=0;
int ledState = LOW;
long previousMillis = 0;
long interval = 500;
void setup() {
pinMode(alarmLed,OUTPUT);
pinMode(openLed,OUTPUT);
pinMode(closeLed,OUTPUT);
pinMode(openRele,OUTPUT);
pinMode(closeRele,OUTPUT);
pinMode(openButton, INPUT);
pinMode(closeButton, INPUT);
pinMode(resetButton, INPUT);
pinMode(leaksensor, INPUT);
Serial.begin(9600);
}
void loop(){
leakState=digitalRead(leaksensor);
leakState=!leakState;
if (leakState != lastleakState) {
if (leakState == HIGH) {
leakCounter=1;
Serial.println("LEAK");
}
lastleakState = leakState;
}
if (leakCounter==1){
digitalWrite(alarmLed, ledState);
clS=1;
opS=0;
}
else {
digitalWrite(alarmLed, LOW);
}
openState = digitalRead(openButton);
if (openState != lastopenState) {
if ((openState == HIGH)&&(leakCounter==0)) {
opS=1;
clS=0;
Serial.println("OPEN");
}
lastopenState = openState;
}
closeState = digitalRead(closeButton);
if (closeState != lastcloseState) {
if (closeState == HIGH) {
opS=0;
clS=1;
Serial.println("CLOSE");
}
lastcloseState = closeState;
}
if (opS==1){
digitalWrite(openLed, HIGH);
digitalWrite(openRele, HIGH);
}
else {
digitalWrite(openLed, LOW);
digitalWrite(openRele, LOW);
}
if (clS==1){
digitalWrite(closeLed, HIGH);
digitalWrite(closeRele, HIGH);
}
else {
digitalWrite(closeLed, LOW);
digitalWrite(closeRele, LOW);
}
resetState = digitalRead(resetButton);
if (resetState != lastresetState) {
if (resetState == HIGH) {
leakCounter=0;
Serial.println("RESET");
}
lastresetState = resetState;
}
if ( leakCounter==1)
{
tone(9, 600, 150);
delay(300);
}
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
}
}
Но в таком варианте выключается через 4 секунды после отпускания кнопки,а надо чтобы отключалось через 4 секунды при нажатой кнопке,то есть нажали -включилось и через 4 секунды выключилось,даже если продолжаем удерживать кнопку...
надо чтобы отключалось через 4 секунды при нажатой кнопке,то есть нажали -включилось и через 4 секунды выключилось,даже если продолжаем удерживать кнопку...
Да Вы затейник... В этом случае надо "ловить" не событие нажатия кнопки, а событие изменения ее состояния.
1. Заводим переменные для сохранения нового и предыдущего состояний кнопки.
boolean new_button_state = false;
boolean old_button_state = false;
2. Вместо строк 15-18 можно как-то так :
new_button_state = digitalRead(buttonPin);
if ( (new_button_state != old_button_state) && new_button_state ) // состояние кнопки изменилось и оно стало HIGH
{
digitalWrite(ledPin, HIGH);
previousMillis = millis();
old_button_state = new_button_state; // сохраняем изменения
}
3. В этом случае при удержании кнопки не будет постоянно обновляться previousMillis, чего мы и желали.
Ммм... В голове прокручиваю - ошибки не вижу, а проверить - нечем. Выводите в монитор порта значения переменных, смотрите, как они изменяются (скорее, не изменяются) при дальнейших нажатиях кнопки.
ультрасоник над дверю в ванной висит? собрал на макетке ,залил Ваш скетч,включает и по ИК датчику и по сонику,не могу понять при каком условии выключается.
ультрасоник над дверю в ванной висит? собрал на макетке ,залил Ваш скетч,включает и по ИК датчику и по сонику,не могу понять при каком условии выключается.
Сорри если достал своими вопросами
Да без проблем. Итак, речь идет о туалете, вот фото, как все выглядит
сверху УЗ, под ним ИК. Они работают параллельно, то есть дублируя друг друга, ну, так исторически сложилось. Если бы я делал все сызнова, был бы только ИК.
При каком условии выключается, нууу, там логика достаточно хитроделанная, думаю, Вам проще было бы по-своему расписать, сначала по-простому, а затем усложняя по потребности.
Есть аналогичные блоки питания и даже вроде дешевле,парочка таких работает и претензий вроде нет
http://www.ebay.com/itm/261347213330?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649 . Но этот блок несет на себе ещё функцию контроллера защиты от протечки воды и имеется ИБП на 12 вольт,поэтому питание внешнее. Думал я о голых чипах. Удобно когда надо уменьшить размеры,но у меня всё в процессе настройки :)) . Да и в наличии у меня их нет сейчас,причем цена такая же почти как про мини,поэтому пока не вижу смысла. Плата пока не окончательный вариант,не учел того момента что симисторный ключь не хочет управлять очень маломощной нагрузкой ( вентилятор вытяжки ) придется один канал переделывать на обычное реле. Да и с интефейсом телеметрии пока не решил )))
КО подсказывает, что ему не нравится отсутствие библиотеки SimpleTimer. Гугл подсказывает, что ее можно взять, например, здесь : http://playground.arduino.cc/Code/SimpleTimer
спасибо,все получилось. Жаль с радиосвязью у меня в квартире проблема,бермудский треугольник :)) . И на 433 и на 2.4 Ггц дальность метра 3 )
О_о. Wi-Fi в квартире имеется ? Работает ?
На 433 МГц-модули антенны хорошие паяли ?
О_о. Wi-Fi в квартире имеется ? Работает ?
На 433 МГц-модули антенны хорошие паяли ?
имеется конечно,он кстати тоже дальностью не блещет. Антенны пробывал разные и четверть волновые и даже такие https://yadi.sk/d/FD4q15qxTqpbV . Будем разбираться ,очень похоже на то ,что рядом что то сильно фонит во всем дипазоне... Рядом дом ,в котором находиться ЖЭК и на крыше антенна диспетчерской:)
https://www.dropbox.com/s/ndry352qjuqeq2u/2014-06-18%2010.06.37.jpg
На счет Wi-Fi, для Андроида есть неплохая прога Wifi Analyzer, позволяет посмотреть занятые каналы. Во всяком случае мне дома помогло разнести 5ГГц на разные каналы, чтобы с соседом не пересекаться. Смотрит 5 и 2,4ГГц диапазоны, удобно.
На счет Wi-Fi, для Андроида есть неплохая прога Wifi Analyzer, позволяет посмотреть занятые каналы. Во всяком случае мне дома помогло разнести 5ГГц на разные каналы, чтобы с соседом не пересекаться. Смотрит 5 и 2,4ГГц диапазоны, удобно.
да знаю,спасибо.Свою точку доступа уже давно перестроил на более свободный канал....
Пытаюсь разобраться с прерываниями в скетче,пока не очень получается :)
Всем здравствуйте! Помогите разобраться с кодом,напрвтев нужное русло . Устройство- защита от протечки воды. Все в принципе работает как хотелось,за исключение одной детали. Не могу заставить срабатывать реле только на 4 секунды.
При нажатие кнопки "закрыть" загорается светодиод "closeLed" и срабатывает реле "closeRele" .На текущий момент рле работает синхронно вместе со светодиодом,а хотелось бы чтобы оно срабатывало только на 4 секунды..
Не судиде строго - первый скетчь :)
Не судиде строго
Узбагойзя )))
Я пытался понять Ваш код, но ниасилил, простите. Как-то все излишне сложно и запутанно мне показалось.
Давайте лучше я "на пальцах" идею расскажу.
1. Заводим переменную unsigned long RelayState = 0;
2. Если нужно включить реле, присваиваем RelayState = millis();
3. Если не нужно включить реле, присваиваем RelayState = 0;
4. Чтобы реле срабатывало только на interval миллисекунд, делаем проверку
if ( (RelayState > 0) && (millis() - RelayState <= interval) ) { держим включенным }
else { держим выключенным }
Попробуйте сами, если что обращайтесь.
Знаю что запутанно,но пока хоть так :)
Спасибо,попробую,отпишусь потом.
Как все получится,будем урезать лишнее.
P.S. По поводу света в ванной: данный вариант датчиков работает отлично,но иногда хромает обработка :)
3. Если не нужно включить реле, присваиваем RelayState = 0;
Тут правильнее
3. Если нужно выключить реле, не дожидаясь истечения интервала, присваиваем RelayState = 0;
А если никаких действий с реле не нужно, то RelayState не трогаем совсем.
Araris я правильно понял понял что Вы имели в виду это
Но в таком варианте выключается через 4 секунды после отпускания кнопки,а надо чтобы отключалось через 4 секунды при нажатой кнопке,то есть нажали -включилось и через 4 секунды выключилось,даже если продолжаем удерживать кнопку...
Видимо я всё таки не понимаю ещё до конца..
надо чтобы отключалось через 4 секунды при нажатой кнопке,то есть нажали -включилось и через 4 секунды выключилось,даже если продолжаем удерживать кнопку...
Да Вы затейник... В этом случае надо "ловить" не событие нажатия кнопки, а событие изменения ее состояния.
1. Заводим переменные для сохранения нового и предыдущего состояний кнопки.
boolean new_button_state = false;
boolean old_button_state = false;
2. Вместо строк 15-18 можно как-то так :
new_button_state = digitalRead(buttonPin);
if ( (new_button_state != old_button_state) && new_button_state ) // состояние кнопки изменилось и оно стало HIGH
{
digitalWrite(ledPin, HIGH);
previousMillis = millis();
old_button_state = new_button_state; // сохраняем изменения
}
3. В этом случае при удержании кнопки не будет постоянно обновляться previousMillis, чего мы и желали.
я думал об этом ,но не попробывал... Спасибо!
Срабатывает,но только один раз,на дальнейшие нажатия кнопки не реагирует до перезапуска :(
Ммм... В голове прокручиваю - ошибки не вижу, а проверить - нечем. Выводите в монитор порта значения переменных, смотрите, как они изменяются (скорее, не изменяются) при дальнейших нажатиях кнопки.
Вот так заработало
Araris спасибо за помощь и за Ваше терпение! Затра попробую вживить в свой код :)
Блин, точно, второе условие && new_button_state не давало сохранять изменения.
Ну да ладно. Успехов Вам.
Всё получилось как хотел!!! Огромное спасибо!
В итоге получилось так,насколько мог прокоментировал код . Нужно сюда включать сторожевой таймер и как правильно это сделать ?
Если есть косяки,то прошу указать на них :) . данный вариант проверен на прототипе.
Araris ещё раз спасибо за помощ.
Три вопроса :
Чем краны поворачиваете, модель, цена, фото ? Подозреваю, что мотор-редуктором.
Почему intervalRele именно четыре секунды, обратной связи с краном нет и Вы полагаетесь только на время ?
Что такое "сторожевой таймер", имеется в виду Watchdog против зависаний Ардуино ?
Чем краны поворачиваете, модель, цена, фото ? Подозреваю, что мотор-редуктором.
Почему intervalRele именно четыре секунды, обратной связи с краном нет и Вы полагаетесь только на время ?
Что такое "сторожевой таймер", имеется в виду Watchdog против зависаний Ардуино ?
1 ) Пока ничем,их ещё нет ( китайкие боюсь заказывать,не уверен в качестве и долговечности,хоть и дешево)
2) Будет корректироваться после появления кранов,возно что измениться в коде
3 ) именно Watchdog против зависаний Ардуино я и имел ввиду,спасибо за поправку.
По сути это проба сил,в планах обкатать пока без кранов. Опробывать различные варианты датчиков например и всего остального...
Сторожевой таймер я делал по рецепту отсюда http://arduino.ru/forum/programmirovanie/programmnyi-reset#comment-9130 , в этой теме вообще есть немало интересного. Работает на Nano и на Uno достаточно долго уже.
Сторожевой таймер я делал по рецепту отсюда http://arduino.ru/forum/programmirovanie/programmnyi-reset#comment-9130 , в этой теме вообще есть немало интересного. Работает на Nano и на Uno достаточно долго уже.
А в Nano тоже optiboot? Я так понял, что, по умолчанию таймер только с ним нормально работает.
Все свои Pro Micro перешил с optiboot - теперь таймер работает как часы.
Так как блок кнопок и индикации планирую выносной , переделел схему и скетч. Если кому будет интересно-выложу
Думаю, это будет интересно. Только было бы удобнее создать под Ваш проект новую тему, он ведь уже дорос до этого ?
Но это же часть умной ванны,хорошо ,больше флудить не буду)
Но это же часть умной ванны,хорошо ,больше флудить не буду)
Я не считаю себя начальником данной темы, просто так было бы легче найти и получить нужную информацию.
Araris ,у Вас хорошо срабатывает включение света в ванной?
С аквасторожем переехал сюда http://arduino.ru/forum/proekty/sistema-zashchity-ot-protechki-vody
Araris ,у Вас хорошо срабатывает включение света в ванной?
Даже идеально срабатывает. Там два датчика дублируют друг друга - УЗ-датчик HC-SR04 и ИК-свитч, один из тех, что на картинке тут http://arduino.ru/forum/proekty/umnye-tualet-i-vannaya?page=5#comment-33494. В паре они определяют и "держат" посетителя безошибочно. Когда был один УЗ - бывали проблемы.
пытаюсь повесит датчики на прерывания ,но знаний катастрафически не хватает:
дальше first = 1 IR1 on, IR2 off. дело не идет.
Видел Ваш полный скетч для ванны ,но как отсечь все лишнее для меня пока не понял( оставить ИК и PIR датчики )
я правильно понимаю что скетч для ванной : AVSmartWC ?
С прерываниями людей считать будет посложнее в том смысле, что придется менять блок-схему(логику) скетча.
В скетче AVSmartWC на прерывании висит кнопка ручного включения, это совсем другая история.
Значит надо прикручивать PIR датчик,только пока не знаю как :) . Если я правильно понял у Вас в этом скетче утразвукой датчик , а ИК датчиков там нет.
Свободный датчик есть ....
Значит надо прикручивать PIR датчик,только пока не знаю как :) . Если я правильно понял у Вас в этом скетче утразвукой датчик , а ИК датчиков там нет.
Есть там оба датчика. ИК датчик в скетче представлен тремя строками :
#define IR_SWITCH_PIN 4 // pin connected to IR switch
...
pinMode(IR_SWITCH_PIN, INPUT);
...
if (!digitalRead(IR_SWITCH_PIN)) { CurDistance = 55; }
Совсем запутался :)
Araris простите за мой тупизм,я правильно понял используется :
Pir датчик одна штука, утрасоник одна штука, ИК датчик одна штука, то есть подсчет людей не используется?
Pir датчик одна штука, утрасоник одна штука, ИК датчик одна штука, то есть подсчет людей не используется?
Pir датчик - не используется.
Ультрасоник - одна штука
ИК датчик - одна штука.
Подсчет людей - не используется.
ультрасоник над дверю в ванной висит? собрал на макетке ,залил Ваш скетч,включает и по ИК датчику и по сонику,не могу понять при каком условии выключается.
Сорри если достал своими вопросами
ультрасоник над дверю в ванной висит? собрал на макетке ,залил Ваш скетч,включает и по ИК датчику и по сонику,не могу понять при каком условии выключается.
Сорри если достал своими вопросами
Да без проблем. Итак, речь идет о туалете, вот фото, как все выглядит
сверху УЗ, под ним ИК. Они работают параллельно, то есть дублируя друг друга, ну, так исторически сложилось. Если бы я делал все сызнова, был бы только ИК.
При каком условии выключается, нууу, там логика достаточно хитроделанная, думаю, Вам проще было бы по-своему расписать, сначала по-простому, а затем усложняя по потребности.
С туалетом все просто,а вот с ванной гораздо сложнее ,там ультрасоник не всегда тебя видит )
С туалетом все просто,а вот с ванной гораздо сложнее ,там ультрасоник не всегда тебя видит )
Согласен. Тема ванной у меня пока "не раскрыта". Там светом управляет PIR-датчик с таймером, вообще не связанный с Ардуиной.
у меня к сожалению туалет и ванна один обьект , свет зажигается в процентах 90. Стоит пройти несколько раз туда -сюда и начинает нормально работать...
Есть еще одна мысль для бОльшей площади помещения : комбинация датчика пересечения дверного проема (1) с датчиком движения (2).
Последовательность срабатывания (1) -> (2) - кто-то зашел и присутствует,
(2) -> (1) -> (2) - кто-то вышел, но кто-то еще присутствует,
(1) -> (2) -> (нет сработок) - кто-то вышел и никто не присутствует.
Я вчера об этом думал. Как раз это и искал в Вашем скетче ))))
Я вчера об этом думал. Как раз это и искал в Вашем скетче ))))
)))
Описанный алгоритм тоже не идеален, но это гораздо лучше, чем просто один датчик движения.
С одним датчиком движения вообще не вариант,пробывал )
забавно когда ты присел около ванны спиной к датчику и он выключается,хотя ты в это время помешиваешь раствор руками в ванночке )
Блок управления для ванной ( 3 в 1) готов )


нарядно!
Этп плата прекрасна!
На мой взгляд, Ардуинка там слегка лишняя. ATMEGA328P на панельки с одним кварцем гораздо лучше бы смотрелся.
Недавно открыл такие блоки питания - очень хороши для таких плат
Впечатляющая конструкция, завидую белой завистью, респект автору.
Этп плата прекрасна!
На мой взгляд, Ардуинка там слегка лишняя. ATMEGA328P на панельки с одним кварцем гораздо лучше бы смотрелся.
Недавно открыл такие блоки питания - очень хороши для таких плат
Есть аналогичные блоки питания и даже вроде дешевле,парочка таких работает и претензий вроде нет
http://www.ebay.com/itm/261347213330?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649 . Но этот блок несет на себе ещё функцию контроллера защиты от протечки воды и имеется ИБП на 12 вольт,поэтому питание внешнее. Думал я о голых чипах. Удобно когда надо уменьшить размеры,но у меня всё в процессе настройки :)) . Да и в наличии у меня их нет сейчас,причем цена такая же почти как про мини,поэтому пока не вижу смысла. Плата пока не окончательный вариант,не учел того момента что симисторный ключь не хочет управлять очень маломощной нагрузкой ( вентилятор вытяжки ) придется один канал переделывать на обычное реле. Да и с интефейсом телеметрии пока не решил )))
Проблема с невключением вытяжки решилась малой кровью, переделку платы пока можно отложить :)
Вот и сам виновник,новый с упаковки,купленный на алиэкспрес
P.S. Датчики прохода стали отрабатывать более четко.
Путем эксперементов пришел к выводу что ИК датчики прохода работают если залить голый скетчь,даже без вывода в сериал....
Подумавываю под это дело использовать отдельно atmega8 .... А ещё лучше aTtiny13,как раз есть в загашнике