2019/02/03에 해당하는 글 2

[아두이노] 스위치 버턴 제어

IOT/아두이노|2019. 2. 3. 10:51


[아두이노] 스위치 버턴 제어




스위치를 누르면 스위치 내부의 선이 연결되어 전류가 공급되고 LED가 켜지게 된다. 이걸 아두이노에서 제어해보도록 하자.

기본 동작



1. 회로도 구성 (풀업, 풀다운)


  • 준비물 : led 1개, 저항 220옴 1개, 10k옴 1개, 스위치 1개, 뻥판, 아두이노우노
  • 내용 : 스위치를 누르면 led의 불이 들어오게 한다.

풀업풀다운
회로도



풀업과 풀다운의 상태 값을 알아야 한다. 내부적인 전류 흐름을 이해해야 하지만 스위치 배치가 풀업과 풀다운으로 상태로만 처음 구별만 하자.
풀업은 전류가 공급되는데 스위치 버턴을 누르지 않은 상태면 7번으로 입력값이 1이 된다. 하지만 스위치를 누르면 전류가 gnd로 낮은 곳으로 흐르기 때문에 7번핀은 입력값이 0이 된다. 풀다운 반대로 스위치를 누르지 않은 상태에서는 전류가 흐르지 않기 때문에 7번핀의 입력값은 0이 되고 스위치를 누르면 전류가 흐르기 때문에 1의 값을 갖게 된다.

그럼 코딩은 살펴보도록 하자.

2. 코딩


void setup()
{
  pinMode(13, OUTPUT);
  pinMode(7, INPUT);
}

void loop()
{
  digitalWrite(13, digitalRead(7));  
}

첫번째 :
led를 켜기 위해서 pinMode()함수로 13번핀을 출력모드로 우선 선언하였다. 그리고 스위치 버턴을 눌렀을때 그 값을 입력을 받기 위해서 7번핀을 입력모드로 선언하였다. OUTPUT 전류를 밖으로 출력하는 것이고 INPUT은 전류를 안으로 입력받는 것이다. OUTPUT/INPUT만 구분하여 이해하면 된다.

두번째 :
led 켜기 위해서 digitalWrite(출력핀, HIGH/LOW)로 불이 들어오게 한다. 이건 지난 시간에 반복해서 실험한 함수이다.
그러면 입력받는것은 digitalRead(7)함수이다. 출력은 Wirte이고 입력은 Read란 단어만 숙지하면 된다.
digitalRead(7)은 7번핀을 전기신호를 입력받겠다는 의미로 이해하시면된다. 그리고 7핀에 들어온 값이 반환값으로 나오게 된다.

쉽게 말해서 임의의 stat변수 그릇이 있다면

state = digitalRead(7);

이러면 7번핀의 입력값이 1 or 0 값중 하나를 반환한다. 가령 전류가 흘러 입력값이 1이 된다면 이 함수를 통해 1이 반환되어서 state=1 이 된다.

풀업 회로도라면
초기 상태는 스위치가 누르기 전 상태는 digitalRead(7)은 1이 되고 digitalWrite(13,1)로 출력되어 led가 켜져있는 상태가 된다.누르면 0이 되어 led가 꺼진다.

풀다운 회로도라면
초기 상태는 스위치가 누르기 전 상태는 digitalRead(7)은 0이 되고 digitalWrite(13,0)로 출력되어 led가 꺼져있는 상태가 된다.누르면 1이 되어 led가 켜진다.

둘의 원리만 이해하면 된다.

3. 저항없이 풀업스위치 회로도 구성



저항이 없을때 INPUT_PULLUP모드로 내부 풀업 저항을 사용하기 위한 배치도 이다.

4. 저항없이 풀업스위치의 코딩

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(7, INPUT_PULLUP);
}

void loop()
{
  digitalWrite(13, digitalRead(7));  
}

PinMode에서 OUTPUT/INPUT 모드 외에 INPUT_PULLUP모드가 있다. 이건 내부 풀업 저항을 사용하겠다는 건데 그냥 저항없이 입력모드로 사용하겠다고 간단히 이해만 하자.

모드만 INPUT_PULLUP만 이해 하면 된다.

5. 고민해야할 것

스위치를 누르면 불이 들어와야 풀업모드를 사용하면 위 코딩에서는 불이 먼저 들어오는게 불편함을 느껴야 합니다.
풀다운으로 해야하는게 아닌가라고요. 사실 풀업을 사용하는 이유는 아두이노 칩 자체가 전류가 공급되면 각 핀에서 소량의 전류가 흐르게 됩니다. 쉽게 말해서 노이즈로 생각하면 될꺼에요. 풀업모드가 이 문제점에 좋다고 하네요. 그래서 스위치 관련 아두이노 소스들을 찾아보시면 거의 다 풀업모드를 사용하더군요.

그런데 중요한것은 스위치를 누르면 불이 들어와야지 하겠죠. 위 코딩은 원리를 이해하기 위한 목적으로 코드를 최소한 한것이고요. 코드를 변경해야겠죠. 즉, 7번의 값으로 led 불이 들어오는 상태를 결정하는 건 동일하지만 누를때 우리가 생각하는 개념으로 불이 들어오게 하기 위해서 하나의 C문법을 배우도록 하죠.

