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