Акселерометр используют для определения вектора ускорения. Акселерометр ADXL335 имеет три оси, и поэтому может определять вектор ускорения в трёхмерном пространстве. Ввиду того, что сила земного притяжения - это тоже вектор, то акселерометр может определять свою собственную ориентацию в трёхмерном пространстве относительно центра Земли.
Координатные оси чувствительности акселерометра по отношению к геометрическому размещению корпуса устройства в пространстве.
Координатные оси чувствительности акселерометра
Если датчик сильно тряхнуть вдоль вертикальной оси Z, то значение Zout будет больше, чем 1g, Максимальное измеряемое ускорение - 3g по каждой из осей в любом из направлений.
Технические характеристики акселерометра GY61
- Чип: ADXL335
- Напряжение питания: 3 - 5В
- Потребляемый ток: 350 мкА
- Диапазон измерений: -3.6g - 3.6g
- Чувствительность: 300 мВ/g
- Температура эксплуатации: -40...+85 °С
- Размеры: 20.3 мм х 15.7 мм
- Вес: 5 грамм.
Подключение GY61 к плате Arduino
Для питания модуля акселерометра необходимо подать на вывод VCC напряжение +3,3 В. Контакты x, y, z модуля подключаются к аналоговым выводам Arduino.
Схема соединений для подключения модуля GY-61 к плате Arduino
Загрузим на плату Arduino скетч вывода аналоговых значений для осей x, y и z модуля GY-61.
// пины подключения 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 (устанавливая датчик в плоскостях согласно рисунку) и резкое торможение по z (имитация шага). Значения примерные, ибо плоскости установлены примерно.
|
A0 |
A1 |
A2 |
x = -1g |
280 |
350 |
350 |
x = 1g |
420 |
350 |
350 |
y = -1g |
350 |
280 |
350 |
y = 1g |
350 |
420 |
350 |
z = -1g |
|
|
280 |
z = 1g |
|
|
420 |
z = резкое торможение (имитация шага) |
|
|
>450 |
Пример использования аналогового акселерометра GY-61
В качестве примера рассмотрим проект озвучки шагов для костюма робота. При шаге должен воспроизводиться звук "металлического" шага робота.
Нам потребуются следующие компоненты:
- Плата Arduino Nano – 1
- Модуль GY-61 – 2
- Плата DFPlayer mini – 1
- Micro-SD карта – 1
- Динамик – 1
- Провода
Схема соединений
Приступаем к написанию скетча. Постоянно проверяем показания с двух датчиков. При скачке данных по оси z, по software-последовательному порту отправляем команду плееру для воспроизведения трека 1. Трек 00001.mp3 записан на microSD карту. В течении секунды блокируем прием данных от датчиков GY61.
// для подключения DFPlayer
#include
// пины подключения 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 и проверяем работу.
Что делать если
Нет данных с датчика GY61
Проверьте правильность подключения датчика к плате Arduino.