아두이노란?
아두이노란? *이탈리아어로 '믿음직한 친구'
인터렉티브 미디어 아트 도구 → 피지컬 컴퓨팅 도구 ⊃ 아두이노
아두이노 vs 임베디드 시스템
입력 - 처리 - 출력
아두이노 우노(UNO)
아두이노 우노와 친구들
아두이노 우노 구조
아두이노 우노 정품 vs 호환품
아두이노는 '오픈소스 하드웨어'로서 회로도와 디자인이 공개함. 따라서 누구나 제조, 판매할 수 있음
단, 아두이노 공식 로고와 상표는 저작권이 있음 Creative Commons Attribution-ShareAlike 3.0 License
정품: 이탈리아 아두이노팀이 제작한 제품
호환품: 아두이노팀 이외 회사에서 제작하여 판매하는 제품(품질, 가격 매우 다양)
DIP타입 정품
SMD타입 정품
마이크로 컨트롤러(MCU) 형태에 따라 삽입실장형(DIP)과 표면실장형(SMD)이 있음
DIP타입 호환품
DIP타입 호환품(정품 로고)
호환품이 정품 로고나 유사 로고를 사용하는 경우가 있어서 구분하기 어려움. 가격으로 판단
SMD 타입 호환품
SMD 타입 호환품은 USB 연결부에 직사각형 모양의CH340을 사용
*정품은 정사각형 모양의 ATmega 16U2 를 사용
CH340은 별도의 드라이버를 설치해야함
USB 연결부(USB to Serial)
ATmega16U2
CH340
아두이노 개발환경
컴퓨터: 아두이노 IDE 사용 환경 제공
아두이노 IDE: 스케치 프로그램
아두이노 우노 보드: 물리 세계의 데이터 입력(센서), 출력(엑추에이터)
아두이노 IDE 설치하기
아두이노 첫 프로그램
아두이노 연결
아두이노 IDE 환경 설정
아두이노 보드 설정
<보드 설정>
< 포트 설정 >
하드웨어계의 헬로월드(Hello world) - blink 예제 실행
(1) Blink 예제 선택
(2) 아두이노에 업로드
(3) 결과 확인 - 보드 위의 노란색 LED가 1초마다 깜빡임
아두이노 개발 과정
펌웨어 업로드
blink 예제 코드 해석
아두이노 코드의 기본 구조
blink 예제 blink.ino
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT); // 내장 'LED핀'을 '출력'으로 사용
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
pinMode(pin, mode); // 특정 핀을 입력 또는 출력으로 동작하도록 설정
pin : 모드를 설정하려는 핀 번호 (1~13번, A0~A5)
※ LED_BUILTIN : 보드에 내장된 LED가 연결된 핀번호. 아두이노 우노는 13번임
mode : INPUT, OUTPUT, INPUT_PULLUP
Reference > Language > Functions > Digital io > Pinmode
pinMode()
[Digital I/O]
설명
특정 핀을 입력 또는 출력으로 동작하도록 설정합니다. (digital pins)의 설명을 보면 핀들의 기능이 자세히 나옵니다.
아두이노 1.0.1부터, INPUT_PULLUP 모드를 통해 내부 풀업 저항을 활성화할 수 있습니다. 덧붙여, INPUT 모드는 명시적으로 내부 풀업을 비활성화합니다.
문법
pinMode(pin, mode)
매개변수
pin: 모드를 설정하려는 핀 번호
mode: INPUT, OUTPUT, 또는 INPUT_PULLUP. ((digital pins) 페이지를 보면 더 자세한 기능 설명이 있습니다.)
반환
없음
예제 코드
이 코드는 디지털 핀 13을 OUTPUT 으로 만들고 HIGH 와 LOW 를 전환합니다.
void setup() {
pinMode(13, OUTPUT); // 디지털 핀 13 을 출력으로 설정
}
void loop() {
digitalWrite(13, HIGH); // sets the digital pin 13 on
delay(1000); // waits for a second
digitalWrite(13, LOW); // sets the digital pin 13 off
delay(1000); // waits for a second
}
주의와 경고
A0, A1 등으로 아날로그 입력 핀을 디지털 핀으로 사용할 수 있습니다.
더보기
digitalWrite(pin, value); // HIGH 또는 LOW 값을 디지털 핀에 출력
pin : 출력하려는 핀 번호 (1~13번, A0~A5)
value: HIGH, LOW
Reference > Language > Functions > Digital io > Digitalwrite
digitalWrite()
[Digital I/O]
설명
HIGH 또는 LOW 값을 디지털 핀에 출력합니다.
핀이 pinMode() 를 통해 OUTPUT 으로 설정되면, 그 핀의 전압은 HIGH 일 때 5V(또는 3.3V 보드에서 3.3V), LOW 일 때 0V (ground)로 설정됩니다.
핀이 INPUT 으로 설정되면, digitalWrite() 는 입력 핀의 내부 풀업 저항을 활성화 (HIGH) 또는 비활성화 (LOW)할 것입니다. 내장 풀업 저항을 활성화하기 위해서는 pinMode() 를 INPUT_PULLUP 으로 설정하는 것을 권장합니다. 디지털 핀 튜토리얼을 보면 더 많은 정보가 있습니다.
pinMode() 를 OUTPUT 으로 설정하지 않고 LED를 핀에 연결하면, digitalWrite(HIGH) 가 불릴 때 LED 불빛이 흐리게 나타날 수 있습니다.
명시적으로 pinMode() 를 설정하지 않으면 digitalWrite() 는 내부 풀업 저항을 활성화시킬 것이고, 그것은 마치 전류를 제한하는 큰 저항처럼 동작할 것입니다.
문법
digitalWrite(pin, value)
매개변수
pin: 핀 번호
value: HIGH 또는 LOW
반환
없음
예제 코드
이 코드는 디지털 핀 13을 OUTPUT 로 만들고 1초마다 HIGH 와 LOW 사이를 전환합니다.
void setup() {
pinMode(13, OUTPUT); // 디지털 핀 13 을 출력으로 설정
}
void loop() {
digitalWrite(13, HIGH); // 디지털 핀 13 켜기
delay(1000); // 1초 기다리기
digitalWrite(13, LOW); // 디지털 핀 13 끄기
delay(1000); // 1초 기다리기
}
주의와 경고
A0, A1 등을 통해 아날로그 입력 핀을 디지털 핀으로 사용할 수 있습니다.
더보기
EXAMPLE Tutorial: Digital Pins
delay(ms); // ms 시간 만큼 프로그램 멈춤. 1초는 1000ms
ms : 멈출 시간(1/1000초, ms단위, unsigned long)
Reference > Language > Functions > Time > Delay
delay()
[Time]
설명
매개변수에 정한 시간(밀리 초) 동안 프로그램 멈춤. (1초는 1000 밀리 초)
문법
delay(ms)
매개변수
ms: 멈출 밀리 초 (unsigned long)
반환
없음
예제 코드
이 코드는 출력 핀을 토글하기 전에 프로그램을 1초 멈춤
int ledPin = 13; // LED 연결 디지털 핀 13
void setup() {
pinMode(ledPin, OUTPUT); // 디지털 핀을 출력으로
}
void loop() {
digitalWrite(ledPin, HIGH); // LED 켬
delay(1000); // 1초 기다림
digitalWrite(ledPin, LOW); // LED 끔
delay(1000); // 1초 기다림
}
주의와 경고
delay() 함수로 깜빡이는 LED 를 만들기 쉽고, 많은 스케치가 짧은 delay를 써서 그런 작업을 switch debouncing로 하지만, 스케치에서 delay() 를 쓰는 것은 눈에 띄는 단점이 있다. delay 함수 동안 센서 읽기, 수학 계산, 핀 다루기가 중단되므로, 결과적으로, 거의 모든 다른 작업이 멈춘다. 시간을 제어하는 다른 접근으로 아래에 있는 millis() 함수와 스케치를 보세요. 좀더 똑똑한 프로그래머는 delay() 를 10 밀리초보다 긴 타이밍 이벤트를 아두이노 스케치가 아주 간단한 경우가 아니면 대개 사용하지 않는다.
그러나, 어떤 것은 delay() 함수가 Atmega 칩을 제어하는 동안에도 이루어지는데, 왜냐면 delay 함수가 인터럽트를 비활성화 하지 않기 때문이다. RX에서 나타나는 시리얼 통신은 기록되고, PWM (analogWrite) 값과 핀 상태가 유지되며, interrupts 은 정상으로 동작한다.
더보기
EXAMPLE Blink Without Delay
☞ pinMode( ) 찾아보기 C:\Program Files(x86)\Arduino\hardware\arduino\avr\cores\arduino\wiring_digital.c
☞ LED_BUILTIN 찾아보기 C:\Program Files(x86)\Arduino\hardware\arduino\avr\variants\standard\pins_arduino.h
☞ digitalWrite( ) 찾아보기 C:\Program Files(x86)\Arduino\hardware\arduino\avr\cores\arduino\wiring_digital.c
☞ delay( ) 찾아보기 C:\Program Files(x86)\Arduino\hardware\arduino\avr\cores\arduino\wiring.c