Добрый день! Положил фоторезистор на окно и каждую минуту писал его показания в базу данных. Теперь построил график. Результат очень интересный. Я ожидал увидеть более-менее ровный график, а он весь рваный. То есть получается, что показания постоянно колеблются в некой погрешности. Вопрос: почему показания колеблются, а не постоянные? Это нормально или нет? Как лучше стабилизировать: программно или можно как-то на уровне железа? График прилагаю. На графике чем ниже-тем темнее. Датчик лежит в комнате, направлен на улицу и стекло немного отражает свет, это можно увидеть. https://www.dropbox.com/s/mql7nabywqupkqu/Скриншот 2014-02-17 09.53.16.png Спасибо!
Естественно, освещенность постоянно изменяется, просто глазом такие изменения не заметны. Зачем "стабилизоровать" эти показания? Конечно, можно посчитать плавающе среднее, если хочется показать среднюю освещенность за последние 5мин/полчаса/час. Нужно еще исключить возможность наводок по питанию и собственно на измерительную цепь: переключиться на внутренний источник опорного напряжения в 1.1V, поместить прибор в цельнометаллический корпус и запитать от батареек, на фоторезистор надеть бленду и закрепить ее перпендикулярно поверхности окна.
Спасибо! Про наводки по питанию, я совсем забыл. А как переключится на внутренний источник питания? Я получаю данные с помощью raspberry pi. Может быть есть статья? Мне график рассвета напоминает игру Gravity Defied)))
В малине в комплекте идет АЦП, я методом научно-промышленного тыка научился им пользоваться и читаю показания с аналоговых датчиков. АЦП подключен к пирогу, а фоторезистор через делитель напряжения к АЦП. Что бы положить фоторезистор на окно пришлось сделать метровый провод, который лежит на столе и всем что есть на столе, а там розетка, вот и наводки. Но очень интересно, как можно вывести датчик на автономное питание, что бы получать точное показание. Я хочу выкинуть его за окно вместе с термодатчиком. Хотя на хабре есть интересный пост на эту тему, но я пока не имею столько знаний, что бы делать такие вещи)
Ну я бы взял мелкий контроллер типа ATtiny13 (если не хочется заморачиваться так сильно, можно обойтись самой мелкой ардуиной) и его с фотодатчиком вынес на модуль. Связь и питание по экранированной витой паре, передача данных в цифре по SPI.
во-первых, наводки по питанию влияют на точность работы АЦП. Во-вторых, сам АЦП "плавает" в последних знаках, т.к. не используется AREF и ИОН. Но для твоих целей достаточно просто сглаживать результаты: Код (Text): // это поместить в начало float tempSensorA = 22.2; // показания с датчика А byte averageFactor = 5; // коэффициент сглаживания показаний температуры (0 = не сглаживать) // это в код перед получением показаний с датчиков float oldTempSensorA = tempSensorA; // это код получения температуры, (у тебя может быть другой) tempSensorA = sensors.getTempCByIndex(0); Serial.print("RAW temperature: "); Serial.println(tempSensorA); // это в код после получения показаний с датчиков if (averageFactor > 0 ) // если надо сглаживать показания // if не особо и надо, но если 0, то не тратим ресурсы понапрасну { Serial.println("Now averaging..."); // <новое среднее> = (<старое среднее>*(k-1) + <текущее значение>) / k tempSensorA = (oldTempSensorA * (averageFactor - 1) + tempSensorA) / averageFactor; Serial.print("Averaged temperature: "); Serial.println(tempSensorA); }