Невозможно управлять вентилятором с помощью ИК-схемы, несмотря на захват и воспроизведение ИК-передач

Я пытаюсь использовать Arduino для управления моим оконным вентилятором Bionaire. Я последовал нескольким руководствам, чтобы построить схему ИК-приемника для записи паттернов, посылаемых пультом дистанционного управления для его пяти кнопок, но вентилятор, похоже, тоже не улавливает. Я проверил, что приемник Pi распознает команды из схемы передатчика Arduino точно так же, как и с реального пульта дистанционного управления вентилятора, и наоборот, но даже если я приложу вентилятор непосредственно к ИК-светодиоду, он не ответит ни на одну из команд из схемы.

Что еще мне нужно сделать, чтобы это работало правильно? В качестве альтернативы, как лучше всего активировать "кнопки" на удаленной печатной плате, изображенной выше?

Заранее спасибо за вашу помощь

Для будущих ссылок это сигналы, которые я записал для пульта дистанционного управления, которые совпадают с этим постом на electronics stackexchange.

power: 4E87E0AB
1300 -400 1300 -350 450 -1200 1300 -400 1300 -350 1300 -400 450 -1200 500 -1200 450 -1200 1300 -400 1300 -350 450
temp_up: 4EA240AE
1300 -400 1300 -350 450 -1200 1300 -400 1300 -350 1300 -400 450 -1200 450 -1250 450 -1200 450 -1250 1300 -350 1300
temp_down: 1D2FEFF6
1300 -400 1300 -350 450 -1250 1300 -350 1300 -350 500 -1200 1300 -350 500 -1200 450 -1200 500 -1200 450 -1200 450
mode: 39D41DC6
1300 -350 1300 -400 450 -1200 1300 -350 1300 -400 450 -1200 500 -1200 1300 -350 500 -1200 450 -1200 450 -1250 450
air_flow: E0984BB6
1300 -400 1300 -350 500 -1200 1300 -350 1300 -400 450 -1200 450 -1250 450 -1200 1300 -350 500 -1200 450 -1200 500

Это скетч, который я пытаюсь использовать для передачи данных (просто модифицированная версия send raw demo из библиотеки). Обратите внимание, что я также попытался использовать только 23 элемента в массиве (как первоначально записано), но это не имело никакого значения:

#include <IRremote.h>

IRsend irsend;

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

}

void loop() {
  int khz = 38; // несущая частота 38 кГц для протокола NEC
  Serial.println("Sending power");
  unsigned int irSignal[] = {1300,350, 1300,350, 500,1200, 1300,350, 1300,400, 1300,350, 450,1250, 450,1200, 450,1200, 1300,400, 1300,350, 500, 1200};
  irsend.sendRaw(irSignal, 24, khz); //Обратите внимание на подход, используемый для автоматического вычисления размера массива.

  delay(1000); //В этом примере сигнал будет повторяться примерно каждые 5 секунд.
}

ОТРЕДАКТИРУЙТЕ, чтобы показать, что я, кажется, могу воспроизвести реальный сигнал.

В следующем выводе из примера IRecvDump2 два верхних дампов сигнала поступают с реального пульта дистанционного управления, а два нижних - из моего RPi, отправляющего записанный сигнал. Они очень немного отличаются друг от друга, но, как мне кажется, в любом случае находятся в пределах вариации записи истинного сигнала.

Что еще я мог упустить? Может ли быть какой-то порог яркости, такой, что даже удержание Pi непосредственно до (т.Е. прикосновение) приемника вентилятора не будет работать? Какой-то другой сигнал пробуждения, который по какой-то причине Arduino не записывает и не принимает?

Encoding  : UNKNOWN
Code      : 4E87E0AB (32 bits)
Timing[23]: 
     +1300, - 400     +1300, - 350     + 450, -1200     +1350, - 350
     +1300, - 350     +1300, - 400     + 450, -1200     + 500, -1200
     + 450, -1200     +1300, - 400     +1250, - 400     + 450
unsigned int  rawData[23] = {1300,400, 1300,350, 450,1200, 1350,350, 1300,350, 1300,400, 450,1200, 500,1200, 450,1200, 1300,400, 1250,400, 450};  // UNKNOWN 4E87E0AB

Encoding  : UNKNOWN
Code      : 4E87E0AB (32 bits)
Timing[23]: 
     +1300, - 400     +1300, - 350     + 450, -1250     +1300, - 350
     +1300, - 400     +1300, - 350     + 450, -1200     + 500, -1200
     + 450, -1200     +1300, - 400     +1300, - 350     + 450
unsigned int  rawData[23] = {1300,400, 1300,350, 450,1250, 1300,350, 1300,400, 1300,350, 450,1200, 500,1200, 450,1200, 1300,400, 1300,350, 450};  // UNKNOWN 4E87E0AB

Encoding  : UNKNOWN
Code      : 4E87E0AB (32 bits)
Timing[23]: 
     +1350, - 350     +1300, - 350     + 450, -1200     +1300, - 350
     +1300, - 350     +1300, - 400     + 450, -1200     + 450, -1200
     + 450, -1200     +1350, - 350     +1300, - 350     + 450
unsigned int  rawData[23] = {1350,350, 1300,350, 450,1200, 1300,350, 1300,350, 1300,400, 450,1200, 450,1200, 450,1200, 1350,350, 1300,350, 450};  // UNKNOWN 4E87E0AB

