작년 봄에 Arduino Cookbook을 계약하고 한참 번역 중이었는데, 작년 이맘 때쯤 이 책의 개정판 소식을 전해들었습니다. 저희는 잠시 맨붕 상태가 되었답니다. ㅠㅠ 번역이 이미 절반 이상 완료된 상태였는데 개정판이라니.. 오라일리에 급히 문의를 해보니 아두이노 1.0 버전에 맞춰 수정 및 변경하기 위해서랍니다. 그리고 다행히도 개정판 주기가 짧아 2판으로의 계약 변경을 추가 비용 없이 해주겠다는 연락을 받았습니다. 휴....
그런데 이번에는 번역이 문제였습니다. 역자이신 윤순백 님은 이미 1판 번역을 절반 이상을 마무리한 상태였거든요. 이럴 경우는 보통 이미 번역한 부분에 대해 어느 정도의 작업비를 지불하는 것이 상식일 텐데, 자초지종을 말씀드렸더니 윤순백 님도 2판으로의 재번역에 흔쾌히 수락해주셨습니다. 이 자리를 빌어 다시 한 번 감사의 말씀을 드립니다. 그리고 다행히도 2판 자료를 받아 1판과 비교해보니 번역한 부분까지는 코드의 변경 외에는 거의 수정이 없었습니다. 정말 다행이었죠.. 아무튼 이런 우여곡절 끝에 출간을 앞둔 지금은 정말 마음이 홀가분합니다. ^^;
이번에 출간되는 [레시피로 배우는 아두이노 쿡북(제2판)]은 접촉, 소리, 위치, 열 및 빛을 감지하여 반응할 수 있는 장난감, 감지기, 로봇 및 인터랙티브 의상과 같은 다양한 오브젝트와 프로토타입을 만드는 데 도움이 되는 200가지 이상의 팁과 기술이 담겨 있습니다. 쿡북(cookbook)이라는 타이틀에 걸맞게 아두이노의 다양한 활용을 요리책을 뒤적이듯이 쉽게 찾아 볼 수 있도록 구성되어 있습니다. 아래 올려드리는 샘플 파일과 목차 등을 통해 확인해보시기 바랍니다.
Chapter 1 시작하기 _ 1 1.0 소개 _ 1 1.1 통합 개발 환경(IDE) 설치하기 _ 5 1.2 아두이노 보드 설정하기 _ 9 1.3 통합 개발 환경(IDE)에서 아두이노 스케치 준비하기 _ 12 1.4 Blink 스케치 업로드 및 실행하기 _ 15 1.5 스케치 작성 및 저장하기 _ 17 1.6 아두이노 사용하기 _ 20
Chapter 2 스케치 만들기 _ 25 2.0 소개 _ 25 2.1 아두이노 프로그램 구조화하기 _ 26 2.2 간단한 기본 유형(변수) 사용하기 _ 28 2.3 부동 소수점 숫자 사용하기 _ 30 2.4 여러 개의 값으로 구성된 배열 작업 _ 33 2.5 아두이노의 문자열 기능 사용하기 _ 37 2.6 C 문자열 사용하기 _ 43 2.7 쉼표로 구분된 텍스트를 그룹으로 분리하기 _ 45 2.8 숫자를 문자열로 변환하기 _ 48 2.9 문자열을 숫자로 변환하기 _ 50 2.10 코드를 기능 블록으로 구조화하기 _ 53 2.11 하나의 함수에서 두 개 이상의 값 리턴하기 _ 59 2.12 조건에 따라 작업 수행하기 _ 62 2.13 명령문 시퀀스 반복하기 _ 63 2.14 카운터를 사용하여 명령문 반복하기 _ 66 2.15 루프 종료하기 _ 70 2.16 단일 변수를 기반으로 다양한 작업 수행하기 _ 70 2.17 문자 및 숫자 값 비교하기 _ 73 2.18 문자열 비교하기 _ 76 2.19 논리 비교 수행하기 _ 77 2.20 비트 연산 수행하기 _ 78 2.21 연산과 할당 결합하기 _ 81
Chapter 3 수학 연산자 사용하기 _ 83
3.0 소개 _ 83 3.1 더하기, 빼기, 곱하기 그리고 나누기 _ 83 3.2 값 증가 및 감소시키기 _ 85 3.3 두 값을 나눈 후 나머지 찾기 _ 86 3.4 절댓값 확인하기 _ 87 3.5 숫자를 일정 범위의 값으로 제한하기 _ 88 3.6 여러 값의 최솟값 또는 최댓값 찾기 _ 89 3.7 숫자의 거듭 제곱 구하기 _ 91 3.8 제곱근 구하기 _ 92 3.9 부동 소수점 숫자 반올림하기 _ 92 3.10 삼각 함수 사용하기 _ 94 3.11 난수 생성하기 _ 95 3.12 비트 설정 및 읽기 _ 98 3.13 비트 이동하기 _ 102 3.14 int 또는 long형 데이터에서 상위 및 하위 바이트 추출하기 _ 104 3.15 상위 및 하위 바이트를 사용하여 int 또는 long형 값 만들기 _ 106
Chapter 4 시리얼 통신 _ 109 4.0 소개 _ 109 4.1 아두이노의 디버그 정보를 컴퓨터로 보내기 _ 116 4.2 아두이노에서 형식 지정된 텍스트 및 숫자 데이터 보내기 _ 120 4.3 아두이노에서 시리얼 데이터 받기 _ 124 4.4 아두이노에서 단일 메시지로 여러 텍스트 필드 전송하기 _ 130 4.5 아두이노에서 여러 텍스트 필드를 단일 메시지로 받기 _ 136 4.6 아두이노에서 2진 데이터 보내기 _ 141 4.7 컴퓨터에서 아두이노의 2진 데이터 받기 _ 146 4.8 Processing에서 아두이노로 2진 값 보내기 _ 148 4.9 여러 아두이노 핀의 값 보내기 _ 151 4.10 PC나 Mac에서 마우스 커서를 이동하는 방법 _ 156 4.11 아두이노로 Google 어스 제어하기 _ 161 4.12 아두이노 데이터를 컴퓨터 파일에 로깅하기 _ 167 4.13 동시에 두 개의 시리얼 장치에 데이터 전송하기 _ 171 4.14 동시에 두 장치의 시리얼 데이터 수신하기 _ 175 4.15 시리얼 데이터 송수신을 위해 컴퓨터에서 Processing 설정하기 _ 180
Chapter 5 간단한 디지털 및 아날로그 입력 _ 183 5.0 소개 _ 183 5.1 스위치 사용하기 _ 187 5.2 외부 저항 없이 스위치 사용하기 _ 192 5.3 스위치 닫힘을 안정적으로 감지하기 _ 194 5.4 스위치의 눌림 시간 확인하기 _ 197 5.5 키패드 읽기 _ 203 5.6 아날로그 값 읽기 _ 207 5.7 값 범위 변경하기 _ 209 5.8 7개 이상의 아날로그 입력 읽기 _ 212 5.9 최대 5볼트의 전압 표시하기 _ 215 5.10 전압 변경에 대응하기 _ 219 5.11 5볼트 이상의 전압 측정하기(전압 분배기) _ 220
Chapter 6 센서로부터 입력받기 _ 225 6.0 소개 _ 225 6.1 이동 감지하기 _ 228 6.2 조명 감지하기 _ 231 6.3 동작 감지하기(적외선 감지기 통합) _ 233 6.4 거리 측정하기 _ 235 6.5 정확한 거리 측정하기 _ 240 6.6 진동 감지하기 _ 244 6.7 소리 감지하기 _ 246 6.8 온도 측정하기 _ 250 6.9 RFID 태그 판독하기 _ 254 6.10 로터리 이동 추적하기 _ 257 6.11 두 개 이상 로터리 인코더의 이동 추적하기 _ 261 6.12 실행 중인 스케치에서 로터리 이동 추적하기 _ 263 6.13 마우스 사용하기 _ 266 6.14 GPS로부터 위치받기 _ 271 6.15 자이로스코프를 사용하여 회전 감지하기 _ 277 6.16 방향 감지하기 _ 284 6.17 게임 컨트롤 패드(PlayStation)의 입력받기 _ 290 6.18 가속도 읽기 _ 293
Chapter 7 시각적 출력 _ 297 7.0 소개 _ 297 7.1 LED 연결 및 사용하기 _ 302 7.2 LED 밝기 조절하기 _ 305 7.3 고출력 LED 사용하기 _ 307 7.4 LED 색상 조정하기 _ 310 7.5 여러 개의 LED 연결하기: 막대 그래프 만들기 _ 314 7.6 여러 개의 LED 연결하기: 체이스 시퀀스 만들기 _ 318 7.7 멀티플렉싱을 사용하여 LED 매트릭스 제어하기 _ 319 7.8 LED 매트릭스에 이미지 표시하기 _ 323 7.9 LED 매트릭스 제어하기: 찰리플렉싱 _ 326 7.10 7세그먼트 LED 디스플레이 구동하기 _ 334 7.11 멀티 7세그먼트 LED 디스플레이 사용하기: 멀티플렉싱 _ 337 7.12 MAX7221 시프트 레지스터를 사용하여 멀티 7세그먼트 LED 디스플레이 구동하기 _ 340 7.13 MAX72xx 시프트 레지스터를 사용하여 LED 배열 제어하기 _ 343 7.14 PWM 확장 칩(TLC5940)으로 아날로그 출력 수 늘리기 _ 346 7.15 아날로그 계측기를 디스플레이로 사용하기 _ 350
Chapter 8 물리적 출력 _ 353 8.0 소개 _ 353 8.1 서보 위치 제어하기 _ 357 8.2 포텐셔미터나 센서를 통해 2개 이하의 서보 제어하기 _ 359 8.3 연속 회전 서보의 속도 제어하기 _ 361 8.4 컴퓨터 명령으로 서보 제어하기 _ 363 8.5 브러시리스 모터 구동하기(일반형 변속기 사용) _ 366 8.6 솔레노이드와 릴레이 제어하기 _ 367 8.7 진동 모터 사용하기 _ 369 8.8 트랜지스터를 사용하여 브러시드 모터 구동하기 _ 372 8.9 H브릿지를 사용하여 브러시드 모터의 방향 제어하기 _ 374 8.10 H브릿지를 사용하여 브러시드 모터의 방향과 속도 제어하기 _ 377 8.11 센서를 사용하여 브러시드 모터의 방향과 속도 제어하기(L293 H브릿지) _ 380 8.12 바이폴라 스텝퍼 모터 구동하기 _ 387 8.13 바이폴라 스텝퍼 모터 구동하기(EasyDriver 보드 사용) _ 391 8.14 유니폴라 스텝퍼 모터 구동하기(ULN2003A) _ 395
Chapter 9 오디오 출력 _ 399 9.0 소개 _ 399 9.1 신호음 재생하기 _ 402 9.2 간단한 멜로디 재생하기 _ 405 9.3 2개 이상의 동시 신호음 생성하기 _ 407 9.4 오디오 신호음 생성 및 LED 페이딩 _ 410 9.5 WAV 파일 재생하기 _ 413 9.6 MIDI 제어하기 _ 417 9.7 오디오 신디사이저 만들기 _ 421
Chapter 10 원격으로 외부 장치 제어하기 _ 425 10.0 소개 _ 425 10.1 적외선 리모컨에 응답하기 _ 426 10.2 적외선 리모컨 신호 디코딩하기 _ 430 10.3 리모컨 신호 모방하기 _ 434 10.4 디지털 카메라 제어하기 _ 437 10.5 원격 제어 스위치로 AC 장치 제어하기 _ 440
Chapter 11 디스플레이 사용하기 _ 445 11.0 소개 _ 445 11.1 텍스트 LCD 디스플레이 연결 및 사용하기 _ 446 11.2 텍스트 서식 지정하기 _ 451 11.3 커서와 디스플레이를 켜거나 끄기 _ 454 11.4 텍스트 스크롤하기 _ 456 11.5 특수 기호 표시하기 _ 460 11.6 사용자 정의 문자 만들기 _ 463 11.7 단일 문자보다 큰 기호 표시하기 _ 466 11.8 단일 문자보다 작은 픽셀 표시하기 _ 469 11.9 그래픽 LCD 디스플레이 연결 및 사용하기 _ 472 11.10 그래픽 디스플레이에 사용할 비트맵 만들기 _ 477 11.11 TV에 텍스트 표시하기 _ 480
Chapter 12 시간과 날짜 사용하기 _ 487 12.0 소개 _ 487 12.1 지연 시간 만들기 _ 487 12.2 millis 함수로 기간 결정하기 _ 489 12.3 좀 더 정확한 펄스 기간 측정하기 _ 493 12.4 아두이노를 시계로 사용하기 _ 496 12.5 주기적으로 함수를 호출하는 알람 만들기 _ 506 12.6 실시간 클럭 사용하기 _ 510
Chapter 13 I2C와 SPI를 사용하여 통신하기 _ 517 13.0 소개 _ 517 13.1 BlinkM 모듈을 사용하여 RGB LED 제어하기 _ 522 13.2 Wii 눈차크 가속도계 사용하기 _ 528 13.3 외부 실시간 클럭 사용하기 _ 534 13.4 외부 EEPROM 메모리 추가하기 _ 536 13.5 디지털 온도계로 온도 판독하기 _ 541 13.6 2개의 배선만으로 4개의 7세그먼트 LED 구동하기 _ 547 13.7 I2C 포트 확장기 통합하기 _ 551 13.8 SPI를 사용하여 멀티 7세그먼트 디스플레이 구동하기 _ 554 13.9 2개 이상의 아두이노 보드끼리 통신하기 _ 558
Chapter 14 무선 통신 _ 563 14.0 소개 _ 563 14.1 저가형 무선 모듈을 사용하여 메시지 보내기 _ 564 14.2 ZigBee 또는 802.15.4 네트워크에 아두이노 연결하기 _ 571 14.3 특정 XBee에 메시지 보내기 _ 579 14.4 XBee 간에 센서 데이터 보내기 _ 582 14.5 XBee에 연결된 액츄에이터 활성화하기 _ 589 14.6 저가형 트랜시버를 사용하여 메시지 보내기 _ 595 14.7 블루투스 장치와 통신하기 _ 602
Chapter 15 이더넷과 네트워킹 _ 607 15.0 소개 _ 607 15.1 이더넷 쉴드 설정하기 _ 611 15.2 자동으로 IP 주소받기 _ 614 15.3 호스트 이름으로 IP 주소 찾기(DNS) _ 616 15.4 웹 서버 데이터 요청하기 _ 618 15.5 XML을 사용하여 웹 서버 데이터 요청하기 _ 624 15.6 아두이노를 웹 서버로 설정하기 _ 628 15.7 수신 웹 요청 처리하기 _ 631 15.8 특정 페이지에 대한 수신 요청 처리하기 _ 634 15.9 HTML을 사용하여 웹 서버 응답 형식 지정하기 _ 640 15.10 폼을 사용하여 웹 페이지 제공하기(POST) _ 645 15.11 대용량 웹 페이지 제공하기 _ 648 15.12 트위터 메시지 보내기 _ 657 15.13 간단한 메시지 보내고 받기(UDP) _ 662 15.14 인터넷 타임 서버에서 시간 받아오기 _ 670 15.15 Pachube 피드 모니터링하기 _ 676 15.16 Pachube에 정보 보내기 _ 683
Chapter 16 라이브러리 사용, 수정 및 만들기 _ 689 16.0 소개 _ 689 16.1 내장 라이브러리 사용하기 _ 690 16.2 써드파티 라이브러리 설치하기 _ 692 16.3 라이브러리 수정하기 _ 694 16.4 고유 라이브러리 만들기 _ 699 16.5 다른 라이브러리를 사용하는 라이브러리 만들기 _ 706 16.6 아두이노 1.0용 써드파티 라이브러리 업데이트하기 _ 713
Chapter 17 고급 코딩 및 메모리 처리 _ 715 17.0 소개 _ 715 17.1 아두이노 빌드 프로세스 이해하기 _ 717 17.2 사용 중인 RAM 용량 및 여유 공간 확인하기 _ 721 17.3 프로그램 메모리에 숫자 값 저장 및 검색하기 _ 723 17.4 프로그램 메모리에 문자열 저장 및 검색하기 _ 727 17.5 정수 대신 #define 및 const 사용하기 _ 730 17.6 조건부 컴파일 사용하기 _ 731
Chapter 18 컨트롤러 칩 하드웨어 사용하기 _ 735 18.0 소개 _ 735 18.1 영속적 EEPROM 메모리에 데이터 저장하기 _ 740 18.2 하드웨어 인터럽트 사용하기 _ 745 18.3 타이머 기간 설정하기 _ 748 18.4 타이머 펄스 폭 및 기간 설정하기 _ 751 18.5 펄스 생성기 만들기 _ 755 18.6 타이머의 PWM 주파수 변경하기 _ 759 18.7 펄스 카운트하기 _ 762 18.8 정확하게 펄스 측정하기 _ 764 18.9 빠르게 아날로그 값 측정하기 _ 768 18.10 배터리 소모량 줄이기 _ 770 18.11 빠르게 디지털 핀 설정하기 _ 772 18.12 프로그래머로 스케치 업로드하기 _ 776 18.13 아두이노 부트로더 교체하기 _ 778
18.14 Uno를 리프로그래밍하여 네이티브 USB 장치 에뮬레이트하기 _ 779
APPENDIX A 전자 부품 _ 785 APPENDIX B 스키마 다이어그램과 데이터 시트 사용하기 _ 791 APPENDIX C 회로 구축 및 연결하기 _ 799 APPENDIX D 소프트웨어 문제 해결을 위한 팁 _ 803 APPENDIX E 하드웨어 문제 해결을 위한 팁 _ 809 APPENDIX F 디지털 및 아날로그 핀 _ 813 APPENDIX G ASCII 및 확장 문자 세트 _ 819 APPENDIX H 아두이노 1.0으로 마이그레이션하기 _ 825