tinkercad에 해당하는 글 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

댓글()

Tinkercad로 온라인 3D 디자인 하기

유용한팁|2019. 1. 30. 11:26

Tinkercad로 온라인 3D 디자인 하기






오늘은 즐거운 토요일입니다. 매주 토요일이면 하나씩 무료로 사용할 수 있는 프로그램을 소개하는데 이번주 소개할 무료 툴은 팅커캐드입니다. 초보자도 쉽게 3D 디자인할 수 있는 입문자용으로 딱 좋은 프로그램입니다. 물론 윈도우 10이 설치된 분이라면 앱으로 3D 디자인 할 수 있는 무료 프로그램이 몇개 있지만 오늘 소개하는 프로그램은 설치 없이 온라인상에서 3D 디자인 편집이 가능하고 아이들도 쉽게 조작할 수 있는 프로그램일 것 같아서 소개합니다.

1. 팅커캐드 사이트




간단히 이메일 계정으로 회원가입하시면 됩니다.

갤러리 누르시면 작품들이 화려하죠. 이걸 다운로드 받을 수 있고 복사해서 내 계정으로 옮겨올 수 있습니다. 작품들을 보면 감히 범접 할 수 없는 화려한 작품들을 소개하고 있네요. 내계정으로 복사해와서 어떻게 만들어졌는데 분해 해보시고 따라하시면 대충 감이 잡히실 꺼에요.

그리고 알아보기에서 샘플 튜토리얼 교육이 있습니다. 그런데 영어로 되어 있어 다소 불편하실 수 있지만 그냥 그림만 보고 대충 따라하실 수 있습니다.

알아보기 페이지 하단에 참고로 단축키 목록이 나와 있으니깐 살펴보시고 이용하시면 편하게 3D 디자인을 할 수 있습니다. 마우스로만 해도 되는데 단축키에서 Ctrl+화살표와 Shift+화살표, Shift 누른상태에서 물체들을 클릭이나 Shift+마우스왼쪽키, Ctrl+마우스왼쪽키 등 몇개가 더 있는데 연습하시다 보면 단축키를 사용으로 편하게 편집을 할 수 있다는 것을 느끼실 꺼에요. 마우스 하나로 해도 되기는 하는데 나중에 좀 불편해지니깐 꼭 단축키를 숙지하세요.

2. 팅커링 편집해보기





딱 계정을 만들면 디자인(팅커링), Circuits(아두이노편집기), 교육(알아두기튜토리얼을 클릭하면 자동으로 여기 저장) 이렇게 구성되어 있습니다. 디자인을 누르면 편집창을 새로 만들 수 있습니다. 2달전 만져보고 포스팅 할려고 잠깐 만져 봤네요.

편집창

기본창에서 보면 기본 쉐이프가 몇개 없고 덩그러니 창 하나만 있습니다. 갤러리에서 본 작품들은 화려한데 도대체 이걸로 어떻게 만들었지 하고 의문이 들꺼에요. 저도 처음에 기본 쉐이프을 가지고 어떻게 모먕을 만들지 갑갑 했었습니다. 모양을 만드는 것이 참 도특한 방식이더군요. 모양을 만들때 이게 모양을 만드는 것이 아니라 모양을 깍는다는 원리로 모양을 만들더군요. 아래 모양을 만드는 과정을 자세히 보시면 왜 모양을 깍는다란 표현인지 아실거에요.

어떻게 모양을 만드는지 과정을 설명하겠습니다.

(1) 사각형과 원형의 모형이 있습니다.

(2) 원형안에 사각형을 배치하고 속성창에서 솔리드와 구멍이 있는데 구멍을 클릭하여 변경합니다.

여기서 물체가 정상적으로 보이는 상태는 솔리드이고 물체를 투명하게 보이게 하는게 구멍입니다. 구멍이라는 표현이 번역이 좀 이상하게 된건지 좀 우낀 표현이지요.

(3) Shift 누른상태에서 두 물체를 클릭해줍니다. 범위가 지정되면 위쪽 상단에 그룹만들기가 활성화 되어 있고 그걸 눌러주면 묶여집니다.

(4) 완성


이렇게 모양이 하나 완성됩니다. 이게 팅커벨의 핵심입니다. 이런식으로 해서 독특한 모양을 만들어 냅니다. 여러개의 쉐이프 들을 붙이기 해서 하나로 그룹화하고 거기서 구멍을 파거나 깍을때 그 위치에 도형들을 배치하고 솔리드 대신 구멍 속성을 변경하고 파거나 깍는 부분에 덮어 씌우면 덮어진 범위은 사라지게 됩니다.

참 쉽죠. 이런식으로 작품을 만들어 내면 됩니다. 쉽기는 한데 이게 웹상에서 하기 때문에 컴 사양을 좀 타는 것 같아요. 웹브라우저 인터넷 성능이 느릴때는 좀 버벅거릴 꺼에요. 다 좋은데 이게 단점이네요. 온라인상에서 설치 없이 하는거라 그정도 단점은 감수할 만 할거에요. 아이들 작품도 꽤 잘 만든것 봐서는 쉽게 아이들도 3D 디자인을 할 수 있는 편집기인것 같아요.

3. 짧게 연습해서 만들어 봤어요.




초보수준으로 연습없이 사용법도 간단하고 무대포로 대충 만들어 봤네요. 포스팅 할려고 잠깐 짬내서 짧게 대충 만들었습니다. 공부안하고 이정도로 만들어지는 걸 봐서는 아마 아이들도 사용법만 알면 무자 쉽게 3D 디자인을 할 수 있을 거라 생각되네요.

마무리




전문적으로 하시고 싶다면 3D 게임엔진인 블렌드와 유니티 프로그램을 다운 받아서 설치하시면 되고요. 건축캐드용인데 아주 쉬운 툴로는 스케치업이 있는데 한달 무료 사용이라서 이걸 작년에 한달 놀았는데 아쉽더군요. 더 사용은 되는데 한달 후에는 다른 일부는 사용 못하게 되더군요. 이것도 전문 3D 캐드가 어려운분들이 스케치업으로 공부하면 꽤 쉽게 3D 디자인을 할 수 있어 편집기로 매리트가 있는 프로그램 입니다. 여기서 만든 건물들을 유니티 게임엔진으로 옮겨와서 게임에 사용되는 건물로 쓸 수 있어서 만들기도 쉽고 게임개발 공부할 때 사용하면 괜찮은 프로그램 같아요.

댓글()