цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Как сделать компьютерную мышь на основе Arduino и акселерометра MPU6050



Как сделать компьютерную мышь на основе Arduino и акселерометра MPU6050

Автор: Mike(admin) от 5-06-2022, 23:55

Иногда хочется сделать что-то повседневно используемое своими руками. Таким примером может быть компьютерный манипулятор типа мышь, которую можно собрать на основе Arduino, кнопок и акселерометра MPU6050, который вместо шарика или светового луча будет отслеживать положение устройства.


Как сделать компьютерную мышь на основе Arduino и акселерометра MPU6050

Сразу стоит сказать, что в рамках данного проекта не нужно использовать наиболее распространенные версии Arduino, вроде UNO, Mega, Nano. Потому что для передачи данных, полученных по I2C от датчика, от платы к компьютеру нам понадобится плата Arduino, которая поддерживает собственный последовательный порт USB. То есть здесь нам понадобится Arduino Leonardo или Arduino Micro.


Соедините все компоненты в соответствии со следующей схемой подключения.


Как сделать компьютерную мышь на основе Arduino и акселерометра MPU6050

Код программы Arduino приведен далее.



#include <Wire.h>
#include <I2Cdev.h>
#include <MPU6050.h>
#include <Mouse.h>

MPU6050 mpu;
int16_t ax, ay, az, gx, gy, gz;
int vx, vy;

const int button1 = 4;
const int button2 = 5;
int responseDelay = 10;
void setup() {
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  Serial.begin(9600);
  Wire.begin();
  Mouse.begin();
  mpu.initialize();
  if (!mpu.testConnection()) {
    while (1);
  }
}

void loop() {
  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

  vx = (gx - 400) / 200; // «-400», потому что ось x гироскопа дает значения около -350,
// когда он не движется. Измените это значение, если вы получите что-то другое с помощью тестового кода,
// проверяя, есть ли значения, далекие от нуля
  vy = -(gz - 200) / 200; // тоже самое по поводу "-200"
  int buttonState1 = digitalRead(button1);
  int buttonState2 = digitalRead(button2);

  if (buttonState1 == HIGH) {
    Mouse.press(MOUSE_LEFT);
    delay(100);
    Mouse.release(MOUSE_LEFT);
    delay(200);
  }
  else if (buttonState2 == HIGH) {
    Mouse.press(MOUSE_RIGHT);
    delay(100);
    Mouse.release(MOUSE_RIGHT);
    delay(200);
  }
  Mouse.move(vx, vy);

  delay(20);
}

Соберите схему и загрузите код. Если все заработало сразу, то у вас в руках настоящая самодельная компьютерная мышка. Тем не менее, загвоздки здесь могут появиться в любой момент. Давайте рассмотрим них.


Проблема 1: Мои кнопки работают автоматически. Решение: Снова проверьте соединение, потому что только плохое соединение вызывает такие проблемы.


Проблема 2: Мой курсор нестабилен, он движется автоматически или сильно колеблется. Решение: Измените калибровочные значения плоскости X и Y в соответствии с вашим датчиком, потому что разные датчики имеют разные значения калибровки.


Проблема 3: У меня кнопки работают по обратной логике. Решение: Проверьте тип кнопок: Pull up или Pulldown. В случае чего, просто измените соединение.




© digitrode.ru


Теги: Arduino, акселерометр, MPU6050




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий