지난시간에는 IR모듈만 연결하여 리모컨을 눌렀을 때의 데이터를 사람이 알아보기 쉬운 의미있는 값으로 바꾸어 시리얼 모니터로 출력해 보았다. 이번에는 이 값들을 가지고 특정키가 눌러 졌을 때 아두이노 출력 포트를 제어하여 LED를 켜보도록 하자, 물론 간편한 예로 LED를 다루지만 모터제어나 여러가지 제어가 가능하다는 걸 이해하면 좋을 것이다.
※송신부에서는 데이터 값을 가지는 적외선을 약38Khz의 반송(운반) 주파수에 실어서 보내는데(변조), 이는 자연광, 형광등 불빛 등 주변 빛으로 부터 적외선(빛)을 잘 구분하여 수신하기 위함이고 , 송신부에서는 이 반송 주파수를 제거하여(복조) 데이터 값을 얻게 된다.
※ 송신기에서 사용되는 적외선은 가시광선 바로 위의 영역으로 열 발생이 없는 근적외선을 이용한다.
▶ 실습 목표 :
- 리모컨의
숫자 키(1,
2, 3)를
눌렀을 때 ,
각각의
LED가 1초 가량 ON 된후 Off 되도록
프로그래밍 하라.
(아래 Key
Value 값
참조)
▶ 실습 회로도면 : (이미지 클릭하면 확대 가능)
▶ 실습 절차 :
1. 회로
도면을 보면서 부품들을 연결한다.
2. LED의
극성이나, 전원 단자
+, - 가 서로
바뀌지 않도록 주의한다.
3. 여기서는 LED 3개를 사용
하였으나 3색LED 1개를
사용하여도 무방하니 부품이 있을 경우 추가적으로 실험 해보도록 한다.
▶ 프로그램 코드 및 설명 :
/* IR-적외선 리모트 모듈 리모콘‘xinda’ 실습 3 */
/* 숫자 키로 LED 켜기, Rasino.tistory.com, Alex KIM */
#include<IRremote.h>
#define
IR_KEY_1 0xFF6897
#define
IR_KEY_2 0xFF9867
#define
IR_KEY_3 0xFFB04F
intIRPIN = 7;
int LED1
= 8;//흰색 LED
int LED2
= 9;//파란색
LED
int LED3
= 10;//빨간색
LED
IRrecvirDetect(IRPIN); // 'irDetect'라는 이름으로 수신객체 생성
decode_resultsirIn; //값 저장 되는 클래스객체(decode_res...)의 이름(irln)선언
지난시간에는 IR모듈만 연결하여 리모컨을 눌렀을 때의 데이터를 시리얼 모니터로 확인해보았다. 이번 시간에는 이렇게 입력된 데이터를 가지고 쉽게 알아 볼 수 있는 단어로 바꾸어 시리얼 모니터로 표시해보자. (예, LEFT BUTTON, LEFT Click , LEFT Arrow, Right Arrow... )
※송신부에서는 데이터 값을 가지는 적외선을 약38Khz의 반송(운반) 주파수에 실어서 보내는데(변조), 이는 자연광, 형광등 불빛 등 주변 빛으로 부터 적외선(빛)을 잘 구분하여 수신하기 위함이고 , 송신부에서는 이 반송 주파수를 제거하여(복조) 데이터 값을 얻게 된다.
※ 송신기에서 사용되는 적외선은 가시광선 바로 위의 영역으로 열 발생이 없는 근적외선을 이용한다.
▶ 실습 목표 :
1. 리모컨을 눌렀을 때 각 버튼의 Data 값을 시리얼 모니터로 확인해 볼 수 있다.
2. if ... case 구문을 이용하여 리모컨 버튼 각각의 데이터 값을 사람이 판독하기 쉬운 단어로 바꾸어 시리얼 모니터로 출력 할 수 있다.
▶ 실습 회로도면 : (이미지 클릭하면 확대 가능)
▶ 실습 절차 :
1. 위 회로 연결도를 참고하여 부품들을 연결한다
2. 브레드 보드 없이 직접 보드에 연결하여도 무방하다.
3. 수신 모듈의 전원 연결이 뒤바뀌지 않도록 주의한다.
4. 리모컨의 키값은 선수학습편의 프로그램으로 키를 직접눌러 알아낼 수 있으며, 아래 키코드표를 참고하여 프로그램을 작성하면 된다. (가지고 있는 리모콘이 사진상에 있는 'Xinda'리모콘이라면 모두 같은 값을 가질 것이다)
▶ 프로그램 코드 및 설명 :
/* IR-적외선 리모트 모듈 리모콘‘xinda’ 실습 2 */
#include<IRremote.h>
int
IRPIN = 7;
IRrecvirDetect(IRPIN);
// 'irDetect'라는
이름으로 수신객체 생성
decode_resultsirIn; //값
저장 되는 클래스객체(decode_res...)의
이름(irln)선언
일반적으로 TV나 오디오 등 가전기기 들의 리모컨에 적용하는 방식으로 알아두면 여러가지로 유용하게 응용 할 수 있다.
▶ 선수 학습 :
없음.
▶ IR-적외선 리모트 모듈 사양 및 동작 특성
※송신부에서는
데이터 값을 가지는 적외선을 약38Khz의
반송(운반)
주파수에 실어서 보내는데(변조), 이는 자연광, 형광등
불빛 등 주변 빛으로 부터 적외선(빛)을
잘 구분하여 수신하기 위함이고 , 송신부에서는
이 반송 주파수를 제거하여(복조)
데이터 값을 얻게 된다.
※
송신기에서 사용되는 적외선은 가시광선 바로 위의 영역으로 열 발생이 없는
근적외선을 이용한다.
▶ 실습 목표 :
1. 리모컨을 눌렀을 때 각 버튼의 Data 값을 시리얼 모니터로 확인해 볼 수 있다.
2. 이를 통해 일반적으로 사용되는 상용리모컨의 버튼별 data도 알아 낼 수 있다.
▶ 실습 회로도면 : (이미지 클릭하면 확대 가능)
▶ 실습 절차 :
1. 위 회로 연결도를 참고하여 부품들을 연결한다
2. 브레드 보드 없이 직접 보드에 연결하여도 무방하다.
3. 수신 모듈의 전원 연결이 뒤바뀌지 않도록 주의한다.
▶ 실습전 준비사항 :
1. 코드에 사용된 ' IRremote.h ' 라이브러리를 먼저 다운받아 설치하세요. ( 아래 첨부파일을 다운받고, 아두이노 IDE의 메뉴에서 " 스케치 》라이브러리 포함하기 》ZIP라이브러리 추가... " 메뉴를 이용해서 추가해 주면 됩니다.
오늘은 토양의 수분을 감지해서 습도를 알아 낼 수 있는 센서에 다루어 보려 한다. 실제로 화분에 센서를 꽂아 넣고 습도를 측정한 후 미니 물펌프를 이용하면 화분의 수분이 건조해 질 때 마다 물을 공급해 질 수 있는 장치를 간단히 구현 할 수 있다. 이 장치에 대해서는 차기에 구현해서 올려 보도록 하고, 오늘은 습도센서 자체에 대해 알아보려 한다.
▶ 선수 학습 :
없음.
▶ 토양 습도 센서 사양 및 동작 특성
습도 센서 종류가 아래처럼 두 가지 모델이 있는데, 별다른 기능의 차이는 없으며, 핀 배열이 조금 다를 뿐이다.
▶ 실습 목표 :
1. 습도 센서의 작동 원리를 이해 할 수 있다.
2. 센서로부터 받은 데이터 값을 시리얼 모니터로 표시 해볼 수 있다. ( 데이터 처리 가능)
▶ 실습 회로도면 : (이미지 클릭하면 확대 가능)
▶ 실습 절차 :
1. 위 회로 연결도를 참고하여 부품들을 연결한다
2. 센서에다 이컵 혹은 티슈에 물을 적셔서 센서 습도를 조절하여 테스트 한다.
3. 센서의 출력 단자 A0로 부터의 출력값을 아두이노의 A0포트로 입력 받아 시리얼 모니터를 통해 값의 변화를 확인 해 본다.
▶ 프로그램 코드 및 설명 :
/* 토양 습도 센서( Ground Humidity) 실험 */
#define A0Pin 0
int sensorVal = 0;
void setup( ) {
Serial.begin(9600);
}
void loop() {
sensorVal = analogRead(A0Pin); // 토양센서 센서값 읽어 저장
delay(1000);
Serial.print("Asensor = ");
Serial.println(sensorVal); // 0(습함) ~ 1023(건조)값 출력
오늘은 Heltec 의 터치( Touch) LED 센서를 다루어 보고자 한다. 지난시간 터치 센서인 TTP223B를 다루어 보았는데, 이것과의 차이점은 터치 하였을 때 터치판 자체가 LED 불 빛을 내준다는 것이다. 미관적으로 좋고, 제품인테리어를 고려한 부품으로 사용해도 좋을 것이다.
▶ 선수 학습 :
없음.
▶ IR 센서 사양 및 동작 특성
▶ 실습 목표 :
1. 터치 LED 센서의 기본 작동 방식에 대해 이해하고 스위치 기능으로 사용 할 수 있다.
2. 터치 되었을 때 센서의 출력값을 LED 혹은 멀티테스터 등으로 확인 할 수 있다.
▶ 실습 회로도면 : (이미지 클릭하면 확대 가능)
▶ 실습 절차 :
1. 위 회로 연결도를 참고하여 부품들을 연결한다
2. 터치 LED 센서만 연결하여 터치 되었을 때, 센서의 출력 값을 멀티 테스터기로 확인 해본다. .
3. LED를 별도로 넣어 LED센서가 터치되었을 때 출력을 LED로 확인 해본다. (센서의 출력 값 3.3v 를 이용한 LED 점등)
지난 시간에 이어 터치( Touch) 센서인 TTP223B를 다루어 보려고 한다. 이 터치 모듈은 정전식(사람의 몸에서 발생하는 작은 전기를 이용) 으로서 , 터치 되었을 때 칩 LED가 켜져 터치 되었다는 것을 알려주는 등 아주 사용하기 편하고 쉽다. 이번에는 LED를 13번포트에 직결하고 시리얼 플로터를 통해 터치가 되는지를 간단히 실험해보려 한다.
이와 같은 센싱 역할을 하는 센서가 바로 아래 소개 되는 TCRT5000센서이며 이를 사용하기 편하게 모듈화 한 것이다.
▶ 실습에 사용되는 부품 스팩 ( TCRT5000)
TCRT 5000은 적외선 방식이어서 적외선 센서로 불리지만, 가깝고 짧은 거리에 사용되기 때문에 근접센서로도 불린다.
※ TCRT 5000 모듈의 상세한 사용 설명은 선수학습 '2.번'을 참고
▶ 실습에 사용되는 부품 스팩 ( L298N )
※ 모터 모듈의 상세한 사용 설명은 선수학습 '3.번'을 참고
▶ 실습 목표 :
1. L298N 모듈에 대해 이해하고 모터를 연결하여 사용하는 방법에 대해 익힌다.
2. 적외선 센서(TCRT5000)의 작동방식과 활용하는 법을 익힐 수 있다.
4. 검은색 라인위를 따라 이동하는 라인트레이서 로봇을 구현할 수 있다.
※ 전원 공급은 건전지를 사용할 수도 있지만 , 요즘 많이 보유하고 있는 휴대폰보조베터리를 사용해도 된다. 소형 보조 베터리 사용시 장점은, 건전지보다 장시간 플레이가 가능하며, 언제든 손쉽게 재충전이 가능하여 건전지 교체비용을 줄일 수 있다.
▶ 실습 회로도면 1 (기본회로):
(이미지 클릭하면 확대 가능)
※ 실습회로 도면 1에 보면, 9V 건전지는 아두이노쪽에 전원공급용으로 쓰였구요. L298N모듈에 보면, +5V~(모터, 별도전원) 이라고 되어 있는 부분에는 5V이상 되는 전원을 따로 넣어(연결) 주라는 의미에요. 그래서, 건전지를 두 개(가지) 사용해야 모터가 잘 돌아갑니다.
▶ 실습 회로도면 2 (확장회로):
(이미지 클릭하면 확대 가능)
※ 기본 회로로 동작이 확인 되면 위 그림 처럼 마치 자동차의 헤드램프 처럼 라이트가 들어오도록 LED와 저항을 추가 할 수 있으며, RC카의 전원을 켜고 끄기 쉽도록 슬라이드 스위치를 달아 놓았다. (토글 스위치를 사용하여도 무방)
▶ 회로 연결 쉽게 따라하기 (영상) :
(영상을 확대해서 플레이해서 보세요)
▶ 실습 절차 :
1. 위 회로 연결도를 참고하여 부품들을 연결한다
2. DC 모터의 연결선 방향은 우선 연결 후 프로그램으로 작동시켜보고 방향이 반대가 될 경우 다시 바꾸어 연결하면 된다.
3. 만약 가지고 있는 모터의 용량이 비교적 클 경우 아두이노 전원만으로는 동작이 어려울 수 있으니 회로도에서 처럼 별도 전원을 인가해주면 동작이 잘 될 것이다. (※ 모터 관련 회로에서 대부분의 동작 문제는 모터에 공급되는 전력이 충분치 않아 발생한다)
5. 전원 하나로 아두이노와DC모터를 포함한 L298모듈 둘 다를 돌리기에는 한계가 있다. 따라서 아두이노와DC모터 모듈 전원을 각각 공급해주어야 하며, 이때 그라운드(GND)는공통으로 연결해주면 된다. (속도가 빠르지는 않지만 휴대폰 보조베터리를 연결하면 하나의 전원으로 구동이 가능하다)
6. 모터 모듈 전원은 최소 5V이상, 모터용량에 따라 넣어 주면 되는데,모터 구동에는 전압보다 전류가 중요한 역할을 하게 된다. 실험을 해보면, 모터모듈 전원으로 9V베터리를 연결 할 때 보다, 1.5V X 4개 (6V)를 연결할 때가 훨씬 잘 동작될 것이다.(4개의 건전지에서 전류가 충분히 공급 되기 때문)
7. TCRT5000 센서 동작에 문제가 있다면, 센서에 달려 있는 가변저항을 소형드라이버 등으로 돌려서 측정가능한 거리값을 조절 해보기 바란다.
8. '라인'은 방바닥에 두툼한 검정색 혹은 짙은색 (종이)테이프 등으로 모양을 만들어도 잘 작동한다.
▶ 프로그램 코드 및 설명 :
/* 라인트레이서(Line Tracer) 프로그램 */ /* by RASIno , http://rasino.tistory.com */
if (!digitalRead(leftLineSensor) && !digitalRead(rightLineSensor)) {
forward();
}
// 만약 왼쪽 센서만 ‘선감지(반사신호X)’ 경우 : 좌회전
else if (!digitalRead(leftLineSensor) && digitalRead(rightLineSensor)) {
left();
}
// 만약 오른쪽 센서만 ‘선감지(반사신호X)’ 경우 : 우회전
else if (digitalRead(leftLineSensor) && !digitalRead(rightLineSensor)) {
right();
}
// 만약 양쪽 센서 모두 ‘선감지(반사신호X)’ 경우 : 정지
else if (digitalRead(leftLineSensor) && digitalRead(rightLineSensor)) {
stop();
}
}
◈ 모터 A, B가 동시에 시계방향으로 돌면 전진, 반시계 방향이면 후진이고, 한 쪽바퀴만 돌리거나 두 개의 바퀴를 서로 반대로 돌리면 좌회전 혹은 우회전이 된다.
이를 함수 형태로 만들고 메인 루프에서 적절히 함수들을 호출해서 사용하도록 하였다. 라인트레이서의 동작을 좀더 다양하게 꾸밀 수 있는데, 바닥의 라인에 따라 되돌아 나오기 등등 여러 형태로 프로그래밍 해 볼 수 있다.
▶ 실행영상 :
(전체화면 보기로 보세요)
▶ 아두이노 파일(다운) :
▶ 동작이 안 될 때 :
아래 사항을 하나씩 살펴보세요. (위 글 내용에도 강조했지만 다시 정리해드리면)
1. 회로 연결을 꼼꼼하게 한번더 살펴 보세요. 분명 회로도 보고 하셔도 어디 한 두 군데 잘못연결되면 동작되지 않습니다.
2. 모터가 들어가는 회로에서 모터 동작이 이상하거나 잘 안되는 원인의 대부분은 전력부족이에요. 전력 중에서도 전류가 충분하게 공급되어야 하죠. (전압보다 전류가 더 중요해요)
실습회로 도면 1에 보면, 9V 건전지는 아두이노쪽에 전원공급용으로 쓰였구요. L298N모듈에 보면, +5V~(모터, 별도전원) 이라고 되어 있는 부분에는 5V이상 되는 전원을 따로 넣어(연결) 주라는 의미에요. 그래서, 건전지를 두 개(가지) 사용해야 아마 제대로 돌아갈 거예요.
건전지 하나로는 보통 겨우 겨우 돌아가거나 제대로 안 돌아 갈 수 있어요.
그리고, 9V 건전지는 전압은 높아보이지만 전류가 약한 타입이라서 아두이노 본체 전원으로는 좋은데, 모터쪽 전원으로는 부적합해요. 그래서 모터쪽 전원으로는 AA(1.5V)건전지 4개를 직렬연결해서 6V정도로 만들어 공급해주면 좋구요, 아니면, 18650(3.7V) 두 개를 직렬(7.4V) 연결한 걸 공급해주면 됩니다. 얘네들은 전류가 쎈 건전지라서 모터가 잘 돌아가요.
그리고, 스위치를 추가한 회로 도면 2번(확장회로)에도 1번과 같이 모터쪽 전원과 따로 분리해서 전원을 이중으로 넣어주면 됩니다.