Содержание
Обзор датчика пространства 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.