كيف تصنع آلة فرز الألوان باستخدام Arduino؟ | مشروع Color Sorting Machine

في الحلقة السابعة من سلسلة Arduino من الصفر سنصنع آلة لفرز الألوان باستخدام لوحة Arduino ومستشعر الألوان ومحرك خطوي ومحرك Servo. سنتعرف على بناء الهيكل وتوصيل المكونات وقراءة الألوان ثم توجيه حبات الحلوى إلى المسار المناسب.

فيديو المشروع

شاهدوا الشرح العملي الكامل في الفيديو رقم 7 من سلسلة Arduino من الصفر على قناة Naadi Tech – نادي الابتكار.

فكرة المشروع

تعمل الآلة في ثلاث مراحل: يحرك المحرك الخطوي القرص حتى تصل الحبة إلى منطقة القياس، ثم يقرأ مستشعر الألوان لونها، وبعد ذلك يتحرك محرك Servo لتوجيه الحبة نحو المخرج المخصص للون المكتشف.

في النموذج المستخدم في الفيديو يتم فرز ثلاثة ألوان: الأحمر والأزرق والبني. ويمكن إضافة ألوان أخرى بعد معايرة المستشعر وتحديد الحدود المناسبة.

المكونات المطلوبة

  • لوحة Arduino
  • درع L293D Motor Shield
  • محرك خطوي Stepper Motor
  • محرك Servo
  • مستشعر ألوان
  • أقراص CD لبناء الهيكل
  • ورق مقوى وكرتون
  • براغي وصواميل
  • أسلاك توصيل

ملاحظة: قد تختلف أسماء المنافذ وترتيبها حسب إصدار مستشعر الألوان ودرع L293D المستخدم. تحقق من الكتابة المطبوعة على الوحدات قبل التوصيل.

بناء هيكل آلة فرز الألوان

إنشاء قاعدة الآلة

نستخدم قرصين مدمجين كقاعدة للآلة. نحدد أربع نقاط، ثم نصنع الثقوب ونثبت البراغي والصواميل التي ستسمح بتركيب الطبقات المختلفة للهيكل.

تثبيت المحركات

نجهز قرصاً ثالثاً بالثقوب اللازمة لتثبيت المحرك الخطوي ومحرك Servo، ثم نثبته فوق قاعدة الآلة بواسطة البراغي والصواميل.

إنشاء ممر توجيه الحلوى

باستخدام الورق المقوى نصنع ممراً لتوجيه حبات الحلوى. يثبت هذا الجزء على محرك Servo حتى يتمكن من تغيير اتجاه الحبة حسب اللون المكتشف.

قرص حمل الحلوى ومستشعر الألوان

نصنع قرصاً من الكرتون يستقبل حبات الحلوى ونثبته على محور المحرك الخطوي. تم استخدام اللون الأسود في منطقة القياس للمساعدة على توفير خلفية ثابتة. ثم يثبت مستشعر الألوان فوق الموضع الذي تتوقف عنده الحبة.

توصيل المكونات الإلكترونية

بعد الانتهاء من الهيكل نركب درع L293D على لوحة Arduino، ثم نوصل محرك Servo والمحرك الخطوي بالمخارج المناسبة للدرع. ويوصل مستشعر الألوان بالمنافذ المستخدمة في البرنامج.

المكوّنالوظيفة
Arduinoالمتحكم الرئيسي
L293D Motor Shieldالتحكم في المحركات
Stepper Motorتحريك قرص الحلوى
Servo Motorتوجيه الحبة نحو المخرج المناسب
Color Sensorقياس مكونات اللون

كيف يعمل مستشعر الألوان؟

يحتوي المستشعر على عناصر حساسة للضوء مع مرشحات للأحمر والأخضر والأزرق وعناصر دون مرشح. يمكن اختيار مجموعة المرشحات بواسطة المنفذين S2 وS3.

يعطي المنفذ OUT إشارة بتردد مرتبط بشدة الضوء المقاس، بينما يستخدم S0 وS1 لتحديد مقياس تردد الخرج. في الفيديو تم اختيار مقياس 20% المناسب للتجربة مع Arduino.

مهم: قيم الألوان تتأثر بالمسافة والإضاءة والخلفية ونوع المستشعر. لذلك يجب معايرة الآلة الفعلية قبل اعتماد حدود التعرف على الألوان.

منطق عمل البرنامج

  1. تحريك الحبة: يدور المحرك الخطوي لنقل الحبة إلى منطقة القياس.
  2. قراءة اللون: يقيس المستشعر قيم الأحمر والأخضر والأزرق.
  3. الفرز: يحدد البرنامج اللون ثم يحرك Servo إلى الوضع المناسب.

الكود الكامل للمشروع

#include <AccelStepper.h>
#include <AFMotor.h>
#include <Servo.h> 

// DC  servo
Servo servo1;

//  stepper motor
AF_Stepper motor1(2040, 1);

// color sensor pins
#define S0 19
#define S1 18
#define S3 17
#define S2 16
#define sensorOut 15

int frequency = 0;
int color=0;

// you can change these to DOUBLE or INTERLEAVE or MICROSTEP!
// wrappers for the first motor!
void forwardstep1() {  
  motor1.onestep(FORWARD, SINGLE);
}
void backwardstep1() {  
  motor1.onestep(BACKWARD, SINGLE);
}
// Accel Stepper motor 
AccelStepper stepper(forwardstep1, backwardstep1);

int i;
int pos;

int rotation ;

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps

  // Attach servo to servo2 on shield
  servo1.attach(9);
  
  pos=0;
  rotation = 510;
  
  // Stepper Speed
  stepper.setMaxSpeed(200.0);
  stepper.setAcceleration(100.0);  

  // Pins directions
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);

  // Sensor Setup
  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);
}


void loop() {

  // Set the current position to 0:
  stepper.setCurrentPosition(0);
  
  // 1- Run the motor forward at 500 steps/second until the motor reaches 510 steps (1/4 revolution):
  while (stepper.currentPosition() != rotation ) {
    stepper.setSpeed(500);
    stepper.runSpeed();
  }
  delay(1000);

  // 2- detect color
  color = detectColor();
  delay(1000);
  
  // 3- move servo motor to the appropriate position
 
  switch (color) {
    case 1:
    servo1.write(45);
    break;
    case 2:
    servo1.write(0);
    break;
    case 3:
    servo1.write(90);
    break;
    case 0:
    break;
  }
  delay(500);   
 
}


int detectColor() {
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);
  frequency = pulseIn(sensorOut, LOW);    // Reading the output frequency
  int R = frequency;
  Serial.print("Red = ");
  Serial.print(frequency);//printing RED color frequency
  Serial.print("   ");
  delay(50);

  digitalWrite(S2, LOW);
  digitalWrite(S3, HIGH);
  frequency = pulseIn(sensorOut, LOW);   // Reading the output frequency
  int B = frequency;
  Serial.print("Blue = ");
  Serial.print(frequency);
  Serial.println("   ");

  digitalWrite(S2, HIGH);
  digitalWrite(S3, HIGH);
  frequency = pulseIn(sensorOut, LOW);   // Reading the output frequency
  int G = frequency;
  Serial.print("Green = ");
  Serial.print(frequency);
  Serial.print("   ");
  delay(50);

 if(  R  > 160 &  B > 160 & R > 160){
    color = 1; // Brown
    Serial.print("Detected Color is = ");
    Serial.println("Brown");
    return color;
  }
 

  if ( B < R & B < G){
    color = 2; // Blue
     Serial.print("Detected Color is = ");
    Serial.println("BLUE");
    return color;
  }

   if(  R  < B & R < G){
    color = 3; // Red
    Serial.print("Detected Color is = ");
    Serial.println("RED");
    return color;
  }

  
}

  

شرح أهم أجزاء الكود

التحكم في المحرك الخطوي

يحرك المحرك الخطوي القرص على مراحل ثابتة، بحيث تنتقل حبة جديدة إلى الموضع الموجود أسفل مستشعر الألوان قبل بدء القياس.

قراءة قيم الألوان

تغير دالة القراءة حالتي S2 وS3 لاختيار المرشح المطلوب، ثم تقيس الإشارة على OUT. تتكرر العملية للحصول على قيم الأحمر والأخضر والأزرق.

تحديد اللون وتحريك Servo

يقارن البرنامج القيم المقاسة وفق الحدود التي تم تحديدها بالتجربة. بعد معرفة اللون، يعطي Arduino أمراً لمحرك Servo للانتقال إلى الزاوية المقابلة لمسار ذلك اللون.

اختبار آلة فرز الألوان

بعد رفع البرنامج إلى Arduino، ينقل القرص الحبة إلى منطقة القياس، ويكتشف المستشعر لونها، ثم يتحرك Servo إلى الموضع المناسب. تتكرر العملية لفرز الحبات الحمراء والزرقاء والبنية.

مشاكل شائعة وحلولها

المشكلةالحل المقترح
التعرف على اللون غير دقيقأعد المعايرة وثبّت المسافة وقلل تأثير الإضاءة الخارجية.
المحرك الخطوي لا يتحرك بشكل صحيحتحقق من ترتيب الأسلاك وتوافق المحرك مع الدرع وإعدادات البرنامج.
Servo يوجه الحبة إلى المسار الخطأعدّل زوايا Servo وتحقق من التثبيت الميكانيكي للممر.
القراءات تتغير كثيراًاستخدم خلفية ثابتة وثبّت المستشعر وأعد معايرة حدود الألوان.

ماذا تعلمنا؟

  • بناء نموذج ميكانيكي بسيط بمواد متوفرة.
  • التحكم في محرك خطوي باستخدام Arduino وL293D.
  • التحكم في Servo لتوجيه الأجسام.
  • فهم المبدأ الأساسي لمستشعر الألوان.
  • استخدام قيم RGB لتصنيف الألوان.
  • دمج الحساسات والمحركات في مشروع آلي متكامل.

تطوير المشروع

يمكن تطوير الآلة بإضافة ألوان أخرى، وتحسين المعايرة والهيكل، وإضافة شاشة لعرض اللون المكتشف وعدد القطع التي تم فرزها.

الخلاصة

جمعنا في هذا المشروع بين البرمجة والإلكترونيات والميكانيك لصناعة آلة قادرة على اكتشاف لون حبات الحلوى وفرزها آلياً. وهو تطبيق عملي لفهم كيفية اتخاذ Arduino قراراً اعتماداً على بيانات مستشعر ثم التحكم في المحركات لتنفيذ المهمة.

تابعوا باقي حلقات سلسلة Arduino من الصفر على Naadi Tech – نادي الابتكار للمزيد من المشاريع والتطبيقات العملية.

موضوعات ذات صلة