dewoo matiz vs arduino
- Войдите на сайт для отправки комментариев
Чт, 13/12/2012 - 01:56
Помогите с кодом. Хочу управлять некоторыми приборами с помощью ардуино в машине, а имено: обогревом заднего стекла(включение от тактовой кнопки, включение реле на 20 мин), задним дворником (включил и пока кнопка замкнута с интервалом в 1 минуту будет замыкаться реле на 1секунду) далее планирую добавить еще некоторые приборы под упровление ардуино.
Вот примерная схема работы:
до зетупа: // объявляешь переменные
int pinZadNagrev=6; // укажи свой пин включения нагрева (идущий на реле, опто симистор или на транзистор)
int deltaZadNagrev=20*60*1000;
int vrevZadNagrev;
pinKnZadNagrev=5;
pinKnDvornik=6;// как-то так.
в зетупе: // инициализируешь порты
pinMode(pinZadNagrev,OUTPUT);
pinMode(pinDvornik_on,OUTPUT
pinMode(pinKnZadNagrev,INPUT);
pinMode(pinKnDvornik,INPUT);
в лупе: // основной код программы
в цикле loop проверяй не включена ли кнопка обогрева заднего стекла с функцией защиты от дребезга . Если кнопка нажата - запомни время vrem_zadogrev=mills(); включи обогрев digitalWrite(pinZadNagrev,HIGH); конец цикла
дальше проверяй прошло ли необходимые 20 минут
if (deltaZadNagrev+vrevZadNagrev>=mills()){
// и внутри такого условия выключай пин нагрева
ditigalWrite(pinZadNagrev,LOW);
}
//______________
точно так же управляй задним дворником.
если нажата кнопка pin, а проверяешь ты это раз в 1 минуту - включаешь дворник, отслеживаешь один оборот и выключаешь.
Только не забывай, что приборы нельзя напрямую подключать к ардуине. Спалишь чип. Подключай управляющие выводы через усиляющий транзистор (если то, что нужно питать на постоянном токе) или через оптосимистр (если на переменном) (дешевле, чем транзистор+реле)
а как код будет выглядеть если - нажимаешь тактовую кнопку включается реле, через транзисто, на 20 минут, нажимаешь еще раз и реле отключается (если время таймера еще не вышло)?
схема работы будет выглядеть так: обе кнопки не отжимаемые, двух позиционные.
включаешь ее, она включена до отключения остается.
в первом случае - каждый цикл проверяется нажатие кнопки 1, кнопки включения нагрева - если она нажата, включается нагрев и запоминается время включения нагрева.
далее в том же цикле проверяется время, прошедшее с этого времени, если оно больше величины deltaZadNagrev (в миллисекундах), то нагрев выключается, иначе ничего не делается.
ДОБАВЛЕНИЕ: да, еще нужно отследить момент, когда кнопка еще нажата, а нагрев уже отключился. и обработать. Подумай как.
прочее делается тем же образом.
так же нужно обработать ситуацию, когда счетчик миллисекунда сбросится (порядка 50 суток, зависит от конкретного чипа)
если он обнулился, то из числа миллисекунд, когда он сбрасыватся, нужно вычесть время запуска и придать результат переменной, в которой хранится время запуска.
так же нужно учесть что тип этой переменной - не обычный интеджер, а неподписанный логнг (unsigned long)
а вообще - попробуй для начала помигать светодиодами в разном порядке и т.п., освой управление мощной нагрузкой и т.п.
В целом советую посмотреть видеоуроки от джереми блюма. Они есть на рутреккере и амперке
для начала, т.е. для твоей текущей задачи будет достаточно первых трех уроков. А дальше - посмотришь и другие.
если ты задал вопрос по программированию, то ты не верно выбрал раздел. На форуме есть раздел "программирование".
еще можно взять кнопки отжимаемые. если зарегистрированно нажатие, то проверяем изменилось ли состояние (хранится в переменной). Если включилось, а было выключено - включаем нагрев а дальше как выше сказано - запоминаем время и ждем когда оно истечет для отключения. Когда время истекло, выключаем нагрев и устанавливаем статус включения кнопки в выключенное состояние.
следующее нажатие кнопки - снова включит процесс.
если же кнопка включения/выключения нагрева срабатывает при включенном нагреве - нагрев отключаем принудительно и указываем статус нагрева как выключен.
при этом нужно использовать библиотеку борьбы с дребезгом контактов (через замедление на 5 мс каждый раз измерения состояния)
а так же в других проверках (ну не только же твоя ардуина будет за нагрев отвечать) и в другом коде не должно быть таких задержек, что бы можно было пропустить и не отработать нажатие указанной выше кнопки.
Т.е. следи что бы все циклы выполнялись порядка 3-5-10 мс
я имею в виду код тоесть програмирование а не схема подключения, по поводу подключения вопросов нет, а вот с программироанием есть много вопросов, вот сюда и пишу
если ты задал вопрос по программированию, то ты не верно выбрал раздел. На форуме есть раздел "программирование".
Выходит я ошибся по поводу раздела. Извиняюсь. Мне показалось, что ты написал в "общий".
ребят, кто нибудь поможет написать скетч?