Страница 1 из 3

Объединение датчиков в массив

Добавлено: 05.04.2021{, 01:06}
richialex
Здравствуйте. Есть ли возможность штатными блоками объединить несколько датчиков в массив? Стоит задача из 5 фоторезисторов сделать "один". Фоторезисторы расположены в ряд и каждый выдает от 200 до 1000, а нужно чтобы этот ряд из 5 фотоэлементов выдавал (к примеру) от 0 до 5000, при этом в один момент времени тень падает только на один из них. Помогите пожалуйста, а то уже неделю бьюсь над этой задачей. Уже даже блок пытался создать на основе библиотеки QTRSensors (Вроде делает как раз то, что необходимо), но без результата.

Объединение датчиков в массив

Добавлено: 05.04.2021{, 01:30}
dsfbuy
richialex писал(а):
05.04.2021{, 01:06}
Стоит задача из 5 фоторезисторов сделать "один".
sum.png

Объединение датчиков в массив

Добавлено: 05.04.2021{, 11:20}
richialex
dsfbuy писал(а):
05.04.2021{, 01:30}
richialex писал(а):
05.04.2021{, 01:06}
Стоит задача из 5 фоторезисторов сделать "один".
sum.png
Так попробовал сделать в первую очередь ))). Но в моем случае данная схема не работает, так как тень тонкая и в единицу времени перекрывает только один фоторезистор, да и когда попадает между ними, то все датчики оказываются в открытом состоянии.

Объединение датчиков в массив

Добавлено: 05.04.2021{, 12:08}
rw6cm
richialex,
Логику не пойму.
Если предположить, что интенсивность света одинаковая (макс ),
то на какой бы датчик не падала тень результат будет один =4000
какой смысл?

Объединение датчиков в массив

Добавлено: 05.04.2021{, 12:11}
edyapd
richialex, если у вас вывод каждого фоторезистора заводится на МК, то к чему такие сложности?
И второй вопрос. Как вы собираетесь анализировать ситуацию, когда тень попадает между датчиками?
И тут же появился третий. Как вы собираетесь анализировать закрывается датчик или открывается?

Объединение датчиков в массив

Добавлено: 05.04.2021{, 15:59}
Pratak
ТС видимо тех. задание не правильно изложил... или не полностью... или логику не так себе представил))). Вечером с работы вернется и все расскажет))). По мне так устройство на солнечный трекер похоже.

Объединение датчиков в массив

Добавлено: 05.04.2021{, 19:51}
richialex
rw6cm писал(а):
05.04.2021{, 12:08}
Если предположить, что интенсивность света одинаковая (макс ),
Интенсивность одинаковая.
rw6cm писал(а):
05.04.2021{, 12:08}
то на какой бы датчик не падала тень результат будет один =4000
Когда один из датчиков перекрывается, показания чуть меньше.
edyapd писал(а):
05.04.2021{, 12:11}
если у вас вывод каждого фоторезистора заводится на МК, то к чему такие сложности?
Да. Каждый датчик подключен к своему аналоговому порту.
edyapd писал(а):
05.04.2021{, 12:11}
Как вы собираетесь анализировать ситуацию, когда тень попадает между датчиками?
И тут же появился третий. Как вы собираетесь анализировать закрывается датчик или открывается?
Вот над этим и ломаю голову....
Pratak писал(а):
05.04.2021{, 15:59}
ТС видимо тех. задание не правильно изложил... или не полностью... или логику не так себе представил))). Вечером с работы вернется и все расскажет))).
Скорее всего так и есть. Приношу все свои извинения! Вчера на ночь глядя писал, не все исходные дал. Изложу суть:

Устройство суть намотчик провода.

Провод свободно свисая наматывается на катушку, но так как скорость смотки постоянная (И изменить я это никак не могу), а угловая скорость намотки меняется (Так как при намотке увеличивается диаметр катушки), то приходится постоянно вручную снижать скорость намотки. Сейчас фоторезисторы играют роль стопора (На самом деле для этого хватает и одного, но собрал уже пять на будущее). Т.е. при срабатывании двигатель намотчика останавливается и через секунду вновь возобновляет намотку. В таком режиме и работает: Старт - стоп. Но при этом, что не нравится, провод постоянно дергается и в целом, за цикл намотки все равно приходится следить за скоростью.

Так вот. Хочется сделать автоматическую намотку. Чтобы скорость скорость двигателя намотчика подстраивалась под увеличивающийся диаметр. Нашел в интернете примеры с библиотекой QTRSensors, (она из нескольких фоторезисторов делает один, на сколько я понял), в том числе управление двигателями через PID (Она к примеру используется в ардуино машинах, которые катаются по черной линии, без нее рысканье по линии, с ней плавное движение), от туда и взял идею. В моем примере, например, удержание тени от провода на среднем датчике: Выше - снижаем скорость, ниже - увеличиваем.

Объединение датчиков в массив

Добавлено: 05.04.2021{, 20:05}
AlexCrane
richialex писал(а):
05.04.2021{, 19:51}
Как вы собираетесь анализировать ситуацию, когда тень попадает между датчиками?
Ну тут просто ничего ни делать и ждать сигнала от какого-либо датчика

Объединение датчиков в массив

Добавлено: 05.04.2021{, 20:30}
richialex
AlexCrane писал(а):
05.04.2021{, 20:05}
Ну тут просто ничего ни делать и ждать сигнала от какого-либо датчика
Ну вот первый кирпичик здания.... Кстати двигатель намотчика шаговый Nema17. Работает на Ваших блоках... v1.3
edyapd писал(а):
05.04.2021{, 12:11}
Как вы собираетесь анализировать закрывается датчик или открывается?
Есть тень - датчик закрыт. Нет тени - датчик закрыт. С противоположной стороны от фоторезисторов стоит лазер с линзой выдающий линию. Верхняя планка играет роль стопора (Останавливает двигатель). Подключена как кнопка. На случай если провод пролетит фоторезисторы "незамеченным"

Объединение датчиков в массив

Добавлено: 05.04.2021{, 21:05}
edyapd
richialex писал(а):
05.04.2021{, 19:51}
Да. Каждый датчик подключен к своему аналоговому порту.
richialex писал(а):
05.04.2021{, 20:30}
Есть тень - датчик закрыт. Нет тени - датчик закрыт
По сути, вы используете фоторезистор как обычный бинарный элемент. Думаю, что для этого можно взять фотодиод и не надо будет задействовать аналоговые входа и их опрос. Можно будет посадить на обычный цифровой вход.

Объединение датчиков в массив

Добавлено: 05.04.2021{, 21:23}
richialex
edyapd писал(а):
05.04.2021{, 21:05}
Думаю, что для этого можно взять фотодиод и не надо будет задействовать аналоговые входа и их опрос.
Под рукой были. И по сути так и делал пока стояла Uno, я подключал фоторезистор к цифровому пину через переменный резистор, ловя им точку срабатывания при текущей освещенности. Не нравилось то, что при хорошей чувствительности были ложные срабатывания, а при уменьшении чувствительности фоторезистор иногда не видел препятствие. Аналоговый сигнал с компаратором, в моем случае срабатывает четче и быстрее, да и мега вполне справляется. При наличии кучи свободных пинов не увидел необходимости зажиматься, еще и дисплей через сериал повесил, чтоб i2c не использовать.

Объединение датчиков в массив

Добавлено: 05.04.2021{, 21:29}
rw6cm
richialex писал(а):
05.04.2021{, 19:51}
В моем примере, например, удержание тени от провода на среднем датчике: Выше - снижаем скорость, ниже - увеличиваем.
диаметр провода разный, перекрытие разное и мало тени.
Тогда можно сделать подвесную шторку на ролике с подшипником.
это будет более чувствительно и предсказуемо.
СпойлерПоказать
Безымянный.png
Безымянный.png (5.6 КБ) 616 просмотров

Объединение датчиков в массив

Добавлено: 05.04.2021{, 21:54}
richialex
rw6cm писал(а):
05.04.2021{, 21:29}
диаметр провода разный
Диаметр всегда примерно одинаковый. 1,5 - 2 мм.
rw6cm писал(а):
05.04.2021{, 21:29}
Тогда можно сделать подвесную шторку на ролике с подшипником.
Тоже думал над механическим решением, типа большого ролика и датчика холла с магнитом, или потенциометра. Вот еще как вариант шторка. Если программным путем решить не удастся, до буду уже рассматривать такие варианты.

Загорелся потому, что увидел по сути готовое решение в коде для arduino. Вот и подумал, что в FLProg можно реализовать что-то подобное.

Объединение датчиков в массив

Добавлено: 05.04.2021{, 22:18}
AlexCrane
richialex,
А если так
Скорость ШД.png
Скорость.flp
(355.1 КБ) 34 скачивания

Объединение датчиков в массив

Добавлено: 05.04.2021{, 23:09}
richialex
AlexCrane писал(а):
05.04.2021{, 22:18}
А если так
Спасибо! Домотает и буду пробовать с подбором параметров. Надеюсь заработает.

Сейчас повторно (Вернее это уже наверно попытка номер 7) сел за пользовательский блок. Пытаюсь создать его на примере из состава библиотеки. Фактически, если загрузить его в плату, то он делает как раз то, что нужно. Выдает в UART положение темной линии в массиве из 5 датчиков. Если ни то ни то не получится, то наверное лишу себя пары пива и пойду в "Прием заказов" ))).

Код: Выделить всё

#include <QTRSensors.h>

// This example is designed for use with six analog QTR sensors. These
// reflectance sensors should be connected to analog pins A0 to A5. The
// sensors' emitter control pin (CTRL or LEDON) can optionally be connected to
// digital pin 2, or you can leave it disconnected and remove the call to
// setEmitterPin().
//
// The setup phase of this example calibrates the sensors for ten seconds and
// turns on the Arduino's LED (usually on pin 13) while calibration is going
// on. During this phase, you should expose each reflectance sensor to the
// lightest and darkest readings they will encounter. For example, if you are
// making a line follower, you should slide the sensors across the line during
// the calibration phase so that each sensor can get a reading of how dark the
// line is and how light the ground is. Improper calibration will result in
// poor readings.
//
// The main loop of the example reads the calibrated sensor values and uses
// them to estimate the position of a line. You can test this by taping a piece
// of 3/4" black electrical tape to a piece of white paper and sliding the
// sensor across it. It prints the sensor values to the serial monitor as
// numbers from 0 (maximum reflectance) to 1000 (minimum reflectance) followed
// by the estimated location of the line as a number from 0 to 5000. 1000 means
// the line is directly under sensor 1, 2000 means directly under sensor 2,
// etc. 0 means the line is directly under sensor 0 or was last seen by sensor
// 0 before being lost. 5000 means the line is directly under sensor 5 or was
// last seen by sensor 5 before being lost.

QTRSensors qtr;

const uint8_t SensorCount = 5;
uint16_t sensorValues[SensorCount];

void setup()
{
  // configure the sensors
  qtr.setTypeAnalog();
  qtr.setSensorPins((const uint8_t[]){A9, A10, A5, A12, A11}, SensorCount);
//  qtr.setEmitterPin(2);

  delay(500);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH); // turn on Arduino's LED to indicate we are in calibration mode

  // analogRead() takes about 0.1 ms on an AVR.
  // 0.1 ms per sensor * 4 samples per sensor read (default) * 6 sensors
  // * 10 reads per calibrate() call = ~24 ms per calibrate() call.
  // Call calibrate() 400 times to make calibration take about 10 seconds.
  for (uint16_t i = 0; i < 400; i++)
  {
    qtr.calibrate();
  }
  digitalWrite(LED_BUILTIN, LOW); // turn off Arduino's LED to indicate we are through with calibration

  // print the calibration minimum values measured when emitters were on
  Serial.begin(9600);
  for (uint8_t i = 0; i < SensorCount; i++)
  {
    Serial.print(qtr.calibrationOn.minimum[i]);
    Serial.print(' ');
  }
  Serial.println();

  // print the calibration maximum values measured when emitters were on
  for (uint8_t i = 0; i < SensorCount; i++)
  {
    Serial.print(qtr.calibrationOn.maximum[i]);
    Serial.print(' ');
  }
  Serial.println();
  Serial.println();
  delay(1000);
}

