getting_started_with_arduino
Differences
This shows you the differences between two versions of the page.
getting_started_with_arduino [2010/02/01 04:27] – suapapa | getting_started_with_arduino [2013/08/03 05:04] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 6: | Line 6: | ||
====== 서문 ====== | ====== 서문 ====== | ||
- | 몇년 전 나는 아주 흥미로운 과제를 맡은 적이 있다: 그것은 디자이너들에게 그들이 디자인하는 물체의 양방향성 프로토타입을 | + | 몇 년 전 나는 아주 흥미로운 과제를 맡은 적이 있다. 그것은 디자이너들에게 그들이 디자인하는 물체의 양방향성 프로토타입을 스스로 만들 수 있도록 아주 기본적인 전자 지식을 가르치는 것이었다. |
- | 나는 내가 학교에서 전자지식을 배웠던 것과 같은 방법을 따라 가르치려 했는데, 머지 않아 기대했던 대로 되지 않고 있음을 알게 되었다. | + | 무의식 적으로 내가 학교에서 전자에 대해 배웠던 방법을 사용해 가르치기 시작했는데 |
- | 무의식 적으로 | + | |
- | 실제로 나는, 학교에서 전자를 배우기 전부터 매우 특별한 방법, 이론은 매우 부족하지만, 손으로 터득한 많은 경험으로 이미 전자 기술에 대해 알고 있었다., 교과과정 이전부터 나는 경험적으로 전자에 대해 알고 있었었다. 이론은 거의 없이 직접 만져서 얻은. | + | 실제로 나는, 학교에서 전자를 배우기 전부터 매우 특별한 방법인 이론은 매우 부족하지만 손으로 터득한 많은 경험으로 이미 전자 기술에 대해 알고 있었다. |
- | 내가 전자지식을 얻게된 진짜 과정들을 생각해 보니 다음과 같았다. | + | 내가 전자지식을 얻게 된 진짜 과정들을 생각해 보니 다음과 같았다. |
- | * 입수할 수 있는 전자장치들을 분해한다. | + | * 입수할 수 있는 전자 장치들을 분해한다. |
- | * 천천히 각 부품들에 대해 배운다 | + | * 천천히 각 부품들에 대해 배운다. |
- | * 더 깊에 생각해 보기 시작하여, | + | * 더 깊게 생각해 보기 시작하여, |
- | * 전자 잡지들에서 파는 키트를 만들어 본다 | + | * 전자 잡지들에서 파는 키트를 만들어 본다. |
- | * 헤집어 | + | * 헤집어 |
- | 내가 작은 꼬마였을때, 나는 | + | 어린 시절, 나는 물건들이 |
- | 이런 해부 실습을 꽤 많이 한 뒤에, 나는 어떤 전자 부품들이 있고 대략 어떤 역활을 하는지 알 수 있게 되었다. 이런 지식을 근원에는 | + | 이런 해부 실습을 꽤 많이 한 뒤에, 나는 어떤 전자 부품들이 있고 대략 어떤 역할을 하는지 알 수 있게 되었다. 이런 지식의 배경에는 아버지께서 |
- | 기사들을 | + | 기사를 읽고 또 읽는 과정들은 회도들을 분해하면서 얻은 지식들을 합쳐져, 느리지만 효과적인 순환 과정이 되었다. |
- | 아버지가 내게 십대들을 대상으로 한 전자 학습키트을 선물해 주신 | + | 아버지께서 |
이 새 도구를 사용해 나는 빠르게 회로를 만들고, 어떤 일이 일어나는지 확인해 볼 수 있었다. 이 프로토타입을 만드는 주기는 점점 더 짧아졌다. | 이 새 도구를 사용해 나는 빠르게 회로를 만들고, 어떤 일이 일어나는지 확인해 볼 수 있었다. 이 프로토타입을 만드는 주기는 점점 더 짧아졌다. | ||
- | 그 다음으로는, 라디오, 앰프, 끔찍한 노이즈나 괜찮은 소리가 나는 회로들, 강우 센서, 조그만 로봇들을 만들었었다. | + | 그 다음으로는 라디오, 앰프, 끔찍한 노이즈나 괜찮은 소리가 나는 회로들, 강우 센서, 조그만 로봇들을 만들었었다. |
- | 나는 | + | 나는 |
+ | 팅커링은 어떻게 해야 하는지 정확히 모르는 상태에서 직관, 상상, 호기심 등을 따라 일을 시도할 때 일어난다. 팅커링을 할 때 따라야할 교범 같은 것은 없다. 즉 실패란 없으며, 옳고 그름 나뉘지도 않는다. 이는 어떻게 작동하는지와 다시 작동하게 하는 방법을 알아내는 것에 관한 것이다. | ||
- | 팅커링은 어떻게 해야 하는지 정확히 모르는 상태에서 직관, 상상, 호기심등을 따라 일을 시도할때 일어난다. 팅커링을 할 때 따라야할 교범같은것은 없다-즉 실패란 없으며, 옳고 그름 | + | 기묘한 발명품, 기계들, 크게 |
- | 기묘한 발명품, 기계들, 크게 어긋나 있는 물체들이 조화롭게 동작하는것-이런 것들이 팅커링이다. | + | 팅커링은, |
- | + | ||
- | 팅커링은, | + | |
www.exploratorium.edu/ | www.exploratorium.edu/ | ||
- | 내 어릴적 경험에 비추어, 나는 | + | 어릴 적 경험에 비추어, 나는 원하는 회로를 만들기 위해서는 기본적인 부품들부터 시작해 얼마나 많은 경험이 필요한지를 알게 되었다. |
- | 다른 도약점은 1982년 여름에 부모님과 함께 런던에 가서, 그곳의 | + | 다른 도약점은 1982년 여름에 부모님과 함께 런던에 가서 과학박물관을 관람하느라 |
- | 그곳에서 | + | 그곳에서, 많은 어플리케이션에서 엔지니어들은 더 이상 기본 부품들로부터 회로를 만들지 않고, 마이크로프로세서를 사용해 다량의 |
그곳에서 돌아와서는 돈을 모으기 시작했는데, | 그곳에서 돌아와서는 돈을 모으기 시작했는데, | ||
- | 그 후로 | + | 그 후로 |
- | 이십여년이 지나, 나는 이 경험들로 인해 내가, 학교에서 배운 수학 수업이 전혀 기억못하는 사람들에게도 내 어린시절부터 지녀온 것과 같은 열정과 팅커할 수 있는 능력을 가르칠 수 있게 되었다고 생각한다. | + | 이십여 년이지나, |
- 마시모 | - 마시모 | ||
+ | ===== 감사의 글 ===== | ||
+ | 이 책을 루이자(Luisa)와 알렉산드라(Alexandra)에게 바친다. | ||
+ | |||
+ | 우선 아두이노 팀의 파트너 David Cuartielles, | ||
+ | |||
+ | 그녀 자신은 모르겠지만 Barbara Ghella의 정확한 조언이 없었다면 아두이노와 이 책은 없었을 지도 모른다. | ||
+ | |||
+ | Bill Verplank는 내게 피지컬 컴퓨팅과 더 많은 것들을 가르쳐 주었다. | ||
+ | |||
+ | 내게 기회를 준 Gillian Crampton-Smith과 그녀에게 배운 모든 것들에 감사한다. | ||
+ | |||
+ | Wiring 플랫폼을 만든 Hernando Barragan에게 감사를 전한다. | ||
+ | |||
+ | Brian Jepson는 훌륭한 편집자로 전 과정에서 열정적인 도움을 주었다. | ||
+ | |||
+ | Nancy Kotary, Brian Scott, Terry Bronson, Patti Schiendelman 는 내가 작성한 글들은 책으로 마무리 해 주었다. | ||
+ | |||
+ | 더 많은 사람들에게 감사를 전하고 싶지만, 브라이언이 공간이 부족하다고 하는 관계로 여러 이유에서 감사들 드리는 사람들의 이름을 나열한다. | ||
+ | |||
+ | Adam Somlai-Fisher, | ||
+ | Alessandro Germinasi, Alessandro Masserdotti, | ||
+ | Anna Capellini, Casey Reas, Chris Anderson, Claudio Moderini, | ||
+ | Clementina Coppini, Concetta Capecchi, Csaba Waldhauser, | ||
+ | Dario Buzzini, Dario Molinari, Dario Parravicini, | ||
+ | Edoardo Brambilla, Elisa Canducci, Fabio Violante, Fabio Zanola, | ||
+ | Fabrizio Pignoloni, Flavio Mauri, Francesca Mocellin, Francesco | ||
+ | Monico, Giorgio Olivero, Giovanna Gardi, Giovanni Battistini, | ||
+ | Heather Martin, Jennifer Bove, Laura Dellamotta, Lorenzo | ||
+ | Parravicini, | ||
+ | Teresa Longoni, Massimiliano Bolondi, Matteo Rivolta, Matthias | ||
+ | Richter, Maurizio Pirola, Michael Thorpe, Natalia Jordan, | ||
+ | Ombretta Banzi, Oreste Banzi, Oscar Zoggia, Pietro Dore, | ||
+ | Prof Salvioni, Raffaella Ferrara, Renzo Giusti, Sandi Athanas, | ||
+ | Sara Carpentieri, | ||
+ | Veronika Bucko. | ||
====== 1/도입 ====== | ====== 1/도입 ====== | ||
- | 아두이노는 간단한 입/ | + | 아두이노는 간단한 입/ |
- | 다음과 같은 특징들이 아두이노를 다른 플랫폼과 구별되게 만들어 | + | 다음과 같은 특징들이 아두이노를 다른 플랫폼과 구별해 준다. |
- | * 멀티 플렛폼 환경이다 : 윈도, | + | * 멀티 플랫폼 환경이다 : 윈도, |
- | * 아티스트와 디자이너들이 사용하는 쉬운 개발환경인, | + | * 아티스트와 디자이너들이 사용하기 쉬운 개발환경인, |
* 시리얼 케이블이 아닌 USB 케이블을 통해 프로그램 할 수 있다. 최근의 컴퓨터에는 시리얼 포트가 없는 경우가 종종 있기 때문에, 이 특징은 유용하다. | * 시리얼 케이블이 아닌 USB 케이블을 통해 프로그램 할 수 있다. 최근의 컴퓨터에는 시리얼 포트가 없는 경우가 종종 있기 때문에, 이 특징은 유용하다. | ||
* 하드웨어와 소프트웨어 모드 오픈소스로 여러분이 원한다면 회로도를 다운로드 받고, 따로 모든 부품들을 구입하여 여러분만의 아두이노를 만들 수 있다. 아두이노의 창시자들에게 어떠한 대가도 지불할 필요 없다. | * 하드웨어와 소프트웨어 모드 오픈소스로 여러분이 원한다면 회로도를 다운로드 받고, 따로 모든 부품들을 구입하여 여러분만의 아두이노를 만들 수 있다. 아두이노의 창시자들에게 어떠한 대가도 지불할 필요 없다. | ||
- | * 하드웨어가 저렴하다. USB 보드는 대략 3~4만원 정도이며 보드상에 터버리거나 한 부품들을 교체하는 비용도 5천원 정도를 넘지 않는다. 여러분도 | + | * 하드웨어가 저렴하다. USB 보드는 대략 3~4만 원 정도이며 보드 상에 터버리거나 한 부품들을 교체하는 비용도 5천 원 정도를 넘지 않는다. 여러분도 |
* 활발한 사용자 커뮤니티가 존재한다. 고로 문재가 생기면 도와줄 사람이 많다. | * 활발한 사용자 커뮤니티가 존재한다. 고로 문재가 생기면 도와줄 사람이 많다. | ||
- | * 아두이노 프로젝트는 교육 환경으로 개발되었기 때문에, 막 시작했지만 빨리 작동하는 결과를 얻고 싶어하는 사람들에게 최적이다. | + | * 아두이노 프로젝트는 교육 환경으로 개발되었기 때문에, 막 시작했지만 빨리 작동하는 결과를 얻고 싶어 하는 사람들에게 최적이다. |
- | 이 책은 초보자들이 아두이노 플렛폼을 어떻게 사용하는지를 배우고, 아두이노의 철학을 적용하여 얻는 장점들을 이해하는 것을 돕도록 구성되었다. | + | 이 책은 초보자들이 아두이노 플랫폼을 어떻게 사용하는지를 배우고, 아두이노의 철학을 적용하여 얻는 장점들을 이해하는 것을 돕도록 구성되었다. |
===== 대상 독자 ===== | ===== 대상 독자 ===== | ||
- | 이 책은 " | + | 이 책은 " |
- | 참고: 아두이노는 헤르난도 베르간(Hernando Barragan)이 이탈리아 이브레아 IDII에서 저자와 케이시 리스(Casey Reas)하에서 공부하며 작성한 와이어링(Wiring) 플렛폼을 기반으로한 논문을 바탕으로 만들어졌다. | + | 참고: 아두이노는 헤르난도 베르간(Hernando Barragan)이 이탈리아 이브레아 IDII에서 저자와 케이시 리스(Casey Reas)하에서 공부하며 작성한 와이어링(Wiring) 플랫폼을 기반으로 한 논문을 바탕으로 만들어졌다. |
- | 아두이노가 대중화 되감에 따라, 나는 | + | 아두이노가 대중화 되어감에 따라 경험자들, |
- | 아두이노는 인터엑션 디자인(Interaction Design: 상호 작용하는 디자인)을 가르치기 위해 태어났다. 이런 디자인을 하기 위해서는 반드시 프로토타입을 만드는 과정을 거치게 된다. | + | 아두이노는 인터렉션 디자인(Interaction Design: 상호 작용하는 디자인)을 가르치기 위해 태어났다. 이런 디자인을 하기 위해서는 반드시 프로토타입을 만드는 과정을 거치게 된다. |
- | 인터엑션 디자인은, | + | 인터렉션 디자인은, |
- | 오늘날 인터엑션 디자인은 우리(사람)과 물체들 간 의미있는 경험을 만드는 것이라 여겨진다. 이는 우리와 기술간의 아름다운-그리고 아마도 논란이 될 수도 있는-경험의 창조를 살펴보기 위한 좋은 방법이다. 인터엑션 디자인은 계속 완성도를 높혀가는 프로토 타입을 사용한 쌍방향 과정을 통한 디자인 방법이 좋다. 이러한 접근방법-이는 또한 일부 " | + | 오늘날 인터렉션 디자인은 우리(사람)와 물체들 간 의미 있는 경험을 만드는 것이라 여겨진다. 이는 우리와 기술 간의 아름다운-그리고 아마도 논란이 될 수도 있는-경험의 창조를 살펴보기 위한 좋은 방법이다. 인터렉션 디자인은 계속 완성도를 높여가는 프로토 타입을 사용한 쌍방향 과정을 통한 디자인 방법이 좋다. 이러한 접근방법-이는 또한 일부 " |
- | 특히 아두이노를 사용한 인터엑션 디자인은 피지컬 컴퓨팅(또는 피지컬 인터엑션 디자인)으로 구분된다. | + | 특히 아두이노를 사용한 인터렉션 디자인은 피지컬 컴퓨팅(또는 피지컬 인터렉션 디자인)으로 구분된다. |
===== 피지컬 컴퓨팅이란? | ===== 피지컬 컴퓨팅이란? | ||
- | 피지컬 컴퓨팅에서는 디자이너나 아티스트들이 새로운 물체의 프로토타입을 만드는데 전자시식을 사용게 된다. | + | 피지컬 컴퓨팅에서는 디자이너나 아티스트들이 새로운 물체의 프로토타입을 만드는데 전자지식을 사용한다. |
- | 여기에는 마이크로컴퓨터(칩안에 들어있는 작은 컴퓨터)안에 들어있는 소프트웨를 실행해 동작을 구현한 센서와 엑튜레이터를 통해 사람과 소통하는 | + | 여기에는 마이크로컴퓨터(칩 안에 들어있는 작은 컴퓨터)안에 들어있는 소프트웨어를 실행해 동작을 구현한 센서와 엑튜레이터를 통해 사람과 소통하는 |
- | 과거에는 전자지식을 사용하기 위해서는 처음부터 끝까지 엔지니어를 상대해야만 했고, 회로를 만드는 일은 한번에 하나의 작은 부품을 만드는 것을 의미했었다: | + | 과거에는 전자지식을 사용하기 위해서는 처음부터 끝까지 엔지니어를 상대해야만 했고, 회로를 만드는 일은 한 번에 하나의 작은 부품을 만드는 것을 의미했었다: |
- | 아두이노를 통해 우리가 만든 진전은 이러한 도구들을 무경험자들에게 한걸음 더 가깝게 해 주었기 때문에, 2~3일 정도의 워크샵 만으로도 사람들이 이것저것을 만들기 시작할 수 있게 해 준다. | + | 아두이노를 통해 우리가 만든 진전은 이러한 도구들을 무경험자들에게 한걸음 더 가깝게 해 주었기 때문에, 2~3일 정도의 워크숍만으로도 사람들이 이것저것을 만들기 시작할 수 있게 해 준다. |
- | 아두이노를 사용하면, | + | 아두이노를 사용하면, |
====== 2/ | ====== 2/ | ||
아두이노의 철학은 말로 설명하는 것 보다는 디자인을 직접 만드는 것에 기반을 두고 있다. 이것은 더 나은 프로토타입을 만들기 위한 더 빠르고 강력한 방법을 찾아 온 결과이다. 우리는 여러 프로토타이핑 기술들과 손을 사용해 생각하는 방법들을 거쳐 왔다. | 아두이노의 철학은 말로 설명하는 것 보다는 디자인을 직접 만드는 것에 기반을 두고 있다. 이것은 더 나은 프로토타입을 만들기 위한 더 빠르고 강력한 방법을 찾아 온 결과이다. 우리는 여러 프로토타이핑 기술들과 손을 사용해 생각하는 방법들을 거쳐 왔다. | ||
- | 종래의 엔지니어링은 A로 부터 B를 얻는 고정된 과정을 기반을 두고 있다: 아두이노 방식은 그 과정에서 길을 잃고 C를 찾아낼 수도 있다는 즐거움 이다. | + | 종래의 엔지니어링은 A로 부터 B를 얻는 고정된 과정을 기반을 두고 있는데 반해, |
- | 이는 우리가 찾아낸 팅커링 방법으로-목표가 정하지 않은 채로 놀다가 기대하지 않았던 것들을 찾는 것이다. 또한, 더 나은 프로토파입을 만들기 위한 방법을 찾는 과정에서 우리는 소프트웨어와 하드웨어의 중간단계를 수정할 수 있게 해 주는 몇몇 소프트웨어 패키지들을 선택했다. | + | 이는 우리가 찾아낸 팅커링 방법으로-목표가 정하지 않은 채로 놀다가 기대하지 않았던 것들을 찾는 것이다. 또한, 더 나은 프로토타입을 만들기 위한 방법을 찾는 과정에서 우리는 소프트웨어와 하드웨어의 중간단계를 수정할 수 있게 해 주는 몇몇 소프트웨어 패키지들을 선택했다. |
이 뒤에 올 몇 섹션들 에서는 아두이노 방식에 영감을 준 몇몇 철학과, 이벤트, 개척자들을 소개한다. | 이 뒤에 올 몇 섹션들 에서는 아두이노 방식에 영감을 준 몇몇 철학과, 이벤트, 개척자들을 소개한다. | ||
===== 프로토타이핑 ===== | ===== 프로토타이핑 ===== | ||
- | 프로토파입을 만드는 것은 아두이노 방식의 심장이다. 우리는 다른 물체들은 물론 사람, 네트워크들과 상호 작동하는 물건을 만든다. 우리는 최대한 싸게 프로토 타입을 만들기 위한 간단하고 빠른 방법을 찾기 위해 노력해 왔다. | + | 프로토타입을 만드는 것은 아두이노 방식의 심장이다. 우리는 다른 물체들은 물론 사람, 네트워크들과 상호 작동하는 물건을 만든다. 우리는 최대한 싸게 프로토타입을 만들기 위한 간단하고 빠른 방법을 찾기 위해 노력해 왔다. |
- | 전자를 처음 시작하는 많은 사람들은 우선, 아무것도 없는 상태에서 시작해 모든 것들을 만드는 방법을 배워야 한다고 생각한다. 이는 에너지의 낭비다: 여러분이 정말로 원하는 것은 매우 단시간 안에 무엇인가가 동작하는 것을 확인하는 것으로, 그럼으로서 여러분 스스로가 다음 단계로 넘어갈 동기가 부여되거나, | + | 전자를 처음 시작하는 많은 사람들은 우선, 아무것도 없는 상태에서 시작해 모든 것들을 만드는 방법을 배워야 한다고 생각한다. 이는 에너지의 낭비다: 여러분이 정말로 원하는 것은 매우 단시간 안에 무엇인가가 동작하는 것을 확인하는 것으로, 그럼으로써 여러분 스스로가 다음 단계로 넘어갈 동기가 부여되거나, |
이미 만들어진 장치들을 해킹해서 커다란 회사의 좋은 엔지니어들이 열심히 노력한 결과를 이용할 수 있는데, 왜 시간과 깊은 기술 지식을 요하는, 처음부터 모두 만들어 내기 위해 시간과 에너지를 낭비하는가? | 이미 만들어진 장치들을 해킹해서 커다란 회사의 좋은 엔지니어들이 열심히 노력한 결과를 이용할 수 있는데, 왜 시간과 깊은 기술 지식을 요하는, 처음부터 모두 만들어 내기 위해 시간과 에너지를 낭비하는가? | ||
Line 118: | Line 151: | ||
===== 팅커링 ===== | ===== 팅커링 ===== | ||
- | 우리는 이껏이 기술과 놀기위한 필수 과정이라고 | + | 우리는 이것이 기술과 놀기 위한 필수 과정이라고 |
우리는 팅커링이 기술을 사용해 놀기 위해 꼭 필요한 과정이라고 믿는다. 때로는 확실한 목표를 정하지 않은 채로-하드웨어와 소프트웨어의 다른 가능성을 찾아보는 것이다. | 우리는 팅커링이 기술을 사용해 놀기 위해 꼭 필요한 과정이라고 믿는다. 때로는 확실한 목표를 정하지 않은 채로-하드웨어와 소프트웨어의 다른 가능성을 찾아보는 것이다. | ||
- | 이미 존재하는 기술을 재사용하는 것은 최고의 팅커링 방법이다. 싸구려 장난감 또는 오래되서 사용하지 않는 기계들을 구해서 무언가 새로운 것을 하도록 만드는 것은, 훌륭한 결과를 얻기 위한 최고의 방법 중 하나이다. | + | 이미 존재하는 기술을 재사용하는 것은 최고의 팅커링 방법이다. 싸구려 장난감 또는 오래되어 사용하지 않는 기계들을 구해서 무언가 새로운 것을 하도록 만드는 것은, 훌륭한 결과를 얻기 위한 최고의 방법 중 하나이다. |
===== 이어붙이기 ===== | ===== 이어붙이기 ===== | ||
- | 모듈 방식과, 간단한 장치들을 연결하여 복잡한 시스템을 만드는 능력은 언제나 저자를 매료시켰다. 로버트 무그(Rovert Moog)가 만든 아나로그 신디사이져는 이런 과정을 잘 보여준다. 음악가들을 각각의 모듈들을 케이블로 " | + | 모듈 방식과, 간단한 장치들을 연결하여 복잡한 시스템을 만드는 능력은 언제나 저자를 매료시켰다. 로버트 무그(Rovert Moog)가 만든 아날로그 신디사이저는 이런 과정을 잘 보여준다. 음악가들을 각각의 모듈들을 케이블로 " |
- | 무그는 이것을 " | + | 무그는 이것을 " |
창의적인 작업을 위해서는 진행 과정 중 끼어드는 것들을 줄여야 한다. 과정이 더 매끄럽게 진행될수록 더 많은 팅커링이 일어난다. | 창의적인 작업을 위해서는 진행 과정 중 끼어드는 것들을 줄여야 한다. 과정이 더 매끄럽게 진행될수록 더 많은 팅커링이 일어난다. | ||
- | 이런 기술들은 소프트웨어 세상에도 반영되어 그 결과 Max, PureData, VVVV같은 "비쥬얼 프로그래밍" | + | 이런 기술들은 소프트웨어 세상에도 반영되어 그 결과 Max, PureData, VVVV같은 "비주얼 프로그래밍" |
- | 이런 환경들은 사용자들이 보통의 개발 주기인, " | + | 이런 환경들은 사용자들이 보통의 개발 주기인, " |
- | ===== 써킷 밴딩 ===== | + | ===== 서킷 밴딩 ===== |
- | 써킷 밴딩(Circuit bending)은 가장 흥미로운 팅커링 형태 중 하나이다. 이것은 기타 이펙트 페달 같은 음악 장비, 어린이 장닌감들, 작은 신디사이져등의 낮은 전압이나 배터리로 작동하는 전자 장치의 회로를위해 창조적으로 쇼트 시켜서 새로운 악기나, 소리 생성기를 만드는 일이다. 이 과정의 근원에는 " | + | 서킷 밴딩(Circuit bending)은 가장 흥미로운 팅커링 형태 중 하나이다. 이것은 기타 이펙트 페달 같은 음악 장비, 어린이 장난감들, 작은 신디사이저 등의 낮은 전압이나 배터리로 작동하는 전자 장치의 회로를 위해 창조적으로 쇼트 시켜서 새로운 악기나, 소리 생성기를 만드는 일이다. 이 과정의 근원에는 " |
===== Sniffin' | ===== Sniffin' | ||
- | 아두이노의 방식의 여기에 있는 스니핑글루 팬진((옮긴이 주: Sniffin' | + | 아두이노의 방식의 여기에 있는 스니핑글루 팬진((옮긴이 주: Sniffin' |
===== 키보드 해킹 ===== | ===== 키보드 해킹 ===== | ||
- | 컴퓨터 키보드는 60년이 넘도록 컴퓨터와 소통하기 위한 주요 수단으로 쓰이고 있다. | + | 컴퓨터 키보드는 60년이 넘도록 컴퓨터와 소통하기 위한 주요 수단으로 쓰이고 있다. |
- | 팅커러 라면, 우리는 키를 주변 환경을 감지할 수 있는 물체로 교체하여 상호 소통하는 새로운 방법을 소프트웨어로 구현할 수 있다. 컴퓨터 키보드를 떼어네어 아주 간단한 (그리고 싼) 장치로 되살리자. 키보드의 주요 부품은 작은 보드이다. 보드는 일반적으로 냄새가 나는 녹색이나 갈색의 회로로, 각각의 키들의 접점들을 가지고 있는 두개의 플라스틱 판으로 연결되는 두 세트의 접점들이 있다. 이 회로를 제거하여 전선을 사용해 두 접점을 연겨해 보면, 컴퓨터 화면에 글자가 나타나는 것을 볼 수 있을 것이다. 밖으로 나가 동작-감지기를 구입하여 이를 여러분의 키보드에 연결하면, | + | 팅커러 라면, 우리는 키를 주변 환경을 감지할 수 있는 물체로 교체하여 상호 소통하는 새로운 방법을 소프트웨어로 구현할 수 있다. 컴퓨터 키보드를 떼어내어 아주 간단한 (그리고 싼) 장치로 되살리자. 키보드의 주요 부품은 작은 보드이다. 보드는 일반적으로 냄새가 나는 녹색이나 갈색의 회로로, 각각의 키들의 접점들을 가지고 있는 두개의 플라스틱판으로 연결되는 두 세트의 접점들이 있다. 이 회로를 제거하여 전선을 사용해 두 접점을 연결해 보면, 컴퓨터 화면에 글자가 나타나는 것을 볼 수 있을 것이다. 밖으로 나가 동작-감지기를 구입하여 이를 여러분의 키보드에 연결하면, |
===== 우리는 고물이 좋아 ===== | ===== 우리는 고물이 좋아 ===== | ||
- | 유즘 사람들은 | + | 요즘 사람들은 구형 프린터, 컴퓨터, 희한한 사무기기, |
===== 장난감 해킹 ===== | ===== 장난감 해킹 ===== | ||
- | 앞서 언급된 | + | 앞서 언급된 |
저자는 학생들에게 기술은 무섭거나 접근하기 어려운 것이 아니라는 것을 이해시키기 위해 이 방법을 몇 년간 사용해 왔다. 저자가 참고하는 책자 중 가장 마음에 드는 것은 (Usman Haque)과 (Adam Somlai-Fischer)의 " | 저자는 학생들에게 기술은 무섭거나 접근하기 어려운 것이 아니라는 것을 이해시키기 위해 이 방법을 몇 년간 사용해 왔다. 저자가 참고하는 책자 중 가장 마음에 드는 것은 (Usman Haque)과 (Adam Somlai-Fischer)의 " | ||
===== 협력 ===== | ===== 협력 ===== | ||
- | 사용자간 협력은 아두이노 세상의 중요한 정책 중 하나이다. www.arduino.cc 에 위치한 포럼을 통해 전세계 각 분야의 사람들이 서로 도우며 아두이노 플렛폼을 배우고 있다. 아두이노 팀은 방문하는 모든 도시에서 지역 사용자 모임을 만들도록 도움으로서, | + | 사용자간 협력은 아두이노 세상의 중요한 정책 중 하나이다. www.arduino.cc 에 위치한 포럼을 통해 전 세계 각 분야의 사람들이 서로 도우며 아두이노 플랫폼을 배우고 있다. 아두이노 팀은 방문하는 모든 도시에서 지역 사용자 모임을 만들도록 도움으로서, |
- | ====== 3/ | + | ====== 3/ |
- | 아두이노는 두개의 주요 부분으로 구성되어 있다: 여러분이 물건을 만들때 기반으로 작업을 하게될 아두이노 보드와, 여러분의 컴퓨터에서 실행되는 소프트웨어인 아두이노 IDE가 그것이다. 아두이노 IDE를 사용해 아두이노 보드에 올릴(upload) 스케치(작은 컴퓨터 프로그램)를 만들 수 있다. 스케치는 보드가 무슨 일을 할 지 알려주게 된다. | + | 아두이노는 두개의 주요 부분으로 구성되어 있다: 여러분이 물건을 만들 때 기반으로 작업을 하게 될 아두이노 보드와, 여러분의 컴퓨터에서 실행되는 소프트웨어인 아두이노 IDE가 그것이다. 아두이노 IDE를 사용해 아두이노 보드에 올릴(upload) 스케치(작은 컴퓨터 프로그램)를 만들 수 있다. 스케치는 보드가 무슨 일을 할 지 알려주게 된다. |
- | 그리 오래지 않은 과거만 해도, 하드웨어 작업을 한다는 것은 레지서트, 캐패시터, 인덕터, 트렌지스터 같은 이상한 이름을 가진 부품들을 수백개 사용해서 아무것도 없는 상태에서 부터 회로를 만들어 내야 함을 의미했었다. | + | 그리 오래지 않은 과거만 해도, 하드웨어 작업을 한다는 것은 레지스터, 커패시터, 인덕터, 트랜지스터 같은 이상한 이름을 가진 부품들을 수백 개 사용해서 아무것도 없는 상태에서 부터 회로를 만들어 내야 함을 의미했었다. |
하나의 특정 작업(application)을 위해서 모든 회로는 전선으로 연결 되어 있었고, 수정을 하려면 전선을 자르고, 접점을 납땜하는 등의 일이 필요했다. | 하나의 특정 작업(application)을 위해서 모든 회로는 전선으로 연결 되어 있었고, 수정을 하려면 전선을 자르고, 접점을 납땜하는 등의 일이 필요했다. | ||
- | 디지털 기술과 마이크로세서의 등장으로, | + | 디지털 기술과 마이크로세서의 등장으로, |
- | 소프트웨어는 하드웨어에 비해 수정하기가 더 쉽다. 몇번의 키 입력으로 신속하게 장치의 논리 구조를 바꿀수 있고, 저항 몇 개를 땜질할 정도의 시간이면 두 세버젼의 소프트웨어를 시험해 볼 수 있다. | + | 소프트웨어는 하드웨어에 비해 수정하기가 더 쉽다. 몇 번의 키 입력으로 신속하게 장치의 논리 구조를 바꿀 수 있고, 저항 몇 개를 땜질할 정도의 시간이면 두 세 버전의 소프트웨어를 시험해 볼 수 있다. |
===== 아두이도 하드웨어 ===== | ===== 아두이도 하드웨어 ===== | ||
- | 하드이노 보드는 작은 마이크로컨트롤러 보드이다. 마이크로컨트롤러 보드란, 작은 칩(마이크로 컨트롤러)안에 컴퓨터 전체를 구현한 부품을 포함하는 자극 회로 기판(보드)이다. 이 컴퓨터는 저자가 이 책을 쓰는데 사용하고 있는 맥북에 비해 적어도 천 배는 더 저 성능이다. 하지만 훨씬 싸며 재미있는 장치들을 만드는데 매우 유용하다. 아두이노 보드를 보면, 28개의 " | + | 아두이노 보드는 작은 마이크로컨트롤러 보드이다. 마이크로컨트롤러 보드란, 작은 칩(마이크로 컨트롤러)안에 컴퓨터 전체를 구현한 부품을 포함하는 자극 회로 기판(보드)이다. 이 컴퓨터는 저자가 이 책을 쓰는데 사용하고 있는 맥북에 비해 적어도 천 배는 더 저 성능이다. 하지만 훨씬 싸며 재미있는 장치들을 만드는데 매우 유용하다. 아두이노 보드를 보면, 28개의 " |
- | 우리(아두이노 팀)는 이 마이크로컨트롤러가 잘 동작하고, | + | 우리(아두이노 팀)는 이 마이크로컨트롤러가 잘 동작하고, |
이들 그림들은 아두이노 보드를 확인할 수 있다. 처음에는, | 이들 그림들은 아두이노 보드를 확인할 수 있다. 처음에는, | ||
Line 178: | Line 211: | ||
* 14개의 디지털 입/출력 핀(핀 0~13) | * 14개의 디지털 입/출력 핀(핀 0~13) | ||
*이 핀들은 입력 또는 출력으로 사용할 수 있으며, IDE를 사용해 만든 스케치를 통해 어떻게 사용할 지 결정하게 된다. | *이 핀들은 입력 또는 출력으로 사용할 수 있으며, IDE를 사용해 만든 스케치를 통해 어떻게 사용할 지 결정하게 된다. | ||
- | * 6개의 아나로그 입력 핀 (핀 0~5) | + | * 6개의 아날로그 입력 핀 (핀 0~5) |
- | *이 핀들은 오직 아나로그 입력으로만 쓰이며 아나로그 값(예, 센서를 통해 읽은 전압 값)을 받아 0~1023사이의 숫자로 변환하게 된다. | + | *이 핀들은 오직 아날로그 입력으로만 쓰이며 아날로그 값(예, 센서를 통해 읽은 전압 값)을 받아 0~1023사이의 숫자로 변환하게 된다. |
- | * 6개의 아나로그 출력 핀 (핀 3, | + | * 6개의 아날로그 출력 핀 (핀 3, |
- | *디지털 핀들 중 6개는 사실, IDE를 사용해 작성한 스케치를 통해 아나로그 출력으로 재 프로그램 할 수 있다. | + | *디지털 핀들 중 6개는 사실, IDE를 사용해 작성한 스케치를 통해 아날로그 출력으로 재 프로그램 할 수 있다. |
- | 보드는 여러분의 컴퓨터의 USB포트나, | + | 보드는 여러분의 컴퓨터의 USB포트나, |
- | 참고: 만약 여러분이 오래된 아두이노인 아두이노-NG또는 아두이노 Diecimilla를 사용한다면, | + | 참고: 만약 여러분이 오래된 아두이노인 아두이노-NG또는 아두이노 Diecimilla를 사용한다면, |
그림 3-1. Arduino Duemilanove | 그림 3-1. Arduino Duemilanove | ||
Line 192: | Line 225: | ||
===== 소프트웨어 (IDE) ===== | ===== 소프트웨어 (IDE) ===== | ||
- | IDE(Integrated | + | IDE(Integrated |
- | 여러분이 보드에 스케치 올리기 버튼을 | + | 여러분이 보드에 스케치 올리기 버튼을 |
- | 아두이노의 프로그래밍 작업 사이틀은 기본적으로 다음과 같다: | + | 아두이노의 프로그래밍 작업 사이클은 기본적으로 다음과 같다: |
- | * 아두이노 보드를 여러분의 컴퓨터의 USB 포트에 | + | * 아두이노 보드를 여러분의 컴퓨터의 USB 포트에 |
* 보드에 생명을 불어 넣을 스케치를 작성한다. | * 보드에 생명을 불어 넣을 스케치를 작성한다. | ||
* USB 연결을 통해 보드에 스케치를 올리고, 보드가 재 시작하기까지 몇 초 종안 기다린다. | * USB 연결을 통해 보드에 스케치를 올리고, 보드가 재 시작하기까지 몇 초 종안 기다린다. | ||
Line 204: | Line 237: | ||
참고: 이 글을 쓰는 시점에서 리눅스에 아두이노를 설치하는 것은 다소 복잡하다. 리눅스에서의 설치 전 과정은, 다음 링크에 위치한 설명을 참고하기 바란다. www.arduino.cc/ | 참고: 이 글을 쓰는 시점에서 리눅스에 아두이노를 설치하는 것은 다소 복잡하다. 리눅스에서의 설치 전 과정은, 다음 링크에 위치한 설명을 참고하기 바란다. www.arduino.cc/ | ||
==== 컴퓨터에 아두이노 설치하기 ===== | ==== 컴퓨터에 아두이노 설치하기 ===== | ||
- | 아두이노 보드를 프로그램 하기 위해서는 우선, 반드시 다음 주소에서 개발 환경 (IDE)을 다운로드 받아야 한다. www.arduino.cc/ | + | 아두이노 보드를 프로그램 하기 위해서는 우선, 반드시 다음 주소에서 개발 환경 (IDE)을 다운로드 받아야 한다. www.arduino.cc/ |
- | 파일을 다운로드 한 후 더블-클릭하여 압축을 푼다. 이제 arduino-[버전] 형식의 폴더가 생성될 것이다. 예를 들어 글을 쓰고 있는 시점의 최신버젼을 다운 받았다면 arduino-0017라는 폴더가 만들어진다. 이 폴더를 드래그 하여 여러분이 아무 곳이나 여러분이 원하는 곳, 바탕화면이나 (맥 에서는) / | + | 파일을 다운로드 한 후 더블-클릭하여 압축을 푼다. 이제 arduino-[버전] 형식의 폴더가 생성될 것이다. 예를 들어 글을 쓰고 있는 시점의 최신 버전을 다운 받았다면 arduino-0017라는 폴더가 만들어진다. 이 폴더를 드래그 하여 여러분이 아무 곳이나 여러분이 원하는 곳, 바탕화면이나 (맥 에서는) / |
참고: 아두이노 IDE를 실행하는데 문제가 있다면, 7장 문제해결을 참조하라. | 참고: 아두이노 IDE를 실행하는데 문제가 있다면, 7장 문제해결을 참조하라. | ||
Line 215: | Line 248: | ||
arduino-0017안의 Drivers 폴더를 찾아, FTDIUSBSerialDriver_x_x_x.dmg(x_x_x 대신 드라이버의 버전 넘버가 있을 것이다. 예. FTDIUSBSerialDriver_v2_2_9_Intel.dmg)라는 파일을 찾아라. .dmg 파일을 더블클릭하여 마운트 한다. | arduino-0017안의 Drivers 폴더를 찾아, FTDIUSBSerialDriver_x_x_x.dmg(x_x_x 대신 드라이버의 버전 넘버가 있을 것이다. 예. FTDIUSBSerialDriver_v2_2_9_Intel.dmg)라는 파일을 찾아라. .dmg 파일을 더블클릭하여 마운트 한다. | ||
- | 참고: 맥북, 맥북 에어, 맥북 프로, 인텔기반 맥 미니 혹은 i맥과 같은 인텔 기반의 맥을 사용중이라면, | + | 참고: 맥북, 맥북 에어, 맥북 프로, 인텔기반 맥 미니 혹은 i맥과 같은 인텔 기반의 맥을 사용 중이라면, |
- | 다음으로, | + | 다음으로, |
==== 드라이버 설치: 윈도 ==== | ==== 드라이버 설치: 윈도 ==== | ||
아두이노 보드를 컴퓨터에 연결한다. 새 하드웨어 검색 마법사 창이 뜨고, 윈도는 드라이버를 먼저 윈도 업데이트 사이트에서 찾으려 할 것이다. | 아두이노 보드를 컴퓨터에 연결한다. 새 하드웨어 검색 마법사 창이 뜨고, 윈도는 드라이버를 먼저 윈도 업데이트 사이트에서 찾으려 할 것이다. | ||
- | 윈도 XP의 경우 여러분에게 윈도 업데이트(Windows Update)를 검사할지 물어본다; 윈도 업데이트를 사용하지 않기를 원한다면 " | + | 윈도 XP의 경우 여러분에게 윈도 업데이트(Windows Update)를 검사할지 물어본다. 윈도 업데이트를 사용하지 않기를 원한다면 " |
다음 화면에서 " | 다음 화면에서 " | ||
Line 227: | Line 260: | ||
" | " | ||
- | 윈도 비스타의 경우 우선 윈도 업데이트(Windows Update)를 찾는 시도를 한다; 검색에 실패하면, | + | 윈도 비스타의 경우 우선 윈도 업데이트(Windows Update)를 찾는 시도를 한다. 검색에 실패하면, |
- | 드라이버가 설치 되었으면, | + | 드라이버가 설치되었으면, |
- | 다음으로, | + | 다음으로, |
==== 포트 지정: 매킨토시 ==== | ==== 포트 지정: 매킨토시 ==== | ||
- | 아두이노 IDE의 Tools 메뉴에서 " | + | 아두이노 IDE의 Tools 메뉴에서 " |
그림 3-3. 아두이노 IDE의 시리얼 포트 리스트 | 그림 3-3. 아두이노 IDE의 시리얼 포트 리스트 | ||
Line 247: | Line 280: | ||
====== 4/정말로 아두이노 시작하기 ====== | ====== 4/정말로 아두이노 시작하기 ====== | ||
- | 이제 여러분은 | + | 이제 여러분은 |
- | ===== 교감형 | + | ===== 인터렉티브 |
- | 우리가 아두이노를 사용해 만드는 물건들은 "교감형 | + | 우리가 아두이노를 사용해 만드는 물건들은 "인터렉티브 |
- | 이러한 장치는 센서를 통해 받은 내용을 소프트웨어로 구현된 행동을 따라 처리한다. 그리고, 엑츄에이터(acturator)라 불리는 전자 신호를 물리적 행동으로 바꾸는 장치를 통해 실제 세상과 교감한다. | + | 이러한 장치는 센서를 통해 받은 내용을 소프트웨어로 구현된 행동을 따라 처리한다. 그리고 엑츄에이터(acturator)라 불리는 전자 신호를 물리적 행동으로 바꾸는 장치를 통해 실제 세상과 교감한다. |
- | 그림 4-1. 교감형 | + | 그림 4-1. 인터렉티브 |
===== 센서와 엑츄에이터 ===== | ===== 센서와 엑츄에이터 ===== | ||
Line 259: | Line 292: | ||
마이크로컨트롤러는 아주 간단한 컴퓨터이기 때문에 오직 전기 신호(우리의 뇌신경들 사이에 오가는 전기 신호 같은 것)만을 처리할 수 있다. 마이크로컨트롤러가 빛이나, 온도, 물체의 양등을 감지하기 위해서는 이들을 전기신호로 변환해주는 무엇인가가 필요하다. 예를 들면, 우리의 몸에서는 눈을 통해 빛을 뇌가 받아들일 수 있는 신호로 변환하게 된다. 전자의 세상에서는 수광센서(LDR 또는 감광저항)를 사용해 센서의 표면에 비춰진 빛의 양을 측정해 마이크로컨트롤러가 이해할 수 있는 신호로 변환한다. | 마이크로컨트롤러는 아주 간단한 컴퓨터이기 때문에 오직 전기 신호(우리의 뇌신경들 사이에 오가는 전기 신호 같은 것)만을 처리할 수 있다. 마이크로컨트롤러가 빛이나, 온도, 물체의 양등을 감지하기 위해서는 이들을 전기신호로 변환해주는 무엇인가가 필요하다. 예를 들면, 우리의 몸에서는 눈을 통해 빛을 뇌가 받아들일 수 있는 신호로 변환하게 된다. 전자의 세상에서는 수광센서(LDR 또는 감광저항)를 사용해 센서의 표면에 비춰진 빛의 양을 측정해 마이크로컨트롤러가 이해할 수 있는 신호로 변환한다. | ||
- | 센서로 부터 읽어들인 | + | 센서로 부터 읽어 |
다음 섹션에서 여러분은 어떻게 각기 다른 종류의 센서들을 읽고, 엑츄에이터를 제어하는 방법을 배우게 될 것이다. | 다음 섹션에서 여러분은 어떻게 각기 다른 종류의 센서들을 읽고, 엑츄에이터를 제어하는 방법을 배우게 될 것이다. | ||
===== LED 깜박이기===== | ===== LED 깜박이기===== | ||
- | LED를 깜박이는 스케치는 여러분의 아두이노 보드가 잘 작동하고 제대로 설정되었는지 확인하기 위한 첫번째 프로그램이다. 이 프로그램은 또한 마이크로컨트롤러를 프로그램 하는 방법을 배우기 위해 가장 먼저 해 보는 프로그래밍 실습이기도 하다. 발광다이오드(LED)는 작은 전자 부품으로 전구와 비슷하다고 볼 수 있다. 하지만 전구에 비해 더 효율적이며, | + | LED를 깜박이는 스케치는 여러분의 아두이노 보드가 잘 작동하고 제대로 설정되었는지 확인하기 위한 첫 번째 프로그램이다. 이 프로그램은 또한 마이크로컨트롤러를 프로그램 하는 방법을 배우기 위해 가장 먼저 해 보는 프로그래밍 실습이기도 하다. 발광다이오드(LED)는 작은 전자 부품으로 전구와 비슷하다고 볼 수 있다. 하지만 전구에 비해 더 효율적이며, |
- | 아두이노 보드에는 하나의 LED가 기본 장착되어 있는데, " | + | 아두이노 보드에는 하나의 LED가 기본 장착되어 있는데, " |
- | K는 캐소드(음극)으로 짧은 다리 쪽이며, A는 애노드(양극)으로 긴 다리 쪽이다. | + | K는 캐소드(음극)로 짧은 다리 쪽이며, A는 애노드(양극)로 긴 다리 쪽이다. |
LED를 연결하였으면, | LED를 연결하였으면, | ||
Line 273: | Line 306: | ||
그림 4-2. LED를 아두이노에 연결하기 | 그림 4-2. LED를 아두이노에 연결하기 | ||
- | 여러분의 컴퓨터에서 아두이노 IDE를 복사해 둔 폴더를 열어, 아두이노 아이콘을 더블클릭해서 실행 한다. File > New 메뉴를 선택하면 스케치 폴더 이름을 선택하라는 질문이 나온다. 그 위치에 아두이노 스케치가 저장된다. Blink_LED 라는 이름으로 입력하고 OK를 누른다. 그리고, 아래의 코드 (예제 01) 를 아두이노 스케치 편집기 (아두이노 IDE의 메인 윈도우)에 적자. 이 코드는 www.makezine.com/ | + | 여러분의 컴퓨터에서 아두이노 IDE를 복사해 둔 폴더를 열어, 아두이노 아이콘을 더블클릭해서 실행 한다. File > New 메뉴를 선택하면 스케치 폴더 이름을 선택하라는 질문이 나온다. 그 위치에 아두이노 스케치가 저장된다. Blink_LED 라는 이름으로 입력하고 OK를 누른다. 그리고 아래의 코드 (예제 01) 를 아두이노 스케치 편집기 (아두이노 IDE의 메인 윈도우)에 적자. 이 코드는 www.makezine.com/ |
<code c> | <code c> | ||
Line 302: | Line 335: | ||
IDE에 코드를 작성했으면 이제 틀린 곳이 없는지 확인해 볼 필요가 있다. " | IDE에 코드를 작성했으면 이제 틀린 곳이 없는지 확인해 볼 필요가 있다. " | ||
- | 이제 그 프로그램을 보드에 올려(upload) 볼 수 있다. (그림 4-3에 표시된) Upload to I/O Board 버튼을 누르자. 강제로 현재 수행중인 동작을 멈추고, USB를 통해 들어오는 명령들을 수신하기 위해 보드가 리셋된다. 아두이노 IDE가 보낸 현재의 스케치는 보드의 메모리에 저장된 후 동작하기 시작한다. | + | 이제 그 프로그램을 보드에 올려(upload) 볼 수 있다. (그림 4-3에 표시된) Upload to I/O Board 버튼을 누르자. 강제로 현재 수행중인 동작을 멈추고, USB를 통해 들어오는 명령들을 수신하기 위해 보드가 리셋 된다. 아두이노 IDE가 보낸 현재의 스케치는 보드의 메모리에 저장된 후 동작하기 시작한다. |
- | 프로그램 창 하단의 검은 영역에 몇몇 문구들이 나타난 뒤, 모든 과정이 잘 마무리 되었다는 표시로, 그 바로 위쪽 영역에 "Done upload-ing" | + | 프로그램 창 하단의 검은 영역에 몇몇 문구들이 나타난 뒤, 모든 과정이 잘 마무리 되었다는 표시로, 그 바로 위쪽 영역에 "Done upload-ing" |
만약에 그 LED들이 깜박거리지 않거나 "Done uploading" | 만약에 그 LED들이 깜박거리지 않거나 "Done uploading" | ||
Line 310: | Line 343: | ||
여전히 문제가 남아있다면 7장 문제해결을 살펴보라. | 여전히 문제가 남아있다면 7장 문제해결을 살펴보라. | ||
- | 일단 아두이노에 올라간 코드는 다른 스케치를 올리기 전 까지 유지된다. 여러분의 컴퓨터의 하드 드라이브 와 비슷하게, | + | 일단 아두이노에 올라간 코드는 다른 스케치를 올리기 전 까지 유지된다. 여러분의 컴퓨터의 하드 드라이브 와 비슷하게, |
스케치가 제대로 올라갔다면, | 스케치가 제대로 올라갔다면, | ||
- | 여러분이 방금 작성해서 실행한 것을 " | + | 여러분이 방금 작성해서 실행한 것을 " |
===== 소금 좀 주세요 ===== | ===== 소금 좀 주세요 ===== | ||
- | 코두 중 중괄호( {, } )를 주목해 보자. 이는 여러줄의 코드를 묶는데 사용되며, | + | 코드 중 중괄호( {, } )를 주목해 보자. 이는 여러 줄의 코드를 묶는데 사용되며, |
- | 위의 코드 상에서는 두개의 코드 블럭들이 이러한 방법으로 정의되어 있는 것을 볼 수 있다. 각각의 블럭 앞에는 다음과 같은 이상한 명령어가 존재한다. | + | 위의 코드 상에서는 두개의 코드 블록들이 이러한 방법으로 정의되어 있는 것을 볼 수 있다. 각각의 블록 앞에는 다음과 같은 이상한 명령어가 존재한다. |
void setup() | void setup() | ||
- | 이 줄은 코드 블럭에 이름을 붙이기 위한 것이다. 아두이노에거 소금을 건내주는 방법을 알려 주기위한 명령어들을 작성하려면, | + | 이 줄은 코드 블록에 이름을 붙이기 위한 것이다. 아두이노에게 소금을 건네주는 방법을 알려 주기위한 명령어들을 작성하려면, |
===== 아두이노는 멈추지 않는다 ====== | ===== 아두이노는 멈추지 않는다 ====== | ||
- | 아두이노에서는 setup()과 | + | 아두이노에서는 setup()과 |
- | setup()에는 보드가 동작을 시작할 때 한번만 실행되길 원하는 코드들을 모두 두고, loop()에는 계속 반복되어 실행될 코드들을 둔다. 아두이노는 여러분의 컴퓨터 처러며 | + | setup()에는 보드가 동작을 시작할 때 한번만 실행되길 원하는 코드들을 모두 두고, loop()에는 계속 반복되어 실행될 코드들을 둔다. 아두이노는 여러분의 컴퓨터처럼 여러 프로그램을 동시에 실행할 수 없기 때문에 프로그램이 그만 두지(quit) 않게 된다. 보드에 전원을 넣으면 코드가 실행되고, |
===== 진짜 팅커러들은 설명을 작성한다 ===== | ===== 진짜 팅커러들은 설명을 작성한다 ===== | ||
아두이노는 < | 아두이노는 < | ||
- | (저자가 항상 그러기 때문에 확신하건데) 코드 조각을 작성해서 보드에 올린 뒤 " | + | (저자가 항상 그러기 때문에 확신하건데) 코드 조각을 작성해서 보드에 올린 뒤 " |
- | + | ||
===== 코드 한줄 한줄 살펴보기 ===== | ===== 코드 한줄 한줄 살펴보기 ===== | ||
- | 일단, 여러분은 이런 종류의 설명이 불필요하다고 생각할 지도 모르겠다. | + | 일단, 여러분은 이런 종류의 설명이 불필요하다고 생각할 지도 모르겠다. |
<code c> | <code c> | ||
// 예제 01 : LED 깜박이기 | // 예제 01 : LED 깜박이기 | ||
</ | </ | ||
- | 주석은 간단한 메모를 남기기에 유용한다. 위의 제목 주석문은 이 프로그램이 첫번째 예제이며, | + | 주석은 간단한 메모를 남기기에 유용한다. 위의 제목 주석문은 이 프로그램이 첫 번째 예제이며, |
<code c> | <code c> | ||
#define LED 13 // LED 는 13번 핀에 | #define LED 13 // LED 는 13번 핀에 | ||
// 연결되어 있음 | // 연결되어 있음 | ||
</ | </ | ||
- | #define 문은 여러분의 코드에서 자동으로 모두 찾아서 바꾸기같은 것이다. 이 예는, 아두이노에게 LED라는 단어가 나타나면 모두 숫자 13으로 바꾸라는 것이다. 이 변환은 여러분이 Verify나 Upload to I/O Board 를 클릭하면 가장 먼저 수행된다(이 동작은 화면에 표시되지 않기 | + | #define 문은 여러분의 코드에서 자동으로 모두 찾아서 바꾸기 같은 것이다. 이 예는, 아두이노에게 LED라는 단어가 나타나면 모두 숫자 13으로 바꾸라는 것이다. 이 변환은 여러분이 Verify나 Upload to I/O Board 를 클릭하면 가장 먼저 수행된다(이 동작은 화면에 표시되지 않기 |
<code c> | <code c> | ||
void setup() | void setup() | ||
</ | </ | ||
- | 이 줄은 아두이노에게 따라 오는 코드 블럭을 setup()이라 부를 것이라고 알려준다. | + | 이 줄은 아두이노에게 따라 오는 코드 블록을 setup()이라 부를 것이라고 알려준다. |
<code c> | <code c> | ||
{ | { | ||
</ | </ | ||
- | 중괄호를 사용해 코드 블럭이 시작 된다. | + | 중괄호를 사용해 코드 블록이 시작 된다. |
<code c> | <code c> | ||
pinMode(LED, | pinMode(LED, | ||
// 출력으로 설정 | // 출력으로 설정 | ||
</ | </ | ||
- | 드디어, 정말 흥미로운 명령문이 나왔다. pinMode는 아두이노에게 특정 핀을 어떻게 설정할 것인지를 알려준다. 디지털 핀은 INPUT(입력)또는 OUTPUT(출력)으로 설정할 수 있다. 이 상황에서는 LED를 제어하기 위해 출력 핀이 필요하다. 해서, 핀 번호와 모드를 괄호 안에 작성했다. pinMode는 함수이며 괄호안에 있는 단어(또는 숫자)들은 인자라 한다. 아두이노 언어에서 INPUT과 OUTPUT은 상수 이다. (변수 처럼, 상수에도 값을 할당할 수 있다, 다만 상수값들은 이미 정의되어 있고(predefine) 절대로 변경되지 않는다.) | + | 드디어, 정말 흥미로운 명령문이 나왔다. pinMode는 아두이노에게 특정 핀을 어떻게 설정할 것인지를 알려준다. 디지털 핀은 INPUT(입력)또는 OUTPUT(출력)으로 설정할 수 있다. 이 상황에서는 LED를 제어하기 위해 출력 핀이 필요하다. 해서, 핀 번호와 모드를 괄호 안에 작성했다. pinMode는 함수이며 괄호 안에 있는 단어(또는 숫자)들은 인자라 한다. 아두이노 언어에서 INPUT과 OUTPUT은 상수 이다. (변수처럼, |
<code c> | <code c> | ||
} | } | ||
Line 366: | Line 397: | ||
{ | { | ||
</ | </ | ||
- | loop()는 여러분의 | + | loop()는 여러분의 |
<code c> | <code c> | ||
digitalWrite(LED, | digitalWrite(LED, | ||
</ | </ | ||
- | 주석문의 설명처럼 digitalWrite()로 OUTPUT으로 설정된 모든 핀을 켜거나 끌 수 있다. 첫번째 인자(이 경우, LED)는 키고 끌 핀을 지정한다(LED가 13번 핀을 지칭하는 상수임을 되짚어 보면, 13번 핀이 작동하게 된다). 두번째 인자로 해당 핀을 켜거나(HIGH) 끄는(LOW) 동작을 할 수 있다. | + | 주석문의 설명처럼 digitalWrite()로 OUTPUT으로 설정된 모든 핀을 켜거나 끌 수 있다. 첫 번째 인자(이 경우, LED)는 키고 끌 핀을 지정한다(LED가 13번 핀을 지칭하는 상수임을 되짚어 보면, 13번 핀이 작동하게 된다). 두 번째 인자로 해당 핀을 켜거나(HIGH) 끄는(LOW) 동작을 할 수 있다. |
- | 모든 출력핀들을 여러분의 아파트 벽에 있는 것과 같은 -하지만 조그마한- 전원 소켓이라고 상상해 보자. 한국의 가정 전압은 220 V이고, 미국은 110 V이다. 아두이도에서는 더 낮은 5 V로 동작한다. 소프트웨어가 하드웨어로 변하는 마법이 여기서 일어난다. 여러분이 작성한 digitalWrite(LED, | + | 모든 출력 핀들을 여러분의 아파트 벽에 있는 것과 같은 -하지만 조그마한- 전원 소켓이라고 상상해 보자. 한국의 가정 전압은 220 V이고, 미국은 110 V이다. 아두이노에서는 더 낮은 5 V로 동작한다. 소프트웨어가 하드웨어로 변하는 마법이 여기서 일어난다. 여러분이 작성한 digitalWrite(LED, |
<code c> | <code c> | ||
delay(1000); | delay(1000); | ||
</ | </ | ||
- | 아누이노는 아주 기본적인 구조를 가지고 있다. 그러므로, 어떤일이 정확한 주기마다 일어나게 하고 싶다면, 아두이노에게 다음 동작을 수행하기 전에 조용히 기다리라고 말 해 주어야 한다. delay() 는 기본적으로 프로세서가 미리초 단위의 시간동안 아무일도 하지 않고 대기하도록 한다. 미리초는 천분의 일초이다. 따라서, 1000 미리초는 1초와 같다. 그러므로, 1초 동안 LED가 켜진 상태로 유지된다. | + | 아두이노는 아주 기본적인 구조를 가지고 있다. 그러므로 어떤 일이 정확한 주기마다 일어나게 하고 싶다면, 아두이노에게 다음 동작을 수행하기 전에 조용히 기다리라고 말 해 주어야 한다. delay() 는 기본적으로 프로세서가 미리초 단위의 시간동안 아무 일도 하지 않고 대기하도록 한다. 미리초는 천분의 일초이다. 따라서 1000 미리초는 1초와 같다. 그러므로 1초 동안 LED가 켜진 상태로 유지된다. |
- | Arduino has a very basic structure. Therefore, if you want things to happen | + | |
<code c> | <code c> | ||
digitalWrite(LED, | digitalWrite(LED, | ||
</ | </ | ||
- | 이 명령어는 이전에 켰던 LED를 끄게 한다. 어째서 HIGH와 LOW같은 단어를 사용할까? | + | 이 명령어는 이전에 켰던 LED를 끄게 한다. 어째서 HIGH와 LOW같은 단어를 사용할까? |
<code c> | <code c> | ||
delay(1000); | delay(1000); | ||
</ | </ | ||
- | 다시한번 1초 동안 대기한다. LED가 1초 동안 꺼진채로 유지된다. | + | 다시 한 번 1초 동안 대기한다. LED가 1초 동안 꺼진 채로 유지된다. |
<code c> | <code c> | ||
} | } | ||
</ | </ | ||
이 닫힘 중괄호는 loop 함수의 끝을 나타낸다. | 이 닫힘 중괄호는 loop 함수의 끝을 나타낸다. | ||
- | This closing curly bracket marks end of the loop function. | ||
- | 정리해보면, | + | 정리해보면, |
- | * 13번 핀을 출력으로 설정 (시작시 단 한번만) | + | * 13번 핀을 출력으로 설정 (시작 시 단 한번만) |
* 반복을 시작 | * 반복을 시작 | ||
* 13번 핀에 연결된 LED를 켬 | * 13번 핀에 연결된 LED를 켬 | ||
Line 399: | Line 428: | ||
* 13번 핀에 연결된 LED를 끔 | * 13번 핀에 연결된 LED를 끔 | ||
* 1초 대기 | * 1초 대기 | ||
- | * 반복 시작 점으로 되돌아 감 | + | * 반복 시작점으로 되돌아 감 |
너무 힘든 과정이 아니었기를 바란다. 뒤에 나올 예제들을 통해 프로그램을 어떻게 하는지 더 배우게 될 것이다. | 너무 힘든 과정이 아니었기를 바란다. 뒤에 나올 예제들을 통해 프로그램을 어떻게 하는지 더 배우게 될 것이다. | ||
- | 다음 장으로 넘어가기 전에, 이 코드를 가지고 놀아 보기 바란다. 예를 들면 대기(delay)시간을 줄여보거나, | + | 다음 장으로 넘어가기 전에, 이 코드를 가지고 놀아 보기 바란다. 예를 들면 대기(delay)시간을 줄여보거나, |
===== 앞으로 우리가 만들어 볼 것 ===== | ===== 앞으로 우리가 만들어 볼 것 ===== | ||
- | 나는 언제나 빛과 기술을 사용해 다양한 광원을 조절하는 능력이 매력적이라고 생각했다. 운좋게도, | + | 나는 언제나 빛과 기술을 사용해 다양한 광원을 조절하는 능력이 매력적이라고 생각했다. 운 좋게도, 나는 빛을 제어해 사람들과 교감하는 흥미로운 프로젝트에 충분히 참여해 보았다. 아두이노는 정말로 이러한 일에 걸맞다. 이 책을 통해 우리는 아두이노를 어떻게 |
다음 장에선, 엔지니어에겐 지루할 테지만, 신입 아두이노 프로그래머를 겁주지 않는 방법으로 전기의 기본에 대해 설명할 것이다. | 다음 장에선, 엔지니어에겐 지루할 테지만, 신입 아두이노 프로그래머를 겁주지 않는 방법으로 전기의 기본에 대해 설명할 것이다. | ||
Line 414: | Line 443: | ||
그림 4-4. 포터블 팬 | 그림 4-4. 포터블 팬 | ||
| | ||
- | 팬을 떼고 보면, 작은 배터리와 몇개의 전선들, 전기 모터로 구성되어 있으며, 모터로 가는 전선의 중간에 스위치가 있음을 알 수 있다. 새 배터리를 장착하고 스위치를 켜면 모터가 돌기 시작하며 시원한 바람이 나오게 된다. 어떻게 동작하는 것일까? 그럼, 다음과 같이 배터리를 펌프와 저수조, 스위치는 수도꼭지, | + | 팬을 떼고 보면, 작은 배터리와 몇 개의 전선들, 전기 모터로 구성되어 있으며, 모터로 가는 전선의 중간에 스위치가 있음을 알 수 있다. 새 배터리를 장착하고 스위치를 켜면 모터가 돌기 시작하며 시원한 바람이 나오게 된다. 어떻게 동작하는 것일까? 그럼, 다음과 같이 배터리를 펌프와 저수조, 스위치는 수도꼭지, |
- | 이 간단한 수력 시스템을 그림 4-5에서 볼 수 있다. 여기서 중요한 두가지 요소는 수압(은 펌프의 힘에 따라 달라진다)과 관을 따라 흐르는 물의 양(은 파이프의 두께와 흘러가오는 물이 부딫이며 | + | 이 간단한 수력 시스템을 그림 4-5에서 볼 수 있다. 여기서 중요한 두 가지 요소는 수압(은 펌프의 힘에 따라 달라진다)과 관을 따라 흐르는 물의 양(은 파이프의 두께와 흘러나오는 물이 부디쳐 |
그림 4-5. 수력 시스템 | 그림 4-5. 수력 시스템 | ||
| | ||
- | 물레바퀴를 더 빨리 돌게 하려면 위쪽에 더 굵은 관을 사용 하고 펌프의 압축력을 증가시켜야 한다는 것을 쉽게 알아챌 수 있다. 더 큰 관을 사용할 수록 흐르는 물의 양을 더 많아진다. 이렇게 큰 관을 사용하여 관이 더 많은 물을 흐르게 하지 못하게 하는 저항력을 효율적으로 줄일 수 있다. 이러한 방법으로는 어느 정도까지만 효과가 있고, 더 큰 관을 사용해도 물레바퀴의 속도가 더 이상 증가하지 않게된다. 이는 수압이 충분하지 않기 때문으로 이제 부터는 속도를 높이기 위해 더 강력한 펌프 사용해야 한다. 이 방법으로 계속 속도를 높이다 수압이 너무 강해져서 물레바퀴가 수압을 견디디 못하고 부서져 버릴 것이다. | + | 물레바퀴를 더 빨리 돌게 하려면 위쪽에 더 굵은 관을 사용 하고 펌프의 압축력을 증가시켜야 한다는 것을 쉽게 알아챌 수 있다. 더 큰 관을 사용할수록 흐르는 물의 양을 더 많아진다. 이렇게 큰 관을 사용하여 관이 더 많은 물을 흐르게 하지 못하게 하는 저항력을 효율적으로 줄일 수 있다. 이러한 방법으로는 어느 정도까지만 효과가 있고, 더 큰 관을 사용해도 물레바퀴의 속도가 더 이상 증가하지 않게 된다. 이는 수압이 충분하지 않기 때문으로 이제 부터는 속도를 높이기 위해 더 강력한 펌프 사용해야 한다. 이 방법으로 계속 속도를 높이다 수압이 너무 강해져서 물레바퀴가 수압을 견디지 못하고 부서져 버릴 것이다. |
- | 또하나 주목해야 할 것은 물레바퀴가 회전을 함에 따라 회전 축이 어느정도 가열된다는 것이다. 아무리 물레바퀴를 잘 설치했다고 하더라도, | + | 또 하나 주목해야 할 것은 물레바퀴가 회전을 함에 따라 회전축이 어느 정도 가열된다는 것이다. 아무리 물레바퀴를 잘 설치했다고 하더라도, |
- | 그럼, 이 시스템에서 중요한 부분들이 무엇일까? | + | 그럼, 이 시스템에서 중요한 부분들이 무엇일까? |
- | 여러 형태로 변형되게 된다. | + | |
배터리의 전압이 9 V 로 표시될 때, 이 전원 값을 이 작은 " | 배터리의 전압이 9 V 로 표시될 때, 이 전원 값을 이 작은 " | ||
전압은 볼트 단위로 측정한다. 볼트라는 명칭은 전지를 처음 발명한 사람인 알레산드로 볼타의 이름에서 유래했다. | 전압은 볼트 단위로 측정한다. 볼트라는 명칭은 전지를 처음 발명한 사람인 알레산드로 볼타의 이름에서 유래했다. | ||
- | 물의 압력의 역확을 하는 부분이 전기에 있는것 처럼 물이 흐르는 비율에 해당하는 부분 또한 존재한다. 전류가 바로 그것이다. 전류는 " | + | 물의 압력의 역할을 하는 부분이 전기에 있는 것처럼 물이 흐르는 비율에 해당하는 부분 또한 존재한다. 전류가 바로 그것이다. 전류는 " |
- | 마지막으로, | + | 마지막으로, |
- | 생각해 보면 다음의 내용은 매우 직관 적이다. 9 V 인 건전지를 가져와 간단한 회로에 연결하자. 전류를 | + | 생각해 보면 다음의 내용은 매우 직관 적이다. 9 V 인 건전지를 가져와 간단한 회로에 연결하자. 전류를 |
R (저항) = V (전압) / I (전류) | R (저항) = V (전압) / I (전류) | ||
Line 440: | Line 468: | ||
I = V / R | I = V / R | ||
- | 이 규칙은 반드시 기억하고 사용법을 배워야 한다. 왜나하면, 여러분의 작업 대부분에서 이 식 만은 정말로 필요하기 때문이다. | + | 이 규칙은 반드시 기억하고 사용법을 배워야 한다. 왜냐하면, 여러분의 작업 대부분에서 이 식 만은 정말로 필요하기 때문이다. |
===== 푸쉬버튼을 사용해서 LED 제어하기 ===== | ===== 푸쉬버튼을 사용해서 LED 제어하기 ===== | ||
- | 앞서 LED를 깜박이는 것은 쉬웠다. 하지만 만약 여러분이 책을 읽으려는데 독서등이 계속 깜박거린다면 참기 힘들 것이므로, | + | 앞서 LED를 깜박이는 것은 쉬웠다. 하지만 만약 여러분이 책을 읽으려는데 독서등이 계속 깜박거린다면 참기 힘들 것이므로, |
여기서는 사용 가능한 가장 간단한 형태의 센서를 사용해 보겠다. 바로 푸쉬버튼 이다. | 여기서는 사용 가능한 가장 간단한 형태의 센서를 사용해 보겠다. 바로 푸쉬버튼 이다. | ||
- | 푸쉬버튼만을 떼 내어 살펴보면, | + | 푸쉬버튼만을 떼 내어 살펴보면, |
스위치의 상태를 살펴보기 위해서는 새 아두이노의 명령어를 배워야 한다. digitalRead() 함수가 그것이다. | 스위치의 상태를 살펴보기 위해서는 새 아두이노의 명령어를 배워야 한다. digitalRead() 함수가 그것이다. | ||
- | digitalRead() 는 특정 핀에 전압이 인가된 전압이 있는지를 검사한하여, HIGH 또는 LOW 값을 반환해 준다. 지금까지 우리가 살펴본 다른 명령어 들은 정보를 알려주지 않았었다-그 함수들은 우리가 요청한 일을 수행하기만 했다. 하지만 이런 종류의 함수들은 다소 한계가있는데, | + | digitalRead() 는 특정 핀에 전압이 인가된 전압이 있는지를 검사하여, |
- | 그림 4-6에 표시된 회로를 만들어 보자. 이를 만들기 위해서는 몇가지 부품들을 입수해야 할 것이다. (이 부품들은 다른 프로젝트에서도 여러모로 쓸모있는 부품들이다): | + | 그림 4-6에 표시된 회로를 만들어 보자. 이를 만들기 위해서는 몇 가지 부품들을 입수해야 할 것이다. (이 부품들은 다른 프로젝트에서도 여러모로 쓸모 있는 부품들이다): |
* 브레드보드 | * 브레드보드 | ||
* 첨부 A에 브레드보드에 대한 설명을 볼 수 있다. | * 첨부 A에 브레드보드에 대한 설명을 볼 수 있다. | ||
Line 491: | Line 519: | ||
} | } | ||
</ | </ | ||
- | 아두이노에서 File > New 메뉴를 선택하자(다른 스케치가 열려 있으면, 먼저 그 스케치를 저장할지를 물어본다). 아두이노가 여러분이 작성할 새 스케치의 폴더명을 물어보면 PushButtonControl를 입력하자. 예제 02의 코드를 아두이노에 입력한다(또는, | + | 아두이노에서 File > New 메뉴를 선택하자(다른 스케치가 열려 있으면, 먼저 그 스케치를 저장할지를 물어본다). 아두이노가 여러분이 작성할 새 스케치의 폴더 명을 물어보면 PushButtonControl를 입력하자. 예제 02의 코드를 아두이노에 입력한다(또는, |
===== 코드가 어떻게 동작하는가? | ===== 코드가 어떻게 동작하는가? | ||
- | 위 예제를 통해 두가지 새로운 개념이 소개 되었다. 작업한 결과를 반환하는 함수과 조건(if)문이다. | + | 위 예제를 통해 두 가지 새로운 개념이 소개 되었다. 작업한 결과를 반환하는 함수와 조건(if)문이다. |
- | 조건문은 프로그래밍 언어에서 가장 중요한 명령어라고 할 수도 있다. 왜냐하면, | + | 조건문은 프로그래밍 언어에서 가장 중요한 명령어라고 할 수도 있다. 왜냐하면, |
- | 빛이 필요한 동안 계쏙 버튼을 손가락으로 누르고 있다는 것은 실용적이 못하다. 비록 이렇게 함으로써 램프를 켜 둔채로 외출을 할때 얼마나 많은 에너지가 낭비되는지 되돌아 볼수 있긴 하겠지만 실용적인 램프를 위해 어떻게 버튼이 " | + | 빛이 필요한 동안 계속 버튼을 손가락으로 누르고 있다는 것은 실용적이 못하다. 비록 이렇게 함으로써 램프를 켜 둔 채로 외출을 할 때 얼마나 많은 에너지가 낭비되는지 되돌아 볼 수 있긴 하겠지만 실용적인 램프를 위해 어떻게 버튼이 " |
- | ===== 한가지 회로로 수천가지 동작 ===== | + | ===== 한 가지 회로로 수천가지 동작 ===== |
디지털(구형 전자기기에 대비해 프로그램 가능한 전자기기를 칭함)의 엄청난 장점이 이제 명확히 들어난다. 이제 동일한 이전 장에서 보여준 동일한 전자 회로를 사용해, 소프트웨어만 변경하여, | 디지털(구형 전자기기에 대비해 프로그램 가능한 전자기기를 칭함)의 엄청난 장점이 이제 명확히 들어난다. 이제 동일한 이전 장에서 보여준 동일한 전자 회로를 사용해, 소프트웨어만 변경하여, | ||
- | 앞서 언급했듯이. 불을 켜기 위해 손가락으로 계속 누르고 있어야 한다는 건 그다지 실용적이지 못하다. 그러므로, " | + | 앞서 언급했듯이. 불을 켜기 위해 손가락으로 계속 누르고 있어야 한다는 건 그다지 실용적이지 못하다. 그러므로 " |
- | 이 동작을 위해서 우리는 변수라 불리는 것을 사용할 것이다.(벌서 사용해 봤지만 아직 변수에 대해 설명하지는 않았다.) 변수는 아두이노에서 여러분의 데이터를 저장할 수 있는 곳인 메모리에 존재한다. 이는 접착식 메모지와 같은 것이라고 생각할 수 있다. 보통 메모지는, | + | 이 동작을 위해서 우리는 변수라 불리는 것을 사용할 것이다.(벌서 사용해 봤지만 아직 변수에 대해 설명하지는 않았다.) 변수는 아두이노에서 여러분의 데이터를 저장할 수 있는 곳인 메모리에 존재한다. 이는 접착식 메모지와 같은 것이라고 생각할 수 있다. 보통 메모지는, |
<code c> | <code c> | ||
int val = 0; | int val = 0; | ||
</ | </ | ||
- | int 는 이 변수를 정수(inteager number)를 저장하는데 사용할 것이라는 것이다. | + | int 는 이 변수를 정수(integer)를 저장하는데 사용할 것이라는 것이다. |
변수라는 이름에서 알 수 있듯이, 변수는 코드 중 어디에서나 그 값이 바뀔 수 있다. 여러분의 코드에서 뒤에 다음과 같이 작성한다면; | 변수라는 이름에서 알 수 있듯이, 변수는 코드 중 어디에서나 그 값이 바뀔 수 있다. 여러분의 코드에서 뒤에 다음과 같이 작성한다면; | ||
Line 516: | Line 544: | ||
이는 변수 val에 새로운 값, 112를 다시 대입한다는 것이다. | 이는 변수 val에 새로운 값, 112를 다시 대입한다는 것이다. | ||
- | 참고: 아두이노에서 모든 하나의 명렁문 (#define) 을 제외한 모든 명령들이 세미콜론(; | + | 참고: 아두이노에서 모든 하나의 명령문 (#define) 을 제외한 모든 명령들이 세미콜론(; |
- | 다음의 프로그램에서 변수 val 은 핀의 상태를 읽는 digitalRead(); | + | 다음의 프로그램에서 변수 val 은 핀의 상태를 읽는 digitalRead(); |
- | 이제 LED가 켜져 있는지 꺼져 있는지를 기억하기 위한 새 변수를 사용해 볼 것이다. 예제 03A은 이 일을 완성하기 위한 첫번째 시도다. | + | 이제 LED가 켜져 있는지 꺼져 있는지를 기억하기 위한 새 변수를 사용해 볼 것이다. 예제 03A는 이 일을 완성하기 위한 첫 번째 시도다. |
<code c> | <code c> | ||
// 예제 03A: 버튼이 눌리면 LED를 켜고 | // 예제 03A: 버튼이 눌리면 LED를 켜고 | ||
Line 557: | Line 585: | ||
} | } | ||
</ | </ | ||
- | 이제 이 코드를 테스트 해 보자. 동작을 하긴 하는데...좀 | + | 이제 이 코드를 테스트 해 보자. 동작을 하긴 하는데 이상한 점이 발견할 것이다. 빛이 너무 빠르게 꺼다 |
- | 그럼, 코드에서 흥미로운 부분을 살펴보자: state는 변수로 LED가 끄고 켜짐에 따라 0과 1을 저장한다. 버튼이 떼어진 상태에서, | + | 그럼, 코드에서 흥미로운 부분을 살펴보자. state는 변수로 LED가 끄고 켜짐에 따라 0과 1을 저장한다. 버튼이 떼어진 상태에서, |
- | 그 후에, 버튼의 현재 상태를 읽어, 만약 눌려있다면 (val == HIGH), state를 0 에서 1로 바꾸고, 떼어져 있다면 반대로 바꾼다. 이 동작을 위해 우리는 작은 트릭을 사용했다. state 값이 1과 0만 될 수 있으므로, | + | 그 후에, 버튼의 현재 상태를 읽어, 만약 눌려있다면 (val == HIGH), state를 0 에서 1로 바꾸고, 떼어져 있다면 반대로 바꾼다. 이 동작을 위해 우리는 작은 트릭을 사용했다. state 값이 1과 0만 될 수 있으므로, |
- | + | <code c> | |
- | | + | state = 1 – state; |
- | + | </ | |
- | 위 식은 수학에서는 말이 안되는 이야기 일 수 있겠지만 프로그래밍에서는 맞는 식이다. 프로그래밍에서 기호 = 는 "내 뒤에 오는 결과를 내 앞의 변수 이름에 대입" | + | 위 식은 수학에서는 말이 안 되는 이야기 일 수 있겠지만 프로그래밍에서는 맞는 식이다. 프로그래밍에서 기호 = 는 "내 뒤에 오는 결과를 내 앞의 변수 이름에 대입" |
- | 프로그램의 뒷부분에서, | + | 프로그램의 뒷부분에서, |
- | 엉뚱한 결과의 원인은 우리가 버튼을 읽은 방법 때문이다. 아두이노는 매우 빠른데; 내부 명령어를 1초에 16만 개씩 실행한다. 이는, 여러분이 버튼을 손가락으로 누르고 있는 동안, 아두이노는 버튼의 위치를 수천번 읽고 state를 바꾸게 된다는 것이다. 그렇기 때문에 끄고 싶은데 켜지거나 그 반대의 경우처럼, | + | 엉뚱한 결과의 원인은 우리가 버튼을 읽은 방법 때문이다. 아두이노는 매우 빠른데; 내부 명령어를 1초에 16만 개씩 실행한다. 이는, 여러분이 버튼을 손가락으로 누르고 있는 동안, 아두이노는 버튼의 위치를 수천 번 읽고 state를 바꾸게 된다는 것이다. 그렇기 때문에 끄고 싶은데 켜지거나 그 반대의 경우처럼, |
- | 어떻게 수정할 수 있을까? 우리는 버튼이 눌려진 바로 그 순간을 감지해 내야 하며, 이때가 우리가 LED의 상태를 바꿔야 할 때 이다. 저자가 좋아하는 방법은 새로운 val 값을 읽기 전에 이전 값을 저장해 두는 것이다; 그러면, 현재 버터의 위치를 이전의 위치와 비교해 볼 수 있으므로, | + | 어떻게 수정할 수 있을까? 우리는 버튼이 눌려진 바로 그 순간을 감지해 내야하며, |
- | 예제 03B 에 그렇게 동작하는 코드를 포함해 봤다: | + | 예제 03B 에 그렇게 동작하는 코드를 포함해 봤다. |
<code c> | <code c> | ||
// 예제 03B: 버튼이 눌리면 LED를 켜기 | // 예제 03B: 버튼이 눌리면 LED를 켜기 | ||
Line 615: | Line 643: | ||
테스트 해 보자. 이제 거의 다 되었다! | 테스트 해 보자. 이제 거의 다 되었다! | ||
- | 아마 여러분은 이 방법이 완전히 완벽하지 못하다는 것을 알아차렸을 수도 있다. 이는 스위치의 기계 구조에서 오는 문제점 때문이다. 푸쉬버튼은 아주 간단한 장치로, 두 금속 조각이 스프링에 의해 떨어진 상태이다. 여러분이 버튼을 누를 때, 두 조각은 서로 연결이 되어 전기가 흐를 수 있게 된다. 간단하고 잘 동작할 것 처럼 보이지만 실제로는 이 연결이 그렇게 완벽하지 못하다. 특히 버튼을 완전히 누르지 않았을 때는 바운싱이라 | + | 아마 여러분은 이 방법이 완전히 완벽하지 못하다는 것을 알아차렸을 수도 있다. 이는 스위치의 기계 구조에서 오는 문제점 때문이다. 푸쉬버튼은 아주 간단한 장치로, 두 금속 조각이 스프링에 의해 떨어진 상태이다. 여러분이 버튼을 누를 때, 두 조각은 서로 연결이 되어 전기가 흐를 수 있게 된다. 간단하고 잘 동작할 것처럼 보이지만 실제로는 이 연결이 그렇게 완벽하지 못하다. 특히 버튼을 완전히 누르지 않았을 때는 바운싱이라는 가짜 신호가 나타나게 된다. |
- | 푸쉬버턴이 바운싱할 때 아두이노는 반복적으로 켜지고 꺼지는 신호가 아주 빠르게 바뀌는 것 처럼 보게 된다. 바운싱을 제거하기 위한 기술적인 방법이 많이 개발되어 있지만, 경험 상, 이정도의 간단한 코드에서는 대개, 변경을 감지할때 10~50 미리초의 정도 대기하도록 추가하는 정도면 충분하다. | + | 푸쉬버턴이 바운싱할 때 아두이노는 반복적으로 켜지고 꺼지는 신호가 아주 빠르게 바뀌는 것처럼 보게 된다. 바운싱을 제거하기 위한 기술적인 방법이 많이 개발되어 있지만, 경험 상, 이정도의 간단한 코드에서는 대개, 변경을 감지할 때 10~50 미리초의 정도 대기하도록 추가하는 정도면 충분하다. |
- | 예제 03C가 최종 코드이다: | + | 예제 03C가 최종 코드이다. |
<code c> | <code c> | ||
// 예제 03C: 버튼을 누르면 LED를 켬 | // 예제 03C: 버튼을 누르면 LED를 켬 | ||
// 다시 누를 때 까지 유지하기 | // 다시 누를 때 까지 유지하기 | ||
- | // 간단한 바운스 제거 포함 | + | // 간단한 바운싱 제거 포함 |
- | // 개선된 새 버젼!! | + | // 개선된 새 버전!! |
// | // | ||
// 이 예제를 새 아두이노 스케치에 복사해 붙일 것 | // 이 예제를 새 아두이노 스케치에 복사해 붙일 것 | ||
Line 664: | Line 692: | ||
====== 5/Advanced Input and Output ====== | ====== 5/Advanced Input and Output ====== | ||
- | 앞선 장에서 여러분은 아두이노로 할 수 있는 가장 기본적인, | + | 앞선 장에서 여러분은 아두이노로 할 수 있는 가장 기본적인, |
===== 다른 종류의 On/Off 센서 사용해 보기 ===== | ===== 다른 종류의 On/Off 센서 사용해 보기 ===== | ||
- | 앞서 여러분은 어떻게 푸쉬버튼을 사용하는지 배웠다. 이외에도 같은 원리로 동작하는 기초적인 센서들이 많이 있다는 것을 알기 바란다: | + | 앞서 여러분은 어떻게 푸쉬버튼을 사용하는지 배웠다. 이외에도 같은 원리로 동작하는 기초적인 센서들이 많이 있다는 것을 알기 바란다. |
==== 스위치 ==== | ==== 스위치 ==== | ||
- | 푸쉬버튼과 같지만 손을 떼었을때 자동으로 상태가 -이전으로- 변하지 않음 | + | 푸쉬버튼과 같지만 손을 떼었을 때 자동으로 상태가 -이전으로- 변하지 않음 |
==== 온도센서(Thermostats) ==== | ==== 온도센서(Thermostats) ==== | ||
- | 설정한 값 만큼 온도가 오르면 열리는 스위치 | + | 설정한 값만큼 온도가 오르면 열리는 스위치 |
==== 자석 스위치 (reed 스위치) ==== | ==== 자석 스위치 (reed 스위치) ==== | ||
- | 자석을 가까이 대면 접접이 붙는 수위치; 창문이 열렸을 때 울리는 경보 장치에 사용됨 | + | 자석을 가까이 대면 접점이 붙는 수위치; 창문이 열렸을 때 울리는 경보 장치에 사용됨 |
==== 압력센서 (카펫 스위치) ==== | ==== 압력센서 (카펫 스위치) ==== | ||
- | 작은 매트로 카펫이나, | + | 작은 매트로 카펫이나, |
==== 기울기 스위치 ==== | ==== 기울기 스위치 ==== | ||
- | 두개의 접점과 작은 금속 구슬(또는 -사용하지 않기를 바라지만- 수은 한 방울)이 들어있는 작은 전자 부품. 이 스위치는 기울기(tilt) 센서로보 불린다. 그림 5-1은 일반적인 기울기 센서의 내부 모습으로, | + | 두개의 접점과 작은 금속 구슬(또는 -사용하지 않기를 바라지만- 수은 한 방울)이 들어있는 작은 전자 부품. 이 스위치는 기울기(tilt) 센서로도 불린다. 그림 5-1은 일반적인 기울기 센서의 내부 모습으로, |
그림 5-1. 기울기 센서의 내부 | 그림 5-1. 기울기 센서의 내부 | ||
- | 여러분이 접할 수 있는 또 다른 센서는 적외선 센서(PIR 센서 또는 | + | 여러분이 접할 수 있는 또 다른 센서는 적외선 센서(PIR 센서 또는 |
그림 5-2. Typical PIR sensor | 그림 5-2. Typical PIR sensor | ||
- | 이제 여러분이 두 접점을 연결할 수 있는 장치들을 가능한대로 찾아서 경험해 보기 바란다. 이를테면 실내 온도 조절기(더이상 사용하지 않는 오래된 걸 써 보자)를 사용하거나, | + | 이제 여러분이 두 접점을 연결할 수 있는 장치들을 가능한대로 찾아서 경험해 보기 바란다. 이를테면 실내 온도 조절기(더 이상 사용하지 않는 오래된 걸 써 보자)를 사용하거나, |
- | 예를들어 4장의 마지막 예제와 PIR 센서를 사용하면, | + | 예를 들어 4장의 마지막 예제와 PIR 센서를 사용하면, |
===== PWM을 사용해 빛의 밝기를 조절하기 ===== | ===== PWM을 사용해 빛의 밝기를 조절하기 ===== | ||
- | 지금까지 여러분이 얻은 지식들을 사용하면, | + | 지금까지 여러분이 얻은 지식들을 사용하면, |
- | 4장의 첫번째 예제에서 귀뜸했던것 처럼, LED가 깜박이게 보이지 않는 시점까지 delay 함수의 숫자를 조절해 보면, LED가 본래의 50%의 밝기가 된다는걸 확인해 볼 수 있다. 이제 4번 중 한번만 LED가 켜지도록 코드를 수정해 보자. 스케치를 실행하면 이제 대략 25%의 밝기가 됨을 볼 수 있다. 이것이 ,멋지게 말하면, 펄스 폭 변조(PWM)라 불리는 기술이다. LED를 충분히 빠르게 깜박거리면, | + | 4장의 첫 번째 예제에서 귀뜸했던 것처럼, LED가 깜박이게 보이지 않는 시점까지 delay 함수의 숫자를 조절해 보면, LED가 본래의 50%의 밝기가 된다는 걸 확인해 볼 수 있다. 이제 4번 중 한번만 LED가 켜지도록 코드를 수정해 보자. 스케치를 실행하면 이제 대략 25%의 밝기가 됨을 볼 수 있다. 이것이 ,멋지게 말하면, 펄스 폭 변조(PWM)라 불리는 기술이다. LED를 충분히 빠르게 깜박거리면, |
이 기술을 LED 뿐만 아니라 다른 장치들에도 적용된다. 예를 들면, 같은 방법으로 모터의 속도를 조절할 수도 있다. | 이 기술을 LED 뿐만 아니라 다른 장치들에도 적용된다. 예를 들면, 같은 방법으로 모터의 속도를 조절할 수도 있다. | ||
- | 계속 하다 보면, 코드상에서 delay를 사용해서 LED를 깜박이게 하는게 약간 불편하다고 느끼게 될 것이다. 왜냐하면, | + | 계속 하다 보면, 코드 상에서 delay를 사용해서 LED를 깜박이게 하는 게 약간 불편하다고 느끼게 될 것이다. 왜냐하면, |
Figure 5-3. PWM in action | Figure 5-3. PWM in action | ||
- | 예를 들면, analogWrite(9, | + | 예를 들면, analogWrite(9, |
- | 참고: PWM을 세 채널 가지고 있다는것 꽤 좋은 일이다. 왜냐하면 빨강, 파랑, 녹색 LED를 사서 조합하면, | + | 참고: PWM을 세 채널 가지고 있다는 |
- | 그럼, 직접 사용해 보자. 그림 5-4에 보이는 회로를 만들어라. LED는 극성이 있음을 주의하자: 긴 핀(양극)이 오른쪽, 짧은 핀(음극)이 왼쪽에 와야 한다. 또한, 그림에서 보이는 것 처럼 대부분의 LED는 음극 쪽에 평편한 면을 가지고 있다. | + | 그럼, 직접 사용해 보자. 그림 5-4에 보이는 회로를 만들어라. LED는 극성이 있음을 주의하자. 긴 핀(양극)이 오른쪽, 짧은 핀(음극)이 왼쪽에 와야 한다. 또한, 그림에서 보이는 것처럼 대부분의 LED는 음극 쪽에 평편한 면을 가지고 있다. |
Figure 5-4. LED connected to PWM pin | Figure 5-4. LED connected to PWM pin | ||
- | 이제, 아두이노에 새 스케치르 만들어 예제 04를 작성하자 (코드 예제들은 www.makezine.com/ | + | 이제, 아두이노에 새 스케치를 만들어 예제 04를 작성하자 (코드 예제들은 www.makezine.com/ |
<code c> | <code c> | ||
- | // 예제 04: 애플 컴퓨터의 절전기능 처럼 | + | // 예제 04: 애플 컴퓨터의 절전기능처럼 |
// LED를 서서히 켜고 끄기 | // LED를 서서히 켜고 끄기 | ||
// | // | ||
Line 737: | Line 765: | ||
} | } | ||
</ | </ | ||
- | 이제 여러분은 (아두이노로 구현하기는 너무 간단한 기능이라 낭비라 볼 수도 있겠지만) 랩탑 컴퓨터가 가진 멋진 기능의 복제품을 갖게 되었다. 이 지식을 사용하여 우리가 만든 램프를 개선해 보도록 하자. | + | 이제 여러분은 (아두이노로 구현하기는 너무 간단한 기능이라 낭비라 볼 수도 있겠지만) 랩톱 컴퓨터가 가진 멋진 기능의 복제품을 갖게 되었다. 이 지식을 사용하여 우리가 만든 램프를 개선해 보도록 하자. |
- | 이 브레드 보드에 버튼을 읽기 위해 사용했던 회로(4장 참조)를 추가하자. 여러분이, | + | 이 브레드 보드에 버튼을 읽기 위해 사용했던 회로(4장 참조)를 추가하자. 여러분이, |
- | 이 회로를 만들기 위해서는, | + | 이 회로를 만들기 위해서는, |
- | 이 레일들은 전원과 그라운드를 필요한 곳으로 분배하기 위해 사용된다. | + | 이 레일들은 전원과 그라운드를 필요한 곳으로 분배하기 위해 사용된다. |
- | 아직 이를 시도해본 준비가 되어 있지 않더라고 걱정하지 말라: 일단 그림 4-6과 5-4에 보이는 대로 양쪽의 회로를 모두 연결하자. 브레드보드에서 그라운드와 양극을 위해 레일을 사용하는 예제를 6장에서 보게 될 것이다. | + | 아직 이를 시도해볼 준비가 되어 있지 않더라고 걱정하지 말라. 일단 그림 4-6과 5-4에 보이는 대로 양쪽의 회로를 모두 연결하자. 브레드보드에서 그라운드와 양극을 위해 레일을 사용하는 예제를 6장에서 보게 될 것이다. |
- | 다음 예제로 돌아와서, | + | 다음 예제로 돌아와서, |
- | 그럼, 스케치를 살펴보자: | + | 그럼, 스케치를 살펴보자. |
<code c> | <code c> | ||
// 예제 05: 버튼이 눌렸을 때 LED를 켬 | // 예제 05: 버튼이 눌렸을 때 LED를 켬 | ||
Line 761: | Line 789: | ||
#define BUTTON 7 // 푸쉬버튼이 사용한 입력 핀 | #define BUTTON 7 // 푸쉬버튼이 사용한 입력 핀 | ||
- | int val = 0; // 입력핀의 상태 저장 | + | int val = 0; // 입력 핀의 상태 저장 |
int old_val = 0; // " | int old_val = 0; // " | ||
Line 806: | Line 834: | ||
// 방지하기 위해 대기 | // 방지하기 위해 대기 | ||
- | if (brightness > 255) { // 255이 밝기의 최대 값 | + | if (brightness > 255) { // 255가 밝기의 최댓값 |
- | brightness = 0; // 값이 255이 넘는 경우 | + | brightness = 0; // 값이 255가 넘는 경우 |
// 0으로 초기화 함 | // 0으로 초기화 함 | ||
} | } | ||
Line 824: | Line 852: | ||
} | } | ||
</ | </ | ||
- | 이제 이 코드를 시험해 보자. 여러분이 확인할 수 있는 것 처럼, 우리의 | + | 이제 이 코드를 시험해 보자. 여러분이 확인할 수 있는 것처럼, 우리의 |
- | 이제 좀 더 흥비로은 센서를 사용하는 방법을 배워볼 것이다. | + | 이제 좀 더 흥미로운 센서를 사용하는 방법을 배워볼 것이다. |
푸쉬버튼 대신 조광센서를 사용해 본다. | 푸쉬버튼 대신 조광센서를 사용해 본다. | ||
- | 이제 흥미로운 실험을 해 보자. 그림 5-5에서 보이는 것 같은 조광센서(LDR)을 구입하자. 이 센서는 전자부품상점에서 5개 단위로 구할 수 있다. | + | 이제 흥미로운 실험을 해 보자. 그림 5-5에서 보이는 것 같은 조광센서(LDR)를 구입하자. 이 센서는 전자부품상점에서 5개 단위로 구할 수 있다. |
그림 5-5. Light-dependent resistor (LDR) | 그림 5-5. Light-dependent resistor (LDR) | ||
- | 어두운 곳이서 LDR(light-dependent resistor)의 저항값은 꽤 크다. 센서에 빛을 조금 | + | 어두운 곳에서 LDR(light-dependent resistor)의 저항 값은 꽤 크다. 센서에 빛을 조금 |
예제 02(4장의 " | 예제 02(4장의 " | ||
- | 이제 브레드보드에 푸쉬버튼 대신 LDR을 | + | 이제 브레드보드에 푸쉬버튼 대신 LDR을 |
- | ===== 아나로그 입력 ===== | + | ===== 아날로그 입력 ===== |
- | 이전 섹션에서 우리는, 안드로이드가 핀에 인가된 전압을이 있는지를 감지할 수 있고, digitalRead() 함수를 사용해 이를 읽어볼 수 있음을 배웠다. 많은 어플리케이션에서 이런 있다/ | + | 이전 섹션에서 우리는, 안드로이드가 핀에 인가된 전압이 있는지를 감지할 수 있고, digitalRead() 함수를 사용해 이를 읽어볼 수 있음을 배웠다. 많은 어플리케이션에서 이런 있다/ |
이런 종류의 센서로 부터 값을 읽기 위해서는 다른 타입의 핀을 사용해야 한다. | 이런 종류의 센서로 부터 값을 읽기 위해서는 다른 타입의 핀을 사용해야 한다. | ||
- | 아두이노 보드의 오른쪽 아래 부분을 보면 " | + | 아두이노 보드의 오른쪽 아래 부분을 보면 " |
그림 5-6에 보이는 회로를 만들어 보자. 저항은 10k를 사용한다. 예제 06A 의 코드를 실행해 보면, 보드 상의 LED(4장의 "LED 깜박이기" | 그림 5-6에 보이는 회로를 만들어 보자. 저항은 10k를 사용한다. 예제 06A 의 코드를 실행해 보면, 보드 상의 LED(4장의 "LED 깜박이기" | ||
- | Figure 5-6. 아나로그 센서 회로 | + | Figure 5-6. 아날로그 센서 회로 |
<code c> | <code c> | ||
- | // 예제 06A: 아나로그 입력 값의 | + | // 예제 06A: 아날로그 입력 값의 |
// 비율로 LED를 깜박이기 | // 비율로 LED를 깜박이기 | ||
// | // | ||
Line 859: | Line 887: | ||
pinMode(LED, | pinMode(LED, | ||
- | // 참고: 아나로그 핀들은 자동으로 | + | // 참고: 아날로그 핀들은 자동으로 |
// 입력으로 설정됨 | // 입력으로 설정됨 | ||
} | } | ||
Line 870: | Line 898: | ||
digitalWrite(13, | digitalWrite(13, | ||
- | delay(val); // 일정 시간 만큼 | + | delay(val); // 일정 시간만큼 |
// 프로그램을 멈춤 | // 프로그램을 멈춤 | ||
digitalWrite(13, | digitalWrite(13, | ||
- | delay(val); // 일정 시간 만큼 | + | delay(val); // 일정 시간만큼 |
// 프로그램을 멈춤 | // 프로그램을 멈춤 | ||
} | } | ||
Line 881: | Line 909: | ||
이제, 예제 06B를 시험해 보자. 그러기 전에 먼저, 여러분의 회로를 수정할 필요가 있다. 그림 5-4를 다시 보고 그림처럼, | 이제, 예제 06B를 시험해 보자. 그러기 전에 먼저, 여러분의 회로를 수정할 필요가 있다. 그림 5-4를 다시 보고 그림처럼, | ||
<code c> | <code c> | ||
- | // 예제 06B: 아나로그 입력 값으로 | + | // 예제 06B: 아날로그 입력 값으로 |
- | // 정한 밝기 만큼 LED의 | + | // 정한 밝기만큼 LED의 |
// 밝기를 설정하기 | // 밝기를 설정하기 | ||
// | // | ||
Line 896: | Line 924: | ||
pinMode(LED, | pinMode(LED, | ||
- | // 참고: 아나로그 핀들은 자동으로 | + | // 참고: 아날로그 핀들은 자동으로 |
// 입력으로 설정됨 | // 입력으로 설정됨 | ||
} | } | ||
Line 908: | Line 936: | ||
// LED를 켠다 | // LED를 켠다 | ||
- | delay(10); // 일정 시간 만큼 | + | delay(10); // 일정 시간만큼 |
// 프로그램을 멈춤 | // 프로그램을 멈춤 | ||
} | } | ||
</ | </ | ||
- | 참고: analogRead()는 0~1023 범위의 값을 반환하는데 반해 analogWrite()는 인자 값으로 최대 255를 사용할 수 있다. 그래서, val값을 4로 나누어 밝기 값으로 사용하였다. | + | 참고: analogRead()는 0~1023 범위의 값을 반환하는데 반해 analogWrite()는 인자 값으로 최대 255를 사용할 수 있다. 그래서 val값을 4로 나누어 밝기 값으로 사용하였다. |
- | ===== 다른 종류의 아나로그 센서 사용해 보기 ===== | + | ===== 다른 종류의 아날로그 센서 사용해 보기 ===== |
- | 이전 섹션에서 사용한 회로를 그대로 사용하면 대동소이하게 작동하는 매우 많은 종류의 저항식 센서들을 사용해 볼수 있다. | + | 이전 섹션에서 사용한 회로를 그대로 사용하면 대동소이하게 작동하는 매우 많은 종류의 저항형 센서들을 사용해 볼 수 있다. |
- | 써피스터를 사용할 때는 읽어온 값과 실제 측정온도가 바로 매칭되지 않음을 주의하라. 실제 온도를 알아내기 위해서는 실제 온도계가 측정한 값과 아나로그 핀으로 부터 읽을 값을 대조해 보아야 한다. 센서값과 온도값을 테이블로 만들어 아나로그 결과값과 우리가 사는 세상의 온도를 맞추어 볼 수 있다. | + | 서미스터를 사용할 때는 읽어온 값과 실제 측정온도가 바로 매칭 되지 않음을 주의하라. 실제 온도를 알아내기 위해서는 실제 온도계가 측정한 값과 아날로그 핀으로 부터 읽을 값을 대조해 보아야 한다. 센서 값과 온도 값을 테이블로 만들어 아날로그 결과 값과 우리가 사는 세상의 온도를 맞추어 볼 수 있다. |
지금까지는 LED만을 출력 장치로 사용해 봤다. 하지만 우리(사람)가 아두이노가 읽은 값을 확인해 보려면 어떻게 해야 할까? 보드가 읽은 값들을 LED를 깜박여 모스 코드로 표현할 수는 없다(사실 모스코드로 만드는 것도 가능하지만 이보다 더 사람이 읽기 쉬운 방법이 있다). 다음 섹션에서는 이 문제를 해결하기 위해 시리얼 포트를 통해 아두이노와 컴퓨터가 통신하도록 해 보겠다. | 지금까지는 LED만을 출력 장치로 사용해 봤다. 하지만 우리(사람)가 아두이노가 읽은 값을 확인해 보려면 어떻게 해야 할까? 보드가 읽은 값들을 LED를 깜박여 모스 코드로 표현할 수는 없다(사실 모스코드로 만드는 것도 가능하지만 이보다 더 사람이 읽기 쉬운 방법이 있다). 다음 섹션에서는 이 문제를 해결하기 위해 시리얼 포트를 통해 아두이노와 컴퓨터가 통신하도록 해 보겠다. | ||
===== 시리얼 통신 ===== | ===== 시리얼 통신 ===== | ||
- | 이 책의 초반부에서 여러분은 아두이노에는 IDE에서 프로세서에 코드를 업로드 할때 사용하는 USB포트가 하나 있다고 배웠다. 좋은 소식은, 우리가 작성하는 스케치로, | + | 이 책의 초반부에서 여러분은 아두이노에는 IDE에서 프로세서에 코드를 업로드 할 때 사용하는 USB포트가 하나 있다고 배웠다. 좋은 소식은, 우리가 작성하는 스케치로, |
- | 시리얼 객체에는 데이터를 보내고 받기위해 필요한 모든 코드들이 포함되어 있다. 이제부터, | + | 시리얼 객체에는 데이터를 보내고 받기위해 필요한 모든 코드들이 포함되어 있다. 이제부터, |
<code c> | <code c> | ||
- | // 예제 07: 아나로그 입력 0번에서 | + | // 예제 07: 아날로그 입력 0번에서 |
// 읽은 값을 컴퓨터로 전송하기 | // 읽은 값을 컴퓨터로 전송하기 | ||
// 스케치를 올릴 후 반드시 | // 스케치를 올릴 후 반드시 | ||
Line 961: | Line 989: | ||
===== 더 큰 부하를 다루기 (모터, 램프 등...) ===== | ===== 더 큰 부하를 다루기 (모터, 램프 등...) ===== | ||
- | 아두이노 보드의의 각 핀들은 20 미리암페아 까지 전원을 공급할 수 있다: 이는 꽤 작은 량의 전류로, LED를 다루는 정도까지만 가능하다. | + | 아두이노 보드의의 각 핀들은 20 미리 암페어(20mA) |
- | 참고: 모스펫(MOSFET)이라는 이름은, " | + | 참고: 모스펫(MOSFET)이라는 이름은, " |
- | 그림 5-7에서 팬에 붙어 있는 작은 모터를 켜고 끄기 위해, 어떻게 IRF520과 같은 모스펫을 사용하는지 볼 수 있다. 또한, 모터는 아두이노의 9V 커넥터를 전원으로 사용함을 주목하기 바란다. 이 점이 모스펫의 또 다른 장점으로, | + | 그림 5-7에서 팬에 붙어 있는 작은 모터를 켜고 끄기 위해, 어떻게 IRF520과 같은 모스펫을 사용하는지 볼 수 있다. 또한, 모터는 아두이노의 9V 커넥터를 전원으로 사용함을 주목하기 바란다. 이 점이 모스펫의 또 다른 장점으로, |
===== 복합 센서 ===== | ===== 복합 센서 ===== | ||
- | 복학센서는 digitalRead() 또는 analogRead() 보다 복잡한 방법이 필요한 정보를 만들어 내는 센서라고 말할 수 있다. 이런 센서들은 보통 센서안에 정보를 선가공하기 위한 작은 마이크로컨트롤러를 포함하는 작은 회로가 존재한다. | + | 복학센서는 digitalRead() 또는 analogRead() 보다 복잡한 방법이 필요한 정보를 만들어 내는 센서라고 말할 수 있다. 이런 센서들은 보통 센서 안에 정보를 선가공하기 위한 작은 마이크로컨트롤러를 포함하는 작은 회로가 존재한다. |
- | 초음파 거리 센서, 적외선 센서, 가속도 센서등이 이런 복합 센서에 포함된다. 아두이노 웹사이트의 튜토리얼(Tutorials) 섹션(www.arduino.cc/ | + | 초음파 거리 센서, 적외선 센서, 가속도 센서 등이 이런 복합 센서에 포함된다. 아두이노 웹사이트의 튜토리얼(Tutorials) 섹션(www.arduino.cc/ |
Tutorial/ | Tutorial/ | ||
- | Tom Igoe’s | + | 톰 이고의 책, Making Things Talk (O’Reilly)에서 이런 센서를 포함에 많은 복합 센서들에 대해 풍부하게 다루고 있다. |
- | sensors and many other complex sensors. | + | |
Figure 5-7. 아두이노를 위한 모터 회로 | Figure 5-7. 아두이노를 위한 모터 회로 | ||
====== 6/구름 잡기 ====== | ====== 6/구름 잡기 ====== | ||
- | 이전 장 들에서, 여러분은 아두이노의 기본과 기초 여러분이 사용할 수 있는 빌딩 블럭들을 배웠다. 이제 여러분들에게 " | + | 이전 장들에서, |
==== 디지털 출력 ==== | ==== 디지털 출력 ==== | ||
우리는 디지털 출력을 LED를 제어하는데 사용했다. 하지만 적당한 회로를 사용하면 이 핀들을 모터를 제어하거나 소리를 만드는 등 더 많은 것들을 할 수 있다. | 우리는 디지털 출력을 LED를 제어하는데 사용했다. 하지만 적당한 회로를 사용하면 이 핀들을 모터를 제어하거나 소리를 만드는 등 더 많은 것들을 할 수 있다. | ||
- | ==== 아나로그 출력 ==== | + | ==== 아날로그 출력 ==== |
- | 아나로그 출력을 사용하면 LED를 단순히 켜고 끄는것을 넘어 밝기를 조절할 수 있게 된다. 또한 모터의 속도를 제어하는데도 사용한다. | + | 아날로그 출력을 사용하면 LED를 단순히 켜고 끄는 것을 넘어 밝기를 조절할 수 있게 된다. 또한 모터의 속도를 제어하는데도 사용한다. |
==== 디지털 입력 ==== | ==== 디지털 입력 ==== | ||
디지털 입력 핀으로 푸쉬버튼이나 기울기 센서 같은 간단한 센서의 상태를 읽어볼 수 있다. | 디지털 입력 핀으로 푸쉬버튼이나 기울기 센서 같은 간단한 센서의 상태를 읽어볼 수 있다. | ||
- | ==== 아나로그 입력 ==== | + | ==== 아날로그 입력 ==== |
단순히 켜지고 꺼져있는지를 넘어 연속적인 신호를 보내는 가변저항 또는 조광 센서와 같은 센서를 읽을 수 있다. | 단순히 켜지고 꺼져있는지를 넘어 연속적인 신호를 보내는 가변저항 또는 조광 센서와 같은 센서를 읽을 수 있다. | ||
==== 시리얼 통신 ==== | ==== 시리얼 통신 ==== | ||
- | 시리얼 통신을 통해 컴퓨터와 대화할 수 있게 되어, 데이터를 서로 교환할 수 있다. 또는 단순히 아두이노에서 돌아가는 스케지에 어떤 일이 일어나는지 살펴보는데도 사용한다. | + | 시리얼 통신을 통해 컴퓨터와 대화할 수 있게 되어, 데이터를 서로 교환할 수 있다. 또는 단순히 아두이노에서 돌아가는 스케치에 어떤 일이 일어나는지 살펴보는데도 사용한다. |
- | 이 장에서는, | + | 이 장에서는, |
- | 이제부터 내 안에 잠재된 디자이너가 등장할 차례다. 우리는 저자가 가장 좋아하는 이탈리아 디자이너인 조 콜롬보의 클래식 램프의 21세기 버젼을 만들어 볼 것이다. 우리가 만들어 볼 물체는 1964년 작 " | + | 이제부터 내 안에 잠재된 디자이너가 등장할 차례다. 우리는 저자가 가장 좋아하는 이탈리아 디자이너인 조 콜롬보의 클래식 램프의 21세기 버전을 만들어 볼 것이다. 우리가 만들어 볼 물체는 1964년 작 " |
그림 6-1. 완성된 램프 | 그림 6-1. 완성된 램프 | ||
- | 그림 6-1 에서 보듯이 이 램프는 단순한 구 형이며, 책상에서 굴러떨어지는 것을 방지하기 위해 커다라 구멍이 있는 | + | 그림 6-1 에서 보듯이 이 램프는 단순한 구 형태로, 책상에서 굴러 떨어지는 것을 방지하기 위해 커다란 구멍이 있는 |
기능적인 측면에서, | 기능적인 측면에서, | ||
===== 계획하기 ===== | ===== 계획하기 ===== | ||
- | 이제, 우리가 무엇을 만들어 내려 하는지와 이를 위해서 어떤 부품들이 필요한지 살펴보자. 첫번째로, | + | 이제, 우리가 무엇을 만들어 내려 하는지와 이를 위해서 어떤 부품들이 필요한지 살펴보자. 첫 번째로, 인터넷에 연결하기 위해 아두이노가 필요하다. 아두이노 보드는 단지 하나의 USB포트만을 가지고 있기 때문에, 인터넷 망에 바로 연결할 수는 없다. 그러므로 아두이노와 인터넷을 이어 줄 방법을 찾아야 한다. 컴퓨터에서 돌아가는 어플리케이션을 이용하는 것이 일반적이다. 어플리케이션은 인터넷에 연결되며, |
아두이노는 작은 메모리를 가진 간단한 컴퓨터이기 때문에 커다란 파일을 쉽게 처리하지 못한다. 우리가 RSS 피드에 접속해서 얻어오는 것은 매우 긴 XML 파일이며, | 아두이노는 작은 메모리를 가진 간단한 컴퓨터이기 때문에 커다란 파일을 쉽게 처리하지 못한다. 우리가 RSS 피드에 접속해서 얻어오는 것은 매우 긴 XML 파일이며, | ||
| | ||
- | | + | |
- | 프록시는 다음과 같은 일들을 한다. makezine.com 에서 RSS 피드를 다운로드 하여, 그 결과물인 XML 파일에서 단어들을 모두 뽑아낸다. 그러고, 이들 전체를 살펴보며 문장에 " | + | 프록시는 다음과 같은 일들을 한다. makezine.com 에서 RSS 피드를 다운로드 하여, 그 결과물인 XML 파일에서 단어들을 모두 뽑아낸다. 그러고, 이들 전체를 살펴보며 문장에 " |
하드웨어적인 면에서, 우리는 푸쉬버튼 예제와, 빛 센서 예제, PWM LED 제어 (3개)와 시리얼 통신 예제를 조합할 것이다. | 하드웨어적인 면에서, 우리는 푸쉬버튼 예제와, 빛 센서 예제, PWM LED 제어 (3개)와 시리얼 통신 예제를 조합할 것이다. | ||
Line 1020: | Line 1047: | ||
아두이노는 간단한 장치이므로, | 아두이노는 간단한 장치이므로, | ||
- | 16진수는 편리하다, | + | 16진수는 편리하다, |
===== 코딩 ===== | ===== 코딩 ===== | ||
여러분이 실행해야 할 스케치가 두개 있다. 하나는 프로세싱 스케치, 다른 하나는 아두이노 스케치 이다. 이곳의 코드는 프로세싱 스케치 이다. | 여러분이 실행해야 할 스케치가 두개 있다. 하나는 프로세싱 스케치, 다른 하나는 아두이노 스케치 이다. 이곳의 코드는 프로세싱 스케치 이다. | ||
Line 1053: | Line 1080: | ||
void setup() { | void setup() { | ||
size(640, | size(640, | ||
- | frameRate(10); | + | frameRate(10); |
font = loadFont(" | font = loadFont(" | ||
Line 1059: | Line 1086: | ||
textFont(font, | textFont(font, | ||
// 중요 공지: | // 중요 공지: | ||
- | // Serial.list()로 받아온 포트 중 첫번째가 | + | // Serial.list()로 받아온 포트 중 첫 번째가 |
- | // 포트가 여러분의 아두이노 일 것이다. 아니라면, | + | // 포트가 여러분의 아두이노일 것이다. 아니라면, |
// 다음 줄 앞의 //을 지워 주석을 해제하고, | // 다음 줄 앞의 //을 지워 주석을 해제하고, | ||
- | // 다시 실행하여 시리얼 포트 목록을 확인하라. 그리고, | + | // 다시 실행하여 시리얼 포트 목록을 확인하라. 그리고 |
// [ 와 ] 사이의 0을 여러분의 아두이노가 연결된 | // [ 와 ] 사이의 0을 여러분의 아두이노가 연결된 | ||
// 포트의 번호로 바꾸라. | // 포트의 번호로 바꾸라. | ||
Line 1127: | Line 1154: | ||
buffer = buffer.substring(0, | buffer = buffer.substring(0, | ||
- | // 버터의 스트링을 십진수로 변환 | + | // 버퍼의 스트링을 십진수로 변환 |
light = int(buffer); | light = int(buffer); | ||
Line 1134: | Line 1161: | ||
// 우리는 아두이노에서 읽은 값들을 받은 후에 | // 우리는 아두이노에서 읽은 값들을 받은 후에 | ||
- | // 처리할 것이다. 그러므로, 다음에 읽는 값을 최신 | + | // 처리할 것이다. 그러므로 다음에 읽는 값을 최신 |
// 으로 하기 위해 버퍼에 쌓여 있던 센서에서 읽은 | // 으로 하기 위해 버퍼에 쌓여 있던 센서에서 읽은 | ||
// 값들을 지운다. | // 값들을 지운다. | ||
Line 1169: | Line 1196: | ||
StringTokenizer st = | StringTokenizer st = | ||
- | new StringTokenizer(data," | + | new StringTokenizer(data," |
while (st.hasMoreTokens()) { | while (st.hasMoreTokens()) { | ||
// 각 데이터 조각은 소문자가 된다 | // 각 데이터 조각은 소문자가 된다 | ||
Line 1183: | Line 1210: | ||
} | } | ||
- | // 64를 우리가 처리할 수 있는 최대 값으로 설정 | + | // 64를 우리가 처리할 수 있는 최댓값으로 설정 |
if (peace > 64) peace = 64; | if (peace > 64) peace = 64; | ||
if (love > 64) love = 64; | if (love > 64) love = 64; | ||
if (arduino > 64) arduino = 64; | if (arduino > 64) arduino = 64; | ||
- | peace = peace * 4; // 4를 곱함. 최대값은 255가 된다 | + | peace = peace * 4; // 4를 곱함. 최댓값은 255가 된다 |
- | love = love * 4; // 이 값은 4 바이트(ARGB)로 | + | love = love * 4; // 이 값은 4 바이트(ARGB)로 |
- | arduino = arduino * 4; // 을 만들때 편리하다 | + | arduino = arduino * 4; // 을 만들 때 편리하다 |
} | } | ||
catch (Exception ex) { // 오류가 있으면 스케치를 멈춤 | catch (Exception ex) { // 오류가 있으면 스케치를 멈춤 | ||
Line 1199: | Line 1226: | ||
} | } | ||
</ | </ | ||
- | 프로세싱 스케치가 바르게 동작하기 위해서 여러분이 해야할 일이 두가지 있다. 우선, 프로세싱에게 우리가 스케치에 사용할 글꼴을 생성하라고 해야한다. 그러기 위해서, 이 스케치를 생성 및 저장하고, | + | 프로세싱 스케치가 바르게 동작하기 위해서 여러분이 해야 할 일이 두 가지 있다. 우선, 프로세싱에게 우리가 스케치에 사용할 글꼴을 생성하라고 해야 한다. 그러기 위해서, 이 스케치를 생성 및 저장하고, |
다음으로, | 다음으로, | ||
- | 다음은 아두이노 스케치이다. (www.makezine.com/ | + | 다음은 아두이노 스케치이다. (www.makezine.com/ |
<code c> | <code c> | ||
// 예제 08B: 아두이노 네트워크 램프 | // 예제 08B: 아두이노 네트워크 램프 | ||
Line 1296: | Line 1323: | ||
===== 회로 조립하기 ===== | ===== 회로 조립하기 ===== | ||
- | 그림 6-2에서 어떻게 회로를 조립하는지 볼 수 있다. 다이어그램에 | + | 그림 6-2에서 어떻게 회로를 조립하는지 볼 수 있다. 다이어그램에서 LED에 연결된 저항을 제외한 모든 저항에는 10K 옴을 사용해야한다. LED에는 더 낮은 값의 저항을 사용한다. |
- | 5장의 PWM 예제에서 살펴봤듯이 LED들은 극성이 있음을 기억하자: | + | 5장의 PWM 예제에서 살펴봤듯이 LED들은 극성이 있음을 기억하자. |
회로에서, | 회로에서, | ||
Figure 6-2. " | Figure 6-2. " | ||
- | 그림에서 보이는 것 처럼 회로를 만들다 빨간색 LED 하나, 녹색 하나, 파란색 하나를 사용한다. 다음으로, | + | 그림에서 보이는 것처럼 회로를 만들다 빨간색 LED 하나, 녹색 하나, 파란색 하나를 사용한다. 다음으로, |
- | 이제 브레드 보드를 유리 구에 설치하여 조립을 마무리 하자. 유리 구를 구하는 가장 간단하고 싼 방법은 이케아 " | + | 이제 브레드 보드를 유리 구에 설치하여 조립을 마무리 하자. 유리 구를 구하는 가장 간단하고 싼 방법은 이케아 " |
- | 세개의 LED를 각기 사용하는 대신에, 하나의 다리가 네개 달린 RGB LED를 사용할 수도 있다. RGB LED도 그림 6-2에서 보이는 것과 매우 유사한 방법으로 연결한다. 한가지 변경해야 하는 것은 각기 세개의 아두이노 그라운드 핀으로의 연결 대신, 하나의 다리(공동 캐소드로 불림)를 그라운드에 연결하면 된다. SparkFun 에서 4리드(다리) RGB LED를 몇 달러에 판매한다(www.sparkfun.com; | + | 세 개의 LED를 각기 사용하는 대신에, 하나의 다리가 네 개 달린 RGB LED를 사용할 수도 있다. RGB LED도 그림 6-2에서 보이는 것과 매우 유사한 방법으로 연결한다. 한 가지 변경해야 하는 것은 각기 세 개의 아두이노 그라운드 핀으로의 연결 대신, 하나의 다리(공동 캐소드로 불림)를 그라운드에 연결하면 된다. SparkFun 에서 4리드(다리) RGB LED를 몇 달러에 판매한다. (www.sparkfun.com; |
- | 파트번호 COM-00105). 단색 LED와 달리, RGB LED에서는 가장 긴 다리가 그라운드에 연결된다. 나머지 짧은 다리들은 (분리된 빨강, 파랑, 녹색 LED 처럼 다리과 핀 사이에 저항을 사용하여) 아두이노의 9번, 10번, 11번에 연결한다. | + | |
- | ===== 이제부터는 조립 방법이다: ===== | + | ===== 이제부터는 조립 방법이다 ===== |
- | 램프를 분해하여 밑부분에서 램프로 들어가는 케이블을 제거한다.이 램프는 더이상 전원 콘센트를 사용하지 않게 될 것이다. | + | 램프를 분해하여 밑 부분에서 램프로 들어가는 케이블을 제거한다. 이 램프는 더 이상 전원 콘센트를 사용하지 않게 될 것이다. |
브레드보드에 아두이노를 붙이고 글루건을 사용해 브레드보드를 램프의 뒷면에 붙인다. | 브레드보드에 아두이노를 붙이고 글루건을 사용해 브레드보드를 램프의 뒷면에 붙인다. | ||
- | 더 긴 전선들을 RGB LED에 납땝하고, LED를 전구가 있었던 곳에 붙인다. LED에서 온 전선들은 브레드 보드(에서 LED를 제거 하기 전에 원래 연결되었던 곳)에 연결한다. 다리가 네개인 RGB LED를 사용하다면 단지 하나의 전선만 그라운드에 연결되어야 함을 주의 하자. | + | 더 긴 전선들을 RGB LED에 납땜하고, LED를 전구가 있었던 곳에 붙인다. LED에서 온 전선들은 브레드 보드(에서 LED를 제거하기 전에 원래 연결되었던 곳)에 연결한다. 다리가 네 개인 RGB LED를 사용하다면 단지 하나의 전선만 그라운드에 연결되어야 함을 주의 하자. |
- | 구를 세워둘 만한 구멍이 있는 멋진 나무 조각을 찾거나, 램프를 살 때 딸려온 종이상자의 윗부분을 5cm 정도 잘라 램프를 거치할 구멍을 만든다. 스텐드를 더 안정감 있게 하기 위해 종이상자의 안쪽부분을 글루건을 이용해 보강한다. | + | 구를 세워둘 만한 구멍이 있는 멋진 나무 조각을 찾거나, 램프를 살 때 딸려온 종이상자의 윗부분을 5cm 정도 잘라 램프를 거치할 구멍을 만든다. 스탠드를 더 안정감 있게 하기 위해 종이상자의 안쪽부분을 글루건을 이용해 보강한다. |
- | 구를 스텐드에 자리 잡고, USB 케이블을 윗부분으로 빼내어 컴퓨터에 연결한다. | + | 구를 스탠드에 자리 잡고, USB 케이블을 윗부분으로 빼내어 컴퓨터에 연결한다. |
여러분의 프로세싱 코드를 실행한다. 온/오프 버튼을 누르고, 램프가 살아나는지 보자. | 여러분의 프로세싱 코드를 실행한다. 온/오프 버튼을 누르고, 램프가 살아나는지 보자. | ||
- | 연습삼아, | + | 연습 삼아, 방안이 어두워지면 램프가 켜지도록 코드를 추가해 보자. 또 다른 추가 기능들로는 다음과 같은 것들이 있다. |
* 기울기(틸트) 센서를 추가해 램프를 다른 방향으로 기울이면 꺼지거나 켜지도록 함. | * 기울기(틸트) 센서를 추가해 램프를 다른 방향으로 기울이면 꺼지거나 켜지도록 함. | ||
- | * 누군가 곁에 있는것을 알아내도록 작은 PIR 센서를 추가하고, | + | * 누군가 곁에 있는 것을 알아내도록 작은 PIR 센서를 추가하고, |
- | * 색을 수동으로 제어할 수 있도록 다른 모드를 생성 또는 다양한 색으로 | + | * 색을 수동으로 제어할 수 있도록 다른 모드를 생성 또는 다양한 색으로 |
다른 것들을 생각하고, | 다른 것들을 생각하고, | ||
====== 7/ | ====== 7/ | ||
실험을 하다보면 아무것도 동작하지 않아 어떻게 고쳐야 하는 알아내야 하는 시점이 오게 된다. | 실험을 하다보면 아무것도 동작하지 않아 어떻게 고쳐야 하는 알아내야 하는 시점이 오게 된다. | ||
- | 문제해결(Troubleshooting)과 디버깅은 몇가지 간단한 규칙으로 된 고대 예술인데, | + | 문제해결(Troubleshooting)과 디버깅은 몇 가지 간단한 규칙으로 된 고대 예술인데, |
- | 여러분이 전자와 아두이노를 다루면 다둘수록, 점점 더 배우고 경험을 쌓을수록, | + | 여러분이 전자와 아두이노를 다루면 다룰수록, 점점 더 배우고 경험을 쌓을수록, |
- | 아두이노 기반으 프로젝트들은 모두 하드웨어와 소프트웨어를 둘다 만들기 때문에, 잘못된 지점을 찾아야 할 것이 한 곳 이상이다. 버그를 찾을때는 아래의 세가지 항목을 따르도록 하자. | + | 아두이노 기반의 프로젝트들은 모두 하드웨어와 소프트웨어를 둘 다 만들기 때문에, 잘못된 지점을 찾아야 할 것이 한 곳 이상이다. 버그를 찾을 때는 아래의 세 가지 항목을 따르도록 하자. |
**이해** | **이해** | ||
- | 여러분이 사용하는 부품들이 어떻게 동작하는지 최대한 이해하도록 노력하라. 또한, 프로젝트를 완성했을때 부품들이 어떻게 역활을 수행하는지 상상해 보도록 하자. 이 접근방법은 각각의 부품들을 독립적으로 테스트 하는 방법을 떠오르게 해 줄 것이다. | + | 여러분이 사용하는 부품들이 어떻게 동작하는지 최대한 이해하도록 노력하라. 또한, 프로젝트를 완성했을 때 부품들이 어떻게 역할을 수행하는지 상상해 보도록 하자. 이 접근방법은 각각의 부품들을 독립적으로 테스트 하는 방법을 떠오르게 해 줄 것이다. |
**단순화와 세분화** | **단순화와 세분화** | ||
- | 고대 로마인들은 종종 분할통치를 언급했었다. 여러분의 이해하는 것을 바탕으로 프로젝트를 -머릿속으로- 각각의 구성부품으로 나누어 보고 각 부품들이 시작하고 끝날때의 동작을 찾아내 보도록 하자. | + | 고대 로마인들은 종종 분할통치를 언급했었다. 여러분의 이해하는 것을 바탕으로 프로젝트를 -머릿속으로- 각각의 구성부품으로 나누어 보고 각 부품들이 시작하고 끝날 때의 동작을 찾아내 보도록 하자. |
**제외하기와 확인하기** | **제외하기와 확인하기** | ||
- | 문제점을 살펴보는 동안, 각 구성부품을 독립적으로 테스트하여, | + | 문제점을 살펴보는 동안, 각 구성부품을 독립적으로 테스트하여, |
- | 디버깅은 이 과정들을 소프트웨어에 적용할때 사용하는 단어이다. 1940년대의 그레이스 후퍼가 디버깅이라는 말이 처음 사용한 것으로 알려져 있다. 그 당시의 컴퓨터는 대부분 | + | 디버깅은 이 과정들을 소프트웨어에 적용할 때 사용하는 단어이다. 1940년대의 그레이스 후퍼가 디버깅이라는 말이 처음 사용한 것으로 알려져 있다. 그 당시의 컴퓨터는 대부분 |
===== 보드 테스트 ===== | ===== 보드 테스트 ===== | ||
- | 가장 첫번째 예제인 "LED 깜박이기" | + | 가장 첫 번째 예제인 "LED 깜박이기" |
- | 여러분의 프로젝트를 비난하기 앞서, 여러분은 비행기 조종사들이 이륙전 비행기를 제대로 날게 하기 위해 체크리스트를 확인하는 것 처럼, 몇가지 것들을 순서대로 확인할 필요가 있다. | + | 여러분의 프로젝트를 비난하기에 앞서, 여러분은 비행기 조종사들이 이륙 전에 비행기를 제대로 날게 하기 위해 체크리스트를 확인하는 것처럼, 몇 가지 것들을 순서대로 확인할 필요가 있다. |
USB케이블로 아두이노를 여러분의 컴퓨터의 USB 포트에 연결한다. | USB케이블로 아두이노를 여러분의 컴퓨터의 USB 포트에 연결한다. | ||
- | * 컴퓨터가 켜져 있는지 확인한다(어리석게 들릴수도 있지만 이런 일이 정말로 발생한다). PWR라고 표시된 녹색 빛이 들어와 있다는 것은 컴퓨터가 아두이노에게 전원을 공급하고 있다는 것을 의미한다. 이 LED가 매우 희미한 상태라면, | + | * 컴퓨터가 켜져 있는지 확인한다(어리석게 들릴 수도 있지만 이런 일이 정말로 발생한다). PWR라고 표시된 녹색 빛이 들어와 있다는 것은 컴퓨터가 아두이노에게 전원을 공급하고 있다는 것을 의미한다. 이 LED가 매우 희미한 상태라면, |
- | * 아두이노가 새 것이라면, | + | * 아두이노가 새것이라면, |
- | * 외장 전원(아답터)를 사용 중이며, 이전 버젼의 아두이노(Extreme, | + | * 외장 전원(어댑터)을 사용 중이며, 이전 버전의 아두이노(Extreme, |
- | 참고: 다른 스케치에서 문제가 발생할 경우나 보드가 제대로 동작하는지 확인할 필요가 있는 경우. 첫번째의 "LED 깜박이기" | + | 참고: 다른 스케치에서 문제가 발생할 경우나 보드가 제대로 동작하는지 확인할 필요가 있는 경우. 첫 번째의 "LED 깜박이기" |
이 단계들을 모두 성공적으로 마쳤다면, | 이 단계들을 모두 성공적으로 마쳤다면, | ||
===== 브레드보드에 만든 회로 테스트 ===== | ===== 브레드보드에 만든 회로 테스트 ===== | ||
- | 이제 아두이노의 5V, GND핀에서 점퍼선을 사용해 브래드 보드의 양극과 음극 레일에 연결한다. 만약, 녹색의 PWR(전원) LED가 꺼진다면 점퍼선을 즉시 제거하자. 이 반응은 의미는 여러분의 회로에 커다란 실수가 있다는 것으로, 회로 중 어딘가가 " | + | 이제 아두이노의 5V, GND핀에서 점퍼선을 사용해 브레드보드의 양극과 음극 레일에 연결한다. 만약, 녹색의 PWR(전원) LED가 꺼진다면 점퍼선을 즉시 제거하자. 이 반응은 의미는 여러분의 회로에 커다란 실수가 있다는 것으로, 회로 중 어딘가가 " |
- | 참고: 만약 여러분의 컴퓨터에 손상을 줄 주도 모른다는 우려가 든다면, 많은 컴퓨터의 전류 보호기능은 잘 동작하며 빠르게 반응한다는 것을 기억하자. 또한 아두이노 보드에는 전류-보로 장치인 " | + | 참고: 만약 여러분의 컴퓨터에 손상을 줄 주도 모른다는 우려가 든다면, 많은 컴퓨터의 전류 보호기능은 잘 동작하며 빠르게 반응한다는 것을 기억하자. 또한 아두이노 보드에는 전류-보로 장치인 " |
- | 만약 정말로 의심스러우면, | + | 만약 정말로 의심스러우면, |
- | 숏 서킷이 발생하면, | + | 숏 서킷이 발생하면, |
언제나 가장 먼저 살펴보기 시작해야 할 것은 (5V와 GND에 연결된) 전원 이다. 둘러보고, | 언제나 가장 먼저 살펴보기 시작해야 할 것은 (5V와 GND에 연결된) 전원 이다. 둘러보고, | ||
- | 무언가를 고치는데 있어서 가장 중요한 규칙은 한번에 하나씩 바꿔가며 차근 차근 작업을 진행해 보는 것이다. 저자의 학교 교수님이자 첫번째 고용주인 마우리지오 피로라(Maurizio Pirola)는 이 규칙을 내 머리속에 밖아 두었다. 무엇인가를 디버깅할 때, 그리고 일이 잘 풀리고 있지 않을때 마다(믿어도 된다. 이런 일은 정말 자주 일어난다) 그의 얼굴이 내 머리속에 나타나 " | + | 무언가를 고치는데 있어서 가장 중요한 규칙은 한 번에 하나씩 바꿔가며 차근차근 작업을 진행해 보는 것이다. 저자의 학교 교수님이자 첫 번째 고용주인 마우리지오 피로라(Maurizio Pirola)는 이 규칙을 내 머릿속에 밖아 두었다. 무엇인가를 디버깅할 때, 그리고 일이 잘 풀리고 있지 않을 때 마다(믿어도 된다. 이런 일은 정말 자주 일어난다) 그의 얼굴이 내 머릿속에 나타나 "한 번에 하나씩 고쳐봐... 한 번에 하나씩 고쳐봐" |
- | 각각의 디버깅 경험으로 부터 여러분의 머리에는 결점들과 가능한 수정방법에 대한 " | + | 각각의 디버깅 경험으로 부터 여러분의 머리에는 결점들과 가능한 수정방법에 대한 " |
===== 문제를 고립하기 ===== | ===== 문제를 고립하기 ===== | ||
- | 또하나의 중요한 규칙은 문제를 재현하는 확실한 방법을 찾는 것이다. 여러분의 회로가 무작위로 이상 동작을 보인다면, | + | 또 하나의 중요한 규칙은 문제를 재현하는 확실한 방법을 찾는 것이다. 여러분의 회로가 무작위로 이상 동작을 보인다면, |
- | 또한, 문제점을 가능한 자세하게 기술하는 것은 해결 방법을 찾기 위한 좋은 방법이다. 문제점이 어떤지 설명해 줄 사람을 찾아 보라-많은 경우, 문제를 서술하는 과정에서 여러분의 머리에서 해결방법이 떠오를 것이다. 브라이언 W. 케닝험과 롭 파이크는 저서 Practice of Programming (Addison-Wesley, | + | 또한, 문제점을 가능한 자세하게 기술하는 것은 해결 방법을 찾기 위한 좋은 방법이다. 문제점이 어떤지 설명해 줄 사람을 찾아보라-많은 경우, 문제를 서술하는 과정에서 여러분의 머리에서 해결방법이 떠오를 것이다. 브라이언 W. 케닝험과 롭 파이크는 저서 Practice of Programming (Addison-Wesley, |
===== IDE에서 발생하는 문제점들 ===== | ===== IDE에서 발생하는 문제점들 ===== | ||
일부 경우, 특히 OS로 윈도를 사용한다면, | 일부 경우, 특히 OS로 윈도를 사용한다면, | ||
- | 아두이노 아이콘을 더블클릭했을때 오류가 나온다면, | + | 아두이노 아이콘을 더블클릭했을 때 오류가 나온다면, |
또한, 윈도 사용자들은 윈도가 COM 포트 번호를 COM10 이상으로 할당하는 경우 문제가 될 가능성이 있다. 이런 일이 발생하면, | 또한, 윈도 사용자들은 윈도가 COM 포트 번호를 COM10 이상으로 할당하는 경우 문제가 될 가능성이 있다. 이런 일이 발생하면, | ||
- | " | + | " |
- | 이제, 아두이노의 USB 시리얼 포트에도 각은 일을 한다. 한가지 바꿀 점은 COM 포트를 여러분이 비워 둔 번호에(COM9 이하로) 할당하는 것이다. | + | 이제, 아두이노의 USB 시리얼 포트에도 각은 일을 한다. 한 가지 바꿀 점은 COM 포트를 여러분이 비워 둔 번호에(COM9 이하로) 할당하는 것이다. |
- | 위에 제시된 방법으로 해결되지 않거나, 여기에 나오지 않은 문제를 만나게 된다면 아두이노 사이트의 문제해결 페이지, www.arduino.cc/ | + | 위에 제시된 방법으로 해결되지 않거나, 여기에 나오지 않은 문제를 만나게 된다면 아두이노 사이트의 문제해결 페이지, www.arduino.cc/ |
===== 온라인에서 도움을 얻는 방법 ===== | ===== 온라인에서 도움을 얻는 방법 ===== | ||
- | 곤경에 빠졌을때 도움을 요청하지 않고 혼자서 | + | 곤경에 빠졌을 때 도움을 요청하지 않고 혼자서 |
- | 무엇이든 검색엔진에 잘라내어 붙여보고(컨트롤 + C, 컨트롤 + V) 그 문제에 대해 언급한 사람이 있는지 살펴보는 습관을 갖도록 하라. 예를 들어, 아두이노 IDE가 거진 오류 문구들을 뿜어 낸다면, 그 내용을 복사하여 구글에 붙여서 검색하여 결과를 살펴보라. | + | 무엇이든 검색엔진에 잘라내어 붙여보고(컨트롤 + C, 컨트롤 + V) 그 문제에 대해 언급한 사람이 있는지 살펴보는 습관을 갖도록 하라. 예를 들어, 아두이노 IDE가 거칠게 |
- | 여러분이 작업하고 있는 코드의 일부분, 또는 단지 함수의 이름을 적어서 같은 방법으로 검색해 보자. 여러분의 주위를 둘러보라: 모든 것은 이미 발명되어 있고, 웹 페이지 어딘가에 저장되어 있다. | + | 여러분이 작업하고 있는 코드의 일부분, 또는 단지 함수의 이름을 적어서 같은 방법으로 검색해 보자. 여러분의 주위를 둘러보라. 모든 것은 이미 발명되어 있고, 웹 페이지 어딘가에 저장되어 있다. |
- | 더 깊이 살펴 보려면, 메인 웹사이트인 www.arduino.cc 부터 시작하여 FAQ(자주 묻는 질문)를 살펴보라 (www.arduino.cc/ | + | 더 깊이 살펴보려면, |
- | 이 방법으로 아직도 답을 찾지 못했다면 포럼(www.arduino.cc/ | + | 이 방법으로 아직도 답을 찾지 못했다면 포럼(www.arduino.cc/ |
* 사용하고 있는 아두이노 보드의 종류. | * 사용하고 있는 아두이노 보드의 종류. | ||
* 아두이노 IDE를 실행하기 위해 사용하는 OS의 종류. | * 아두이노 IDE를 실행하기 위해 사용하는 OS의 종류. | ||
- | * 여러분이 하려는 일에 대한 일반적인 설명을 적는다. 사용중인 부품 중 이상한 부분의 데이터시트의 링크한다. | + | * 여러분이 하려는 일에 대한 일반적인 설명을 적는다. 사용 중인 부품 중 이상한 부분의 데이터시트의 링크한다. |
여러분이 질문을 얼마나 잘 갖추어 했느냐에 따라 답변의 개수가 결정된다. | 여러분이 질문을 얼마나 잘 갖추어 했느냐에 따라 답변의 개수가 결정된다. | ||
- | 무슨일이 있어도 아래에 나열된 일들을 하지 않는다면 답변을 받을 확률은 올라간다 (이 규칙들은 아두이노 뿐만 아니라 다른 어떤 온라인 포럼에서도 통한다): | + | 무슨 일이 있어도 아래에 나열된 일들을 하지 않는다면 답변을 받을 확률은 올라간다. (이 규칙들은 아두이노뿐만 아니라 다른 어떤 온라인 포럼에서도 통한다) |
- | * 글 전체를 대문자((옮긴이 주: 국내 포럼에서라면 모든 글자에 색을 사용하는 것과 같음))로 작성. 이는 사람들이 많이 싫어하는 일이며, 여러분의 이마에 " | + | * 글 전체를 대문자((옮긴이 주: 국내 포럼에서라면 모든 글자에 색을 사용하는 것과 같음))로 작성. 이는 사람들이 많이 싫어하는 일이며, 여러분의 이마에 " |
* 동일한 글을 포럼의 여러 다른 부분에 올리는 것. | * 동일한 글을 포럼의 여러 다른 부분에 올리는 것. | ||
- | * 여러분의 글에 " | + | * 여러분의 글에 " |
- | * " | + | * " |
- | * 앞선 포인트의 다른 변종은, 질문이 명확한 무엇인가라면, | + | * 앞선 포인트의 다른 변종은, 질문이 명확한 무엇인가라면, |
- | * 학교에서 내준 것으로 의심되는 글을 올리거나, | + | * 학교에서 내준 것으로 의심되는 글을 올리거나, |
====== 부록 A/ | ====== 부록 A/ | ||
- | 회로가 동작하도록 만들기 위해서는, | + | 회로가 동작하도록 만들기 위해서는, |
- | 이 문제의 해결책은 브레드보드라고 불리우는 매우 실용적인 장치이다. 그림 A-1에서 보이듯이, | + | 이 문제의 해결책은 브레드보드라고 불리는 매우 실용적인 장치이다. 그림 A-1에서 보이듯이, |
- | 대부분의 부품들의 다리들은 표준 거리만큼 공간을 두고 배열되어 있기 때문에, 여러개의 다리가 다린 칩은 브레드 보드에 잘 맞는다. 브레드 보드의 모든 접점들이 동일하지는 않다-약간 다른 부분이 있다. 가장 위와 아래에 있는 줄들(빨간색과 파란색이 칠해져 있고 + 와 - 가 표시어 있다)은 가로방향으로 연결되어 있으며, 전원이나 그라운드가 필요할 때 점퍼선(회로에서 두 위치를 연결하기위해 사용하는 짧은 전선 조각)을 사용해 매우 빠르게 전원을 보드의 어느곳으로든 전달하는 용도로 사용한다. 브레드보드에서 마지막으로 여러분이 알아야 할 것은 가운데에 위치한, 작은 칩의 넓이만큼 떨어진 큰 공간이다. 모든 세로 구멍 줄은 이 중간지점에서 끊기기 때문에, 가운데에 칩을 | + | 대부분의 부품들의 다리들은 표준 거리만큼 공간을 두고 배열되어 있기 때문에, 여러 개의 다리가 다린 칩은 브레드 보드에 잘 맞는다. 브레드 보드의 모든 접점들이 동일하지는 않다-약간 다른 부분이 있다. 가장 위와 아래에 있는 줄들(빨간색과 파란색이 칠해져 있고 + 와 - 가 표시되어 있다)은 가로방향으로 연결되어 있으며, 전원이나 그라운드가 필요할 때 점퍼선(회로에서 두 위치를 연결하기위해 사용하는 짧은 전선 조각)을 사용해 매우 빠르게 전원을 보드의 어느 곳으로든 전달하는 용도로 사용한다. 브레드보드에서 마지막으로 여러분이 알아야 할 것은 가운데에 위치한, 작은 칩의 넓이만큼 떨어진 큰 공간이다. 모든 세로 구멍 줄은 이 중간지점에서 끊기기 때문에, 가운데에 칩을 |
그림 A-1. 브레드보드 | 그림 A-1. 브레드보드 | ||
- | ====== 부록 B/ | + | ====== 부록 B/ |
- | 전자부품을 사용기 위해서는 부품들을 구별할 수 있어야 | + | 전자부품을 사용하기 위해서는 부품들을 구별할 수 있어야 |
- | 현재의 초보자들은 이러한 표시들을 해독하는 방법을 알아야 한다. " | + | 현재의 초보자들은 이러한 표시들을 해독하는 방법을 알아야 한다. " |
||색||값|| | ||색||값|| | ||
Line 1435: | Line 1461: | ||
||빨강색||2|| | ||빨강색||2|| | ||
||주황색||3|| | ||주황색||3|| | ||
- | ||노랑색||4|| | + | ||노란색||4|| |
||초록색||5|| | ||초록색||5|| | ||
||파란색||6|| | ||파란색||6|| | ||
Line 1444: | Line 1470: | ||
||금색||±5%|| | ||금색||±5%|| | ||
- | 예를들면, | + | 예를 들면, 갈색, 검은색, 주황색, 금색으로 표시된 것은 1 0 3 ±5% 를 의미한다. 쉽지 않은가? 하지만, 예외규칙이 있기 때문에 주의해야 한다. 세 번째 띠는 사실 값에 들어있는 0의 개수를 의미한다. 따라서 1 0 3 은 사실, 10 뒤에 0이 세 개 붙어 있음을 의미한다. 해서, 저항의 값은 10,000 옴 ±5% 가 된다. 전자쟁이들은 k(키로: |
- | 캐패시터들은 조금더 쉬운 방법으로 읽을 수 있다. 원통 모양의 | + | 커패시터들은 조금 더 쉬운 방법으로 읽을 수 있다. 원통 모양의 |
- | 접시(납작한) 모양의 | + | 접시(납작한) 모양의 |
- | 따라서, 104라고 표시된 | + | 따라서 104라고 표시된 |
====== 부록 C/ | ====== 부록 C/ | ||
+ | 다음은 아두이노 언어에서 지원하는 모든 표준 명령어들에 대한 짧은 설명들이다. | ||
+ | |||
+ | 더 자세한 내용을 참조하려면 다음 링크를 살펴보라: | ||
- | Here is a quick explanation of all the standard instructions supported | ||
- | by the Arduino language. | ||
- | 자세한 내용을 참조하려면 다음 링크를 살펴보라: | ||
- | For a more detailed reference, see: arduino.cc/ | ||
- | Structure | ||
===== 구조 ===== | ===== 구조 ===== | ||
- | 아두이노 스케치는 두 부분으로 돌아간다: | + | 아두이노 스케치는 두 부분으로 돌아간다. |
<code c> | <code c> | ||
void setup() | void setup() | ||
</ | </ | ||
- | 이 곳이 여러분의 초기화 코드-스케치가 시작되여 주 작업을 반복적(loop)으로 하기 앞서 보드를 셋업하기 위한 코드가 위치하느 곳이다. | + | 이곳이 여러분의 초기화 코드-스케치가 시작되어 주 작업을 반복적(loop)으로 하기에 앞서 보드를 셋업하기 위한 코드가 위치하는 곳이다. |
<code c> | <code c> | ||
void loop() | void loop() | ||
</ | </ | ||
- | 여러분의 주 코드는 이곳에 위치한다. 여기에 있는 명렁문들은 보드가 꺼질 때 까지 계속 반복된다. | + | 여러분의 주 코드는 이곳에 위치한다. 여기에 있는 명령문들은 보드가 꺼질 때 까지 계속 반복된다. |
===== 특수 기호들 ===== | ===== 특수 기호들 ===== | ||
- | 아두이노에는 코드 줄, 주석, 코드 블럭을 나타내기 위한 기호들이 사용된다. | + | 아두이노에는 코드 줄, 주석, 코드 블록을 나타내기 위한 기호들이 사용된다. |
==== ; (세미콜론) ==== | ==== ; (세미콜론) ==== | ||
- | 모든 명령문(코드 줄)은 세미콜론을 끝난다. 이 문법은 여러분이 자유롭게 코드를 구성할 수 있게 한다. 두개의 명령문은 같은 줄에 두는것도, | + | 모든 명령문(코드 줄)은 세미콜론을 끝난다. 이 문법은 여러분이 자유롭게 코드를 구성할 수 있게 한다. 두개의 명령문은 같은 줄에 두는 것도, 각 명문을 세미콜론을 사용해 분리해 두면, 가능하다 (하지만, 이 경우 코드를 읽기가 더 힘들어 진다) |
예제: | 예제: | ||
Line 1481: | Line 1505: | ||
</ | </ | ||
==== {} (중괄호) ==== | ==== {} (중괄호) ==== | ||
- | 이 기호는 코드 블럭을 표시하기 위해 사용한다. 예를들면, | + | 이 기호는 코드 블록을 표시하기 위해 사용한다. 예를 들면, loop() 함수에 코드를 쓰려면, 코드의 앞뒤로 중괄호를 사용해야 한다. |
예제: | 예제: | ||
Line 1490: | Line 1514: | ||
</ | </ | ||
==== 주석 ==== | ==== 주석 ==== | ||
- | 주석문들은 아두이노 프로세서에서 무시하는 문장열이지만, | + | 주석문들은 아두이노 프로세서에서 무시하는 문장 열이지만, |
<code c> | <code c> | ||
// 한 줄 주석: 이 문장은 줄의 끝까지 무시 됨 | // 한 줄 주석: 이 문장은 줄의 끝까지 무시 됨 | ||
Line 1502: | Line 1526: | ||
아두이노에는 특별한 값들로 미리 정의된 키워드들이 포함되어 있다. | 아두이노에는 특별한 값들로 미리 정의된 키워드들이 포함되어 있다. | ||
- | 예를 들어, HIGH 와 LOW는 여러분의 아두이노 핀을 켜거나 끌때 사용된다. INPUT 과 OUTPUT은 특정 핀의 입력이나 출력으로 설정하는데 사용한다. true 와 false 는 이름대로 참과 거짓, 즉 조건문이나 표현식이 참인지 거짓인지를 의미한다. | + | 예를 들어, HIGH 와 LOW는 여러분의 아두이노 핀을 켜거나 끌 때 사용된다. INPUT 과 OUTPUT은 특정 핀의 입력이나 출력으로 설정하는데 사용한다. true 와 false 는 이름대로 참과 거짓, 즉 조건문이나 표현식이 참인지 거짓인지를 의미한다. |
==== 변수 ==== | ==== 변수 ==== | ||
- | 변수들은 여러분이 스체지에서 | + | 변수들은 여러분이 스케치에서 |
아두이노가 아주 간단한 프로세서이기 때문에, 변수를 선언할 때는 변수의 종류(타입)를 지정해 줘야 한다. 이렇게 함으로서 프로세서에게 여러분이 저장할 값의 크기를 알려주는 것이다. | 아두이노가 아주 간단한 프로세서이기 때문에, 변수를 선언할 때는 변수의 종류(타입)를 지정해 줘야 한다. 이렇게 함으로서 프로세서에게 여러분이 저장할 값의 크기를 알려주는 것이다. | ||
- | 다음은 사용 가능한 데이타 타입들이다: | + | 다음은 사용 가능한 데이터 타입들이다: |
===boolean=== | ===boolean=== | ||
- | 다음 둘 값중 하나를 담을 수 있다: true 또는 false. | + | 참, 거짓을 의미하는 true 또는 false 두 값 중 하나를 담을 수 있다. |
===char=== | ===char=== | ||
영문 한 글자(A 같은)를 담을 수 있다((옮긴이 주: 한글은 한 글자에 2~3 char가 필요하다)). 모든 컴퓨터가 그러하듯, | 영문 한 글자(A 같은)를 담을 수 있다((옮긴이 주: 한글은 한 글자에 2~3 char가 필요하다)). 모든 컴퓨터가 그러하듯, | ||
- | 참고: 컴퓨터에서 주로 사용하는 문자 셋에는 두 종료가 있다. 아스키(ASCII) 와 유니코드(UNICODE)가 그것이다. 아스키는 127개의 글자들의 모음(셋)으로 시리얼 터미널 간 텍스트를 전송하거나, | + | 참고: 컴퓨터에서 주로 사용하는 문자 셋에는 두 종료가 있다. 아스키(ASCII) 와 유니코드(UNICODE)가 그것이다. 아스키는 127개의 글자들의 모음(셋)으로 시리얼 터미널 간 텍스트를 전송하거나, |
===byte=== | ===byte=== | ||
- | 0에서 255 사이의 숫자들을 담는다. char와 같이 byte는 메모리에서 한 바이트 만을 사용한다. | + | 0에서 255 사이의 숫자들을 담는다. char와 같이 byte는 메모리에서 한 바이트만을 사용한다. |
===int=== | ===int=== | ||
- | 2 바이트의 메모리를 사용하며 -32,768 에서 32,768 사이의 숫자를 표현할 수 있다. 아두이노에서 가장 일반적으로 사용되는 데이타 타입이다. | + | 2 바이트의 메모리를 사용하며 -32,768 에서 32,768 사이의 숫자를 표현할 수 있다. 아두이노에서 가장 일반적으로 사용되는 데이터 타입이다. |
===unsigned int=== | ===unsigned int=== | ||
- | int 와 같이 2 바이트를 사용하지만 unsigned(부호 없음) 라는 전치사처럼 음수 값을 담을 수 없다. 따라서, 0 부터 65,535 사이의 숫자들을 담을 수 있다. | + | int 와 같이 2 바이트를 사용하지만 unsigned(부호 없음) 라는 전치사처럼 음수 값을 담을 수 없다. 따라서 0 부터 65,535 사이의 숫자들을 담을 수 있다. |
===long=== | ===long=== | ||
- | int의 두배 크기의 데이터 타입으로 -2, | + | int의 두 배 크기의 데이터 타입으로 -2, |
===unsigned long=== | ===unsigned long=== | ||
- | long의 unsigned(부호 없는) 버젼으로, 0 에서 4, | + | long의 unsigned(부호 없는) 버전으로, 0 에서 4, |
===float=== | ===float=== | ||
- | 이 타입은 꽤 크며, 실수(floating-point)를 담을 수 있다. 다시 말해, 소수점을 포함하는 숫자들을 담는데 사용할 수 있다. float는 여러분의 귀중한 RAM을 4바이트 사용하며, | + | 이 타입은 꽤 크며, 실수(floating-point)를 담을 수 있다. 다시 말해, 소수점을 포함하는 숫자들을 담는데 사용할 수 있다. float는 여러분의 귀중한 RAM을 4바이트 사용하며, |
===double=== | ===double=== | ||
- | 두배로 정밀한(Double-precision) 실수로, 최대 1.7976931348623157 x 10308 까지 담을 수 있다. 와우! 정말 크다! | + | 두 배로 정밀한(Double-precision) 실수로, 최대 1.7976931348623157 x 10308 까지 담을 수 있다. 와우! 정말 크다! |
===string=== | ===string=== | ||
- | 아스키 글자들의 모음으로, | + | 아스키 글자들의 모음으로, |
- | 저장 공간으로 string의 각 글자(char)들은 한 바이트를 사용하며, | + | 저장 공간으로 string의 각 글자(char)들은 한 바이트를 사용하며, |
<code c> | <code c> | ||
char string1[] | char string1[] | ||
Line 1548: | Line 1572: | ||
===배열(array)=== | ===배열(array)=== | ||
- | 인덱스 값으로 접근할 수 있는 변수들의 리스트이다. array는 쉽게 접근할 수 있는, 값들로 된 테이블을 만드는데 사용한다. 예를 들어, 여러분이 LED의 밝기를 조절하기(fade) 하기 위해 밝기의 정도들을 저장하기 위해서 light01, light02, ... 와 같은 여석개의 변수들을 만들 수도 있을 것이다. 하지만 다음과 같은 간단한 배열(array)를 사용하는것이 더 좋은 방법이다: | + | 인덱스 값으로 접근할 수 있는 변수들의 리스트이다. array는 쉽게 접근할 수 있는, 값들로 된 테이블을 만드는데 사용한다. 예를 들어, 여러분이 LED의 밝기를 조절하기(fade) 하기 위해 밝기의 정도들을 저장하기 위해서 light01, light02, ... 와 같은 여섯 개의 변수들을 만들 수도 있을 것이다. 하지만 다음과 같은 간단한 배열(array)을 사용하는 것이 더 좋은 방법이다: |
<code c> | <code c> | ||
int light[6] = {0, 20, 50, 75, 100}; | int light[6] = {0, 20, 50, 75, 100}; | ||
</ | </ | ||
- | 배열을 선언하는데, | + | 배열을 선언하는데, |
==== 제어 문 ==== | ==== 제어 문 ==== | ||
아두이노에는 여러분의 스케치의 논리적인 흐름을 제어하기 위한 키워드들이 포함되어 있다. | 아두이노에는 여러분의 스케치의 논리적인 흐름을 제어하기 위한 키워드들이 포함되어 있다. | ||
===if . . . else=== | ===if . . . else=== | ||
- | 이 구조는 여러분의 프로그램에서 의사결정을 하는데 사용한다. if 뒤에는 반드시 괄호로 싼 질문이 따라와야 한다. 만약(if) 문장이 참(true)이면, | + | 이 구조는 여러분의 프로그램에서 의사결정을 하는데 사용한다. if 뒤에는 반드시 괄호로 싼 질문이 따라와야 한다. 만약(if) 문장이 참(true)이면, |
예제: | 예제: | ||
Line 1567: | Line 1591: | ||
===for=== | ===for=== | ||
- | 지정한 수 만큼 코드 블럭을 반복한다. | + | 지정한 수만큼 코드 블록을 반복한다. |
예제: | 예제: | ||
Line 1577: | Line 1601: | ||
===switch case=== | ===switch case=== | ||
- | 여러분의 프로그램에서 if 문이 도로상의 분기점 같은 역활을 한다면, switch case 문은 복잡한 로터리같은 기능을 제공한다. 이 구문은 여러분의 프로그램을 변수의 값에 따라서 다양한 방향으로 이끌어 주게 된다. 긴 if 문 리스트를 대치하여 코드를 간소하게 유지할 수 있기 때문에 switch case 문은 꽤 유용한다. | + | 여러분의 프로그램에서 if 문이 도로상의 분기점 같은 역할을 한다면, switch case 문은 복잡한 로터리 같은 기능을 제공한다. 이 구문은 여러분의 프로그램을 변수의 값에 따라서 다양한 방향으로 이끌어 주게 된다. 긴 if 문 리스트를 대치하여 코드를 간소하게 유지할 수 있기 때문에 switch case 문은 꽤 유용한다. |
예제: | 예제: | ||
Line 1595: | Line 1619: | ||
===while=== | ===while=== | ||
- | if 문과 비슷하지만, | + | if 문과 비슷하지만, |
예제: | 예제: | ||
<code c> | <code c> | ||
- | // 센서 값이 512 미만일때 LED를 깜작이기 | + | // 센서 값이 512 미만일 때 LED를 깜작이기 |
sensorValue = analogRead(1); | sensorValue = analogRead(1); | ||
while (sensorValue < 512) { | while (sensorValue < 512) { | ||
Line 1611: | Line 1635: | ||
===do . . . while=== | ===do . . . while=== | ||
- | while 문과 같지만, 상태를 평가하기에 전에 코드를 먼저 실행한다. 이 구문은 상태를 검사하기 앞서 여러분의 코드 블럭을 적어도 한번 수행해야 하는 경우에 사용한다. | + | while 문과 같지만, 상태를 평가하기에 전에 코드를 먼저 실행한다. 이 구문은 상태를 검사하기에 앞서 여러분의 코드 블록을 적어도 한번 수행해야 하는 경우에 사용한다. |
예제: | 예제: | ||
Line 1625: | Line 1649: | ||
===break=== | ===break=== | ||
- | 이 명령어는 반복문에서 빠져나와 반본문 아래에 위치한 코드를 수행하게 한다. 또한, switch case 구문에서 각각의 섹션들을 분리하기 위해서도 사용된다. | + | 이 명령어는 반복문에서 빠져나와 반복문 아래에 위치한 코드를 수행하게 한다. 또한, switch case 구문에서 각각의 섹션들을 분리하기 위해서도 사용된다. |
예제: | 예제: | ||
<code c> | <code c> | ||
- | // 센서 값이 512 미만일때 LED를 깜작이기 | + | // 센서 값이 512 미만일 때 LED를 깜작이기 |
do { | do { | ||
// 버튼이 눌리면 반복문을 빠져 나감 | // 버튼이 눌리면 반복문을 빠져 나감 | ||
Line 1658: | Line 1682: | ||
===return=== | ===return=== | ||
- | 실행중인 함수를 멈추고 함수에서 되돌아 가도록(return) 한다. 또한 함수 안에서 값을 반환하는데 이 명령어를 사용할 수 있다. | + | 실행중인 함수를 멈추고 함수에서 되돌아가도록(return) 한다. 또한 함수 안에서 값을 반환하는데 이 명령어를 사용할 수 있다. |
- | 예를 들어, computeTemperature() 라는 온도를 계산하는 함수를 호출하고, | + | 예를 들어, computeTemperature() 라는 온도를 계산하는 함수를 호출하고, |
<code c> | <code c> | ||
int computeTemperature() { | int computeTemperature() { | ||
Line 1669: | Line 1693: | ||
==== 계산과 수식 ==== | ==== 계산과 수식 ==== | ||
- | 특별한 문법을 사용하여 여러분의 아두이노에게 복잡한 계산을 하도록 할 수 있다. + 와 - 는 여러분이 학교에서 배운것과 같은 동작을 한다, 곱샙은 * 로 표시하며, | + | 특별한 문법을 사용하여 여러분의 아두이노에게 복잡한 계산을 하도록 할 수 있다. + 와 - 는 여러분이 학교에서 배운 것과 같은 동작을 한다, 곱셈은 * 로 표시하며, |
- | 추가로 " | + | 추가로 " |
예제 | 예제 | ||
Line 1681: | Line 1705: | ||
=== 비교 연산자 === | === 비교 연산자 === | ||
- | if, while, for 문에서 조건문을 기술할때 다음의 연산자들을 사용할 수 있다: | + | if, while, for 문에서 조건문을 기술할 때 다음의 연산자들을 사용할 수 있다: |
* == 같다 | * == 같다 | ||
Line 1692: | Line 1716: | ||
=== 논리 연산자 === | === 논리 연산자 === | ||
- | 여러개의 조건문을 조합할 때 이 연산자들을 사용한다. 예를 들어, 센서로 부터 받은 값이 5에서 10 사이인지 검사하고자 한다면 다음과 같이 적을 수 있다: | + | 여러 개의 조건문을 조합할 때 이 연산자들을 사용한다. 예를 들어, 센서로 부터 받은 값이 5에서 10 사이인지 검사하고자 한다면 다음과 같이 적을 수 있다: |
<code c> | <code c> | ||
if ((sensor => 5) && (sensor <=10)) | if ((sensor => 5) && (sensor <=10)) | ||
</ | </ | ||
- | 논리 연산자는 세가지가 종류가 있다. 모든 조건이 참이어야 참(and); < | + | 논리 연산자는 세 가지가 종류가 있다. 모든 조건이 참이어야 참(and); < |
==== 복합 연산자 ==== | ==== 복합 연산자 ==== | ||
이 연산자들은 코드를 값을 증가시키는 것 같은 매우 빈번한 동작을 좀 더 간결화 하기 위한 연산자이다. | 이 연산자들은 코드를 값을 증가시키는 것 같은 매우 빈번한 동작을 좀 더 간결화 하기 위한 연산자이다. | ||
Line 1711: | Line 1735: | ||
=== 증가와 감소 (-- 와 ++) === | === 증가와 감소 (-- 와 ++) === | ||
- | 이 연산자들은 값을 1 만큼 증가 또는 감소 시킨다. 주의해야 할 점이 하나 있는데, i++ 값을 먼저 평가하고 i를 1 만큼 증가시키는 반면, ++i 는 먼저 i 를 1 만큼 증가시킨 후 값을 | + | 이 연산자들은 값을 1 만큼 증가 또는 감소시킨다. 주의해야 할 것이 하나 있는데, i++ 값을 먼저 평가하고 i를 1 만큼 증가시키는 반면, ++i 는 먼저 i 를 1 만큼 증가시킨 후 값을 |
=== += , –=, *= and /= === | === += , –=, *= and /= === | ||
Line 1723: | Line 1747: | ||
=== pinMode(pin, | === pinMode(pin, | ||
- | 디지털 핀을 입력이나 출력으로 재 설정 한다. | + | 디지털 핀을 입력이나 출력으로 재설정 한다. |
예제: | 예제: | ||
Line 1739: | Line 1763: | ||
=== int digitalRead(pin) === | === int digitalRead(pin) === | ||
- | 입력핀의 상태를 읽는다. 핀에 전압이 인가되어 있으면 HIGH를, 전압이 없으면 LOW를 반환한다. | + | 입력 핀의 상태를 읽는다. 핀에 전압이 인가되어 있으면 HIGH를, 전압이 없으면 LOW를 반환한다. |
예제: | 예제: | ||
Line 1747: | Line 1771: | ||
=== int analogRead(pin) === | === int analogRead(pin) === | ||
- | 아나로그 입력 핀에 인가된 전압을 읽어 0 에서 5V 전압을 의미하는, | + | 아날로그 입력 핀에 인가된 전압을 읽어 0 에서 5V 전압을 의미하는, |
예제: | 예제: | ||
<code c> | <code c> | ||
- | val = analogRead(0); | + | val = analogRead(0); |
</ | </ | ||
Line 1763: | Line 1787: | ||
=== shiftOut(dataPin, | === shiftOut(dataPin, | ||
- | 데이터를 디지털 출력의 개수를 확장하는, | + | 데이터를 디지털 출력의 개수를 확장하는, |
예제: | 예제: | ||
Line 1771: | Line 1795: | ||
=== unsigned long pulseIn(pin, | === unsigned long pulseIn(pin, | ||
- | 디지털 입력핀으로 들어오는 펄스의 길이를 측정한다. 예를들면, | + | 디지털 입력 핀으로 들어오는 펄스의 길이를 측정한다. 예를 들면, 적외선 센서나, 가속도 센서(accelerometers)같이 출력 값을 펄스의 길이 변화로 내는 센서들을 읽을 때 유용하다. |
예제: | 예제: | ||
Line 1787: | Line 1811: | ||
예제: | 예제: | ||
<code c> | <code c> | ||
- | duration = millis()-lastTime; | + | duration = millis()-lastTime; |
</ | </ | ||
=== delay(ms) === | === delay(ms) === | ||
- | 주어진 미리 초 만큼 프로그램을 잠시 멈춤 | + | 주어진 미리 초만큼 프로그램을 잠시 멈춤 |
예제: | 예제: | ||
Line 1825: | Line 1849: | ||
=== abs(x) === | === abs(x) === | ||
- | x의 절대값, 음수인 경우 양수로 변환한 값을 반환한다. x가 5인 경우 5가 반환되며, | + | x의 절댓값, 음수인 경우 양수로 변환한 값을 반환한다. x가 5인 경우 5가 반환되며, |
예제: | 예제: | ||
Line 1833: | Line 1857: | ||
=== constrain(x, | === constrain(x, | ||
- | a 와 b 사이로 제약된 x 값을 반환. 만약 x가 a보다 작으면, 이 함수는 그냥 a를 반환한다. 만약 x가 b보다 크면, 반환값은 b가 된다. | + | a 와 b 사이로 제약된 x 값을 반환. 만약 x가 a보다 작으면, 이 함수는 그냥 a를 반환한다. 만약 x가 b보다 크면, 반환 값은 b가 된다. |
예제: | 예제: | ||
Line 1841: | Line 1865: | ||
=== map(value, fromLow, fromHigh, toLow, toHigh) === | === map(value, fromLow, fromHigh, toLow, toHigh) === | ||
- | fromLow 부터 fromHigh 범위의 값을 toLow 에서 toHigh 범위로 사상(map) 한다. 아나로그 센서에서 읽은 값을 처리하는대 매우 유용하다. | + | fromLow 부터 fromHigh 범위의 값을 toLow 에서 toHigh 범위로 사상(map) 한다. 아날로그 센서에서 읽은 값을 처리하는데 매우 유용하다. |
예제: | 예제: | ||
<code c> | <code c> | ||
- | val = map(analogRead(0), | + | val = map(analogRead(0), |
// 읽은 값을 100 에서 200 | // 읽은 값을 100 에서 200 | ||
// 사이로 사상 | // 사이로 사상 | ||
Line 1859: | Line 1883: | ||
=== double sqrt(x) === | === double sqrt(x) === | ||
- | x의 제곱근(루트: | + | x의 제곱근(루트: |
예제: | 예제: | ||
Line 1894: | Line 1918: | ||
=== randomSeed(seed) === | === randomSeed(seed) === | ||
- | 아두이노의 유사난수 생성기를 초기화 한다. 비록 random()으로 발생한 수의 분포가 기본적으로 무작위일지라도, | + | 아두이노의 유사난수 생성기를 초기화 한다. 비록 random()으로 발생한 수의 분포가 기본적으로 무작위일지라도, |
예제: | 예제: | ||
<code c> | <code c> | ||
- | randomSeed(analogRead(5)); | + | randomSeed(analogRead(5)); |
</ | </ | ||
Line 1904: | Line 1928: | ||
===long random(min, max)=== | ===long random(min, max)=== | ||
정해준 최소(min)와 최대(max - 1) 값 사이의, long integer 타입의 유사랜덤 값을 반환한다. | 정해준 최소(min)와 최대(max - 1) 값 사이의, long integer 타입의 유사랜덤 값을 반환한다. | ||
- | 최소값을 지정하지 않으면, 최소값은 0이 된다. | + | 최솟값을 지정하지 않으면, 최솟값은 0이 된다. |
예제: | 예제: | ||
Line 1915: | Line 1939: | ||
5장에서 살펴 본 것과 같이, 여러분은 USB 포트를 통해 시리얼 통신 프로토콜로 아두이노와 통신할 수 있다. 다음이 시리얼 함수들이다. | 5장에서 살펴 본 것과 같이, 여러분은 USB 포트를 통해 시리얼 통신 프로토콜로 아두이노와 통신할 수 있다. 다음이 시리얼 함수들이다. | ||
=== Serial.begin(speed) === | === Serial.begin(speed) === | ||
- | 시리얼 데이터를 주고 받을 수 있도록 아두이노를 준비한다. 일반적으로 이 함수와, 아두이노 IDE의 시리얼 모니터의 시리얼 포트의 속도(speed)로 초당 9600 비트(9600 bps)를 사용하지만, | + | 시리얼 데이터를 주고받을 수 있도록 아두이노를 준비한다. 일반적으로 이 함수와, 아두이노 IDE의 시리얼 모니터의 시리얼 포트의 속도(speed)로 초당 9600 비트(9600 bps)를 사용하지만, |
예제: | 예제: | ||
Line 1924: | Line 1948: | ||
=== Serial.print(data) === | === Serial.print(data) === | ||
=== Serial.print(data, | === Serial.print(data, | ||
- | 데이터를 시리얼 포트로 전송한다. 인코딩(encoding)은 옵션으로, | + | 데이터를 시리얼 포트로 전송한다. 인코딩(encoding)은 옵션으로, |
예제: | 예제: | ||
Line 1938: | Line 1962: | ||
=== Serial.println(data) === | === Serial.println(data) === | ||
=== Serial.println(data, | === Serial.println(data, | ||
- | 데이터를 입력하고 리턴이나 엔터를 눌렀을 때 처럼, 캐리지 리턴과 라인피드(\r\n, | + | 데이터를 입력하고 리턴이나 엔터를 눌렀을 때처럼, 캐리지 리턴과 라인피드(\r\n, |
예제: | 예제: | ||
Line 1951: | Line 1975: | ||
=== int Serial.available() === | === int Serial.available() === | ||
- | read() 함수에서 사용하기 위해 시리얼 포트에 읽지 않은 바이트가 얼마나 있는지를 반환한다. 가능한 모든 데이터를 read() 로 읽은 뒤에는 새로운 데이터가 시리얼 포트에 올 때 까지 Serial.available()는 0을 반환한다. | + | read() 함수에서 사용하기 위해 시리얼 포트에 읽지 않은 바이트가 얼마나 있는지를 반환한다. 가능한 모든 데이터를 read() 로 읽은 뒤에는 새로운 데이터가 시리얼 포트에 올 때 까지 Serial.available()은 0을 반환한다. |
예제: | 예제: | ||
Line 1974: | Line 1998: | ||
</ | </ | ||
====== 부록 D/회로도 읽기 ====== | ====== 부록 D/회로도 읽기 ====== | ||
- | 지금까지, | + | 지금까지, |
- | 모든 분야에서 -좀더 빠르게 또는 늦게- 비슷한 문제가 발생한다. 음악에서는, | + | 모든 분야에서 -좀 더 빠르게 또는 늦게- 비슷한 문제가 발생한다. 음악에서는, |
- | 에지니어들(실용적인 사람들)은, | + | 엔지니어들(실용적인 사람들)은, |
- | 전자 분야에서는 회로도를 사용해 회로를 기술하면, | + | 전자 분야에서는 회로도를 사용해 회로를 기술하면, |
- | 예를 들면, | + | 예를 들면, |
- | 또다른 명확한 예는 원통형 물체에 구리선을 감아 만든 인덕터로, | + | 또 다른 명확한 예는 원통형 물체에 구리선을 감아 만든 인덕터로, |
- | 부푸들간의 연결은 보통 전선이나, | + | 부품들 간의 연결은 보통 전선이나, |
- | 이것이 기본적인 회로도를 이해하기 위해 필요한 모든 것이다. 다음은, 좀 더 이해하기 쉬운 심볼들과 심볼이 의미하는것들의 리스트이다: | + | 이것이 기본적인 회로도를 이해하기 위해 필요한 모든 것이다. 다음은, 좀 더 이해하기 쉬운 심벌들과 심벌이 의미하는 것들의 리스트이다: |
- | 아마도 여러분들은 여기있는 기호들의 변종을 접하게 될 수도 있다(예로, | + | 아마도 여러분들은 여기 있는 기호들의 변종을 접하게 될 수도 있다(예로, |
다음의 회로도는 이 책의 초반에 등장했던 푸쉬버튼 회로를 그린 것이다: | 다음의 회로도는 이 책의 초반에 등장했던 푸쉬버튼 회로를 그린 것이다: | ||
Line 2000: | Line 2024: | ||
*[[http:// | *[[http:// | ||
*[[/코드 주석]] | *[[/코드 주석]] | ||
+ | *[[/ | ||
+ | *[[/ | ||
+ | *[[/ | ||
+ | *[[/ | ||
+ | *[[/Todo]] |
getting_started_with_arduino.1264998445.txt.gz · Last modified: 2013/08/03 05:04 (external edit)