Досветка в теплице.
- Войдите на сайт для отправки комментариев
Здравствуйте уважаемые форумчане)
Решил для знакомого собрать устройство для досветки в теплице.
Задача максимально проста и банальна - включать натриевые лампы когда становится пасмурно.
Накидал код , всё работает , но встал вопрос как избежать ложных срабатываний при случайном затемнении фоторезистора и.т.д.
Видится многократная проверка условия y+x>100 , но не понимаю как это сделать
да и в правильном ли направлении я двигаюсь тоже не понятно..
Буду рад любым советам и предложениям)
Так же интересны рекомендации по удешевлению устройства, думаю использовать более дешевый
микроконтроллер. Подойдёт ли для этих целей attiny13 например? просто 328atmega слишком расточительно для таких целей использовать.
#define SENSOR_PIN A5//фоторезистор #define VAR_REZ A0// чувствительность int led = 13; int ledState = LOW; void setup() { Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { delay (1000) ; int lightLevel = analogRead(SENSOR_PIN); int sensitivity = analogRead(VAR_REZ); int y = map(lightLevel,0,1023,1,100) ; int x = map(sensitivity,31,955,1,100) ; Serial.println(y); Serial.println(x); Serial.println(lightLevel); Serial.println(sensitivity); if (y+x>100 && ledState == HIGH ) { ledState = LOW; digitalWrite(led, ledState); } if (y+x<100 && ledState == LOW ) { ledState = HIGH; digitalWrite(led, ledState); } }
1. тиньки вполне хватит, или atmega8 тоже недорого
2. можно поставить 2-3 фоторезистора в разных точках
а в сериал обязательно отправлять?
можно еще удешевить. поставьте компаратор и регулируйте уроверь сколько хотите. функции кроме отправки в сериал теже. хотя и тинька дешевая
Видится многократная проверка условия y+x>100 , но не понимаю как это сделать
Надо вводить понятие "время" и по первому срабатыванию условия - взводить какую-нибудь переменную X. После чего отсчитываем время и если переменная не изменилась - то считаем, что "стемнело", если изменилась - обнуляем переменную X.
Спасибо всем за ответы. Накидал код , делает всё что надо но как то по дилетански получилось и расточительно к ресурсам....
думаю как бы красиво сделать :)
в сериал не обязательно , это для настройки только..
для тиньки код жырный очень получается, пока только в atmega8 поместится)
Такие вещи можно делать с помощью расчета среднего (плавающим окном) и с отсеиванием изменений значений больше какой то величины (т.е. если встретится значение, которое больше или меньше текущего среднего, допустим, на 50, то пропускаем такой отсчет и не берем в учет), тогда всё будет включаться/выключаться плавно и с гистерезисом. Такой вариант и в тиньку возможно войдет, там немного.
попробуйте так. каждую минуту смещаем значения а последнее заменяем текущим, высчитываем среднее и условие
на тиньке еще много места
Большое спасибо что уделили время, хорошее решение, а главное компактное)
пожалуйста. можно еще в начале добавить задержку, чтобы при включении например если в этот момент закроете фоторезистор запишутся значения в темноте, и только минут через 10 выключится подсветка пока среднее значение увеличится
Коллеги, давайте, по возможности, и добровольно экономить электричество. Например, тут, наверняка, можно на минуту перейти в спящий режим:
>> 36: delay(zaderzka);
раньше на компах был логотип об этом "energy star epa"
давайте. я честно сказать еще не знаю как это делается. можно и вырубить на минуту
но и тинька потребляет так мало, что экономия наверно не будет заметна
Коллеги, давайте, по возможности, и добровольно экономить электричество. Например, тут, наверняка, можно на минуту перейти в спящий режим:
>> 36: delay(zaderzka);
раньше на компах был логотип об этом "energy star epa"
блок питания поддерживает модную функцию? - если "нет", то смысл?
тоже верно. тинька есть так мало что даже если загнать в спящий блок питания почти столько же потреблять будет
хотя тут можно конечно извратиться и съэкономить сколько то ватт. питать устройтво от аккумулятора, контролить напряжение на акумуляторе, понизилось включили реле, блок питания включился и аккумулятор начала снова заряжаться. но это тоже сомнительно. потери больше, аккумулятор не идеальный накопитель
теоретически можно заменить аккумулятор на мощный конденсатор, может на минуту и хватит надо считать потребление и саморазряд. но в момент заряда будет перегруз небольшой (если например испльзовать зарядник от телефона). ток можно ограничить, но даст ли это экономию. датали же тоже денег стоят
Неправильно вы дядя Фёдор среднее считаете....
Причём числа 9 и 10 могут быть 1 и 2 или 745 и 746
И никаких массивов в принципе, только помнить о возможности переполнения...
Или использовать float
А если захочется поиграться с плавностью- резкостью изменений:
http://playground.arduino.cc/Main/RunningAverage
измерение раз в минуту. общее 20 минут. среднее за 20 минут будет достаточное для игнорирования случайного затемнения. количество можно увеличить. мне кажется этого достаточно
измерение раз в минуту. общее 20 минут. среднее за 20 минут будет достаточное для игнорирования случайного затемнения. количество можно увеличить. мне кажется этого достаточно
http://playground.arduino.cc/Code/SimpleTimer
где-то в теме про вольтметр был алгоритм, в котором считалось среднее десяти измерений - в результате отсекались мусорные пики, в данном случае - случайные засветки датчика.
я утверждаю что мой код самый правильный. у вас есть предложения. сделайте код лучше, да я и сам чему нибудь научусь
я утверждаю что мой код самый правильный. у вас есть предложения. сделайте код лучше, да я и сам чему нибудь научусь
сами подумайте - зачем хранить массив из 20 значений, если использовать только среднее? логичнее (и правильнее, и оптимальнее) и хранить только среднее.
из старого среднего новое среднее получить просто:
<новое среднее> = (<старое среднее>*19 + <текущее значение>) / 20
без всяких циклов, сдвигов и пр.....
в принципе как вариант. интересная мысль
это не моя мысль. это trembo вам три дня назад написал, я просто расжевал.
чтобы пореже писали "я утверждаю что мой код самый правильный...."
:)
это не моя мысль. это trembo вам три дня назад написал, я просто расжевал.
чтобы пореже писали "я утверждаю что мой код самый правильный...."
:)
по тексту дальше догадаться в принципе что я хотел написать я не утверждаю что мой код самый правильный.
извините, не прочитал когда отправил, да и потом не обратил внимание
да и глупо утверждать что мой код самый правильный, когда есть обычно много решений