два ик приемника на одном ардуино уно

Тема в разделе "Проводная и беспроводная связь", создана пользователем Дмитрий П, 10 апр 2015.

  1. Необходимо подключить 2 приемника tsop31238 к одному ардуино уно. Оба приемника должны просто отслеживать поступает на них сигнал или нет. Подключал их к цифровому входу. Если сигнал не поступает выдает чистую 1. А если сигнал идет то поступает то 0 то 1 причем без какойто определенной закономерности. Подскажите как четко определить наличие сигнала на приемнике?
    Пробовал примерно такие скетчи:
    Код (Text):

    int ledPin = 13;      // select the pin for the LED
    int sensorValue = 0;  // variable to store the value coming from the sensor
    int ikPin = 3;
    void setup() {
      pinMode(ledPin, OUTPUT);
      pinMode(ikPin, INPUT);
      Serial.begin(9600);
    }

    void loop() {
     
    digitalWrite (ledPin, LOW);
      sensorValue = digitalRead(ikPin);
      Serial.println(sensorValue);
      if (sensorValue == 0) {
      digitalWrite (ledPin, LOW);
     
      do
      {sensorValue = digitalRead(ikPin);
      Serial.println(sensorValue);
      digitalWrite (ledPin, HIGH);}
      while (sensorValue == 1);
    Здесь пока только один приемник.
     
  2. ANV

    ANV Гуру

    Даташит говорит что когда на приемник сигнал не поступает, то на выходе единица.
    Более того, у него выход ОК со встроенной подтяжкой, поэтому у двух приемников можно соединить выходы и тогда в Адруино обрабатывать только один.
     
  3. мне нужно их обрабатывать отдельно. Использую их как инфракрасный барьер. Они стоят на небольшом расстоянии друг от друга. Необходимо определять зашел человек или вышел.
     
    Alex_PCB нравится это.
  4. ANV

    ANV Гуру

    Что является источником ик-излучения?
    Просто ик-светодиод не прокатит, тк в приемнике стоит полосовой фильтр на частоту модуляции для защиты от засветки
     
  5. Я с помощю ИК библиотеки отправляю .
    Код (Text):
    #include <IRremote.h> // это скачанная библиотека

    #define PanasonicAddress      0x4004

    #define P1        0x1000809  
    IRsend irsend;

    void setup()
    {
      Serial.begin(9600);  //установка порта на скорость 9600 бит/сек
    }
    void loop()
    {
      irsend.sendPanasonic(PanasonicAddress,P1);
    А может можно как то увеличить отправляемый сигнал с передатчика. Ведь еденицы во время приема это скорее всего промежутки между принимаемыми сигналами.
    Можно ли просто без библиотеки отправить сигнал смодулировав его например
    с цифрового пина и включать и выключать его с помощью delay.
    Код (Text):
    digitalWrite(13, HIGH);
      delay(10);            
      digitalWrite(13, LOW);    
      delay(10);  
     
  6. ANV

    ANV Гуру

    Отправляете с этой-же Ардуино или другой?
     
  7. Пробовал им просто мигать без библиотеки
    digitalWrite(3, HIGH);
    delayMicroseconds(150);
    digitalWrite(3, LOW);
    delayMicroseconds(150);
    Прием идет около 2х секунд потом прекращается.
    В порт тоже выводит и 0 и 1 в перемешку.
     
  8. ANV

    ANV Гуру

    Попробуйте задержку по 13 микросекунд.
     
  9. при включении около секунды выводятся чистые нули(как и нужно!!) а потом больше не реагирует выводит 1.
     
  10. ANV

    ANV Гуру

    Так, а какой ик-передатчик и как подключен?
     
  11. пробовал
    BL-L513IRAB, ИК светодиод 30" d=5мм 940нм, голубая линза
    BL-L513IRAC, ИК светодиод 30" d=5мм 940нм
    L-7113F3C (L-53F3C), Светодиод ИК d=5мм 940нм 30мВт
    АЛ107Б, Светодиод ИК
    TSAL5100, Светодиод ИК d=5мм 940нм 130мВт

    В принципе иногда работает стабильно с 13 милисекундами если вставить одновременно 2 ик диода и четко направить на приемник. Да и начинает работать если разорвать сначала луч рукой. работает так на раастоянии 10 сантиметров.
     
  12. ик диоды через резистор 220 ом
     
  13. может как то так:
    Код (Text):
    void loop() {
      for (int i=0; i < 10; i++)
      {
      digitalWrite(3, HIGH);  // turn the LED on (HIGH is the voltage level)
      delayMicroseconds(13);              // wait for a second
      digitalWrite(3, LOW);    // turn the LED off by making the voltage LOW
      delayMicroseconds(13);
      }
      digitalWrite(3, LOW);
    delayMicroseconds(182);
    }
     
  14. Всеравно не работает( Может какие другие задержки подобрать? Или это вообще не возможно?
     
  15. http://ergoz.ru/electronics/arduino...i-ch-1-priyomnik-tsop22-zapis-ir-signala.html
    Вот этот профессионал

     
  16. Такие скетчи у меня работают. проблема в том что к библиотеке irremoote можно подключить только один ик приемник. либо править библиотеку, меняь пины и называть ее по другому, и использовать сразу 2 библиотеки. Как ее поправить я не разобрался. Не могу найти нужные строки.
     
  17. Прошу извинить, если не прав. Давно. Очень давно баловался с инфракрасным датчиком и пультом от телевизора. Сначала обучал программу нажатием кнопок на пульте и при помощи ик-приемника программно привязывал действие, например включить светодиод. Копка 1, включался зеленый. Кнопка 2, включался красный. Пусть два и более ик-датчика работают одновременно и подключены к разным пинам контроллера. Программно Вы можете разделить? Для одного датчика обрабатывается только Кнопка 1, для другого обрабатывается Кнопка 2 и так далее. Сигналы то кнопок пульта разные. Вместо пульта потом можно поставить ик-передатчик. Можно даже использовать пульты разных производителей для каждого датчика.
     
  18. Подключено может быть 2 и более ИК приемника. НО библиотека может работать только с одним. Пины к которым подключать прописаны в библиотеке. Если не использовать библиотеку то при поступлении сигнала с пульта на него приходит сигнал который выглядит примерно так 10110110100101010101 без какой либо закономерности. Мне нужно чтобы приемник точно знал что на него идет сигнал (для инфракрасного барьера) и как сигнал прерывается делаем какую либо обработку.
    С библиотекаой такое сделать можно. Но приходится использовать 2 ардуино как приемник а третье ардуино обрабатыват сигналы уже от них.