질문게시판 > 아두이노 모스부호 수신 질문

TODAY1,386 TOTAL1,177,478
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 아두이노 모스부호 수신 질문

페이지 정보

작성자 master 작성일2018-11-05 10:00 조회1,337회 댓글1건

본문

	

아두이노를 공부하고 있는 학생입니다. 모스부호에 대하여 공부하던 중에 시리얼 모니터에 모스부호를 입력하고 그에 해당하는 모스 부호를 led로 나타내는 코딩은 많이 있는데 그 반대로 모스부호에 해당하는 led 빛을 받아서 그에 해당하는 단어를 시리얼 모니터에 표시해주는 코딩법은 찾기가 어렵더군요.

그래서 제가 직접 해볼려다가 너무 어려워서 포기했습니다. 능력자 분들 이거 코딩 어떻게 하는지 알려주세요 ㅠㅠ(기왕이면 코딩 하신것 좀 올려주시면 감사하겠습니다.)

//

모스는 군대에서나 사용하는 것이고
휴대폰의 발전으로 아마추어 무전기조차 사양길인 상태라서 모스는 관심조차 없습니다.
따라서 모스 입력장치는 예제로 만든 사람이 거의 없을겁니다.

또한가지 이유는
시간오차입니다.
아두이노로 모스 출력은 1ms 오차도 없이 정확하게 출력할 수 있지만
입력장치는 사람의 수 신호를 받을 수 있어야합니다.
사람마다 기준 시간이 모두 다른데다가
신호 자체에 엄청난 오차를 가지고 있다는 것이죠

첨부 이미지

HIGH 신호는 두가지 길이를 가지고 있습니다.
LOW 신호는 모두 동일하고 짧은 HIGH 신호의 길이와 같습니다.
LOW 신호를 입력 받아서 기준시간을 정하고, 앞에 받은 HIGH 신호의 장/단/을 판별하면 됩니다.
매번 LOW 신호를 받을 때마다 기준시간을 갱신해야합니다.

마지막HIGH 신호를 판별하는 알고리즘은
LOW 신호가 긴 HIGH 신호이상의 시간이면 통신 종료로 판단해서 이전에 받은 LOW 기준값으로 장단을 구분하면 됩니다.

수신호인 경우 오차가 굉장히 크므로 아두이노로 판단하기 애매할겁니다.
수신호를 제외하고 
아두이노끼리 모스를 주고받는 경우의 처리를 해보세요

//
정리하면
1. HIGH 신호로 시작하고, HIGH 신호로 끝난다.
2. 매 HIGH 신호 후에는 LOW 신호가 뒤따른다.(한 세트처럼)
3. 마지막 HIGH 신호 후에는 LOW 신호가 없다. (이전에 받은 LOW 신호로 마지막 HIGH를 처리)

이런 알고리즘으로 만들어보세요

시간을 측정하는 것은 millis 함수를 사용하면 됩니다.


  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 1

조회수 1,337

sapi님의 댓글

sapi 작성일

늦었지만 일단 답변을 달아놓을게요..

https://github.com/phs1234/arduino_mos_translator

