Arduino中国 | Flamingo EDA

Archive for August 2009

Aug/09

31

Arduino控制的全彩RGB LED

RGB Monome项目为全彩LED的控制留下了充足的空间,为了进一步实验TLC5940对RGB LED的控制,我们将TCL5940和RGB LED分别制作成了相应的模块,以方便类似RGB LED项目的开发。首先是RGB LED模块,这个小模块上提供有6颗RGB LED:

接着是TLC5940模块,它被设计成能够方便地与RGB LED模块通过连接线连接

可惜的是,这一版本的TLC5940模块在设计的时候参考的是Monome的设计,因而被设计成了共阴驱动的方式,但相应的转换电路又没有带上,所以实际上是一个设计不成功的电路。不过没有关系,我们只需要使用连接线将VCC与每个RGB LED模块的公共端连接起来就可以了,虽然乱点,但并不影响实验。

Arduino这端暂时就用原型板一个一个引脚连接了,虽然也能够做一个扩展板,但在原型验证阶段并不是那么必须。

所以硬件连接好之后,就可以下载软件进行实验了,基本实验使用的是tlc5940arduino这一库所提供的测试例子Fades,需要注意的是由于USB接口没有办法提供足够的电流,因些需要使用外接电源来给整个电路供电。下图是测试时的效果:

·

DS18B20是DALLAS公司推出的单线数字温度传感器,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内的精度为±0.5°C,由于其优越的性价比,因此在实际项目中被大量采用。同基于热敏电阻的温度传感器不同,使用数字温度传感器避免了复杂的换算,可以直接从传感中读出温度的数值。

由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,这对硬件上并不支持单总线协议的单片机来讲可是一个不小的麻烦,因为只能采用软件的方法来模拟单总线的协议时序,从而完成对DS18B20芯片的访问。听起来有点复杂,好在Arduino上已经有了相应的实现,并封装好了相应的库来让我们直接读出DS18B20的数据。

我们提供了DS18B20的电子积木模块,以方便在Arduino上的使用:

连接上依然使用的是通用传感器连接线和Arduino专用传感器扩展板V4,此处我们将数字温度传感器连接到了数字I/O第12号引脚上了:

硬件准备好之后,首先下载相应的软件包,并将其解压缩到Arduino安装目录下的hardware\libraries目录下:

重新启动Arduino之后,就可以在代码中使用这一为DS18B20量身打造的库了,下面是我测试时所使用的代码:

#include <DallasTemperature.h>

DallasTemperature tempSensor;

void setup(void) {
  Serial.begin(9600);
  tempSensor.begin(12); // DS18B20接在数字I/O第12号引脚上
}

void loop(void) {
    // 检查温度传感器是否正常工作
    switch(tempSensor.isValid())
    {
        case 1:
            Serial.println("Invalid CRC");
            tempSensor.reset(); // 重置温度传感器
            return;
        case 2:
            Serial.println("Not a valid device");
            tempSensor.reset(); // 重置温度传感器
            return;
    }

  // 从DS18B20读取温度值
  Serial.print(tempSensor.getTemperature());
  Serial.print("C");
  Serial.println();
}

在将代码下载到Arduino中并运行起来之后,打开Arduino的串口监视工具,我们就可以看到从数字温度传感器DS18B20中读出来的温度值了: