聚丰项目 > 基于恩智浦颜色检测套件织布厂布料自动分类系统

基于恩智浦颜色检测套件织布厂布料自动分类系统

经过这段时间的试用,我已经对开发板有充分的了解,已经可以用于实际项目 并提交试用报告了。屏幕显示VEML6040模块检测的红,绿,蓝光检测数据,通过色光强度数据分析物体的颜色,具体原理是,当使用白光照射物体时,物体反射的光颜色的RGB数值一与该物体的颜色大致相近,根据牛顿光谱规律分析,使用白色强光照射物体反射光波长越短,所得RGB数值与物体颜色越接近。这个VEML6040的光谱检测精度已经可以满足织布厂布料自动分类系统所要求的精度了。

donatello1996 donatello1996

分享
1 喜欢这个项目
团队介绍

donatello1996 donatello1996

团队成员

donatello1996 学生

分享
项目简介
经过这段时间的试用,我已经对开发板有充分的了解,已经可以用于实际项目 并提交试用报告了。屏幕显示VEML6040模块检测的红,绿,蓝光检测数据,通过色光强度数据分析物体的颜色,具体原理是,当使用白光照射物体时,物体反射的光颜色的RGB数值一与该物体的颜色大致相近,根据牛顿光谱规律分析,使用白色强光照射物体反射光波长越短,所得RGB数值与物体颜色越接近。这个VEML6040的光谱检测精度已经可以满足织布厂布料自动分类系统所要求的精度了。
硬件说明

VEML6040环境颜色套件2.PNG

软件说明

MDK Keil 5.18

LPC800.pack

MBED驱动

main()函数代码如下:

int main()
{
  uint8_t  LSB,MSB,i,times=30;
	uint16_t txSize=2,rxSize=0,
	last_Data,red_data,green_data,
	blue_data;
  uint32_t sum_data,avr_data;
	
	SystemCoreClockUpdate();
	SystemInit();
	SysTick_Config(SystemCoreClock/TICKRATE_HZ);
	Chip_GPIO_Init(LPC_GPIO_PORT);
	VEML6040_Init();
	Board_UART_Init();
  LCD12864_Init();
	LED_Init();
	//PUTImage(LOGO);
	LCD12864_Clear();
	
	txData[0]=0x00,txData[1]=0x10;
  SetupXferRecAndExecute(I2C_ADDR_7BIT,
	txData,txSize,rxData,rxSize);
	last_Data=0;
	txSize=1,rxSize=2;
	/*
	LCD12864_char16x16(0,0,0);
	LCD12864_char16x16(2,0,1);
	LCD12864_char16x16(4,0,2);
	LCD12864_char16x16(6,0,3);
	LCD12864_char16x16(8,0,4);
	LCD12864_char16x16(10,0,5);
	LCD12864_char16x16(12,0,6);
	LCD12864_char8x16(2,0,"Donatello1996");*/
  LCD12864_char16x16(0,0,7);
	LCD12864_char16x16(2,0,11);
	LCD12864_char16x16(10,0,8);
	LCD12864_char16x16(12,0,11);
	LCD12864_char16x16(0,4,9);
	LCD12864_char16x16(2,4,11);
	LCD12864_char16x16(10,4,10);
	LCD12864_char16x16(12,4,11);
	while(1) 
	{			
		
		sum_data=0;
	 	txData[0]=0x08;
	  for(i=0;i<times;i++)
		{//¼ì²âºì¹â
			SetupXferRecAndExecute(I2C_ADDR_7BIT, txData,txSize, rxData, rxSize);
			delay(100);
			LSB=rxData[0];
			MSB=rxData[1];

			last_Data=((MSB<<8)+LSB);
			sum_data+=last_Data;
		}
		avr_data=sum_data/times;
		red_data=avr_data;
		LCD12864_char8x16(0,2,"     ");
		LCD12864_num(0,2,avr_data);
 		
			
	 	txData[0]=0x09;
    sum_data=0;
		for (i=0;i<times;i++)
		{
			SetupXferRecAndExecute(I2C_ADDR_7BIT, txData,txSize, rxData, rxSize);
			delay(100);
			LSB = rxData[0];
			MSB = rxData[1];
			last_Data=((MSB<<8)+LSB);
			sum_data+=last_Data;
		}
		avr_data=sum_data/times;
		green_data=avr_data;
		LCD12864_char8x16(10,2,"     ");
		LCD12864_num(10,2,avr_data);
	 	
	 	txData[0]=0x0A;
	  sum_data=0;
	  for (i=0;i<times;i++)
		{
			SetupXferRecAndExecute(I2C_ADDR_7BIT, txData,txSize, rxData, rxSize);
		 	delay(100);
			LSB = rxData[0];
			MSB = rxData[1];

			last_Data=((MSB<<8)+LSB);
			sum_data+=last_Data;
		}
		avr_data=sum_data/times;
		blue_data=avr_data;
		LCD12864_char8x16(0,6,"     ");
		LCD12864_num(0,6,avr_data);
		
		txData[0]=0x0B;
	  sum_data=0;
	  for (i=0;i<times;i++)
		{
			SetupXferRecAndExecute(I2C_ADDR_7BIT, txData,txSize, rxData, rxSize);
			delay(100);
			LSB=rxData[0];
			MSB=rxData[1];
			last_Data=((MSB<<8)+LSB);
			sum_data+=last_Data;
		}
		avr_data = sum_data/times;
		LCD12864_char8x16(10,6,"     ");
		LCD12864_num(10,6,avr_data);
    delay_Long2(1000);
		
		if(red_data>green_data&&red_data>blue_data)
		LCD12864_char16x16(6,2,7),LCD12864_char16x16(6,4,12);
		if(green_data>red_data&&green_data>blue_data)
		LCD12864_char16x16(6,2,8),LCD12864_char16x16(6,4,12);
		if(blue_data>red_data&&blue_data>green_data)
		LCD12864_char16x16(6,2,9),LCD12864_char16x16(6,4,12);
	}
}


演示效果

IMG_20170410_164902.jpg

附件

(0.55 MB)下载

评论区(2 )
  • 动心忍性1234: 您好我是无线电杂志的编辑,我们对您的项目十分感兴趣,请问您有兴趣投稿吗?成为我们的作者除稿费外还有其他优厚条件。敬请参与。投稿请联系QQ260534978.

    回复

  • 精意2016: 你好!我现在要用VEML6040这个传感器 现在根据规格书 写的通信 逻辑分析仪看逻辑也正确 但是现在面临的问题 读不到任何数据 不知道什么原因想请教你 QQ1412112882 万分感谢

    回复