본문 바로가기

AVR 8BIT/적외선센서를 이용한 문자찍기!

적외선통신을 이용한 문자찍기!!

안녕하세요 숭덕이 박제현입니다. 오랜만에 이렇게 글을 쓰는거 같네요 !!!
음 일요일날은 IR센서를 이용한 통신을 할 건데요 !! 간략하게 설명만 하고 일요일날 자료를 올리겠습니다.
많은 자료조사와 테스트는 해보지 않았으나 리모콘 수신용이면 발광부에 케리어만 실어주게 되면 데이터전송이 가능할거
같아 이렇게 구매를 해서 테스트 해볼 예정입니다. 빨리 테스트 해보고 싶지만 졸리네요 !!!!!!!



수광부(603LM)


발광부(CL-1L5)




                   출처 : http://www.devicemart.co.kr/mart7/mall.php?cat=049001000&query=view&no=6900


                                                                    603LM
                출처 : http://www.devicemart.co.kr/mart7/mall.php?cat=049001000&query=view&no=6899

                                                                  
                                                                        CL-1L5R

ADC 계산
16Mhz / 128 분주 = 125kHz
1 / 125000 = 0.000008 = 8us

채널0 을 가정해서 A/D한다면 최초에 25클럭이 소요되고 그 이후 13클럭이 되므로
( 25 + 13 ) * 8 = 304us

UART 계산

1/9600bps = 1.041666667

start(1bit) + data(8bit) + stop(1bit) = 총 10bit
1.041666667 * 10bit = 0.001041666667

2byte 전송시
0.001041666667 * 2 = 0.0020833333...

답은 : 2.0833333333ms


-----------------------------------------------------------------------------------------------------
자 저는 리모콘형식의 수광부와 발광부를 구매했고 38khz의 주파수로 테스트를 해보겠습니다.

38khz일떄 펄스 1개는 약 26us 나옵니다.

16Mhz / (1+410) = 0.0000256878 = 26us

1 / 0.0000256878 = 38khz 입니다. 계산은 다 나온거 같네요!!!

저도 처음으로 적외선통신을 해보는것이라 방식이 어려운거 같기도 하네요

일단 집에 가서 납땜 후 테스트까지는 몰라도 한번 해보겠습니다.

발광부에 트랜지스터를 사용해야하는데 그렇게 안하고 거리가 가까운곳에서 테스트 예정이기 떄문에

트랜지스터 없이 그냥 직렬로 연결해서 테스트하겠습니다.

일단 CP2102로 USB to Serial로 적외선통신값을 컴퓨터 하이퍼터미널에 찍기 위한 회로도 입니다.




 자 LED는 적외선통신시 CP2102를 통해 키보드로 1번을 눌렀을 시 적외선센서로 통신을 통해 반대편에 있는 LED로 수신을
 표시하기 위한 장치로 회로를 구성하였습니다.


아래 그림은 PB5포트에서 38khz PWM파형이 나오며, TX단자에서 데이터를 싫어주고 발광부로
내보내게 된다.


PB5와 TX단자를 NOR 했습니다. 둘 다 LOW 일때 HIGH가 출력이 되므로 LED에 PW ON이 됩니다.
RS-232 TX 파형은 아래 그림과 같이 LOW일때 데이터출력이 됩니다.




아래 그림은 위에 그림과 같은 건데 PB5와 TX단자를 NOR 했을 2포트의 입력이 LOW일때, 출력은 HIGH가 출력이 됨으로써
LED PW ON 이 됩니다.



수광부 603LM은 38khz의 Frequency를 가지고 있으며, Supply Voltage는 5.5V 이다.
이 단자는 RX에 물려서 TX에 나온 데이터 38khz를 갖는 데이터를 받아 처리한다.




2011년 8월 5일 새벽 12:26분 오늘은 흠냥 부품이 많이 없던 탓인지 휴 잘안되네!!! TX보내기 귀찮아서 while문안에
TX통신함수를 사용하여 1 ~ 4까지 반복문을 돌리고 수광부에서 1,2,3,4를 체크해서 LED 불키는것을 하는데 흠냥..
수광부 이놈의 시키가 왜 반응을 안하지 ㅡㅡ;;; 내일은 필히 2개의 과제를 끝내고 ARM과제를 하겟엉 기다려라...


 




 



