Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Мы слышали об акселерометрах тысячи раз, но что они представляют собой на самом деле? Как они работают? И что более важно для читателей Coding4Fun, как с их помощью можно создавать классные устройства и приложения?
Странно, вы должны спросить… Как насчет учебника, который объясняет, как работают акселерометры, как создать проект с Netduino, а также и обсуждает и кодирование?
Акселерометры: библиотека ADXL345 и руководство для Netduino
Введение
Пока акселерометры могут требовать немного понимания, для их использования, это не означает, что они сложны, или требуют черной магии.
В этом руководстве я научу вас использовать акселерометр для управления кубом, мы увидим, как различные подходы изменяют его реакцию, и выясним, какой подход является наилучшим для данного приложения.
Что такое акселерометр?
Акселерометр – принадлежит к семье сенсоров движения, состоящей из акселерометров, гироскопов и компасов. В данном руководстве мы поговорим главным образом об акселерометрах, однако в следующих руководствах мы затронем и другие датчики, создавая полноценный внутренний измерительный модуль.
Акселерометр – прибор, измеряющий ускорение. Пока достаточно просто, но имеется два типа акселерометров: статическое ускорение (наклон) и динамическое ускорение (движение).
Вход акселерометра, говорит пользователю, в каком направлении к своим осям действует приложенная сила. Хорошая новость состоит в том, что акселерометр улавливает все виды движения, что означает, что можете получить он него всю возможную информацию. Плохая новость заключается в том, что акселерометр собирает все виды движения, что означает, что вы не знаете, на что вы смотрите!
...
Статья дает представление о том, как работает акселерометр
Итак, наша первая проблема с акселерометром состоит в том, как выделить нужное значение из набора сил. Имея всю информации о том, куда указывает гравитация и как пользователь перемещает устройство, становится сложно получить от сенсора то, что требуется.
Другая проблема связана с тем, что акселерометры – крайне шумные устройства, и я не имею в виду, что они играют громкую музыку в три утра. Их выходной сигнал всегда флуктуирует, они имеют собственные резонансные шумы, они фиксируют вибрации устройства, в которое они вмонтированы, всевозможные помехи влезают в сигнал, который нам нужно отфильтровать.
Итак, нам надо понять какие данные мы получаем от акселерометра, и отфильтровать их.
Как решить эту проблему?
Есть несколько разных способов решения этих проблем. В следующей секции мы пройдем по всему процессу обмена данными с сенсором, получению «сырых» данных, их фильтрации и использования результатов.
Решение.
Существует множество различных производителей акселерометров, 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 этого момента в статье начинается создание аппаратной платформы и обсуждение кода:
...
Чтение данных.
Отлично, мы подключились к акселерометру и хотим прочитать данные с устройства. Чтобы сделать это, скопируйте следующий код с метод 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;
как вы делали прежде и теперь ваше предложение должно скомпилироваться.
Статья продолжается демонстрацией того, как отфильтровать данные и представить их в наглядной форме.
Если вы хотите добавить возможности акселерометра к следующему проекту Netduino, или просто интересуетесь, как он работает, эта статья станет интересным чтением.
Вот несколько ссылок, которые могут оказаться интересными: