亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

智能手机控制鼠标

组件和用品

Arduino UNO
× 1
HC-05 蓝牙模块
× 1
跳线(通用)
× 1

应用和在线服务

Arduino IDE
IDLE(Python GUI)
MIT App Inventor 蓝牙鼠标控制

关于这个项目

这个项目类似于我以前使用操纵杆控制 PC 光标的工作。主要区别在于我创建了一个智能手机应用程序,其中包含 2 个虚拟操纵杆来移动光标和滚动屏幕,还可以像常规触控板一样进行左右单击。

工作

该项目涉及一个智能手机应用程序,该应用程序使用蓝牙将操纵杆的 x 和 y 轴数据、滚动状态、左键和右键单击状态发送到连接到 HC-05 蓝牙模块的 Arduino Uno。这些接收到 Arduino 的数据被操纵以更改当前光标的位置以获得新位置。然后将结果数据以及滚动和按钮状态打印为 Python 草图识别为读取的输出。 Python 草图用于使用鼠标模块执行鼠标操作。

关于申请

智能手机应用程序是使用 MIT-App Inventor 创建的。创建应用程序很简单,因为您只需要添加所需的块来构建所需的应用程序。我已经参考了有关制作它们的桌面机器人教程。应用程序主画面如下-

在向HC-05模块发送主要信息之前,应用程序首先发送一个一字节的数字(255)来表示信息的开始。数据传输顺序如下-

1.发送'255'表示开始

2. 发送1个字节的摇杆x轴值

3.发送1字节摇杆y轴值

4.发送左键、右键、滚动状态(1字节)。

来自应用程序的数据每 20 毫秒发送一次到 Arduino UNO。

Arduino的一面

Arduino 在 HC-05 蓝牙模块的帮助下接收来自应用程序的数据字节。 Arduino 包含光标的当前坐标,其中 x 坐标范围从 0 到 1279,y 坐标范围从 0 到 799。我从 python 函数 mouse.get_position() 获得了这些极端坐标 移动光标时返回坐标(未在主草图中使用)。

根据移动操纵杆时接收到的数据,当前光标的位置(x 和 y 坐标)与应用程序接收到的数据相加/相减,以将光标移动到新的所需坐标。然后将最终数据按下面给出的顺序打印在串行监视器上。

下面的数据序列最终被python程序读取执行。为此,我们需要按照以下步骤下载额外的模块,即鼠标和 pyserial。

Python编程

用户必须在他们的笔记本电脑/计算机上安装 python 3。可以从这里下载。

(Windows)

安装完成后,复制python文件所在路径。

以下步骤将在命令提示符下执行。打开命令提示符并输入以下内容-

1. cd <粘贴python文件的路径>

2. py -m pip install --upgrade pip

3. py -m pip install mouse

4. py -m pip install pyserial

鼠标 模块用于执行鼠标操作和 pyserial 模块用于从 arduino 发送/接收数据。我已经安装了必要的模块,所以我得到了这个

执行

在您的智能手机设备上安装蓝牙鼠标控制应用。

将 Arduino 草图上传到您的 Arduino UNO 并按照原理图中给出的电路进行操作。

Python 端 -

1.将python代码复制粘贴到记事本文件中。将 COM 端口更改为 Arduino UNO 的 COM 端口并将其保存为“.py”。

2.打开python IDLE并打开它的记事本文件。

3. 运行草图。

然后您将被引导回图 2.2 中的屏幕。

打开手机应用,连接蓝牙模块,改变摇杆方向会发现光标移动。

代码

  • Arduino 代码
  • Python 代码
Arduino 代码Arduino
int datareceived[5] {0,0,0,0}; // 从 phoneint 中存储字节 in_byte =0;int array_index =0;int l_prev=0,r_prev=0; //鼠标左键和右键单击的先前状态 void setup() {Serial.begin (9600); // 启动串口监视器} int height=0,width=0;void loop() { int clicks=0;整数灵敏度=20; // 您可以调整灵敏度 int xpos=0,ypos=0;if (Serial.available()> 0) { //从手机接收字节 in_byte=Serial.read(); //将字节存储到变量中 if (in_byte ==(255)) { // 如果变量为 0,则将数组索引为 0。array_index =0; } datareceived[array_index] =in_byte; //将数字存入数组 array_index =array_index +1; if(datareceived[1]>=110)xpos=map(datareceived[1],110,172,0,敏感性); // 移动时 rightif(datareceived[1]<=70)xpos=map(datareceived[1],60,1,0,-sensitive); // 当向左移动时if(datareceived[2]>=110)ypos=map(datareceived[2],110,255,0,sensitive); // 向下移动时if(datareceived[2]<=60)ypos=map(datareceived[2],70,1,0,-sensitive); // 当移动时 upif(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]; // scrolll_prev=datareceived[3];r_prev=datareceived[3];if(xpos!=0 or ypos!=0 or clicks!=0) // 当操纵杆移动或按钮被按下或滚动时{ height=height+ypos;width=width+xpos;if(height>=799)height=799;if(height<=0)height=0;if(width>=1279)width=1279;if(width<=0)width=0;Serial.print(width);Serial.print(":");Serial.print(height);Serial.print(":");Serial.println(clicks);clicks=0;} }}
Python 代码Python
import mouse, sysimport time import serialmouse.FAILSAFE=FalseArduinoSerial=serial.Serial('com3',9600) #指定正确的COM端口time.sleep(1) #delay of 1 secondwhile 1:data=str(ArduinoSerial.readline) ().decode('ascii')) (x,y,z)=data.split(":") # 读取x轴和y轴数据 (x,y)=(int(x),int(y) ) # 转换为 int mouse.move(x,y) # 将光标移动到所需坐标 if '1' in z:mouse.click(button="left") #clicks mouse button elif '2' in z:mouse. click(button="right") elif '3' in z:mouse.wheel(delta=-1) # 向下滚动 elif '4' in z:mouse.wheel(delta=1) # 向上滚动 

示意图


制造工艺

  1. 通过蓝牙控制的树莓派机器人
  2. 手势控制互动桌灯
  3. 使用 Arduino 和智能手机的 DIY 电压表
  4. Alexa 通过 Raspberry Pi 控制 LED
  5. 操纵杆控制的遥控车
  6. Arduino 带蓝牙控制 LED!
  7. Nunchuk 控制机械臂(使用 Arduino)
  8. 语音控制机器人
  9. MobBob:由 Android 智能手机控制的 DIY Arduino 机器人
  10. 带有 OK Google 的蓝牙语音控制设备
  11. Arduino 控制的钢琴机器人:PiBot
  12. 蓝牙控制的避障机器人