#1 2015-09-18 09:49:51

sendsay
Учасник
Зареєстрований: 2015-09-18
Повідомлень: 12

Датчик "прохождения".

Здравствуйте, помогите решить вопрос с датчиком "прохождения". Мне надо  поставить датчик, который бы  считал наличие предметов или людей  прошедших перед ним, т.е. Стоит ИК диод, напротив на расстоянии 500 мм. стоит фото резистор, предмет или человек проходит между ними, контроллер переключает реле (пусть будет лампочка). На данный момент имею вот такой код:

int photoPin = A0;  // фоторезистор подключен 0-му аналоговому входу
int ledPin = 3;   // светодиод подключается к digital pin 9
unsigned long duration = 0; // переменная для хранения значения входного напряжения

int val = 0;
int arrCheck[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int arrSum = 0;

void setup()
{
  Serial.begin(9600);
}

int check() {
  arrSum = 0;

  digitalWrite(ledPin, HIGH);    // зажигаем
  delay(2);
  val = analogRead(photoPin);    // считываем значение с фототранзистора

  digitalWrite(ledPin, LOW);     // гасим
  delay(2);
  val = val - analogRead(photoPin);  // считываем значение с фототранзистора

  val = map(val, 0, -1023, 0, 255);

 arrCheck[0] = arrCheck[1];
  arrCheck[1] = arrCheck[2];
  arrCheck[2] = arrCheck[3];
  arrCheck[3] = arrCheck[4];
  arrCheck[4] = arrCheck[5];
  arrCheck[5] = arrCheck[6];
  arrCheck[6] = arrCheck[7];
  arrCheck[7] = arrCheck[8];
  arrCheck[8] = arrCheck[9];
  arrCheck[9] = arrCheck[10];
  arrCheck[10] = arrCheck[11];
  arrCheck[11] = arrCheck[12];
  arrCheck[12] = arrCheck[13];
  arrCheck[13] = arrCheck[14];
  arrCheck[14] = arrCheck[15];
  arrCheck[15] = arrCheck[16];
  arrCheck[16] = arrCheck[17];
  arrCheck[17] = arrCheck[18];
  arrCheck[18] = arrCheck[19];
  arrCheck[19] = val;

  arrSum =   arrCheck[0] + arrCheck[1] + arrCheck[2] +   arrCheck[3] + arrCheck[4] + arrCheck[5] + arrCheck[6] + arrCheck[7] + arrCheck[8] + arrCheck[9],   arrCheck[10] + arrCheck[11] + arrCheck[12] +   arrCheck[13] + arrCheck[14] + arrCheck[15] + arrCheck[16] + arrCheck[17] + arrCheck[18] + arrCheck[19];
 // Serial.println(arrSum);

  return arrSum;
}

void loop()
{
  duration = check();



  // Serial.println(duration);

  if (check() > 0) {
    digitalWrite(13, HIGH);

  } else {

    Serial.println("00000000000000000000000000000000")    ;
    digitalWrite(13, LOW);
  }

  delay(50);
}

Код тестовый (сильно не бейте). Тут все работает, но есть одно НО, когда свет становиться яркий, дневной например, то появляются ложные сигналы и датчик реагирует на это. Для надежности я сделал буфер, суммирую его и принимаю решение на сумме всех цифр.

На сколько я понял, мне надо как то опознавать свой сигнал, например, светить ИК определенной частоты, измерять эту частоту и потом принимать решение мой или не мой. Но появляется вопрос как это реализовать? Или я что не так понял, или есть ли другой способ сделать такой датчик. Спасибо.

Неактивний

#2 2015-09-18 17:53:26

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Датчик "прохождения".

привет,
Новые ИК фотодиоды и фототранзисторы от Vishay
"от 750 до 1050 нм с фильтром блокировки дневного света;"
+ некая модуляция, тут уж вам решать,
я бы для начала ознакомился с
http://www.terryjfield.com/?p=110

Неактивний

#3 2015-09-18 22:30:28

sendsay
Учасник
Зареєстрований: 2015-09-18
Повідомлень: 12

Re: Датчик "прохождения".

NoName пише:

привет,
Новые ИК фотодиоды и фототранзисторы от Vishay
"от 750 до 1050 нм с фильтром блокировки дневного света;"
+ некая модуляция, тут уж вам решать,
я бы для начала ознакомился с
http://www.terryjfield.com/?p=110

Спасибо, познал нового! Как ваше мнение, реализовать работу этих скетчей на одном Ардуино, возможно? Я имею ввиду не будет ли конфликта, на портах. Я с такой библиотекой еще не работал, поэтому мне надо знать, раньше чем я пойду и скажу что надо все переделать)) И можно ли поставить один ИК диод. Я думаю, что второй там поставлен для усиления сигнала, это же погодная станция, и там расстояния могут быть большие. Спасибо.

Неактивний

#4 2015-09-21 08:50:00

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Датчик "прохождения".

поставьте 1шт, это все неважно, поймите как сделали в примере,  и сделайте сами, так же или по аналогии.
будете четко понимать как работает ваше устройство.
использование библиотек очень ускоряет разработку, но не добавляет понимания процесса,
разбирайтесь, у Вас все получится )
меандр выдать и потом отслеживать частоту входную - вероятно не самое лучшее решение.

я бы попробовал с интервалом 10мс    генерировать сигнал, а с другой стороны его ловить,
форма сигнала , длительность,  это уже сами.

Неактивний

#5 2015-10-02 19:27:35

sendsay
Учасник
Зареєстрований: 2015-09-18
Повідомлень: 12

Re: Датчик "прохождения".

NoName пише:

поставьте 1шт, это все неважно, поймите как сделали в примере,  и сделайте сами, так же или по аналогии.
будете четко понимать как работает ваше устройство.
использование библиотек очень ускоряет разработку, но не добавляет понимания процесса,
разбирайтесь, у Вас все получится )
меандр выдать и потом отслеживать частоту входную - вероятно не самое лучшее решение.

я бы попробовал с интервалом 10мс    генерировать сигнал, а с другой стороны его ловить,
форма сигнала , длительность,  это уже сами.

Спасибо, за участие. Я примерно так же и думал, вот руки дошли уже, буду пробовать)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму