lesson02 [ОрбиКрафт 3D]

Инструменты пользователя


Боковая панель

Назначение ОрбиКрафт 3D

Сборка ОрбиКрафт 3D

Интерфейсы конструктора ОрбиКрафт 3D

Работа с ОрбиКрафт 3D по УКВ

Работа с ОрбиКрафт 3D по Wi-Fi

Работа с ОрбиКрафт 3D через WEB-интерфейс

Полезная нагрузка на базе Arduino

ОрбиКрафт 3D на стенде полунатурного моделирования

Среда разработки

РЭ Houston Control Center

Лабораторная оснастка

Обратная связь

lesson02

02 Урок. Знакомство с датчиками

Датчик угловой скорости

Датчик угловых скоростей предназначен для измерения угловой скорости вращающегося объекта. Измерять угловую скорость необходимо для того, чтобы можно было остановить вращение спутника – стабилизировать его. Также с помощью датчика угловой скорости можно заставить спутник вращаться с определенной скоростью.

Принцип работы датчика угловой скорости

Основным измерительным элементом датчика угловой скорости является специальный микроэлектромеханический (МЭМС) гироскоп. Это не обычный гироскоп, в котором с большой скоростью вращается диск, а миниатюрный вибрационный гироскоп. Внутри МЭМС гироскопа есть кольцо, которое, колеблется в одной плоскости. Если такой гироскоп поставить на вращающуюся платформу, плоскость которой совпадает с плоскостью колебаний кольца, то на нее начнет действовать сила Кориолиса пропорциональная скорости вращения платформы. Сила Кориолиса измеряется с использованием пьезоэлементов, которые выдают напряжение, пропорциональное приложенной силе.

Определив силу Кориолиса и зная скорость колебания, можно вычислить угловую скорость и ее изменение (угловое ускорение).

Проверка работоспособности датчика угловой скорости

Подключите датчик угловой скорости и СЭП к БКУ. Откройте Notepad++ и напишите следующую программу.

def control(): # Основная функция программы, в которой вызываем остальные функции
 
    hyro_result = [0,0,0,0] # Инициализируем hyro_result
    num = 1 # Номер Датчика угловой скорости
    print "Enable angular velocity sensor №", num 
    hyro_turn_on(num) # Включаем ДУС
    sleep(1) # Ждем включения 1 секунду
    print "Get RAW data from angular velocity sensor" 
 
    for i in range(10):  #Считываем показания 10 раз
 
	hyro_result = hyro_request_raw(num) #записываем ответ функции
		# hyro_request_raw в переменную hyro_result
 
	if not hyro_result[0]: # если датчик не вернул сообщение об ошибке,
		print "state:", hyro_result[0], "x_raw =", hyro_result[1], \
 			"y_raw =", hyro_result[2], "z_raw =", hyro_result[3]
			# Выводим данные
 
	elif hyro_result[0] == 1: # если датчик вернул сообщение об ошибке 1
		print "Fail because of access error, check the connection"
 
	elif hyro_result[0] == 2: # если датчик вернул сообщение об ошибке 2
		print "Fail because of interface error, check your code"
 
	sleep(1) # Показания считываются раз в секунду
 
print "Disable angular velocity sensor №", num
hyro_turn_off(num)   # Выключаем ДУС

Запустите программу и протестируйте работу ДУС.

Анализ кода

Обратите внимание, после символа # пишут комментарии, которые никак не влияют на работу программы.

Программа начинается с объявления функции control().

Затем мы создаем список hyro_result для получения данных от датчика и переменную num, хранящую номер датчика.

Далее оператор print выводит сообщение о включении датчика.

Затем функция hyro_turn_on(num) включает датчик с указанным номером.

Функция sleep(1) приостанавливает выполнение программы на 1 секунду.

Затем в цикле for i in range(10): мы 10 раз считываем и выводим значение датчика.

Показания датчика считываем с помощью функции hyro_request_raw(num).

Магнитометр

Назначение магнитометра

Информацию об ориентации спутник получает по датчику угловой скорости и магнитометру. Информация об угле нужна для того чтобы разворачивать спутник в необходимую сторону, а информация об угловой скорости необходима для того чтобы стабилизировать спутник, т.е. погасить угловое вращение. Управляющий момент создается с помощью двигателя маховика.

Принцип работы магнитометра

Работа магнитометра основана на применении магниторезистивного эффекта, когда электрическое сопротивление проводника изменяется в соответствии с направлением линий магнитного поля. В основе датчика лежит слой пермаллоя (специального сплава никеля с железом), который обладает сильным магниторезистивным эффектом. Электрическое сопротивление пермаллоя меняется обычно в пределе ±5 % в зависимости от силы и направления действующего магнитного поля.

Таким образом, измеряя силу тока, протекающего через слой пермаллоя при подаче постоянного напряжения +5В можно определить направление линий магнитного поля. Для того чтобы измерить направление магнитных линий по всем трем осям используют три маленьких датчика, ориентированных по осям X, Y и Z, установленные в одной микросхеме.

Проверка работоспособности магнитометра

Откройте Notepad++ и напишите следующую программу.

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)

Запустите программу и протестируйте работу магнитометра.

Анализ кода

Программа начинается с объявления функции control().

Затем мы создаем список mgn_result для получения данных от датчика и переменную num, хранящую номер магнитометра.

Далее оператор print выводит сообщение о включении датчика.

Затем функция magnetometer_turn_on(num) включает магнитометр с указанным номером.

Функция sleep(1) приостанавливает выполнение программы на 1 секунду.

Затем в цикле for i in range(10): мы 10 раз считываем и выводим значение магнитометра.

Показания магнитометра считываем с помощью функции magnetometer_request_raw(num).

Солнечные датчики

Назначение солнечных датчиков

Назначение солнечных датчиков – определение расположения спутника относительно Солнца. Так-как положение Солнца относительно Земли в любой момент времени известно достаточно точно, следовательно, можно определить и расположение спутника относительно Земли.

Принцип работы солнечных датчиков

В основе солнечного датчика лежит фотодетектор, который измеряет яркость света. Самые популярные фотодетекторы — это фоторезисторы и фотодиоды. Фоторезистор состоит из материала, сопротивление которого меняется в зависимости от интенсивности падающего света.

В отличие от фоторезистора фотодиод выдает напряжение под действием света. Фотодиодные датчики бывают нескольких типов — LEP (Latheral Effect Photodiode), QD-фотодиод (Quadrant Detector) или матричные.

LEP фотодиод – это одиночный фотодиод с большой чувствительной поверхностью.

QD-фотодиод состоит из четырех независимых фотодиодов, расположенных симметрично относительно центра чувствительной поверхности.

Расчет положения пятна на поверхности QD-фотодиода получается из соотношений выходных токов фотодиодов.

Матричный датчик содержит большое количество фотодиодов и позволяет определить положение Солнца еще точнее.

Проверка работоспособности солнечных датчиков

Подключите по очереди солнечные датчики и СЭП к БКУ и проверьте их работу.

Откройте Notepad++ и напишите следующую программу.

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)

Запустите программу и протестируйте работу солнечного датчика.

Поочередно протестируйте все 4 солнечных датчика.

Анализ кода

Программа начинается с объявления функции control().

Затем мы создаем список sun_result для получения данных от датчика и переменную num, хранящую номер датчика.

Далее оператор print выводит сообщение о включении датчика.

Затем функция sun_sensor_turn_on(num) включает датчик с указанным номером.

Функция sleep(1) приостанавливает выполнение программы на 1 секунду.

Затем в цикле for i in range(10): мы 10 раз считываем и выводим значение датчика.

Показания датчика считываем с помощью функции sun_sensor_request_raw(num).

lesson02.txt · Последние изменения: 2020/03/25 16:55 (внешнее изменение)

Инструменты страницы