扫地机器人也发微博,才是真正的微博时代 [果壳网强人DIY]

标签: 机器人 微博 微博 | 发表时间:2011-07-14 14:52 | 作者:戴铭 老门
出处:http://www.starming.com/
/gkimage/d9/7j/m3/d97jm3.png

DIYer: matchlighter
制作时间: 一星期
制作难度: ★★★★★
GEEK指数: ★★★★☆

我想要看看能不能远程操控我的Roomba ( iRobot 公司生产的自动清洁机器人),而当我不在家的时候让它通过推特报告状态。而且我希望能让这东西脱离计算机自行工作。我想出了下面这个方案,效果还不错。



1   材料和工具

/gkimage/lh/nu/k2/lhnuk2.png

材料:

○ 1 只小信号用的低功率PNP 晶体管(我用的是 2N2907A,也可能标号为 NTE159)
○ 1 只8 针的mini DIN 公头
○ 1 只7805 5V 稳压块
○ 1 块免焊接面包电路板
○ 1 块Arduino 电路板
○ 1 块Sparkfun WiFly Arduino 扩展板
○ 1排5个或者更多的排针
○ 一小段 Cat5 电缆,类似的也行(Cat5 是 24 AWG 线径的)
○ 最后一样,当然并不是最不重要的一样,那就是一台 Roomba*

/gkimage/yk/j6/ho/ykj6ho.png

工具:

● 烙铁
● 小剪刀
● 简易夹持爪,用来固定小物件
● 热熔胶枪
● 万用表

前提:

  1. 为了完成这篇教程,我现在假设你已经具备了基础的电子学、Arduino 和 Arduino 编程知识。
  2. 我只测试过 500 系列的 Roomba。但是,这方案应该可以应用在更新的型号上,不过比较旧的型号能不能适用就不太确定了。

2   Roomba 的串行接口

/gkimage/dm/8c/xc/dm8cxc.png
  • 所有的 500 系列 Roomba 都有串口。我们要利用这个串口来控制Roomba并获取 Roomba 的传感器数据。这个串口只不过是一个 7 引脚的位于中央的 Mini-DIN 插口。一般在本地的电子器件商店里花几块钱就能买到这些东西。

/gkimage/hd/47/i7/hd47i7.png /gkimage/fb/wy/gh/fbwygh.png /gkimage/ot/dv/0o/otdv0o.png
  • 要使用串口时:把外壳拆下来,轻轻地把顶盖的后端拉开来,让后面的两个夹子松开。现在,用一把一字螺丝刀轻轻地把顶盖其余的部分也撬开来。插口就位于控制按钮的下面。

/gkimage/8u/ow/1o/8uow1o.png
  • 你如果想要不把顶盖拆掉使用串口的话,可以在顶盖上钻一个孔。

3   制作连接电缆

/gkimage/mu/x9/9c/mux99c.png
  • 要和串口连接,最简单的方法就是通过一只 8 针的mini DIN 插头、一些排针,以及一小段 Cat5 电缆,来制作一根短电缆。

/gkimage/by/eq/hf/byeqhf.png
  • 你可以使用 7 引脚的mini DIN插头替代 8 引脚插头,只要它中央是塑料的插头,而不是位于底部,即中央引脚没有连接在任何东西上面。从每一根单独的线头上剥掉一部分绝缘层。

/gkimage/mq/s2/d2/mqs2d2.png
  • 如果你没有可以剥皮的剥线钳,那么可以绕着绝缘层轻轻地转动小剪刀,然后把它拉下来。

/gkimage/nf/4x/gq/nf4xgq.png
  • 将这些线头焊接在迷你 DIN 插口上的小接头上是需要一点技巧的。用夹持爪把线头和迷你 DIN 插头固定住。你也可以在线头上包上一层折叠纸,避免被夹持爪夹出痕迹。从里到外逐步焊接。如果你正确地将线头焊在了接头上,那么就可以用吸锡器把接头外部 多余的焊锡清理掉了。