void loop()
{
  // read calibrated sensor values and obtain a measure of the line position
  // from 0 to 5000 (for a white line, use readLineWhite() instead)
  uint16_t position = qtr.readLineBlack(sensorValues);

  // print the sensor values as numbers from 0 to 1000, where 0 means maximum
  // reflectance and 1000 means minimum reflectance, followed by the line
  // position
  for (uint8_t i = 0; i < SensorCount; i++)
  {
    Serial.print(sensorValues[i]);
    Serial.print('\t');
  }
  Serial.println(position);

  delay(250);
}
Отправлено спустя 1 час 50 минут 1 секунду:
AlexCrane писал(а):
05.04.2021{, 22:18}
А если так
Вроде заработала Ваша схема. Правда немного в видоизмененном виде. Не совсем понял для чего в Вашей схеме компаратор с ==, если не сложно подскажите пожалуйста его назначение, может полезная функция а я ее вырезал. Пока его не убрал счетчик все время считал вверх. В любом случае еще раз Спасибо! Попробую пока с ней поработать, может получится PID прикрутить. С ним всяко плавнее....

Объединение датчиков в массив

Добавлено: 06.04.2021{, 04:26}
edyapd
richialex писал(а):
06.04.2021{, 00:59}
Не совсем понял для чего в Вашей схеме компаратор с ==, если не сложно подскажите пожалуйста его назначение, может полезная функция а я ее вырезал.
Я хоть и не AlexCrane, но рискну ответить. Сравнение с "2" нужно было, что бы останавливать счётчик. На логическую "И" подавался "0" и уже не важно, что приходит с генератора.
И странно, что у вас при этом продолжался счёт вверх.

Объединение датчиков в массив

Добавлено: 06.04.2021{, 10:33}
sillver
Добрый день. Я хочу вставить свои 5 копеек. У нас на производстве для таких задач используют активные отдатчики, сменилось натяжение компенсатор добавил/убрал обороты на отдающем приводе правда мы используем частотники,но думаю и ШИМом можно обойтись.

Объединение датчиков в массив

Добавлено: 06.04.2021{, 21:44}
richialex
edyapd писал(а):
06.04.2021{, 04:26}
Сравнение с "2" нужно было, что бы останавливать счётчик. На логическую "И" подавался "0" и уже не важно, что приходит с генератора.
И странно, что у вас при этом продолжался счёт вверх.
Да. Уже позже "въехал". При первых тестах, на втором датчике были завышены данные для сравнения и он пропускал импульсы. При это схема работала не верно.

Отправлено спустя 1 минуту 52 секунды:
sillver писал(а):
06.04.2021{, 10:33}
У нас на производстве для таких задач используют активные отдатчики
Спасибо за Ваш комментарий. К сожалению у меня не возможности менять скорость отдачи. Поэтому работаю только с приемником.

Объединение датчиков в массив

Добавлено: 06.04.2021{, 23:12}
sillver
richialex писал(а):
06.04.2021{, 21:46}
К сожалению у меня не возможности менять скорость отдачи. Поэтому работаю только с приемником.
Отрицательный результат, это тоже результат с ним появляется опыт! может стоит попробовать ? В промышленности много умов работали!!! а может это проще?

Объединение датчиков в массив

Добавлено: 06.04.2021{, 23:40}
DanilaWERT
richialex писал(а):
06.04.2021{, 21:46}
К сожалению у меня не возможности менять скорость отдачи.
А если механически притормаживать отдачу..Пусть шаговик крутится под небольшой нагрузкой...че ему будет.