A few months ago, I saw an instructable by fjordcarver on how to build a coloursensor with an RGB led and an LDR. It inspired me to try whether I could improve his design.

Here are the things that I wanted:
  1. The sensor should have as few pins as possible.
  2. It should work as a stand-alone device. All calculations should be done on the device.
  3. It should have a triggered mode and a continuous mode.
  4. All parameters should be programmable.
  5. Calibration parameters should be stored in the EEPROM of the microcontroller.
  6. Firmware updates should be made possible
  7. And finally: size does matter ⇒ The smaller the better.

I did choose an smd attiny85 as the brain of the sensor. It has a small footprint but a large enough flash for the calculations. It also has just enough pins for the project (all eight pins are used).

One of the problems of the attiny is that it doesn't have a build in bootloader sector. So I needed to find a bootloader that would work on it. I tried a few and most didn't work for me, until I stumbled on the tinyloader bootloader. It's fast and only 256 bytes long and it did the trick. It also allowed me to make a sensor with only 4 pins : Vcc, GND, TX and RX.

I made my sensor with smd parts but you can ofcourse make yours with thru-hole parts

Step 1: How Does It Work?

Colour is nothing more than different wavelengths of light that are reflected by objects. Each material will reflect a different combination of wavelengths, resulting in different colours.
With our led we send 3 different wavelenghts to a surface (aka red, green and blue). The LDR measures how much of each wavelength is reflected and sets its resistance accordingly. The LDR is set up with a 10K resistor as a voltage divider. The resulting voltage for each wavelength is read by the ADC of the microcontroller and the results are 3 bytes, one for each colour.
These 3 bytes can then be used to reconstruct the colour.
<p>Hey,</p><p>It would be a lot of help if you can upload a video of the same.</p>
<p>Hey dude, thats really cool.</p><p>Could you output the .brd as a dxf file?</p>
I'll try...
<p>What might be easier is if you export the brd as an image using EAGLE or other schematic software. Then <a href="https://www.instructables.com/member/evildoctorbluetooth" rel="nofollow">evildoctorbluetooth</a> can convert the image to their preferred format. If they want DXF, import the image in Adobe Inkscape, then Save As... DXF in the list of available formats.</p><p>Great work on this project by the way! :) i love attinys.</p>
<p>this is very helpful. i want a sensor that can sense various colors of fabrics and their shades. would i be needing color recognition detector/sensor OR a microspectrometer ?</p><p>how far do i have to keep the object in order to sense it correctly.?<br>please help me with this, i have been searching for the same from a while. this is not my area of expertise.</p>
<p>To make this work with moving objects, it should be possible to use a photo transistor and take the red sample, green sample and blue sample at very high speed. LEDs and photo transistors are very fast and the attiny is capable of taking 15 thousand ADC samples per second.(see datasheet page 122)</p>
<p>nice project....I am doing a color sorting application to sort the colored plastic pumps that holds the cotton thread in textile mills....i have attached the sample image of the colored plastic tubes that i want to separate......will this component be helpful for such application?? </p><p></p>
<p>It depends. This methode is good to detect the colors of static objects but not of moving objects as the sensor needs a while to detect the color. Also it works best in an area without a lot of ambient light. If there is ambient light, it needs to be at a relatively constant level. But I imagine that those pumps come only in a few colors so it might be doable to work with large detectionmargins.</p><p>This device is not as accurate as commercial ic's. Those start to get cheaper these so maybe that is also something you should look at.</p>
If you want build it on one-sided board, here is download (zip w/ eagle print) <br>Please read README <br>link to download (mediafire) http://bit.ly/IDpb7s
but to have more name, we can build this same project but without ICs. You will need three LDRs and put one colored film(red on one, green on another, and blue for the third one) so, we can sense red, green and blue colors separately. Connect those pins to the respective leds. You have made your own color sensor without an IC!
Good thinking. But you still would need an IC to proces the data. Using the resistance of the LDRs to mix the colors of an RGB led directly isn't a good practise and wouldn't probably give good results.
how'bout working on it?
You can work on it if you like. I have far to many pojects for the moment to pick this one up myself.
nice.. i'm doing a similar project on colour sensor.. just checking.. can this project detects different shades of RGB?
It has build in detection of shades but it is of course not as good in it as commercial dedicated sensors. If you work with arduino, then look up the code in Fjordcarvers project. The link is in this instructable.
alright thanks.. sadly im not allowed to use arduino due to some technical reasons.. but I will take note of this project and see how I can implement it in my project..
Can't help by notice, did you use rivets for via hole? nice !
These are special rivets for vias. They come in various sizes from very tiny to sizes where you still can fit a component thru them. Very handy stuff for prototyping.
You surely can use some other microcontrollers or an arduino.
Great instructable, but sadly we don't have attiny in the market here in Egypt any other recommended micro that can replace it?
Nice Instructable!! I haven't been on in a while, good work, it looks great.
We would like to see a video!!And where did you get those small RGB LED's
I bought them at Leds-buy.nl
kreeg ik eerder al een handig adresje van jou van de smdshop, Leds-buy is ook verdomd handig om te hebben. <br>Vraagje, hoe programmeer jij practisch je smd microcontrollers? met een dil kan ik hem in een voetje steken en later weer in de desbtrefefnde schakeling maar met SMD gaat dat wat lastig. Enige tips? <br>Ik wil, als is het maar om het weer eens een keer te proberen, een smd versie van een attiny85 schakeling proberen.
(facepalm) ik had even verder noeten lezen, dan was al veel duidelijk geworden. Bedankt voor je antwoord
Ik gebruik 3 verschillende methodes afhankelijk van het project: <br> <br>Als het een project is waar genoeg ruimte is op de print, voorzie ik gewoon programeerpinnen zodat ik een programmer op de print kan aansluiten. Dit werkt gemakkelijk en je kan altijd nog herprogrammeren indien nodig. <br> <br>Ik heb ook een aantal converters van smd naar dil daanmee kan je je smd microcontroller gewoon inpluggen in je breadboard en daar programmeren en testen. Nadeel is wel dat als de controller eenmaal gesoldeerd is, hij niet meer te programmeren valt. <br> <br>Een derde methode is met een bootloader zoals beschreven in deze instructable. Ik gebruik het voetje om een bootloader in de controller te programmeren en daarna heb ik maar 2 pinnen nodig op mijn printje om te kunnen programmeren. Dit is handig op extreem kleine printjes en het zorgt er ook voor dat je de reset-pin kan gebruiken voor andere doeleinden. Nadelen zijn dat de bootloader plaats inneemt (hoewel dat op een attiny85 geen probleem mag zijn) en dat je, doordat je de reset-pin afsluit, een high voltage programmer nodig hebt wil je later een andere bootloader ofzo inlezen. <br> <br>smd8 naar dil8 voetjes zijn voor minder dan 10 euro te koop op ebay en meestal nog gratis verzonden.
OK bedankt. Ik kan hem gewoon in en uit dat voetje halen en als hij geprogrammeerd is in een schakeling solderen.<br>Als ik daar dan ook de SPI pinen in heb, is hij ook in die schakeling weer te progarmmeren neem ik aan :-)<br><br>Bootloader voor de 85, ja, misschien moet ik dat ook eens proberen. Gaat mij erom dat ik een heel klein schakelingetje kan maken. Nou is het met DIL ook wel klein te maken, maar wilde na 35 jaar weer eens smd proberen. Bovendien hebben ze bij smdshop leuke componenten. Enige wat ik er niet kon vinden was een 5V regulator die meer dan 100-150 mA kan leveren<br>Nogmaals bedankt
Cool design, I guess you are SMD soldering by hand!? It's nice to do SMD boards with all the SMD mounts on one side so that you can do hot plate reflow. You can still use the back face for ground plane or more complicated routing, so most simple designs can be refactored to work this way. <br><br>Thanks for info on bootloaders too.
I solder by hand with solderpaste and a hot air solderingstation. I decided to have parts on both side to save space.
I have some experience working with this idea as I am building a rubicks cube solver using an arduino micro and two of similar color sensors to detect edge face colors. One thing that I've noticed is that ambient light makes a huge difference on the result and even &quot;blanking&quot; the photoresistor with the LED off before sampling with the LED on doesn't help. I've sort of put that project on the back burner but I'm hoping there's a way to filter out this noise in software, OR a parallax barrier type of shield on top of the photoresistor to block external light.<br><br>How much have you experimented with different casings for the color sensor?
Ambient light is indeed the sensors biggest enemy. I mainly used a black case for it.
What I've done is wrapped black electrical tape all around the sensor and LED in like a tunnel that presses almost up the to cube's face. SO even with that setup the noise is significant.
Did you think already that can be useful for people who are blind, if the identification is made by sound types ?<br><br>
That's a very interesting thought indeed.
Very nice project. Again!
I have often wondered about this idea for color recognition. What kind of range is possible? If you use a lens can you extend that range? I'm so new to Arduino programming that I don't think I can contribute to your code, but that doesn't mean I don't LOVE it!! I have seen it done in gas chromo devices that spin a colored filter wheel in front of a calibrated filament, sort of a reverse version of yours. Perhaps a position indicator on the wheel to coordinate the timing? Can those LEDS be read as sensors instead? They will respond to light with a charge. Do they respond to their colors? That would allow you to skip the LDR.
It is indeed a rather crude sensor. It is capable to recognize a basic set of colours so don't expect it to sense every shade possible. I was intrigued by the original version of Fjordcarver but also a bit sceptical. But when I build it and tried it, it workt pretty good.

About This Instructable




Bio: I'm mainly interested in music, food and electronics but I like to read and learn about a lot more than that.
More by janw:Pickled Chillies Extra hot sriracha sauce (Mme Jeanette) Build a Nest Box for Bumblebees 
Add instructable to: