Шановні друзі!
26 та 31 грудня магазин працюватиме до 16 години. 1 та 2 січня магазин працювати не буде.
Вітаємо всіх з Різдвом та Новим Роком!
Мобільна версія Форум Arduino Документація Гарантійні умови 0 0
UA RU
Графік роботи магазину:
Пн-Пт: 8.00 - 19.00
Сб: 10.00 - 17.00
Нд: вихідний
Каталог
Напиши статтю і отримай знижку!

Датчику кольору TCS230 в системі сортування за кольором на Arduino

2020-07-29

Всі статті →

Андрій Назаренко

Колись на виконанні дипломного проекту мені запропонували реалізувати свою ідею на реальному прототипі, сенс даної системи в тому, що вона автоматично сортує предмети на відповідні лінії, як продукцію на підприємстві але за кольором цього предмету.

Ідея

Ідея даного прототипу полягала у тому, щоб відобразити сам процес, що відбувається повністю автоматично. Було штучно додано затримку за часом після певних операцій для наочності. Звісно повністю автоматичну систему на макеті не є можливо зробити, так як у ємність зверху слід додавати нові кульки, але як прототип є непоганим.

Вибір сенсору для розпізнавання кольору

Найбільшу увагу в цій системі було приділено датчику кольору, так як це основний сенсор, мій вибір пав на TCS230 він простий у використанні і як для прототипу, на мою думку, є чудовим і сумісний з платформою Arduino (у
проекті використано Arduino Mega).

Схему датчика і його підключення можна знайти в інтернеті або в даташиті на сенсор. Нижче наведено приклад підключення до Arduino.

  • VCC – 5В
  • GND – GND
  • S0 – пін 5
  • S1 – пін 6
  • S2 – пін 7
  • S3 – пін 8
  • Out – пін 9

Датчик слід розташовувати на малій відстані до об’єкту, у описі датчика зазначено, що оптимальна відстань для коректної роботи повинна становити 10 мм. Якщо є бажання ознайомитися з роботою сенсору, то
можна скористатися даташитом.

Налаштування і програмна реалізація

Була поставлена задача, що сенсор повинен аналізувати три кольори, синій, червоний і зелений. Найбільша проблема при налаштуванні сенсору виникала при перевірці, а саме велика погрішність розпізнавання кольорів, іноді замість зеленого розпізнавався, як синій і тому подібне. Для того щоб налаштувати правильні діапазони необхідно відкрити монітор порту (додати у програмі виведення у порт), швидкість 9600 бод, і після того підносити до датчика по черзі об’єкти, у порті відображатимуться значення, що відповідають певному кольору, а після ці значення записати. Іноді ці значення можуть відрізнятися від необхідних, тому їх слід відредагувати. Нижче наведені мої значення вже кореговані. При використанні інших сенсорів цього типу значення можуть відрізнятися.

redColor = map(redFrequency, 25, 72, 255,0);
greenColor = map(greenFrequency, 30, 90, 255, 0);
blueColor = map(blueFrequency, 25, 70, 255, 0);

Оголошення деректив для датчика кольору TCS230

#define S0 5
#define S1 6
#define S2 7
#define S3 8
#define sensorOut 9

Змінні для збереження частоти і даних при зчитуванні кольору

int redFrequency = 0;
int greenFrequency = 0;
int blueFrequency = 0;
int redColor = 0;
int greenColor = 0;
int blueColor = 0;

Ініціалізація датчика кольору в функції setup

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


Маштабування для датчика кольору 20% в функції setup (для Arduino доцільно використовувати 20%)

digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);

Після ініціалізації датчика у цикл loop необхідно додати наступний код, він відповідає за виконання процесу аналізу і збереження даних кольору.

зчитування з датчика кольору для червоного діапазону

digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
redFrequency = pulseIn(sensorOut, LOW);
redColor = map(redFrequency, 25, 72, 255,0);
_delay_ms(100);

зчитування з датчика кольору для зеленого діпазону

digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
greenFrequency = pulseIn(sensorOut, LOW);
greenColor = map(greenFrequency, 30, 90, 255, 0);
_delay_ms(100);

зчитування з датчика кольору для синього діапазону

digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
blueFrequency = pulseIn(sensorOut, LOW);
blueColor = map(blueFrequency, 25, 70, 255, 0);
_delay_ms(100);


Для використання функції _delay_ms(…); необхідно додати бібліотеку #include <util/delay.h>, але можна використати стандартну delay з набору Arduino IDE.

Наступна частина коду відповідає за дії, які необхідно виконати відповідно при визначенні певного кольору, реалізується у вигляді оператору if і логічних операторів “>” та “&&” .

Якщо виявлено червоний колір

if(redColor > greenColor && redColor > blueColor){

}

Якщо виявлено зелений колір

if(greenColor > redColor && greenColor > blueColor){

}

Якщо виявлено синій колір

if(blueColor > redColor && blueColor > greenColor){

}

Висновки

В результаті прототип працює без нарікань, інші частини системи можливо і доречно було б оптимізувати, але датчик кольору при роботі помилок не видавав. Цей прототип є лише невеликим прикладом для застосування датчика кольору TCS230.

Ваша оцінка статті:

Відмінно
Добре
Задовільно
Погано
Дуже погано

Загальна оцінка:

Оцінка "Датчику кольору TCS230 в системі сортування за кольором на Arduino "
5 з 5
зроблена на основі 1 оцінки 1 клієнтських відгуку.

Дякуємо Вам за звернення! Ваш відгук з'явиться після модерації адміністратором.
Єгор
25.05.2022 17:28:41
а як взнати цифри іньших кольорів???
оплата картами Visa і MasterCard