[Arduino/아두이노] 3색 LED 켜기!

 

안녕하세요! 여러분!

오랜만에 다시 아두이노 포스팅으로 돌아왔습니다!

 

저번시간까지 아두이노를 컴퓨터와 연결하고, 예제 프로젝트를 실행해보고(블링크(Blink)), 외부라이브러리까지 추가해보았는데요!

 

오늘은 대망의 아두이노 외에 다른 '부품'(혹은 '소자' 라고도 하죠?)을 써보는 프로젝트를 해보도록 하겠습니다! 와~

 

대망의 첫 부품은 아주아주 간단한 3색 LED입니다!

 

그냥 LED도 아니고, 왜 3색이냐구요..?

 

어차피 그냥 LED와 3색 LED가 큰 차이가 없기 때문입니다. 그냥 R/G/B, 레드/그린/블루 LED 3개를 쓰나, 3색 LED 하나를 쓰나!

 

그럼 이제 아주 간단한 3색 LED를 만들어 보기 위해 차근차근 알아가 보도록 하겠습니다!

항상 이제부터는 아두이노와 물리적인 부품들을 연결할 것이기 때문에, 부품의 스펙을 알아보고 아두이노와 어떻게 연결(배선)할지를 알아본 뒤, 코딩을 통하여 프로젝트를 완성할 것입니다.

 

그럼 일단 3색 LED 부품의 스펙을 먼저 알아보고 가겠습니다!

 

1. 3색 LED 스펙-

제가 사용하는 3색 LED 부품은 HW-479이지만, 다른 부품을 사용해도 상관이 없는게, 이 3색 LED는 무조건 4개의 핀으로 이루어져 있으며, 하나는 -로 표기되어있는 GND, 나머지 세 핀이 각 각 R, G, B를 입력받는 핀입니다.

각각, 앞면과 뒷면 이미지인데요! 각 핀이 어떤건지 너무 잘 나와있죠? 여기서 우리는 -에 아두이노 GND를, RGB에 각각 해당하는 핀을 연결할 겁니다!

 

그리고 오늘은 대망의 첫 부품을 가지고 진행하는 프로젝트인 만큼, 아두이노와 부품의 연결에 제일 중요한 두가지를 알아보려고 합니다.

바로 케이블(선)브레드보드(빵판) 입니다.

 

1. 케이블

케이블은 말 그대로 부품과 아두이노를 연결는 선 입니다.!

아두이노는 좋은 점이 '점퍼 케이블'이라고하는, 케이블 양 끝에 점퍼가 있는 케이블로 쉽게 연결을 할 수 있다는 점입니다.

따로 납땜을 하지 않아도 된다는 것이지요.

케이블에는 두가지 종류가 있습니다.

F-M(암-수) 케이블, 그리고 M-M(수-수) 케이블입니다.

F-M 케이블
M-M 케이블

 

2. 브레드보드(빵판)

브레드보드의 경우 크기는 매우 다양할 수 있습니다. 보통이 30 홀(hole)짜리 브레드보드를 쓰게되구요, 그거보다 작은 브레드보드도 있고, 저처럼 60 홀 짜리도 있고, 이보다 더 큰 것도 있습니다. 여기는 구멍이 나있어서 부품을 막 꽂을 수 있도록 되어있는데 여기서도 규칙이 있습니다.

자 위의 그림처럼, ABCDE끼리는 세로로 서로 연결되어있습니다.(가로로는 서로 끊어져 있습니다)[빨간선]

FGHIJ끼리도 세로로 연결되어있습니다.(가로로는 서로 끊어져 있습니다)[빨간선]

ABCDE와 FGHIJ는 끊어져있습니다.

제일 위에는 전원 선입니다. GND(-)[파란색] 라인과 전원(+)[빨간색] 라인이죠.

전원 선의 경우 가로로 쭉 이어져 있습니다. 당연히 +와 -간은 서로 끊어져 있구요.[주황선]

60홀의 경우 30홀을 기준으로 좌우가 끊어져있습니다.

지금은 개념이 어렵더라도 한번 읽고 머리에 기억해두면 이후에 소자를 연결하거나 할때 '왜 이렇게 꽂는지'에 대해서 이해하기 쉬워지니 그냥 가볍게 읽고 넘어가 봅시다! 간단하게 말하자면 저런 규칙이 있어서 브레드 보드를 쓸 수 있습니다.

참고로 브레드보드의 어원은 말 그대로 초기 비전문가들이 빵(브레드) 자르는 판(보드)에다가 회로를 구성했기에 브레드보드로 이름 붙었다네요! 빵판이라고도하죠!

 

* 그리고 여기서 아두이노와 부품을 연결하는 방식 두가지!

하나는 F-M케이블(암-수케이블)로 아두이노와 직접 연결!

또하나는 M-M케이블(수-수케이블)로 빵판(브레드보드)를 이용하여 연결!

이렇게 두가지 방법이 있습니다.

현재 3색 LED에는 내부적으로 내장 저항이 있어서 아두이노와 직접 F-M케이블로 연결해도 되지만, 보통 소자들은 내부적으로 저항이 없기 때문에, 브레드보드(빵판)에 부품을 꽂고, 저항을 꽂고, 거기에 M-M케이블로 연결하는 것이 보통입니다.

그렇기에 오늘은 브레드보드를 이용하여 아두이노와 소자를 케이블로 연결해보겠습니다.

 

2. 아두이노와 연결(배선)

배선 첫 시간이니 배선에 대해서 말씀드리자면, 가능한한 색을 다르게 써서 보기 편하게, 헛갈리지 않게 하는것이 중요합니다!

우선 전원 선(+선)은 빨간색, 접지 선(-선, GND선)은 까만색이 기본이고, 그 외에는 구분이 잘 가고 직관적인 색이면 됩니다!

오늘 저희는 전원 선이 따로 없기 때문에 RGB에 각각 빨간색, 초록색, 파란색 선을 쓸 것이고 GND에 검은색 선을 쓸 것입니다.

3색 LED이기 때문에 각 R, G, B에 입력신호를 줄 pin이 하나씩 있어야 겠죠? 그러니 일단 선 세개를 쓸 것이구요, 입력할때 전기를 넣어 줬으면 이 전기가 빠져나갈 곳이 있어야 하니 GND pin도 하나 있어야 하겠습니다. 결국 3색 LED는 선 4개로 아두이노와 연결하여 쓸 수 있습니다.

한번 부품도로 그려보면

이와 같이 되겠습니다. 별건 아니고요, 이 그림에서는 3색 LED 핀 순서가 R - B G 이기때문에 이런 식의 배선이 되었습니다만, 실제 부품에서는 부품 핀 순서가 - R G B 순서이므로 이렇게 꽂아주시면 됩니다.

아두이노에 연결할때는 아두이노 우노 기준으로 9번핀에 R, 10번핀에 B, 11번핀에 G를 할당해 주었고, GND(-)는 아두이노 GND핀에 바로 연결하였습니다.

실제로 부품을 꽂아봅시다!

'기기나 기판에 장치나 부품 따위를 실제로 사용할 수 있도록 설치'하는 것을 '실장하다'라고 하는데요, 실제로 부품을 실장해보면 위의 이미지와 같을 것입니다.

R, G, B, - 3색 LED 핀에 각각 9, 10, 11, GND를 연결해 주었습니다. 이로써 아두이노와 부품간 배선이 끝났습니다!

 

3. 코딩

저는 개인적으로 이 영역을 가장 좋아합니다. 이미 연결된 상태에서 코딩으로 이 부품을 자유자재로 다룰 수 있기 때문이죠!

자 일단 기본적인 세팅을 해 봅시다!

이전까지 저희가 열심히 설치했던 아두이노 IDE를 켜주세요!

처음 켜면

이렇게 setup 구간(함수)와 loop 구간(함수)로 구성되어 있는 것을 볼 수 있습니다.

아두이노의 가장 핵심적인 부분인데요, 아두이노는 처음 프로그램이 실행되면서 setup 함수에 있는 내용을 한번 쭉 실행한 뒤에 그뒤로는 loop 함수만 반복적으로 실행합니다. 즉, setup에는 말 그대로 이 프로그램에 대한 초기 셋팅들을 해주고 loop에서 아두이노가 계속적으로 처리할 내용을 적어주는거죠!

결국 아두이노는 setup -> loop -> loop -> loop ... 이렇게 실행하게 됩니다.

그럼 먼저 setup 영역부터 코딩해볼까요?

일단 아두이노는 각 핀에 대해서 정의를 내려줘야합니다.

'이 핀은 내가 전원을 내보낼 핀이야', '이 핀은 내가 전원을 읽을 핀이야' 이런식으로요!

이 정의를 해주는 함수는 pinMode()입니다. 이 함수는 값이 두개가 필요합니다. 핀 넘버와 핀 모드죠.

핀 넘버는 말그대로 저희가 사용할 pin입니다. 아두이노에 숫자로 써져있는거죠. 오늘 저희가 사용할 핀은 9, 10, 11번 핀입니다.

핀 모드는 내가 출력할거면 OUTPUT, 내가 읽을거면 INPUT을 쓰면 됩니다.

자, 이제 바로 코딩해보도록하겠습니다. 전원선과 GND선은 따로 핀모드 설정이 필요없기 때문에 RGB에 대응하는 9,10,11번 핀만 핀모드를 설정하겠습니다.

void setup(){
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

 

자, 그럼 이제 loop함수로 가볼까요!

가장간단하게 1초동안 빨간 불을 켜고, 바로 다음 1초동안 초록 불을 켜고, 바로 다음 1초동안 파란불을 켜보도록하겠습니다.

 

void loop(){
  digitalWrite(11, LOW);
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  delay(1000);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  delay(1000);
}

 

여기서 digitalWrite는 0, 1 즉 켜고 끄는 걸로 해당 핀에 신호를 주겠다는 명령어이구요, delay는 ms단위로 쉬겠다는 의미입니다!

결국 완성된 코드는 다음과 같습니다!

void setup(){
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop(){
  digitalWrite(11, LOW);
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  delay(1000);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  delay(1000);
}

 

4. 결과

자, 그럼 배선과 코딩한 것을 바탕으로 결과를 한번 볼까요!?

자, 잘 돌아가는 것을 확인했습니다!

지금 현 상황에서 배선도 완료되어있고, 작동도 제대로 되고 있는 것을 확인했으니, 이제 코딩으로 다양한 활용이 가능해집니다!

더욱 자세한건 다음번에 알아보아요!

아참, 우리가 지금 한 것은 켜고 끄기만 하는 digitalWrite였는데요, 여기서 analogWrite는 0~255사이의 값을 PWM 방식으로 차등적으로 적용할 수 있습니다. 즉, '강도 조절'이 가능해진다는 말인데요!

이를 바탕으로 각 불이 점점 밝게 들어왔다가 꺼지는 것도 가능하답니다!

힌트는 여기까지! 다음번에 또 보아요~

delay함수 없이 LED 깜빡이기

 

가끔씩 우리는 아두이노에서 병렬처리(한번에 두 가지 이상의 작업을 동시에 수행하는 것)가 필요할 때가 있습니다.
아두이노의 loop는 사실상 ms단위로 작동하기 때문에 구문을 나열해도 거의 동시에 처리되는 것처럼 보이긴 합니다.
그렇기에 평상시에는 크게 병렬처리에 대해서 생각할 필요가 없는데요.
그러나 LED핀을 깜빡이는데 가장 간편하게 사용하는 delay()함수가 들어가게 되면, 여기서부터 골치가 아파집니다.
왜냐하면 delay()함수를 사용하게 되면 아두이노가 프로그램을 일시 중지되기 때문이죠.
따라서 delay()함수가 작동하게 되면 지정한 시간만큼 프로그램이 일시 중지되고, 그 사이에는 다른 구문을 작동할 수가 없습니다.
예를들어 delay()함수 작동 중 버튼 눌림 체크가 불가능 하다거나, 다른 명령어 작동이 불가능하죠.

오늘 올릴 포스팅은 delay()함수를 사용하지 않고 LED를 깜박이는 방법에 대해 작성할 겁니다.

간단하게 개요부터 말씀드리자면,
1) delay()를 사용하지 않고
2) LED를 켜고(끄고) 시간(ms 단위)을 기록하고(millis() 함수)
3) 이 시간이 원하는 시간이 지났는지 확인하고
4) 시간이 지났으면 LED를 끕(켭)니다.

이렇게되면, delay()로 아두이노를 일시중지 시키지 않고 loop()함수가 살아서 계속 반복적인 작업이 이루어지므로 LED가 깜빡거리는 동안 다른 작업이 가능해집니다.

쉬운 예시로 전자레인지에 피자데우기를 들 수 있습니다.
자, 전자레인지에 피자를 넣고 전자레인지를 작동시킵니다.
여기서
1) delay()함수로 10초간 기다리라고 하는 말의 의미는 전자레인지 앞에서 10초가 다 지나가기를 가만히 기다리라는 의미입니다. 결국 그동안에 다른 일은 못하죠!
2) 그러나 우리가 만약에 두가지 일을 하고 싶다면 어떻게 하나요? 전자레인지에는 시간 카운터가 달려있기에 전자레인지를 돌리고 짧은시간 다른 용무를 보고와서 전자레인지 시계를 확인하고, 10초가 지났는지 확인하고, 만약 10초가 지났으면 꺼내서 먹으면 됩니다!

1. 배선

우리는 아주 간단하게 실험해 볼 것이므로 내장된 Blink예제를 사용해보도록하죠!(즉, 따로 배선이 필요 없습니다)
Blink예제는 >>링크<< 포스팅에서 다루었습니다. 링크의 포스팅을 따라 블링크 예제를 불러와봅시다!

2. 코딩

블링크 예제의 코드는 아래와 같습니다.(상단의 주석부분은 제거하였습니다.)

// 보드의 파워나 리셋 버튼을 눌렀을 때 이 setup 함수는 한번만 작동합니다.
void setup() {
  // digital pin인 LED_BUILTIN을 output으로 초기화 합니다.
  pinMode(LED_BUILTIN, OUTPUT);
}

// 이 loop 함수는 계속 계속 영원히 반복하여 작동합니다.
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  // LED 켜기 (HIGH는 전압 레벨)
  delay(1000);                      // 1초간 기다리기
  digitalWrite(LED_BUILTIN, LOW);   // 전압을 LOW로 설정하여 LED 끄기
  delay(1000);                      // 1초간 기다리기
}


자, 여기서 delay(1000) 즉, 1초간 아무것도 안하고 아두이노한테 기다리라고 하는 부분을 바꿔봅시다!

