Introduction: Цифровой Измеритель Углов Атаки Своими Руками
Измеритель углов атаки предназначен для настройки автомата перекоса радиоуправляемых моделей вертолетов. Точно настроенная модель показывает значительно более высокие летные характеристики.
Цифровой измеритель углов атаки стоит в районе 3000 рублей, в то время как аналогичный прибор можно построить самостоятельно, немного дешевле. На мой взгляд главной мотивацией здесь вряд ли станет желание сэкономить. Основным положительным результатом станет то, что в процессе работы над проектом у вас появится возможность познакомиться с работой акселерометра, научиться писать несложный код, а так же освежить школьный курс тригонометрии.
Для работы над проектом нам понадобятся следующие изделия:
- Измеритель углов атаки (Pitch gauge). Он необходим для крепления акселерометра к лопасти вертолета.
- Любой цифровой акселерометр (я использовал стандартный модуль от Amperka)
- Любой контроллер, с которым вам удобно работать (я использовал Arduino Uno, так как он у меня был)
- Провода для подключения акселерометра к контроллеру (в моем случае шли в комплекте с модулем акселерометра)
В ходе работы мы подсоединим контроллер к акселерометру, закрепим электронику на измерителе углов атаки и напишем программу для работы устройства.
Step 1: Строим Прибор
Задача элементарная, нам необходимо закрепить акселерометр на измерителе угла атаки таким образом, чтобы оси акселерометра максимально точно совпадали с осями измерителя.
В моем случае акселерометр был уже напаян на плату, оси координат обозначены. Для крепления акселерометра я использовал двусторонний скотч.
Для подключения акселерометра к контроллеру я использовал обычный трехпроводной шлейф и Troyka Sheild только по тому, что он у меня был. Кроме того, с применением этой платы отпала необходимость в пайке, так как платы просто вставляются друг в друга пинами.
Step 2: Программирование
Для работы моего акселерометра понадобилась вот эта библиотека. Устанавливать библиотеку для Ардуино весьма не сложно, достаточно просто положить файлы в соответствующий каталог в корневой директории Ардуино.
Данная библиотека устроена так, что с помощью команды accel.readX_G() возвращает скалярную величину проекции гравитационной постоянной на ось X акселерометра.
accel.readY_G() - на ось Y,
accel.readZ_G() - ну вы догадались.
Однако для удобства работы с прибором, мне бы хотелось видеть значения угла наклона в градусах. Для этого можно применить тригонометрическую формулу на скриншоте выше.
Возможно у читателя возникнет вопрос - почему в формуле используются значения проекций на все три оси акселерометра, когда для расчета угла достаточно только одной? Отвечаю - так точнее получается. Оказывается, что точность измерения с помощью проекции ветора гравитационной постоянной зависит от измеряемого угла и, к примеру, при околонулевых точные измерения произвести практически невозможно. Для повышения точности и используются дополнительные оси. Подробнее об этом можно почитать тут.
Полную версию кода привожу на следующей странице.
Step 3: Код Ардуино
// библитоека для работы I²C
#include // библиотека для работы с модулями IMU #include
// создаём объект для работы с акселерометром Accelerometer accel;
float x; float y; float z; float Beta; float Param;
void setup() { // открываем последовательный порт Serial.begin(9600);
// выводим сообщение о начале инициализации Serial.println("Begin init..."); // инициализация акселерометра accel.begin(); // выводим сообщение об удачной инициализации Serial.println("Init completed"); // устанавливаем чувствительность accel.setRange(RANGE_2); }
void loop() { x = accel.readX_G(); y = accel.readY_G(); z = accel.readZ_G();
Param = x/(sqrt(pow(y,2) + pow(z,2))); Beta = atan (Param) * 180 / 3.141592;
Serial.print(Beta); Serial.println(""); delay(500); }