아두이노란? *이탈리아어로 '믿음직한 친구'

인터렉티브 미디어 아트 도구 → 피지컬 컴퓨팅 도구 ⊃ 아두이노

아두이노 vs 임베디드 시스템

입력 - 처리 - 출력

아두이노 우노(UNO)

'uno' 라는 단어 는 이탈리아어로 "one"을 의미 하며 Arduino Software 의 초기 릴리스를 표시하기 위해 선택되었습니다 . [1] Uno 보드는 일련의 USB 기반 Arduino 보드 중 첫 번째 보드입니다. [3] 그것과 아두 이노 IDE 의 버전 1.0은 아두 이노 의 참조 버전이었으며, 이제는 새로운 릴리스로 발전했습니다. [4] 보드의 ATmega328 에는 외부 하드웨어 프로그래머를 사용하지 않고도 새 코드를 업로드 할 수 있는 부트 로더 가 미리 프로그래밍되어 있습니다.

[출처] https://en.wikipedia.org/wiki/Arduino_Uno

아두이노 우노와 친구들

아두이노 우노 구조

[출처] https://t1.daumcdn.net/cfile/tistory/9908C6355AD97FA933

아두이노 우노 정품 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 설치하기

  1. 아두이노 웹사이트 접속

https://www.arduino.cc/en/software

  1. 프로그램 선택

  2. 다운로드

  3. 설치

아두이노 첫 프로그램

아두이노 연결

아두이노 IDE 환경 설정

아두이노 보드 설정

<보드 설정>

< 포트 설정 >

하드웨어계의 헬로월드(Hello world) - blink 예제 실행

(1) Blink 예제 선택

(2) 아두이노에 업로드

(3) 결과 확인 - 보드 위의 노란색 LED가 1초마다 깜빡임

아두이노 개발 과정

펌웨어 업로드

blink 예제 코드 해석

아두이노 코드의 기본 구조

blink 예제 blink.ino

  1. // the setup function runs once when you press reset or power the board

  2. void setup() {

  3. // initialize digital pin LED_BUILTIN as an output.

  4. pinMode(LED_BUILTIN, OUTPUT); // 내장 'LED핀'을 '출력'으로 사용

  5. }


  6. // the loop function runs over and over again forever

  7. void loop() {

  8. digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)

  9. delay(1000); // wait for a second

  10. digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW

  11. delay(1000); // wait for a second

  12. }

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 으로 만들고 HIGHLOW 를 전환합니다.

  1. void setup() {

  2. pinMode(13, OUTPUT); // 디지털 핀 13 을 출력으로 설정

  3. }


  4. void loop() {

  5. digitalWrite(13, HIGH); // sets the digital pin 13 on

  6. delay(1000); // waits for a second

  7. digitalWrite(13, LOW); // sets the digital pin 13 off

  8. delay(1000); // waits for a second

  9. }

주의와 경고

A0, A1 등으로 아날로그 입력 핀을 디지털 핀으로 사용할 수 있습니다.

더보기

EXAMPLE Description of the pins on an Arduino board

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초마다 HIGHLOW 사이를 전환합니다.

    1. void setup() {

    2. pinMode(13, OUTPUT); // 디지털 핀 13 을 출력으로 설정

    3. }


    4. void loop() {

    5. digitalWrite(13, HIGH); // 디지털 핀 13 켜기

    6. delay(1000); // 1초 기다리기

    7. digitalWrite(13, LOW); // 디지털 핀 13 끄기

    8. delay(1000); // 1초 기다리기

    9. }

주의와 경고

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초 멈춤

  1. int ledPin = 13; // LED 연결 디지털 핀 13


  2. void setup() {

  3. pinMode(ledPin, OUTPUT); // 디지털 핀을 출력으로

  4. }


  5. void loop() {

  6. digitalWrite(ledPin, HIGH); // LED 켬

  7. delay(1000); // 1초 기다림

  8. digitalWrite(ledPin, LOW); // LED 끔

  9. delay(1000); // 1초 기다림

  10. }

주의와 경고

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

여러가지 입출력 장치들

아두이노 전원 공급 (USB 5V, DC잭 7~12V)