[Light Drive 4/4] 적외선 무선제어 로봇완성 그리고 소프트웨어 프로그래밍

2013.01.14 10:57




현재 군 복무중인 상태입니다.



다시 Light Drive 들고 돌아왔습니다.^


저 멍청한 기계에게 동작을 심어주고있습니다. 윙.... 진행중 .....90%

소스코드는 CodeVision으로 원래 코딩했으나 나중에 AVR Studio도 작업해서 두었고



리모컨은 별도의 ISP커넥터가 없어서 저렇게 만들어둔 AVR 연습용 모듈에 Tiny2313을 끼워서 프로그래밍 했습니다.


동작 알고리즘


알고리즘이라고 하는게 맞을까요?? ㅎ

동작 프로그래밍은 먼저 송신부인 리모컨과 수신부인 로봇은 둘이 8Mhz로 발생시킨 타이머/카운터 0번 인터럽트로 보내는 신호, 받는 신호를 동일한 시간으로 분석합니다.

리모컨측은 임의의 코드를 인터럽트 변수 Count값 50마다 1인경우 37Khz를 발생, 0인 경우에는 그냥 Count값 50을 지나도록해서 8비트로 40, 41, 42, 43, 44, 45를 송신하고 수신측은 Count값 50마다 들어오는 비트순으로 분석합니다.


송신부에서 37Khz신호가 나오면 KSM603 적외선 수신모듈을 사용한 로봇측에서는 

KSM603모듈이 Active Low 즉 작동하면 5V에서 0V로 떨어지는 동작방식을 가지고 있어서

모듈을 연결한 PIND의 0번핀 Studio에서는 PIND&0x01, CodeVision에서는 PIND.0

의 값이 0이 들어옵니다.

따라서 if 조건문을 사용해서 PIND의 값이 == 0 이면 Data 값과 비트연산을 해서 최종 수신데이터

를 만들어내는 방법을 사용했습니다.

소스코드 공개 처리해 두었습니다.^



 CodeVision 용 소스코드 - 구글 드라이브로 연결됩니다.


 AVR Studio 용 소스코드 - 구글 드라이브로 연결됩니다.




동작영상




형광등 바로 아래서 찍었더니 낮은 수신율을 보여주네요... 외부에서나 현광등이 없을 때는 약 1.5M 정도의 수신율을 보여주었습니다.

적외선이라 어쩔수 없나... 아무튼 저의 첫작을 완성했습니다. ㅎ

