Магнитометр
Виртуальное потребление - 40мА

Рисунок 1. Магнитометр
Чаще всего при проектировании космических аппаратов, работающих на низких орбитах, в качестве одного из устройств определения ориентации (как правило, дополняющего солнечные датчики), используют магнитометр (рисунок 1).
Магнитометр измеряет магнитное поле вокруг себя, выдавая три компоненты вектора индукции магнитного поля, в единицах, измеряемых в Тесла. В идеальных условиях магнитометр на борту спутника измеряет именно геомагнитное поле Земли - то самое, которое заставляет поворачивать стрелку компаса у наземного пользователя. Однако в реальной жизни конструкция любого спутника содержит в своем составе магнитные материалы (например, постоянные магниты электроприводов), поэтому магнитометр измеряет некое суммарное поле Земли и поле самого спутника - т.н. суперпозицию полей.
Сравнение показаний магнитометра с расчетными значениями модели геомагнитного поля позволяют оценить ориентацию (а в некоторых случаях и положение) космического аппарата в пространстве. При проведении экспериментов с конструктором ОрбиКрафт предполагается использование магнитометра в качестве прибора как для определения ориентации, так и для определения положения спутника на «орбите», т.е. для навигации. При этом «геомагнитное» поле, измеряемое магнитометром на борту, создается специальной лабораторной оснасткой Терра и управляется от компьютера по заранее заданному и известному закону управления.
Для получения текущих показаний магнитометра используется функция (на языке C):
int32_t magnetometer_request_raw(uint16_t num,int16_t *pRAW_dataX,int16_t *pRAW_dataY,int16_t *pRAW_dataZ);
Внутри констуктора ОрбиКрафт, как и на реальных аппаратах, показания магнитометра зависят не только от внешнего «геомагнитного» поля. Другие приборы (в основном двигатели-маховики и система энергопитания) могут вносить помехи в измерения, поэтому не рекомендуется установка магнитометра в непосредственной близости от этих устройств.
Код проверки магнитометра на языке C
#include "libschsat.h"
/*
** Lab 2: get a raw data from a magnetometer
*/
void control(void)
{
int i;
const int num = 1; /* magnetometer #1 */
printf("Enable magnetometer #%d\n", num);
magnetometer_turn_on(num);
Sleep(1);
printf("Get RAW data from magnetometer #%d\n", num);
for (i = 0; i < 10; i++) {
int16_t x, y, z;
if (LSS_OK == magnetometer_request_raw(num, &x, &y, &z)) {
printf("%d: x=%d y=%d z=%d\n", i, x, y, z);
} else {
puts("Fail!");
}
Sleep(1);
}
printf("Disable magnetometer #%d\n", num);
magnetometer_turn_off(num);
}
Код проверки магнитометра на языке Python
def control(): # Основная функция программы, в которой нужно вызывать остальные функции
mgn_result = [0,0,0,0] # Инициализируем mgn_result
num = 1
print "Enable magnetometer №", num
magnetometer_turn_on(num)
sleep(1)
print "Get RAW data from magnetometer"
for i in range(10):
mgn_result = magnetometer_request_raw(num)
if not mgn_result[0]: # если датчик вернул сообщение об ошибке,
print "state:", mgn_result[0], "x_raw =", mgn_result[1], "y_raw =", mgn_result[2], "z_raw =", mgn_result[3] # Обратите внимание на символ переноса строки!
elif mgn_result[0] == 1:
print "Fail because of access error, check the connection"
elif mgn_result[0] == 2:
print "Fail because of interface error, check your code"
sleep(1)
print "Disable magnetometer №", num
magnetometer_turn_off(num)