Цитата:
Допис від Starcomputer
можно подробнее
|
А що тут детальніше ? Пан знає як міряти температуру за допомогою DS18B20 ? ну або іншим способом.
Далі один термометр треба заізолювати (я попросив у дружини використаний пробник від духів, туди корпус TO-92 якраз гарно влазить) обмотитати тонким шаром тканини (рекомендують батіст, я обмотав звичайною марлею) та опустити кінець тканини у воду (я використав пластикову коробочку з-під ліків, у кришці якої прорізав отвіт і в нього вставив кінець марлі)
далі все це діло поставив від вентилятор від кулєра - потрібен невеликий вітерець. напругу на кулєр дав +5В, щоб менше гудів.
А далі вимірявши дві температури (сухого і водогого) розрахував індекс елемента в таблиці, вийняв значення - це і буде вологість. Таблиця - психрометрична, взята
звідси. Звісно в пам’ять процесора завантажена не вся таблиця а тільки її шматок від +15*С до +35*С по сухому термометру.
таблиця була переформатована, відповідні рядки склеєні. получився одномірний масив типу char. шматок програми для розрахунку індекса для avg-gcc наступний
[code]
if(ti[1]>=ti[3])
{
th=(ti[1]-ti[3])>>3; // індекс рядка
if(th!=0)
{
th--; // зкорегувати індекс рядка
th*=24;
th+= (ti[1]>>4)-15;
hyhro=eeprom_read_byte(psihro+th);
}
else // якщо різниця між показами сухого і вологого рівна 0 тоді
hyhro=100; // вологість рівня 100
}
else // якщо різниця між показами сухого і вологого рівна 0 тоді
hyhro=-1; // невираховується
[/code]
тут
ti[1] - покази сухого термометра
ti[3] - покази вологого
значення ті, які віддає DS18B20 без перерахунку ( не ділені на 16)
th - тимчасові змінна для розрахунку власне тут в кінці буде необхідний індекс
у цьому розрахунку мені дещо не подобається. Я не імітував всіх можливих варіантів але при деякій комбінації воно скаче на сусідній рядок по психрометричній таблиці, а мало б скакати по колонках. В глибокий аналіз щоб виявити і скорешувати цей глюк я не вдавався, поки що воно мене влаштовує.
PS: приблизно раз на два дні потрібно доливати воду, як забуду і вона висохне то показує -1
