2011年04月 文档列表

石墨静态磁悬浮的探索 – 这次成功了

昨天在网上淘的日本派通铅笔芯终于到了,因为担心买的型号不合适,所以买了0.5的2B和0.7的B和2B共三种。收到快递的时候简直是“欲火焚身”,迅速拿出一根做实验,果然悬浮成功了!

悬浮的铅笔芯

悬浮的铅笔芯

虽然这幅图看上去悬浮很平稳,事实上可能因为桌子不够水平,这个铅芯在磁铁面会非常快速的溜来溜去,有过徒手抓鱼经验的同学会有些体会。 :) 到了一定的位置,就会像荡秋千一样晃晃悠悠几下,然后停在那里。我猜想它应该是有类似碗装的磁场结构,让笔芯悬浮在碗底。只是这个碗沿比较低,哈口气都会让它溜出去(汗,圈妈:直接说盘状不就好了嘛)

看来之前没有成功果然是铅笔芯的问题,后来把三种都实验了一下,发现都可以悬浮。只是0.7的可能比较重,悬浮的高度更低。

虽然已经有很多照片证明石墨是可悬浮的,但是当真正亲手实验成功时,还是为自然的力量感到震撼!
这是另外一张照片:

常温下的静态磁悬浮
常温下的静态磁悬浮

事实上,在快递没有到之前,我没耐住寂寞,先跑到路边的文具店买了两盒。因为我知道国内假货多,所以去了两家文具店,买了不同牌子的两盒笔芯。好吧,事实证明小店买的,不仅不会悬浮,还能倒挂金钩。

下面这个是淘宝店对派通铅芯的描述:
【功能描述】:原装日本PENTEL派通铅芯适用于 所有0.7mm自动铅笔新型工艺配方,传统铅芯为粘土与石墨烧制而成,书写阻力大,不顺滑。且易折断。而派通铅芯为树脂与石墨压制而成,使铅芯的浓度与硬度达到了完美的结合比例,书写起来顺滑,无阻力感,字迹清楚。

这样说来,也许那两盒并不是假货,只是工艺不同吧,反正实验结果如下:

前三种都是日本派通铅笔芯

前三种都是日本派通铅笔芯

铅笔芯在磁铁表面悬浮的稳定性的讨论

关于不同长度铅笔芯在磁铁表面的稳定和位置,老薛写了两篇很精彩的解释,有兴趣的同学请过去围观:
铅笔芯在磁铁表面悬浮的稳定性的讨论(上)
铅笔芯在磁铁表面悬浮的稳定性的讨论(下)

悬浮稳定性的探索

悬浮稳定性的探索

抗磁性的原理

很多人在看到这个实验的时候,都觉得不相信:磁悬浮真的这么简单吗?进一步的问题就是:这是为什么呢?

事实上,任何物质都有抗磁性。它的本质是电磁感应定律的反映。外加磁场使电子轨道动量矩发生变化,从而产生了一个附加磁矩,磁矩的方向与外磁场方向相反。

这个解释貌似太专业了,看不懂没关系,回忆一下高中时候学的楞次定律也行:感应电流的磁场总是要阻碍引起感应电流的磁通量的变化。

啥?还是不好理解?那么请记住儿童不宜版定律:闭合回路的线圈,对变化磁性的反应是“插的时候不让插,拔的时候不让拔”

非常形象的楞次定律

非常形象的楞次定律

而原子中的电子们,对外加磁场表现出的就是这种抗磁性。从互动百科摘抄一段:

任何物体在磁场作用下,都会产生抗磁性效应。但因抗磁性很弱,若物体具有顺磁性或序磁性(见铁磁性)时,抗磁性就被掩盖了。因此,从原子结构来看,呈现抗磁性的物体是由具有满电子壳层结构的原子、离子或分子组成的,如惰性气体、食盐、水以及绝大多数有机化合物等。由于迈斯纳效应,超导体是理想的抗磁体(见超导电性)。实际上,自然界中绝大多数物体都是抗磁性的。抗磁磁化率与磁场和温度无关。但也有例外,如石墨、铋等。
指南针为什么不会向南极飞?

