Так попробовал сделать в первую очередь ))). Но в моем случае данная схема не работает, так как тень тонкая и в единицу времени перекрывает только один фоторезистор, да и когда попадает между ними, то все датчики оказываются в открытом состоянии.
Интенсивность одинаковая.
Когда один из датчиков перекрывается, показания чуть меньше.
Да. Каждый датчик подключен к своему аналоговому порту.
Вот над этим и ломаю голову....
Скорее всего так и есть. Приношу все свои извинения! Вчера на ночь глядя писал, не все исходные дал. Изложу суть:
Ну тут просто ничего ни делать и ждать сигнала от какого-либо датчика
Ну вот первый кирпичик здания.... Кстати двигатель намотчика шаговый Nema17. Работает на Ваших блоках... v1.3
Есть тень - датчик закрыт. Нет тени - датчик закрыт. С противоположной стороны от фоторезисторов стоит лазер с линзой выдающий линию. Верхняя планка играет роль стопора (Останавливает двигатель). Подключена как кнопка. На случай если провод пролетит фоторезисторы "незамеченным"
По сути, вы используете фоторезистор как обычный бинарный элемент. Думаю, что для этого можно взять фотодиод и не надо будет задействовать аналоговые входа и их опрос. Можно будет посадить на обычный цифровой вход.
Под рукой были. И по сути так и делал пока стояла Uno, я подключал фоторезистор к цифровому пину через переменный резистор, ловя им точку срабатывания при текущей освещенности. Не нравилось то, что при хорошей чувствительности были ложные срабатывания, а при уменьшении чувствительности фоторезистор иногда не видел препятствие. Аналоговый сигнал с компаратором, в моем случае срабатывает четче и быстрее, да и мега вполне справляется. При наличии кучи свободных пинов не увидел необходимости зажиматься, еще и дисплей через сериал повесил, чтоб i2c не использовать.
диаметр провода разный, перекрытие разное и мало тени.
Диаметр всегда примерно одинаковый. 1,5 - 2 мм.
Тоже думал над механическим решением, типа большого ролика и датчика холла с магнитом, или потенциометра. Вот еще как вариант шторка. Если программным путем решить не удастся, до буду уже рассматривать такие варианты.
Спасибо! Домотает и буду пробовать с подбором параметров. Надеюсь заработает.
Код: Выделить всё
#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);
}
Вроде заработала Ваша схема. Правда немного в видоизмененном виде. Не совсем понял для чего в Вашей схеме компаратор с ==, если не сложно подскажите пожалуйста его назначение, может полезная функция а я ее вырезал. Пока его не убрал счетчик все время считал вверх. В любом случае еще раз Спасибо! Попробую пока с ней поработать, может получится PID прикрутить. С ним всяко плавнее....
Я хоть и не AlexCrane, но рискну ответить. Сравнение с "2" нужно было, что бы останавливать счётчик. На логическую "И" подавался "0" и уже не важно, что приходит с генератора.
Да. Уже позже "въехал". При первых тестах, на втором датчике были завышены данные для сравнения и он пропускал импульсы. При это схема работала не верно.
Спасибо за Ваш комментарий. К сожалению у меня не возможности менять скорость отдачи. Поэтому работаю только с приемником.