Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Bluetooth-мышь под управлением смартфона: виртуальный джойстик своими руками

Компоненты и материалы

Arduino UNO ×1
Bluetooth-модуль HC-05 ×1
Перемычки ×1 набор

Приложения и сервисы

О проекте

Проект похож на мою прошлую работу с джойстиком для управления курсором ПК. Ключевое отличие — создано смартфон-приложение с двумя виртуальными джойстиками: один двигает курсор, второй — прокручивает экран, плюс кнопки левого/правого клика как на тачпаде.

Принцип работы

Приложение на смартфоне передает по Bluetooth (HC-05) данные осей джойстиков, статус скролла и кликов на Arduino Uno. Arduino пересчитывает текущие координаты курсора (X: 0–1279, Y: 0–799 — получены через mouse.get_position() в Python) с учетом смещения от джойстика и формирует выходной пакет. Python-скрипт на компьютере принимает данные по Serial и выполняет действия мыши через модуль mouse.

Об приложении (MIT App Inventor)

Главный экран: два виртуальных джойстика, кнопки кликов, скролл. Протокол передачи (каждые 20 мс):

  1. Байт старта: 255
  2. 1 байт — X-ось джойстика
  3. 1 байт — Y-ось джойстика
  4. 1 байт — статус: левый клик, правый клик, скролл

Сторона Arduino

Принимает байты, парсит пакет (ожидает стартовый 255). Значения осей маппятся в смещение курсора с настройкой чувствительности (sensitivity=20):

Обработка кликов/скролла с защитой от дребезга (фиксируется предыдущее состояние). Результат выводит в Serial в формате: X:Y:clicks (например, 640:400:1).

Python-программирование

Требуется Python 3. Установка модулей через командную строку:

cd <путь_к_python>
py -m pip install --upgrade pip
py -m pip install mouse
py -m pip install pyserial

Запуск

  1. Установите приложение Bluetooth Mouse Control на смартфон.
  2. Загрузите скетч в Arduino, соберите схему (см. раздел Schematics).
  3. Python: скопируйте код в блокнот, укажите правильный COM-порт (например, COM3), сохраните как .py.
  4. Откройте файл в IDLE и запустите (F5).
  5. В приложении на смартфоне подключитесь к HC-05 — курсор начнет двигаться за джойстиком.

Код

Arduino (C++)

int datareceived[5] = {0,0,0,0};
int in_byte = 0, array_index = 0;
int l_prev=0, r_prev=0;

void setup() { Serial.begin(9600); }

void loop() {
  int clicks=0, sensitivity=20, xpos=0, ypos=0;
  static int height=0, width=0;

  if (Serial.available() > 0) {
    in_byte = Serial.read();
    if (in_byte == 255) array_index = 0;
    datareceived[array_index] = in_byte;
    array_index++;

    if (datareceived[1] >= 110) xpos = map(datareceived[1], 110, 172, 0, sensitivity);
    if (datareceived[1] <= 70)  xpos = map(datareceived[1], 60, 1, 0, -sensitivity);
    if (datareceived[2] >= 110) ypos = map(datareceived[2], 110, 255, 0, sensitivity);
    if (datareceived[2] <= 60)  ypos = map(datareceived[2], 70, 1, 0, -sensitivity);

    if (datareceived[3]==1 && l_prev==0) clicks=1;
    else if (datareceived[3]==2 && r_prev==0) clicks=2;
    else if (datareceived[3]==3 || datareceived[3]==4) clicks=datareceived[3];
    l_prev = datareceived[3];
    r_prev = datareceived[3];

    if (xpos!=0 || ypos!=0 || clicks!=0) {
      height += ypos; width += xpos;
      height = constrain(height, 0, 799);
      width  = constrain(width,  0, 1279);
      Serial.print(width); Serial.print(":");
      Serial.print(height); Serial.print(":");
      Serial.println(clicks);
    }
  }
}

Python

import mouse, sys, time, serial
mouse.FAILSAFE = False
ArduinoSerial = serial.Serial('com3', 9600)  # Укажите свой COM-порт
time.sleep(1)

while True:
    data = str(ArduinoSerial.readline().decode('ascii'))
    x, y, z = data.split(":")
    x, y = int(x), int(y)
    mouse.move(x, y)
    if '1' in z: mouse.click(button="left")
    elif '2' in z: mouse.click(button="right")
    elif '3' in z: mouse.wheel(delta=-1)
    elif '4' in z: mouse.wheel(delta=1)

Схема подключения

См. раздел Schematics в исходнике (изображение схемы). HC-05 подключается к аппаратному Serial (пины 0/1) или SoftwareSerial — в коде используется аппаратный Serial на 9600 бод.

Производственный процесс

  1. Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
  2. Настольная RGB-лампа с управлением жестами – Интерактивное беспроводное освещение
  3. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  4. Управление светодиодами через Alexa с помощью Raspberry Pi – простое пошаговое руководство
  5. Превращаем старую радиоуправляемую машину в джойстик-контролируемый болид на Arduino
  6. Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
  7. Роботизированная рука 6 степеней свободы на Arduino Mega с управлением через Nunchuk
  8. Голосовой робот на Arduino Nano: Управление речью через Bluetooth
  9. MobBob: Самостоятельная сборка Arduino-робота под управлением Android-смартфона
  10. Голосовое управление бытовыми приборами: Bluetooth-управление через Google Assistant