/gkimage/p4/c1/sk/p4c1sk.png
  • 把接头和每根线头的连接方式用一张图表记下来。

/gkimage/j9/pb/fy/j9pbfy.png
  • 用万用表检查引脚之间是否存在短路。

/gkimage/h6/bq/qc/h6bqqc.png
  • 这些针脚可能会略微弯到外面一点。将针脚插入 Roomba 的DIN座,重新将它们排列好。

/gkimage/fy/m4/wv/fym4wv.png
  • 在每根线头之间滴上些热熔胶,让它们不会弯到一起发生短路。

/gkimage/1o/jo/dk/1ojodk.png
  • 在所有的线头周围包上一层胶带,避免和外壳发生短路。重新把迷你 DIN 插头组装起来,但是在确认了一切运行正常之前,不要把迷你 DIN 的外壳装在引脚上面。这样一来,如果需要修改的话,会方便一些。

/gkimage/sw/ch/l9/swchl9.png
  • 把线头的另一端包好。

/gkimage/ea/yf/sg/eayfsg.png
  • 6 号和 7 号引脚(见下图)都接地;将它们连在同一个引脚上。1 号和 2 号引脚都接在正极上。

/gkimage/8u/mn/3i/8umn3i.png
  • 这些引脚上的电压都是不同的。当插在电源插座上时,大约为 20V,否则就是电池的电压(大约 14V)。将它们都连接在同一个插头上。将剩下的线头连接到它们相应的插头上。

4   连接 Arduino

/gkimage/r2/rv/kt/r2rvkt.png
  • 将 WiFly 扩展板安装在 Arduino 上。

/gkimage/oj/02/vt/oj02vt.png
  • 用电缆将迷你 DIN 插头连接在 Roomba 上,将排针插在面包板上。

/gkimage/js/o2/gd/jso2gd.png
  • 参考你自己绘制的接线图表,进行本教程接下来的接线步骤。
  1. Mike McCauley 在为 Arduino 编写 Roomba 库时提示我们,必须使用 PNP 晶体管才能从 Roomba 触发 Arduino 的 RX 引脚。用一根跳线把 Roomba 电缆上的 TX 引脚接在晶体管的基极引脚上。把晶体管的集电极引脚接地,而发射极引脚接在 Arduino 的 RX 上。
  2. 将 Arduino 的 TX 引脚连接在 Roomba 电缆的 RX 引脚上。将电缆的接地引脚连接在 Arduino 的接地端。
  3. 接下来我们接要解决一个小问题。在充电的时候,Roomba 的电源输出最高可达 20V。虽然 Arduino 的稳压器可以承受这样的电压,但是 WiFly 3.3V 的稳压器却经受不住。我们将需要在试验电路板上加上自己的稳压电路。要制作稳压电路,我们使用了一个 7805 稳压块,将电压降低到 5V。将 7805 的接地端接地,Vin(输入电压)引脚接在 Roomba 的电源上,而Vout(输出电压)接在 Arduino 的 5V 引脚上。
  4. 当你将插头连接在 Roomba 上时,Arduino 的电源 LED 灯应该会亮起来。

  • 要记住,在给 Arduino 重新编程之前,先断开它和 Roomba 之间的电缆!

5   完整的代码

/gkimage/68/yu/9d/68yu9d.png
  • 点击下载 本项目所使用的完整代码 。其中可能存在一点 bug,所以欢迎你在评论中提出改进的建议。
  • 为了让它运作起来,你将需要将“TWITTER oAUTH KEY”替换成在“编程 3:发推”中所得到的 oAuth 密钥。接着我们只需要在 Credential.h 文件中设定好路由的密码和 SSID 就行了。现在,Arduino 应该就能够访问你的网络和推特帐号了。这段代码附上了详细的注释,所以你应该能够轻松修改其中的一些参数,其中包括 Roomba 在特定的事件发生时会发出什么样的信息。
  • 如果你遇到了任何困难,那么就向下滚动到排错步骤,寻找帮助,也欢迎你直接和我联系。