Encoding  : UNKNOWN
Code      : 4E87E0AB (32 bits)
Timing[23]: 
     +1350, - 300     +1350, - 350     + 450, -1200     +1300, - 350
     +1300, - 350     +1350, - 350     + 450, -1200     + 450, -1200
     + 450, -1200     +1300, - 350     +1350, - 350     + 450
unsigned int  rawData[23] = {1350,300, 1350,350, 450,1200, 1300,350, 1300,350, 1350,350, 450,1200, 450,1200, 450,1200, 1300,350, 1350,350, 450};  // UNKNOWN 4E87E0AB

, 👍2

Обсуждение

Эти коды кажутся мне слишком короткими. Они также, похоже, не содержат преамбулы. Не могли бы вы рассказать, как вы получили эти коды сигналов?, @Gerben

Я получил сигналы от [IRRecvDump2 example](https://github.com/z3t0/Arduino-IRremote/blob/master/examples/IRreceiveDumpV2/IRreceiveDumpV2.ino ) в [Arduino-несменяемый] (https://github.com/z3t0/Arduino-IRremote ) библиотека. Мне тоже показалось, что сигналы выглядят странно, но я нашел еще один [пост в EE stack exchange] (https://electronics.stackexchange.com/questions/494863/what-ir-protocol-is-this ), где кто-то записал те же самые сигналы. Я использую пример IRSendRaw из той же библиотеки для отправки с Arduino и lirc irsend при отправке с Pi, @ihleonard

Обновил основной пост моим скетчем @jsotola, @ihleonard

есть еще одна вещь , которую нужно попробовать ... если у вас есть доступ к обучающему ИК - пульту дистанционного управления... используйте его , чтобы узнать одну из кнопок пульта дистанционного управления вентилятором и убедиться , что она может управлять вентилятором ... затем используйте его для изучения нерабочего сигнала arduino .... затем используйте arduino для записи изученного кода .... сравните его с исходными записанными значениями, @jsotola

еще одна вещь , которую вы могли бы попробовать .... установите все значения синхронизации в соответствии с тем , что указано в спецификации микросхемы контроллера ... эти два значения равны 1266 мкс и 422 мкс .... Конечный зазор должен составлять 6752 мкс ... так что "1300,350, 1300,350, 500,1200 ... должно быть 1266, 422, 1266, 422, 422, 1266 ...` и самые последние 1200 должны быть 6752, @jsotola

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

В вашем коде предполагается, что биты C1 и C2 установлены в 1, но, согласно ссылке обмена стеком EE, эти выводы являются плавающими, и поэтому их следует рассматривать как "0" вместо "1", как показано в ваших данных irSignal., @hcheung

@jsotola К сожалению, изменение интервалов для точного выравнивания в соответствии со спецификацией, похоже, не помогло., @ihleonard

@hcheung я это видел, но если это то, что записал мой arduino, отправленный с пульта дистанционного управления, то разве это не должно быть тем, что я отправляю на вентилятор?, @ihleonard

действительно ли ваше устройство выдает ИК-сигнал? ... проверьте это с помощью камеры вашего телефона, @jsotola

ДА. Я проверил с помощью своей камеры и, как я уже сказал, также попытался использовать один из pi / arduino для передачи, а другой для считывания, и оба направления распознают сигнал., @ihleonard

есть ли разница между сигналом, полученным с пульта дистанционного управления, и сигналом, полученным со второго arduino?, @jsotola

В [IRecvDump2](https://github.com/z3t0/Arduino-IRremote/blob/master/examples/IRreceiveDumpV2/IRreceiveDumpV2.ino ) выходной сигнал остается тем же, когда я отправляю записанный сигнал с моего Raspberry Pi, @ihleonard


1 ответ


-1

Интересный вопрос с большим количеством путей. Я ничего не знаю о вашем контроллере, но при работе с ИК-пультами в прошлом я обнаружил, что почти все ИК-пульты используют инфракрасный диапазон частот (300 ГГц - 400 ГГц). Этот диапазон не следует путать со скоростью модуляции (несущей частотой) пульта дистанционного управления. Коды дистанционного управления передаются в приемник с использованием скорости модуляции. Частота модуляции пультов дистанционного управления и телеприставок составляет от 36 кГц до 60 кГц, обычно от 36 кГц до 39 кГц. Попробуйте эту ссылку, она может быть немного избыточной, но она может помочь. http://www.pehratek.com/documents/FAQ-Infrared-Light-Control.pdf

,

Я думаю, вы имели в виду 300 ** Г ** Гц - 400 ГГц., @Gerben

@Gil В вашем ответе нет ссылки. Может быть, ты забыл об этом, @chrisl

Извините, я должен был уточнить: я использую [IRSendRaw example](https://github.com/z3t0/Arduino-IRremote/blob/master/examples/IRsendRawDemo/IRsendRawDemo.ino ) из библиотеки Arduino-UNremote для отправки, поэтому следует обрабатывать модуляцию 38 кГц., @ihleonard

Извините, я не знаком с этим примером или библиотекой. Извини, Гербен, я нажал "К" вместо "Г", спасибо, я изменил его., @Gil

@Gil ГГц - это грамм герц ... это должно быть ГГц, @jsotola