Есть у меня астропроект обзорной камеры, работающей днём и ночью, старающей растопить снег на своём маленьком куполе, управляющая током на электромагните диафрагмы объектива от охранной камеры. Связь с компом через usb-uart переходник на pl2303 - дёшево, надёжно. Но, конечно, надо переходить на нормальные процы с usb.
Собственно, ничего сложного. Через эту штуку: http://photo.milantiev.com/?dir=1753 получаю rx, tx, gnd, +5. Их завожу на атмегу, работающую на внутреннем 8МГц резонаторе. К PORTC.0 подключены 1wire термодатчики ds18b20 в количестве двух штук. Один датчик на улице, больше для статистики, нежели для пользы дела. Второй датчик под куполом.
На два ШИМах первого таймера подключены нагрузки:
- на OC1A через полевик и два резюка, пример подключения тут: http://www.getchip.net/posts/062-kak-podklyuchit-k-mikrokontrolleru-nagruzku/ , подключена грелка. Полевик тянет десятки ампер, так что вопрос исполнителя и блока питания только. Исполнитель планирую сделать из керамических резисторов, расположенных по кругу под куполом камеры;
- на OC1B напрямую подключена диафрагма. Сопротивление катушки моего объектива 710 Ом, то есть ток меньше допустимого на ногу проца (U = IR , I = U/R = 5/710 = 7мА против допустимых 20мА).
Да собственно и всё устройство. Теперь о программе. Реализован протокол:
- a/A+байт: установка значения диафрагмы (второго ШИМа), 0 = закрыто, 0xff = открыто на 100%;
- p/P или h/H + байт: установка значения грелки напрямую (первого шима), 0 - не греет, 0xff = жжёт;
- t/T + знаковый байт: установка температуры, к которой стремится грелка;
- g/G: получение байта текущего уровня грелки;
- 0: получение знакового байта термометра 0;
- 1: получение знакового байта термометра 1;
- f/F: получение байта - количества найденных термодатчиков (отладочная команда).
Основной цикл состоит из:
- поиск датчиков на шине (сделано в цикле, так как время не критично, а вот потеря датчика имеет решающее значение);
- получение температуры с датчика 0;
- получение температуры с датчика 1;
- если максимальная температура с датчиков больше нужной, понизим мощу грелки;
- если максимальная температура с датчиков меньше нужной, повысим мощу грелки;
- пауза секунд 10 перемешанная со сбросом watchdog.
Проект в CodeVision AVR + Proteus имеется, могу выслать кому надо.
плата на этапе тестирования (в роли нагрузок светодиоды)
Спаял макет. Жду детальки чтобы повесить полевик и собрать / протестировать грелку.
Попробовал управлять диафрагмой.
Поставил самый медленный ШИМ, оказалось ~28 Гц :D. Диафрагма отработала их - трещала знатно, но не развалилась. Поменял частоту на 31.25 кГц, теперь нормально работает.
Фотки здесь: http://photo.milantiev.com/?dir=1778 . Имя фотки = значение ШИМ регистра или скважность 5В ШИМа. Не очень хорошего качества фотки, но понятно, что рабочий отрезок примерно от C0h до 80h (именно так сверху вниз, так как есть мнение, что просто установить 50% (80h) скважность не получишь так же открытую диафрагму, что нужно сначала открыть её, выждать долю секунды, дальше опустить до нужного значения. И ещё видно, что диафрагма моего объектива двухлепестковая. |