Не так давно я писал, что в конечном варианте квадрокоптера, будет установлен инклинометр на основе китайского 10-DOF устройства. И вот, наконец-то нашлось время, чтобы испытать этот интересный прибор на одном из моих mbed контроллеров. 10-DOF означает, что данный IMU позволяет отслеживать 10 параметров, определяющих его положение в пространстве. Список этих параметров включает:
Здесь следует пояснить, что показания барометра можно легко преобразовать в высоту над уровнем моря, что также является одной из пространственных координат. Также, чип барометра имеет встроенный термодатчик, показания которого также могут быть сняты микроконтроллером. Все расположенные на плате датчики соединены I2C шиной. Благодаря этому, устройство достаточно легко подключается ко всем распространенным платформам, включая Arduino, mbed и TI LaunchPad. Кроме того, такой вариант подключения высвобождает аналоговые входы микроконтроллера, количество которых ограничено. Подключение к mbedПлата IMU имеет 11 выводов:
Для работы устройства требуется подключить только цепь питания и каналы шины I2C. Как обычно, эксперимент по оживлению устройства происходил при помощи mbed. Схема подключения изображена ниже. Как видно на схеме, I2C линии "подтянуты" к напряжению питания сопротивлением 2.2КОм (рекомендуется 2.2 - 10КОм). Есть подозрение, что на плате IMU уже стоят соответствующие резисторы, обязательно проверю это предположение в следующий раз. Что касается питания, то я подключил IMU к +3.3В, хотя согласно даташиту можно использовать и +5В. ПрограммаВвиду того, что указанный IMU содержит достаточно распространенные модели датчиков, найти соответствующие библиотеки для mbed не составило труда. Уверен, что для Arduino ситуация окажется аналогичной. Единственные проблемы возникли при подключении гироскопа. Здесь следует помнить, что адреса I2C устройств на mbed сдвинуты на один бит влево относительно аналогичных адресов для Arduino. Например, если Arduino использует для общения с гироскопом L3G4200D адреса 0x68 или 0x69, то при работе с mbed следует использовать 0xD1 или 0xD2, соответственно. В коде библиотеки для данного гироскопа был установлен адрес 0xD2, и попробовать 0xD1 я догадался только после сканирования всей шины. Код программы достаточно примитивен и почти полностью заимствован у одного из резидентов портала mbed.org. РезультатыНиже представлен скриношот выходных данных тестируемого IMU в приложении TeraTerm. Как можно заметить, в моей квартире температура воздуха составляет почти 28 градусов Цельсия. У меня нет другого градусника, но учитывая постоянное нытье гостей, я склонен верить этим показаниям. Атмосферное давление - около 98 260 Паскалей, что соответствует 737 мм ртутного столба. Согласно данным об атмосферном давлении по городу, полученная величина примерно соответствует действительности. Теперь что касается высоты над уровнем моря, которая рассчитывается исходя из показаний термометра и барометра по известным формулам (формулы есть в гугле и в даташите датчика). Официально, город Екатеринбург расположен в 240 метрах над уровнем моря. Учитывая холмистый рельеф города и тот факт, что измерения проводились на 16-м этаже, полученная величина в 258 метров выглядит вполне правдоподобно. ВыводыЯ вполне доволен этим, относительно дешевым китайским IMU ($21 на ebay). Справедливости ради следует отметить, что китайского в нем только сама плата и обвязка. Сами же датчики являются продуктом весьма солидных компаний, таких как Bosch, Pololu, Analog Devices и Honeywell. Плата изготовлена качественно, все чипы расположены строго параллельно друг другу, что очень важно в подобных составных устройствах, которые используются для точного позиционирования в пространстве. В ближайшем будущем, именно этот IMU заменит аналоговые гироскоп и акселерометр, которые сейчас установлены на моем квадрокоптере. |
События >