Трехосевой акселерометр GY-61 ADXL335
Модуль GY61 – аналоговый акселерометр на базе микросхемы ADXL335.
Содержание
Обзор датчика пространства GY-61 ADXL335
Модуль GY61 (рис. 1) – аналоговый акселерометр на базе микросхемы ADXL335.
Рисунок 1. Модуль GY61.
Акселерометр используют для определения вектора ускорения. Акселерометр ADXL335 имеет три оси, и поэтому может определять вектор ускорения в трёхмерном пространстве. Ввиду того, что сила земного притяжения - это тоже вектор, то акселерометр может определять свою собственную ориентацию в трёхмерном пространстве относительно центра Земли.
На рис. 2 изображены координатные оси чувствительности акселерометра по отношению к геометрическому размещению корпуса устройства в пространстве.
Рисунок 2.
Если датчик сильно тряхнуть вдоль вертикальной оси Z, то значение Zout будет больше, чем 1g, Максимальное измеряемое ускорение - 3g по каждой из осей в любом из направлений.
Технические характеристики
- Чип: ADXL335;
- Напряжение питания: 3 - 5В;
- Потребляемый ток: 350 мкА;
- Диапазон измерений: -3.6g - 3.6g;
- Чувствительность: 300 мВ/g;
- Температура эксплуатации: -40...+85 °С;
- Размеры: 20.3 мм х 15.7 мм;
- Вес: 5 грамм.
Подключение GY61 к плате Arduino
Схема подключения модуля к плате Arduino показана на рис. 3.
Для питания модуля акселерометра необходимо подать на вывод VCC напряжение +3,3 В. Контакты x, y, z модуля подключаются к аналоговым выводам Arduino.
Рисунок 3. Схема соединений для подключения модуля GY-61 к плате Arduino
Загрузим на плату Arduino скетч вывода аналоговых значений для осей x, y и z модуля GY-61. Содержимое скетча показано в листинге 1.
Листинг 1
// пины подключения x,y,z
const int pinX=A0;
const int pinY=A1;
const int pinZ=A2;
// переменные для хранения значений
unsigned int x, y, z;
void setup() {
// запуск последовательного порта
Serial.begin(9600);
}
void loop() {
// получение данных
x = analogRead(pinX);
y = analogRead(pinY);
z = analogRead(pinZ);
// вывод в последовательный порт
Serial.print(x);
Serial.print(" ");
Serial.print(y);
Serial.print(" ");
Serial.print(z);
Serial.println();
// пауза
delay(3000);
}
Загрузим скетч на плату Arduino и попробуем определить значения на аналоговых портах A0, A1, A2 при значениях на осях -1g и 1g (устанавливая датчик в плоскостях согласно рис. 2) и резкое торможение по z (имитация шага). Значения примерные, ибо плоскости установлены примерно.
Пример использования аналогового акселерометра GY-61
В качестве примера рассмотрим проект озвучки шагов для костюма робота. При шаге должен воспроизводиться звук "металлического" шага робота.
Нам потребуются следующие компоненты:
- Плата Arduino Nano – 1;
- Модуль GY-61 – 2;
- Плата DFPlayer mini – 1;
- Micro-SD карта – 1;
- Динамик – 1;
- Провода.
Схема соединения элементов показана на рис. 4.
Рисунок 4. Схема соединений
Приступай к написанию скетча. Постоянно проверяем показания с двух датчиков. При скачке данных по оси z, по software-последовательному порту отправляем команду пллеру для воспроизведения трека 1. Трак 00001.mp3 записан на microSD карту. В течении секунды блокируем прием данных от датчиков GY61.
Содержимое скетча показано в листинге 2.
Листинг 2
// для подключения DFPlayer
#include <SoftwareSerial.h>
// пины подключения x,y,z
const int pinZ1=A2;
const int pinZ2=A5;
// переменные для хранения значений
unsigned int z1, z2;
// переменные для шага
unsigned long millisstep=0;
// класс для DFPlayer
class mp3TF{
SoftwareSerial* mySerial;
public :
void init (SoftwareSerial*);
void sendCmd (uint8_t *);
void play();
void play (uint16_t index);
void play (int index);
void stop();
void setVolume(uint8_t vol);
void reset ();
};
// создание объекта плеера
mp3TF player = mp3TF ();
SoftwareSerial mp3Serial(9, 10); // RX, TX
void setup() {
// запуск последовательнных портов
mp3Serial.begin (9600);
// запуск и настройка пллера
mp3Serial.begin (9600);
player.init (&mp3Serial);
player.setVolume (30);
delay(1000);
}
void loop() {
// получение данных
if(millis()-millisstep>1000) {
z1 = analogRead(pinZ1);
z2 = analogRead(pinZ2);
if(z1>460 || z2>460) { // шаг
// запуск аудио
player.play (1);
// на секунду блокируем прием данных
millisstep=millis();
}
}
}
Загружаем скетч на плату Arduino и проверяем работу.
Часто задаваемые вопросы FAQ
Ответ: Проверьте правильность подключения датчика к плате Arduino.