多功能智慧家庭萬能手機搖控器 張右昇(49937043) 李政澤(49937034) 曾群翔(49937057) 成員
Summary 我們想要利用Arduino與手機藍芽間的通訊,與 紅外線發射的功能,來做出一個萬能型遙控器, 使用者只須要使用一隻小小的手機,就能夠遙 控家裡所有的電器。
須安裝IRremote library,然後將紅外線sensor接 上Arduino,並利用IRremote中的函數去撰寫程式 接收每個按鍵所發出的紅外線,然後解碼,利 用Serial.print顯示在螢幕上,方便待會使用。 當接收到相對應的藍芽訊號時,利用IRremote library中的irsend來發射紅外線訊號,以達到利 用手機取代遙控的功能。
Hardware Required Arduino uno Board、38Khz紅外線sensor、藍芽模 組、紅外線發射LED、紅外線遙控器、USB cable、 麵包版、Android手機、冷氣、電視。
Schematic1
Schematic2
Arduino UNO
藍芽模組
紅外線發射器
紅外線接收器
Demo 冷氣Demo影片 http://youtu.be/nyK7FY2_tw4 電視Demo影片 http://youtu.be/gnkjcnmzQt4
Code:紅外線接收解碼 #include <IRremote.h> const int irReceiverPin = 2; IRrecv irrecv(irReceiverPin); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); }
case NEC: Serial.print("NEC"); break; case SONY: Serial.print("SONY"); void showIRProtocol(decode_results *results) { Serial.print("Protocol: "); switch(results->decode_type) case NEC: Serial.print("NEC"); break; case SONY: Serial.print("SONY"); case RC5: Serial.print("RC5"); break; case RC6: Serial.print("RC6"); default: Serial.print("Unknown encoding"); }
Serial.print(", irCode: "); Serial.print(results->value, HEX); // 紅外線編碼 Serial.print(", bits: "); Serial.println(results->bits); // 紅外線編碼位元數 } void loop() { if (irrecv.decode(&results)) showIRProtocol(&results); irrecv.resume();
Code:藍芽接收與紅外線發射 #include <IRremote.h> IRsend irsend; void setup() { Serial.begin(9600); }
void loop() { if(Serial.available()) { unsigned char charreceived = Serial.read(); switch(charreceived) case 'q': irsend.sendNEC(0xA05D48B7, 32); Serial.println(" air conditioner power"); break; case 'w': irsend.sendNEC(0xA05D18E7, 32); Serial.println(" degreeup");
case 'e': irsend.sendNEC(0xA05D9867, 32); Serial.println(" degreedown"); break; case 'r': irsend.sendNEC(0xA05D58A7, 32); Serial.println(" time"); case 'a': irsend.sendNEC(0x20DF10EF, 32); Serial.println(" TV power");
case '1': irsend.sendNEC(0x20DF8877, 32); Serial.println(" TV 1"); break; case '2': irsend.sendNEC(0x20DF48B7, 32); Serial.println(" TV 2"); case '3': irsend.sendNEC(0x20DFC837, 32); Serial.println(" TV 3");
case '4': irsend.sendNEC(0x20DF28D7, 32); Serial.println(" TV 4"); break; case '5': irsend.sendNEC(0x20DFA857, 32); Serial.println(" TV 5"); case '6': irsend.sendNEC(0x20DF6897, 32); Serial.println(" TV 6");
case '7': irsend.sendNEC(0x20DFE817, 32); Serial.println(" TV 7"); break; case '8': irsend.sendNEC(0x20DF18E7, 32); Serial.println(" TV 8"); case '9': irsend.sendNEC(0x20DF9867, 32); Serial.println(" TV 9");
case '0': irsend.sendNEC(0x20DF08F7, 32); Serial.println(" TV 0"); break; case 's': irsend.sendNEC(0x20DF40BF, 32); Serial.println(" TV volume+"); case 'x': irsend.sendNEC(0x20DFC03F, 32); Serial.println(" TV volume-");
case 'z': irsend.sendNEC(0x20DFD02F, 32); Serial.println(" tv/video change"); break; default: } Serial.flush(); delay(10); case 'd': irsend.sendNEC(0x20DF00FF, 32); Serial.println(" TV channel+"); break; case 'c': irsend.sendNEC(0x20DF807F, 32); Serial.println(" TV channel-");