위의 예시에서 전자레인지의 시간만 중간중간 확인 가능하다면, 굳이 전자레인지 앞에서 지켜보고 있을 필요가 없다고했죠?
그러니 시간을 확인할 수 있는 함수를 알아봅시다!

millis()라고 하는 함수는 아두이노가 실행된 시점부터 내부적으로 카운팅하고 있는 밀리초의 시간을 반환하는 함수입니다.
즉, 이 millis()를 쓰면 중간중간 시간확인이 가능하다는 말이죠!

프로그램의 골자를 생각해봅시다.
1) 전자레인지를 돌리고 시간을 본다 => LED를 켜고 millis()로 시간을 확인한다(변수에 저장한다)
2) 시간을 확인한다 => 현재 시간이 처음 LED를 켠 시간에 비해 얼마나 지났는지 확인한다(현재시간 - LED 켠 시간)
3) 정해진 시간이 지났으면 피자를 꺼내먹는다 => [(현재시간 - LED 켠 시간) > 정해진 시간]이면 LED를 끈다

간단하죠? loop함수 내부 로직을 아래와 같이 짜봅시다.

// 1)
unsigned long startMillis;

digitalWrite(LED_BUILTIN, HIGH);
startMillis = millis();
// 2)&3)
if(millis()-startMillis >= 1000){
  startMillis = millis();
  digitalWrite(LED_BUILTIN, LOW);
}



자, 모든 조건을 만족하게 프로그래밍을 이렇게 하면... 작동하지 않습니다!
왤까요?
loop함수는 아두이노가 작동하는한 끊임없이 반복된다고 했습니다.
그런데 이 loop함수 내부에서 시작한 시간을 변수에 저장시키면, 매 loop함수가 작동할 때마다 변수에 새로운 값이 저장되기에 정확히 시작한 시간을 알 수 없죠!
그러면 대안은? 가장간단한건 loop함수 밖에서 시작시간을 설정해주거나, loop내에서도 일정한 조건일 때만 변수에 값을 넣어주는 겁니다.
게다가 loop함수 내부에서 digitalWrite(LED_BUILTIN, HIGH) 구문이 있기때문에 사실 LED_BUILTIN은 계속 켜져있을 겁니다.
일단은 가장 간단하게 갑시다! loop함수 밖에서 시작시간과 LED 켜기를 설정해줍시다.

unsigned long startMillis = millis(); // 전역변수는 함수 밖에 있어야 합니다.

void setup() {
  // digital pin인 LED_BUILTIN을 output으로 초기화 합니다.
  pinMode(LED_BUILTIN, OUTPUT);
  // 1)
  digitalWrite(LED_BUILTIN, HIGH);
}

// 이 loop 함수는 계속 계속 영원히 반복하여 작동합니다.
void loop() {
  if(millis()-startMillis >= 1000){
    startMillis = millis();
    digitalWrite(LED_BUILTIN, LOW);
  }
}



자, 이러면 작동합니다!
그러나 딱 한번만 작동합니다!
왤까요?
말그대로
1] 시작하면서 LED켜고 시간측정해!
2] 타이머가 1초가 지나가면 꺼!
끝이기 때문이죠. 1초가 지나면 꺼진상태가 그대로 유지됩니다.
그러면 어떻게 이 친구를 깜빡거리게(토글) 할 수 있을까요?
가장 간단한건 '1초일땐 꺼, 2초일땐 켜, 3초일땐 꺼...'지만, 이러면 모든 시간을 다 기록해줘야하죠..?
조금 더 머리를 써 봅시다.
지금 현재 LED 상태를 기억했다가 1초가 됐을 때 현재 LED상태를 보고 반대상태로 만들어주면 매 초마다 코딩을 하지 않아도 되지 않을까요!?
바로 실험해봅시다!

// 전역변수는 함수 밖에 있어야 합니다.
bool ledState; // led상태를 알 수 있는 변수를 하나 만듭니다. bool은 int와 다르게 참/거짓의 딱 두가지 값만 가질 수 있습니다. 우리는 결국 led가 켜졌냐/꺼졌냐 만 사용할 것이므로 bool을 사용합니다.
unsigned long startMillis = millis(); // 그리고 led 상태를 기록한 시간을 기록합시다.

void setup() {
  // digital pin인 LED_BUILTIN을 output으로 초기화 합니다.
  pinMode(LED_BUILTIN, OUTPUT);
  // 1)
  ledState = HIGH; // 그리고 바로 led를 켜지 말고, '상태'를 입력해주죠. 현재 led는 '켜짐상태'입니다.
}

// 이 loop 함수는 계속 계속 영원히 반복하여 작동합니다.
void loop() {
  if(millis()-startMillis >= 1000){ // led상태를 기록한 시간(startMillis)와 현재 시간(millis())를 비교해서 1초(1000ms)가 지났는지 판단합니다. 지났으면 if문 안으로! 만약 1초가 지나지 않았으면 이 if문은 통과합니다!
    if(ledState == HIGH){ // 현재 led상태를 확인합니다. 현재 led가 '켜짐상태'이면 '꺼짐상태'로, '꺼짐상태'이면 '켜짐상태'로 바꿔줄 겁니다.
      ledState = LOW; // 현재 led 상태가 '켜짐상태'였기에 '꺼짐상태'로 바꿔줍니다.
    }
    else{ // 아니면! 즉, 현재 led상태가 '꺼짐상태' 면
      ledState = HIGH; // 현재 led 상태를 '켜짐상태'로 바꿔줍니다.
    }
    startMillis = millis(); // 그리고 상태를 바꿔줬으니 바로 상태를 기록한 시간을 다시 기록합니다.
  }

  digitalWrite(LED_BUILTIN, ledState); // 마지막으로 '상태'를 LED에 진짜로 반영해줍니다!
}



자, 이 구문은 제대로 잘 작동합니다! 1초마다 LED_BUILTIN이 켜졌다 꺼졌다 하는군요!
전체적으로 작동로직을 한번 살펴볼까요?
처음 시작하면 setup함수 내부에서 LED를 '켜짐상태'로 설정하고, 그 시간을 기록합니다.
그리고 loop함수로 넘어오죠.
loop함수에서는 시작한시간과 현재시간을 비교하는데, 시작하고 1초도 지나지 않았습니다.
따라서 첫 if문은 바로 통과!
그 이후 loop함수 마지막에 digitalWrite로 LED_BUILTIN에 실제적으로 '상태'를 반영해줍니다.
결국 LED는 켜지고, 1초뒤에 첫번째 if문 안으로 들어갑니다.
첫번째 if문 안에서 현재 led상태가 HIGH이므로 두번째 if문으로 들어가 ledState를 LOW로 바꿔주고, 상태를 바꾼 시간을 다시 기록하고 if문을 빠져나와 digitalWrite로 LED_BUILTIN에 실제적으로 '상태'를 반영해줍니다.
그리고 이 반복이죠!

3. 더 나아가기

사실 위의 프로그램(스케치)은 loop함수 작동시마다 계속 digitalWrite를 부릅니다. 즉, 1초마다 한번씩만 바꿔주면 되는걸, 1초가 되기 전에 계속 '켜 켜 켜 켜 켜 켜 켜 켜'하고 반복신호를 주는거죠.(그리고 사실 이게 병렬처리가 되는 이유기도 합니다. 시간 체크하는 동안 계속해서 신호를 주는거죠.)
1초마다 신호를 주고, 더 짧은 코드를 공개합니다.
이번엔 주석을 지울테니 보고 더 생각해보세요!

