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

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

Код программы 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