Для чего нужен ОрбиКрафт
Подсистемы конструктора
Инструкции по работе с ОрбиКрафт
Уроки
Лабораторная оснастка
Знакомство с Arduino
Полезная нагрузка на базе Arduino
Обратная связь
Новости
Для чего нужен ОрбиКрафт
Подсистемы конструктора
Инструкции по работе с ОрбиКрафт
Уроки
Лабораторная оснастка
Знакомство с Arduino
Полезная нагрузка на базе Arduino
Обратная связь
Новости
Солнечный датчик
Виртуальное потребление - 45мА
Солнечные датчики на спутниках выполняют роль датчиков ориентации, определяя пространственное положение спутника относительно Солнца. Очень часто они используются для грубой ориентации панелей солнечных батарей спутника на Солнце. Следует заметить, что полностью определить ориентацию спутника только по показаниям солнечных датчиков невозможно - всегда останется неопределенность с углом поворота аппарата вокруг направления «спутник-Солнце».
Для получения сырых данных измерений можно воспользоваться функцией (на языке С):
int sunsensor_request_raw(uint16_t num, uint16_t *pRAW_data1, uint16_t *pRAW_data2);
Датчик возвращает показания с двух сенсоров осматривающих левую и правую полусферы соответственно. При засветке одного из сенсоров по уровню освещенности можно оценить угол наведения на Солнце. При засветке двух датчиков более правильным подходом будет использование отношения уровней освещенности на обоих сенсорах.
Вычисление конкретных зависимостей угла от уровней освещенности называется калибровкой датчика под различные условия. Тем не менее даже без калибровки датчики подобной конструкции могут быть использованы для наведения на солнце путем анализа взаимной освещенности правой и левой полусфер датчика.
Пример кода проверки солнечных датчиков на языке С
#include "libschsat.h" /* ** Lab 4: get a raw data from a sun sensor */ void control(void) { int i; const int num = 1; /* sun sensor #1 */ printf("Enable sensor #%d\n", num); sun_sensor_turn_on(num); printf("Get RAW data from sun sensor #%d\n", num); for (i = 0; i < 10; i++) { uint16_t value1; uint16_t value2; if (LSS_OK == sun_sensor_request_raw(num, &value1, &value2)) { printf("%d: raw=%d ; %d\n", i, value1, value2); } else { puts("Fail!"); } Sleep(1); } printf("Disable sensor #%d\n", num); sun_sensor_turn_off(num); }
Пример кода проверки солнечного датчика №1 на языке Python
# Get raw data from sun sensor №1 def control(): # Основная функция программы, в которой нужно вызывать остальные функции sun_result = [0,0,0] # Инициализируем sun_result num = 1 print "Enable sun sensor №", num sun_sensor_turn_on(num) sleep(1) print "Get RAW data from sun sensor" for i in range(10): sun_result = sun_sensor_request_raw(num) if not sun_result[0]: # если датчик вернул сообщение об ошибке, print "state:", sun_result[0], "raw =", sun_result[1], sun_result[2] elif sun_result[0] == 1: print "Fail because of access error, check the connection" elif sun_result[0] == 2: print "Fail because of interface error, check your code" sleep(1) print "Disable sun sensor №", num sun_sensor_turn_off(num)
Пример кода проверки четырех солнечных датчиков на языке Python
def control(): # Основная функция программы, в которой нужно вызывать остальные функции sun_result = [0,0,0] # Инициализируем sun_result sun_sensor_num = 0 # Инициализируем переменную для номера солнечного датчика #Цикл для включения, опроса и выключения четырех солнечных датчиков по очереди: for sun_sensor_num in range (1,5): print "Enable sun sensor №", sun_sensor_num sun_sensor_turn_on(sun_sensor_num) # Включаем солнечный датчик sun_sensor_num +=1 sleep(1) # Ждем включения 1 секунду for i in range(10): #Считываем показания 10 раз for sun_sensor_num in range (1,5): print "Get RAW data from sun sensor №", sun_sensor_num sun_result = sun_sensor_request_raw(sun_sensor_num) if not sun_result[0]: # если датчик не вернул сообщение об ошибке, print "state:", sun_result[0], "raw =", sun_result[1], sun_result[2] elif sun_result[0] == 1: # если датчик вернул сообщение об ошибке 1 print "Fail because of access error, check the connection" elif sun_result[0] == 2: # если датчик вернул сообщение об ошибке 2 print "Fail because of interface error, check your code" sleep(1) # Показания считываются раз в секунду sun_sensor_num +=1 i += 1 for sun_sensor_num in range (1,5): print "Disable sun sensor №", sun_sensor_num sun_sensor_turn_off(sun_sensor_num) # Выключаем солнечный датчик sun_sensor_num +=1
Описание __старой__ версии датчика.