Солнечные датчики
Адрес модулей солнечный датчиков 0х10, 0х11, 0х12 и 0х13, что соответствует 16, 17, 18 и 19 в десятичном формате (рисунок 1):

Рисунок 1. Адрес модулей солнечных датчиков
Все модули солнечного датчика имеют одинаковый набор команд и ответов (рисунок 2):

Рисунок 2. Набор команд для солнечных датчиков
Некоторые команды аналогичны командам других модулей, например:
- cgf_get_dest_id - установка адреса получателя пакетов;
- cgf_regular_telemerty_on - установка периода отправки пакетов;
- request_version - запрос версии прошивки модуля.
Однако состав возвращаемых данных будет другим: будут возвращены данные об угле направления на источник света ~10-B21 sun_dir_x, ~10-B21 sun_dir_y, ~10-B21 sun_dir_z.
Задайте период 10-A63 cgf_regular_telemerty_on, адрес 10-A61 cgf_set_dest_id, установите галочки ~10-B21 sun_dir_x, ~10-B21 sun_dir_z (рисунок 3):

Рисунок 3. Выбор возвращаемых пакетов с данными
В поле History будут отображаться принятые пакеты (рисунок 4):

Рисунок 4. Просмотр принятых пакетов
Перейдите в поле графиков во вкладку Sun Sensor (рисунок 5):

Рисунок 5. Вкладка Sun Sensor
Вы увидите полученные raw-данные. На графике видны моменты увеличения яркости источника света (рисунок 6):

Рисунок 6. Полученные raw-данные
Посветите на солнечный датчик с одной стороны (около 45° к нормали), а затем с другой стороны (около -45° к нормали). Полученный график будет выглядеть вот так (рисунок 7):

Рисунок 7. Изменение графика солнечного датчика
Надо отметить, что ПО Хьюстон не предназначено для визуализации конечных данных, и показывает графики в максимально «сыром» (raw) виде. В данном случае показаны относительные величины проекций вектора на x и z (рисунок 8):

Рисунок 8. Проекции вектора на x и z
Для вычисления значений угла в градусах следует обрабатывать логи, которые сохраняются автоматически.
Рассмотрим пример полученного пакета от одного из солнечных датчиков. Для этого в окне History выберем нужный нам пакет телеметрии по одной из осей x, y или z (рисунок 9):
Рисунок 9. Пример выбора одного из пакетов солнечных датчиков
По каждой оси мы можем в первой строке состояния увидеть проекцию вектора на эту ось (рисунок 10):



Рисунок 10. Пример проекции векторов на каждую из осей
Для удобства все значения умножаются на 1 000 000 000 во избежание работы с дробными числами.
В отдельных случаях проекция вектора на ось может быть равна 2 000 000 000. Эти данные означают, что яркость источника света ниже преднастроенного значения (как правило, 800) яркости солнечных датчиков (рисунок 11):



Рисунок 11. Значение проекции векторов при недостатке освещенности
В таком случае необходимо либо передвинуть источник освещения (иммитатор Солнца) ближе к конструктору, чтобы превысить порог яркости, либо командно понизить этот порог.
Настройка порогового напряжения яркости
1) Необходимо настроить режим телеметрии, передаваемой по каналу CAN, с помощью команды 00-25 set_telemetry_mode (00 - идентификатор солнечного датчика, в примере используется первый солнечный датчик с идентификатором 10). При отправке команды следует установить флаг на adc_comepnsated (рисунок 13):

Рисунок 12. Отправка команды 00-25 set_telemetry_mode
2) После настройки режима телеметрии мы будем получать ADC-данные по каналам детектора X1, X2, Y1 и Y2 (рисунок 13):
Рисунок 13. Пакеты ADC-данных по каналам детектора X1, X2, Y1 и Y2
Представьте ось, проходящую через центр солнечного датчика. Вам нужно отклонять источник света от этой оси на ~60° в разные стороны (вправо-влево, вверх-вниз) и измерять значения ADC (рисунок 14). Все полученные значения необходимо суммировать. Так вы получите пороговое значение яркости.

Рисунок 14. Пример полученных ADC-данных по каналу детектора X1
3) Для настройки порогового напряжения яркости воспользуйтесь командой 00-A67 set_brightness_threshold и внесите рассчитанное значение (рисунок 15):

Рисунок 15. Настройка порогового напряжения яркости
В случае если вам после сброса флага adc_comepnsated вам перестали поступать данные солнечных датчиков, воспользуйтесь командой 00-AAF0 reset_software - перезагрузка устройства.