`
itoracja
  • 浏览: 136547 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多

    作者:mznewfacer (Wolf Geek)       时间:2011年 11月20日      转载需说明出处,谢谢     

  本人上学时学的都是软的,作为硬件白痴的我,还是决定接触些硬件吧,趁着现在有空。

  其实想学点微控制器(Microcontroller)还是源于偶尔看到了国外<span style="font-family: verdana,arial,sans-serif;">Ye-Sheng Kuo, Sonal Verma, Thomas Schmid, and Prabal Dutta等人的hijiack项目,简要来说他们就是想</span><span style="font-family: verdana,arial,sans-serif;">通过设计的</span><span style="color: #313131;"><span style="font-family: Arial,sans-serif; font-size: 13px; line-height: 18px;">音频耳机硬件接口,来接受传感生活中的数字、模拟信号。这个方向未来一定是迫切的需要,我们已经看到了许多的应用,不管是sixsensth(虽然只是demo,两年多了也没传上去程序),iphone的</span></span>siri,android
ADK,当然<span>Microsoft的kinect(也有与wp7的整合应用),很成功的Bump(不知微信的摇一摇何时能完美)。总之,人们需要与虚拟世界更多样的交互,我们需要的不仅仅是简单的鼠标、键盘、触摸屏,我们的生活中无时无刻都需要更直接的交互。天天喊着云计算,是啊,我们更需要更直接的收集生活中有意义的数据利用所谓(数据挖掘/机器学习/模式识别
, 这三者概念区别至今我笨的没搞清)来为我们生活的决策、联系,提供多种清晰的选择可能和服务。</span>就拿iphone来举例,如果像digifit ,<span>AliveCor这种应用能够快点有医疗标准出来,可以对收集的血压心电等数据采集后实时分析,建立动态家庭医疗监护网络,相信会挽救不少人的性命。多的不扯了,作为小白的我,要脚踏实地,从最基础的开始。</span>

<span>  回到hijiack项目,再简单说一下他们的设计思路,下图为系统架构图,</span>

<span style="white-space: pre;"><img alt="" src="http://hi.csdn.net/attachment/201111/21/0_1321875690YadB.gif" width="715" height="486"><br></span>

<span><span style="white-space: pre;"></span></span>

可以看到,从手机耳机端引出了四个线路,分别是左声道、右声道、公用信道信号、麦克风。右声道为能量收集电路(energy harvesting circuit)提供电源,左声道将手机输出的数据输入到微处理芯片。麦克风将微处理器的数据输入回手机上。手机和微处理器都采用了频移键控(FSK)调制解调器。具体的设计细节,请参考http://www.eecs.umich.edu/~prabal/pubs/papers/kuo10hijack.pdf

以下是其简单的示波应用硬件搭建图:



<img alt="" src="http://hi.csdn.net/attachment/201111/21/0_13218551879g5O.gif" width="692" height="571"><br>

<span><span style="white-space: pre;"></span></span>

<span><br></span>

其中,微处理器是搭载了电阻式传感器的电位计,当电阻传感器改变时,我们会看到手机上变换的相应电压波形。这里使用的微处理器是德州仪器的MSP430F1611。

<span style="font-family: Arial,sans-serif; font-size: 13px; color: #313131;"> </span>
以下是他们项目的两个应用,左图为心电监护装置,右图为土壤湿度传感器。

[size=13px; color: #313131;]</span>

<span style="font-family: Arial,sans-serif; font-size: 13px; color: #313131;"><img alt="" src="http://hi.csdn.net/attachment/201111/21/0_1321856214n4uz.gif" width="585" height="217"><br>[/size]

<span style="font-family: Arial,sans-serif; font-size: 13px; color: #313131;"><br></span>以上就是他们做的移动传感项目,像这样的项目现在应该很多。当然,google也自从Android<span style="line-height: 17px; font-size: 14px;">3.1就引入了</span>Android Open Accessory Development Kit(ADK),它就是推荐了Arduino作为外设选择。

<span style="white-space: pre;"></span>Arduino目前的应用就很多,远程泡茶触控门无线监控小车都还比较有意思,最后我们来看看Arduino的hello
world 程序。

<span style="white-space: pre;"></span>1.首先,下载<span style="font-family: Georgia,'Times New Roman',Times,serif; color: #555555; line-height: 23px; font-size: 14px;">Arduino 0023,</span>解压后直接能够运行。

<span style="font-family: Georgia,'Times New Roman',Times,serif; color: #555555; line-height: 23px; font-size: 14px;"><span style="white-space: pre;"></span>2.</span>将arduino 控制器用USB接入电脑(这里还用不上电源供电)。

<span style="font-family: Georgia,'Times New Roman',Times,serif; color: #555555; line-height: 23px; font-size: 14px;"><span style="white-space: pre;"></span></span>3.安装驱动,安装成功后,会显示端口。

<span style="font-family: Georgia,'Times New Roman',Times,serif; color: #555555; line-height: 23px; font-size: 14px;"><span style="white-space: pre;"><img alt="" src="http://hi.csdn.net/attachment/201111/21/0_1321862317hJj8.gif" width="565" height="521"></span></span>

<span style="white-space: pre;"> </span>4.IDE上选择Tools->Board,控制器类型,在这里我用的就是Arduino Duemilanove Mega328。<br><img alt="" src="http://hi.csdn.net/attachment/201111/21/0_1321875281GsX3.gif"><br>

<span style="white-space: pre;"></span>5.配件安接

因为从原理图上可以看出13管脚与ATmega的引脚之间连接了一个1K的电阻,能够起到限流的作用,以保护二极管不被烧坏。发光二极管是有正负极性的,因此必须连接正确才能够让其正常发光。发光二极管腿比较长的一端是正极,需要接在Arduino数字I/O的13号管脚上;腿比较短的一端是负极,需要接在GND管脚上。

<span style="white-space: pre;"></span>6.程序部分

<span style="white-space: pre;"></span>好了,看看程序吧,

<span style="white-space: pre;"></span>

<textarea readonly name="code" class="cpp">const unsigned int LED_PIN = 13;
const unsigned int PAUSE = 1000;
void setup() {               
  // 引脚 13是大多数arduino板子上接LED灯的引脚
  pinMode(LED_PIN, OUTPUT);    
}

void loop() {
  digitalWrite(LED_PIN, HIGH);   // 打开LED灯
  delay(PAUSE);              // 等待
  digitalWrite(LED_PIN, LOW);    // 关闭LED灯
  delay(PAUSE);              // 等待
}</textarea>程序很简单,其中有两个函数setup()和loop()。setup()这个函数主要用来完成相应的初始化工作,在上面的例子中是将数字I/O的13号管脚设置为数字输出。loop()这个函数则是Arduino程序的主函数,相当于C语言中的main() 函数,一个Arduino程序要完成的主要功能都在该函数中实现,在上面的例子中是通过变换13号管脚的高低电平,并设置相应的延时,从而使发光二极管能够间歇性地不断亮灭。值得注意的是,HIGH时给LED灯供给5V电压,LOW则关闭。




















<img alt="" src="http://hi.csdn.net/attachment/201111/21/0_1321864524te0N.gif"><br>

<br>

<span style="white-space: pre;"></span>7.上传用AVR-GCC编译后的程序到板子上,值得一提的是,编译后的文件,存储于C:\Users\newfacer\AppData\Local\Temp\build3206993456004941706.tmp目录下,

<span style="white-space: pre;"><img alt="" src="http://hi.csdn.net/attachment/201111/21/0_132186881981rM.gif"></span>

<span style="white-space: pre;"><span style="white-space: pre;"></span>打开</span>Blink.cpp可以看到,包含了"WProgram.h"的头文件,其在Arduino IDE\arduino-0023\arduino-0023\hardware\arduino\cores\arduino 目录下,具体如何调用编译器以及函数的调用关系,有兴趣的可以自己搭建源代码环境,当然win下Cygwin,Java JDK,和ant是必须的,源码在这里下载

另外,相关配置参数的位置都在preferences.txt文件中,我的在C:\Users\newfacer\AppData\Roaming\Arduino文件夹下面。

<span style="white-space: pre;"></span>为甚么会这样,<span style="font-family: Verdana,Arial,Helvetica,sans-serif;"><span style="line-height: 17px; white-space: pre;">具体可以去看arduinoIDE\lib\preferences.txt 的内容说明,可以照着说明更改相关属性:</span></span>

<span style="font-family: Verdana,Arial,Helvetica,sans-serif;"><span style="line-height: 17px; white-space: pre;"><span style="white-space: pre;"><img alt="" src="http://hi.csdn.net/attachment/201111/22/0_1321962055zC4t.gif"></span></span></span>

<br>

你可以更改这个配置文件以修改相关IDE编辑器的字体,硬件的板卡类型,控制台输出等等属性,但是当Arduino没运行的时候,改了才不会有问题。具体为什么会这样,就只好请你去看IDE的源码了,这里就不做多余解释了。<br>

<br>

8.运行结果

<span style="white-space: pre;"></span>当上传程序成功后,会发现发光二极管立即闪了一下,表明bootloader正常工作了。接着再过一段时间,会看到发光二极管间歇性地不断亮灭,这就表明第一个Arduino程序已经成功地运行起来了。

<span style="white-space: pre;"><img alt="" src="http://hi.csdn.net/attachment/201111/21/0_1321870686G6o4.gif"></span>

<br>

面包板的连接也好弄,看下正负极别接反了,当led灯的阳极通过限流电阻与板子上的数字I/O口相连,数字口输出高电平时,led接通,发光二极管发出亮光。这里二极管负极接GND,正极接PIN 4, 中间要加个220欧姆,让二极管在正常范围工作。当然程序也就要重新改动LED_PIN=4,编译后重新上传。<br>

<br>

<img alt="" src="http://hi.csdn.net/attachment/201111/22/0_1321978677rLHA.gif" width="726" height="637"><br>

<span style="white-space: pre;"></span>后记:

如果觉得没玩够的,其实一个LED灯还能玩点东西,摩斯电码。易懂的对照表是二叉树的结构,如下图

<span style="white-space: pre;"><img alt="" src="http://hi.csdn.net/attachment/201111/21/0_1321872611YKig.gif" width="720" height="257"></span>

<span style="white-space: pre;"><span style="white-space: pre;"></span>左子树</span>为短.,右子树为长-。例如Wolf 为

<span style="white-space: pre;"><span style="background-color: rgb(249,249,249);"><span style="background-color: rgb(249,249,249);"><span style="background-color: rgb(241,241,241);"><span style="background-color: rgb(241,241,241);"></span></span></span></span></span>
<span style="white-space: pre;"><span style="background-color: rgb(249,249,249);"><span style="background-color: rgb(249,249,249);"><span style="background-color: rgb(241,241,241);"><span style="background-color: rgb(241,241,241);"></span></span></span></span></span>

· — —— — —· — · ·· · — ·

我们可以通过设置LED灯亮的长短来表示不同的字母。

附加资料:

1.对自己微控制器硬件详细接口感兴趣的,可以到官网上下载相关文档,我的板子在这里,其他的也可以在相应的地方找到。<br>

2.Arduino与Processing的接口:<a class="urllink" href="http://arduino.cc/playground/uploads/Interfacing/processing-arduino.zip" rel="nofollow" style="border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(0,151,156); padding-bottom: 0px;">processing-arduino.zip</a>,processing在这就不多介绍了,其支持
Java 语言架构,创始人Ben FryCasey Reas都是mit media laboratory aesthetics + computation group Laboratory的成员,链接里相信有不少资料。





<span style="white-space: pre;"></span>

  

 
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics