Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.03.2016, 09:01   #1
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию TCS3200 датчик цвета, недостатки и рекомендации

Примерно такой: http://duino.ru/Datchik-cveta.html

Пример программы на arduino.cc можно использовать исключительно в ознакомительных целях, поскольку подсчет частоты прерываниями нормально работает только в отсутствии иных прерываний (millis(), delay(), Serial, etc. !), а если учесть что датчик генерит частоты в диапазоне 10-600_000гц, то надо помнить что отклик на прерывание длится до 50 тактов МК .. то есть начиная с частот в 200-300кГц - гарантированы пропуски в подсчетах частоты даже при отсутствии иных событий.

Замечания по датчику и программе, если кто захочет его использовать в своих проектах:
1. Чем выше режим частоты (2%, 20%, 100%), тем шустрее определение цветов. Как-бы понятно, что желательно выставлять s0=s1=1;

2. В переводе на люксы, сам датчик вполне тянет на измерительный прибор: шумы не более 0.1-0.2лк (2-10гц), диапазон измерений 0.4 - 12000лк, и при неравномерности 0.2% рабочий диапазон в районе 100-1000лк (типовое освещение внутри помещений) что само по себе очень даже нефигово. Какие люксы и когда - есть табличка в википедии: "освещенность", их очень любят фотографы. Перевод примерен поскольку зависит от спектра сигнала;

3. Высокая чувствительность всех(!) каналов к ИК засветке .. которую производят светодиоды платы тоже. Применение без ИК отсекающего светофильтра - проблематично. Есть версии с отсекающим ИК фильтром;

4. Высокая засветка от своих же светодиодов. Применение без изолирующей трубки - проблематично. Есть версии с защитой от засветки (и фильтром);

5. Отсутствие управления светодиодами. По-хорошему, надо бы включать светодиоды того цвета (ставить управляемые мультиколор на плату), замер которого производится согласно ногам s2,s3. Тем более, что сам прибор имеет режим энергосбережения, но таковых не встречал вовсе;

6. Замер на прерываниях полезен только как демо-режим. Ибо реакция на него у ардуино около 50тактов, что может дать "пропуски" в подсчете уже с 2-3тыс. люксов. Есть 2 способа: считать частоту счетчиком по внешнему входу или считать длину периода счетчиком по сигналу ICP аппаратно;

6. Замер периода даст ошибку подсчета начиная с частоты 160кГц (100%) более 1% даже с базовой в 16Мгц - т.е. полезен только на слабых освещенностях;

7. Подсчет импульсов даст ошибку в 1% на частотах ниже 100гц для 10мсек интервала;

8. Фильтры имеют "перекрытие", которое надо вычитать с учетом относительной яркости каналов (от белого) .. что усложняет программу замера;

9. Датчик "дрожит" (даташит), что требует усреднения нескольких замеров, и соответственно снижает скорость получения результатов;

10. Светодиоды на плате посажены "на корпус", что не позволяет сосредоточить их освещение на нормальном расстоянии от датчика, а "в дали" яркость освещения падает согласно квадрату расстояния - что резко снижает полезность подсветки;

В целом, для нешустрых измерений (500мсек - 5мсек от освещенности) и, с учетом вышеизложенного, вполне может использоваться как чувствительный прибор (0.4-12_000лк) для домашнего применения с точность до 0.5%, что очень немало.

Наиболее полезен адаптивный алгоритм измерений, который по замеру уровня белого будет принимать решение о способе измерений остальных каналов и количестве попыток усреднения в зависимости от интегральной яркости белого.
А также будет приводить полученные значения к "очищенным" результатам согласно данным о фильтрах в даташите.

В этом случае, можно будет реализовать скорость получения результатов согласно текущей освещенности при сохранении заявленной точности и линейности самого прибора.

Всякие примитивные алгоритмы "на прерываниях" - только как проверка работоспособности самого прибора.

Последний раз редактировалось Arhat109; 09.03.2016 в 09:06.
Arhat109 вне форума   Ответить с цитированием
Старый 10.03.2016, 11:27   #2
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: TCS3200 датчик цвета, недостатки и рекомендации

Вау! Оно работает! Сделал обработку датчика через таймер и обратил матрицу цветового баланса из средних значений даташита, заодно отмасштабировал к люксам.
Итог: точность определения цвета ожидаю в районе 1%. Надо искать на чем поверить.
Arhat109 вне форума   Ответить с цитированием
Старый 10.03.2016, 11:40   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: TCS3200 датчик цвета, недостатки и рекомендации

А спектр или температуру света, сможет определять?
Admin вне форума   Ответить с цитированием
Старый 10.03.2016, 14:53   #4
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: TCS3200 датчик цвета, недостатки и рекомендации

Нет конечно же. Он же RGB только. Мне он нужен был для "самокатных тележек" и всяческих "хватательных ручек" для определения цвета "куда ехать и что хватать/куда класть".

Обжегшись с датчиками линии/препятствия, тут подошел основательно и оказалось, что прибочик очень даже ничего себе. Получать цвет в виде составляющих RGB вполне можно с точностями в 1% и хорошей линейностью по освещенности.

Например можно сделать пипетку для фотожабы .. или какой фонарь-хамелеон как повторитель цвета.

Кстати, оказалось что "зеленая бумажка" из детских наборов может быть вовсе и не зеленой даже .. датчик её опознает как сильно серо-зеленую, особенно под своим освещением.

Ну и ещё: пытался выйти в режим насыщения засветив датчик хорошим фонариком на обыкновенной лампочке накаливания, прямо "в морду" .. фиг-то там! Показал уровни в районе 8-10 тыс. люксов, но признака "пересвет" (частота с датчика выше 550кГц) так и не выдал.

Неплохо определяет цвет предметов и при очень слабой освещенности - в темноте зажег обыкновенную свечку. Берет цвет на расстоянии около 5-10см от свечи - очень устойчиво.
P.S. под свечкой, его собственные светодиоды закрывались бумажкой "напрочь".

Последний раз редактировалось Arhat109; 10.03.2016 в 14:55.
Arhat109 вне форума   Ответить с цитированием
Старый 10.03.2016, 21:15   #5
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: TCS3200 датчик цвета, недостатки и рекомендации

Цитата:
Нет конечно же. Он же RGB только
Так температура цвета по RGB составляющим и определяют
Admin вне форума   Ответить с цитированием
Старый 11.03.2016, 07:11   #6
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: TCS3200 датчик цвета, недостатки и рекомендации

Ну .. тогда не знаю. Вчера сделал "эталонные" цвета на мониторе (255,0,0), (0,255,0) и т.д., без подсветки родными светодиодами и, с удивлением обнаружил, что восстановление баланса белого через обратную матрицу дает резко заниженное значение для зеленого канала и почти вдвое завышенное для синего. При том, что прямые данные о частоте - на белом идут куда как ровней .. ни чё не понял.

Гуглил, но толком ничего не нашел. Может я "что не так сделал"?

В даташите есть доли в % от белого на монохромное излучение в каналах по каждому каналу .. то бишь каков будет отклик каналов на тот или иной монохром .. матрица чувствительности датчиков по каналам. Для восстановления верного цвета посчитал обратную матрицу и проверил на тестовых данных - восстановление исходного цвета в пределах 1% (целочисленная арифметика и сдвиговые операции и только, к-ты округлены до 1/32) .. а на практике получается такая вот фигня
.. или это у меня монитор так "откалиброван"?
Да, и освещение белого листа офисной бумаги родными светодиодами с комнатным освещением обычной лампой накаливания в смеси тоже дает провал в зеленом (почти в 2 раза) и избыток синего (в 1.25) ..

Пришлось корректировать по белому листу, уже после вычислений по обратной матрице. После чего экранные пробы стали давать приемлемые результаты.

Время подсчета частоты выбрано таким, что дает ошибку не более 0.5%, ошибки восстановления баланса - 1%, усреднение датчиков - 4 замера, снижение дрожания в 2 раза .. и такая фигня с балансом.. монитор стоит на R=50%, G=50%, B=50%.

Что я сделал не так?

P.S. Да, фонарик помощнее таки засвечивает датчик "на ура", при этом частота его растет, доходил до 1.5Мгц.

Цвета различает очень устойчиво, начиная с 5-6лк., но на таких величинах разница очень невелика, но есть и устойчива. От своих светодиодов создает интергальнцую освещенность на расстоянии 1.5-3см в районе 800лк., что более чем достаточно для относительно скоростной работы, при моих режимах усреднения - около 32мс на замер. Маловато для движения по линии, но для прочих работ - очень даже ничего.

Последний раз редактировалось Arhat109; 11.03.2016 в 07:18.
Arhat109 вне форума   Ответить с цитированием
Старый 11.03.2016, 09:56   #7
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: TCS3200 датчик цвета, недостатки и рекомендации

У монитора есть частота обновления, может быть она как то влияет на замер?
Admin вне форума   Ответить с цитированием
Старый 11.03.2016, 10:59   #8
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: TCS3200 датчик цвета, недостатки и рекомендации

Врядли. После восстановления цветов по обратной матрице чувствительностей получается систематический провал в зеленом и избыток синего, но чистота цветов заметно выше, примерно так, на память:
1. Прямой цвет без коррекции у квадратов на мониторе (255,0,0), (0,255,0),(0,0,255),(255,255,0)..:
Красный: 55,12,17; Зеленый: 15,45,18; Синий: 15,12,75 .. и т.д.
2. После коррекции по обратной матрице:
Красный: 48,2,5; Зеленый: 1,25,3; Синий: 2,0,70 .. и т.д. особенно фиолетовый (255,0,255): 48,-1,68!
3. Корректировка баланса белого после коррекции:
Красный: 50,1,2; Зеленый: 2,50,3; Синий: 1,0,50

То есть после коррекции цветов по обратной матрице общая фоновая засветка существенно ниже и последующая корректировка баланса белого по имеющемуся освещению - не ухудшает результат в целом.

Да, белый квадрат на мониторе в последнем случае дает примерно такие чиселки: 50,49,48 очень стабильно. Пересчетные к-ты баланса белого вычислялись по белому листу офисной бумаги, освещенному светодиодами + в комнатым освещением с исходными чиселками типа таких: W=577, R=141, G=71, B=221, и после корректировки: (577,185,186,184)

В темноте имеем такие значения на красной бумаге: W=6-8, R=3-4, G=0-1, B=0-2 достаточно надежно и стабильно. Белый канал (W) масштабирован к люксам (примерно) из соображений даташита: 47.2мквт/кв.см (=325лк) дает частоту белого 15.6кГц (*20 = 312 = *(16+4)! вот с этим занижением и сделано, дабы не считать float). И далее каждый микроватт (0.146лк) дает 330 герц частоты.

В общем, решил забить. Для моих целей вполне достаточно, разве что ещё добавлю повышение цветовой контрастности путем вычитания 1/4(1/2,1/8..) от канала с наименьшей яркостью из всех. Будет полезно, поскольку в боевых условиях всегда будет присутствовать общая фоновая засветка. Ну и добавить блокировку отрицательных чиселок цветах в каналов.

Да, и ещё: нестабильность показаний при неизменных условиях не превышает 2-4 на уровнях 600,200,200,200, что дает ошибку около 0.5% в яркостном канале и 2% в цветовых.
По-моему на этом можно остановиться.

Последний раз редактировалось Arhat109; 11.03.2016 в 11:12.
Arhat109 вне форума   Ответить с цитированием
Старый 11.03.2016, 23:08   #9
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1030
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию Re: TCS3200 датчик цвета, недостатки и рекомендации

Мысль: а не попробовать ли на солнышке? Комнатное освещение лампами накаливания? У светодиодов в подсветке монитора спектр тоже не идеален.

Вопрос-просьба: А можно ли с его помощью заснять рассвет в ясную погоду(желательно в сельской местности, чтоб без паразитной засветки)? Интервал снятия показаний 1 раз в минуту более чем достаточный.
Данные нужны для исскуственного рассвета
А для полноты картины и закат.
Tohin вне форума   Ответить с цитированием
Старый 12.03.2016, 07:19   #10
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: TCS3200 датчик цвета, недостатки и рекомендации

На солнышке - проблематично пока: когда приезжаю с работы - его уже нет.

Заснять динамику изменения освещенности в цвете для рассветов - наверное можно, но в это время я - сплю. Совсем сплю. Хотите, делайте сами.

Это та тестовая программа замеров датчика для Ардуино Мега2560, которую "мучал" (последняя версия):
PHP код:
#include "arhat.h"

#define tcsOut    47  // T5in   => выход обоих датчиков out
#define tcsS2     44  // T5outC => управление цветом обоих датчиков
#define tcsS3     45  // T5outB => управление цветом обоих датчиков
#define tcsOE1    46  // T5outA => !OE for TCS3200 1-й датчик
#define tcsOE2    48  // T5icp  => !OE for TCS3200 2-й датчик
#define tcsTimer   5

#define TCS_MAX_MEASURES 2          // [1,2,4,8,..] для автозамены деления сдвигами
//#define TCS_WAIT         8          // мсек на разовый подсчет частоты. Итого fmin=125hz (1.5лк), замер 4 цветов = 31.25Гц
#define TCS_WAIT         4          // мсек на разовый подсчет частоты. Итого fmin=250hz (4лк), замер 4 цветов = 62.5Гц
//#define TCS_WAIT        16          // мсек на разовый подсчет частоты. Итого fmin=62.5hz (0.9лк), замер 4 цветов = 15.6Гц
//#define TCS_WAIT        32          // мсек на разовый подсчет частоты. Итого fmin=31.25hz (0.4лк), замер 4 цветов = 7.8Гц
#define TCS_MAX_WAIT    4*TCS_WAIT  // время, к которому приводим подсчитанные величины для повышения качества в темноте
#define TCS_CONTRAST     8          // делитель для повышения контраста цвета (1/2,1/4,1/8,1/16..)

#define TCS_WHITE    0       // порядок цветов в рез. массиве
#define TCS_GREEN    1
#define TCS_RED      2
#define TCS_BLUE     3

#define TCS_NOCOLOR  4    // замер завершен, данные действительны.
#define TCS_START    5      // начать новый замер.

int      tcsColors[4];       // итоговые и усредненные данные замера
int      tcsTemp[4];         // внутреннее хранение данных при усреднениях и замерах
uint16_t tcsCount;           // номер завершенного замера
uint8_t  tcsColor;           // текущий измеряемый цвет в попытке
uint8_t  tcsMeasure;         // номер текущей усредняемой попытки замера
uint8_t  tcsWait;            // текущая длительность одного замера частоты от датчика
uint8_t  tcsIsBright;        // Пересвет?

/**
 * Настройка таймера и выводов на работу с датчиком
 */
void tcsSetup()
{
  
// обе ноги разрешения датчиков на выход и запрет работы датчикам
  
pinModeOut(tcsOE1);
  
pinModeOut(tcsOE2);
  
pinOutHigh(tcsOE1);
  
pinOutHigh(tcsOE2);

  
timerControl(tcsTimerA) = 0;  // нормальный режим счета, счет по спадающесу(6),нарастающему(7) фронту на входе T5
  
timerControl(tcsTimerB) = 6;  // нормальный режим счета, все выходы счетчика отключены.
  
pinModeIn(tcsOut);              // счет импульсов счетчиком T5

  // ноги управления цветом на выход и режим s2=1,s3=0 -- анализ белого
  
pinModeOut(tcsS2);
  
pinModeOut(tcsS3);
  
pinOut(tcsS2HIGH);
  
pinOut(tcsS3LOW);
  
  
tcsWait TCS_WAIT;

  
// дополнение: контроль перезагрузок из-за сбоев питания:
  // в случае авто-перезагрузки моргаем светодиодом и ждем 2сек ничего не делая:
  
pinModeOut(pinLed);
  
delay(1000);
  for(
uint8_t i=5i>0i--){
    
pinOutHigh(pinLed);
    
delay(150);
    
pinOutLow(pinLed);
    
delay(300);
  }
  
delay(1000);
}

/**
 * настройка заданного датчика на чтение данных о цвете с задержками по 1мксек (даташит)
 */
void tcsPrepare(uint8_t num)
{
  switch(
num){
    case 
1:
      
pinOut(tcsOE2HIGH);
      
delayMicro8(5);
      
pinOut(tcsOE1LOW);
      break;
    case 
2:
      
pinOut(tcsOE1HIGH);
      
delayMicro8(5);
      
pinOut(tcsOE2LOW);
      break;
  }
  
delayMicro8(5);
  
tcsColor TCS_START;
}

/**
 * переключение датчика на текущий цвет и сброс таймера для нового замера
 */
void tcsNextColor(){
  
uint8_t color tcsColor+2// изменяем порядок цветов: первым опрашиваем общий канал!

  
if( color ){ pinOutHigh(tcsS2); }else{ pinOutLow(tcsS2); }
  if( 
color ){ pinOutHigh(tcsS3); }else{ pinOutLow(tcsS3); }
  
timerCount(tcsTimer) = 0;
}

/**
 * попытка замера цвета датчиком
 */
void tcsRun(uint8_t num)
{
  if( 
tcsColor == TCS_NOCOLOR ) return;  // не запущен замер/останов, выход.

  
if( tcsColor == TCS_START ){
    
// начало очередного замера
    
tcsColor=0;
    
tcsMeasure 0;
    for(
uint8_t c=0c<4c++)
            
tcsTemp[c] = 0;
  }else{
    
// замер: приводим текущий замер к эфф. времени
    
uint16_t counter timerCount(tcsTimer);
    
tcsTemp[tcsColor] += counter * (TCS_MAX_WAIT tcsWait);
//Serial.print("c=");
//Serial.print(counter, DEC);
//Serial.print("t=");
//Serial.print(tcsColor, DEC);
//Serial.print("m=");
//Serial.print(tcsMeasure, DEC);
    
if( tcsColor == ){
      
// первым замеряли яркостный канал: смотрим надо ли менять время замеров (удерживаем точность 0.5%):
      
tcsIsBright 0;
      if( 
counter 590*tcsWait ){ tcsIsBright 1; }      // Очень ярко! Частота выше 600кГц !!!
      
else if( counter 150 ){ tcsWait TCS_WAIT 4; }  // совсем темно, макс. длительность.
      
else if( counter 300 ){ tcsWait TCS_WAIT 2; }  // темновато, удвоенная длительность.
      
else if( tcsWait>){ tcsWait /= 2; }                // пробуем сократить время замера
//      else if( counter > 500 ){ tcsWait = TCS_WAIT / 4; }  // слишком ярко, мин. длительность.
//      else if( counter > 400 ){ tcsWait = TCS_WAIT / 2; }  // ярковато, уменьшаем длительность.
//Serial.print(",w=");
//Serial.print(tcsWait, DEC);
    
}

    if( (++
tcsColor) == TCS_NOCOLOR ){
      if( 
tcsMeasure >= TCS_MAX_MEASURES-){
        
// Завершены все попытки: восстанавливаем баланс белого (R=0.18%,G=0.41%,B=-0.05%) средней обратной матрицей в разложении по 1/2..
        
int      minVal,maxVal;
        
int      tg tcsTemp[1]/2
                
,tr tcsTemp[2]/2
                
,tb tcsTemp[3]/2
        
;
        
tcsColors[0] = tcsTemp[0];
        
tcsColors[1] = tcsTemp[1] + tg;
        
tcsColors[2] = tcsTemp[2];
        
tcsColors[3] = tcsTemp[3] + tb;
        
tg >>= 1tr>>=1tb>>=1;       // 1/4
        
tcsColors[1] -= (tb+tb+tb);
        
tcsColors[2] -= tg;
        
tcsColors[3] -= tg;
        
tg >>= 1tr>>=1tb>>=1;       // 1/8
        
tcsColors[1] += tg;
        
tcsColors[3] -= tr;
        
tg >>= 1tr>>=1tb>>=1;       // 1/16
        
tcsColors[2] += tr-tg;
        
tcsColors[3] -= tg-tr;
        
tg >>= 1tb>>=1;               // 1/32
        
tcsColors[1] += tg;
        
tcsColors[3] += tb-tg;
        
tcsColors[2] += tb+tg/4;        // +1/128tg (0.18%), иначе большая ошибка в красном (1.02%)!

        // , усредняем и масштабируем частоту в люксы и сохраняем:
        
tg tcsColors[0] / TCS_MAX_MEASURES;
        
tcsColors[0] = tg tg/4;

        
minVal 32767maxVal 0;
        
tg tcsColors[1] / TCS_MAX_MEASURES;
        if( 
minVal tg minVal tg;
        if( 
maxVal tg maxVal tg;

        
tr tcsColors[2] / TCS_MAX_MEASURES;
        if( 
minVal tr minVal tr;
        if( 
maxVal tr maxVal tr;

        
tb tcsColors[3] / TCS_MAX_MEASURES;
        if( 
minVal tb minVal tb;
        if( 
maxVal tb maxVal tb;

        
// вычисляем степень повышения контраста:
        
maxVal -= minVal;
        if( 
maxVal minVal   maxVal =  TCS_CONTRAST;
        else if( 
maxVal 2*minVal maxVal TCS_CONTRAST*4;
        else                         
maxVal TCS_CONTRAST*2;

        
// , коррекция баланса и повышение контрастности цветов:
        
tg tg tg   tg/8  tg/maxVal minVal/maxVal;
        
tr tr tr/tr/32 tr/maxVal minVal/maxVal;
        
tb tb tb/tb/16 tb/maxVal minVal/maxVal;

        
// убираем отрицательные значения из-за ошибок округления:
        
tcsColors[1] = (tg>0tg 0);
        
tcsColors[2] = (tr>0tr 0);
        
tcsColors[3] = (tb>0tb 0);

        
// конец работы, новый номер замера.
        
tcsCount++;
        return;
      }else{
        
tcsMeasure++;
        
tcsColor 0;
      }
    }
  }
  
tcsNextColor();
}

void setup() {
  
Serial.begin(115200);

  
tcsSetup();
  
tcsPrepare(1);
}

void loop() {
  
everyOVF(tcsWaittcsRun(1) );
  if( 
tcsColor == TCS_NOCOLOR ){
    
// замер завершен.
    
Serial.print(", count=");
    
Serial.print(tcsCountDEC);
    
Serial.print(", W=");
    
Serial.print(tcsColors[TCS_WHITE], DEC);
    
Serial.print(", R=");
    
Serial.print(tcsColors[TCS_RED], DEC);
    
Serial.print(", G=");
    
Serial.print(tcsColors[TCS_GREEN], DEC);
    
Serial.print(", B=");
    
Serial.print(tcsColors[TCS_BLUE], DEC);
    
Serial.print(", time=");
    
Serial.print(tcsWaitDEC);
    
Serial.print(", isBright? ");
    
Serial.print(tcsIsBrightDEC);
    
Serial.println("");
    
tcsColor TCS_START;
  }

У меня 2 датчика цвета и общие ноги воткнуты в одни и теже пины, отличие только в подаче сигнала !OE .. в общем, там всё комментированно "как обычно", думаю разобраться труда не составит.

Либа, которой пользуюсь - самописная, тут есть про неё тема. Последнюю версию можно брать с гитхаба. Но, там тоже по большей части всё типовое, заменить на wiring, думаю труда не составит.

Вот так выглядит один датчик с нашей мегой, в оформлении "Ардуино для Лего":



Сама ардуинка давно уже одета в лего-детальки и на фото видно, что возле ШИМ-ног допаяны разъемы для прямого подключения серводвигателей, а возле 14-21 ног допаяны линии питания для подключения разных датчиков напрямую. Также видны развязочные конденсаторы, дабы стабилизировать питание от батареек при работе моторов.
Arhat109 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 11:18. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика