搜索
bottom↓
回复: 2

用arduino自制鼠标--openbook开元杂志文章推荐

[复制链接]

出0入0汤圆

发表于 2013-9-28 10:52:20 | 显示全部楼层 |阅读模式


         上个月,又有一个鼠标在我手底下阵亡了,作为一个 DIY 达人,我从盒子里 拿出好几个不太好用的鼠标准备自己攒一个,突然发现刚到手的一个 Arduino 控制 板——DFRobot 公司生产的 Dreamer Nano(一款基于 Arduino Leonardo 的小型控制板), 早就看资料知道 Arduino Leonardo 能当鼠标或键盘用,一直也没机会试试。正好就用 Arduino 自己制作一个鼠标吧。



开始准备制作鼠标要用的元件,如图 1 所示,清单如下。  
Dreamer Nano或 Arduino Leonardo   1个
面包板                                              1块
按键                                                 5个
面包板 U 型线                                    1盒
材 料 准 备 好 了, 接 下 来 搭 建 硬 件, Dreamer Nano 的 核 心 是 Leonardo,I/ O 接口采用 Nano 的形式,方便与面包 板 配 合 使 用,USB 接 口 采 用 带 直 插 定 位 脚 的 Mirco USB 插 座。 如 图 2 所 示。


第一步,将 Dreamer Nano 插在面 包板上,如图 3 所示。这里控制板在面 包板上的位置比较偏左,这是因为之后 我们会在控制板的右侧添加一个按键。



第二步,添加 5 个按键,摆成上下左右的样子,分别控制鼠标的上下左右移动, 另外在控制板的右侧添加一个按键用作鼠标点击的功能。





第三步,使用软件 Fritzing 绘制一个连接效果图, 如图 5 所示。看起来按键的连接很杂乱,其实这是 本人为了迁就 U 型面包线的长度,反正改程序是一 件比较容易的事。大家也可以将这些按键连接到其 他引脚。



第四步,按照效果图用 U 型面包线将实物 连接起来。最终效果如图 6 所示。原理图可参 照图 7。









这样我们的硬件 就搭建完了,接下来 看看程序部分。

第 一 步, 打 开 Arduino 开发环境(开 发环境的获取、硬件

的添加这里就不介绍了,相关的内容很多),首先要将 Tools 菜单下的 Board 选项改 为 Arduino Leonardo,如图 8 所示。



第 二 步, 打 开 开发环境中鼠标 的 例 子, 在File— >Examples 中专门有一个 USB(Leonardo) 的 选 项, 在这里面找到 Mouse— >ButtonMouseControl。这 是一个用按键当作鼠标的 例子。

第三步,修改程序中 的引脚变量。在原代码中, 使用的是引脚 2、3、4、5、 6 作为 5 个按键的输入。 9

这里因为本人在硬件搭建上 偷懒的原因,所以使用的引脚有 所变化,根据原理图将这段代码 修改如下,其中引脚 4 对应按键 “上”,引脚 6 对应按键“下”, 引脚 7 对应按键“左”,引脚 9 对应按键“右”,引脚 3 对应鼠 标左键。

// set pin numbers for the five buttons:

const int upButton = 2;
const int downButton = 3;
const int leftButton = 4;
const int rightButton = 5;
const int upButton = 4;
const int downButton = 6;
const int leftButton = 7;
const int rightButton = 9;

第四步,修改 setup() 函数。当 Arduino 的控制板引脚作为输入的时候,通常要 小心电压、电流的极限值。过大的电压、电流会造成控制板的损坏。为避免这种情况, 一般会在引脚的电路上加一个上拉电阻,像图 7 中就是加在按键和 Arduino 引脚的连 接线上,电阻的大小一般为 10kΩ。

但其实 Arduino 控制板内引脚是具有内部上拉功能的,内部上拉相当于是在芯片 内集成了一个电阻接 +5V 电源,不过这需要在程序中进行设定。假设要设定 x 引脚 的模式为输入,且使用内部上拉,则代码为

pinMode( x ,INPUT);
     
digitalWrite( upButton , HIGH);

由原理图能够看出,我们使用的按键均没有添加上拉电路,所以需要使用的 这 5 个引脚使能内部上拉功能。将这段代码添加到 Mouse.begin() 函数之前,完成后 setup() 函数内容如下。

void setup() {
//initialize the buttons’ inputs:
pinMode(upButton, INPUT);
pinMode(downButton, INPUT);
pinMode(leftButton, INPUT);
pinMode(rightButton, INPUT);
pinMode(mouseButton, INPUT);
digitalWrite(upButton, HIGH);
digitalWrite(downButton, HIGH);
}

第五步,完成最后的调试。将修改完之后的代码下载到 Arduino 中,使用一下, 我们发现鼠标左键总是处于按下的状态,通过阅读代码发现这是因为程序中将引脚 为高电平认定为鼠标按下。


if (clickState == HIGH)  {
……           }
而我们的硬件上鼠标按下时引脚电平为高,未按下时引脚电平为低。大家可以直 接使用 Ctrl+F 搜索“clickState == HIGH”这段字符,将其中的 HIGH 改为 LOW。

再下载一遍程序,ok,再连上一段 USB 线,我们的鼠标就完成了,和原来的鼠 标合个影吧。







细心的读者可能会发现我们这个鼠标只能完成左键的功能,那么右键应该如何 实现呢?大家注意在示例代码中关于 MOUSE_LEFT 的部分(可以直接使用 Ctrl+F 搜 索),比如 Mouse.press(MOUSE_LEFT) 实现的功能就是发送一个鼠标左键按下的信息。 我们将 MOUSE_LEFT 全部换成 MOUSE_RIGHT 试试看就会发现原来鼠标左键变成 了鼠标右键,所以鼠标右键的实现只需要在代码中使用 MOUSE_RIGHT 这个定义就 可以完成了,而使用 MOUSE_MIDDLE 就能实现鼠标中键的功能。大家可以试着在 硬件上再添加一个按钮实现鼠标右键的功能。

大家感兴趣的话可以自己试试,找一个摇杆作一个摇杆式的鼠标,或者可以用 Arduino 做一个游戏专用手柄等等。图 11 就是本人利用安卓平板、Arduino、按键以 及面包板制作的一个老式任天堂游戏机,现在正在玩的游戏是经典的“魂斗罗”。

       OPENBOOK开源杂志订阅地址        list.qq.com/cgi-bin/qf_invite?id=18fc30e7e1e90e5179fdeb75a62e8052e8893dfbbb6fcf80
       OPENBOOK第四期下载:     share.weiyun.com/786489dbce5af5c78563d13431e47dc4
       OPENBOOK官网:    open1book.com  
      openbook官微:    weibo.com/openebook

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-9-28 13:56:20 | 显示全部楼层
太方便了 Arduino 控制 板大概多钱一个?

出0入0汤圆

发表于 2013-9-30 08:05:55 | 显示全部楼层
Arduino 控制板大概30元左右吧!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 00:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表