Невозможно управлять вентилятором с помощью ИК-схемы, несмотря на захват и воспроизведение ИК-передач
Я пытаюсь использовать 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
@ihleonard, 👍2
Обсуждение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
- Как отправить данные на 15 метров с помощью KY-005
- как увеличить дальность действия KY-005?
- Инфракрасная низкочастотная передача
- Выполнение простого включения/выключения ИК-сервопривода.
- Использовать кварцевые генераторы для изменения частоты инфракрасного излучения?
- Как сканировать температуру MLX90614ESF после того, как MFRC522 сканирует RFID-метку?
- Автопарковка на arduino
- Различение нескольких инфракрасных передатчиков
Эти коды кажутся мне слишком короткими. Они также, похоже, не содержат преамбулы. Не могли бы вы рассказать, как вы получили эти коды сигналов?, @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