옛날에 제가 만든 프로젝트인데 지금 제가 봐도 코드가 더럽네요..!
코코아팹(https://kocoafab.cc/tutorial/view/69)에서 만든 모스부호 번역기를 보고 코드를 조금 고쳐서 모스부호역번역기까지 만들었습니다.

아래 있는 글은 제가 보고서를 쓸 때 쓴 글인데 위에서 말한 시간오차와 규칙에 대해서 해답을 드릴 수 있을 것 같습니다. 사진을 붙여드리고 싶은데 첨부가 안되네요ㅠㅠ

===============================================

 역변환기의 조도센서가 주변의 광원과 그림자에 영향을 받아 통신할 때마다 번역기 LED의 점멸과 상관없이 조도센서의 값이 바뀌어서 주변의 광원을 모두 차단하여 LED의 영향만을 고려할 수 있었습니다.

 번역기의 LED와 역번역기의 조도센서 사이와의 거리, LED의 밝기 같은 여러 변수에 의해 조도센서의 인식 값이 통신할 때마다 달랐습니다. 본격적으로 통신을 하기에 앞서 LED가 켜졌을 때와 꺼졌을 때의 조도센서의 값을 구해 평균값을 구한 뒤, 통신 시 조도센서 값이 평균값보다 높다면 LED가 켜진 것으로, 낮다면 꺼진 것으로 인식하도록 했습니다.

 모스부호 빛 신호를 주고받기 위해서는 일종의 규칙이 필요했습니다. 점과 선은 LED를 0.2초 키고 점과 점, 점과 선, 선과 선 사이는 0.2초, 문자와 문자 사이는 0.8초 꺼서 표현하기로 규칙을 정하였습니다. 이에 맞춰 번역기에서 모스부호를 LED로 표현하고 역번역기에서는 LED의 빛 신호를 다시 모스부호로 복원합니다.

 시리얼 창에 “hello”를 입력한 결과입니다. 시리얼 창으로 받은 “hello” 문자열의 ‘h’ 문자에 맞는 모스부호 문자열(....)을 가져옵니다. 모스부호 문자열을 쪼개어 첫 번째 문자(.)를 LED를 킨 상태로 0.2초를 유지해 표현합니다. 다시 끈 상태를 0.2초 유지해 문자의 표현이 아직 끝나지 않았다는 것을 나타냅니다.
 이 과정을 문자 ‘h’를 표현할 때까지 반복한 뒤, 끈 상태를 0.8초 유지함으로써 문자의 표현이 끝났다는 것을 나타냅니다. 다시 이런 과정을 반복함으로서 남은 문자들을 모두 표현합니다.
 
 무한루프문 안에 현재루프와 이전루프 LED의 점멸 상태를 검사해서 LED의 점멸 순간을 인식했습니다. 빛 신호의 점멸상태가 바뀔 때까지 루프사이의 시간간격을 모두 더해 빛 신호사이의 간격을 구했습니다. 하지만 미세한 간격의 차이가 발생하여 필요한 간격들(0.2초, 0.8초등...)과 빛 신호의 간격을 비교해 가장 가까운 간격을 반환하여 그 차이를 보정하는 함수를 만들었습니다. LED가 켜진 간격이 만약 0.2초라면 ‘.’을, 0.6초라면 ‘-’을 string 변수에 더하고 만약 꺼진 간격이 0.8초라면 string 변수의 모스부호에 맞는 영어문자를 구해 출력한 뒤, 그 영어문자를 stringSum 변수에 더하고 1.2초라면 stringSum 함수를 출력해 완성된 문자열을 보여줍니다.

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 1960
공지 사이트 이용 안내댓글[12] master 17-10-29 12051
공지 [무료 공개] 소스코드 하이라이트 v2.0 beta [2013.02.07]댓글[1] 이미지첨부파일 master 18-01-23 4559
질문 메가로 진행중인데 질문드려요,,댓글[1] dongeun9 20-07-31 28
질문 아두이노 우노 -> 메가댓글[2] dongeun9 20-07-30 43
질문 아두이노 우노+DC모터 제어 질문드립니다.댓글[1] 빈군 20-07-30 35
질문 아두이노어플 통신 질문드립니다댓글[1] dongeun9 20-07-29 31
질문 모터를 작동시키기만 하면, 외부인터럽트에서 이상이 발생합니다.댓글[1] 꾸람이 20-07-29 35
질문 질문 드립니다.댓글[1] 알려주세요제발ㅠㅠ 20-07-29 33
질문 질문드립니다 수파도프 20-07-28 33
답변 답변글 답변 : 질문드립니다 master 20-07-28 37
질문 아두이노 우노 -> 메가 질문드립니다댓글[2] dongeun9 20-07-28 36
질문 ATmega와 안드로이드 블루투스 연결 질문입니다. 구래몬 20-07-28 32
답변 답변글 답변 : ATmega와 안드로이드 블루투스 연결 질문입니다.댓글[1] master 20-07-28 32
질문 아두이노 RC카 양쪽 모터속도제어 질문입니다.댓글[3] 첨부파일 MaTD 20-07-27 47
질문 통신프로토콜 ? 세상통합 20-07-27 32
질문 타이머 인터럽트를 이용한 스텝모터 제어 질문입니다.댓글[6] 꾸람이 20-07-26 66
질문 매우 초보적인 아두이노 코딩질문입니다.댓글[1] 이미지첨부파일 화이팅dP 20-07-23 70
질문 아두이노 우노 푸쉬 버튼 서보모터 작동 관련 초보 질문입니다.댓글[1] 이미지 구름신 20-07-23 46
질문 적외선 거리센서 탐지범위 설정하는 방법 알려주시면 감사하겠습니다. 큐큐큐큨 20-07-22 43
답변 답변글 답변 : 적외선 거리센서 탐지범위 설정하는 방법 알려주시면 감사하겠습니다. master 20-07-22 55
질문 코딩 질문.. 전자학습자 20-07-22 58
답변 답변글 답변 : 코딩 질문..댓글[4] master 20-07-22 74
질문 소스 코드 질문좀 드리겠습니다..! 코딩공부하자 20-07-21 62
답변 답변글 답변 : 소스 코드 질문좀 드리겠습니다..! master 20-07-21 46
답변 답변글 답변 : 답변 : 소스 코드 질문좀 드리겠습니다..!댓글[4] 코딩공부하자 20-07-22 72
질문 아두이노 스텝모터 도와주세요~ 랩돌이 20-07-20 70
답변 답변글 답변 : 아두이노 스텝모터 도와주세요~댓글[1] master 20-07-20 85
질문 희미한 LED 문제댓글[6] 전자학습자 20-07-20 119
질문 소스 코딩 문제점을 찾고싶어요댓글[1] 첨부파일 bas213 20-07-17 107
게시물 검색

2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기