bool ledState = LOW;
unsigned long startMillis = millis();

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  if(millis()-startMillis >= 1000){
    digitalWrite(LED_BUILTIN, ledState=!ledState);
    startMillis = millis();
  }
}

함수설명: delay()

 

설명:

매개변수로 지정된 시간(밀리초(millisecond, ms)) 동안 프로그램을 일시 중지합니다. (1초(s)는 1000밀리초(ms)입니다.)

 

문법(syntax):

delay(ms)

 

매개변수(parameters):

ms: 일시 중지할 시간(밀리초)입니다. 허용되는 데이터 유형: unsigned long(부호없는 정수).

 

리턴값(returns):

없음

 

예제 코드:

이 코드는 출력 핀을 토글하기 전에 프로그램을 1초 동안 일시 정지합니다.

int ledPin = 13; // 디지털 핀 13에 연결된 LED

void setup() {
  pinMode(ledPin, OUTPUT); // 디지털 핀을 출력으로 설정합니다.
}

void loop() {
  digitalWrite(ledPin, HIGH); // LED를 켭니다.
  delay(1000); // 1초간 기다립니다.
  digitalWrite(ledPin, LOW); // LED를 끕니다.
  delay(1000); // 1초간 기다립니다.
}

 

참고:

delay() 함수로 깜박이는 LED를 쉽게 만들 수 있고 많은 스케치에서 스위치 디바운싱과 같은 작업에 짧은 지연을 사용하지만, 스케치에서 delay()을 사용하면 상당한 단점이 있습니다. delay 함수 작동 중에는 센서 판독, 수학적 계산 또는 핀 조작을 계속할 수 없으므로 사실상 대부분의 다른 활동이 중단됩니다. 타이밍 제어에 대한 다른 접근 방식은 충분한 시간이 경과할 때까지 millis() 함수를 폴링하여 반복하는 >>delay함수 없이 LED 깜빡이기<<를 참조하십시오. 일반적으로 Arduino 스케치가 매우 간단하지 않는 한 10밀리초 이상의 이벤트 타이밍에 delay()함수를 사용하지 않습니다.

그러나 delay() 함수가 인터럽트를 비활성화하지 않기 때문에 delay() 함수가 Atmega 칩을 제어하는 동안에도 특정 작업이 계속 진행됩니다. RX 핀에 나타나는 직렬 통신이 기록되고, PWM(아날로그 쓰기) 값과 핀 상태가 유지되며, 인터럽트가 정상적으로 작동합니다.

함수설명:digitalWrite()

 

설명:

디지털 핀에 HIGH(1) 또는 LOW(0) 값을 기록합니다.
핀이 pinMode()를 사용하여 출력으로 구성된 경우, 해당 전압은 HIGH의 경우 5V(또는 3.3V 보드의 경우 3.3V), LOW의 경우 0V(접지)로 설정됩니다.
input 모드로 설정된 핀에 대하여 사용 시 pullup 저항을 활성화 하지만, 가능하면 명시적인 INPUT_PULLUP을 사용하여 설정할 것을 추천드립니다.

 

문법(syntax):

digitalWrite(pin, value)

 

매개변수(parameters):

pin: 출력모드로 설정 된 아두이노 핀 번호
value: HIGH(1) 혹은 LOW(0)

 

리턴값(returns):

없음

 

예제 코드:

이 코드는 디지털 핀 13을 OUTPUT으로 설정하고, HIGH와 LOW로 토글(toggle, 전환)합니다.

void setup() {
pinMode(13, OUTPUT); // 디지털 핀 13을 OUTPUT으로 설정
}

void loop() {
digitalWrite(13, HIGH); // 디지털 핀 13을 on으로 설정
delay(1000); // 1초 기다리기
digitalWrite(13, LOW); // 디지털 핀 13을 off로 설정
delay(1000); // 1초 기다리기
}

 

참고:

위의 예제 코드에서 //(슬래시 두개)는 주석(컴파일 시 실제 코드로 인식 하지 않겠다는 의미)이며, 다른 글에서 설명하겠지만, delay() 함수는 말 그대로 '기다리는'함수이며, 그 안에 들어가는 값은 밀리세컨드 단위입니다. 즉 1000ms=1s 입니다.
아날로그 입출력 또한 가능합니다.
아날로그 입력의 경우 A0, A1 등으로 표시된 핀에서 가능하고, 출력은 ~(틸드)표시가 붙은 디지털 핀에서 가능합니다.
또한 반대로 아날로그 출력 핀(A0, A1, etc)을 디지털 핀으로 활용도 가능합니다.
예외적으로 아두이노 나노, 프로미니, 미니의 A6과 A7 핀은 오로지 아날로그 입력 핀으로만 사용할 수 있습니다.

함수설명: pinMode()



설명:

지정한 핀이 입력 또는 출력으로 작동하도록 구성합니다. 핀의 기능에 대한 자세한 내용은 >>아두이노의 핀에 대하여<< 페이지를 참조하세요.

INPUT_PULLUP 모드로 내부 풀업 저항을 활성화할 수 있습니다. 또한 INPUT 모드는 내부 풀업을 명시적으로 비활성화합니다.

 

문법(syntax):

pinMode(pin, mode)

 

매개변수(parameter):

pin: 모드를 설정할 아두이노 핀 번호
mode: INPUT, OUTPUT 또는 INPUT_PULLUP의 세가지 중 하나를 선택. 각 모드에 대한 자세한 내용은 >>아두이노의 핀에 대하여<< 페이지를 참조하세요.

 

리턴값(returns):

없음

 

예제 코드:

이 코드는 디지털 핀 13을 OUTPUT으로 설정하고, HIGH와 LOW로 토글(toggle, 상호전환)합니다.

void setup() { 
  pinMode(13, OUTPUT);    // 디지털 핀 13을 OUTPUT으로 설정 
} 

void loop() { 
  digitalWrite(13, HIGH); // 디지털 핀 13을 on으로 설정 
  delay(1000);            // 1초 기다리기 
  digitalWrite(13, LOW);  // 디지털 핀 13을 off로 설정 
  delay(1000);            // 1초 기다리기 
}

 

참고:

위의 예제 코드에서 //(슬래시 두개)는 주석(컴파일 시 실제 코드로 인식 하지 않겠다는 의미)이며, 다른 글에서 설명하겠지만, >>digitalWrite()<<는 핀에 해당 값을 출력하는 함수, digitalRead는 핀의 현재 상태를 읽는 함수입니다.
또한 >>delay()<< 함수는 말 그대로 '지연(기다리는)'함수이며, 그 안에 들어가는 값은 밀리세컨드 단위입니다. 즉 1000ms=1s 입니다.
아날로그 입출력 또한 가능합니다.
아날로그 입력의 경우 A0, A1 등으로 표시된 핀에서 가능하고, 출력은 ~(틸드)표시가 붙은 디지털 핀에서 가능합니다.
또한 반대로 아날로그 출력 핀(A0, A1, etc)을 디지털 핀으로 활용도 가능합니다.
예외적으로 아두이노 나노, 프로미니, 미니의 A6과 A7 핀은 오로지 아날로그 입력 핀으로만 사용할 수 있습니다.

아두이노의 핀에 대하여

 

빨간색 화살표가 가리키는 것처럼 아두이노에 있는 구멍 하나하나를 핀(pin)이라고 합니다.


Arduino 핀은 디지털 핀아날로그 핀으로 구분되며, 입력(INPUT)이나 출력(OUTPUT)으로 구성할 수 있습니다.
이 글은 디지털 핀에 대해서 말하지만, 대부분의 아두이노(Atmega) 아날로그 핀은 디지털 핀과 정확히 같은 방식으로 구성되고 사용될 수 있습니다.

디지털 핀(혹은 아날로그 핀)의 모드는 세가지 입니다.
가장 기본적인 INPUT(입력), OUTPUT(출력)과 특수한 INPUT_PULLUP입니다.
INPUT
INPUT_PULLUP
OUTPUT


INPUT으로 구성된 핀의 속성


Arduino(Atmega) 핀은 기본적(default)으로 input mode(입력 모드)입니다. 따라서 만약 이 핀들을 입력 모드로 사용할 것이라면 pinMode() 함수를 이용하여 명시적으로 선언할 필요가 없습니다.
INPUT으로 구성된 핀은 고임피던스 상태라고 하며 이는 회로에 크게 영향을 미치지 않습니다. 그러나 매우 작은 전류만으로 INPUT 상태 (켜짐/꺼짐 or ON/OFF or HIGH/LOW or 0/1)가 변할 수 있기 때문에 pullup(풀업) 혹은 pulldown(풀다운) 회로를 구성하는 것이 좋습니다.
일반적인 INPUT 모드에서는 센서가 꺼졌을 때 0(LOW), 켜졌을 때 1(HIGH)입니다.



INPUT_PULLUP으로 구성된 핀의 속성


INPUT_PULLUP 모드의 경우 INPUT 모드에 자체적으로 PULLUP 저항을 적용하는 모드입니다. INPUT_PULLUP으로 구성된 핀에 센서를 연결할 때는 반드시 다른 쪽 끝은 접지에 연결해야 합니다.
Atmega 칩에는 기본적으로 20K(키로옴)의 풀업 저항이 내장되어있습니다.
INPUT_PULLUP 모드에서는 센서가 커졌을 때 1(HIGH), 켜졌을 때 0(LOW)입니다.


OUTPUT으로 구성된 핀의 속성


pinMode() 함수를 사용하여 OUTPUT으로 구성된 핀은 저임피던스 상태라고 합니다. 이는 다른 회로에 상당한 양의 전류를 제공할 수 있음을 의미합니다. Atmega 핀은 최대 40mA(밀리암페어)의 전류를 다른 장치/회로에 공급(양전류 제공)하거나 싱크(음전류 제공)할 수 있습니다. 이 전류는 LED를 밝게 켜거나(직렬 저항을 잊지 마십시오) 많은 센서를 작동하기에 충분한 전류이지만 대부분의 릴레이, 솔레노이드 또는 모터를 작동하기에는 충분한 전류가 아닙니다.


아두이노 핀의 단락이나 고전류 장치의 구동을 시도하면 핀의 출력 트랜지스터가 손상되거나 파괴되거나 아트메가 칩 전체가 손상될 수 있습니다. 종종 이로 인해 마이크로컨트롤러에 "데드" 핀이 발생하지만 나머지 칩은 여전히 적절하게 작동합니다.

[Arduino/아두이노] 라이브러리 추가하기!

 

안녕하세요~ 오랜만에 다시 포스팅으로 돌아왔습니다!

저번시간까지 프로젝트 진행을 위한 아주 기본적인 세팅을 모두 다 끝마쳤는데요!

오늘은 여기서 한발 더 나가서, 프로젝트에 사용하는 라이브러리까지 IDE에 추가하여 완전한 프로젝트를 진행할 수 있게 해보도록 하겠습니다!

 

여기서 라이브러리란, 가장 쉽게 얘기해서 '미리 코딩된 코드'라고 볼수있죠!

우리가 하나하나 아주 세심하게 바닥에서 부터 만들어가야하는 것이 아니라, 이미 누군가가 모래성을 만들어 놓은 것을 저장한것이라고 보면 됩니다!

그럼 우리는 이 모래성을 가지고 와서 거기다가 집도 짓고, 첨탑도 세우고 할 수 있는 거죠!

아주 강력하지요?

 

그럼 이제부터 라이브러리를 추가해보도록 하겠습니다!

 

라이브러리를 추가하는 방법에는 두가지가 있는데요, 하나는 압축파일을 그대로 불러오는 방식과, 폴더를 이동시키는 방식 두가지가 있습니다!

차례대로 알아볼께요!

 

먼저 아두이노 보드를 연결해주시고, 기본 세팅을 마치시고~ 이제 시작합니다!

 

1. 압축파일을 라이브러리로 추가하기

1) 보통 인터넷에서 라이브러리를 다운받으면 압축파일 상태일것입니다. 그러면 이 상태에서 압축을 풀지 마시고, 바로 아두이노 IDE>Sketch>Include Library>Add .ZIP Library...를 선택합니다.

2) 그러면 바로 파일 선택창이 나오는데, 여기서 다운받은 폴더로 가셔서 압축파일 상태의 라이브러리를 선택해줍니다!

오늘 저는 LiquidCrystal_I2C라고하는, LCD를 좀 더 쉽게 사용하는 라이브러리를 추가해보도록하겠습니다!

파일위치는 바탕화면입니다!

3) 자, 이렇게 선택하고, 열기를 눌러주면, 아래쪽에 검은 화면이 나오면서 Library Installed라고 뜰 겁니다. 이러면 라이브러리 설치가 완료 된 것이지요.

4) 혹시 'Error: Request installZip failed with message: 13 INTERNAL: Library install failed: reading directory C:\Users\user\AppData\Local\Temp\arduino-cli-lib-3127149921\LiquidCrystal_I2C-master.zip content: %!!(MISSING)w(*fs.PathError=&{readdir C:\Users\user\AppData\Local\Temp\arduino-cli-lib-3127149921\LiquidCrystal_I2C-master.zip 3})' 이와 같은 에러가 발생한다면, 라이브러리 압축파일 안에, 다시 압축이 되지 않았는지 확인해보세요!

라이브러리는 압축파일상태에서 압축을 열어보면(압축을 풀려고 더블 클릭 해보면) 파일과 폴더들이 보여야 합니다!

압축 파일을 열었을 때 이렇게 나오면 안되구요!
요렇게 나와야 합니다!

 

2. 폴더를 옮기기

자, 만약 압축을 풀었다! 그러면 어떻게 해야하나!

혹은, 지금 있는 라이브러리가 폴더로 밖에 없어요~!

하는 상황이시라면, 이럴때도 방법이 있죠!

그러나 일반적으로 사용하는 방법은 아니기에 조금은 복잡할 수도 있습니다.

차근차근 설명을 따라오시죠!

1) 아두이노를 설치하게 되면 기본적으로 '문서' 폴더(기본 윈도우 폴더입니다!)에 Arduino라는 폴더가 생깁니다.

2) 처음 설치했을 때는 여기 들어가면 아무것도 보이지 않지만, 라이브러리를 위의 압축방식으로 설치하게되면 바로 'Libraries'라고하는 폴더가 생성됩니다. 그리고 그 안에 압축파일이 풀린 상태로 폴더로 있는 것을 볼 수 있습니다.

3) 여기서 착안하여, 아무것도 없는 Arduino 폴더에서 'Libraries'라는 폴더를 새로 만들고(이미 있다면 그 폴더로 들어가셔서) 여기에 압축이 풀린 폴더를 그대로 옮겨 놓으시면 됩니다!

4) 위에서 zip파일로 설치한 것과 똑같이 라이브러리 코드를 사용하실 수 있습니다!

 

자, 이렇게 라이브러리 파일이 설치되면, 프로그래밍 코드를 작성할 때 라이브러리 코드를 이용할 수 있게 됩니다!

이제, 라이브러리를 이용해서 코딩을 해 볼까요!?

다음에 보아요~~

[Arduino/아두이노] 아두이노 기본 프로젝트로 보드 작동 확인해보기

 

안녕하세요~ 오늘은 세번째 시간으로 아두이노 IDE에서 제공하는 기본 프로젝트를 아두이노에 보내서 실행시켜보고, 제대로 실행되는지 확인해보며, 추가적으로 이때 발생할 수 있는 에러에 대해서 알아보도록 하겠습니다!

지금 현재 시작하는 부분은 아래와 같이 아두이노 IDE에 보드와 포트가 잡힌 상태입니다.

 

1. 기본프로젝트 만들기!

아두이노 IDE에서는 아주 간단한 여러가지 기본 프로젝트들을 제공합니다.

그리고 그중 대부분은 추가적인 부품들을 요구합니다. 가장 간단한건 LED 혹은 버저를 이용한 프로젝트 일 겁니다.

그러나 이 중 아주 간단하게 아두이노 자체 램프를 깜빡거리는 아주아주 간단한 프로젝트가 하나 있습니다.

바로 'Blink'라는 프로젝트인데요. 이 프로젝트를 이용하면 내 보드가 아두이노 IDE와 잘 연결되었는지, 혹은 내 아두이노 IDE에서 보드로 제대로 프로그램이 전달되고 실행되는지를 확인해 볼 수 있습니다.

그럼 바로 Blink 프로젝트를 만들어볼까요?

우선 File>Examples>01.Basics>Blink를 클릭합니다.

자, 이렇게 누르면 바로 새 창이 하나 뜨면서 블링크 프로젝트가 하나 생성될 것입니다.

새로 생성된 블링크 스케치

자 프로젝트 코드는 생성되었습니다. 그럼 이걸 우리는 어떻게 아두이노로 보낼까요?

 

2. 코드 검증하고 보드로 업로드하기

자, 코드가 먼저 생성되었으면 우리는 '검증(Verify)'이라는 체크 버튼을 통해서 이 코드가 제대로 잘 작성 된 것인지 확인해 볼 것입니다. 전문적인 프로그래밍 용어로는 '컴파일(Compile)'이라고도 하죠!

자, 이 버튼을 누르면 아래쪽에 검은 화면이 생기면서 오른쪽 아래 흰색 공간에서 무언가가 차오르다가 'Done compiling.'이라는 문구가 나올 겁니다. 이게 바로 컴파일이 다 되었다는 것이죠. 이렇게 떴을 경우 현재 우리가 작성한 코드는 에러가 없으며 제대로 실행가능한 코드입니다~ 라는 뜻이 됩니다.

만약에 에러가 발생하면(저는 일부러 delay함수에서 d를 지워보았습니다) 아래쪽에 빨간글씨가 뜨면서 어디가 에러가 발생했는지 알려주죠!

자, 어찌됐든 성공적으로 verify가 끝났으면, 이제 아두이노 보드로 이 실행파일을 옮겨줘서 아두이노가 실행하게 해야겠죠?

이때 쓰이는 버튼이 업로드(Upload)버튼입니다!

이 업로드 버튼을 누르면 이 소스코드가 실행파일 형태로 바뀌어서 아두이노 보드로 보내지고, 잠시 기다리면 아두이노 보드의 주황색 불빛이 깜빡거리는 걸 보실 수 있습니다!

오른쪽 아래 첫번째 하얀 박스인 Uploading...이 Done uploading으로 바뀌면 아두이노에서 불빛이 깜빡이기 시작합니다.

이렇게 불빛이 깜빡거리면 성공입니다!

여담으로 Upload 버튼을 누르면 컴파일을 진행하고 나서 바로 업로드를 하는것이니 굳이 Verify 버튼을 누를 필요 없지 않나 하시는 분들!

지금은 소스코드가 간단하니 에러가 발생할 확률이 적지만, 나중에 큰 프로젝트를 하면 지금 내가 짠 코드가 맞는지 틀린지 중간중간 확인해봐야 한답니다! 그때 쓰는것이 바로 Verify!

자, 여기까지 아두이노 개발 환경을 깔고, 보드와 연결하고, 실제로 개발환경에서 소스코드를 짜서 아두이노 보드로 보내 제대로 실행되는 것까지 살펴보았습니다. 결국 이 말은 이제부터 실제로 컴퓨터에서 짠 소스코드로 아두이노를 제어할 수 있게 되었다는 것이죠!

이제부터는 아두이노 개발 환경으로 여러 코드를 짜고, 아두이노 보드에 또 여러 부품들을 연결하여 소스 코드가 컴퓨터에서만 작동하는 것이 아니라, 실제 오프라인 환경에서도 작동되는 프로젝트를 하실 수 있게 된겁니다!

이제서야 출발선상에 섰네요!

다음에는 여러 부품들과 관련된 코드들로 찾아뵙도록 하겠습니다~

아, 물론 그전에 아두이노 연결 과정에서 가장 흔하게 발생하는 에러들을 한번 살펴보려고 합니다!

 

3. 아두이노 연결 과정에서 가장 흔하게 발생하는 에러들

1) 보드, 포트 선택 다했는데 아두이노랑 연결이 안된대요~

가장 당황스러운 오류 중 하나죠.. 보통 오류 메시지는 아래와 같습니다

스케치를 업로드 하는 동안 에러가 발생하였습니다.
An error occurred while uploading the sketch
시리얼 포트 'COM1' 를 여는데 에러 발생 (Port busy)
Error opening serial port 'COM1'. (Port busy)

이는 저번시간에 살짝 언급했던 ch340 호환 보드 즉, 아두이노 정품 보드가 아닌 흔히 말하는 중국산 짭보드(..) 일때 발생하는 에러입니다. 보통 아두이노 나노에서 가장 흔하게 발생하는데요(다른 보드들은 호환을 시켜주는데 아무래도 나노가 AVR이 작아서 그런가 나노에서 가장 흔하게 발생하네요..) 아주 간단하게 ch340드라이버를 깔아주면 해결됩니다.

ch340드라이버는 https://www.wch.cn/download/CH341SER_EXE.html에서 받으실 수 있습니다. 중국사이트라고 겁먹지 마시고, 바로 다운로드 버튼을 눌러 다운받은 뒤 설치해주시면 됩니다. 크롬의 경우 사이트 접속과 동시에 한국어로 번역해주니 더 편합니다!

 

2) 업로드까지 진행했는데, 보드에서 작동이 안돼요~

흔하지 않은 오류입니다만, 가끔씩 보드와 다른 AVR이 얹어진 경우 발생하는 에러입니다.

이때는 'Tools'>Programmer>Arduino as ISP를 지정해주시거나 이렇게 지정해도 작동하지 않으면 Arduino as ISP (ATmega32U4)를 지정해주시면 해결되는 경우가 많습니다.

 

자, 흔하게 발생하는 에러까지 살펴보았습니다! 이제 우리는 다음강의에서 보아요~

안녕~

[Arduino/아두이노] 아두이노 보드 연결하여 기본 세팅 및 포트 설정하기

 

안녕하세요~

저번 포스팅인 [아두이노/Arduino] 아두이노 IDE(통합 개발 환경, Integrated Development Environment) 다운받고 설치하고 실행하기에 이어 두번째 시간! 아두이노 개발환경을 받았으니, 아두이노 보드를 연결하고 포트를 설정하여 기본 프로젝트를 구동시켜보겠습니다!

정말 쉬우니 그냥 팔로팔로미!

 

1. 아두이노 보드 설명

자, 이제 단순히 소프트웨어 뿐만 아니라 아두이노 라고 하는 하드웨어 보드가 추가되는데요, 그만큼 어떻게보자면 컴퓨터 환경인 온라인과 하드웨어인 오프라인을 넘나들며 설명을 해야 합니다!

일단 포트설정과 기본 세팅에 앞서 어떤 아두이노 보드를 사용하는지가 조금 중요해 집니다!

저는 지금 '아두이노 메가 2560'과 '아두이노 우노' 그리고 '아두이노 나노' 세가지 보드를 쓰고있습니다!

일부러 판매 사이트로 링크를 걸어놨는데요, 인터넷에서 specification을 찾는 것보다 판매 사이트에서 설명되어있는 부분이 더 자세하기에 링크를 걸었습니다.

 

기본적인 차이점은 가장 큰것이 크기인데요, 나노가 가장 작고 그다음이 우노 그리고 메가2560이 제일 큽니다!

당연히 포트 수도 메가2560이 가장 많구요, 마이크로 프로세서(마이크로 컨트롤러 혹은 ARM 혹은 AVR: 넷 다 비슷한 용어입니다.)의 강력함도 메가2560이 가장 크죠.

그러면 크다고 마냥 좋은건가 하면 아니죠. RC카라던가 라인 트레이서 같이 움직이는 것 안에 내장하여 쓰려면 나노처럼 작고 가벼운 것이 좋겠죠!

 

그리고 여기서 가장 큰 부분이 공식 아두이노 보드가 아닌 중국에서 아두이노 호환보드로 제작한 ch340 칩이 약간 문제가 되는데요, 일단은 기본 세팅과 포트설정 후 기본 프로젝트를 구동해 보는 과정에서 에러사항을 한번 살펴보겠습니다!

 

저는 일단 여기서 가장 사람들이 입문으로 많이 쓰는 아두이노 우노로 설정을 진행하도록 하겠습니다!

 

먼저 아두이노 보드컴퓨터연결해주세요!(아두이노 보드와 동봉된 USB 선으로 아두이노에는 USB type A(육각형으로 집처럼 생긴 모양)를 컴퓨터에는 USB type B(우리가 아는 usb 모양)를 연결해주시면 됩니다. 이렇게 생긴 선일겁니다)

 

2. 보드 선택하기

자, 처음으로 아두이노 IDE를 키셨다면 바로 아래와 같은 화면이 나올 것 입니다.

그리고 여기서 오른쪽 아래 표시된 것과 같이 'No board selected'라고 표시됩니다. 즉, 아두이노 보드가 선택되지 않았다는 것인데요.

여기서 저희는 메뉴에 'Tools'>'Board'>'Arduino AVR Boards'를 차례대로 선택하면

이와같이 엄청나게 많은 아두이노 보드들이 보이게 됩니다. 저는 'Uno' 였으니까 위에서 두번째 'Arduino Uno'를 선택해줄 거구요, 나노나 메가도 메뉴에 보이는 Arduino Nano, Arduino Mega를 각각 선택해주시면 되겠습니다. 그외에도 여러 보드를 선택할 수 있으니, 결국 내가 지금 가지고 있는 보드가 무엇인지 확인하는게 가장 중요하겠죠!?

자, 이렇게 선택하면 아까 보았던 상태표시줄 우측이 선택한 보드명으로 바뀌는 것을 볼 수 있습니다!

특히 이 보드를 잘 못 설정하게 되면 각 AVR마다 명령어 체계가 약간은 다른데 그것을 보정할 수 없어 컴파일이 안되거나, 실행이 되지 않습니다! 혹시 컴파일이 안되거나 보드로 실행이 안되는 경우는 한번 이 보드 설정을 제대로 하셨나 확인해보시는 것도 한가지 방법입니다!

자, 여기서 잘 살펴보면 'not connected'라고도 나와있는 걸 볼 수 있습니다.

이는 물리적으로 현재 아두이노 우노 보드와 컴퓨터가 연결되어 있음에도 볼 수 있는데요, 그 이유는 포트 설정이 되지 않아, 아두이노 IDE가 아두이노 보드가 현재 컴퓨터에 연결되었음을 알지 못하는 것입니다.

 

3. 포트 선택하기!

눈치채신 분들도 있겠지만, 포트는 'Tools'의 'Board' 아래 있습니다. 근데 혹시나 'Port'가 안보이시는 분들은 IDE를 끄고, 아두이노 보드를 먼저 컴퓨터에 연결하신 다음 아두이노 IDE를 다시 실행시켜 주시고 2번 보드 설정부터 다시 해주시면 됩니다!

자, 이렇게 포트를 누르면 자동으로 아두이노 보드가 연결된 포트(COM5)를 보여줍니다. 여기서 포트 명(COM5)는 크게 의미는 없습니다. 보통 대부분의 사람들은 COM3로 뜨지만, 포트가 다른데 연결되어있거나 하면 포트명은 달라질 수 있습니다. 그러나 중요한건 여기서 괄호 안에 본인이 사용하는 아두이노 보드명이 일치하는지만 잘 확인하시고, 일치한다면 그 포트로 사용해주시면 됩니다!

자 이렇게 포트까지 설정해주면, 아두이노 보드와 연결이 되게되고, 오른쪽 아래가 'Arduino Uno on COM5'라고 바뀌게 됩니다.

 

자, 이제 보드와 IDE가 연결되었습니다. 아주 기본적인 프로젝트를 할 수 있게 되었네요!

좀 더 하고 싶지만, 일단 포스팅 길이가 너무 길어질 것 같아 다음으로 넘겨야겠네요!

다음시간에는 아주 기본적인 프로젝트를 하나 만들고 컴파일해서 아두이노 보드로 보내고, 보드에서 작동하는지 확인하며, 그 과정에서 일어날 수 있는 아주 기본적이지만 당혹스러운(그리고 자주 나타나는) 문제들을 짚어보겠습니다!

 

다음에 보아요~

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

[아두이노/Arduino] 아두이노 IDE(통합 개발 환경, Integrated Development Environment) 다운받고 설치하고 실행하기

 

안녕하세요! 한동안 아두이노를 가지고 개발을 하다가 아주 잠~시 개발을 멈추고 다른일을 하다 다시 아두이노를 시작해보려고 합니다!

이전에는 너무나도 당연하게 아두이노 통합 개발 환경이 깔려있었고, 당연하게 모든 설정이 다 되어있었다면, 이제 다시 시작하는 마당에 컴퓨터도 너무나도 깔~끔하게 설치가 제거되어있고, 설정도 없으니 이제 제가 다시 다 깔고 설치해야합니다.

그런 의미에서 다시 시작하는 제 과정을 블로그에 공유합니다. 혹~시나 이 글을 보시는 여러분들께 작지만 큰 도움이 되었으면 좋겠습니다!

자, 팔로팔로미!

 

