1주차 LED제어하기(블록코딩): 두 판 사이의 차이

아두위키 : Arduwiki
 
(같은 사용자의 중간 판 19개는 보이지 않습니다)
1번째 줄: 1번째 줄:
=== 1. 아두이노 디지털 핀 ===
=== 1. 아두이노 디지털 핀 ===
[[파일:아두이노 디지털핀.png|가운데|프레임없음|342x342픽셀|
[[파일:아두이노_디지털핀.png|대체글=# 아두이노 Digital Pin|프레임없음|342x342픽셀]]
 
# 아두이노 Digital Pin
 
]]
아두이노 디지털 입출력 pin은 보드의 digital pin 0 ~ 13을 사용할 수 있습니다. 0, 1번 pin은 컴퓨터와 아두이노가 통신할 때 주로 사용하기 때문에 우리는 2 ~ 13 핀을 사용하여 디지털 입출력을 사용할 수 있습니다.
아두이노 디지털 입출력 pin은 보드의 digital pin 0 ~ 13을 사용할 수 있습니다. 0, 1번 pin은 컴퓨터와 아두이노가 통신할 때 주로 사용하기 때문에 우리는 2 ~ 13 핀을 사용하여 디지털 입출력을 사용할 수 있습니다.


10번째 줄: 6번째 줄:


=== 2. 브레드보드 ===
=== 2. 브레드보드 ===
[[파일:브레드보드.png|가운데|프레임없음|369x369픽셀]]
[[파일:브레드보드.png|프레임없음|369x369픽셀]]
브레드보드의 구조를 살펴봅시다. 브레드보드는 위의 그림처럼 각각 가로, 세로 방향으로 연결되어 있습니다.
브레드보드의 구조를 살펴봅시다. 브레드보드는 위의 그림처럼 각각 가로, 세로 방향으로 연결되어 있습니다.


16번째 줄: 12번째 줄:


=== 3. LED ===
=== 3. LED ===
[[파일:LED.png|가운데|프레임없음|LED]]
[[파일:LED.png|대체글=LED|프레임없음]]
[[LED(5mm)]] 일반적으로 2개의 전극단자로 구성되어 있습니다. 긴 단자가 [+], 짦은 단자가 [-]입니다.
[[LED(5mm)]] 일반적으로 2개의 전극단자로 구성되어 있습니다. 긴 단자가 [+], 짦은 단자가 [-]입니다.


==== 3-1. LED 회로도 ====
==== 3-1. LED 회로도 ====
[[파일:LED 회로도.png|가운데|프레임없음|548x548px|LED 회로도]]
[[파일:LED_회로도.png|대체글=LED 회로도|프레임없음|548x548픽셀]]


==== 3-2. mBlock 사용 방법과 아두이노 연결하기 ====
==== 3-2. mBlock 사용 방법과 아두이노 연결하기 ====
27번째 줄: 23번째 줄:


아두이노와 컴퓨터를 먼저 연결하고 바탕화면에 [mLink2] 라고 하는 프로그램을 켜주세요.
아두이노와 컴퓨터를 먼저 연결하고 바탕화면에 [mLink2] 라고 하는 프로그램을 켜주세요.
[[파일:Mlink.png|테두리|가운데|프레임없음|609x609픽셀]]
 
[[파일:Mlink.png|테두리|프레임없음|609x609픽셀]]
 
[mBlock block-based editor]의 "Create now" 버튼을 눌러 mBlock 프로젝트를 생성합니다.
[mBlock block-based editor]의 "Create now" 버튼을 눌러 mBlock 프로젝트를 생성합니다.
[[파일:Mblock접속5.png|테두리|가운데|프레임없음|614x614픽셀]]
 
[[파일:Mblock접속5.png|테두리|프레임없음|614x614픽셀]]
 




35번째 줄: 35번째 줄:


검색 기능을 이용해 "arduino"를 검색하여 우리가 사용할 "Arduino Uno" 그림을 선택하고 [확인] 버튼을 누릅니다.
검색 기능을 이용해 "arduino"를 검색하여 우리가 사용할 "Arduino Uno" 그림을 선택하고 [확인] 버튼을 누릅니다.
[[파일:Mblock접속3.png|테두리|가운데|프레임없음|888x888픽셀]]
 
[[파일:Mblock접속3.png|테두리|프레임없음|888x888픽셀]]
 




45번째 줄: 47번째 줄:


노트북이라면 아래에 뜨는 포트를 연결하면 됩니다. 만약 데스크탑이라면 COM1, COM2를 제외한 아두이노와 연결된 포트를 선택하고 연결시켜주면 됩니다.
노트북이라면 아래에 뜨는 포트를 연결하면 됩니다. 만약 데스크탑이라면 COM1, COM2를 제외한 아두이노와 연결된 포트를 선택하고 연결시켜주면 됩니다.
[[파일:Mblock접속4.png|테두리|가운데|프레임없음|710x710픽셀]]
 
[[파일:Mblock접속4.png|테두리|프레임없음|710x710픽셀]]
 




52번째 줄: 56번째 줄:
==== 3-3. LED 제어하기 ====
==== 3-3. LED 제어하기 ====
LED 제어를 위해 디지털 핀 출력 블록을 사용해봅시다.
LED 제어를 위해 디지털 핀 출력 블록을 사용해봅시다.
[[파일:블록 LED켜고끄기.png|테두리|가운데|프레임없음|454x454픽셀]]
 
[[파일:블록_LED켜고끄기.png|프레임없음|454x454픽셀]]
 




61번째 줄: 67번째 줄:


위의 코드를 작성하고 아두이노에 코드를 업로드하여 결과를 확인해봅시다.
위의 코드를 작성하고 아두이노에 코드를 업로드하여 결과를 확인해봅시다.
[[파일:블록_업로드.png|프레임없음|698x698픽셀]]
[업로드 모드] 버튼을 눌러 아두이노에 코드를 업로드할 수 있습니다.


==== 3-4. 반복 블록 ====
==== 3-4. 반복 블록 ====
[[파일:블록 반복.png|테두리|가운데|프레임없음]]
[[파일:블록_반복.png|프레임없음]]
위의 코드를 아두이노에 업로드하면 1번 LED가 켜지고 꺼진 후 프로그램이 종료됩니다.
위의 코드를 아두이노에 업로드하면 1번 LED가 켜지고 꺼진 후 프로그램이 종료됩니다.


계속해서 LED를 켜고 끄는 동작을 만들고 싶다면 [제어]-[계속 반복하기] 블록을 이용해 코드를 여러 번 실행시킬 수 있습니다.
계속해서 LED를 켜고 끄는 동작을 만들고 싶다면 [제어]-[계속 반복하기] 블록을 이용해 코드를 여러 번 실행시킬 수 있습니다.
[[파일:블록 LED켜고끄기반복.png|테두리|가운데|프레임없음|490x490픽셀]]
 
[[파일:블록_LED켜고끄기반복.png|프레임없음|490x490픽셀]]
 
이 코드를 작성하여 아두이노에 업로드하고 결과를 확인해 봅시다.
이 코드를 작성하여 아두이노에 업로드하고 결과를 확인해 봅시다.


코드가 계속 반복되어 LED가 1초 간격으로 켜지고 꺼지는 모습을 볼 수 있습니다.
코드가 계속 반복되어 LED가 1초 간격으로 켜지고 꺼지는 모습을 볼 수 있습니다.
<div class="coders70">
<youtube>vWEELsB0mRQ</youtube>
</div>


<div class="coders70">


==== 3-5. 전체 코드 ====
<syntaxhighlight lang="arduino" line="1">
int led = 9;
void setup() {
  pinMode(led, OUTPUT);
}
void loop() {
  digitalWrite(led, HIGH);
  delay(1000);
  digitalWrite(led, LOW);
  delay(1000);
}
</syntaxhighlight>위의 코드를 실행해보면 1초 간격으로 LED가 켜지고 꺼지는 모습을 볼 수 있습니다.
<div class="coders70">
<youtube>vWEELsB0mRQ</youtube>
</div>
</div>


95번째 줄: 95번째 줄:


==== 3-1. 회로도 ====
==== 3-1. 회로도 ====
[[파일:LED 3개 회로도.png|가운데|프레임없음|LED 3개 회로도]]
[[파일:LED_3개_회로도.png|대체글=LED 3개 회로도|프레임없음|548x548픽셀]]


==== 3-2. LED 3개 제어 코드 ====
==== 3-2. LED 3개 제어 코드 ====
<syntaxhighlight lang="arduino" line="1">
[[파일:블록_LED3개제어.png|프레임없음|671x671픽셀]]
int led1 = 11;
 
int led2 = 12;
int led3 = 13;


void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}


void loop() {
이 코드를 실행하게 되면 led1, led2, led3이 차례대로 켜지고 꺼지는 모습을 볼 수 있습니다.
  digitalWrite(led1, HIGH);
  delay(1000);
  digitalWrite(led1, LOW);
  delay(1000);
  digitalWrite(led2, HIGH);
  delay(1000);
  digitalWrite(led2, LOW);
  delay(1000);
  digitalWrite(led3, HIGH);
  delay(1000);
  digitalWrite(led3, LOW);
  delay(1000);
}
</syntaxhighlight>이 코드를 실행하게 되면 led1, led2, led3이 차례대로 켜지고 꺼지는 모습을 볼 수 있습니다.


<div class="coders70">
<div class="coders70">
129번째 줄: 108번째 줄:
</div>
</div>


==== 3-3. 반복문 for ====
==== 3-3. [실습] LED 3개를  차례대로 켜고 모든 LED가 켜진 후 차례대로 끄기 ====
앞의 코드를 잘 살펴보면 led1, led2, led3이 켜지고 꺼지는 코드가 반복된다는 것을 알 수 있습니다.
<div class="coders70">
<youtube>LECxGtjpAo0</youtube>
</div>
 


반복문을 배우고 위 코드를 수정하는 연습을 해봅시다!<syntaxhighlight lang="arduino" line="1">
==== 3-4. [실습] LED 3개를 동시에 켜고 끄기 ====
for(선언 및 초기화; 조건; 증감부) {
<div class="coders70">
    // code..
<youtube>jk4oqqrXnIU</youtube>
}
</div>
</syntaxhighlight>for문은 가장 처음 [선언 및 초기화]가 실행되고 [조건]을 확인합니다. 그 다음 for문 안의 [code]가 실행되고 [증감부]가 수행됩니다.  
=== 4. 변수와 반복 블록 ===
실습을 진행하기 위해 변수와 반복 블록을 배워봅시다.


그 후 [조건] → [code] → [증감부]가 계속해서 반복되다가 [조건]이 거짓이 되면 반복문이 종료됩니다.<syntaxhighlight lang="arduino" line="1">
★ 변수란 값을 저장할 수 있는 저장소입니다.!
for(int i=1; i<=5; i+=1) {
    // code..
}
// i가 1, 2, 3, 4, 5를 반복함.


for(int i=5; i>=1; i-=1) {
==== 4-1. 변수 생성 방법 ====
    // code..
아래의 그림을 따라 변수를 만들어 봅시다.
}
// i가 5, 4, 3, 2, 1를 반복함.
</syntaxhighlight>


==== 3-4. 코드 수정하기 ====
[[파일:블록_변수.png|프레임없음|716x716픽셀]]
<syntaxhighlight lang="arduino" line="1">
int led1 = 11;
int led2 = 12;
int led3 = 13;


void setup() {
==== 4-2. 변수, 반복 블록 설명 ====
  pinMode(led1, OUTPUT);
[[파일:블록 변수블록.png|181x181px|섬네일|생성한 변수입니다. 변수의 값을 저장하고 있는 블록입니다.|없음]]
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}


void loop() {
[[파일:블록 변수정하기.png|변수의 값을 원하는 지정 값으로 설정합니다.|섬네일|311x311픽셀|없음]]
  for(int led = 11; led <= 13; led+=1) {
    digitalWrite(led, HIGH);
    delay(1000);
    digitalWrite(led, LOW);
    delay(1000);
  }
}
</syntaxhighlight>위의 코드를 확인하면 [led]라는 변수가 반복문에서 선언되었고 11로 초기화되었습니다.


for 문을 해석해보면 led 변수가 11부터 시작해서 1씩 증가하며 13까지 반복되고 14가 되는 순간 종료됩니다.
[[파일:블록 변수변경하기.png|변수의 값을 지정된 값만큼 변경합니다.|섬네일|315x315픽셀|없음]]


그러므로 digital pin 11번 LED를 켜고 끄고, 12번 LED를 켜고 끄고, 13번 LED를 켜고 끄는 모습을 확인할 수 있습니다.
[[파일:블록 몇번반복.png|지정된 값만큼 반복합니다.|섬네일|176x176픽셀|없음]]


==== 실습1. LED 3개를  차례대로 켜고 모든 LED가 켜진 후 차례대로 끄기 ====
==== 4-3. 변수, 반복 블록 사용하기 ====
<div class="coders70">
변수와 위의 반복 블록을 이용해 [실습3-3] 코드를 수정해보겠습니다.
<youtube>LECxGtjpAo0</youtube>
</div>
배운 반복문 for을 이용해 코드를 작성하고 실행시켜 봅시다.


만약 어렵다면 먼저 반복문 없이 코드를 작성해보고 수정하는 연습을 해봅시다!
[[파일:블록_1주차실습1코드수정.png|프레임없음|941x941픽셀]]


<syntaxhighlight lang="arduino" line="1">
왼쪽 코드는 변수와 반복문을 사용하지 않고 11, 12, 13번 디지털 핀에 연결된 LED를 제어하는 코드입니다.
int led1 = 11;
int led2 = 12;
int led3 = 13;


void setup() {
오른쪽 코드는 변수와 반복문을 사용하여 수정한 모습입니다.
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}


void loop() {
현재는 간단한 코드를 수정하였기 때문에 코드의 길이가 줄어들지 않았지만 복잡하고 큰 문제를 해결하기 위해서는 변수와 반복 블록을 사용하는 것은 필수입니다!
    // code..
}
</syntaxhighlight>


==== 실습2. LED 3개를 동시에 켜고 끄기 ====
==== 4-4. [실습] "3-4. [실습] LED 3개를 동시에 켜고 끄기"에서 만들어본 코드를 변수와 반복 블록을 이용해 수정해봅시다. ====
<div class="coders70">
아래 코드를 채워 프로그램을 완성해봅시다.
[[파일:블록_실습2변수반복.png|프레임없음|531x531픽셀]]<div class="coders70">
<youtube>jk4oqqrXnIU</youtube>
<youtube>jk4oqqrXnIU</youtube>
</div>
</div>
배운 반복문 for을 이용해 코드를 작성하고 실행시켜 봅시다.


만약 어렵다면 먼저 반복문 없이 코드를 작성해보고 수정하는 연습을 해봅시다!<syntaxhighlight lang="arduino" line="1">
=== 5. LED 밝기 제어 ===
int led1 = 11;
아두이노의 아날로그 출력 함수에 대해서 알아봅시다.
int led2 = 12;
int led3 = 13;


void setup() {
아날로그 출력은 보드 위에 ~ 표시가 붙은 포트로 digital pin 3, 5, 6, 9, 10, 11 이렇게 총 6개의 포트를 사용할 수 있습니다.
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}
 
void loop() {
    // code..
}
</syntaxhighlight>


=== 4. 아날로그 출력 ===
[[파일:아두이노_ANALOG.png|프레임없음|418x418픽셀]]
아두이노의 아날로그 출력 함수에 대해서 알아봅시다.


아날로그 출력은 보드 위에 ~ 표시가 붙은 포트로 digital pin 3, 5, 6, 9, 10, 11 이렇게 총 6개의 포트를 사용할 수 있습니다.
아날로그 출력은 0~5V 값을 출력할 수 있고 [PWM 핀 출력] 블록을 이용해 0~255의 값을 매개변수로 입력할 수 있습니다.
[[파일:아두이노 ANALOG.png|가운데|프레임없음|361x361픽셀]]
아날로그 출력은 0~5V 값을 출력할 수 있고 analogWrite() 함수를 이용해 0~255의 값을 매개변수로 입력할 수 있습니다.


=== 5. LED 밝기 제어 ===
위에서 LED를 켜고 끄는 작업을 수행해보았습니다.
위에서 LED를 켜고 끄는 작업을 수행해보았습니다.


235번째 줄: 168번째 줄:


==== 5-1. 회로도 ====
==== 5-1. 회로도 ====
[[파일:LED 밝기 제어 회로도.png|가운데|프레임없음|334x334픽셀]]
[[파일:LED_밝기_제어_회로도.png|프레임없음|419x419픽셀]]


==== 5-2. 코드 ====
==== 5-2. 코드 ====
241번째 줄: 174번째 줄:
<youtube>qb23mAS9Pjc</youtube>
<youtube>qb23mAS9Pjc</youtube>
</div>
</div>
analogWrite() 함수는 pinMode() 함수가 내장되어 있어 setup() 함수에서 따로 선언하지 않아도 됩니다.<syntaxhighlight lang="arduino" line="1">
PWM 출력 블록을 이용해 LED의 빛 세기를 제어할 수 있습니다.  
int led = 9;
 
0부터 255 사이의 값으로 설정할 수 있으며 0은 LED에 불이 꺼진 상태, 255는 가장 밝게 켜진 상태입니다.


void setup() {
[[파일:블록_PWM.png|프레임없음|573x573픽셀]]


}


void loop() {
  analogWrite(led, 0);
  delay(1000);
  analogWrite(led, 100);
  delay(1000);
  analogWrite(led, 200);
  delay(1000);
  analogWrite(led, 255);
  delay(1000);
}
</syntaxhighlight>


==== 실습3. LED가 천천히 켜지고 천천히 꺼지는 동작 만들기 ====
==== 5-3. [실습] LED가 천천히 켜지고 천천히 꺼지는 동작 만들기 ====
<div class="coders70">
<div class="coders70">
<youtube>2jqwwMTGl7o</youtube>
<youtube>2jqwwMTGl7o</youtube>
</div>배운 변수와 반복문을 이용해 LED가 천천히 켜지고 천천히 꺼지는 동작을 만들어 봅시다.
바로 변수와 반복문을 적용하기 힘들다면 먼저 반복문 없이 코드를 완성해봅시다.
코드를 완성 후 반복문을 적용하는 연습을 해봅시다.
[[파일:블록_1주차실습4.png|프레임없음|568x568픽셀]]
=== 6. 가변 저항 ===
[[파일:1주차가변저항.png|프레임없음]]
가변 저항은 센서는 저항 값을 변화시킬 수 있는 소자입니다. 볼륨을 조절하거나 빛의 밝기를 조절하는데 사용될 수 있습니다.
양 끝(왼쪽, 오른쪽)의 핀에 5V, GND를 연결시킬 수 있습니다.
5V 방향으로 센서를 돌리면 저항의 값이 커지고 GND 방향으로 센서를 돌리면 저항의 값이 작아집니다.
이때, 저항의 값은 0~1023 사이의 값이 반환됩니다.
==== 6-1. 회로 ====
[[파일:1주차가변저항회로.png|프레임없음|804x804픽셀]]
==== 6-2. [실습]가변저항을 이용해 LED 켜고 끄기 ====
<div class="coders70">
<youtube>14jFXRrrpYk</youtube>
</div>
가변 저항의 값을 읽어와 LED를 제어해봅시다.
가변 저항는 "아날로그(A)핀 [ ] 번 읽기" 블록을 이용해 값을 읽어올 수 있습니다.
회로를 연결하고 가변 저항의 값에 따라 LED를 제어해봅시다.
가변 저항의 값을 읽어와 "변수"에 저장한 후 '''500보다 작으면 LED가 꺼지고 그렇지 않으면 LED가 켜질 수 있게''' 만들어봅시다.
[[파일:1주차가변저항실습1.png|프레임없음|629x629픽셀]]
==== 6-3. [실습] 가변저항을 이용해 LED 밝기 제어하기 ====
<div class="coders70">
<youtube>ffvHwZ0kLuI</youtube>
</div>
</div>
<syntaxhighlight lang="arduino" line="1">
int led = 9;


void setup() {
가변 저항의 값을 읽어와 LED 밝기를 제어해봅시다.
 
가변 저항을 GND 방향으로 돌릴수록 LED 밝기가 점점 어두워지고, 5V 방향으로 돌릴수록 LED가 밝아지는 코드를 작성해봅시다.
 
위에서 배운 블록을 사용해 보세요!


}


void loop() {
[[파일:1주차가변저항밝기.png|프레임없음]]
    // code..
}
</syntaxhighlight>


=== 6. 실습 코드 참고하기 ===


==== 1-1. 실습 코드) LED 3개를  차례대로 켜고 모든 LED가 켜진 후 차례대로 끄기 (반복문 없이 코딩하기) ====
★★★ 생각해보기!
<syntaxhighlight lang="arduino" line="1">
int led1 = 11;
int led2 = 12;
int led3 = 13;


