项目可以用光传感器自动打开灯光的功能。 那么这个光传感器就要测试一下,这里的光传感器其实就是一个光敏电阻或光导管。
光敏电阻常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。
模块上的这个型号就不知道了。也不清楚了什么材料的了。
工程中使用到的文件有以下三个。还要把工程中添加上文件的路径,让软件找到这些文件。
传感器依然插在A0插座上。方便测试。
其中程序为:
- #include
- #include
- #include "grove.h"
- int
- main(int argc, char **argv)
- {
- //! [Interesting]
- // Create the light sensor object using AIO pin 0
- upm::GroveLight* light = new upm::GroveLight(0);
- // Read the input and print both the raw value and a rough lux value,
- // waiting one second between readings
- while( 1 ) {
- std::cout << light->name() << " raw value is " << light->raw_value() <<
- ", which is roughly " << light->value() << " lux" << std::endl;
- sleep(1);
- }
- // Delete the light sensor object
- delete light;
- //! [Interesting]
- return 0;
- }
复制代码
以下这句就是新建一个GroveLight类对像并对于A0口进行初始化,初始化是在类的构造函数中。
upm::GroveLight* light = new upm::GroveLight(0);
再使用std::cout方法,将结果输出在终端上。
其中light->value()方法是获取lux值的方法。
- int GroveLight::value()
- {
- // rough conversion to lux, using formula from Grove Starter Kit booklet
- float a = (float) mraa_aio_read(m_aio);
- if (a == -1.0) return -1;
- a = 10000.0/pow(((1023.0-a)*10.0/a)*15.0,4.0/3.0);
- return (int) round(a);
- }
复制代码
运行结果:用手遮住光敏电阻后,可以看到显示结果就是1lux 了。可见运行结果还是很准的。
|