【 아두이노초급#4-1】아두이노초급강좌! #04 "아날로그 입출력하기 1편"(Arduino for Absolute beginner!)
아두이노 아날로그 입출력 1편
- 아두이노에서 아날로그 데이터를 입력받는 과정과 처리에 대해 설명합니다. - 아두이노 Analog port (A0~A5)로 가변저항을 이용해서 데이터를 입력 받으면, 아두이노 내부에 10bit ADC (아날로그를 디지털로 변환하는 회로) 컨버터에 의해 즉, 2의 10승 (0~1023) 의 데이터를 입력 받게 됩니다. 이를 아두이노 IDE의 시리얼 모니터를 통해 확인할 수 있는 실습입니다. 이번 실습은 이어지는 다음 실습과 연결되어 있으니 바로 이어서 실습해 보세요. [ 이어지는 다음실습 : rasino.tistory.com/317 ]
- 네오나르도 보드는 키보드나 마우스와 같은 HID 장치로 인식하기 때문에, 처음 PC와 연결할 때 장치 드라이버 설치가 필요합니다.
- 다음으로 플레이를 시킬 동영상을 준비합니다. 그리고 PC에 동영상 플레이어가 설치되어 있으면 됩니다. 영상에서는 다음 카카오플레이어가 설치되어 연결 되어 있습니다.
- 동영상을 플레이시키는 원리는 이렇습니다. 네오나르도 보드는 PC를 통해 키보드의 키입력이 가능합니다. 따라서 동영상을 단축키로 지정해서 실행 시키면 됩니다.
- 그럼 동영상을 단축키로 지정하기 위해 바로가기 아이콘을 바탕화면에 만들어 보겠습니다.
- 찾아 보기를 눌러 플레이시킬 동영상을 선택해줍니다.
- 이름을 적당히 정한 후 확인을 눌러 줍니다.
- 바로가기 아이콘에서 마우스 우클릭 후 속성을 클릭합니다.
- 바로가기 키 항목에서ctrl + Alt키를 동시에 누른 상태에서 숫자1을 입력합니다.
- 사실 숫자 1만 입력하여도 Ctrl+Alt키는 자동 입력됩니다.
- 그럼, 단축키가 제대로 먹히는지 ctrl+Alt+1을 눌러봅니다.
- 동영상이 잘 실행됩니다.
- 하지만 문제는 동영상이 전체화면 모드로 실행되지 않습니다.
- 이럴때는 플레이어 옵션에서 동영상 실행시 전체화면 모드로 실행 옵션을 찾아서 체크해주면 해결 됩니다.
- 카카오 팟플레이어의 경우 왼쪽 상단의 설정메뉴로 들어가보면 환경설정 메뉴가 있습니다.
- 환경설정으로 들어가서 재생항목에 보면, 재생시 창 크기 설정이 있고, 여기를 최대화 화면으로 설정해주면 됩니다.
- 그럼 보드를 연결하고 코드를 업로드 해줍니다.
「 이 과정에서 OS버전이나 PC환경에 따라 업로드가 잘 안 되는 문제가 생길 수 있는데, 레오나르도 보드의 특성상 키보드장치로 인식이 되어 있을 때 업로드를 위한 통신이 안 되기 때문입니다. 이럴 때는 업로드 버튼을 누르자마자 보드의 리셋키를 눌러 키보드 장치 인식이 끊어진 순간 데이터를 업로드 하면 해결되는데, 타이밍을 잘 맞추어야 합니다.
현재는 업데이트 되어 자동으로 장치 인식기능을 켜고 끄면서 업로드가 자연스럽게 잘 됩니다.
만약, 그 밖의 에러가 날 경우, 통신포트가 제대로 체크되어 있는지? 네오나르도 보드로 선택이 잘 되어 있는지 한 번더 확인해보세요.」
- 코드를 살펴보면, 초음파 센서로 물체와의 거리 값을 구해냅니다.
distance = pulseIn(echoPin, HIGH)/58; //에코핀 입력의 거리값을 cm단위로 계산
- 그래서 물체가 20cm 이하로 들어오게 되면, 동영상의 바로가기 아이콘에서 지정해 놓은 단축키를 누르도록 코딩이 되어 있기 때문에 영상에서처럼 동영상이 자동으로 실행이 됩니다.
if (distance < 20) { // 물체(사람)가 20cm 이하 되면 감지(LED경보 작동) Keyboard.press(KEY_LEFT_CTRL); // '왼쪽 Ctrl 키' delay(2); Keyboard.press(KEY_LEFT_ALT); // '왼쪽 Alt 키' delay(2); Keyboard.press('1'); // 숫자'1' delay(500); // 시간지연을 두어 여러번 실행되는 것을 방지함 Keyboard.releaseAll(); // 키를 계속 누르지 있지 않도록 함 delay(10000); }
- 마지막으로 시리얼 모니터창을 열어 측정되는 거리값과 함께 영상이 잘 실행되는지 확인해보세요.
만족스럽게 실행이 잘 될 것입니다. ^^
만약 PC를 라즈베리파이로 바꾼다면 더욱 소형화 시킨 작품을 만들 수 있겠네요.
오늘 학습내용은 여기까지 이며, 다음 학습영상을 기대해주세요~
감사합니다. ~~~ ^^
=== 아두이노 네오나르도 에러 잡기! ===
1. 만약 아래와 같은 HID.h HID.cpp 에러가 난다면, HID.cpp 파일을 아래 경로에서 찾아 백업후, 삭제를 하거나 파일명을 변경해 놓는다.
[ 에러 증상 ]
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\HID.cpp:17:10: fatal error: Platform.h: No such file or directory #include "Platform.h" ^~~~~~~~~~~~ compilation terminated. "Keyboard.h"를 위한 복수개의 라이브러리가 발견되었습니다 사용됨: C:\Program "HID.h"를 위한 복수개의 라이브러리가 발견되었습니다 사용됨: C:\Program exit status 1 보드 Arduino Leonardo 컴파일 에러.
nRF24L01 모듈을 이용하여 RF 무선 통신을 해보자. 블루투스통신의 경우 통신거리가 10m 내외로 짧지만, nRF24 모듈은 2.4GHz 대 주파수를 사용한 통신으로 보통 100m 까지도 통신이 가능하다. 안테나가 달린 모듈을 사용할 경우 800까지도 가능하다.
(기본 모듈의 경우 통신거리 스펙 : 250kbps의 속도로 ~250m까지, 실제 : 100m 정도, 외장 안테나 달린 모듈 스펙 : 250kbps의 속도로 ~1.1km까지, 실제 : 800m 정도)
오늘은 기본적인 연결방법과 간단한 데이터(문자)를 송수신 하는 것을 다루고, 차후에는 무선 RC기기를 컨트롤 해보려고 한다.
Let's get it~!
▶ nRF24L01 에 대해 :
nRF24L01모듈은 기본적으로 2.4GHz 대역을 사용하는 RF(Radio Frequency)통신 모듈이다.
이 모듈의 장점은 Bluetooth, ZigBee, NFC 모듈에 비해 가격이 매우 저렴하고 통신 가능 거리가 긴 것이 장점이다.
단점은, RF통신의 특성상 중간에 벽과같은 장애물이 있을 경우 수신율이 많이 떨어질 수 있다.
Image from. howtomechatronics.com
- NRF24L01 모듈은 기본적으로 다대 다 통신이 가능하며, 1MHz 간격으로 125개의 주파수 채널을 운영할 수 있고, 1대 다 통신도 가능하다. 선택적 통신을 위해 5자리의 Address(주소)를 사용한다.
기본적으로 위 모듈의 VCC 단자에는 1.9V~3.6V 입력만 가능하다, 따라서 아두이노 우노에 직접연결하고자 할 경우 반드시 3.3V 출력단자에 연결해야하니 주의가 필요하다. 만약 5V단자에 연결할 경우 nRF24L01 모듈의 손상을 피할 수 없다.
그런데, 아래 이미지의 nRF24L01 어뎁터 소켓을 사용하면, 3.3V 레귤레이터가 내장 되어 있어 아두이노의 5V 전원단자에 연결 할 수 있다.
소켓을 사용하면 좋은 다른 이유는, 복제(클론) 아두이노 보드나 다른 메이커의 아두이노 보드들 중 3.3V 출력에 사용되는 레귤레이터를 용량이 작은 것으로 사용하고 있는 것들이 더러 있어서 nRF24L01 모듈을 소켓없이 3.3V 단자에 연결하여 사용할 경우 동작이 잘 안 되는 경우가 더러 있기 때문인데, 소켓을 사용하여 5V 단자에 연결하면 이런 경우를 예방할 수 있다.
이유는 메이커 업체들이 5V 단자를 주로 사용하게 되는 아두이노 보드에서 3.3V단자는 잘 사용하지 않기 때문에 비용절감을 위해 좀더 저용량?의 저렴한 3.3V 레귤레이터를 사용하려 하기 때문일 것이다.
그런데, 당장 소켓을 구할 수 없을 때는 어떻게 할 것인가? 그럴때는 아래 소켓의 설명처럼, nRF24L01 모듈의 +,- 단자 사이에 10uF 이상의 전해콘덴서를 납땜하여 전원보강을 해주면 이런 문제는 해결 될 것이다.
nRF24L01 Adapter SocketnRF24L01을 어뎁터 소켓에 장착한 모마
또한 송수신율을 높여주기 위해 필요한 경우 아래와 같은 커패시터(전해콘덴서-약 10uF이상) 를 VCC-GND단자 사이에 연결해주면 도움이 될 수 있다. 커패시터는 전기를 모아서 내보낼 수 있는 충방전 기능이 있어 출력을 보완해주어 전원을 안정시켜줄 수 있으며, 노이즈를 제거를 위해 바이패스용으로 세라믹 콘덴서를 함께 달 수도 있다.
위 모듈은 일반적으로 탁트인 공간에서 100m 정도 송수신이 가능하다. 그런데 그 이상의 통신거리가 필요하다면, 아래와 같은 안테나가 달린 모듈을 사용하면, 이론상 800m까지도 가능하다.
근본적으로 원거리 통신이 필요하다면, 아래 《nRF20L01 PA-LNA 외장 안테나 모듈》을 사용하면 된다.