6   编程

6.1   编程1:通讯

  • 和 Roomba 通讯实际上非常简单。Roomba 的串口使用 iRobot 的开放接口(OI)协议来和其他设备进行通讯(例如 Arduino)。OI 不仅可以提供对 Roomba 的电机和 LED 的控制,而且可以用Arduino来直接命令Roomba做清洁工作。要知道,给 Arduino 重写清洁程序毫无疑问要花掉几个小时。
  • 不过,我们实际上会使用 Mike McCauley 编写的丰富的库 ,来和 Roomba 通过 OI 进行通讯。太谢谢你了,Mike!Mike 的库提供了 Roomba 的每一条基础 OI 命令。
  • 在这里可以找到有关 iRobot的OI完整细节

6.2   编程 2:网络控制

/gkimage/rf/1p/q5/rf1pq5.png
  • 在这一方面,我们可以在大多数情况下按照 WiFly 网络服务器的样例代码进行编写。样例代码给了我们所有需要的信息,唯独少了从网页浏览器读取请求。不过,这功能添加起来很容易。我们所需要做的只是用样例 代码一个比特一个比特地读取请求,然后将它们排列成字符串。很简单吧?
  • 困难的地方在于正确配置路由器。首先,我们需要告诉路由器,让它给 WiFly 扩展板一个静态的 IP 地址。不幸的是,由于所有的路由器都各不相同,我无法告诉你实际该怎么做。你需要查阅你的路由手册,了解如何指派手动的 IP 地址,除非你并不介意给别人留下控制你的 Roomba 的机会。这基本上是在局域网上控制,而不是因特网上。然而,如果你很清楚相关的安全风险(或者知道如何设置认证系统),那么大多数路由器都可以配置成指向 Arduino 网页服务器。同样,你需要查阅路由手册,了解该如何做。你也许可以用谷歌搜索相关教程。
  • 要通过局域网控制 Roomba,你只要在浏览器的地址栏里输入给 WiFly 指派的 IP 地址,瞧,这不就得了!如果你确实将它连上了互联网,那么就可以在任何地方输入路由器的 IPv4 地址来访问它了,你可以 在这里找到自己的IP地址

6.3   编程 3:发推特

/gkimage/rh/eq/h3/rheqh3.png
  • 这一部分代码稍微比我一开始预想地更难一点。大部分给 Arduino 添加推特功能的教程都需要计算机进行实际的发推步骤。我不希望在获取 Roomba 的更新信息时必须让我的计算机开着。不过,我们可以使用 另一个非常棒的库 (由 @NeoCat 制作),让 Arduino 不需要计算机的协助也能发推。这个库是专门给以太网扩展板设计的。不过,幸运的是,Sparkfun 的 WiFly 扩展板库只需要很小的代码改动,就可以轻易替代 Ethernet(以太网)扩展板的库了。要想更新 Twitter 库,我们只需将 Twitter.h 头文件中 Ethernet 库的 #include 指向替换掉就行了。
  • 我们可能还需要删除 EthernetDNS 库的 #include 指向,因为 WiFly 库提供了自己的 DNS 查询功能。我们还需要删除 Twitter.cpp 文件中的一些有关 EthernetDNS 库的代码。
  • 现在,我们就得到了一个 Twitter 库,它和 WiFly 扩展板完全兼容。为了开始使用这个库,我们要允许它访问推特账户。你只要 点击这里 ,然后点击“Get a token to post a message using OAuth”就行了。一旦我们确定它能够访问了,我们就会看到一个叫做 oAuth 密钥的页面。现在,我们只需要将这串密钥记在我们的草稿本上,到时候作为新的 Twitter 类的一个参数。现在,我们就可以开始通过 Arduino 发推了!
  • 不过,在这里我们会遇到另一个问题:我们无法发送之前发送过的推。所以,Roomba 只能告诉你它完成过一次的事情。下面有一些解决方法:
  1. 给我们的硬件添加一个实时时钟(RTC),在每一条推中加上一条时间戳。这个方法成本较高,不过发的推看起来好看一些。
  2. 或者,读取 Roomba 的一些传感器参数,生成一个随机的数字。这个方法成本没那么高,不过发出的推看起来的效果和使用 RTC 的时间戳一样棒。
  3. 或者,我们还可以利用 Arduino 的 millis() 函数给推添加标签。这是最可靠且最简单的方法。不过,相比 RTC 时间戳的方法,看起来就不怎么样了。
  • 在本教程中,我们将使用最后一种方法,因为它最简单,成本最低。millis() 函数会返回程序启动之后经过的毫秒数。我们不需要担心这个数字会变得太大,因为它经过 50 天就会重置为零。这个数字最大的值为 4.32×10^9,也就是个 10 位数。虽然它会重置,但我们也不需要担心会出现重复的推,因为完全相同的可能性微乎其微。

