Din egen färgsensor med hjälp av lysdioder (6 / 8 steg)
Steg 6: Testa och kalibrera färgsensor
Nu här kommer den kod, som analyserar och kalibrerar varje färg enligt de värden som reflekteras tillbaka.
/ * Sensor färgkod av - electro18
hitta mer detaljer om projektet på:
Den här koden är öppen källkod och är skapad av
Det visar hur du använder lysdioder och LDRs som en färgsensor
Så här:
Placera en vit skärm framför sensorn
Power upp arduino
Låt det kalibrera ett tag
När det är kalibrerad, blinkar färgerna RGB med jämna mellanrum
Den procentuella sammansättningen av viss färg kommer att visas på den seriella monitorn
Öppna den seriella monitorn för felsökning ang kontrollera värdena
*/
int sensor, minVal, Val [3], colArray [3] = {9,10,11}, totalt;
float procent [3].
int i, readRGB [3], readMax [3], Domin; DEKLARERA VARIABLER
lång calibtime, prevtime; REGISTRERA TID SOM FÖRFLUTIT
void setup()
{
Serial.BEGIN(9600);
för (jag = 0; jag < 3; i ++)
{
pinMode(colArray[i],OUTPUT); ANGE UTGÅNGSSTIFT
}
Calibrate(); KÖR FUNKTIONEN KALIBRERA
}
void loop()
{
Total = 0;
för (jag = 0; jag < 3; i ++) / / kolla värden i en LOOP
{
prevtime = millis();
medan (millis ()-prevtime < 1000) / / undvika dröjsmål
{
analogWrite(colArray[i],Val[i]); SKRIVA DE KALIBRERADE VÄRDENA
readRGB [i] = 1024 - analogRead(0);
Delay(50);
}
digitalWrite(colArray[i],0);
prevtime = millis(); ÅTERSTÄLLNINGSTIDEN
totalt = totalt + readRGB [i];
}
för (jag = 0; jag < 3; i ++)
{
Procent [i] = readRGB [i] * 100,0 / totalt; SKRIVA UT I FORM AV ANDEL
Serial.Print(percent[i]);
Serial.Print ("%");
}
Serial.println("");
Delay(1000);
}
/////////////////////////////////##############################################################################################////////////
void calibrate() / / kalibrera funktion
{
för (jag = 0; jag < 3; i ++)
{
medan (millis ()-calibtime < 1000) / / FLASH varje färg på MAX för 1 SEK
{
analogWrite(colArray[i],255);
readMax [i] = 1024-analogRead(0); MAX-VÄRDEN
}
analogWrite(colArray[i],0);
Serial.println(readMax[i]);
Delay(10);
calibtime = millis();
}
om (readMax [0] < readMax [1] & & readMax [0] < readMax[2]) / / få MINIMUM värde från matrisen
minVal = readMax [0];
annat
{
om (readMax [1] < readMax [0] & & readMax [1] < readMax[2])
minVal = readMax [1].
annat
minVal = readMax [2].
}
för (jag = 0; jag < 3; i ++)
{
analogWrite(colArray[i],10);
sensor = 1024 - analogRead(0); START KALIBRERING
Delay(100);
medan (sensor - minVal < = -1 || sensor - minVal > = 1) / / få skillnaden mellan nuvarande värde och TRÖSKEL
{
sensor = 1024 - analogRead(0);
om (sensor > minVal) / / öka eller minska värdet för att utjämna ljusstyrkan
Val [i]--;
annat
Val [i] ++;
Serial.Print(1024-analogRead(0));
Serial.Print("");
Serial.println(minVal);
Delay(50);
Val [i] = constrain(Val[i],0,255); BEGRÄNSA DET VÄRDE/V 0--255
analogWrite(colArray[i],Val[i]);
}
analogWrite(colArray[i],0);
Delay(50);
}
}
Arbetar i koden:
SÅ HÄR:
1. Placera ett vitt icke-glänsande föremål framför sensorn
2. power-up din arduino
3. sensorn kommer att starta auto-kalibrering ordning
4. det blinkar alla tre färger först, då det kommer att utjämna alla färger
5. kalibreringen är klar när det börjar att cykla RGB sekvens
6. placera objekt vars färger du vill analysera
7. Öppna seriell bildskärmen för att få värdena i % format
Förklaring:
I princip blinkar sensorn varje färg och poster max värden när ett vitt föremål placeras framför den.
Det konstaterar ljuset som reflekterar tillbaka och jämför alla värden.
Minsta värdet anges som gräns och sedan försöker utjämna alla färger (R, G, B)
Efter kalibrering har gjorts, startar programmet den loop som kontrollerar färgen. Det gör jobbet genom att läsa färgerna som reflekteras från ytan och sedan konvertera dessa värden i en systematisk form.
Mängden färg återspeglade berättar procentandelen av varje färg i en viss färg.