<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arduino中国 &#187; 传感器</title>
	<atom:link href="http://blog.flamingoeda.com/category/sensor/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.flamingoeda.com</link>
	<description>Flamingo EDA</description>
	<lastBuildDate>Sat, 13 Aug 2011 11:41:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Arduino 加 EasyDriver 驱动步进电机</title>
		<link>http://blog.flamingoeda.com/2008/11/18/arduino-%e5%8a%a0-easydriver-%e9%a9%b1%e5%8a%a8%e6%ad%a5%e8%bf%9b%e7%94%b5%e6%9c%ba/</link>
		<comments>http://blog.flamingoeda.com/2008/11/18/arduino-%e5%8a%a0-easydriver-%e9%a9%b1%e5%8a%a8%e6%ad%a5%e8%bf%9b%e7%94%b5%e6%9c%ba/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 15:56:27 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[传感器]]></category>

		<guid isPermaLink="false">http://blog.arduino.cn/?p=315</guid>
		<description><![CDATA[步进电机也是一种能够连续旋转的电机，但同普通的直流电机不同，我们能够对步进电机旋转的角度进行非常精确的控制。比如对于一个精度为1.8度的步进电机来讲，我们能够通过相应的控制信号，让电机的轴在需要的方向上一次转动1.8度。要实现这么精确的控制，除了步进电机本身的复杂性之后，控制电路复杂也是在所难免的，因此我们需要相应的驱动模块来对步进电机进行控制。 EasyDriver是一个简单易用的步进电机驱动模块，可以用来驱动一个双极性的两相步进电机，之前有人做了相应的实验，可以参考一下这个教程，我在译言上提供了这篇文章，看是不是有时间给翻译一下;-)]]></description>
			<content:encoded><![CDATA[<p>步进电机也是一种能够连续旋转的电机，但同普通的直流电机不同，我们能够对步进电机旋转的角度进行非常精确的控制。比如对于一个精度为1.8度的步进电机来讲，我们能够通过相应的控制信号，让电机的轴在需要的方向上一次转动1.8度。要实现这么精确的控制，除了步进电机本身的复杂性之后，控制电路复杂也是在所难免的，因此我们需要相应的驱动模块来对步进电机进行控制。</p>
<p>EasyDriver是一个简单易用的步进电机驱动模块，可以用来驱动一个双极性的两相步进电机，之前有人做了相应的实验，可以参考一下<a href="http://danthompsonsblog.blogspot.com/2008/09/easydriver-v31-tutorial.html" target="_blank">这个教程</a>，我在译言上提供了<a href="http://www.yeeyan.com/articles/source/56388_3fd">这篇文章</a>，看是不是有时间给翻译一下;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2008/11/18/arduino-%e5%8a%a0-easydriver-%e9%a9%b1%e5%8a%a8%e6%ad%a5%e8%bf%9b%e7%94%b5%e6%9c%ba/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>三轴加速度传感器 MMA7260</title>
		<link>http://blog.flamingoeda.com/2008/10/28/%e4%b8%89%e8%bd%b4%e5%8a%a0%e9%80%9f%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-mma7260/</link>
		<comments>http://blog.flamingoeda.com/2008/10/28/%e4%b8%89%e8%bd%b4%e5%8a%a0%e9%80%9f%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-mma7260/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 09:30:27 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[传感器]]></category>

		<guid isPermaLink="false">http://blog.arduino.cn/?p=306</guid>
		<description><![CDATA[加速度传感器是一种可以对物体运动过程中的加速度进行测量的电子设备，典型互动应用中的加速度传感器可以用来对物体的姿态或者运动方向进行检测，比 如其中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]]></description>
			<content:encoded><![CDATA[<p>加速度传感器是一种可以对物体运动过程中的加速度进行测量的电子设备，典型互动应用中的加速度传感器可以用来对物体的姿态或者运动方向进行检测，比 如其中WII和iPhone中的经典应用。Nokia最新推出的手机N95利用内置的加速度传感器，让用户可以通过机身的摆动进行各种操作，包括主菜单操 作、图片浏览、切歌操作甚至进行游戏的控制等，非常全面，甚至超越了苹果 iPhone的动作感应功能的应用范畴。</p>
<p>基于Freescale公司MMA7260的这个三轴加速度传感器，对于普通的互动应用来讲应该是一个不错的选择，可以用在自由落体探测、动作传感等场合，并且具有较高的灵敏度。</p>
<p><a href="http://blog.flamingoeda.com/wp-content/uploads/2008/10/mma7260.png"><img class="aligncenter size-full wp-image-279" title="mma7260" src="http://blog.flamingoeda.com/wp-content/uploads/2008/10/mma7260.png" alt="" width="400" height="329" /></a></p>
<p>在与Arduino配合使用时的连接方式是将Arduino上的5V和GND分别与该传感器的VCC和GND引脚相连，再将该传感器的3V3引脚与EN引脚相连，然后就能够从传感器的X、Y、Z引脚读出相应的值出来了：</p>
<p><a href="http://blog.flamingoeda.com/wp-content/uploads/2008/10/connection.png"><img class="aligncenter size-full wp-image-280" title="connection" src="http://blog.flamingoeda.com/wp-content/uploads/2008/10/connection.png" alt="" width="460" height="510" /></a></p>
<p>该传感器X、Y、Z这三个轴所对应的方向关系如下图所示：</p>
<p><a href="http://blog.flamingoeda.com/wp-content/uploads/2008/10/direction.jpg"><img class="aligncenter size-full wp-image-307" title="direction" src="http://blog.flamingoeda.com/wp-content/uploads/2008/10/direction.jpg" alt="" width="460" height="270" /></a></p>
<p>由于重力是加在任何物体上的，因此我们这里通过六个典型位置来理解该传感器的作用。</p>
<p>位置1</p>
<p>位置2</p>
<p>位置3</p>
<p>位置4</p>
<p>位置5</p>
<p>位置6</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2008/10/28/%e4%b8%89%e8%bd%b4%e5%8a%a0%e9%80%9f%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-mma7260/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Arduino WiiChuck 适配器</title>
		<link>http://blog.flamingoeda.com/2008/06/15/arduino-wiichuck-%e9%80%82%e9%85%8d%e5%99%a8/</link>
		<comments>http://blog.flamingoeda.com/2008/06/15/arduino-wiichuck-%e9%80%82%e9%85%8d%e5%99%a8/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 18:00:34 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[传感器]]></category>

		<guid isPermaLink="false">http://blog.booksforce.com/2008/06/15/arduino-wiichuck-%e9%80%82%e9%85%8d%e5%99%a8/</guid>
		<description><![CDATA[年初就听到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进行通信了，接下去就要看你如何在作品中释放它的力量了:)]]></description>
			<content:encoded><![CDATA[<p>年初就听到Whale同学在鼓吹<a href="http://imlab.cn/whale/?p=170" target="_blank">Wiimote作为互动工具的种种优势</a>，Wiimote用的蓝牙方式似乎没有那么容易一下子在Arduino上搞定， 但是Wii Nunchuck却的确是可行的。于是便有人把Nunchuck大卸八块，从底层摸清楚了Wii Nunchuck的I2C协议，指明了<a href="http://www.windmeadow.com/node/42" target="_blank">如何用Arduino读出Wii Nunchuck的数据</a>，着实让大家兴奋了好一阵子，但这种腐败的做法的确让我等望而确步。</p>
<p>相比较之下，这么一个小小的<a href="http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/" target="_blank">Wii Nunchuck适配器</a>适乎更可爱，不用把你心爱的Wii Nunchuck剪开，就能够完成Arduino与Wii Nunchuck间的通信：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2008/06/arduino_wii_adapter.jpeg"><img src="http://blog.booksforce.com/wp-content/uploads/2008/06/arduino_wii_adapter.jpeg" alt="" /></a></p>
<p>硬件上的连接非常简单，先把WiiChuck适配器插到Wii Nunchuck接口上（注意正反），然后再把WiiChuck插到Arduino的模拟数字接口2，3，4，5上就可以了：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2008/06/arduino_wii_adapter_connection.jpeg"><img src="http://blog.booksforce.com/wp-content/uploads/2008/06/arduino_wii_adapter_connection.jpeg" alt="" /></a></p>
<p align="left">剩下的就是如何写代码了，从技术上讲，Wii Nunchuck是通过I2C协议来与外界进行通信的，Arduino提供了一个Wire库来支持该协议，因此原理上我们可以根据<a href="http://www.wiili.org/index.php/Wiimote/Extension_Controllers/Nunchuk" target="_blank">Wii Nunchuck的I2C协议</a>来读取Wii Nunchuck的数据。我参考了网上提供的一些资料，将相应的代码封装在了一个WiiChuck库里，你可以将其<a href="http://flamingoarduino.googlecode.com/files/WiiChuck-20080615.zip" target="_blank">下载</a>并解压缩到你的Arduino安装目录下的hardware\libraries里面：</p>
<p align="left">
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2008/06/arduino_wiichuck_library.jpeg"><img src="http://blog.booksforce.com/wp-content/uploads/2008/06/arduino_wiichuck_library.jpeg" alt="" /></a></p>
<p align="left">
<p>下面是我所使用的<a href="http://blog.flamingoeda.com/wp-content/uploads/2008/09/wiichuck.txt">wiichuck</a>，将代码编译后下载到Arduino里，就可以在串口监视窗口上看到Wii Nunchuck传回的各种数据，包括摇杆、XYZ三轴加速度、按钮：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2008/06/arduino_wiichuck_output.jpeg"><img src="http://blog.booksforce.com/wp-content/uploads/2008/06/arduino_wiichuck_output.jpeg" alt="" /></a></p>
<p align="left">至此我们就能够同Wii Nunchuck进行通信了，接下去就要看你如何在作品中释放它的力量了:)</p>
<p align="left">
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2008/06/arduino_wiichuck_set.jpeg"><img src="http://blog.booksforce.com/wp-content/uploads/2008/06/arduino_wiichuck_set.jpeg" alt="" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2008/06/15/arduino-wiichuck-%e9%80%82%e9%85%8d%e5%99%a8/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>人体运动传感器原型</title>
		<link>http://blog.flamingoeda.com/2008/05/25/%e4%ba%ba%e4%bd%93%e8%bf%90%e5%8a%a8%e4%bc%a0%e6%84%9f%e5%99%a8%e5%8e%9f%e5%9e%8b/</link>
		<comments>http://blog.flamingoeda.com/2008/05/25/%e4%ba%ba%e4%bd%93%e8%bf%90%e5%8a%a8%e4%bc%a0%e6%84%9f%e5%99%a8%e5%8e%9f%e5%9e%8b/#comments</comments>
		<pubDate>Sun, 25 May 2008 11:41:55 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[传感器]]></category>

		<guid isPermaLink="false">http://blog.booksforce.com/2008/05/25/%e4%ba%ba%e4%bd%93%e8%bf%90%e5%8a%a8%e4%bc%a0%e6%84%9f%e5%99%a8%e5%8e%9f%e5%9e%8b/</guid>
		<description><![CDATA[千万不要认为这个几十块钱的小玩意能够检测出诸如运行速度和方向这样的高级特性，它只是一个基于红外释电原理的人体检测传感器，而且是只能检测出运动中的人体来，也就是说如果你站着基本不动的话，这个传感器是拿你一点办法都没有的;-) 这是一个数字传感器， 电路虽然看起来有点复杂，但使用起来的原理却异常简单：当有人运动到它的作用范围内的时候，输出高电平信号，该信号会持续一段时间（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以内的区域才触发，就应该选用小的透镜。]]></description>
			<content:encoded><![CDATA[<p>千万不要认为这个几十块钱的小玩意能够检测出诸如运行速度和方向这样的高级特性，它只是一个基于红外释电原理的人体检测传感器，而且是只能检测出运动中的人体来，也就是说如果你站着基本不动的话，这个传感器是拿你一点办法都没有的;-)</p>
<p>这是一个数字传感器， 电路虽然看起来有点复杂，但使用起来的原理却异常简单：当有人运动到它的作用范围内的时候，输出高电平信号，该信号会持续一段时间（0.3秒到18秒），持续时间可以由传感器上的电位器来进行调节。当调到下图中的位置时，输出信号的持续时间最短：</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_rip_pot.jpg"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_rip_pot.jpg" /></a></p>
<p>由于是简单的数字信号输出，因此只要完成相应的信号线与Arduino的连接，就可以使用该模块了：</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_rip_circuit.jpg"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_rip_circuit.jpg" /></a></p>
<p> 对应的程序也非常简单，跟数字按钮模块的程序基本一样：</p>
<pre><code>
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);
  }
}

</code></pre>
<p>说了这么多，你一定认为该模块使用起来非常容易，但真正要用好它可不容易。其中的一个问题就是透镜的选择，需要根据应用的实际需要进行相应的选择。常用的有7m和3m两种透镜，其有效距离在透镜的正前方为7m和3m左右。需要注意的是，并不是透镜越远越好，你需要模拟你应用的需要进行相应的选取，如果你需要在人进入距离传感器3m以内的区域才触发，就应该选用小的透镜。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2008/05/25/%e4%ba%ba%e4%bd%93%e8%bf%90%e5%8a%a8%e4%bc%a0%e6%84%9f%e5%99%a8%e5%8e%9f%e5%9e%8b/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>郁闷的声音传感器调试过程</title>
		<link>http://blog.flamingoeda.com/2008/05/25/%e9%83%81%e9%97%b7%e7%9a%84%e5%a3%b0%e9%9f%b3%e4%bc%a0%e6%84%9f%e5%99%a8%e8%b0%83%e8%af%95%e8%bf%87%e7%a8%8b/</link>
		<comments>http://blog.flamingoeda.com/2008/05/25/%e9%83%81%e9%97%b7%e7%9a%84%e5%a3%b0%e9%9f%b3%e4%bc%a0%e6%84%9f%e5%99%a8%e8%b0%83%e8%af%95%e8%bf%87%e7%a8%8b/#comments</comments>
		<pubDate>Sun, 25 May 2008 10:02:34 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[传感器]]></category>

		<guid isPermaLink="false">http://blog.booksforce.com/2008/05/25/%e9%83%81%e9%97%b7%e7%9a%84%e5%a3%b0%e9%9f%b3%e4%bc%a0%e6%84%9f%e5%99%a8%e8%b0%83%e8%af%95%e8%bf%87%e7%a8%8b/</guid>
		<description><![CDATA[声音传感器的板子拿到好几天了，一直没有找到时间去装它，昨天闲逛了一天，今天总算决定要把它装出来了。元件几天前就买好了，之前又在万用板上做过一个原型，自然觉得应该是一件轻松自然的事情。 焊接的过程是轻松的，虽然手艺不见长，但装它还是没什么问题，很好就把所有的东西安装好了。用万用表量了量GND和VCC间的电阻，没有短路就直接接到Arduino上测试了。刚插上没多久就好像问题了，芯片热得烫手！赶紧断电，之后对照原理图对电路仔细检查，并没有发现不对的地方！ 直接拿到稳压电源上，接上GND和5V后，发现电源流居然有500mA，按照芯片说明书的说明，应该只有4mA左右？搬出示波器来量输出端的电平信号，发现也的确是随着输入声音的变化而变化。这时就有点摸不着头脑了：看起来整个电路的工作是对的，除了电源太大之外。 只剩下上网查资料这一条路了，各种论坛和blog都翻了一个遍，最后觉得有可能是音频放大芯片的自激引起的。网上有人也相应地提供了一些解决办法，但我一一试过似乎对自己的电路没有什么大的作用。情急之下决定重新装一个，这回首先焊好音频放大芯片，在什么元件也不接的情况下，接上电源之后电流仍然是500mA！ 倒吸一口冷气，实在想不出是什么原因，难道是电路板布局的原因？重新找了另外一个空板和音频放大芯片，这回先只焊上了地和VCC，接上电源，一切正常！神经彻底崩溃，再装了两个芯片，同样正常！正常情况下整个电路消耗的电源约为4mA。 把其它元件安装上去之后，测试声音传感器，功能正常。虽然舒了一口气，但还是觉得挺奇怪为什么那两块板上的音频放大芯片不能正常工作，难道芯片坏了？是不是会是下面原因中的某个：电路板的问题，这次板子制的质量不是很高，下回得得换一家了；音频放大芯片烧掉了。之后如果有时间的话慢慢去查一下，看到底是哪里的问题。 虽然现在还没有完全找出前两块板子为什么不能正常工作的原因，但总结出了一个检验的办法，焊好音频放大芯片之后，可以直接接上电源，看看电路所需电流的大小，如果太大的话则说明电路工作不正常。 下面就是最后组装好的声音传感器，花了整整一天的时间才得到这么一个小家伙：]]></description>
			<content:encoded><![CDATA[<p>声音传感器的板子拿到好几天了，一直没有找到时间去装它，昨天闲逛了一天，今天总算决定要把它装出来了。元件几天前就买好了，之前又在万用板上做过一个原型，自然觉得应该是一件轻松自然的事情。</p>
<p>焊接的过程是轻松的，虽然手艺不见长，但装它还是没什么问题，很好就把所有的东西安装好了。用万用表量了量GND和VCC间的电阻，没有短路就直接接到Arduino上测试了。刚插上没多久就好像问题了，芯片热得烫手！赶紧断电，之后对照原理图对电路仔细检查，并没有发现不对的地方！</p>
<p>直接拿到稳压电源上，接上GND和5V后，发现电源流居然有500mA，按照芯片说明书的说明，应该只有4mA左右？搬出示波器来量输出端的电平信号，发现也的确是随着输入声音的变化而变化。这时就有点摸不着头脑了：看起来整个电路的工作是对的，除了电源太大之外。</p>
<p>只剩下上网查资料这一条路了，各种论坛和blog都翻了一个遍，最后觉得有可能是音频放大芯片的自激引起的。网上有人也相应地提供了一些解决办法，但我一一试过似乎对自己的电路没有什么大的作用。情急之下决定重新装一个，这回首先焊好音频放大芯片，在什么元件也不接的情况下，接上电源之后电流仍然是500mA！</p>
<p>倒吸一口冷气，实在想不出是什么原因，难道是电路板布局的原因？重新找了另外一个空板和音频放大芯片，这回先只焊上了地和VCC，接上电源，一切正常！神经彻底崩溃，再装了两个芯片，同样正常！正常情况下整个电路消耗的电源约为4mA。</p>
<p>把其它元件安装上去之后，测试声音传感器，功能正常。虽然舒了一口气，但还是觉得挺奇怪为什么那两块板上的音频放大芯片不能正常工作，难道芯片坏了？是不是会是下面原因中的某个：电路板的问题，这次板子制的质量不是很高，下回得得换一家了；音频放大芯片烧掉了。之后如果有时间的话慢慢去查一下，看到底是哪里的问题。</p>
<p>虽然现在还没有完全找出前两块板子为什么不能正常工作的原因，但总结出了一个检验的办法，焊好音频放大芯片之后，可以直接接上电源，看看电路所需电流的大小，如果太大的话则说明电路工作不正常。</p>
<p>下面就是最后组装好的声音传感器，花了整整一天的时间才得到这么一个小家伙：</p>
<p align="left"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound.jpg"></a></p>
<p style="text-align: center"><a href="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound.jpg"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound.jpg" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2008/05/25/%e9%83%81%e9%97%b7%e7%9a%84%e5%a3%b0%e9%9f%b3%e4%bc%a0%e6%84%9f%e5%99%a8%e8%b0%83%e8%af%95%e8%bf%87%e7%a8%8b/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>声音传感器原型</title>
		<link>http://blog.flamingoeda.com/2008/05/02/%e5%a3%b0%e9%9f%b3%e4%bc%a0%e6%84%9f%e5%99%a8%e5%8e%9f%e5%9e%8b/</link>
		<comments>http://blog.flamingoeda.com/2008/05/02/%e5%a3%b0%e9%9f%b3%e4%bc%a0%e6%84%9f%e5%99%a8%e5%8e%9f%e5%9e%8b/#comments</comments>
		<pubDate>Fri, 02 May 2008 07:33:24 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[传感器]]></category>

		<guid isPermaLink="false">http://blog.booksforce.com/2008/05/02/%e5%a3%b0%e9%9f%b3%e4%bc%a0%e6%84%9f%e5%99%a8%e5%8e%9f%e5%9e%8b/</guid>
		<description><![CDATA[有位同学曾经想过把声音信号经Arduino处理后，再传给另外一个设备进行处理，当时听了倒吸一口凉气，我想怕是俨然需要一个DSP系统才能处理他这样的要求吧。虽然对声音的波形进行处理不太可能，但是在Arduino上接一个声音传感器，来感知环境声音的大小还是可能的吧。 原理不算太复杂，用一个话筒（electret microphone）收集声音，将过放大之后接到Arduino的模拟输入端口上，这样当人对着话筒说话的时候，在Arduino的模拟输入端口上就能感知到电压的变化，说话声音越大，电压变化的幅度越大。解释一下，由于声波是不断变化的，在模拟输入端口上读出的值相应地也是变化的，我们只能只根据某个时间点上读出的值来对声音进行判断，因为这时你有可能读到的是声波波形的最小值。然而，我们的确可以根据某一时刻读到的声波的最大值，来判断此时声音的强度的:) 在将原理研究清楚之后，我在万能板上手工焊接了一个声音传感器的原型板： 该传感器同样有三根连线，5V和Gnd分别接Arduino的5V和Gnd两个引脚，Signal则要接在Arduino上的模拟输入端口上。这里我用到的是Arduino Mini，正好测试一模拟输入接口:) 为了查看实验效果，我搬出了墙角里的示波器，首先看看不对着话筒喊话时的波形图： 这个是让我的声音传感器听MP3时的波形图： 看起来还是有明显变化的。有了这样的实验结果，再写程序的话就算是有所依据了： int soundPin = 0; int value = 0; void setup() { Serial.begin(9600); } void loop() { value = analogRead(soundPin); if (value > 400) { Serial.println(value, DEC); delay(300); } } 上述程序不断地从模拟输入端口0上读入声音传感器的值，一当发现其值大于400，随即激活相应的动作。这里只是简单地将值从串口输出来，你完全可以根据自己的实际需要做相应的处理。当然，到底需要设置多大的门限值是合适的，需要根据你自己的实际情况进行设置，多试几次你一定能够找到合适的值的。]]></description>
			<content:encoded><![CDATA[<p>有位同学曾经想过把声音信号经Arduino处理后，再传给另外一个设备进行处理，当时听了倒吸一口凉气，我想怕是俨然需要一个DSP系统才能处理他这样的要求吧。虽然对声音的波形进行处理不太可能，但是在Arduino上接一个声音传感器，来感知环境声音的大小还是可能的吧。</p>
<p>原理不算太复杂，用一个话筒（electret microphone）收集声音，将过放大之后接到Arduino的模拟输入端口上，这样当人对着话筒说话的时候，在Arduino的模拟输入端口上就能感知到电压的变化，说话声音越大，电压变化的幅度越大。解释一下，由于声波是不断变化的，在模拟输入端口上读出的值相应地也是变化的，我们只能只根据某个时间点上读出的值来对声音进行判断，因为这时你有可能读到的是声波波形的最小值。然而，我们的确可以根据某一时刻读到的声波的最大值，来判断此时声音的强度的:)</p>
<p>在将原理研究清楚之后，我在万能板上手工焊接了一个声音传感器的原型板：</p>
<p><a href="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound_prototype.png"></a></p>
<p style="text-align: center"><a href="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound_prototype.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound_prototype.png" /></a></p>
<p>该传感器同样有三根连线，5V和Gnd分别接Arduino的5V和Gnd两个引脚，Signal则要接在Arduino上的模拟输入端口上。这里我用到的是Arduino Mini，正好测试一模拟输入接口:)</p>
<p><a href="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound_circuit.png"></a></p>
<p style="text-align: center"><a href="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound_circuit.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound_circuit.png" /></a></p>
<p>为了查看实验效果，我搬出了墙角里的示波器，首先看看不对着话筒喊话时的波形图：</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound_wave.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound_wave.png" /></a></p>
<p>这个是让我的声音传感器听MP3时的波形图：</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound_wave_mp3.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/analog_sensor_sound_wave_mp3.png" /></a></p>
<p>看起来还是有明显变化的。有了这样的实验结果，再写程序的话就算是有所依据了：</p>
<pre><code>
int soundPin = 0;
int value = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  value = analogRead(soundPin);
  if (value > 400) {
    Serial.println(value, DEC);
    delay(300);
  }
}
</code></pre>
<p>上述程序不断地从模拟输入端口0上读入声音传感器的值，一当发现其值大于400，随即激活相应的动作。这里只是简单地将值从串口输出来，你完全可以根据自己的实际需要做相应的处理。当然，到底需要设置多大的门限值是合适的，需要根据你自己的实际情况进行设置，多试几次你一定能够找到合适的值的。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2008/05/02/%e5%a3%b0%e9%9f%b3%e4%bc%a0%e6%84%9f%e5%99%a8%e5%8e%9f%e5%9e%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>倾斜传感器</title>
		<link>http://blog.flamingoeda.com/2008/02/27/%e5%80%be%e6%96%9c%e4%bc%a0%e6%84%9f%e5%99%a8/</link>
		<comments>http://blog.flamingoeda.com/2008/02/27/%e5%80%be%e6%96%9c%e4%bc%a0%e6%84%9f%e5%99%a8/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 13:48:45 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[传感器]]></category>

		<guid isPermaLink="false">http://blog.booksforce.com/2008/02/27/%e5%80%be%e6%96%9c%e4%bc%a0%e6%84%9f%e5%99%a8/</guid>
		<description><![CDATA[倾斜传感器的核心是一个滚动开关，它内部安装有一个金属小球，当传感器被放置到一个固定的角度时，小球在重力作用下会滚动到传感器的底部，从而导致相应的电路接通。 该模块同Arduino专用传感器模块配合起来使用时， 电路连接非常简单，只需要把传感器用连接线同Arduino传感器扩展板连接起来就可以了： 原理上讲该传感器属于一个数字输入模块，因些同样有正逻辑和负逻辑的区别，我们同样可以通过调节传感器上两个拨动开关的位置，来选择正逻辑电路或者负逻辑电路。]]></description>
			<content:encoded><![CDATA[<p>倾斜传感器的核心是一个滚动开关，它内部安装有一个金属小球，当传感器被放置到一个固定的角度时，小球在重力作用下会滚动到传感器的底部，从而导致相应的电路接通。</p>
<p><a href="http://blog.booksforce.com/wp-content/uploads/2008/02/digital_sensor_tilt.png"></p>
<p style="text-align: center"><img src="http://blog.booksforce.com/wp-content/uploads/2008/02/digital_sensor_tilt.png" /></p>
<p></a></p>
<p>该模块同Arduino专用传感器模块配合起来使用时， 电路连接非常简单，只需要把传感器用连接线同Arduino传感器扩展板连接起来就可以了：</p>
<p><a href="http://blog.booksforce.com/wp-content/uploads/2008/02/arduino_tilt_module_circuit.png"></p>
<p style="text-align: center"><img src="http://blog.booksforce.com/wp-content/uploads/2008/02/arduino_tilt_module_circuit.png" /></p>
<p></a></p>
<p>原理上讲该传感器属于一个数字输入模块，因些同样有正逻辑和负逻辑的区别，我们同样可以通过调节传感器上两个拨动开关的位置，来选择正逻辑电路或者负逻辑电路。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2008/02/27/%e5%80%be%e6%96%9c%e4%bc%a0%e6%84%9f%e5%99%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>数字输入按钮模块</title>
		<link>http://blog.flamingoeda.com/2008/02/27/%e6%95%b0%e5%ad%97%e8%be%93%e5%85%a5%e6%8c%89%e9%92%ae%e6%a8%a1%e5%9d%97/</link>
		<comments>http://blog.flamingoeda.com/2008/02/27/%e6%95%b0%e5%ad%97%e8%be%93%e5%85%a5%e6%8c%89%e9%92%ae%e6%a8%a1%e5%9d%97/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 16:17:04 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[传感器]]></category>

		<guid isPermaLink="false">http://blog.booksforce.com/2008/02/27/%e6%95%b0%e5%ad%97%e8%be%93%e5%85%a5%e6%8c%89%e9%92%ae%e6%a8%a1%e5%9d%97/</guid>
		<description><![CDATA[数字输入可能是最简单的应用电路了，但即便如此，实际使用的时候还是有正逻辑电路和负逻辑电路的区别，在面包板上要搭建起来也不是一时半会就能完全搞清楚的。正因如此，我设计制作了这一数字输入的按钮模块，以方便实际应用时能够快速搭建电路。 通过对两个拔动开关的控制，该模块能够实现正逻辑电路，也能够实现负逻辑电路。当将两个拔动开关都置于位置“1”时，按钮按下时为低电平（逻辑0，负逻辑电路）；当将两个拔动开关都置于位置“2”时，按钮按下时为高电平（逻辑1，正逻辑电路）。需要注意的是，当两个拔动开关一个处于位置1而另一个处理位置2时，电路处于短路状态，虽然加了自恢复保险丝，但使用时最好先将拔动开关位置设置好再接通电源。 同样，该模块设计时还是以Arduino专用传感器模块作为基准，但这次要用到的是数字输入接口部分。使用的时候需要将模块与传感器扩展板用数字传感器连接线连接起来就可以使用了： 在上图中，两个拔动开关都置于位置1，相应的代码为： int ledPin = 8; int switchPin = 2; int value = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(switchPin, INPUT); } void loop() { value = digitalRead(switchPin); if (LOW == value) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }]]></description>
			<content:encoded><![CDATA[<p>数字输入可能是最简单的应用电路了，但即便如此，实际使用的时候还是有正逻辑电路和负逻辑电路的区别，在面包板上要搭建起来也不是一时半会就能完全搞清楚的。正因如此，我设计制作了这一数字输入的按钮模块，以方便实际应用时能够快速搭建电路。</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/02/digital_sensor_switch.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/02/digital_sensor_switch.png" /></a></p>
<p>通过对两个拔动开关的控制，该模块能够实现正逻辑电路，也能够实现负逻辑电路。当将两个拔动开关都置于位置“1”时，按钮按下时为低电平（逻辑0，负逻辑电路）；当将两个拔动开关都置于位置“2”时，按钮按下时为高电平（逻辑1，正逻辑电路）。需要注意的是，当两个拔动开关一个处于位置1而另一个处理位置2时，电路处于短路状态，虽然加了自恢复保险丝，但使用时最好先将拔动开关位置设置好再接通电源。</p>
<p>同样，该模块设计时还是以Arduino专用传感器模块作为基准，但这次要用到的是数字输入接口部分。使用的时候需要将模块与传感器扩展板用数字传感器连接线连接起来就可以使用了：</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/02/arduino_switch_module_circuit.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/02/arduino_switch_module_circuit.png" /></a></p>
<p>在上图中，两个拔动开关都置于位置1，相应的代码为：</p>
<pre><code>
int ledPin = 8;
int switchPin = 2;
int value = 0;

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

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

</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2008/02/27/%e6%95%b0%e5%ad%97%e8%be%93%e5%85%a5%e6%8c%89%e9%92%ae%e6%a8%a1%e5%9d%97/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Arduino专用传感器扩展板</title>
		<link>http://blog.flamingoeda.com/2008/01/04/arduino%e4%b8%93%e7%94%a8%e4%bc%a0%e6%84%9f%e5%99%a8%e6%89%a9%e5%b1%95%e6%9d%bf/</link>
		<comments>http://blog.flamingoeda.com/2008/01/04/arduino%e4%b8%93%e7%94%a8%e4%bc%a0%e6%84%9f%e5%99%a8%e6%89%a9%e5%b1%95%e6%9d%bf/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 14:15:39 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[传感器]]></category>
		<category><![CDATA[常用元件]]></category>

		<guid isPermaLink="false">http://blog.booksforce.com/2008/01/04/arduino%e4%b8%93%e7%94%a8%e4%bc%a0%e6%84%9f%e5%99%a8%e6%89%a9%e5%b1%95%e6%9d%bf/</guid>
		<description><![CDATA[我们在用Arduino制作各种互动作品的时候，经常会用到一些常用的传感器或者电路模块。对于那些熟悉电子电路的人来讲，用面包板或者万能板搭建一些简单的模块电路当然是可以的，但对于那些不太熟悉电路或者稍微复杂的电路来讲，似乎就不那么适合了。 国外经常有人将各种实用的电路作成电子模块的，这样在需要的时候我们只需要购买相应的模块，然后做一些简单的连接和配置就可以了。在将同样的思路应用到Arduino和互动设计上之后，我们专门针对Arduino开发了一块连接各种传感器的扩展板： 各种电路模块同Arduino相连接的接口一般分为模拟、数字和串口三种类似，上面这块扩展板上的左边是6个模块接口，可以用来读取模拟量输入，右上角则引出了Arduino数字I/O接口上的0-7号管脚。对于扩展板上每一个模拟接口和数字接口来讲，都各自有一个引脚同Arduino上的5V和GND引脚相连，以方便接线。 下图是该扩展板与Arduino相连接后的效果图： 使用这一扩展板能够很容易地与一些常用的模拟传感器相连，例如光线传感器。连接的时候我们需要用到专用的连接线： 有了这一扩展板和相应电路模块的支持，我们只需要用专用的连接线把相应的传感器模块同Arduino连接起来，电路部分就算完成了。由于具体的电路细节则都由相应的传感器模块来实现，因些我们需要考虑的只是如何在Arduino中编写相应的程序来读取这些传感器传过来的数据就可以了。]]></description>
			<content:encoded><![CDATA[<p>我们在用Arduino制作各种互动作品的时候，经常会用到一些常用的传感器或者电路模块。对于那些熟悉电子电路的人来讲，用面包板或者万能板搭建一些简单的模块电路当然是可以的，但对于那些不太熟悉电路或者稍微复杂的电路来讲，似乎就不那么适合了。</p>
<p>国外经常有人将各种实用的电路作成电子模块的，这样在需要的时候我们只需要购买相应的模块，然后做一些简单的连接和配置就可以了。在将同样的思路应用到Arduino和互动设计上之后，我们专门针对Arduino开发了一块连接各种传感器的扩展板：</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/01/arduino_sensor_board_interface.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/01/arduino_sensor_board_interface.png" /></a></p>
<p>各种电路模块同Arduino相连接的接口一般分为模拟、数字和串口三种类似，上面这块扩展板上的左边是6个模块接口，可以用来读取模拟量输入，右上角则引出了Arduino数字I/O接口上的0-7号管脚。对于扩展板上每一个模拟接口和数字接口来讲，都各自有一个引脚同Arduino上的5V和GND引脚相连，以方便接线。</p>
<p>下图是该扩展板与Arduino相连接后的效果图：</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/01/arduino_sensor_board_connection.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/01/arduino_sensor_board_connection.png" /></a></p>
<p>使用这一扩展板能够很容易地与一些常用的模拟传感器相连，例如光线传感器。连接的时候我们需要用到专用的连接线：</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/01/arduino_sensor_board_cable.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/01/arduino_sensor_board_cable.png" /></a></p>
<p>有了这一扩展板和相应电路模块的支持，我们只需要用专用的连接线把相应的传感器模块同Arduino连接起来，电路部分就算完成了。由于具体的电路细节则都由相应的传感器模块来实现，因些我们需要考虑的只是如何在Arduino中编写相应的程序来读取这些传感器传过来的数据就可以了。</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/01/arduino_sensor_board_circuit.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/01/arduino_sensor_board_circuit.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2008/01/04/arduino%e4%b8%93%e7%94%a8%e4%bc%a0%e6%84%9f%e5%99%a8%e6%89%a9%e5%b1%95%e6%9d%bf/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