7   排错

  • 在这一小部分中,我列出了我遇到的一些问题和解决方法。
  1. WiFly 无法连接

在 Credentials.h 文件中确认你的 SSID 和路由器密码; 如果你使用的是 WEP,那么试试将它改为 WPA/PSK+WPA2/PSK。

  1. 推特无法更新

确认你的 oAuth 密钥是否正确(参见编程 3:发推); 检查你的焊点。

  1. 网页控制页面无法显示正确地信息

检查你的焊点。

  1. 无法访问网页控制页面

确认你使用的 IP 地址是正确的(参见编程 2:网络控制)。

  • 如果上面这些解决方法都帮不了你,欢迎你直接和我联系。

8   总结

我希望你喜欢我的教程,希望你能觉得它对你很有帮助!

如果有任何问题或建议,请留言。欢迎你提出反馈信息。


9   DIYer签到处


资料来源

编辑: 小蜂

果壳DIY站QQ群:132647923(加入时请报上你在果壳的个人主页地址,以防广告ID)

果壳DIY站微博: http://t.sina.com.cn/guokrdiy

全文阅读>>

推荐小组: 设计 插画 网站技术

关注我们: 关注新浪微博 豆瓣小组 人人网 腾讯微博 RSS

Starming 星光社 版本:0.06 email:[email protected] 关于我们 点击这里给我QQ发消息 小组 论坛 杂志 精选 鄂ICP备11004199

相关 [机器人 微博 微博] 推荐:

微博

- qianlaohu - 独立思考
无论名人在微博上讲什么,都能引起很大的“互动”. 王力宏说:“2011年过去一半了,7月了. 感觉就是这几百万人一起围在那里,紧张专注地看着,名人的微博一更新,至少挤在前排的几万人就激动拥抱:“动了. 说微博的迅速崛起会影响媒体,影响门户网站,影响SNS,其实都不对. 它首先威胁到蜡像馆,因为你在蜡像馆只能掏钱看不会动的,而在微博,不用掏钱都能看到会动的.

扫地机器人也发微博,才是真正的微博时代 [果壳网强人DIY]

- 老门 - Starming星光社最新更新
DIYer: matchlighter 制作时间: 一星期 制作难度: ★★★★★ GEEK指数: ★★★★☆. 我想要看看能不能远程操控我的Roomba ( iRobot 公司生产的自动清洁机器人),而当我不在家的时候让它通过推特报告状态. 而且我希望能让这东西脱离计算机自行工作. 我想出了下面这个方案,效果还不错.

微博黑洞