603LM은 37.9khz의 주파수만 감지하는것이 아닙니다. 다른 주파수도 감지하지만 37.9khz에 대해서 감도가 제일 크다는것을 의미합니다. 적외선센서를 사용하면 발광부에서 수광부로 데이터를 전송하는데 대기중의 노이즈가 섞여 수신이 될 수도 있습니다. 이러한것을 조금이나마 줄이기 위해 발광부에 특정 주파수를 보내게 됩니다. 이러한 과정을 인코딩이라고 하며 또한 펄스파를 캐리어라고 부른다고 합니다. 저는 37.9khz를 사용했기때문에 1초에 37900번의 일정한 펄스파를 발광부에서 쏘게 됩니다. 
이 센서는 Band Pass Filter로 설계된 센서로 캐리어주파수는 증폭을 하고 그 외에 주파수는 증폭률이 캐리어주파수보다 작게 설정되어 있어 노이즈를 필터링에 용이 합니다.


 


 

 드디어 다했군요!!!! 일찍 퇴근 후에 바람 좀 쐬고 여유롭게 놀다가 10분만에 뚝!!!!!!!쿄쿄쿄 LED 한개가 DIE ^^
CP2102칩을 안가져와서 그냥 TX에 임의에 값을 넣어주고 쏴주었습니다. 지갑으로 가렸을때 LED가 멈추는것을 볼 수있습니다. LED가 멈추면 발광부에 캐리어를 싫어서 보내도 수신부에서 받지를 못하면 쓰레기값이 됩니다. 지갑을 치우는 순간 1초에 LED가 한칸씩 움직입니다.
                  

#include 
#include  

char rx; interrupt [USART0_RXC] void usart0_rx_isr(void)
{    
	rx=UDR0;     
	if(rx=='2')PORTB=2;    
	if(rx=='3')PORTB=4;    
	if(rx=='4')PORTB=8; 
} 

void TX0_CHAR(char Sdata){ while(!(UCSR0A&0x20)); UDR0=Sdata; } 

void main(void)
{    
	UCSR0A=0; UCSR0B=0x98; UCSR0C=6; UBRR0H=416/256; UBRR0L=416&0xFF;  //2400     
	DDRB=0xff; OCR1A=210;    
	TCCR1A=0x40; TCCR1B=9; TCCR1C=0x80;     
	#asm("sei")    
	
	while(1)
		{       
		TX0_CHAR('2');     delay_ms(1000);   
		TX0_CHAR('3');      delay_ms(1000);  
		TX0_CHAR('4');     delay_ms(1000);           
		}
}   
  
                                                  

  • 붕돌이 2011.11.11 11:26

    오~~좋은자료 감사합니다

  • 초보 2012.05.29 14:09

    힐러리 떔에 놀래서 적습니다. 필요한 정보를 얻고 갑니다. 좋은 자료네요

  • 초보2 2012.06.08 22:10

    힐러리 떔에 놀래서 적습니다. 필요한 정보를 얻고 갑니다. 좋은 자료네요

  • 익명 2012.12.07 13:27

    비밀댓글입니다

  • 개발자가 될거라구요. 2012.12.11 10:13

    적외선을 공부하다가 좋은 정보를 찾게 되어 이렇게 글을 남기네요.
    궁금해서 그런데 603LM에서는 Vout 핀을 RX만 물려 사용하신 것 인가요?
    소스를 보면 PWM^=TX(data)의 신호를 IR LED로 보내고 수광부인 603LM 에서는 UART RX만을 이용하여 수신하신 것같은데요. 초반에 ADC계산은 어느 연관성이 있는 지 알고 싶습니다.

    • 숭덕이 2012.12.11 12:53

      잘 기억은 안나지만 603은 수광부로서 받기만 하는것이니 RX핀에 물려 사용했고, IR센서를 이용하여 케리어주파수를 실어 보냈습니다.
      또한 ADC라고 하셨는데 위에 소스를 보면 ADC 소스는 없습니다.

    • 숭덕이 2012.12.11 12:54

      정정하겠씁니다. ADC는 연광성이 없고 공부하다 내용이 들어간거 같습니다.

  • 초보개발자 2013.01.11 09:56

    적외선 공부중입니다. 어제 부품을 받고, 브레드 보드에서 MCU 없이 회로를 구성했습니다. 수광부는 숭덕이님과 같은 603LM이고, 발광부는 SI5312-H 입니다.
    수신 동작 여부를 위해 수광부 vout쪽엣 LED를 달았습니다. 그런데, 전원만 인가하면 수광부쪽에 연결한 LED에 불이 들어옵니다. 혹시 형광등에 반응하는가 싶어서 수광부쪽을 손으로 잡아서 여전히 LED에 불이 들어옵니다.
    어디가 문제일까요? 회로는 MCU를 사용하지 않는 것 말고는 숭덕이님과 비슷합니다.

  • 익명 2014.07.20 01:17

    비밀댓글입니다

  • 공학도 2015.02.11 15:43

    적외선 통신을 UART로 구현하셨는데 일반포트로 통신할 수 있는 방법은 없나요?