void setup() {
LED는 출력 값으로 0~255까지의 값을 사용합니다.
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}


void loop() {
그런데 가변 저항의 값은 0~1023까지의 값을 반환하죠!
    digitalWrite(led1, HIGH);
    delay(1000);
    digitalWrite(led2, HIGH);
    delay(1000);
    digitalWrite(led3, HIGH);
    delay(1000);
    digitalWrite(led1, LOW);
    delay(1000);
    digitalWrite(led2, LOW);
    delay(1000);
    digitalWrite(led3, LOW);
    delay(1000);
}
</syntaxhighlight>


==== 1-2. 실습 코드) LED 3개를  차례대로 켜고 모든 LED가 켜진 후 차례대로 끄기 (반복문을 이용해 코딩하기) ====
그럼 LED에 가변 저항의 값을 그냥 넣게되면 알맞은 값을 출력할 수 없습니다.
<syntaxhighlight lang="arduino" line="1">
int led1 = 11;
int led2 = 12;
int led3 = 13;


void setup() {
읽어온 가변 저항의 값을 변환해서 LED 출력 값에 알맞게 넣어봅시다.
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}


void loop() {
나누기 연산자 블록을 이용해보세요!
  for(int led=11; led<=13; led+=1) {
    digitalWrite(led, HIGH);
    delay(1000);
  }
  for(int led=11; led<=13; led+=1) {
    digitalWrite(led, LOW);
    delay(1000);
  }
}
</syntaxhighlight>


==== 2-1. 실습 코드) LED 3개를 동시에 켜고 끄기 (반복문 없이 코딩하기) ====
[[파일:1주차가변저항밝기2.png|프레임없음]]
<syntaxhighlight lang="arduino" line="1">
int led1 = 11;
int led2 = 12;
int led3 = 13;


void setup() {
=== 7. 실습 코드 참고하기 ===
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}


void loop() {
==== 3-3. [실습] LED 3개를  차례대로 켜고 모든 LED가 켜진 후 차례대로 끄기 ====
    digitalWrite(led1, HIGH);
[[파일:블록_1주차실습1.png|프레임없음|671x671픽셀]]
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    delay(1000);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    delay(1000);
}
</syntaxhighlight>


==== 2-2. 실습 코드) LED 3개를 동시에 켜고 끄기 (반복문을 이용해 코딩하기) ====
<syntaxhighlight lang="arduino" line="1">
int led1 = 11;
int led2 = 12;
int led3 = 13;


void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}


void loop() {
==== 3-4. [실습] LED 3개를 동시에 켜고 끄기 ====
  for(int led=11; led<=13; led+=1) {
[[파일:블록_1주차실습2.png|프레임없음|500x500픽셀]]
    digitalWrite(led, HIGH);
  }
  delay(1000);
  for(int led=11; led<=13; led+=1) {
    digitalWrite(led, LOW);
  }
  delay(1000);
}
</syntaxhighlight>


==== 3-1. 실습 코드) LED가 천천히 켜지고 천천히 꺼지는 동작 만들기 ====
==== 4-4. [실습] "3-4. [실습] LED 3개를 동시에 켜고 끄기"에서 만들어본 코드를 변수와 반복 블록을 이용해 수정해봅시다.[[파일:블록_1주차실습3코드.png|프레임없음|621x621픽셀]] ====
<syntaxhighlight lang="arduino" line="1">
int led = 9;


void setup() {
==== 5-3. [실습] LED가 천천히 켜지고 천천히 꺼지는 동작 만들기 ====
[[파일:블록_1주차실습4코드.png|프레임없음|562x562픽셀]]


}
==== 6-2. [실습]가변저항을 이용해 LED 켜고 끄기 ====
[[파일:1주차실습5.png|프레임없음|676x676픽셀]]


void loop() {
==== 6-3. [실습] 가변저항을 이용해 LED 밝기 제어하기 ====
  for(int i=0; i<=255; i+=5) {
[[파일:1주차가변저항밝기실습.png|프레임없음|752x752픽셀]]
    analogWrite(led, i);
    delay(50);
  }
  for(int i=255; i>=0; i-=5) {
    analogWrite(led, i);
    delay(50);
  }
}
</syntaxhighlight><div class="coders70"></div>