- 洪涛 - 月光博客
  “黑洞”,光束经过它都会发生弯曲,甚至是被吸进去. 在我们已知的世界中,运行速度最快的光束也难逃黑洞的束缚,更不用说那些运行速度缓慢的物质. 从商业角度上讲,我们不妨把一束光理解为某个优秀品牌的数字营销行为(Digital Marketing). 如果这个品牌的数字营销做得够好,我们就可以用运行速度最快的光束来彰显其在行业中的领先地位,但这样的品牌毕竟是凤毛麟角,特别是在当今火热的微博营销领域中.

SNS OR 微博?

- ItTalks - 新媒体营销观察站
互联网的平台总是日新月异,在SNS还未开到荼靡时候,微博横空出世,如今已然后来居上,之前看到新生代调研机构关于SNS和微博的比对分析的结论,在此摘出部分并依据本人的想法调整后分享给大家:. 虽说微博目前发展迅速,很多用户尤其是圈子里的早已经从人人、开心转战,难免从心里忽视人人和开心,会忍不住怀疑那些曾经火热如今却觉得很SB的APP还有多少拥护者.

微博上市

- - 扯氮集--上海魏武挥的博客 - 扯氮集--上海魏武挥的博客
昨日,市场上开始流传一则信息:新浪微博计划在纽交所 [i]上市,募集5亿美元的资金,上市预计在今年第二季度完成. 不过,由于当日MWC召开,市场又传闻阿里要收购整个盛大系,这则信息并不是各大科技频道或网站的头条. 微博早已从2011年的全社会关注热点顶峰位置跌下,的确是不争的事实. Twitter上市后,股价一路冲高,从40来元,直上70余高峰,然后开始回落,目前大致在55元处徘徊.

微博八卦 3

- Melo - Never
文章标题:中微子超光速可以用量子弱测量解释嘛. 套餐窗口的食物每天都不同,有时印度,有时土耳其,有时德国. 很多时候我也不知道究竟是什么,就点了,吃的时候偶尔有小惊喜. 嗯,哥吃的不是午餐,是prediction error....... 随着fMRI数据大的量共享,最近搞了一个用静息态数据诊断孤独症的数据处理竞赛.

网易微博拾零

- rockmaple - 双城记 — 小蛮腰的洗礼
1、2010年Q1,内测时分,满怀激动,觉得终于可以用上自家产品. 而且形态颇似Twitter,简易好用,不禁高兴. 2、邀请朋友来微博,众人皆说已落户新浪,再无精力,罢了罢了. 3、亚运时分执掌微博运营,苦于产品、资源的限制,踌躇不已,无心恋战,常常自责. 多亏有了Alice在微博圈子的影响力和对微博传播的深刻理解,才获得了不错的口碑和效果.

谣言止于微博?

- 晓江 - 南方周末-热点新闻
央视发问,谣言泛滥,微博的伦理底线在哪里. 然而,一个与微博谣言有关的更重要的问题是:微博官方辟谣的界限在哪里.

微博还能火多久

- Ryan - 互联网的那点事...
为什么想到这个呢,是因为几个现象:. @胖胡斐 的微博,曾经关注了470+个人,有一段时间,半个小时要是不看,就至少会有4-5页更新出来,而现在,我刚去看了一下,还是那些人,平均半个小时更新数量已经不超过1屏了. 很多朋友的博客,自从有了微博,就疏于更新,大批大批的闲置博客出现. 同时,微博也少了的人,博客倒也没有增加.

微博每日精选08.12

- sincerebaby - 5time经典语录网
全球流行风尚: 记不记得,《2012》的片头讲的就是 :伦敦开始骚乱. 生活小智慧: 布艺小花朵DIY教程,赶快学起来吧. 精彩语录: 9岁的Blake被大荧幕上的Leonardo迷得神魂颠倒,并直言自己要嫁给他. 14年后,在蒙特卡洛的月光下,他牵起了她的手;07年在一个脱口秀节目上,她还笑言,莱昂纳多在后台等她录影结束;而四年后,这样的戏码却正在Savages片场上演.