ARM技术论坛
直播中

王安国

9年用户 641经验值
擅长:嵌入式技术 处理器/DSP 控制/MCU
私信 关注
[经验]

【VEML6040环境颜色检测试用体验】+书房环境颜色检测报警系统(结项)

一,项目背景
通过前面学习,已经熟悉了世平集团推出基于Vishay VEML4020的环境颜色检测方案。不需要有专业的色彩捕捉知识,就可以实现环境颜色的采集。还配备了NXP LPC824处理器,可以把环境颜色完美的体现出来。
采集环境颜色参数,源于Vishay推出的一颗RGBW传感器,该传感器集成了信号处理IC,直接提供I2C接口,读取环境颜色数据。这传感器可以检测红光、绿光、蓝光和白光,每个颜色通道的分辨率为16位。而且体积非常小(2.0mmx1.25mmx1.0mm)采用表面贴装封装。在数码相机、电视机等消费类产品,让这些产品可以根据环境光来调整背光的亮度和色温,使LCDLED屏幕看起来更舒适。传感器把颜色平衡、背光控制和色温检测所需的电路包含在一个器件里,可节省空间,同时不需要外置电阻,从而降低成本,简化设计。VEML6040d的内置环境光光电二极管具有极高的感光度,能探测0.0056lx11.7klx的光照度,使器件可以工作在有暗镜的应用里。传感器对荧光频闪没有响应,在关机模式下的电流小于1μA,在-40℃~+85℃范围内能提供优异的温度补偿。
器件的工作电压和I2C总线电压为2.5V3.6V,采用无铅的4pin OPLGA封装。VEML6040符合RoHSVishay绿色标准,无卤素。
二,项目目标
1,移植FreeRtos实时系统,基于该系统实现项目功能;
2,采集环境颜色数据,实时显示在显示器上;
3,自适应过程:当环境颜色比较黑时,打开LED灯(D5D6D7)。当环境颜色偏红时,发出报警,LED闪烁(D5D6D7)。
三,硬件
使用环境颜色检测开发套件。
四,项目过程
1FreeRtos移植
1,源文件准备,可以到freertos官网上下载:
1)FreeRTOS内核有关的文件数量仅为3个,分别是list.c queue.c tasks.c croutine.c timers.c该文件位于FreeRTOSSource
2)与内存分配有关的文件共有4个,分别是heap_1.c,heap_2.c,heap_3.c,heap_4.cheap_5.c最新版有5个文件只需选择其中的1个,我们这里选择heap_3.c。该文件位于SourceportableMemMang
3) 与移植相关的代码包括port.c,portmacro.h。这些代码不但和编译器有关还和平台(MCU)有关。FreeRTOS先以编译器为大类,然后再以平台(MCU)为小类。在这里选择Keil编译器,平台为ARM_CM0。该文件位于SourceportableRVDSARM_CM0
4)除了上述内容之外,还包括FreeRTOS内核相关的头文件该文件FreeRTOSSourceinclude
2,在工程中加入Freertos文件。
加入的文件有list.c queue.c tasks.c  timers.c  heap_3.cport.cFreeRTOSCommonHooks.c
3,在工程中加入Freertos文件的头文件路径
4,编译,提示错误,没有FreeRTOSConfig.h文件
   编写该文件对内核的配置,需要FreeRTOSConfig.h中的相关宏定义,文件一般与应用文件放在一起。
5需要在启动代码中修改这些中断向量的名称,并声明这些中断向量为外部函数。这也是初次使用FreeRTOS容易范的错误。我这里就在        FreeRTOSConfig.h定义:
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
6,在FreeRTOSCommonHooks.c中需要定义三个钩子函数
void vApplicationIdleHook(void)
{ }
void vApplicationTickHook(void)
{ }
void vApplicationMallocFailedHook(void)
{
                   taskDISABLE_INTERRUPTS();
                    for(;;);
}
7,在main文件中添加内核头文件:
#include "FreeRTOS.h"
#include "task.h"
#include "timers.h"
#include "semphr.h"
8,在mian函数中添加任务
        xTaskCreate(vLEDTask1, "vTaskLed1",
                                configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY + 1UL),
                                (TaskHandle_t *) NULL);
/* Start the scheduler. */
        vTaskStartScheduler();
    while(1)
    {
      
}
移植基本上结束。但是移植国产中还需要注意一个配置文件FreeRTOSConfig.h
(这个文件自己编写),FreeRTOS 是高度可配置的。所有的可配置项都在FreeRTOSConfig.h 文件中。每一个Demo 程序中都包含了一个配置好的FreeRTOSConfig.h 文件,可以以Demo程序中的FreeRTOSConfig.h 文件作为模板,在其基础上加以修改。
2)在系统中添加读取环境颜色传感器数据任务
图片1.png
在读取传感器数据任务函数vRGB_Sensor中,实现,读取数据,然后通过队列讲数据传输到显示任务中。
图片2.png
使用队列时,先创建队列。
图片3.png
3)显示传感器数据
创建一个任务,在LCM上显示读取的传感器数据。
图片4.png
图片5.png
通过队列读取数据。
显示效果:
图片6.png
4)环境自适应报警系统
使用开发套件上的传感器采集环境光颜色来实现环境自适应报警系统。
A,当环境比较暗时,打开LED灯,当光敏传感器使用。自动调节环境光线,避免光线太暗,影响视力。
当光线比较好时,LED关闭:
图片7.png
当光线比较暗时,打开LED灯。
图片8.png
测试视频:
[media]http://v.youku.com/v_show/id_XMjY2NjQ2MjQ5Mg==.html[/media]
B,当环境颜色偏红时,发出报警信号。LED灯闪烁。
图片9.png
测试视频:
[media]http://v.youku.com/v_show/id_XMjY2NjQ5NDM4NA==.html[/media]
五,项目总结
VEML4020环境颜色检测开发套件简单地实现环境颜色的数据采集,应用起来非常方便。我在这里只是简单是使用了他的功能。VEML4020非常强大,可以应用于很多领域。特别是在手机、数码相机、电视机等消费类产品,让这些产品可以根据环境光来调整背光的亮度和色温,使LCDLED屏幕看起来更舒适。由于VEML4020传感器体积分成小,在设计里面可以大大节省空间,同时不需要外置电阻,从而降低成本,简化设计。

回帖(2)

CHNlyt

2017-3-30 11:25:35
厉害。。。。。。
举报

CHNlyt

2017-3-30 11:25:40
厉害。。。。。。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分