2024년 8월 6일 (화) 14:36 기준 최신판

1. 아두이노 디지털 핀

# 아두이노 Digital Pin 아두이노 디지털 입출력 pin은 보드의 digital pin 0 ~ 13을 사용할 수 있습니다. 0, 1번 pin은 컴퓨터와 아두이노가 통신할 때 주로 사용하기 때문에 우리는 2 ~ 13 핀을 사용하여 디지털 입출력을 사용할 수 있습니다.

디지털 입출력은 LOW(0V)와 HIGH(3.3V) 중 하나의 값을 사용할 수 있습니다.

2. 브레드보드

브레드보드의 구조를 살펴봅시다. 브레드보드는 위의 그림처럼 각각 가로, 세로 방향으로 연결되어 있습니다.

아두이노의 GND, 5V pin이 부족한 경우 브레드보드를 이용해 확장하여 사용할 수 있습니다.

3. LED

LED LED(5mm) 일반적으로 2개의 전극단자로 구성되어 있습니다. 긴 단자가 [+], 짦은 단자가 [-]입니다.

3-1. LED 회로도

LED 회로도

3-2. mBlock 사용 방법과 아두이노 연결하기

아두이노와 컴퓨터를 먼저 연결하고 바탕화면에 [mLink2] 라고 하는 프로그램을 켜주세요.

