Идея состоит в использовании цветных светодиодов для поочерёдного освещения объекта, при этом считывается уровень напряжения на фоторезисторе и выбирается наилучшый отклик.
схема:
Для объединения светодиодов и фотодиода в один удобный модуль можно использовать либо термоклей, либо поликапролактон 😉
//Pins int photoResistor = 0; int b = 2; int r = 3; int g = 4; int y = 5; //Calibration // AKA Terrible software solution to a hardware problem.... double bAdj = 1.0; double rAdj = 1.02; double gAdj = 1.0; double yAdj = 1.17; double ambientAdj = 1.0; void setup() { pinMode(g, OUTPUT); pinMode(y, OUTPUT); pinMode(b, OUTPUT); pinMode(r, OUTPUT); pinMode(photoResistor, OUTPUT); Serial.begin(9600); } void loop() { allOff(); delay(100); asses(100,100); } void allOff() { digitalWrite(g, LOW); digitalWrite(y, LOW); digitalWrite(r, LOW); digitalWrite(b, LOW); } void allOn() { digitalWrite(g, HIGH); digitalWrite(y, HIGH); digitalWrite(r, HIGH); digitalWrite(b, HIGH); } void pulse(int colour) { for(int i=0;i<3;i++) { digitalWrite(colour, HIGH); delay(100); digitalWrite(colour, LOW); delay(100); } } void asses(int colldownTime, int saturationTime) { delay(500); double ambient = analogRead(photoResistor); Serial.print("Ambient: "); Serial.println(ambient*ambientAdj); digitalWrite(g, HIGH); delay(saturationTime); double green = analogRead(photoResistor); Serial.print("Green: "); Serial.println(green*gAdj); digitalWrite(g, LOW); delay(colldownTime); digitalWrite(r, HIGH); delay(saturationTime); double red = analogRead(photoResistor); Serial.print("Red: "); Serial.println(red*rAdj); digitalWrite(r, LOW); delay(colldownTime); digitalWrite(b, HIGH); delay(saturationTime); double blue = analogRead(photoResistor); Serial.print("Blue: "); Serial.println(blue*bAdj); digitalWrite(b, LOW); delay(colldownTime); digitalWrite(y, HIGH); delay(saturationTime); double yellow = analogRead(photoResistor); Serial.print("Yellow: "); Serial.println(yellow*yAdj); digitalWrite(y, LOW); delay(colldownTime); double rawData[] = {(green*gAdj), (red*rAdj), (blue*bAdj), (yellow*yAdj)}; double maximum = ambient*ambientAdj; int decision; for (int i=0; i<4; i++) { if (maximumвидео с описанием и примером работы датчика:
кстати, ведь совсем необязательно использовать 4 цветных светодиода, а можно ограничиться одним RGB-светодиодом 😉
Далее: Датчик цвета из RGB-светодиода и фотоэлемента - реальная фотошоповская пипетка
Ссылки
источник - $2 Color Detection Sensor
COLOR SENSORS TUTORIAL
Cadmium-Sulfide Color Sensor
Color sensor
0 комментариев на «“Самодельный датчик цвета”»
какая модель фоторезистора используется?
напримертакой