1. 설치파일 다운 받기

자, 그럼 일단 먼저 설치 파일 부터 다운을 받아야겠죠?

 

1) 다운로드 사이트 접속!

다운로드 사이트에 접속하는 방법에는 크게 두가지가 있습니다. 하나는 여기에서 제공해드리는 링크로 바로 접속하시는 방법과, 두번째로는 검색사이트를 이용하는 방법이죠. 여기서 검색사이트는 '네이X'가 공식사이트 링크를 최상단에 올려주지 않기에 '구글'을 추천드립니다.

1> 링크이용

2> 검색엔진이용

 

1> 링크이용!

이 페이지에 들어오셨다면! 가장 간단한건 제가 바로 링크를 달아드리는거겠죠!

과거 인터넷 혼란기?에는 진짜 검색창에 뭐 '다운로드'만 치면 진짜 불법사이트들이 난립을 해서, 잘못 받다가 컴 날려먹기 일수였는데요.. 요새는 사이트 정립도 잘 되어있고, 검색 사이트도 자체적으로 업데이트가 많이 되어 그런일은 별로 없는 것 같습니다.. 그래서 과거에는 무슨 소개글에 꼭 공식 홈페이지를 링크로 달아놨는데.. 요새는 필요가 없어보이지만, 그래도 저는 한번 달아보겠습니다.

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

 

Software

Open-source electronic prototyping platform enabling users to create interactive electronic objects.

www.arduino.cc

네! 여기로 접속해주시고 2)번으로 이동해주세요!!

 

2> 검색엔진 이용

자, 먼저 구글을 이용해 볼까요?

1> 'Google' 검색창에 '아두이노 다운로드'검색

2> 검색 후 제일 처음에 뜨는 링크인 'Software | Arduino'를 선택(여기서 주소가 www.arduino.cc(공식사이트)인지 확인해보는 것도 팁!)

여기서도 2)번으로 이동해주세요!

네이버에서는 어떨까요?

아쉽게도 네이버에서는 공식홈페이지로 연결이 되지 않고, 다른 사이트가 최상단에 뜹니다.. 그러니 가급적 구글을 이용해주시는게 좋습니다. 물론 네이버에서도 스크롤을 내리면 하단에 공식홈페이지 링크가 존재하긴합니다.

자, 2)번으로 이동하도록 하죠! 공식홈페이지에서의 다운로드 입니다!

 

2) 홈페이지에서 다운로드!

1> 페이지가 영어라고 당황하지 말고! 오른쪽의 DOWNLOAD OPTIONS에서 Windows버전의 제일 윗 링크를 클릭해줍니다!

 

여담!(무시하셔도 됩니다!)

더보기

여담으로 Arduino IDE 2.0.1이라는 것은 현재 아두이노 IDE의 버전입니다. 혹시라도 과거의 버전이 필요하신 분들은 스크롤을 내리면 Legacy IDE (1.8.X)와 Previous Releases가 있는  것을 확인하실 수 있고, 이쪽 링크를 통해서 다운로드 받으시면 됩니다.

또한 다운로드 옵션에서 OS에 따른 윈도우, 리눅스, 맥OS를 빼고도 윈도우 안에서도 파일이 여러개로 나뉜 것을 볼 수 있는데, 윈도우에서 첫번째 링크와 두번째 MSI 링크는 둘다 설치파일을 다운로드 하며, ZIP file은 설치파일 없이 다운로드합니다. 혹시 윈도우에 아두이노가 설치되는 것이 싫다하시면 ZIP파일로 받으셔서 'Arduino IDE.exe'파일만 실행해주시면 됩니다. 그럼 설치과정 없이 바로 실행이 됩니다. 여기서 가끔 처음 실행시 무한 로딩(2.0.1버전 기준 아두이노 로고 무한 두근거림)이 걸리는 경우가 있는데 꺼주시면 잠시 후 windows defender에서 네트워크 차단 허용 메시지가 뜹니다. 이걸 허용 해주시고 다시 실행하시면 제대로 실행됩니다.

 

2> 기부창이 뜹니다. 저희가 돈이 많다면 아두이노에 기부를 해줄테지만.. 일단은 JUDT DOWNLOAD를 눌러 그냥 다운로드를 진행해줍니다! 다운로드 파일 선택창이 뜨고(이 곳을 잘 기억해주세요!) 저장 버튼을 누르면 바로 다운로드가 시작됩니다!

 

2. 설치하기!

다운로드 받은 파일(arduino-ide_2.0.1_Windows_64bit.exe)을 더블클릭하여 실행하면 먼저 '사용권 계약'이 뜰겁니다. 여기서 '동의함' 누르시고 설치옵션 중 '사용자 선택'하는 부분에서 '전용'으로 선택하고 넘기세요!

설치 위치는 그냥 보통 자동으로 설정하는 값을 그대로 두고 설치합니다! 임의로 바꾸시면 나중에 다른 추가 프로그램 설치시 문제가 될 수도 있으니, 정말 부득이하게 꼭 바꿔야 하는 경우를 제외하고는 그냥 바로 '설치'를 눌러줍니다!

까만건 제 윈도우 아이디..
중간에 빈공간은 제 윈도우 아이디..

설치가 시작됩니다!

한 5분여 좀 넘게 기다리다 보면 설치 완료 창이 뜹니다.

바로 실행까지 해볼까요? 'Arduino IDE 실행하기'에 체크표시 된 상태로 마침을 눌러줍니다!

여기서 가끔 처음 실행시 무한 로딩(2.0.1버전 기준 아두이노 로고 무한 두근거림)이 걸리는 경우가 있는데 꺼주시면 잠시 후 windows defender에서 네트워크 차단 허용 메시지가 뜹니다. 이걸 허용 해주시고 다시 실행하시면 제대로 실행됩니다.

 

3. 실행 후!

아두이노 창이 열리고 갑자기 윈도우에서 '띠로링'하면서 알림창이 여러개 뜹니다! 이때는 당황하지 말고 전부 '허용' 혹은 '설치'를 눌러주시면 되는데

가장 처음 뜨는 알림창이 dpinst-amd64.exe을 허용할건지 여부입니다.

이것은 아두이노가 설치파일로 설치되었을 때 포트와 드라이버를 설정하고 설치하는 과정에서 Driver Package Installer가 작동하게 허용할거냐는 부분이니 당연히 '허용'을 눌러주시면 됩니다.

그 다음엔 순서대로 'Adafruit Industries LLC 포트(COM & LPT)', 'Arduino USB Driver', 'Genuino USB Driver'를 설치할건지 물어보는 창이 나오는데, 세개 다 설치를 눌러주시면 됩니다.

그러면 마지막으로 dpinst-amd64.exe 허용창이 한번 더 뜨는데, 허용 눌러주시면 아두이노 설치가 전부 끝납니다!

 

4. 재실행!

설치 후 실행한 화면을 끄거나 해서 아두이노 IDE를 다시 실행하고 싶으신 경우 바탕화면에 자동으로 'Arduino IDE' 바로가기가 생성되었으니 이것을 클릭하여 실행해주시면 됩니다.

 

네, 여기까지 아두이노 IDE(통합 개발 환경) 설치를 진행해 보았습니다! 이 다음에는 아두이노 기본 세팅과 포트설정, 그리고 Library 추가에 대해서 진행해보도록하겠습니다!

 

그럼 다음포스팅까지 안녕~~

+ Recent posts