Upload the Arduino code
Open Arduino IDE and upload the following code:
#include
// ---------------- SENSOR PINS ----------------
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
// ---------------- SERVO ----------------
Servo myServo;
#define servoPin 9
// ---------------- VARIABLES ----------------
int redFreq, greenFreq, blueFreq;
int r, g, b;
// ---------------- SETUP ----------------
void setup() {
// Sensor pins
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Frequency scaling (20%)
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
// Servo setup
myServo.attach(servoPin);
myServo.write(90); // middle position
// Serial monitor
Serial.begin(9600);
}
// ---------------- LOOP ----------------
void loop() {
// -------- RED --------
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
redFreq = pulseIn(sensorOut, LOW);
// -------- GREEN --------
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
greenFreq = pulseIn(sensorOut, LOW);
// -------- BLUE --------
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
blueFreq = pulseIn(sensorOut, LOW);
// -------- SIMPLE MAP --------
r = map(redFreq, 1000, 200, 0, 255);
g = map(greenFreq, 1000, 200, 0, 255);
b = map(blueFreq, 1000, 200, 0, 255);
// Print values
Serial.print("R: "); Serial.print(r);
Serial.print(" G: "); Serial.print(g);
Serial.print(" B: "); Serial.println(b);
// -------- COLOR CHECK --------
// BLACK (no light)
if (r < 40 && g < 40 && b < 40) {
myServo.write(160); // black position
}
// WHITE (all high)
else if (r > 200 && g > 200 && b > 200) {
myServo.write(140); // white position
}
// RED
else if (r > g && r > b) {
myServo.write(20); // red position
}
// GREEN
else if (g > r && g > b) {
myServo.write(60); // green position
}
// BLUE
else if (b > r && b > g) {
myServo.write(100); // blue position
}
// default
else {
myServo.write(90);
}
delay(500);
}