BinGoon AVR/AVR 작품, Project , , , ,

  1. 이전 댓글 더보기
  2. Blog Icon
    Matthys

    공부하는데 정말 많은 도움이 되고 있습니다.
    근데 적외선 송신수 부분에서는 카운트가 45이고
    수신 부분에서는 카운트가 50인데 상관 없나요?
    그리고 송신 코드는 f1 f1 f0 ..... 이런식으로 만드 셨는데 제일 앞의 f1 두개는 리드코드를
    표현 하신건가요 없으면 안되나요?

  3. AVR Studio에서 별도의 딜레이가 생겨서 시간차이가 맞지 않아 송신은 45 수신은 50으로 조종한 상태입니다.
    그리고 송신코드 앞의 F_1(); F_1();은 시간을 동기시키기 위해서 만들었는데 1개만 사용하셔도 됩니다. 그럼 좋은 작품 만드셔요.^^
    답글은 늦게 달아서 죄송합니다.
    개인 연수 일정이 잡혀 있어서 늦게 댓글을 달게 되었습니다.

  4. Blog Icon
    IIAWE

    많이 배워 갑니다^^
    한가지 궁금한 점이 있는데 리모콘 수신에서
    time 변수의 역할이 무엇인지 설명좀 해주실 수 있을까요?

  5. 소스코드에 주석을 안달아 놨네요.. ^^;
    time 변수는 묶음의 리모컨송신코드를 반복 재송신하기 위한 시간 간격을 만들기 위해 만들어놓은 변수 입니다.
    약 100mS 정도로 만들어둔것으로 기억하네요. ㅎㅎ

  6. Blog Icon
    Lisa1004

    안녕하세요
    모터는 무엇을 썻는지 궁금합닌다
    모터 스펙에 대해 알려주실수 있나요
    토크랑 rpm . 전압 등등
    모터를 구입하려고 하는데
    작동이 안될까봐 걱정되서
    조언을 구합니다 ^^;

  7. 안녕하세요.^ 질문주셔서 검색해 보았는데요.
    모터는 일반적으로 사용하는 기어드 DC모터들 입니다. 입력전압이 3~6V 사이인 것, RPM은 로보로보사의 경량형 DC모터 500~600RPM급 정도로 테스트 후 저렴한 DC모터로 변경한것이라 모터 구매하실 때 참고 정보로 이용하시면 되실 것 같습니다.^ 모터가 토크가 너무 약하지만 않고, RPM 적정수준, 입력전압 3~6V사이만 충족되시면 될 것 같습니다.^

  8. Blog Icon
    쌩초보

    소스코드 간단하게 주석좀 달아주실수있나요?
    해석하면서 128로 핀변경을 할려는데
    기초가 탄탄하지못해서 이해가안되네요...

  9. 당장은 힘들것 같습니다. 주말에 변경할 수 있도록 노력해보겠습니다. 다만 거의 11월 까지는 남은 시험도 있고, 정신이 조금 없어서 작업할 시간이 없기 때문에 큰 기대는 하지 말아주세요. 실망을 드리고 싶지 않습니다. :<

  10. Blog Icon
    mk8964

    코드비젼에 소스넣으려고 하니에러가 뜨네요

    communicatin error, please check following
    -the programmer's supply is on
    -the programmer type is correctly set in the settings|programmer menu
    -the printer port addres is correctly set in the settings|programmer menu
    -the AVR chip is not damaged.
    포트설정 하고 atting2313,8메가 설정 했는데 왜이러죠
    알려주세요 ㅎㅎ

  11. 안녕하세요^
    해당에러는 타겟보드와 통신이 되지 않아 발생하는 에러같습니다. AVR이 파손되었거나, Reset핀이 제대로 연결되어있지 않은 경우 , STK500 ISP의 경우 SCK주파수가 클럭주파수의 1/4이 아닐때 등 다양한 원인에 의해 발생하는 에러이니 점검이 필요해 보입니다.^

  12. Blog Icon
    qkrqkrxodid

    안녕하세요
    이런것에 관심이 많은 학생입니다.
    프로그램을 넣으려고 하니WARNING: FLASH byte address 0x0000 is 0xFF (should be 0x12).. FAILED!라는 에러가 떠서 고민입니다.
    퓨즈는 체크 아무것도 안하고 크리스탈 8.0 14ck 65ms로 설정 하였습니다.
    주파수도 맟추었고요
    그리고 verrify device afterr programming 을 체크 하면 에러가 안뜹니다.
    어떻게 하면 될 까요???
    감사합니다

  13. Blog Icon
    qkrqkrxodid

    감사 합니다. 코드비전이 아니라 avr studio4.19버전과
    윈7이여서 툴체인 같이 쓰고 있습니다.
    그리고 attiny는 글에 올라온 것과 같은거 쓰고 있고요
    다시한번 시도 해 보겠습니다.
    감사합니다.

  14. Blog Icon
    qkrqkrxodid

    혹시 퓨즈비트는 어떻게 설정하셨나요??
    그것때문에 문제가 된것같기도 하네요

  15. 안녕하세요^
    댓글단지 2틀이나 지나버렸네요.
    먼저 사용하신 컴파일러가 CodeVisionAVR 이신가요? 그리고 AVR은 2Mbyte이상의 MCU를 사용하셨는지 확인이 필요합니다. 퓨즈비트가 읽히는 것을 보면 사용하시는 MCU가 파손된것 같지는 않아 보이는데요. CodeVisionAVR에서 Device Remove를 한번 하시고 다시 재 프로그래밍 해보시기 바랍니다.^
    그럼 도움이 되시기를 바라겠습니다.

  16. 안녕하세요.^
    퓨즈비트 설정방법은 여기에 있구요 http://binworld.kr/47
    퓨즈비트 옵션중에 주의라고 표시되어있는 것만 건드리지 않았다면, ISP로 다운로드가 안되는 문제가 발생하지는 않습니다. 그리고 혹시 STK500 AVRISP를 사용중이시라면 사용중이신 AVR모듈의 클럭이 ISP SCK주파수의 1/4안의 값이 여야합니다. 그 이상으로 높은 경우에 프로그래밍이 되지 않을 수 있답니다.^

  17. Blog Icon
    Mr도리

    오랜만에 방문하네요~BinGoon님.
    IR-RED적외선을 쓰셨는데 이때 NEC 코드를 분석하신건가요?

  18. 안녕하세요^
    직장을 구하게 되서 블로그 운영에 미흡한 점이 있는것 먼저 죄송스럽습니다. IR 제어 로봇에 사용된 송신코드와 수신코드는 알려진 가장 간단한 방식으로 송수신되었고 NEC코드는 아니랍니다. 그러나 NEC코드도 결국 송신측에서 일정시간동안 IR LED를 켰다 껐다 하므로서 정보를 표시하므로 코드 시작부분이 인식되고 순차적으로 비트를 수신하시면 데이터를 생성하실 수 있습니다.

    Ps. 오랜만에 찾아주셔서 감사드립니다^^ 조금 어투가 공적으로 변했네요 ㅎ

  19. Blog Icon
    김수민

    안녕하세요 제가 고등학교 졸업 작품으로 블루투스를 이용하여 조작하고, 자동주차시스템을 넣은 로봇을 만들예정인데요 여기서 저희에 걱정은 많은데 여기에 있는 로봇을 tiny2313말고 atmega128를 이용해서 만든다면 포트를 어디에 써야할까요?

  20. 안녕하세요.^
    먼저 블루투스 제어 핀에 대해서는 Atmega128의 데이터시트를 보시면 각 포트마다 괄호로 기능이 적혀 있는데요. RX,와 TX가 적혀있는 핀에 블루투스 핀을 연결 처리하여 주시면 되고, 모터에 대해서는 포트 연결이 자율입니다. 혹시 하드웨어 PWM기능을 넣어 속도를 제어하고 싶다면 OC0A, OC0B 기능을 가진 핀에 각각 (DC모터이기 때문에 제어선이 2선)인데 한핀씩 연결하고, 남은 하나는 다른핀에 연결하여 프로그래밍 구동하시면 되겠습니다.^^

    글로 모든걸 설명하기는 어렵네요.. 참고로 이용하시고, 더 필요한 정보가 있다면 메일보내주시기 바랍니다.^^

  21. Blog Icon
    랄라

    저도 atmega128로 할려하는데요
    질문이잇어요 ㅠㅠㅠ
    dbswjd-234@hanmil.net
    연락주세요!!!

  22. 코드비전 소스를 받을려고하는데 홈페이지 엑세스가 안되서 그러는데 200rkwl@naver.com 로 소스파일좀 보내주시수 있나요?

  23. 안녕하세요.^
    현재 소스코드는 구글 드라이브에 링크가 있으면 액세스가 가능하도록 되어있습니다. 본문에서 다운로드 모양 아이콘을 눌러주시면 해당 페이지로 이동되며, 좌측상단의 파일네임이 적힌곳의 파일을 누르시고, 다운로드를 눌러주시면 됩니다.

    현재 데이터 통화료가 부족해서 따로 전송은 못드리겠네요, 혹시 계속 다운로드가 안된다면 따로 주말에 PC로 전송하여 드리도록 하겠습니다. 그럼 도움 되셨기를 바랍니다.^^

  24. Blog Icon
    초심자

    안녕하세요
    게시된 글을 보고 만들다 보니 궁금한 점이 있어서 이렇게 글을 남깁니다.
    송신부, 수신부가 현재 ATtniy2313 8mHz인데 만약 수신부를 ATmega128 16mHz로 변경하려고한다면 어떻게 해야 하나요?
    현재 수신부만 메가128로 변경해서 해보고 있는데 원하는 출력이 나오지 않아 고민하고 있습니다.

  25. 안녕하세요.^
    바로 질문 답변 드리겠습니다. 먼저, Tiny2313에서 Mega128로 변경하신 부분에 대해서는 기본 IO는 PORTx레지스터 DDRx레지스터로 동일하지만, 타이머,카운터 컨트롤 레지스터 같은 경우에는 Attiny2313의 경우 TCCR0A, TCCR0B로 나눠져있고, Atmega128같은 경우에는 TCCR0 레지스터 하나로 모든제어를 하도록 되어있습니다. 따라서 이 부분은 데이터 시트를 보고, CS00 비트를 1로 셋팅하여 주시면 되겠습니다.

    다음 8Mhz에서 16Mhz로 클럭을 변경하였을 경우에는 수신측에서 타이머 카운터의 숫자를 세는 속도가 송신측의 2배가 되었으므로, 타이머 카운터의 count 변수값을 2배로 올려주시고, 분석하는 측에서도 2배정도 상승시켜주어야 수신 동작이 될 것으로 예상합니다. 저는 송신 4Mhz 수신 8Mhz 테스트 조건에서는 동작되는 것을 확인 했습니다만, 16Mhz 조건으로는 테스트 해보지 않았으므로 동작을 보장할 수 없습니다. 실험이 필요하여 보입니다.^^

    그럼 장비가 없어 테스트까지 해드릴수는 없지만, 필요하신 정보라도 얻어가시기를 바라겠습니다.^^

  26. Blog Icon

    비밀댓글입니다

  27. Blog Icon

    비밀댓글입니다

  28. 안녕하세요. 답변이 매우 늦어서 죄송합니다.
    1. NEC코드를 사용하지 않았고 자체 코드를 사용했습니다.
    2. 송신부 수신부 모두 TCNT0이 256번 카운팅 된 주기 0.000032에서 50회 더 추가로 세어집니다.
    3. 송신부에서 2300카운팅 값은 스위치가 계속 눌러져 있는 상태라면 데이터를 2300카운팅마다 계속해서 전송하기 위한 반복송출을 위한 count변수입니다.
    4. 아 그리고 Studio4 코드에서는 45 count를 사용할텐데요. 이게 코드 최적화 문제인지 싱크가 안맞아서 낮추어 놓은것입니다. 참고하시고 사용하시길 바랍니다.

    5. https://drive.google.com/file/d/0B3TUepjmKjiXWkFzeTRaYjkxNVE/edit?usp=sharing 주석을 간단하게 달아둔 것이 있는데 도움이 되시길 바랍니다.
    혹시 더 필요하신 사항 있으면 또 연락주세요.

  29. Blog Icon

    하나 여쭤볼께 있는데 작성자님 대로 회로를 작성해서 만들고 프로그래밍을 하는데 계속 에러가 뜨네요. AVRISP 엔터링 모드인가 그게 뜨는데 설정에서 따로 설정해줘야되는게 있나요? tiny2313 8mhz 설정을 해줬는데 다른 설정이 필요한건지 아니면 그냥 그대로 해도 괜찮은건가요?

  30. 안녕하세요.
    답변을 늦게 달게 되어서 죄송합니다.
    질문주신 AVRISP 엔터링 모드~~ 뜨는것은 AVR이 리셋된다음에 ISP명령어를 주게되면 AVR이 프로그래밍 모드로 들어가게 되어있는데, 하드웨어 회로에 tiny2313의 RESET핀에 연결된 패턴이나 부품에 이상이 있을 경우에 리셋이 이루어 지지 않아서 프로그래밍이 되지 않는 경우 입니다. 이 부분 참고하셔서 해결할수 있기를 바랍니다.

    혹시 이 문제가 아닐수 있으니, 피드백 주시면 감사하겠습니다. 그럼 답변이 늦어 죄송하고, 도움되는 답글이 되었기를 바랍니다. 감사합니다.^^

  31. Blog Icon
    sonstar

    우와 정말 대단하시네요....이걸 어떻게 만드셨어요;;
    혹시 COdeVision 소스 부탁좀 드리겠습니다. 이거 보고 공부좀 할께요
    waz6809@naver.com 으로 부탁드리겠습니다^^

  32. 안녕하세요.^^
    감탄 써주셔서 감사드려요. 그정도 까지는 아닙니다. ㅎㅎ, 소스코드는 본문에 다운로드 모양 아이콘을 클릭하시면 다운로드가 가능하니 참고하시기 바랍니다. 혹시나 공개가 안되어있다고 다운로드가 안되는 경우에는 연락주시면 이메일로 보내드릴수 있도록 하겠습니다.^

  33. Blog Icon
    전자과

    저런식으로 0과 1을 분할하면 자잘한 오류도 가끔 발생하지않나요?
    물론 같은 8MHz라서 가능한거 같기는 한데...

  34. 네, 지적주신 사항이 영향이 있을수 있습니다. 저렇게 처리하는게 소프트웨어로 적당히 구현한 UART라서 어느정도 에러율이 있을 수 있지만, 워낙에 반복횟수가 많아서 오류가 발생했더라도 다음 발생하는 코드를 분석해서 정상적으로 구동이 된답니다.^^

    하드웨어 UART도 사용하는 크리스탈 값에 따라서 에러율표가 데이터 시트에 정리되어있는데 8Mhz 사용시 0.2%정도 에러율이 발생하니 참고부탁드립니다.

    혹시 더 지적하실 사항 있으시면 덧글 남겨주시면 감사하겠습니다.^

  35. Blog Icon
    열공!

    안녕하세요 반갑습니다 저는 25세 대학생이구요

    빈군님의 포스팅으로 요새 밤새 공부중입니다

    공부중 궁금한 사항이 생겼어요

    요지는 리모콘 수신부에서 수신시

    if((input=PIND&0x01)==0)
    data=data|0x80;

    크리스탈이 37.5KHz로 동작 하지만 송신부의 하강에지에서

    수신부의 50번째 인터럽트가 발생했을 시에는

    40 41 42 43 44 45 숫자가 인식되지 않게 되므로

    결론적으로 리모콘 수신이 안되는 건가요?

    빈군님 포스팅 보고 공부 열심히 하겠습니다!!


  36. Blog Icon
    SDN

    잘 보고 갑니다. 질문 하나 드려도 될까요??
    로봇쪽에 센서를 일정 각도로 붙입니다. 60도 마다 하나씩 붙입니다
    그리고 리모콘을 쐇을때 쏜방향으로 로봇이 회전하도록 만들려고 하는데
    수신이 겹치지 않고 가능하나요??

  37. Blog Icon
    꿈은현실

    동영상을 보고,신기해서 여쭤보려 합니다.
    실례하지만,저런걸 하려면 무엇을 공부해야 하는가요?
    아예 이바닥을 모르지만,굉장히 호기심이 많다보니,저도 공부해서 저런 자작품을 만들어보고 싶어서요.
    프로그래밍이라면 어떤 언어를. 또 기판디자인이라면 무엇을...등등...
    만들고 싶지만 방법을 몰라서 가능하시다면 공부의 순서?를 알려주시면 큰 도움되겠습니다...

  38. Blog Icon
    적외선 통신

    안녕하세요~ 적외선 리모콘을 제작해 보고 싶어 웹 서핑을
    하다보니 제작과정과 프로그램하시는 것에 대한 내용을 잘 설명해 주셔서
    많은 도움을 받았습니다.
    프로그램도 오픈해 주시는 것 같은데 열어 볼 수 가 없어서요~~
    가능하시면 메일로 부탁드리겠습니다.
    공부하고 싶은게 많은데 아직 초보라 힘드네요~~
    hkpsg99@nate.com
    으로 AVR studio 관련 프로그램 보내 주시면 정말 감사하겠습니다.

  39. Blog Icon
    적외선 통신

    안녕하세요~ 적외선 리모콘을 제작해 보고 싶어 웹 서핑을
    하다보니 제작과정과 프로그램하시는 것에 대한 내용을 잘 설명해 주셔서
    많은 도움을 받았습니다.
    프로그램도 오픈해 주시는 것 같은데 열어 볼 수 가 없어서요~~
    가능하시면 메일로 부탁드리겠습니다.
    공부하고 싶은게 많은데 아직 초보라 힘드네요~~
    hkpsg99@nate.com
    으로 AVR studio 관련 프로그램 보내 주시면 정말 감사하겠습니다.

티스토리 툴바