Ускорьтесь с акселерометрами и Netduino

Грэг Дункан

Мы слышали об акселерометрах тысячи раз, но что они представляют собой на самом деле? Как они работают? И что более важно для читателей Coding4Fun, как с их помощью можно создавать классные устройства и приложения?

Странно, вы должны спросить… Как насчет учебника, который объясняет, как работают акселерометры, как создать проект с Netduino, а также и обсуждает и кодирование?

Акселерометры: библиотека ADXL345 и руководство для Netduino

Введение

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

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

Что такое акселерометр?

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

Акселерометр – прибор, измеряющий ускорение. Пока достаточно просто, но имеется два типа акселерометров: статическое ускорение (наклон) и динамическое ускорение (движение).

Вход акселерометра, говорит пользователю, в каком направлении к своим осям действует приложенная сила. Хорошая новость состоит в том, что акселерометр улавливает все виды движения, что означает, что можете получить он него всю возможную информацию. Плохая новость заключается в том, что акселерометр собирает все виды движения, что означает, что вы не знаете, на что вы смотрите!

...

Статья дает представление о том, как работает акселерометр

clip_image002

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

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

Итак, нам надо понять какие данные мы получаем от акселерометра, и отфильтровать их.

Как решить эту проблему?

Есть несколько разных способов решения этих проблем. В следующей секции мы пройдем по всему процессу обмена данными с сенсором, получению «сырых» данных, их фильтрации и использования результатов.

Решение.

Существует множество различных производителей акселерометров, Analog Devices выпускает прекрасные датчики, наряду с Invensense. Существуют многие и многие разные типы устройств, которые вы можете выбрать, а выбор наилучшего требует специального руководства! Поэтому мы используем тот акселерометр, который применяем постоянно на Love Electronics – ADXL345.

Этот отличный компактный чип – выгодная покупка. Это трехосевой цифровой акселерометр с хорошим диапазоном измерений (вплоть до 16g) с очень хорошим разрешением (13 разрядов, 4 mg/LSB). Хотя большинство из этих параметров явно излишни для куба, никогда не мешает иметь как можно более надежные данные. Чес с более точными данными мы имеем дело, тем лучше будут результаты.

Если вы решите последовать этому руководству, вам понадобиться плата ADXL345 и Netduino, а также Windows ПК с Visual Studio 2010 (версия Express Edition свободно доступна).

Кроме того требуется способ подсоединить последовательный порт Netduino к вашему ПК, так как Netduino в настоящее время не обеспечивает отправку последовательных данных через USB-соединение. Я рекомендую использовать плату USB to Serial Breakout Board.

C этого момента в статье начинается создание аппаратной платформы и обсуждение кода:

clip_image004

...

Чтение данных.

Отлично, мы подключились к акселерометру и хотим прочитать данные с устройства. Чтобы сделать это, скопируйте следующий код с метод Main файла Program.cs и прочтите в комментариях, что делает каждая часть кода.

 // Создайте экземпляр акселерометра ADXL345.
     ADXL345 accel = new ADXL345();
 // Убедитесь, что удалось к нему подключиться
 // (будет сгенерировано исключение, если он не отвечает).
     accel.EnsureConnected();
 // Задайте диапазон измерения акселерометра +/- 2g.
     accel.Range = 2;
 // Задайте полное разрешение.
     accel.FullResolution = true;
 // Разрешите измерения на устройстве.
     accel.EnableMeasurements();
 // Задайте темп передачи данных в 50 Гц
     accel.SetDataRate(0x0A);
     double yAxisGs, xAxisGs; // Здесь хранятся данные, полученные от акселерометра.
     double yAxisRadians, xAxisRadians; // Здесь хранятся преобразованные в радианы значения.
 // Таймер позволяет задать частоту измерений, мы зададим период в 20 мс, //что соответствует темпу измерений, заданному для акселерометра
     int timerPeriod = 20;
 Timer timer = new Timer(delegate(object o)
 {
     // Получить данные от акселерометра.
     accel.ReadAllAxis();
     // Получить ускорения по двум осям в g.
     yAxisGs = accel.ScaledYAxisG;
     xAxisGs = accel.ScaledXAxisG;
     // Нас интересуют величины в диапазоне от -1g до +1g, отбросим остальное.
     if (yAxisGs > 1) yAxisGs = 1; else if(yAxisGs < -1) yAxisGs = -1;
     if (xAxisGs > 1) xAxisGs = 1; else if (xAxisGs < -1) xAxisGs = -1;
     // Вычислить углы для каждой оси, используя функцию Asin.
     yAxisRadians = ExMath.Asin(yAxisGs);
     xAxisRadians = ExMath.Asin(xAxisGs);
     Debug.Print("X: " + xAxisRadians + "\t\tY: " + yAxisRadians);
 }, null, 0, timerPeriod);
 // Убедиться, что устройство запустило таймер и не прекратило выполнение. 
 while (true)
 {
     Thread.Sleep(Timeout.Infinite);
 }

Если вы попытаетесь запустить этот код, то получите ошибку компиляции, связанную с тем, что Visual Studio не может найти ExMath. Это происходит потому, что это вызов находится в проекте LoveElectronics . Resources, который был в скачанном вами архивном файле Love Electronics Accelerometer. Просто добавьте это проект в решению, как вы сделали с проектом акселерометра, и выполните AddReference ... еще раз, чтобы сделать доступным ExMath для приложения. Теперь просто добавьте

using LoveElectronics.Resources;

как вы делали прежде и теперь ваше предложение должно скомпилироваться.

Статья продолжается демонстрацией того, как отфильтровать данные и представить их в наглядной форме.

clip_image006

Если вы хотите добавить возможности акселерометра к следующему проекту Netduino, или просто интересуетесь, как он работает, эта статья станет интересным чтением.

Вот несколько ссылок, которые могут оказаться интересными: