Реализация включение пк с помощью реле и ардурино с ПДУ.
- Войдите на сайт для отправки комментариев
Сб, 19/09/2015 - 21:10
Помогите, пожалуРасказываю свою проблему подробно. Давно мечтал сделать из старого компьютера HTPC. Но не как не мог подобрать хороший пульт. На форуме XBMC люди реализовали пульт с помощью arduino. ПДУ работает как клавиатура. А вкл/выкл пк происходит кратко временнымзамыканием реле на кнопку включение пк. Добрые людис форума поделились скетчем
// =============================================== // Управление компьютером с помощью Arduino Micro и ИК-пульта // IR2USB v 0.2 // (c) Nomad // =============================================== #include <IRremote.h> // =============================================== // пин, на который подключен ИК-датчик #define ir_dataPin A3 // пин, на который подключен управляющий контакт // реле включения ПК. Рабочие контакты реле должны // идти на кнопку <POWER> компьютера. #define PowerPin 10 #define hold_cycles 17000 // =============================================== unsigned int nTurn; unsigned long nPressedButton; IRrecv irrecv( ir_dataPin ); void setup() { nTurn = 0; nPressedButton = 0; irrecv.enableIRIn(); Keyboard.begin(); Serial.begin( 9600 ); } void ReleaseKey() { nTurn = 0; nPressedButton = 0; Keyboard.releaseAll(); } decode_results ir_data; void loop() { byte cNewKey = 0; if( irrecv.decode( &ir_data )) { if( ir_data.decode_type == 3 ) ir_data.value |= 0x800; else if( ir_data.decode_type == 4 ) ir_data.value |= 0x8000; Serial.print( " type = " ); Serial.print( ir_data.decode_type, DEC ); Serial.print( " code = " ); Serial.print( ir_data.value, HEX ); Serial.print( " bits = " ); Serial.println( ir_data.bits, DEC ); if( ir_data.value == nPressedButton ) ir_data.value = REPEAT; // Трансляция кодов кнопок пульта в клавиши клавиатуры switch( ir_data.value ) { case 0xE01F807F : // Реле включения/выключения компьютера digitalWrite( 10, LOW ); delay( 100 ); digitalWrite( 10,HIGH ); break; case 0x1: // Включение ТВ - F1 (10011) cNewKey = KEY_F1; break; case 0x80C: // Выключение ТВ - F2 cNewKey = KEY_F2; break; case 0x80A: // Language - L cNewKey = 'l'; break; case 0x838: // Menu - O cNewKey = 'o'; break; case 0x836: // Guide - G (11111) cNewKey = 'g'; break; case 0x95F: // Context menu - C (22222) cNewKey = 'c'; break; case 0x83B: // Back cNewKey = KEY_BACKSPACE; break; case 0x834: // [Blue] Home cNewKey = KEY_ESC; break; case 0x945: // [Green] Переключение звука - ТВ/ресивер - F7 (00093) cNewKey = KEY_F7; break; case 0x812: // Volume Up - F10 (00111) cNewKey = KEY_F10; break; case 0x959: // Volume Down - F9 (00222) cNewKey = KEY_F9; break; case 0x80D: // Mute - F8 cNewKey = KEY_F8; break; case 0x966: // ChUp (00001) cNewKey = KEY_PAGE_UP; break; case 0x97E: // ChDown (00002) cNewKey = KEY_PAGE_DOWN; break; case 0xE01F9A65: // Up cNewKey = KEY_UP_ARROW; break; case 0xE01F1AE5: // Left cNewKey = KEY_LEFT_ARROW; break; case 0xE01FBA45 : // OK cNewKey = KEY_RETURN; break; case 0xE01F7A85: // Right cNewKey = KEY_RIGHT_ARROW; break; case 0xE01F3AC5: // Down cNewKey = KEY_DOWN_ARROW; break; case 0x83C: // Rew - R cNewKey = 'r'; break; case 0x82B: // Play - P cNewKey = 'p'; break; case 0x83F: // FF - F cNewKey = 'f'; break; case 0xD35: // Prev - , (00091) cNewKey = ','; break; case 0x829: // Pause - " " cNewKey = ' '; break; case 0x94D: // Next - . (00092) cNewKey = '.'; break; case 0x82E: // Stop - X cNewKey = 'x'; break; case 0x801: // 1 cNewKey = '1'; break; case 0x802: // 2 cNewKey = '2'; break; case 0x803: // 3 cNewKey = '3'; break; case 0x804: // 4 cNewKey = '4'; break; case 0x805: // 5 cNewKey = '5'; break; case 0x806: // 6 cNewKey = '6'; break; case 0x807: // 7 cNewKey = '7'; break; case 0x808: // 8 cNewKey = '8'; break; case 0x809: // 9 cNewKey = '9'; break; case 0x800: // 0 cNewKey = '0'; break; default: nTurn = 0; } irrecv.resume(); } if( cNewKey ) { if( nPressedButton ) ReleaseKey(); nPressedButton = ir_data.value; Keyboard.press( cNewKey ); } else if( nPressedButton ) { if( ++nTurn >= hold_cycles ) ReleaseKey(); } }
Проблема заключается в том что, поменял я код кнопки ПДУ на свой. Но замыкания реле не происходит. Реле куплено специально для ардуино
Удалите эту тему!
Для начала настрой 10 пин на выход - http://arduino.ru/Reference/PinMode
Удалите эту тему!
Ещё одну будешь открывать?
Я когда создал тему обнаружил, что моих висит уже две темы. открыл обе и обнаружил что одна дописана, а вот эта только кусок.
Подскажите в какуюстроку вставить pinmode. Я просто в этом полный ноль. впервые встретился ардуино.(
Подскажите в какуюстроку вставить pinmode. Я просто в этом полный ноль. впервые встретился ардуино.(
По ссылке выше есть пример кода. Вставляется в функцию void setup(), она у вас в скетче уже есть.
Да, ещё - реле у вас включается низким уровнем (LOW), поэтому нужно перед pinMode() установить высокий уровень digitalWrite(10, HIGH). Иначе реле будет включено сразу после включения ардуины.
Короче, должно быть так:
digitalWrite(10, HIGH);
pinMode(10, OUTPUT);
Подскажите в какуюстроку вставить pinmode. Я просто в этом полный ноль. впервые встретился ардуино.(
По ссылке выше есть пример кода. Вставляется в функцию void setup(), она у вас в скетче уже есть.
Да, ещё - реле у вас включается низким уровнем (LOW), поэтому нужно перед pinMode() установить высокий уровень digitalWrite(10, HIGH). Иначе реле будет включено сразу после включения ардуины.
Короче, должно быть так:
digitalWrite(10, HIGH); pinMode(10, OUTPUT);
Огромное спасибо) Реле заработало. Но остался один вопрос. Если я пишу high то на реле горит постоянно зеленый светодид. при нажатии кнопки тухнет и снова загорается. а если low то не горит и при нажатии загорается . Какой правильный алгоритм работы реле оно должно быть постоянно работать.(то есть зеленый светодиод горит или наоборот?
Огромное спасибо) Реле заработало. Но остался один вопрос. Если я пишу high то на реле горит постоянно зеленый светодид. при нажатии кнопки тухнет и снова загорается. а если low то не горит и при нажатии загорается . Какой правильный алгоритм работы реле оно должно быть постоянно работать.(то есть зеленый светодиод горит или наоборот?
смотрю количество идиотов прогресирует... может идиотизм это инфекция какая?
Если я пишу high то на реле горит постоянно зеленый светодид. при нажатии кнопки тухнет и снова загорается. а если low то не горит и при нажатии загорается . Какой правильный алгоритм работы реле оно должно быть постоянно работать.(то есть зеленый светодиод горит или наоборот?
Модуль реле обычно имеет три контакта для подключения нагрузки: центральный (общий) и два боковых. Один боковой контакт постоянно замкнут на центральный (общий) (нормально замкнутые контакты) и размыкается при включении реле. Второй боковой контакт наоборот - постоянно разомкнут с центральным (общим) (нормально разомкнутые контакты) и замыкается при включении реле.
Чтобы у вас "нажималась кнопка" кратковременной подачей высокого уровня, а в остальное время реле было выключено - нужно подключить эту "кнопку" к реле к нормально разомкнутым контактам.
P.S. Я так понял, реле всё-таки включается высоким уровнем (HIGH), Значит поменять ещё в коде:
.....
Модуль реле обычно имеет три контакта для подключения нагрузки: центральный (общий) и два боковых. Один боковой контакт постоянно замкнут на центральный (общий) (нормально замкнутые контакты) и размыкается при включении реле. Второй боковой контакт наоборот - постоянно разомкнут с центральным (общим) (нормально разомкнутые контакты) и замыкается при включении реле.
Чтобы у вас "нажималась кнопка" кратковременной подачей высокого уровня, а в остальное время реле было выключено - нужно подключить эту "кнопку" к реле к нормально разомкнутым контактам.
P.S. Я так понял, реле всё-таки включается высоким уровнем (HIGH), Значит поменять ещё в коде:
.....
Еще раз благодарю, выручили! Теперь не вставая с дивана буду управлять медиатекой)