CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Самодельный датчик цвета

Самодельный датчик цвета
Идея состоит в использовании цветных светодиодов для поочерёдного освещения объекта, при этом считывается уровень напряжения на фоторезисторе и выбирается наилучшый отклик.

схема:
Схема подключения самодельного датчика цвета к Arduino
Для объединения светодиодов и фотодиода в один удобный модуль можно использовать либо термоклей, либо поликапролактон ;)

код скетча для Arduino:
//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<rawData[i])
      { 
          maximum = rawData[i];
          decision = i+1;
      }
    }
         
    Serial.println("");
    
    if(decision == 0)
    {
       Serial.println("No object detected.");
       allOn();
       delay(1000);
       allOff();
    }
    else if(decision == 1)
    {
       Serial.println("I think its green.");
       pulse(g);
    }
    else if(decision == 2)
    {
       Serial.println("Looks red to me.");
       pulse(r);
    } 
    else if(decision == 3)
    {
       Serial.println("Blue for sure!");
       pulse(b);
    }
    else if(decision == 4)
    {
       Serial.println("Booring old yellow.");
       pulse(y);
    }
    Serial.println("");

}

видео с описанием и примером работы датчика:


кстати, ведь совсем необязательно использовать 4 цветных светодиода, а можно ограничиться одним RGB-светодиодом ;)

Далее: Датчик цвета из RGB-светодиода и фотоэлемента — реальная фотошоповская пипетка

Ссылки:
источник — $2 Color Detection Sensor
COLOR SENSORS TUTORIAL
Cadmium-Sulfide Color Sensor
Color sensor
  • +2
  • 18 декабря 2010, 08:55
  • admin

Комментарии (2)

RSS свернуть / развернуть
+
0
какая модель фоторезистора используется?
avatar

Polina

  • 21 апреля 2016, 22:34
+
0
например такой
avatar

admin

  • 22 апреля 2016, 12:36

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.