Skip to main content

45. Arduino based Colour detection machine

Hey everyone!

Today I will be teaching you about making an Arduino based Colour detection machine. This colour detection machine will display you the colour of the sheet placed within the gap in the box, and the servo motor will point towards that coloured part in the sheet above the box.

Items used in this project

Hardware components

  • Arduino Uno
  • USB Type A/ B cable (for Arduino Uno)
  • Solderless Breadboard Power rail - Mini
  • TCS230/ TCS3200 colour sensor
  • 16 x 2 LCD display module with I2C interface
  • Micro servo motor SG-90
  • Male-to-Male jumper wires (x5) - 10cm
  • Female-to-Male jumper wires (x12) - 20cm

Other components

  • Cardboard box/ 3D printed casing
  • Some coloured papers - five different colours
  • Scissors

Setup



Your setup must look similar to those in the photos above.

Connections

TCS230/ TCS3200 colour sensor

  • S0 - 4
  • S1 - 5
  • OE - GND (Ground)
  • GND - Ground
  • VCC - 5V
  • OUT - 8
  • S2 - 6
  • S3 - 7

Servo motor SG-90

  • S - D9
  • (+) - 5V
  • ( - ) - Ground

16 x 2 LCD display

  • GND - Ground
  • VCC - 5V
  • SDA - A4
  • SCL - A5

Coding

Before starting this project, it is best to refer to the TCS230/ TCS3200 colour sensor datasheet. You will need the Arduino LiquidCrystal I2C library and Wire library for this project. You can download the .ZIP version of this library from GitHub by following the hyperlink. The Wire library is a built-in library. 
To add this .ZIP folder to your Arduino IDE, go to sketch----> include library---->Add .ZIP library. 
You will also need to include the 'Servo' library by Michael Margolis in your sketch. If you are new to this library, and need reference to the functions, please feel free to follow the hyperlink in this section.
Create a servo object to control your servo motor. Define each pins belonging to the colour sensor. Set the LCD address for a 16 chars and 2 line display. You can find the LCD address by using the I2C scanner. Create global variables named 'red', 'blue', 'green' and 'pos'. 
Within void setup( ), use attach( ) function to attach the servo variable to D9. Initialize the LCD and use pinMode( ) to declare whether each pins are INPUT or OUTPUT. S0, S1, S2, and S3 are OUTPUT while the OUT pin of the colour sensor is INPUT. The output frequency scaling of the colour sensor will be 100%, so according to the datasheet, S0 and S1 must be set HIGH. Set the data rate as 9600 bauds for serial data transmission. Use write( ) function to set the position of your servo motor as 0.
Within void loop( ), set cursor and print according to the following:
  • (0,0) - "Colour= "
  • (0, 1) - "R= "
  • (6, 1) - "G= "
  • (12, 1) - "B= "
According to the datasheet, measure the frequencies of red, green and blue by following this:
  • Red - S2 LOW and S3 LOW
  • Blue - S2 LOW and S3 HIGH
  • Clear (No filter) - S2 HIGH and S3 LOW
  • Green - S2 HIGH and S3 HIGH
Use digitalWrite( ) function to set S2 and S3 to either HIGH or LOW, and use pulseIn( ) function to measure the frequencies of all three colours. The parameters should be the OUT pin and LOW. You should use print( ) function with 'Serial' as the syntax to print the frequencies on your Serial Monitor. 
Place each colour sheet beneath the colour sensor and record the frequencies of each colour (red, green and blue). Using if( ) and else if( ) functions, use the recorded frequencies as the parameters. According to my sheet pasted on the top of the box, the servo motor must move:
  • Light blue - 18°
  • Yellow - 54°
  • Blue - 90°
  • Green - 126°
  • Red - 162°
  • None - 0°




Please watch the YouTube video posted at the last section of this post to learn how this project works.
If anyone has any questions with the codes, please feel free to comment below or send me an email at arduinoprojectsbyr@gmail.com.

Final Look

If anyone has any questions, or suggestions, about this project, please feel free to comment below or send me an email at arduinoprojectsbyr@gmail.com.


You may also be interested in my Colour sorting Game with Talking Arduino:
https://arduinoprojectsbyr.blogspot.com/2020/03/64-colour-sorting-game-with-talking.html

Comments

Popular posts from this blog

77. Controlling Micro servo Robotic Arm with MPU-6050 sensor module

 Hey everyone! I am back with an interesting project. Today, you will be learning about controlling a Simple 2 axis Robotic Arm, made from Micro servo motors, with an MPU-6050 sensor module. Please feel free to visit my previous blog post to learn about the MPU-6050 sensor module. Hardware components used in this project Arduino Mega 2560 - You could use any other Arduino microcontroller, but make sure you use an external power supply. USB Type A/B cable (for Arduino Mega 2560) MPU-6050 sensor module SG-90 Tower Pro Micro Servo motor (x2) Male-to-Male Jumper wires (x6) Male-to-Female Jumper wires (x5) Setup Schematic MPU-6050 sensor module VCC - 3.3V GND - Ground SDA - D20 (Arduino Mega 2560), A4 (Arduino Uno and Nano) SCL - D21 (Arduino Mega 2560), A5 (Arduino Uno and Nano) INT - D2 Micro servo motor (Roll) S (Yellow/ Orange) - D9 + (Red) - 5V - (Black/ Brown) - GND  Micro servo motor (Pitch) S (Yellow/ Orange) - D10 + (Red) - 5V - (Black/ Brown) - GND Coding As I alread...

57. Using Blynk with Arduino Uno and ESP8266 WiFi module

Hello Everyone! Today I am going to explain you how to connect your Arduino Uno with Blynk using the ESP8266 WiFi module. I have already demonstrated you about connecting your Arduino Uno with Blynk app using the Ethernet Shield W5100 and this will be the second version of that project .  Hardware components used in this project Arduino Uno ESP-01 ESP8266 WiFi module USB to TTL converter Solderless Breadboard - Half+ Breadboard power supply module - 3.3V/ 5V RGB LEDs (x3) - Common Anode Resistors (x3) - 220 Ω Relay module - 5V single channel Male-to-Male Jumper wires Female-to-Male Jumper wires Setup Your setup must look somewhat similar to that shown in the images above. Connections ESP8266 ESP-01 wifi module GND - Ground GPIO0- Not connected GPIO2 - Not connected RXD - D2 TXD - D3 CH_PD - VCC - 3.3V RESET - Not connected VCC - 3.3V  *Note: Do not connect your ESP8266 ESP-01 wifi module with 5V. RGB LED - Common Anode Anode -...

73. Limit the crowd to prevent the spread of COVID-19

Hey everyone! Today I am going to explain you about another interesting COVID-19 Arduino project. This is an automatic, effective and cheap method to limit the crowd in public places - such as shopping malls, supermarkets, offices, etc. - and public transport vehicles, such as buses and trains. The World Health Organization, WHO, has advised people to stay away from crowded places to protect themselves from the spread of Coronavirus disease. Even though people practice social distancing, it may not be effective when they are present in crowded places. I came up with this idea after I read the WHO guidelines about preventing the spread of COVID-19. Aim/ Objective This project is an automatic, cheap and effective way of limiting the crowd in public places and vehicles. Using a human to limit the number of people in a particular place would not be as effective as using an automatic system, due to lack of staff members in some areas. This prototype can be used in real-life situations by ...