看到这个问题,我相信很多人跟我一样,第一反应就是“因为磁力不够大呀”。这个问题在老薛的博客里详细介绍了,很有意思。一个简单的论据就是,把磁铁放在泡沫上浮在水面,它马上就会旋转方向变成南北指向,但是却不会向南或者北移动。所以说,均匀的磁场只会对场中的磁铁产生扭矩,而不会产生水平的拉力。看到结论以后反过来看这个题目,好像变得很直观了。指南针实际上也是指北针,南极受力向北,北极受力向南,自然不会飞向任何一边。其实地球磁场也不是均匀的,南北半球的磁铁还是会受到微弱的牵引力,只是可以忽略而已。

为了验证这幅插图,我特地回顾了一下左手法则(又称安培定律):左手平展,大拇指与其余4指垂直,若磁力线垂直进入手心,4指指向电流方向,则大拇指所指方向为载流导线在外磁场中受力的方向。

顺便回顾一下右手法则,确定导体切割磁感线运动时在导体中产生的动生电流方向:伸开右手,使大拇指跟其余四个手指垂直并且都跟手掌在一个平面内,把右手放入磁场中,让磁感线垂直穿入手心,大拇指指向导体运动方向,则其余四指指向动生电流的方向。

好了,可以心满意足的睡觉去了 :D

金灿灿的4WD小车

前几天机器人基地的Arduino 4WD小车送到了。打开一看,哇塞,金灿灿的,心情顿时像捡了一捆钱似的亮堂了起来,哈哈。

Arduino小车

趁圈圈被带出去遛弯的时候,我把它组装了起来。这个小车是镀金铝板的车身,质感非常好,而且安装很简单,大概用十分钟就足够了。安装前的装箱图:

小车的零件们

这个小车之所以叫Arduino小车,是因为它是针对Arduino的板子和扩展插件们设计的。上面打了很多窟窿,这可不是偷工减料,将来需要安装小板子的时候就知道好处了。

因为相关的家伙还没有配齐,所以这次只是把它简单组装了一下看看效果,有兴趣的同学可以去店家那里看看介绍,说的还比较详细。地址在这里:http://item.taobao.com/item.htm?id=9504307833

虽然还没有开始使用,但是简单构思了一下使用方式。其实我个人觉得4驱的小车并不见得比2驱的好控制。因为4个轮子需要同时控制才能和谐运动,如果每个电机都单独控制的话,会增加控制的难度。比较偷懒的办法是把同一侧的两个轮子并联到同一个电源,这样转弯和前进用一个L298N的板子就够了。这样相当于还是左右两组动力,但是同样两个电机接上相同的电压,转速也不见得完全相同,所以这样的动力源有点冗余。不过看RobotBase也有2WD的小车卖,可能是针对不同的用户考虑的吧。

装完小车,回想起我去年的小爱计划。于是把当时做的小车从床底下拖出来,发现打磨的钢轴都已经生锈了,还真有点伤感。没办法,在家里加工零件太难,也太危险。对比一下这两个小车的尺寸吧,雪碧是参照物:

两个小车

两个小车

这个小车的轮子是滑板车的配件,万向轮是家居的配件,轴承和固定齿轮是麻将桌的配件,用了一个多月才拼拼凑凑起来,可以承重20公斤。之所以选择自己动手做,是因为我想把小爱做成一个跟真人小孩差不多大的机器人,而市面上基本都是小尺寸的底盘小车。在此呼吁各公司们也开发点大配件吧,我就不用在家里敲敲打打的了 :)

嗯,在这里给自己打打气,小爱计划只是暂停,不会就这么结束的。这个阶段就先玩玩小车好了,至于拿它做什么,先卖个关子。可以肯定是是会把手头的Android手机变成遥控器,准备用Arduino的蓝牙扩展卡连接。有个叫zxspace的同学已经用iphone遥控Android了,果粉们可以先去围观一下。

石墨静态磁悬浮的探索 – 虽然没成功

之前介绍过有人用钕铁硼+铅笔芯可以实现静态的磁悬浮,因为石墨具有抗磁性。当时简单试了下没有成功,后来就没有再深究了,内心深处对这个实验一直持怀疑态度。直到前几天有一位叫做老薛的小朋友动手实验成功,有兴趣的同学可以去翻翻他的博客

这下老男孩坐不住了,老薛同学说了几点可能的原因:
1,把圆片形状的磁铁换为方块的,没有间隙可能漏磁较少;
2,磁铁不一定要大,小块的磁铁可能梯度更大
3,铅笔芯石墨含量越高越好

于是迅速淘了一小堆正方体小磁铁,兴致勃勃的准备见证奇迹,结果再次被打击了:
没有成功的静态磁悬浮

事实上,那根该死的铅笔芯不但没有浮起来,貌似还吸在了磁铁上。我把磁铁片翻过来,它居然还得意洋洋的挂在下面!

相比之下,老薛同学的实验照片如下:
老薛同学的结果

伤心之余,我查了下资料,在阿莫的论坛上找到了疑似答案。主要是国内的铅笔芯都是采用的石墨+粘土配方,而大部分粘土里都是含铁的。需要说明的是抗磁性一般都比磁性弱很多,所以不但不能悬浮,还会被吸住。
没办法,咱也不能因为这个就投诉国货,毕竟铅笔芯不是设计来玩悬浮的。

为啥老薛同学的笔芯可以呢?哈哈,因为他是在英国啊。说到这里,不得不对他们的实验室表示一下由衷的羡慕妒忌恨。他的导师居然和他一起玩磁悬浮,之前还在实验室里玩遥控飞机。唉,国内的导师们,已经被各种论文和指标压的喘不过气,你要是在实验室玩这个,非得被扔到楼下去不可 :D

下面是网上找来的图,可以看出磁铁大小和形状并不是关键原因,主要还是笔芯的问题:

最后,转一个国外某蛋疼到极致,同样也是敬业到极致的某同学的总结,试验了各个国家不同粗细和标号的铅笔芯的悬浮情况:
第一栏是笔芯粗细,国内一般只有0.5和0.7两种;第二栏是HB标号,B越大的越软,石墨含量越高(这次我还试了6B的铅笔芯,用小刀刮成片状,依然不成功);yes和no不解释;第四栏是产地。

其中来自德国的施德楼(Staedtler)铅笔标记了Very Good,这个牌子我一直很喜欢,可惜家里的都是圆珠笔。

Pentel Super Polymer,
0.35  HB YES Japan
0.35 B&2B YES Japan
0.5 B&2B YES Japan
0.5 HB YES Japan
0.5     F YES Japan
0.7  HB (1 box YES, 3 boxes NO) Japan
0.7 B YES Japan
0.9  2B YES 15/$1 at McGuckin, 2524 Arapahoe Ave., Boulder, CO
0.9 HB NO Japan
0.9 B NO Japan
Faber-Castell (1.4 B labeled Brazil)
http//www.faber-castell.de/
0.35   ? Germany
0.5 Super Polymer ? Germany
0.7  2B YES Germany
0.7   ? Germany
0.9   ? Germany
1.4  B,Super Polymer leads for their “E Motion Pencils” YES (very good) 6/$2.88 at Meninger 499 Broadway, Den, CO
2.0 B & 2B NO Germany
Staedtler (Marsmicro Polycarbon) Germany
http://www.staedtler.com
0.5   ? Germany
0.7   ? Germany
0.9 B & 2B YES (very good) No longer made.
0.9 HB YES (less than 2B & B) No longer made.
2.0 B & 2B NO Germany
Derwent
7.0 8B NO  
Stanford
0.5 HB YES Japan
0.9 HB (Sphere TM) NO Korea
Pilot (NEO-X)
0.7 HB YES Japan
MonAmi
0.7 HB NO Korea
School Time      
0.5 HB NO China
       

 

 

Arduino系列教程之 – PWM的秘密(下)

今天看了看之前的博客,赫然发现有个PWM的秘密(上),第二部分居然被我忘掉了,主要是这个部分实在不太好理解,可以认为是Arduino PWM的提高篇。说实话大部分兄弟平时应该是用不上的,不过可以先收起来,以后真遇到了能知道是怎么回事。

Atmega 168/328的时钟们
ATmega328P有三个时钟,Timer0,Timer1和Timer2。每个时钟都有两个比较寄存器,可以同时支持两路输出。其中比较寄存器用于控制PWM的占空比,具体的原理等会儿会介绍。大多数情况下,每个时钟的两路输出会有相同的频率,但是可以有不同的占空比(取决于那两个比较寄存器的设置)

每个时钟都有一个“预定标器”,它的作用是设置timer的时钟周期,这个周期一般是有Arduino的系统时钟除以一个预设的因子来实现的。这个因子一般是1,8,64,256或1024这样的数值。Arduino的系统时钟周期是16MHz,所以这些Timer的频率就是系统时钟除以这个预设值的标定值。需要注意的是,Timer2的时钟标定值是独立的,而Timer0和Timer1使用的是相同的。

这些时钟都可以有多种不同的运行模式。常见的模式包括“快速PWM”和“相位修正PWM”,这两种PWM的定义也会在后面解释。这些时钟可以从0计数到255,也可以计数到某个指定的值。例如16位的Timer1就可以支持计数到16位(2个字节)。

除了比较寄存器外,还有一些其他的寄存器用来控制时钟。例如TCCRnA和TCCRnB就是用来设置时钟的计数位数。这些寄存器包含了很多位(bit),它们分别的作用如下:
脉冲生成模式控制位(WGM):用来设置时钟的模式
时钟选择位(CS):设置时钟的预定标器
输出模式控制位(COMnA和COMnB):使能/禁用/反相 输出A和输出B
输出比较器(OCRnA和OCRnB):当计数器等于这两个值时,输出值根据不同的模式进行变化

不同时钟的这些设置位稍有不同,所以使用的时候需要查一下资料。其中Timer1是一个16位的时钟,Timer2可以使用不同的预定标器。

快速PWM
对于快速PWM来说,时钟都是从0计数到255。当计数器=0时,输出高电平1,当计数器等于比较寄存器时,输出低电平0。所以输出比较器越大,占空比越高。这就是传说中的快速PWM模式。后面的例子会解释如何用OCRnA和OCRnB设置两路输出的占空比。很明显这种情况下,这两路输出的周期是相同的,只是占空比不同。

快速PWM的例子
下面这个例子以Timer2为例,把Pin3和Pin11作为快速PWM的两个输出管脚。其中:
WGM的设置为011,表示选择了快速PWM模式;
COM2A和COM2B设置为10,表示A和B输出都是非反转的PWM;
CS的设置为100,表示时钟周期是系统时钟的1/64;
OCR2A和OCR2B分别是180和50,表示两路输出的占空比;

  pinMode(3, OUTPUT);
  pinMode(11, OUTPUT);
  TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
  TCCR2B = _BV(CS22);
  OCR2A = 180;
  OCR2B = 50;

这段代码看上去有点晕,其实很简单。_BV(n)的意思就是1< COM2A1,表示COM2A的第1位(靠,其实是第2位,不过程序员们是从0开始数数的)。所以_BV(COM2A1)表示COM2A = 10;
类似的,_BV(WGM21) | _BV(WGM20) 表示 WGM2 = 011。

在Arduino Duemilanove开发板,上面这几行代码的结果为:
输出 A 频率: 16 MHz / 64 / 256 = 976.5625Hz
输出 A 占空比: (180+1) / 256 = 70.7%
输出 B 频率: 16 MHz / 64 / 256 = 976.5625Hz
输出 B 占空比: (50+1) / 256 = 19.9%

频率的计算里都除以了256,这是因为除以64是得到了时钟的计数周期,而256个计数周期是一个循环,所以PWM的周期指的是这个循环。
另外,占空比的计算都加了1,这个还是因为无聊的程序员们都从0开始计数。

相位修正PWM
另外一种PWM模式是相位修正模式,也有人把它叫做“双斜率PWM”。这种模式下,计数器从0数到255,然后从255再倒数到0。当计数器在上升过程中遇到比较器的时候,输出0;在下降过程中遇到比较器的时候,输出1。说实话,我觉得这种模式除了频率降低了一倍之外,没看出和快速PWM有什么区别。可能是在集成电路的底层级别上有区别吧。原文说“它具有更加对称的输出”,好吧,也许老外都比较傻吧。

相位修正PWM的例子
下面的例子还是以Timer2为例,设置Pin3和Pin11为输出管脚。其中WGM设置为001,表示相位修正模式,其他位设置和前面的例子相同:

  pinMode(3, OUTPUT);
  pinMode(11, OUTPUT);
  TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
  TCCR2B = _BV(CS22);
  OCR2A = 180;
  OCR2B = 50;

在Arduino Duemilanove开发板,上面这几行代码的结果为:

输出 A 频率: 16 MHz / 64 / 255 / 2 = 490.196Hz
输出 A 占空比: 180 / 255 = 70.6%
输出 B 频率: 16 MHz / 64 / 255 / 2 = 490.196Hz
输出 B 占空比: 50 / 255 = 19.6%

这里的频率计数又多除了一个2,原因上面解释过了。占空比的计算不用加1了,原因自己掰手指头算算就知道了 :)

快速PWM下,修改时钟的计数上限
快速PWM和相位修正PWM都可以重新设置输出的频率,先看看快速PWM是如何设置的。在修改频率的模式下,时钟从0开始计数到OCRA而不是255,注意这个OCRA我们之前是用来做比较用的。这样一来,频率的设置就非常灵活了。对Timer1来说,OCRA可以设置到16位(应该是0~65535)

等等,OCRA用来设置总数了,那么谁用来做比较捏?好吧,灵活的代价就是这种模式下,只能输出一路PWM。即OCRA用来设置总数,OCRB用来设置比较器。
尽管如此,无孔不入的程序员们依然还是设置了一种特殊的模式,每次计数器数到头的时候,输出A做一次反相,这样能凑合输出一个占空比为50%的方波。

下面的例子中,我们依然使用Timer2,Pin3和Pin11。其中OCR2A用来设置周期和频率,OCR2B用来设置B的占空比,同时A输出50%的方波。具体的设置是:
WGM设置为111表示“OCRA控制计数上限的快速PWM”;
OCR2A设置为180,表示从0数到180;
OCR2B设置比较器为50;
COM2A设置为01,表示OCR2A“当数到头是反相”,用来输出50%的方波(其中WGM被设置到了两个变量里);

  pinMode(3, OUTPUT);
  pinMode(11, OUTPUT);
  TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
  TCCR2B = _BV(WGM22) | _BV(CS22);
  OCR2A = 180;
  OCR2B = 50;

在Arduino Duemilanove开发板,上面这几行代码的结果为:

输出 A 频率: 16 MHz / 64 / (180+1) / 2 = 690.6Hz
输出 A 占空比: 50%
输出 B 频率: 16 MHz / 64 / (180+1) = 1381.2Hz
输出 B 占空比: (50+1) / (180+1) = 28.2%

其中频率的计算用了180+1,依然是数数的问题;A输出的频率是B输出的一半,因为输出A每两个大周期才能循环一次。

相位修正PWM下,修改时钟的计数上限
类似的,相位修正模式下,也可以修改输出PWM的频率。代码几乎完全和上个例子一样,区别是WGM的值设置为101:

  pinMode(3, OUTPUT);
  pinMode(11, OUTPUT);
  TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM20);
  TCCR2B = _BV(WGM22) | _BV(CS22);
  OCR2A = 180;
  OCR2B = 50;

在Arduino Duemilanove开发板,上面这几行代码的结果为:

输出 A 频率: 16 MHz / 64 / 180 / 2 / 2 = 347.2Hz
输出 A 占空比: 50%
输出 B 频率: 16 MHz / 64 / 180 / 2 = 694.4Hz
输出 B 占空比: 50 / 180 = 27.8%

跟之前的对比类似,相位修正模式下,一个大周期从0数到180,然后倒数到0,总共是360个时钟周期;而在快速PWM模式下,一个周期是从0数到180,实际上是181个时钟周期。这可能就是鬼子们说的“更加对称”的好处,好吧,可能老外们其实并不傻。 :)

数不清楚这两者区别的同学,可以用OCRA=3为例:
快速PWM:0123-0123-0123….. 每个周期时钟数是4=3+1
相位修正:012321-012321-012321….每个周期时钟数是6=3*2

相应的占空比计算也有微小的区别,快速PWM模式下,高位的输出会多一个时钟周期。上面的这个例子,以比较器=1为例:
快速PWM:当计数器=1时反相,这时候已经经历了2个时钟周期,所以占空比是2/4
相位修正:计数器0到1时输出0,计数器1到0时输出1,占空比是1/3

一些其他的说明

前面的程序有一个非常疑惑的问题:Pin3和Pin11是怎么和Timer2对应上的呢?这个只能查表了,并不是任意对应的:
时钟输出 | Arduino输出Pin编号 | 芯片Pin | Pin name
OC0A 6 12 PD6
OC0B 5 11 PD5
OC1A 9 15 PB1
OC1B 10 16 PB2
OC2A 11 17 PB3
OC2B 3 5 PD3

一般来说,普通用户是不需要设置这些时钟参数。Arduino默认有一些设置,所有的时钟周期都是系统周期的1/64。Timer0默认是快速PWM,而Timer1和Timer2默认是相位修正PWM。具体的设置可以查看Arduino源代码中writing.c的设置。

需要特别特别注意的是,Arduino的开发系统中,millis()和delay()这两个函数是基于Timer0时钟的,所以如果你修改了Timer0的时钟周期,这两个函数也会受到影响。直接的效果就是delay(1000)不再是标准的1秒,也许会变成1/64秒,这个需要特别注意。

在程序中使用analogWrite(pin, duty_cycle)函数的时候,就启动了PWM模式;当调用digitalWrite()函数时则取消了PWM模式。请参考wiring_analog.c和 wiring_digital.c文件。

还有一件很有意思的现象,对于快速PWM模式,如果我们设置analogWrite(5, 0),实际上应该有1/256的占空比,事实上你会发现输出的是永远低电平的0。这个实际上是在Arduino系统中强制设定的,如果发现输入的是0,那么就关闭PWM。随之而来的问题是,如果我们设置analogWrite(5, 1),那么占空比是多少呢?答案是2/256,也就是说0和1之间是有一个跳跃

翻译了半天已经晕头转向了,最后再提醒一点,不是所有的参数配置都可以随意组合的。例如COM2A=01只有在WGM是111或者101时才有效,具体怎么用,还是去官网查表吧 :)

原文链接:http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM

Android开发环境搭建

前一段时间买了HTC的G7手机,主要是看上了它的Android系统。话说这个Android和Arduino这两个单词还挺有夫妻相,太容易看错了。我一直觉得这两个是绝配。智能手机是一种非常好的移动终端,摄像头、麦克风、光感、wifi、蓝牙、大容量存储、高级语言开发环境,哇塞,简直要什么有什么。鬼子们就有好多iphone+乐高的有趣作品,但是我更看好Android系统。据路边社专业评测对比,Android手机的Linux+Java开发环境更容易上手,硬件性能普遍更高,而且价格更便宜!

而Arduino则可以驱动硬件,有N多开源的插件可以利用。这一对小情侣可以用蓝牙或者wifi连接,从此过上幸福的生活….

前一段时间一直想改进目前的磁悬浮板子,折腾了好久没啥实质进展。这个手机只是刚把开发环境装上,分别在windows7和Ubuntu 10的环境下配置了一遍,然后做了个超级无聊的hello world小程序。开发环境是常见的Eclipse+Android IDE,安装的步骤如下:

1. 安装Java

自从Sun被Oracle收购之后,感觉Java的下载越来越慢了,打开一个网页要等半天;而且windows7下面每天都要弹出一个“有Java更新”,点了“安装更新”之后,有模有样的下载半天,最后提示安装失败,真是相当的脑残!不过无所谓了,Java是可爱而无辜的,大家请到这里下载最新SDK吧:http://www.oracle.com/technetwork/java/javase/downloads/index.html

安装我就不多说了,Linux下面可以直接用sudo apt-get install sun-java6-jdk 安装,这个速度更慢,你可以先去爪哇岛旅游几天,回来就差不多安装成功了。

2,安装Eclipse

很久很久以前,我在萝卜头的攻略里介绍过Eclipse的安装,现在Eclipse也已经有了无数个版本,请到http://www.eclipse.org/downloads/挑选一款你喜欢的下载。安装还是依然简单,找个目录解压就可以。

3,安装Android SDK

官网地址是:http://developer.android.com/sdk/index.html。不知道为什么这个地址被墙了,真是一件匪夷所思的事情,不过国内的很多网站都提供下载,搜索关键字android+SDK+下载。在windows和linux下,都是直接解压到一个目录,然后运行SDK Setup即可。这个setup是一个下载+安装的工具,所以真正的安装还没有开始,这和网上常见的早期安装教程有所不同。

需要注意的是,有时候无法获取下载列表,可能跟网络环境有关。这时候需要把https协议强制改为由http获取,参见下图的设置:

Android SDK设置

设置之后在Available packages里面查看可用的程序,反正硬盘大,把所有的选项都勾上安装吧。安装之后这个目录会增肥到1.2G左右,大概需要一晚上的时间完成安装。
更正:昨晚看到又有几个更新,再次安装以后,继续增肥到2G左右。

下载和安装都在你最初解压的目录里完成,不知道有没有设置什么系统变量,所以为了保险起见,一开始的时候就把它放到合适的位置,安装后就不要随意移动了。

4. 配置Eclipse下的Android开发插件

网上很多教程说需要安装一个Android开发插件,不过我安装完SDK以后,貌似这个插件已经装好了。没有找到的同学可以再手动安装一次,安装方法是在Eclipse的主窗口中,点 Help->Install new software->https://dl-ssl.google.com/android/eclipse/ 然后安装DDMS和Development Tool:

5. 配置Android SDK路径

最后一步,在Eclipse中需要制定Android SDK的位置,参考下面这个图:

到此为止,Android的开发环境就算是搭好了。

至于用这个系统做什么,其实我已经有不少想法。萝卜头现在是用传感器读取颜色,用笔记本电脑来计算接魔方步骤,我一直觉得不够满意,速度慢而且需要连接电脑。曾经想用HTC钻石2手机来解魔方,但是那个该死的wm6.5系统开发起来太费劲,摄像头没法控制,而且不能自动对焦,相比之下G7就方便多了,所以可以考虑用G7+乐高重新搭建萝卜头。另外,还可以把手机做成Arduino小车的遥控器。

不过这些都是后话了,呼呼,啥时候才能有空捏?