아두이노 LED, 버튼 제어하기

Posted by JaGG
2018. 5. 21. 18:03 카테고리 없음

오늘은 아두이노 기초 LED와 버튼을 함께 제어하는 방법에 대해서 살펴보겠습니다.


아두이노 제어에서 LED제어는 c언어에서 Hello World문을 출력하는것과 같은 기초 필수코스라고 볼 수 있습니다.


그 이유는 C언어의 문자열 출력문과 같이 이후에 가장 많이 사용되는 개념이기 때문입니다.


오늘 LED와 버튼을 제어하기 위해서 살펴볼 목차는 다음과 같습니다.


 1. LED와 버튼의 특징

2. 아두이노 회로 만들기

3. 아두이노 스케치 소스코드 만들기

4. Mblock 블록코딩으로 소스코드 만들기



1. LED와 버튼의 특징 및 사용방법



발광 다이오드(發光diode)는 순방향으로 전압을 가했을 때 발광하는 반도체 소자이다. LED(Light Emitting Diode)라고도 불린다. 발광 원리는 전계 발광효과를 이용하고 있다. 또한 수명도 백열등보다 더 길다.


위는 위키백과에서 소개하고 있는 LED에 대한 간단한 설명입니다.


LED를 사용하기 위해서는 부품 그리고 회로에서 어느부분이 Vcc인지 GND인지 정확하게 알고 사용을 해야합니다.


극성을 모르고 연결한다면 LED가 동작하지 않기 때문에 필수적으로 이 부분에 대한 선행학습이 먼저 되어야 합니다.


LED는 두개의 다리를 가지고 있으며 각 다리의 길이가 다른데 대표적으로 이 다리의 길이를 통해서 극성을 파악할 수 있습니다.


LED의 다리중 긴쪽이 +(Vcc) 짧은쪽이 -(GND)입니다.


그리고 만약 다리를 잘라서 이후에 다리길이가 똑같아 졌을 경우, 이때는 다리길이를 통한 극성파악은 불가능해집니다.


그럴때는 LED의 내부를 살펴봄으로써 극성을 찾아낼 수 있습니다.


내부를 살펴보면 위의 그림과 같이 +부분에 ( l )형태 -부분에 (ㄱ)형태로 되어있는 것을 확인 할 수 있습니다.


이 때 ㄱ형태로 되어있는 부분이 -(GND)라는것을 확인 하실 수 있습니다.


  

출처 :  www.directindustry.com & 코코아팹


다음은 버튼에 대한 설명을 드리겠습니다.


버튼은 아두이노 뿐만아니라 우리 생활에서도 땔수 없는 대표적인 부품중에 하나 입니다.


실생활 어디를 보더라도 버튼이 있는것을 확인 하실 수 있습니다. 스마트폰, 전등 등등


실생활에 필수적인 부품인 만큼 아두이노에서 프로젝트를 설계할 때도 절대로 빠질 수 있는 대표적인 부품이 버튼 입니다.

그렇다면 버튼은 어떻게 사용해야 할까요?


위에서 LED는 두개의 다리가 극성을 가지는 특성을 가지고 있었습니다.


그렇다면 버튼도 극성을 가지고 있을까요? 그렇지 않습니다. LED처럼 전기를 받아야 동작하는 부품의 경우에는 극성을 가지지만 버튼은 전기가 흐르는 선의 중간에서 연결과 단락의 역할을 할 뿐 전기적인 입력이 필요 없기 때문에 극성은 따로 존재하지 않습니다.


하지만 그렇다고 해서 버튼의 다리가 가지는 특성을 알 필요가 없는것은 아닙니다.


버튼의 사용방법을 모른다면 위의 그림의 뜻이 이해가 되지 않을것 입니다.


위의 그림과 같이 버튼은 4개의 다리를 가집니다. 하지만 여기서 회로에 연결하기 위해 필요한 다리는 단 2개 입니다.


