Color Sensor for PLC using RGB Color Sensor and Arduino
Color sensor for PLC use for color detection on an object. For this application using RGB color sensor and Arduino for transfer data from color sensor module to PLC via Modbus communication.
Examples of applications for color sensors on industrial:
1. Detecting the color of the product
2. Color card to access the machine
3. Detecting the color of waste, if waste is not good then the machine stop.
4. Detecting color on the Workwear Uniform of employees, who will run the machine
Video about Color Sensor for PLC:
Preparation of the necessary Hardware:
1. RGB Color Sensor Module: TCS3200 Color Sensor Recognition Module
2. Arduino UNO R3
3. DC 9V Power Plug Adapter for Arduino UNO R3
4. Male Connector RS232 to TTL Serial Port Converter Module
5. 2 pieces push button switch for: black and white color calibration
6. Color Cards for calibration and testing.
7. Siemens S7-200 PLC, or other PLC with Modbus Support
8. PLC Cable : RS232 PPI Multi Master Cable
Hardware Connections of RGB Color Sensor for PLC
Download Project File for RGB Color Sensor:
1. Arduino Libraries for this project, click here
Copy-Paste folder: SimpleModbusMaster, EEPROMEx, FreqCount and MD_TCS230 into folder C:\Program Files (x86)\Arduino\libraries
2. Arduino Project File for this application, click here
3. PLC Ladder Programming for RGB Color Sensor, click here
PLC Ladder Programming Setting:
Setting of Red Value, Green Value and Blue Value in PLC Ladder Programming:
Placing objects in color sensor, check Red Value in VW804, Green Value in VW804 and Blue Value in VW808. And then look for the minimum and maximum values.
Arduino Code for the Color Application on PLC:
Examples of applications for color sensors on industrial:
1. Detecting the color of the product
2. Color card to access the machine
3. Detecting the color of waste, if waste is not good then the machine stop.
4. Detecting color on the Workwear Uniform of employees, who will run the machine
Video about Color Sensor for PLC:
Preparation of the necessary Hardware:
1. RGB Color Sensor Module: TCS3200 Color Sensor Recognition Module
2. Arduino UNO R3
3. DC 9V Power Plug Adapter for Arduino UNO R3
4. Male Connector RS232 to TTL Serial Port Converter Module
5. 2 pieces push button switch for: black and white color calibration
6. Color Cards for calibration and testing.
7. Siemens S7-200 PLC, or other PLC with Modbus Support
8. PLC Cable : RS232 PPI Multi Master Cable
Hardware Connections of RGB Color Sensor for PLC
Download Project File for RGB Color Sensor:
1. Arduino Libraries for this project, click here
Copy-Paste folder: SimpleModbusMaster, EEPROMEx, FreqCount and MD_TCS230 into folder C:\Program Files (x86)\Arduino\libraries
2. Arduino Project File for this application, click here
3. PLC Ladder Programming for RGB Color Sensor, click here
PLC Ladder Programming Setting:
Setting of Red Value, Green Value and Blue Value in PLC Ladder Programming:
Placing objects in color sensor, check Red Value in VW804, Green Value in VW804 and Blue Value in VW808. And then look for the minimum and maximum values.
Arduino Code for the Color Application on PLC:
//MODBUS #include <SimpleModbusMaster.h> //Arduino Serial Port Connect to Port 0 of Siemens PLC S7 200 //for more info program-plc.blogspot.com #define slaveAddr 1 #define baud 9600 #define timeout 1000 #define polling 200 #define retry_count 0 #define TxEnablePin 2 enum { PACKET1, PACKET2, TOTAL_NO_OF_PACKETS }; Packet packets[TOTAL_NO_OF_PACKETS]; packetPointer packet1 = &packets[PACKET1]; packetPointer packet2 = &packets[PACKET2]; unsigned int readRegs[1]; unsigned int writeRegs[5]; //SAVE BLACK WHITE COLOR SETTING #include <EEPROMex.h> int CalValueInput[6]; int CalValueOutput[6]; int CalBR = 0; int CalBG = 0; int CalBB = 0; int CalWR = 0; int CalWG = 0; int CalWB = 0; //COLOR SENSOR #include <MD_TCS230.h> #include <FreqCount.h> //Pin definitions //OUT Pin 5 #define S2 6 #define S3 7 MD_TCS230 ColorSensor(S2, S3); word OrderInc=0; bool Calibrate=true; void setup(){ EEPROM.readBlock(0, CalValueOutput,6); CalValueInput[0] = CalBR = CalValueOutput[0]; CalValueInput[1] = CalBG = CalValueOutput[1]; CalValueInput[2] = CalBB = CalValueOutput[2]; CalValueInput[3] = CalWR = CalValueOutput[3]; CalValueInput[4] = CalWG = CalValueOutput[4]; CalValueInput[5] = CalWB = CalValueOutput[5]; ColorSensor.begin(); modbus_construct(packet1, slaveAddr, READ_HOLDING_REGISTERS, 0, 1, readRegs); modbus_construct(packet2, slaveAddr, PRESET_MULTIPLE_REGISTERS, 1, 5, writeRegs); modbus_configure(&Serial, baud, SERIAL_8E1, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS); ColorSensor.read(); } void loop(){ modbus_update(); word check = (word)readRegs[0];//in PLC VW800 if (ColorSensor.available()) { OrderInc++; if(OrderInc>=32760)OrderInc=10; writeRegs[0]=(word)OrderInc;//in PLC VW802 sensorData sd; colorData rgb; if(OrderInc==1 && CalBR>0 && CalBG>0 && CalBB>0)check=3; if(OrderInc==2 && CalWR>0 && CalWG>0 && CalWB>0)check=4; switch(check) { case 0:// Read RGB Color ColorSensor.getRGB(&rgb); writeRegs[1]= (word)rgb.value[TCS230_RGB_R];//in PLC VW804 writeRegs[2]= (word)rgb.value[TCS230_RGB_G];//in PLC VW806 writeRegs[3]= (word)rgb.value[TCS230_RGB_B];//in PLC VW808 writeRegs[4]=(word)0;//in PLC VW810 Calibrate=true; break; case 1:// Calibrate Black from Black Card if(Calibrate){ ColorSensor.getRaw(&sd); ColorSensor.setDarkCal(&sd); CalValueInput[0] = CalBR = (int)sd.value[TCS230_RGB_R]; CalValueInput[1] = CalBG = (int)sd.value[TCS230_RGB_G]; CalValueInput[2] = CalBB = (int)sd.value[TCS230_RGB_B]; if(CalBR>0 && CalBG>0 && CalBB>0){ EEPROM.writeBlock(0, CalValueInput,6); writeRegs[4]=(word)1;//in PLC VW810 Calibrate=false; }else{ writeRegs[4]=(word)255;//in PLC VW810=255 for Error } } break; case 2:// Calibrate White from White Card if(Calibrate){ ColorSensor.getRaw(&sd); ColorSensor.setWhiteCal(&sd); CalValueInput[3] = CalWR = (int)sd.value[TCS230_RGB_R]; CalValueInput[4] = CalWG = (int)sd.value[TCS230_RGB_G]; CalValueInput[5] = CalWB = (int)sd.value[TCS230_RGB_B]; if(CalWR>0 && CalWG>0 && CalWB>0){ EEPROM.writeBlock(0, CalValueInput,6); writeRegs[4]=(word)2;//in PLC VW810 Calibrate=false; }else{ writeRegs[4]=(word)255;//in PLC VW810=255 for Error } } break; case 3:// Calibrate Black from EEPROM DATA sd.value[TCS230_RGB_R]=CalBR; sd.value[TCS230_RGB_G]=CalBG; sd.value[TCS230_RGB_B]=CalBB; ColorSensor.setDarkCal(&sd); writeRegs[4]=(word)3;//in PLC VW810 break; case 4:// Calibrate White from EEPROM DATA sd.value[TCS230_RGB_R]=CalWR; sd.value[TCS230_RGB_G]=CalWG; sd.value[TCS230_RGB_B]=CalWB; ColorSensor.setWhiteCal(&sd); writeRegs[4]=(word)4;//in PLC VW810 break; default:// Read RGB Color ColorSensor.getRGB(&rgb); writeRegs[1]= (word)rgb.value[TCS230_RGB_R];//in PLC VW804 writeRegs[2]= (word)rgb.value[TCS230_RGB_G];//in PLC VW806 writeRegs[3]= (word)rgb.value[TCS230_RGB_B];//in PLC VW808 writeRegs[4]=(word)0;//in PLC VW810 Calibrate=true; break; } } }