C문법

if(조건문){
  처리문1;
}
else{
  처리문2;
}

예)

if(k>10){
     printf("k가 10보다 크다!\n");
}
else {
     printf("k가 10보다 크다!\n");
}

k가 10보다 크면 처리문1이 수행되고 k가 10보다 작으면 처리문2가 수행됩니다. 참일때 if문의 처리문1이 거짓일때 else의 처리문2가 수행됩니다. 한줄의 코딩일때는 괄호 생략이 가능함.

f(k>10) printf("k가 10보다 크다!\n");
else printf("k가 10보다 크다!\n");

그냥 else 문을 생략가능함

if(k>10) printf("k가 10보다 크다!\n");

k가 10보다 크면 printf문을 수행하고 크지 않으면 if문을 빠져 나온다.

다중 if문은

if(조건1) 처리문1;
elseif(조건2) 처리문2;
else 처리문3;

첫번째 조건1이 참이면 처리문1을 수행하고 끝나지만 조건1이 거짓이면 조건2로 넘어가서 참이면 처리문2를 수행하고 끝나고 거짓이면 else 처리문3문을 수행하고 끝난다. 한줄일때는 괄호를 생략했지만 처리문이 여러 명령문일때는 괄호로 묶어야 한다. 이점만 주의하면 if문을 사용하는데 어려움이 없다.

코딩

int state = digitalRead(7);
if(state ==1) digitalWrite(13, LOW);  
else digitalWrite(13, LOW);  

7번 핀의 초기값이 스위치 누르기 전 값은 1이기 때문에 state 그릇에 1의 값이 저장된다. 조건문에서 스위치를 누르기 전이니깐 led은 LOW가 되어야겠죠. 스위치를 누르면 7번핀은 0이 되고 state = 0으로 조건문은 거짓으로 led은 HIGH가 되면 되겠죠.

원리를 이해하시면 코딩이 바로 안되면 글로써 문장을 만들어보세요.

  1. 스위치를 누르지 않은 상태가 1이니깐 우선 그 값을 변수로 정해서 담아둬야지
  2. state변수가 초기 1의 값이니깐 조건문을 써서 led 불을 꺼진 상태로 둬야지 state==1일때 led 꺼져있어야겠지.
  3. state==0이면 스위치가 눌러지니깐 led 켜야겠지

이걸 문장을 코드로 바꾸시면 되겠죠. 2, 3번은 꼭 if(state==1)을 안해도 됩니다. if(state==0)을 해도 되겠죠. 그러면 명령어 처리문은 반대가 되겠죠.

코딩은 표현하고 싶은데로 자연스럽게 표현 하시면 됩니다.

6. 결과



마무리


간단히 INPUT_PULLUP 모드를 이용한 스위치 버턴 제어를 해 보았습니다.
사실 Led 관련 응용 예제를 오늘 거론하고 싶었지만 약간 프로그램코딩에 치우치는 경향도 있고 둘이상의 부품의 조합을 하는 것들이라서 나중에 거론할까 합니다.
우선은 하나하나의 부품 제어를 통해 부품을 이해하는게 더 중요하다고 생각되어 당분간 부품 제어에 초점을 맞추겠스니다.


'IOT > 아두이노' 카테고리의 다른 글

[아두이노] 곰세마리멜로디(피에조부저)  (0) 2019.02.05
[아두이노] 피에조부저 제어  (0) 2019.02.04
[아두이노] 3색 LED 제어  (0) 2019.02.02
[아두이노] 코딩 구조  (0) 2019.01.31
[아두이노] LED 제어  (0) 2019.01.30

댓글()

Fritzing 회로도 디자인

유용한팁|2019. 2. 3. 10:47

Fritzing 회로도 디자인



오늘은 회로도를 그리는 사이트를 하나 소개하도록 하겠습니다. 아두이노를 어느정도 공부하셨던 분이라면 이 사이트를 아마도 알고 계시거나 사용하고 있으시겠죠. 아두이노를 배운지 얼마 안되신 분들을 위해서 소개합니다. 사실 다음 실험에 사용될 부품이 가상시뮬레이터에서는 제공되지 않는 부품이라서 어쩔 수 없이 Fritzing으로 디자인 하게 되었네요. 그래서 바로 사용하는 것보다 이런 소프트웨어가 있다는 것을 미리 설명하는게 좋을 것 같아서 포스팅을 하게 되었습니다. 그러면 Fritzing에 대해 살펴보도록 하죠.

1. Fritzing 소프트웨어 다운로드


상단에 공식홈페이지를 링크를 걸어 놓았습니다. 거기로 들어가시면 아래와 같은 홈페이지가 열립니다.

여기서 다운로드를 누르시면 다운로드 페이지로 넘어 갑니다.

여기서, 'No Donation' 클릭하시고 다운로드를 클릭하시면 됩니다. 이 창은 무료로 소프트웨어를 제공하는데 비영리사이트라서 후원이 필요한 부분인데 후원을 하실분들은 금액을 누르고 다운로드 하시면 되고 그렇지 않는 분들은 'No Donation'를 눌러서 받으셔도 됩니다.

참고로 설치 소프트웨어가 아니라 무설치 실행 소프트웨어입니다. 소프트웨어는 압축형태로 제공되며 압축을 플고 바로 실행하시면 됩니다.

2. Fritzing 실행


실행 첫 페이지는 Welcom항목 페이지가 열려 있는데 브레드보드로 눌러주시면 위와 같은 창으로 보이게 됩니다. 가상시뮬레이터랑 사용법은 동일합니다. 사용할 부품을 드래그를 통해 이뤄집니다. 가상시뮬레이터에서 제공되지 않는 다양한 부품들을 제공하기 때문에 디자인할 때 꽤 유용한 프로그램입니다.

아두이노 쇼핑몰 같은 곳에서 부품들을 판매할 때 다자인 그림을 많이 활용 사용합니다. 그만큼 유용한 프로그램이라는 소리인 거죠.

사용법은 가상시뮬레이터에서 부품을 드래그 하고 배치하는 것은 동일하지만 차이점은 선을 연결할 때 좀 다릅니다. 가상시뮬레이터는 꺽이는 지점에서 한번 쉬고 다시 그 지점에서 다시 이동하는데 Fritzing 은 시작점과 끝나는 점을 먼저 연결한 뒤에 꺽을 지점을 마우스로 클릭해서 드래그하면 선이 꺽이게 됩니다.

아래 그림처럼 꺽을 지점에서 클릭한 상태로 아래로 마우스를 드래그 하면 클릭한 위치의 선이 꺽이게 됩니다

처음에는 가상시뮬레이터의 선 연결과 Fritzing의 선연결하고 살짝 혼동이 올 수 있는데 그렇게 어렵지 않습니다. 몇번 연습하시다보면 자연스럽게 사용할 수 있을 꺼에요.

3. Fritzing을 외부 부품 가져오기


Fritzing은 설치하면 모든 부품을 제공하지는 않습니다. 많은 부품을 제공하기는 하지만 그렇다고 해서 모든 부품을 다운받은 프로그램 안에는 없습니다. 기본 부품들만 제공 되니깐요.

여기서, 없는 부품은 디자인을 포기해야 할까요. 그렇지 않습니다. 많은 오프라인 Fritzing 족들이 github에 공개하고 있습니다. 우리는 검색을 통해서 해당 부품이 있는 github 주소로 찾아가서 다운로드를 받고 그걸 여러분들이 사용하는 Fritzing에 import 시키면 됩니다.

1) 부품 검색법

대충 어떤 느낌으로 검색하면 되겠죠.



2) 부품 가져오기

아래 그림에서 CORE Parts에 세모 모양의 클릭이 있을 꺼에요 그걸 클릭하시면 "Import ..." 있는데 다운로드 받은 것을 Import 폴더로 옮겨서 여기서 여시면 부품은 부품 목록이 있는 곳으로 옮겨지게 됩니다. 아니면 부품 목록에서 마우스 커서를 위치하고 마우스 오른쪽 버턴을 누르면 창이 나타납니다 클릭을 하시든 마우스 오른쪽 버턴을 누르든 편하신 방식을 선택하시면 됩니다.

3) 부품 확인

정상적으로 부품을 가져왔네요. 외부 부품을 가져온게 MINE항목의 My Parts에 해당조이스틱 부품이 등록되어 있습니다.

이 부품을 배치하고 선을 연결하면 회로도를 완성 할 수 있겠죠.

마무리


Fritzing 소프트웨어에 대해서 간단히 살펴 보았습니다. 다음 포스트 내용이 조이스틱이라서 가상 시뮬레이터에서 제공되지 않는 부품이라 그림으로 표현하기 참 애매해서 Fritzing을 사용하였습니다. 바로 쓰기에 앞서 간단히 Fritzing을 소개하는게 좋을 것 같아서 오늘의 포스팅 주제로 결정 했네요.

한번 다운로드 받으셔서 간단히 사용을 해보셨으면 합니다.

은근 회로도 표현 디자인이 재미가 있습니다. 그리고 PCB모드도 있고 코드창도 있어 나중에 아두이노로 어떤 것을 만들었는데 한번에 디자인과 코드를 해놓고 파일 형태로 보관해 놓으시면 아주 유용하겠죠. 필요할 때 꺼내 쓸 수 있으니깐요. 디자인도 없는 부품은 외부에서 오픈 디자인 파일을 가져다가 디자인도 할 수 있으니깐요. 가상시뮬레이터면 없는 부품은 해당 부품의 사진을 가져다가 포토샵같은 곳에서 그려야 하는데 Fritzing은 그럴 필요가 없다는 것이 정말 좋은 것 같아요.

아두이노로 뭘 표현하고 정리용으로 Fritzing에서 마무리 표현을 하시면 보관용으로 사용하기 좋은 소프트웨어겠죠.

댓글()