Страница 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 фоторезисторов сделать "один".
Объединение датчиков в массив
Добавлено: 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 (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
Объединение датчиков в массив
Добавлено: 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}
К сожалению у меня не возможности менять скорость отдачи.
А если механически притормаживать отдачу..Пусть шаговик крутится под
небольшой нагрузкой...че ему будет.