Arduino中国 | Flamingo EDA

CAT | 传感器

步进电机也是一种能够连续旋转的电机,但同普通的直流电机不同,我们能够对步进电机旋转的角度进行非常精确的控制。比如对于一个精度为1.8度的步进电机来讲,我们能够通过相应的控制信号,让电机的轴在需要的方向上一次转动1.8度。要实现这么精确的控制,除了步进电机本身的复杂性之后,控制电路复杂也是在所难免的,因此我们需要相应的驱动模块来对步进电机进行控制。

EasyDriver是一个简单易用的步进电机驱动模块,可以用来驱动一个双极性的两相步进电机,之前有人做了相应的实验,可以参考一下这个教程,我在译言上提供了这篇文章,看是不是有时间给翻译一下;-)

No tags

Oct/08

28

三轴加速度传感器 MMA7260

加速度传感器是一种可以对物体运动过程中的加速度进行测量的电子设备,典型互动应用中的加速度传感器可以用来对物体的姿态或者运动方向进行检测,比 如其中WII和iPhone中的经典应用。Nokia最新推出的手机N95利用内置的加速度传感器,让用户可以通过机身的摆动进行各种操作,包括主菜单操 作、图片浏览、切歌操作甚至进行游戏的控制等,非常全面,甚至超越了苹果 iPhone的动作感应功能的应用范畴。

基于Freescale公司MMA7260的这个三轴加速度传感器,对于普通的互动应用来讲应该是一个不错的选择,可以用在自由落体探测、动作传感等场合,并且具有较高的灵敏度。

在与Arduino配合使用时的连接方式是将Arduino上的5V和GND分别与该传感器的VCC和GND引脚相连,再将该传感器的3V3引脚与EN引脚相连,然后就能够从传感器的X、Y、Z引脚读出相应的值出来了:

该传感器X、Y、Z这三个轴所对应的方向关系如下图所示:

由于重力是加在任何物体上的,因此我们这里通过六个典型位置来理解该传感器的作用。

位置1

位置2

位置3

位置4

位置5

位置6

No tags

Jun/08

15

Arduino WiiChuck 适配器

年初就听到Whale同学在鼓吹Wiimote作为互动工具的种种优势,Wiimote用的蓝牙方式似乎没有那么容易一下子在Arduino上搞定, 但是Wii Nunchuck却的确是可行的。于是便有人把Nunchuck大卸八块,从底层摸清楚了Wii Nunchuck的I2C协议,指明了如何用Arduino读出Wii Nunchuck的数据,着实让大家兴奋了好一阵子,但这种腐败的做法的确让我等望而确步。

相比较之下,这么一个小小的Wii Nunchuck适配器适乎更可爱,不用把你心爱的Wii Nunchuck剪开,就能够完成Arduino与Wii Nunchuck间的通信:

硬件上的连接非常简单,先把WiiChuck适配器插到Wii Nunchuck接口上(注意正反),然后再把WiiChuck插到Arduino的模拟数字接口2,3,4,5上就可以了:

剩下的就是如何写代码了,从技术上讲,Wii Nunchuck是通过I2C协议来与外界进行通信的,Arduino提供了一个Wire库来支持该协议,因此原理上我们可以根据Wii Nunchuck的I2C协议来读取Wii Nunchuck的数据。我参考了网上提供的一些资料,将相应的代码封装在了一个WiiChuck库里,你可以将其下载并解压缩到你的Arduino安装目录下的hardware\libraries里面:

下面是我所使用的wiichuck,将代码编译后下载到Arduino里,就可以在串口监视窗口上看到Wii Nunchuck传回的各种数据,包括摇杆、XYZ三轴加速度、按钮:

至此我们就能够同Wii Nunchuck进行通信了,接下去就要看你如何在作品中释放它的力量了:)

No tags

May/08

25

人体运动传感器原型

千万不要认为这个几十块钱的小玩意能够检测出诸如运行速度和方向这样的高级特性,它只是一个基于红外释电原理的人体检测传感器,而且是只能检测出运动中的人体来,也就是说如果你站着基本不动的话,这个传感器是拿你一点办法都没有的;-)

这是一个数字传感器, 电路虽然看起来有点复杂,但使用起来的原理却异常简单:当有人运动到它的作用范围内的时候,输出高电平信号,该信号会持续一段时间(0.3秒到18秒),持续时间可以由传感器上的电位器来进行调节。当调到下图中的位置时,输出信号的持续时间最短:

由于是简单的数字信号输出,因此只要完成相应的信号线与Arduino的连接,就可以使用该模块了:

对应的程序也非常简单,跟数字按钮模块的程序基本一样:


int ledPin = 13;
int switchPin = 2;
int value = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(switchPin, INPUT);
}

void loop() {
  value = digitalRead(switchPin);
  if (HIGH == value) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

说了这么多,你一定认为该模块使用起来非常容易,但真正要用好它可不容易。其中的一个问题就是透镜的选择,需要根据应用的实际需要进行相应的选择。常用的有7m和3m两种透镜,其有效距离在透镜的正前方为7m和3m左右。需要注意的是,并不是透镜越远越好,你需要模拟你应用的需要进行相应的选取,如果你需要在人进入距离传感器3m以内的区域才触发,就应该选用小的透镜。

No tags

May/08

25

郁闷的声音传感器调试过程

声音传感器的板子拿到好几天了,一直没有找到时间去装它,昨天闲逛了一天,今天总算决定要把它装出来了。元件几天前就买好了,之前又在万用板上做过一个原型,自然觉得应该是一件轻松自然的事情。

焊接的过程是轻松的,虽然手艺不见长,但装它还是没什么问题,很好就把所有的东西安装好了。用万用表量了量GND和VCC间的电阻,没有短路就直接接到Arduino上测试了。刚插上没多久就好像问题了,芯片热得烫手!赶紧断电,之后对照原理图对电路仔细检查,并没有发现不对的地方!

直接拿到稳压电源上,接上GND和5V后,发现电源流居然有500mA,按照芯片说明书的说明,应该只有4mA左右?搬出示波器来量输出端的电平信号,发现也的确是随着输入声音的变化而变化。这时就有点摸不着头脑了:看起来整个电路的工作是对的,除了电源太大之外。

只剩下上网查资料这一条路了,各种论坛和blog都翻了一个遍,最后觉得有可能是音频放大芯片的自激引起的。网上有人也相应地提供了一些解决办法,但我一一试过似乎对自己的电路没有什么大的作用。情急之下决定重新装一个,这回首先焊好音频放大芯片,在什么元件也不接的情况下,接上电源之后电流仍然是500mA!

倒吸一口冷气,实在想不出是什么原因,难道是电路板布局的原因?重新找了另外一个空板和音频放大芯片,这回先只焊上了地和VCC,接上电源,一切正常!神经彻底崩溃,再装了两个芯片,同样正常!正常情况下整个电路消耗的电源约为4mA。

把其它元件安装上去之后,测试声音传感器,功能正常。虽然舒了一口气,但还是觉得挺奇怪为什么那两块板上的音频放大芯片不能正常工作,难道芯片坏了?是不是会是下面原因中的某个:电路板的问题,这次板子制的质量不是很高,下回得得换一家了;音频放大芯片烧掉了。之后如果有时间的话慢慢去查一下,看到底是哪里的问题。

虽然现在还没有完全找出前两块板子为什么不能正常工作的原因,但总结出了一个检验的办法,焊好音频放大芯片之后,可以直接接上电源,看看电路所需电流的大小,如果太大的话则说明电路工作不正常。

下面就是最后组装好的声音传感器,花了整整一天的时间才得到这么一个小家伙:

No tags

Older posts >>