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

51. Buzz wire game using Arduino

Hello everyone! This is my first Arduino project in 2020 and it is going to be a fun and simple project. You would have heard of the Buzz Wire, a steady hand game, and today you will be learning to make one using Arduino. Hardware components used in this project Arduino Nano USB Type A to mini B cable (for Arduino Nano) Solderless Breadboard - Mini and Full-size LEDs (x2) - Green and Red Resistors (x2) - 220 Ω  Active Buzzer module (KY-012) LCD display module with I2C interface - 16x2 Male-to-Male Jumper wires (x4) - 10cm Female-to-Male Jumper wires (x5) - 20 cm Jumpers (x5) - to reduce the usage of wires Copper wire  Tape (or any form of insulation)  Setup Your hardware setup must look somewhat similar to the ones in the images above. The beginning and end of the copper wire maze must be taped to prevent conductivity between the wire loop and maze. Connections LCD display module with I2C interface GND - Ground VCC - 5V SDA - A4 SCL - A5

71. Buzz Wire Game ( Version 2.0 ) using Arduino

Hey Everyone! I hope that everyone's safe during this pandemic. Today I am going to explain you about the second version of my Buzz wire game. People who are bored of staying indoors can find this game pretty interesting and fun to play.  If you are a beginner, you can start off with my first version of this project :  51. Buzz wire game using Arduino   Hardware components used in this project Arduino Uno Solderless Breadboard (x2) - Full/ Full+ LCD display module with I2C module - 16x2 Potentiometer - B20K Push-buttons (x3) Resistor - 220 Ω Active Buzzer module (KY-012) LED - Red Copper Wire - 19/ 20 gauge thick Male-to-Male Jumper wires - 10cm and 20cm Wire - Long enough to connect the loop of copper wire to ground Other tools required for this project Cutting pliers - To cut the right amount of copper wire Round-nose pliers - To bend the copper wire and make a maze and loop Hardware setup Connections Wire Maze - D2 Wire loop - Ground (GND) B20K Potentiometer S - A0 (+) - 5V (-)

86. RFID Health tag (Arduino and Python)

 Hey everyone, Sorry I have not uploaded in a while. Today, I will be sharing an interesting project with all of you. This RFID Health tag project is useful when it comes to keeping track of vaccinated individuals, their biodata and their health conditions and medications. For this project, you will be needing Arduino and Python. Read on further to see how I did this project. Hardware components used in this project Arduino Uno Solderless Breadboard - Half+ MRFC522 RFID reader RFID key tags (x5) Push-buttons (x2) Male-to-Male Jumper wires (x12) USB Type A/ B cable (for Arduino Uno) Software required Arduino IDE - latest version recommended Python 3.8 Schematic MFRC522 RFID reader SDA/ SS - D10 SCK - D13 MOSI - D11 MISO - D12 IRQ - Not connected GND - Ground RST/ RESET - D9 3.3V - 3.3V Push-buttons Submit button - D4 Retrieve button - D5 Coding Arduino For this project, you will be using the following libraries: MFRC522 by miguelbalboa -  https://github.com/miguelbalboa/rfid SPI - In-bu