본문으로 바로가기

  아두이노(Arduino) 기초 디지털 IN/OUT 포트 1편  


애드라이프의 아두이노 모든 포스팅 리스트를 보고 싶으신 분은 공지 읽어주세요.




안녕하세요. 애드라이프 입니다.

[아두이노/아두이노 기초] - 아두이노(Arduino) 초급에 대한 고찰

이전 포스팅▲ 에서 보유 중인 주변기기들을 보고 말씀드린다고 했는데......

뭐가 아주 많이 있네요... 없을 걱정은 안해도 될만큼 많이!!!!!!


우선 기초부분에서는 표제처럼 디지털 INPUT, OUTPUT과 RS232통신에 대해서 중점적으로 알아볼 예정입니다.


가장 기본적인 부분이라고 볼 수 있는데요. 하지만 정말 많이 쓰기 때문에 꼭 알아둬야 하는 부분이기도 합니다.

한번더 말씀 드리지만 필자는 아두이노 우노(Arduino UNO)를 기준으로 포스팅합니다.


아두이노 우노 핀맵

아두이노 우노(Arduino UNO)의 핀 배열입니다. ▲


빨간상자 부분을 디지털 포트(Digital Port)라 합니다. 사진에는 여러 설명이 더 있지만 지금은 

디지털 IN/OUT Port정도로만 알아도 무관합니다.



그럼 디지털 I/O 포트란 무엇인가?

디지털 신호 0,1을 이용하여 해당하는 핀에 전압 입력 또는 출력 할 수있는 포트를 뜻합니다.

기본적으로 아두이노 디지털 포트는 IN/OUT기능이 모두 가능합니다.(프로그램에서 설정!)


예를 들어볼까요?

ex) 1번 핀을 INPUT으로 설정하면 외부에서 신호를 받아드릴 준비를 하며

 5V가 입력되면 HIGH(1), 0V면 LOW(0)라 하여 판단합니다.


ex) 2번 핀을 OUTPUT으로 설정하면 외부로 신호를 내보낼 준비를 하며

1을 보내면 5V 출력 0을 보내면 0V(GND)를 출력합니다.


위 이론을 이용하여 이번 포스팅에서는 스위치를 이용한 LED 켜기를 진행해볼까 합니다.

이름하여 [ 아두이노 UNO ] 스위치를 이용한 LED 제어 입니다.


우선 회로를 한번 살펴볼까요?

아두이노 회로도스위치 입력을 이용한 LED제어

전원은 5V를 사용하였습니다. 

저항은 스위치부에 풀다운용 10K옴 2개, LED쪽에 전류 제어용 1K옴 2개입니다.

제가 사용한 풀다운용 저항 값 선정은 임의 선정이며 목적은 보호용입니다.

LED쪽 전류 제어 저항은 반듯이 자신이 사용하는 LED의 소비전류를 기준으로 선정해야합니다.

(본 포스팅에서는 시뮬레이터로 하기때문에 LED 전류 제어 선정을 1K로 구성하였습니다.)


LED저항 선정하는 방법I=V/R 공식을 사용하면됩니다.

예를들어 20mA 소비전류를 가진 LED를 사용한다면 0.02A=5/R이기때문에 250옴짜리 저항을 쓰면 됩니다.

LED에 대한 전압강하까지 고려한다면 0.02A = 5-(LED전압강하)/R로 계산하시면 됩니다.


하지만, 실제 회로 구성시와 다른점이 있습니다.

실제로 회로구성시에 반듯이 고려해야하는 몇가지 사항에 대해 몇가지 설명 후 넘어가겠습니다.

기존적인 지식이 있으신 분들은  아래 1,2,3 항목은 넘어가셔도 무관합니다.



1.  시뮬레이터에서 쓰는 저항이 실제 표준저항인지 꼭 확인 해야합니다.

ex) 계산상 490옴을 써야하는 상황이라면 470옴을 쓰던지 510옴을 써야합니다.

-> 인터넷이 표준저항표라고 검색하시면 손쉽게 찾아 보실 수 있습니다.


2.  LED,SW등의 소자들의 스펙을 반듯이 확인 합니다.

ex) 대부분의 시뮬레이터에서는 소자의 상세한 스펙은 고려 되지않기때문에 실제로는 LED가 

파괴 될 수 있는 전류가 흐르는 회로일지라도 문제 없이 구동 될 수 있습니다.

LED같은 경우 소비 전류를 고려하여 저항을 선정해주어야 합니다.


3.  전기적인 기본 지식이 바탕되어야 합니다.

ex) 실제 5V와 GND가 중간에 부하없이 직접 연결되면 어떤 현상이 일어날까요?

스파크가 튀면서 소자나 보드가 망가질 것입니다. 이런 기본적인 전기지식을 바탕이 되어야 겠죠?


저항에 대한 이해가 다 되었다면 이제 프로그램을 살펴볼까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int LED_RED=13;
int LED_GREEN=12;
 
int SW1=7;
int SW2=6;
 
void setup()
{
  pinMode(SW1, INPUT);
  pinMode(SW2, INPUT);
  
  pinMode(LED_RED, OUTPUT);
  pinMode(LED_GREEN, OUTPUT);
}
 
void loop()
{
  if(digitalRead(SW1)==HIGH)
    digitalWrite(LED_RED,HIGH);
  else
    digitalWrite(LED_RED,LOW);
  if(digitalRead(SW2)==HIGH)
    digitalWrite(LED_GREEN,HIGH);
  else
    digitalWrite(LED_GREEN,LOW);
}

cs


하나하나 살펴 차근차근 설명 드리도록 하죠.

int LED_RED=13;          //Arduino 13번 핀을 LED_RED로 선정
int LED_GREEN=12;        //Arduino 12번 핀을 LED_GREEN로 선정
 
int SW1=7;                //Arduino 7번 핀을 SW1로 선정
int SW2=6;                //Arduino 6번 핀을 SW2로 선정


포트들을 이름으로 선정하므로서 프로그램의 구독성을 좀더 높여주기 위합니다.


void setup()                            //C언어로 치면 MAIN에 해당하는 부분입니다 1회성 실행부입니다.
{
  pinMode(SW1, INPUT);                    //SW1 INPUT포트로 설정합니다.
  pinMode(SW2, INPUT);                    //SW2 INPUT포트로 설정합니다.
  
  pinMode(LED_RED, OUTPUT);                //LED_RED OUTPUT포트로 설정합니다.
  pinMode(LED_GREEN, OUTPUT);                //LED_GREEN OUTPUT포트로 설정합니다.
}


사용 할 포트의 역할을 정하는 부분입니다.


void loop()                                //반복문입니다.
{
  if(digitalRead(SW1)==HIGH)                
    digitalWrite(LED_RED,HIGH);            // SW1번이 눌리면 LED_RED가 들어옵니다.
  else
    digitalWrite(LED_RED,LOW);            // SW1번이 눌리지 않으면 LED_RED가 꺼집니다.
  if(digitalRead(SW2)==HIGH)
    digitalWrite(LED_GREEN,HIGH);            // SW2번이 눌리면 LED_GREEN가 들어옵니다.
  else
    digitalWrite(LED_GREEN,LOW);            // SW2번이 눌리지 않으면 LED_GREEN가 꺼집니다.
}


스위치의 입력을 받아 LED에 출력을 주는 부분의 코드입니다.


코드가 실행되는 과정을 아래 동영상으로 확인 해 보시죠. ▼

마우스로 스위치를 누르자니 느낌이 안살긴 하네요....



지금까지 기초 1편 포스팅이였습니다.

다음 포스팅에서는 실제 아두이노 IDE를 이용한 프로그램 업로드

 실제 소자를 활용하여 회로구성 또한 해보도록 하겠습니다. 

계속해서 도움되는 포스팅으로 찾아 뵙겠습니다.         

by 애드라이프