Решил я сделать управление компьютером по средствам пульта ДУ.
Что нам понадобится:
1. Пульт ДУ с протоколом NEC (я использовал Samsung 00054C)
2. TSOP ИК приёмник (HS0038)
3. 2 керамических конденсатора 0,1 МкФ
4. 2 электролитических конденсатора 10-1 МкФ
5. Резистор 100 Ом.
TSOP может быть любым с частотой от 36-40 кГц. Я использовал TSOP с несущей частотой 38 кГц, главная его особенность в инверсном выходе, при отсутствии сигнала на пин приходит 1, соответственно при появлении сигнала он посылает 0.
Подключаем по этой схеме ИК приёмник. Конечно можно просто его подключить к любому пину и подать питание, но тогда возможны ложные срабатывания. Электролитические конденсаторы можно поставить на 1 МкФ. INFR я подключил к 9 пину.
А дальше стоит почитать про протоколы работы пультов ДУ. К примеру отсюда.
Если читать лень, то суть протокола NEC (по которому работает мой пульт) сводится к тому что пульт передает 9 мс сигнал, это сигнал о начале передачи кода, его мы и будем пытаться отследить. После сигнала о начале передачи следует сам код длительностью 101 мс, который нам следует передавать по ком порту.
Листинг программы передачи кода через COM порт:
void setup() { Serial.begin(9600); digitalWrite(13,HIGH); } void loop() { int mStr;// время старта int mStop; // значения времени в момент считывания int Str; // значения времени в момент считывания int Stop; // значения времени в момент считывания int i; // буфер int j; boolean oneStep = false; // начало приёма кода boolean lastStep = false; //окончание кода pinMode(9,INPUT); mStr = micros(); Str = millis(); j = 0; if ((digitalRead(9) == 0)) { for(;;) { i = digitalRead(9);// считывание кода if(i == 0) { digitalWrite(13,LOW); } else { digitalWrite(13,HIGH); } Serial.println(i,DEC); mStop = micros(); j = j + i; //определение начала передачи if (((mStop-mStr) >= 9000) && (j==0) && (oneStep == false)) { Serial.println(2,DEC);//предаем 2 чтобы на компьютере отследить начало кода oneStep = true; j=0; mStr = micros(); } //определение конца передачи Stop = millis(); if ((Stop - Str) >= 110) { Serial.println(3,DEC); //предаем 3 чтобы на компьютере отследить конец кода oneStep = false; break; } } } }
Передав код через порт на требуется его принять. Реализацию этого я приведу на примере класса для C#.
class ComPort { private SerialPort port = new SerialPort("COM1", 9600); public char[] buffer; public string str = ""; // сюда пишется код принятый с COM порта private bool startFlag = false; public bool closeFlag = true; public ComPort() { port.Open(); } public void ReadPort() { for (; ; ) { buffer = port.ReadLine().ToCharArray(); if (buffer[0] == '2') { startFlag = true; str = ""; } if (startFlag == true) { str += buffer[0]; } if (buffer[0] == '3') { startFlag = false; } if (closeFlag == false) { break; } } } public void Close() { port.Close(); } }
Использовать этот клас нужно в отдельном потоке, потому что мы используем бесконечный цикл.
ComPort port = new ComPort(); ThreadStart threadDelegate; Thread newThread; threadDelegate = new ThreadStart(port.ReadPort); newThread = new Thread(threadDelegate); newThread.Start();
Я не большой мастер писать статьи, так что буду рад любым замечаниям.
UPD. Позже выложу полноценную программу для компьютера.
0 комментариев на «“Управление компьютером при помощи ИК приемника + Arduino”»
Спасибо большое!
— это вы зря! Статья очень даже получилась 🙂
Если применить библиотеку для ардуино поддерживающию NEC,SONY,RC5,RC6 то код на ардуине сильно упращается. А со стороны Window есть такая программа WinLIRC для управления компом с пульта. Кстати ИК приемники наиболее популярные и доступные этоTSOP1736 , TSOP1836 ну или смотреть TSOPxxXX — где хх это серия а ХХ частота, обвязка у них попроще резистор и конденсатор хотя народ бывает использует и без обвязки.
Тоже сначала хотел купить TSOP1736, в магазине его не нашлось. Взял попробовать HS0038 в таком же корпусе. Я сначала его без обвяза пробовал подключить, но или контакт был плавающим или ещё что-то, в итоге были ложные срабатывания.
TSOP1736 более популярный но и более старый, он сильно капризный и без обвязки не рекомендую.
TSOP1836 намного удобнее, питание 2.7 — 5.5 т.е можно применять в 3х вольтовых системах без преобразования уровня, обвязка в виде RC фильтра по питанию заявлена как опцианальная и опыт показывает что это действительно так.
по моему ардуина в качестве прослойки между сенсором и компом слишком жирно, в сети полно схем с подключением просто в ком порт и сотф к ней
отчасти вы правы, но это же просто начало 🙂 Например, можно использовать на ноутбуке у которого нет COM-портов 🙂
К тому же, этот пример можно адаптировать чтобы передавать сигналы роботу или управлять эффекторами умного дома, на базе дуины 🙂
+1 Я часто использую IR пульт для управления своим роботом.
А насчет жирности, можно взять готовую схему собрать и заработает.
А человек взял идею, подобрал комплектующие, собрал, Понял как оно работает!!!
Теперь ему не представляет проблемм сделать это и без ардуины.
Короче автор молодец. Критиковать все могут, а ты сделай лучше 😉