오랜만에 ICbanQ의 무상체험단에 당첨되었다.
이번 체험 제품은…
DFRobot사의 Beginner Kit For Arduino v3.0 ^^;
해당 제품은 다음의 링크에서 확인할 수 있습니다.
http://www.icbanq.com/shop/product_detail.asp?prod_code=P005605397
[Beginner Kit For Arduino v3.0 개봉기]
블로그 원본글 : http://www.beanbox.co.kr/wordpress/?p=1057
icbanq 카페글 : http://cafe.naver.com/icbanq/1663
[Beginner Kit For Arduino v3.0 활용기 #1 – IR Remote + Servo]
블로그 원본글 : http://www.beanbox.co.kr/wordpress/?p=1101
icbanq 캬페글 : http://cafe.naver.com/icbanq/1713
————————————————————————-
어찌하다보니 또 IR Remote를 활용한 것이다.
리모콘이 있으니 예전에 해볼려고 했던것을 해보자.
무드등이다.
여러가지 색을 낼 수 있다는 장점이 있지만…
해당 색을 선택하는 방법이 문제다.
직접적인 스위치를 달거나.
블루투스를 통해서 폰으로 제어도 한다.
이번에는 적외선 리모콘을 통해서 무드등을 제어하는 것을 해보자.
물론 리모콘에 프린트된 내용을 최대한 활용하려 했지만… ^^;
종이를 올려 붙이던지…ㅋㅋ
전체 구성 이미지는 없지만 아래를 참고 하고 몇가지만(한두가지?)만 수정하면 된다.
위 두개의 연결도를 결합한다.
단… 상단의 LED와 저항은 연결하지 않는다.
그럼 당연히 GND와 10핀도 연결을 안하는 것이다.
그리고 아래의 RGB LED에서 11에 연결된 핀을 6으로 옮긴다.
IR Remote의 핀과 중복이 되어서 그렇다.
IR Remote에서 IRrecv irrecv(RECV_PIN) 를 원하는 핀으로 수정하면 되는걸로 알고 있는데…
안된다. ㅠㅜ
헤더 파일이 잘못되었나보다.
처음엔 6번 핀을 이용 했었는데…
동작도 몇번에 한번 될까 말까 하고… 무엇보다 11번을 LED 출력으로 썼었는데 동작을 하지 않는다.
결국은 그냥 IR Remote는 계속 11번을 쓰게 하고 PWM을 사용할 핀을 6번으로 했다.
이거 처리 방법 아시는 분!!!
다시 정리하면…
IR Remote는 VCC, GND, 11번핀
RGB LED는 GND, 9,10,6번핀
동작은 다음과 같이 한다.
코드 표는 이전의 활용기 #1을 참조 바란다. 활용기 #1
버튼에 프린트 된것과 무관하게 동작을 입력 시켰다.
Vol+ : 1단위 변화
Func/stop : 10단위 변화
◀◀/▼ : Red LED Up/Down
▶/Vol- : Green LED Up/Down
▶▶/▲ : Blue LED Up/Down
0~9 : 저장되어 있는 값으로 바로 변경
ST/REPT + 0~9 : 해당 번호로 지금의 색을 저장
RGB 각각을 변경할 수 있다.
Vol+와 Func/Stop 버튼을 이용해서 변화하는 단계를 1또는 10으로 설정할 수 있다.
0~9 버튼을 누르면 저장되어져있는 값으로 바로 색이 선택된다.
ST/REPT와 0~9 버튼을 누르면 지금 현재의 색을 해당 번호에 저장하여 나중에 바로 선택할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 |
#include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; int stepValue = 1; // 증가값 int Leds[3] = {9, 10, 6}; // LED 연결된 핀. RGB int LedsColor[3] = {128, 128, 128}; // 현재 출력할 RGB값 int LedsSave[][3] = {{255, 0, 0}, {255, 128, 0}, {255, 255, 0}, {0, 255, 0}, {0, 0, 255}, {0, 0, 128}, {255, 0, 255}, {255, 255, 255}, {0, 255, 128}, {148, 198, 14}}; // 번호값에 저장되어 있는 LED값 boolean saveing = LOW; // ST/REPT가 눌러졌는지 void setup() { Serial.begin(9600); irrecv.enableIRIn(); for (int i=0;i<3;i++) { pinMode(Leds[i], OUTPUT); } } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); switch (results.value) { case 0xFD00FF: //Serial.println("Power"); saveing = LOW; break; case 0xFD807F: //Serial.println("Vol+"); Serial.println("Step Value : 1"); stepValue = 1; saveing = LOW; break; case 0xFD40BF: //Serial.println("Func/stop"); Serial.println("Step Value : 10"); stepValue = 10; saveing = LOW; break; case 0xFD20DF: //Serial.println("Prev"); LedsColor[0] = LedsColor[0] + stepValue; if (LedsColor[0] > 255) { LedsColor[0] = 255; } Serial.print("Led Red Up : "); Serial.println(LedsColor[0]); saveing = LOW; break; case 0xFDA05F: //Serial.println("Start"); LedsColor[1] = LedsColor[1] + stepValue; if (LedsColor[1] > 255) { LedsColor[1] = 255; } Serial.print("Led Green Up : "); Serial.println(LedsColor[1]); saveing = LOW; break; case 0xFD609F: //Serial.println("Next"); LedsColor[2] = LedsColor[2] + stepValue; if (LedsColor[2] > 255) { LedsColor[2] = 255; } Serial.print("Led Blue Up : "); Serial.println(LedsColor[2]); saveing = LOW; break; case 0xFD10EF: //Serial.println("Down"); LedsColor[0] = LedsColor[0] - stepValue; if (LedsColor[0] < 0) { LedsColor[0] = 0; } Serial.print("Led Red Dwon : "); Serial.println(LedsColor[0]); saveing = LOW; break; case 0xFD906F: //Serial.println("Vol-"); LedsColor[1] = LedsColor[1] - stepValue; if (LedsColor[1] < 0) { LedsColor[1] = 0; } Serial.print("Led Green Dwon : "); Serial.println(LedsColor[1]); saveing = LOW; break; case 0xFD50AF: //Serial.println("Up"); LedsColor[2] = LedsColor[2] - stepValue; if (LedsColor[2] < 0) { LedsColor[2] = 0; } Serial.print("Led Blue Dwon : "); Serial.println(LedsColor[2]); saveing = LOW; break; case 0xFD30CF: //Serial.println("Num 0"); if (saveing) { Serial.println("Save 0"); LedsSave[0][0] = LedsColor[0]; LedsSave[0][1] = LedsColor[1]; LedsSave[0][2] = LedsColor[2]; saveing = LOW; } else { Serial.println("Load 0"); LedsColor[0] = LedsSave[0][0]; LedsColor[1] = LedsSave[0][1]; LedsColor[2] = LedsSave[0][2]; } break; case 0xFDB04F: Serial.println("EQ"); saveing = LOW; break; case 0xFD708F: //Serial.println("ST/REPT"); Serial.println("Save..."); saveing = HIGH; break; case 0xFD08F7: //Serial.println("Num 1"); if (saveing) { Serial.println("Save 1"); LedsSave[1][0] = LedsColor[0]; LedsSave[1][1] = LedsColor[1]; LedsSave[1][2] = LedsColor[2]; saveing = LOW; } else { Serial.println("Load 1"); LedsColor[0] = LedsSave[1][0]; LedsColor[1] = LedsSave[1][1]; LedsColor[2] = LedsSave[1][2]; } break; case 0xFD8877: //Serial.println("Num 2"); if (saveing) { Serial.println("Save 2"); LedsSave[2][0] = LedsColor[0]; LedsSave[2][1] = LedsColor[1]; LedsSave[2][2] = LedsColor[2]; saveing = LOW; } else { Serial.println("Load 2"); LedsColor[0] = LedsSave[2][0]; LedsColor[1] = LedsSave[2][1]; LedsColor[2] = LedsSave[2][2]; } break; case 0xFD48B7: //Serial.println("Num 3"); if (saveing) { Serial.println("Save 3"); LedsSave[3][0] = LedsColor[0]; LedsSave[3][1] = LedsColor[1]; LedsSave[3][2] = LedsColor[2]; saveing = LOW; } else { Serial.println("Load 3"); LedsColor[0] = LedsSave[3][0]; LedsColor[1] = LedsSave[3][1]; LedsColor[2] = LedsSave[3][2]; } break; case 0xFD28D7: //Serial.println("Num 4"); if (saveing) { Serial.println("Save 4"); LedsSave[4][0] = LedsColor[0]; LedsSave[4][1] = LedsColor[1]; LedsSave[4][2] = LedsColor[2]; saveing = LOW; } else { Serial.println("Load 4"); LedsColor[0] = LedsSave[4][0]; LedsColor[1] = LedsSave[4][1]; LedsColor[2] = LedsSave[4][2]; } break; case 0xFDA857: //Serial.println("Num 5"); if (saveing) { Serial.println("Save 5"); LedsSave[5][0] = LedsColor[0]; LedsSave[5][1] = LedsColor[1]; LedsSave[5][2] = LedsColor[2]; saveing = LOW; } else { Serial.println("Load 5"); LedsColor[0] = LedsSave[5][0]; LedsColor[1] = LedsSave[5][1]; LedsColor[2] = LedsSave[5][2]; } break; case 0xFD6897: //Serial.println("Num 6"); if (saveing) { Serial.println("Save 6"); LedsSave[6][0] = LedsColor[0]; LedsSave[6][1] = LedsColor[1]; LedsSave[6][2] = LedsColor[2]; saveing = LOW; } else { Serial.println("Load 6"); LedsColor[0] = LedsSave[6][0]; LedsColor[1] = LedsSave[6][1]; LedsColor[2] = LedsSave[6][2]; } break; case 0xFD18E7: //Serial.println("Num 7"); if (saveing) { Serial.println("Save 7"); LedsSave[7][0] = LedsColor[0]; LedsSave[7][1] = LedsColor[1]; LedsSave[7][2] = LedsColor[2]; saveing = LOW; } else { Serial.println("Load 7"); LedsColor[0] = LedsSave[7][0]; LedsColor[1] = LedsSave[7][1]; LedsColor[2] = LedsSave[7][2]; } break; case 0xFD9867: //Serial.println("Num 8"); if (saveing) { Serial.println("Save 8"); LedsSave[8][0] = LedsColor[0]; LedsSave[8][1] = LedsColor[1]; LedsSave[8][2] = LedsColor[2]; saveing = LOW; } else { Serial.println("Load 8"); LedsColor[0] = LedsSave[8][0]; LedsColor[1] = LedsSave[8][1]; LedsColor[2] = LedsSave[8][2]; } break; case 0xFD58A7: //Serial.println("Num 9"); if (saveing) { Serial.println("Save 9"); LedsSave[9][0] = LedsColor[0]; LedsSave[9][1] = LedsColor[1]; LedsSave[9][2] = LedsColor[2]; saveing = LOW; } else { Serial.println("Load 9"); LedsColor[0] = LedsSave[9][0]; LedsColor[1] = LedsSave[9][1]; LedsColor[2] = LedsSave[9][2]; } break; } irrecv.resume(); } for (int i=0;i<3;i++) { analogWrite(Leds[i], LedsColor[i]); } } |
다음은 동작 동영상이다.
다른 상태 LED 등을 이용해서 값 저장이나 최고, 최소값을 알리는 것도 넣으면 좋을 것 같다.
급하게 만들어 본다고 기본적인 구동에 대한 기능만 넣었다.
전원 부분은 지난번 활용기 #1에 있는 형태를 이용하면 될것 같다.
그리고 저장되는 데이터는 EEPROM에 저장하면 전원이 꺼졌더라도 기존의 셋팅값을 계속해서 유지할 수 있을 것 같다.
※ 본 제품은 아이씨뱅큐 무상체험단 21기 활동의 일환으로 체험 제품을 제공받아 작성되었습니다. http://www.icbanq.com