CJMCU-TEMT6000是一款环境光传感器,用于可见光的检测。最高灵敏度为 570nm,其具有 ±60° 的较宽半灵敏度角度。尽管该器件对环境光非常敏感,但它可抑制红外线 (IR) 光谱,从而可提供类似“人眼”的更高可见光谱响应性。

模块提供三个引脚:电源Vcc(直流3.3-5.5V)、地Gnd、Vout(模拟电压,在5工作电压情况范围0-5V),模拟输出(S)。照度范围:1--1000Lux。
本次体验,使用ESP8266,在Arduino下进行测试,使用3.3V的工作电压,搭建的电路如下:


ESP8266刚好提供有一个10位的ADC采集端,用来采集环境光传感器TEMT6000的输出电压。OLED的第一行就是ADC的采集结果。实际测试,TEMT6000确实非常灵敏,用不同介质在距离传感器10厘米位置处,仅仅因为反射,都会明显改变测试结果。在聚光手电筒照射下,立即达到最大值1024。
程序代码如下:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// OLED的显示宽高
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// ESP8266接线备注:SCL(GPIO5---D1), SDA(GPIO4---D2)
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library.
// On an arduino UNO: A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO: 2(SDA), 3(SCL), ...
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
// OLED的I2C访问地址
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
// 声明OLED显示对象
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// 声明光检测用变量
// ADC的输入口,ESP8266只有一个ADC输入口:A0
int sensorPin = A0;
// ADC转换结果
int sensorValue = 0;
// 初始化处理
void setup() {
// 初始化串口波特率
Serial.begin(115200);
// 检查OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
// 连接失败
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
}
// 测试用显示数据
uint16_t cnt=0;
void loop() {
// 获得ADC转换结果
sensorValue = analogRead(sensorPin);
// 清除显示内容
display.clearDisplay();
// 设置显示字体的尺寸
display.setTextSize(2); // Draw 2X-scale text
// 设置显示色
display.setTextColor(SSD1306_WHITE);
// 设置显示位置
display.setCursor(0, 0);
// 输出ADC转换结果
display.println(sensorValue);
// 设置显示位置
display.setCursor(0, 16);
// 输出测试数据
display.println(cnt++);
// 启动显示
display.display();
// 延时
delay(50);
}需要引入Adafruit的GFX库和SSD1306的支持库。


测试文件:demo.zip
我要赚赏金