즉 A, C와 B, D의 다리는 서로 연결이 되어 있다는 뜻입니다.


따라서 A, C중에서 하나 B, D다리 중에서 하나를 무작위로 선택해서 사용하면 된다는 뜻입니다.


그러면 위에 사진에서 버튼의 회로표기법에 대해서 이해가 가실것입니다.




2. 버튼, LED로 아두이노 회로 만들기 



다음은 위에서 살펴본 부품을 이용해서 아두이노 회로를 구성해 보도록 하겠습니다.


먼저 회로를 구성하기 위해서 필요한 부품은 아두이노 우노보드, LED, 버튼, 저항(330), 저항(10k), 브래드보드와 점프선 입니다.


 

 

 


 


 


 



회로의 구성을 위해서 먼저 회로도와 연결된 결과의 이미지를 보여 드리겠습니다.



위의 사진은 아두이노와 버튼, LED의 회로도 입니다. 전자를 처음 접하시는 메이커스 분들은 생소 하실 수 있지만 익숙해 지셔야 합니다.




위에서 살펴본 회로도를 실제로 연결한 모습입니다.


이 회로를 구성하기 전에 브래드보드의 사용방법을 꼭 숙지 하셔야 합니다.


브래드보드는 위의 사진과 같이 +, - 전원을 연결 할 수 있는 위쪽에 가로줄 그리고 중간에 부품을 연결하는 세로줄로 구성이 되어 있습니다.


위쪽에 두 줄은 각각 내부적으로 가로로 쭉 연결이 되어 있습니다. 즉 파란색 줄은 처음부터 끝까지 연결된 것이고,


두번째 빨간색 줄 역시 가로로 쭉 연결된 것입니다.


그리고 중간에 있는 칸들은 가로가 아닌 세로로 즉 세로 한줄(5칸)이 하나로 연결되어 있는 것입니다.



위에서 만들었던 버튼, LED를 3개씩 회로에 구성하면 다음과 같은 결과물이 만들어집니다.


하나씩 연결된 회로를 먼저 보여드린 이유는 처음 접하시는 분들이 이렇게 많이 연결된 회로를 보면 간단해도 햇갈리는 경우가 많기 때문입니다.



바로 위에 있는 회로를 실제로 만든 모습입니다.


브래드보드는 제품을 만드는 단계에서 최소의 비용으로 테스트 해볼 수 있다는 장점을 가지고 있지만, 반면에 사진과 같이 보기 좋지 않다는 것이 가장 큰 단점입니다.



LED와 저항이 위의 회로와 같이 연결된것을 확인 하실 수 있습니다.



마찬가지로 버튼 역시 회로도와 똑같이 만들어진 모습입니다.



3. 아두이노 스케치 소스코드 만들기



int Button1 = 8, Button2 = 9, Button3 = 10;        //디지털 연결핀 8, 9, 10을 버튼 1, 2, 3으로 정의

int LED_R = 3, LED_G = 4, LED_B = 5;                  //디지털 연결핀 3, 4, 5을  LED 1, 2, 3으로 정의


void setup() {

  pinMode(Button1, INPUT);                                //디지털 핀의 모드를 버튼은 입력 LED는 출력으로 설정

  pinMode(Button2, INPUT);

  pinMode(Button3, INPUT);

  pinMode(LED_R, OUTPUT);

  pinMode(LED_G, OUTPUT);

  pinMode(LED_B, OUTPUT);

}


void loop() {


  digitalWrite(LED_R, HIGH);                                //LED가 연결된 핀에 HIGH(1)로 세팅함으로써 LED가 켜진다.

  digitalWrite(LED_G, HIGH);

  digitalWrite(LED_B, HIGH);


  delay(1000);


  digitalWrite(LED_R, LOW);                                //LED가 연결된 핀에 LOW(0)로 세팅함으로써 LED가 꺼진다.

  digitalWrite(LED_G, LOW);

  digitalWrite(LED_B, LOW);


  delay(1000);                                                      // 1000ms(1초) 동안 대기한다.

}


위의 코드는 아두이노 스케치로 작성한 가장 기본적인 소스코드 입니다.


아래는 이 프로젝트로 할 수 있는 여러가지 프로그램 예제 입니다.


/////////////////////////////예제 2///////////////////////

int Button1 = 8, Button2 = 9, Button3 = 10;

int LED_R = 3, LED_G = 4, LED_B = 5;


void setup() {

  pinMode(Button1, INPUT);

  pinMode(Button2, INPUT);

  pinMode(Button3, INPUT);

  pinMode(LED_R, OUTPUT);

  pinMode(LED_G, OUTPUT);

  pinMode(LED_B, OUTPUT);

}


void loop() {


  int B_1 digitalRead(Button1);

  int B_2 digitalRead(Button2);

  int B_3 digitalRead(Button3);


  digitalWrite(LED_R, LOW);

  digitalWrite(LED_G, LOW);

  digitalWrite(LED_B, LOW); 

  

  if(B_1 == 1){

    digitalWrite(LED_R, HIGH);

  }

  else if(B_2 == 1){

    digitalWrite(LED_G, HIGH);

  }

  else if(B_3 == 1){

    digitalWrite(LED_B, HIGH);

  }

  

}


/////////////////////////////예제 3///////////////////////


int Button1 = 8, Button2 = 9, Button3 = 10;

int LED_R = 3, LED_G = 4, LED_B = 5;


void setup() {

  pinMode(Button1, INPUT);

  pinMode(Button2, INPUT);

  pinMode(Button3, INPUT);

  pinMode(LED_R, OUTPUT);

  pinMode(LED_G, OUTPUT);

  pinMode(LED_B, OUTPUT);

}


void loop() {


  int B_1 digitalRead(Button1);

  int B_2 digitalRead(Button2);

  int B_3 digitalRead(Button3);

  

  if(B_1 == 1){

    digitalWrite(LED_R, HIGH);

    digitalWrite(LED_G, HIGH);

    digitalWrite(LED_B, HIGH); 

  }

  else if(B_2 == 1){

    digitalWrite(LED_R, LOW);

    digitalWrite(LED_G, LOW);

    digitalWrite(LED_B, LOW); 

  }

  

}


/////////////////////////////예제 4///////////////////////


int Button1 = 8, Button2 = 9, Button3 = 10;

int LED_R = 3, LED_G = 4, LED_B = 5;

int Button_mode = 0, num = 3;


void setup() {

  pinMode(Button1, INPUT);

  pinMode(Button2, INPUT);

  pinMode(Button3, INPUT);

  pinMode(LED_R, OUTPUT);

  pinMode(LED_G, OUTPUT);

  pinMode(LED_B, OUTPUT);

}


void loop() {


  if(B_1 == 1){

    Button_mode = 1;

  }

  else if(B_2 == 1){

    Button_mode = 2;

  }


  if(Button_mode == 1)

  {

    digitalWrite(LED_R, HIGH);

    digitalWrite(LED_G, HIGH);

    digitalWrite(LED_B, HIGH);


    delay(1000);


    digitalWrite(LED_R, LOW);

    digitalWrite(LED_G, LOW);

    digitalWrite(LED_B, LOW);


    delay(1000);

  }

  else if(Button_mode == 2)

  {

    digitalWrite(num-1, LOW);

    digitalWrite(num, HIGH);

    num++;

    delay(1000);

    if(num == 7)  num = 3;

  }

}



4. Mblock 블럭코드로 소스코드 만들기




위 코드는 Mblock으로 만든 블록코드 입니다.


출력 결과는 위의 아두이노 첫번째 스케치와 완전하게 동일한 결과를 가집니다.


나머지는 아래 예제 2, 3, 4에 대한 Mblock 코드 입니다.


/////////////////////////////예제 2///////////////////////


/////////////////////////////예제 3///////////////////////


/////////////////////////////예제 4///////////////////////