본문 바로가기

Programming/Arduino 아두이노

01. 아두이노 기초 (micro-controller, digital input, analog input)

이 포스팅은 UNIST Prototyping 동아리 DINO의 이도영님의 아두이노 코딩강좌 내용을 바탕으로 정리하였습니다.

이번 포스팅부터는, 지금 속해있는 동아리에서 강좌 형태로 진행되고 있는 아두이노 스터디의 내용을 정리해서 공유해보고자 한다.
나의 기억을 위해서도 있지만, 혹 스터디에 못 참여하였던 동아리원들에게나 지금 이 내용이 필요해서 보고 있는 당신에게 도움이 되었으면 좋겠다.

" 디노는 현재 다니고 있는 대학의 Prototyping 동아리이다.
들어간 지는 얼마 안 됐지만 어쩌다보니 간부를 하고 있다...
거창한 것을 만들어내기보다는 소소하게 하고 싶었던 프로젝트를 진행하고 메이커페어같은 박람회도 참여한다.
요즘은 interactive house와 날아다니는 해리포터 빗자루를 만들고 있다. "

먼저 아두이노에 대해서 알아보자.
아두이노는 간단히 말해서 Micro-controller를 이용하여 만들어진 개발보드로 흔한 기기들처럼 어떤 input을 원하는 output으로 표현 혹은 제어하는 역할을 수행할 수 있다. 

Micro-controller 보드의 종류는 아래에 보이듯이 수없이 많다...
하지만 신기하게도 저마다 만들어진 목적이 다른데, Arduino를 이용해서 뭔가를 만들고 싶을 때 가장 먼저 어떤 보드를 이용할 지 골라야 할 것이다.



 

 


가장 기본적인 보드로 유명한 UNO는 이렇게 생겼다.
Atmega328 칩을 사용한다.

 

Leonardo 보드는 Atmega32u4칩을 이용하는데 usb 컨트롤러를 내장하고 있다.
이 보드는 컴퓨터에서 키보드나 마우스로 인식하는데,
이를 이용하여 본인만의 제품개발도 가능하다.
https://moonrim.io/ko/building-1

이 외 다른 보드들도 다들 저마다의 탄생배경이 있으니, 그것들은 각자 필요에 따라 찾아 사용하길 바란다.

Input은 어떻게?

위에서 Arduino는 input을 인식하여 output을 표현 혹은 제어한다고 하였는데.. 그러면 어떤 방식으로 input을 인식하는 지 알아보자.
Input에는 크게 discrete한 digital신호와 연속적인 analog신호가 있다.

먼저 Digital 신호부터 살펴보자.

Discrete하다는 것은 왼쪽 그림과 같이 비연속적이다는 뜻이다.
이 그래프에서 위쪽은 3.3V 혹은 5V의 전압의 인식을 의미하며 signal이 있다고 판단하여 on,
아래쪽은 0V로 off로 인식하게 된다.


왼쪽의 보드는 지금 나의 실험에서도 사용중인 MKR WIFI 1010 보드인데,
빨간색으로 표시된 영역이 바로 input 센서를 연결하는 디지털 핀들이다.

그러면 이 디지털 핀 들은 어떻게 input을 인식할까?

뭐 왼쪽 처럼 연결하면 되지 않을까?  5V digital pin을 2번핀으로 신호를 받아들이니.. 괜찮을 것 같은데...

막상 이렇게 연결해보면 계속 0과 1을 왔다갔다 마치 고장난 것 같은 현상을 보인다.
이는 플로팅이라는 현상으로 0V가 아닌 미세전압이 계속 영향을 미치기 때문이다.
이를 막기 위해서 우린 풀업 혹은 풀다운 저항을 이용하여 미세전압을 0V로 만들어준다.

풀다운 저항은 뭐 이런 느낌??? 
스위치를 누르면 5V에서 2번 핀으로 바로 신호가 전달되다가 스위치를 누르면 5V에서 GND로 전류가 흐르면서 2번 핀에서는 깨끗한 0V를 인식하게 된다.

그러면 이런 질문을 해볼 수도 있겠다.
미세전압이 흐르면.. 0V에서 3.3V사이 애매한 전압은 on인가요 off인가요?

답은 아두이노 공식 문서에 - 5V기준 3V이상이면 On, 3.3V기준 2V이상이면 On이라고 한다. 


여기까지  Digital input을 간단히 맛보고 Analog input을 살펴보면서 이번 포스팅을 마무리해보자.

예상한대로 요렇게 연속적인 input을 의미한다. 
상단이 3.3V 혹은 5V 하단이 0V라고 생각하면 된다
그런데 어떻게 digital한 기계가 analog한 값들을 인식할 수 있을까..?

비결은 사실 요렇게 생겼기 때문이다. analog인 척하는 무수히 촘촘한 digital input인 느낌적인 느낌..?
무수히라고 해봤자 총 1024단계로 분해하여 값을 측정한다.
*mkr의 경우는 4096단계


아날로그 핀들은 요렇게 핀번호 옆에 A가 붙어있다.

Analog라는 뜻이다.

그럼 요놈들은 어떻게 전압을 인식할까?
이건 생각보다 조금 복잡하다.





V = IR은 다들 알 것이다! (갑자기...)

그럼 저기 각 저항에 걸리는 전류는 같고 (직렬연결이니까)
V=IR이니 100옴에 걸리는 저항이 50 옴에 걸리는 저항의 두배라는 것도 알 수 있다.
우리는 그러면 5V짜리 전압을 각 저항에 3.333V 1.666V 씩 할당해줄 수 있을 것이다.

바로 그 개념을 적용하면 우리는 각 저항에 걸리는 전압을 우리가 원하는대로 조절할 수 있다는 것을 알 수 있다.
바로 가변저항을 통해서!
그러면 R1을 50옴으로 설정하면 1.66666V,
200옴으로 설정하면 3.3333V로 설정이 가능하다.

이런식으로 서서히 전압값을 조절하면 뭔가 서서히 변화시키는 걸 할 수 있을 것 같은 기분이 든다!


요거는 위의 개념을 이용하여 저기 옆의 레버를 조절하여 저항을 조절하여 전압을 조절하는 그런 거다.

딱히 더 설명이 귀찮은 건 아니고...




오늘은 여기까지. 끝.