[mBlock block-based editor]의 "Create now" 버튼을 눌러 mBlock 프로젝트를 생성합니다.


프로젝트가 생성되었다면 [추가] 버튼을 클릭합니다.

검색 기능을 이용해 "arduino"를 검색하여 우리가 사용할 "Arduino Uno" 그림을 선택하고 [확인] 버튼을 누릅니다.



mBlock으로 돌아와 [연결] 버튼을 클릭하여 아두이노와 mBlock을 연결합니다.

[연결]을 누른 후 [접속 가능한 모든 기기 표시] 앞의 체크 박스를 클릭합니다.

노트북이라면 아래에 뜨는 포트를 연결하면 됩니다. 만약 데스크탑이라면 COM1, COM2를 제외한 아두이노와 연결된 포트를 선택하고 연결시켜주면 됩니다.


연결이 완료되었다면 이제 LED 제어 프로그램을 만들어봅시다.

3-3. LED 제어하기

LED 제어를 위해 디지털 핀 출력 블록을 사용해봅시다.


우리가 9번 디지털 핀에 연결한 LED를 제어합니다.

[출력 "high"으로 설정하기]가 실행되면 LED가 켜지고 [출력 "low"으로 설정하기] 블록이 실행되면 LED가 꺼지게 됩니다.


위의 코드를 작성하고 아두이노에 코드를 업로드하여 결과를 확인해봅시다.

[업로드 모드] 버튼을 눌러 아두이노에 코드를 업로드할 수 있습니다.

3-4. 반복 블록

위의 코드를 아두이노에 업로드하면 1번 LED가 켜지고 꺼진 후 프로그램이 종료됩니다.

계속해서 LED를 켜고 끄는 동작을 만들고 싶다면 [제어]-[계속 반복하기] 블록을 이용해 코드를 여러 번 실행시킬 수 있습니다.

이 코드를 작성하여 아두이노에 업로드하고 결과를 확인해 봅시다.

코드가 계속 반복되어 LED가 1초 간격으로 켜지고 꺼지는 모습을 볼 수 있습니다.

3. LED 3개 제어하기

위에서 LED 1개를 제어하는 방법을 배웠습니다. 이번에는 LED 3개를 회로에 연결하고 코딩하여 동작시켜 봅시다.

3-1. 회로도

LED 3개 회로도

3-2. LED 3개 제어 코드


이 코드를 실행하게 되면 led1, led2, led3이 차례대로 켜지고 꺼지는 모습을 볼 수 있습니다.

3-3. [실습] LED 3개를 차례대로 켜고 모든 LED가 켜진 후 차례대로 끄기


3-4. [실습] LED 3개를 동시에 켜고 끄기

4. 변수와 반복 블록

실습을 진행하기 위해 변수와 반복 블록을 배워봅시다.

★ 변수란 값을 저장할 수 있는 저장소입니다.!

4-1. 변수 생성 방법

아래의 그림을 따라 변수를 만들어 봅시다.

4-2. 변수, 반복 블록 설명

생성한 변수입니다. 변수의 값을 저장하고 있는 블록입니다.
변수의 값을 원하는 지정 값으로 설정합니다.
변수의 값을 지정된 값만큼 변경합니다.
지정된 값만큼 반복합니다.

4-3. 변수, 반복 블록 사용하기

변수와 위의 반복 블록을 이용해 [실습3-3] 코드를 수정해보겠습니다.

왼쪽 코드는 변수와 반복문을 사용하지 않고 11, 12, 13번 디지털 핀에 연결된 LED를 제어하는 코드입니다.

오른쪽 코드는 변수와 반복문을 사용하여 수정한 모습입니다.

현재는 간단한 코드를 수정하였기 때문에 코드의 길이가 줄어들지 않았지만 복잡하고 큰 문제를 해결하기 위해서는 변수와 반복 블록을 사용하는 것은 필수입니다!

4-4. [실습] "3-4. [실습] LED 3개를 동시에 켜고 끄기"에서 만들어본 코드를 변수와 반복 블록을 이용해 수정해봅시다.

아래 코드를 채워 프로그램을 완성해봅시다.

5. LED 밝기 제어

아두이노의 아날로그 출력 함수에 대해서 알아봅시다.

아날로그 출력은 보드 위에 ~ 표시가 붙은 포트로 digital pin 3, 5, 6, 9, 10, 11 이렇게 총 6개의 포트를 사용할 수 있습니다.

아날로그 출력은 0~5V 값을 출력할 수 있고 [PWM 핀 출력] 블록을 이용해 0~255의 값을 매개변수로 입력할 수 있습니다.

위에서 LED를 켜고 끄는 작업을 수행해보았습니다.

이제 아두이노 아날로그 출력을 이용해 LED의 밝기를 제어해봅시다.

5-1. 회로도

5-2. 코드

PWM 출력 블록을 이용해 LED의 빛 세기를 제어할 수 있습니다.

0부터 255 사이의 값으로 설정할 수 있으며 0은 LED에 불이 꺼진 상태, 255는 가장 밝게 켜진 상태입니다.


5-3. [실습] LED가 천천히 켜지고 천천히 꺼지는 동작 만들기

배운 변수와 반복문을 이용해 LED가 천천히 켜지고 천천히 꺼지는 동작을 만들어 봅시다.

바로 변수와 반복문을 적용하기 힘들다면 먼저 반복문 없이 코드를 완성해봅시다.

코드를 완성 후 반복문을 적용하는 연습을 해봅시다.

6. 가변 저항

가변 저항은 센서는 저항 값을 변화시킬 수 있는 소자입니다. 볼륨을 조절하거나 빛의 밝기를 조절하는데 사용될 수 있습니다.

양 끝(왼쪽, 오른쪽)의 핀에 5V, GND를 연결시킬 수 있습니다.

5V 방향으로 센서를 돌리면 저항의 값이 커지고 GND 방향으로 센서를 돌리면 저항의 값이 작아집니다.

이때, 저항의 값은 0~1023 사이의 값이 반환됩니다.

6-1. 회로

6-2. [실습]가변저항을 이용해 LED 켜고 끄기

가변 저항의 값을 읽어와 LED를 제어해봅시다.

가변 저항는 "아날로그(A)핀 [ ] 번 읽기" 블록을 이용해 값을 읽어올 수 있습니다.

회로를 연결하고 가변 저항의 값에 따라 LED를 제어해봅시다.

가변 저항의 값을 읽어와 "변수"에 저장한 후 500보다 작으면 LED가 꺼지고 그렇지 않으면 LED가 켜질 수 있게 만들어봅시다.

6-3. [실습] 가변저항을 이용해 LED 밝기 제어하기

가변 저항의 값을 읽어와 LED 밝기를 제어해봅시다.

가변 저항을 GND 방향으로 돌릴수록 LED 밝기가 점점 어두워지고, 5V 방향으로 돌릴수록 LED가 밝아지는 코드를 작성해봅시다.

위에서 배운 블록을 사용해 보세요!



★★★ 생각해보기!

LED는 출력 값으로 0~255까지의 값을 사용합니다.

그런데 가변 저항의 값은 0~1023까지의 값을 반환하죠!

그럼 LED에 가변 저항의 값을 그냥 넣게되면 알맞은 값을 출력할 수 없습니다.

읽어온 가변 저항의 값을 변환해서 LED 출력 값에 알맞게 넣어봅시다.

나누기 연산자 블록을 이용해보세요!

7. 실습 코드 참고하기

3-3. [실습] LED 3개를 차례대로 켜고 모든 LED가 켜진 후 차례대로 끄기


3-4. [실습] LED 3개를 동시에 켜고 끄기

4-4. [실습] "3-4. [실습] LED 3개를 동시에 켜고 끄기"에서 만들어본 코드를 변수와 반복 블록을 이용해 수정해봅시다.

5-3. [실습] LED가 천천히 켜지고 천천히 꺼지는 동작 만들기

6-2. [실습]가변저항을 이용해 LED 켜고 끄기

6-3. [실습] 가변저항을 이용해 LED 밝기 제어하기