라즈베리파이는 다양한 응용이 가능한데, 그 중 아재들의 마음을 흔드는 것은 레트로 게임기이다. 유명한 오픈소스 프로젝트인 레트로파이(retropie)와 리콜박스(recalbox)가 대표적이다. 여기에 시중에서 USB 조이스틱을 붙이면 예전 MSX나 패미컴 게임기, 심지어는 MS-DOS 에뮬 게임기로 바꿀 수 있다.

추억의 게임 Galaga, 라즈베리파이에서 가능하다? / 인터넷 캡춰 발췌

 이 두개의 오픈 프로젝트는 고전게임 에뮬을 탑재할 수 있도록 만들어진 OS이미지를 제공해주는데, 사실은 각 게임의 롬을 복사하는 과정도 어렵다. 그래서 단순 테스트 및 시험용 목적에는 완성된 OS이미지를 구할 수 있다. 여기서는 그 간단한 방법을 알아보자. (여기서는 개인용 시험 정도로 한정하고, 각 롬 이미지의 합법성 여부는 콘텐츠별 개인 판단이 필요하다)

 전체적인 과정은 Win32DiskImager를 통해 microSD에 게임이 탑재된 라즈베리파이용 OS 이미지를 복사해 넣는 것이 기본 작업이다. 대부분 라즈베리파이3 이상을 권고한다. (라즈베리파이 2나 라즈베리파이 zeo 용도 있으나 개인적인 실험에서는 만족스러운 이미지를 구하지 못했다)

 1) microSD 카드는 32G,64G,128G,256G 등으로 구해서 각각 크기에 맞는 레트로 게임 이미지를 구해서 복사해 넣을 수 있는데, 여기서는 32G 메모리를 사용한다. 원하는 이미지 구성에 따라 큰 용량의 microSD카드를 준비한다.

 

 2) 라즈베리파이 microSD 카드의 필수품 Win32DiskImager를 다운받는다 (https://sourceforge.net/projects/win32diskimager/ )

 

 3) 게임 이미지를 구한다. 

  www.arcadepunks.com/retro-pi-downloads-page/ 를 방문하면 torrent link를 구할 수 있다. torrent 다운로드 방법은 별도 검색으로 확인하여 준비한다. (필자는 bitcomet을 다운로드 받아 사용한다)

  해당 페이지의 여기서는 RECALBOX - EMULGA NEXT LEVEL 32GB torrent link를 눌러 torrent download를 실행하고,모두 다운로드 받으면 img파일을 사용할 준비가 끝났다.

 

 4) Win32DiskImager를 통해 microSD카드를 메모리 리더에 넣은 후 해당 드라이브를 지정해 이미지를 복사한다. 대상 드라이브를 잘못 지정하면 엉뚱한 디스크에 덮어 씌울 수 있으므로 매우 조심한다.

 

Device를 적절히 선택한 후 맨 하단 'Write'를 누른다. 수십분이 소요된다.

 

 5) 해당 microSD를 라즈베리파이 3에 꼽아서 부팅하고 쓴다. retropie이미지 기반이면 초기에 입력장치 설정을 요구받는데 키보드나 USB 조이스틱의 버튼을 길게 누르는 형태 등으로 해당 설정이 가능하다. 참고로 게임을 하다 취소는 ESC, Ctrl+Q, 조이스틱은 SELECT + HotKey(조이스틱 설정시 맨 마지막값) 등 다양하게 설정되어 있고 동전을 넣는 행위는 9를 입력하거나 Select를 입력하는 것이 많다. 대략 'A','S'키 위주로 버튼 설정이 되어 있다.

 조이스틱일때는 A,B,X,Y버튼에 값을 할당하여 사용하게 되는 Y버튼 할당값이 Favorite추가를 결정한다. 그리고 조이스틱만으로 제어할때는 게임을 끝내고 다시 게임 선택화면으로 돌아갈때는 SELECT + HotKey(조이스틱 설정시 맨 마지막값)을 누르면 된다.

 이렇게 설정하면 아래 동영상과 같은 화면과 동일하게 부팅되며, 좌우 움직여가며 게임기를 선택해 상세 게임 리스트를 보고, 이후 게임을 즐길 수 있다. 안에는 갤러그, 트윈비, 자낙, 펭귄어드벤쳐 같은 오래전 게임이 있어 게임기 종류 별로 플레이가 가능하다. 이외에 64gb 이미지로는 'Rick Dangerous 64gb Gold'도 추천해본다.

www.youtube.com/watch?v=tRhWzS7IvAw

 

USB조이스틱은 메뉴에서 컨트롤러 설정에서 변경 가능하며, UP/DOWN/LEFT/RIGHT/START/SELECT/A/B/X/Y 정도만 잘 정의하면 대부분의 게임을 수행할 수 있다. (B가 총, Y가 폭탄이라는 것 정도만 신경써서 정의하면 좋다.) 물론 2개 연결하여 2인용 지원이 가능한 게임도 가능하다. 필자는 아래 조이스틱에서 L1=A, L2=B, 네모=X, X=Y, R2=HotKey로 할당해서 사용했다. 조이스틱 설정시 스킵하고 싶은 키 설정에서는 아무키나 몇초간 누르면 skip된다.

필자가 구매한 aliexpress발 조이스틱(13$, usb arcade joystick)

기타 다른 OS이미지를 사용해 라즈베리파이4 용 도 구성이 가능하다. 이를 통해 라즈베리파이를 여러가지 에뮬레이터로 활용할 수 있다는 것도 배웠다.

키워드 : recalbox, retorpie, 레트로게임, 라즈베리파이3, 라즈베리파이3b

Posted by 작동미학

댓글을 달아 주세요

  1. 도움되는 글 정말 잘 배우고 가여

    2020.11.18 17:09 [ ADDR : EDIT/ DEL : REPLY ]

기타2020. 10. 3. 14:34

 오늘은 조금 색다른 주제이다. 아마존에서는 머신러닝과 클라우드 활성화를 위해, 카메라 영상 기반의 자율주행을 간단히 실험해볼 수 있는 딥레이서를 2018년말에 출시했다. 이어 약 2년 동안 다양한 행사를 진행해 오고 있다. 개인적으로는 이런 잉여 프로젝트(?)를 진행할 수 있다는 점에서 아마존의 시도가 부러운 행사였다. 미국동부 region에서만 가능한 이 딥레이서는 지난 2년간 UI가 상당히 발전한 것도 특이사항이다. 초기의 여러가지 복잡할만한 UI가 조금만 익히면 빠르게 적응할 수 있도록 바뀌었다. 그래서 초기에 이 딥레이서를 했던 사람이라면 많이 변한 UI에 또한번 놀랄만하다.

aws.amazon.com/ko/deepracer/

 

AWS DeepRacer – 기계 학습을 시작하는 가장 빠른 방법

AWS DeepRacer Evo 차량에는 기존 AWS DeepRacer 차량, 기존 카메라와 스테레오 비전을 형성하는 추가적인 4메가픽셀 카메라 모듈, 스캐닝 LiDAR, 스테레오 카메라와 LiDAR 모두에 맞는 외판, 몇 가지 액세서�

aws.amazon.com

 

 이 딥레이서는 클라우드 기반의 시뮬레이터 및 머신러닝 강화 학습기를 제공함과 동시에, 해당 훈련 모델을 실제 모형 자동차에 탑재시켜 오프라인으로 즐길 수도 있는데, 후자의 경우는 제법 큰 규모의 경주용 자동차 레인(자동차가 다닐 수 있는 길)이 필요해서 사실상 대회장에 가지 않으면 실물 자동차로 하기는 어려운 점은 있다. 그러나 온라인에서는 여전히 가상으로 대회에 참가할 수 있고, 여기서는 간단한 팁을 제공해본다.

 실물 자동차를 그래도 구경은 해보자. 추가 키트(evo - 라이다 센서 등 추가 포함)가 나왔으며 아래는 순수 deepracer이다. amazon 사이트에서 deepracer로 검색하면 주문이 가능하긴 하다(현지 경유 해외 배송과 통관이라는 절차를 거쳐야하겠지만, evo를 합치면 가격은 거의 $600정도 한다.)

deepracer 사진 (전면), 하얀색 USB캠이 보인다. 저 영상을 입력으로 하여 모형차를 제어한다

 

deepracer 중앙부의 소형 컴퓨터(wifi지원)와 상단의 배터리 팩이 보인다. LED는 작동 상태를 표시해준다.
맨 하단의 모터용 배터리와 충전하는 모습이다

 

 필자 같은 경우는 작년에 aws행사를 포함해 오프라인 대회에 두어번 참가한 경험이 있었다. 당시의 걱저은 처음에는 실물자동차와 온라인 시뮬레이터 학습 결과물이 잘 매칭되지 않을거라고 생각했는데, 생각보다 잘 작동해서 놀랬었다. 시뮬레이터에서 잘 되면 곧잘 실제 모형자동차에서도 안정되게 잘 작동한다(사례를 보면 모든 경우에서 그렇지는 않다) 개인적으로는 아마존이 어떻게 처음에 이것이 이정도까지 잘 안정되리라고 확신하고 이 사업을 진행한 것인지 신기했을 정도다.

각설하고, aws 로그인 후 아래를 누르면 딥레이서를 작동시킬 수 있는데, 초기에 비해서 개선된 UI를 만날 수 있다.
console.aws.amazon.com/deepracer/home?region=us-east-1#league

 

https://console.aws.amazon.com/deepracer/home?region=us-east-1#league

 

console.aws.amazon.com

핵심은 자동차를 먼저 만들고 (Your garage 메뉴), reward 함수와 옵션을 주어서 각 경주에 참여하고자 하는 코스에 맞게 훈련시킨 후에(Your models 메뉴) 해당 코스를 가지고 시행하는 virtual circuit에 참가하면 된다. 세부 내용은 각종 getting started 가이드를 따르면 된다. (불행히도 계속 조금씩 바뀌고 내용이 꽤 길긴 하다)
docs.aws.amazon.com/ko_kr/deepracer/latest/developerguide/what-is-deepracer.html

 

 

AWS DeepRacer이란 무엇입니까? - AWS DeepRacer

AWS DeepRacer이란 무엇입니까? AWS DeepRacer는 초보자든, 전문가든 상관없이 모든 사용자들이 강화 학습을 배우고 탐구하면서 자율 주행 애플리케이션을 실험하고 개발할 수 있는 통합 학습 시스템입

docs.aws.amazon.com

다만, 훈련시킬 시에는 1시간에 약 3.5$의 요금이 발생한다는 점은 미리 기억해둘 필요가 있다. 초기 참가시에는 소정의 (약 10시간 정도) 무료시간이 주어진다. aws에서 진행하는 워크샵에 참여하면 무료 계정을 쓸 수 있기도 하다.

1. 우선 자동차를 만들어보자

deepracer 차량 설정(Your garage 메뉴)

 위 설정은 가장 보편적인 설정이라고 보면 된다. 어지간한 reward함수가 아니면 속도가 너무 높을시 학습이 잘 되지 않는다. 초기에는 maximum speed는 1.5도 좋다. 고수들은 3을 넘기도 하나본데, 학습을 수십시간 할 수도 있지 않을까 싶다(하지만 그렇게 비싸게 학습 시키기는 무리가 있다).

 steering angle granularity도 3이 우선 좋다. 5면 조금더 다양한 각도로 틀 수 있으나 복잡도가 커지면 역시 학습이 어려워지기 시작한다. speed granulairty도 3정도로 잡아준다. 그렇게 모두 값을 정해주면 하단에 deepracer차량이 사용하는 action list가 나온다. 화면의 영상에 따라 이 deepracer가 각 action중 하나를 수행하게 되는 셈이다.

 맨 처음에는 위에 추천한 옵션대로 차를 만들어 둔다.
(max steering angle도 작게 가져갈수록, 더 안정될 수 있는 점도 있으니, 코스에 따라 20도나 15도 설정도 나쁘지 않다)

2. 학습 모델을 잡자

 학습 모델은 디폴트에서 조금씩 변형을 가하는 것이 좋지만 디폴트로도 우선 좋다. 학습 시간은 1시간에서 4시간을 조절해보면 아래와 같이 좋아지는 그래프를 볼 수 있다. 좋은 reward function을 설계해야만 강화학습에서 좋은 결과를 볼 수 있다. 그래서 처음 20분 정도 학습시에 이 reward증가세를 보고 학습을 지속할지 판단하는 것도 노하우이다. 아래 보면 2시간 30분간도 reward가 계속 잘 상승하는 것을 볼 수 있다. reward function이 좋지 않으면 이 수치 증가가 매우 더디며 횡보한다. (max speed가 높아도 잘 그렇게 된다)

2시간 30분 학습한 결과다
생각보다 빠르게 좋아지지 않는 reward 변화 그래프이다. 대개 이러면 학습을 시켜도 별 소용이 없다

이 학습 모델의 핵심은 어떻게 잡으면 좋을까? deepracer는 입력된 영상을 위주로 학습한다. 그렇다면 내가 지금 보는 광경에 대해 어떻게 할지를 결정한다고 보면 된다.

 1.0 m/s 를 최고 속도로 잡은 상태에서는 중앙선을 벗어나지 않게 하는 기본 reward함수도 잘 작동한다. 아마 복잡한 트랙에서 학습시킨다면, 해당 학습 모델은 거의 모든 경주 코스에서 유효할 수 있을 것이다(중앙선 영상은 모든 경우에 비슷할 테니까)
docs.aws.amazon.com/ko_kr/deepracer/latest/developerguide/deepracer-reward-function-examples.html

 

AWS DeepRacer 보상 함수 예제 - AWS DeepRacer

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 그러나 각 코스별 최상을 원한다면 아래 전략이 유효해보인다.  예를들면 아래는 2019 champion race course이다. 단지 도로 위의 카메라 영상만을 보고는 최고속의 부드러운 길을 미리 알 수 없으니 강제로 그 길을 미리 정해주는 것이다. 고속 주행을 위해서는 영상만으로 부족한 정보를 추가해주는, 유효한 전략이 아닐 수 없다. 

코스별로 정의된 way point들
이렇게 가면 핸들링을 최소화하고 고속으로 갈 수 있으니 강제로 그 길에서 그렇게 하게 학습시킬 수 있다

실제로 1등 선수들의 주행 영상을 보면 거의 유사한 길을 가는 것을 알 수 있다. 저렇게 최적화 된다.

console.aws.amazon.com/deepracer/home?region=us-east-1#online/arn%3Aaws%3Adeepracer%3Aus-east-1%3A%3Aleaderboard%2Fsummit-season-2020-09-tt (aws 로그인 후, 오른쪽 하단의 각 선수별 Watch로 주행영상을 볼 수 있다)

 이렇게 right, center, left lane에 waypoints 별로 가깝게 가면 보상해주는 reward function으로 만들 수 있는데 아래와 같다. (racingline)

github.com/scottpletcher/deepracer/blob/master/iterations/v2-RacingLine.md

 

scottpletcher/deepracer

AWS DeepRacer Experimentation. Contribute to scottpletcher/deepracer development by creating an account on GitHub.

github.com

여기에 필자의 경우에는 속도를 높게 유지하면 점수를 더 주는 함수도 반영해보았다. 그렇게 필자가 찍은 길과 함수이다. 그리고 다른 reward function들은 참조하기를 바란다.

github.com/neibc/deepracer/blob/master/deepracer4.py

 

neibc/deepracer

Contribute to neibc/deepracer development by creating an account on GitHub.

github.com

이 정도만으로도 max speed만 2이하로 학습시키면 중위권 이상에 들어가는 성적을 거둘 수 있다. 여러가지 시행착오 속에 깨달은 것은 다소 고속의 reward가 잘 올라가는 function을 찾았을시, 적절한 시간을 추가로 학습시키는 방법이 좋아보인다. 학습 파라메터 조율은 경험상 크게 도움이 되지 않았다. 그리고 어느정도 안정된 모델을 만들어 학습시켰으면, 윈도우 마우스 자동 매크로 툴로 여러번 모델을 race에 등록해 많이 시도하는 방법으로, 추가로 좋은 성적을 얻을 수 있지 않았을까 예상된다.
(max speed가 저속이 아니면 안정된 모델로 학습시키기 어렵기 때문에, 빠른 차량일수록 race evaluation을 여러번 시도하는 전략이 많지 않을까)

조금 다른 이야기를 해보면 딥레이서에 대해 보상함수를 바꿔가면서 새삼 깨달은 것이 있다.

 무언가를 달성하기 위해서는 보상함수 안에 상호 보완 및 견제하는 이해관계가 필요하다는 점이다. 딥레이서가 길에서 벗어나지 않고, 최단거리로 주행하며, 코너링에서 안정적이고 또 빨리 가야한다는 원칙 모두에 대한 관계가 적절히 주어져야 최종 학습 후에 만족하는 결과가 주어진다. 어떤 것도 그냥 기대할 수는 없는 노릇이다. 어찌보면 사람 조직도 비슷하지 않을까 싶었다. 상벌의 체계와 부서간 견제 조율이 되어 평형을 이루게 하는 전략이 필요하지 않을까(사람은 모형차와는 물론 다른 부분이 있겠지만)

 다음으로는 위의 복잡한 전략으로 조율되어야하는 지향점에 단순 시행착오로만 가려면 시간이 매우 오래걸린다는 점이다. 딥레이서의 경우 초기 reward function에서는 빠른 속도에 대한 보상보다는 정확한 길에 대한 학습을 먼저 1시간 정도 시키고, 점차로 속도에 대한 보상을 추가하며 단계적인 학습 전략을 거쳤을때 빠르게 원하는 궤도에 오를 수 있었다. 이런 단순게임에도 이런 원리가 대표되는게 놀라웠다. 간단한 목표로 시작해 다단계로 기대와 규칙을 올려서 학습하면 전체 학습 시간이 짧아진다

 마지막으로는 이 경기에서 이기기 위해서는 전문지식 보다는 전문지식보다는, 빠르게 써보고 탐색하며, 시행착오를 겪은 다양한 경험자의 노하우를 습득해서 협업해야 진도가 빠르다는 점이다. 일단 툴에 익숙해지고 몇가지 시험을 해본 다음에는 여러가지 아이디어로 조금씩이라도 앞으로 나가면 경쟁에 유리해진다. 반복하다보면 big jump가 나오기도 한다. 실제 경기에 참여해보면 예컨데 머신러닝 전문가보다는, 빠르게 써보고 시행착오를 거쳐줄 투지가 있는 그룹을 이룬 20대~30대 초반의 젊은 친구들이 대회에서 좋은 성적을 거두는 것을 보면 이것이 fact로서 어느정도 입증된다고 보면 된다.

 별도로 단계적 학습에 대해 조언해보면, 한번 학습한 모델을 Action 선택에서 clone할 수 있는데, 이렇게 하면 직전의 학습 결과물을 유지한상태에서 추가 학습시킬 수 있으므로, 학습 시간을 점진적으로 진행시키는 방법으로 삼을 수도 있다.
(해당 시점에서 계속 clone하면서 원하는 방향으로 조율해 나갈 수 있다)

딥레이서를 즐기실 분들에게 간단히 참고가 되었으면 좋겠다.

실제 차량에 모델을 심어서 주행하는 것에 대한 영상은 아래와 같다(2018년말 코스이다)

www.youtube.com/watch?v=MaSZfEmqMPs

european seeside circuit의 waypoint정보도 같이 실어보자.

Posted by 작동미학

댓글을 달아 주세요

아두이노 통신2020. 8. 22. 23:16

중거리 통신이 가능한 HC-12 통신 모듈에 대해 알아보자

 

▶ 이 가이드를 따라하면

- 블루투스나 433Mhz보다 더 긴 거리를 커버하면서, 사용법도 간단한 HC-12를 활용할 수 있다.

 

▶ 기존 읽어보면 좋을 강의

- 동일한 시리얼 통신 방식으로 작동하는 APC-220 : https://bbangpan.tistory.com/27

 

▶ 부품 설명 및 회로 구성

 그동안 몇가지 통신 모듈을 소개했었는데, 이보다 더 마음에 드는 모듈이 없었다. 저렴한 가격에 먼거리 통신이 가능했기 때문이다. 대부분 블루투스나 433Mhz통신 모듈이 방이나 옆방정도까지가 가능하다면, HC-12는 집 전체와 집 밖도 어느정도 커버할 수 있다. 통신 속도를 낮추면 야외에서는 최대 1.8km거리까지 도달한다고 알려져있다. 단순한 2개의 핀으로 통신할 수 있는 것도 장점이다. SI4463칩 기반으로 작동한다.

[HC-12 모듈 앞면, 안테나를 납땜했다]
[HC-12  모듈   뒷면 ]

 

송수신을 테스트하기 위해서는 역시 Arduino 보드는 2개가 필요하다. 연결은 매우 단순해서, VCC->5V, GND->GND, TXD->D2(RX), RXD->D3(TX) 연결하면 시리얼통신으로 보낸 내용을 곧바로 송신하여 수신부에서 Serial.read() 읽어올 있다. 별도 라이브러리 설치도 필요없다.

[송수신을 위한 모듈 2개 구성]

다만, HC시리즈의 다른 블루투스 모듈과 유사하게 모듈 셋팅을 먼저 필요가 있다. 셋팅 작업에서는 속도나 통신 옵션 등을 정의하는데, 디폴트로 쓴다면 별도의 모듈 셋팅을 하지 않아도 되긴 하다. 대략 9600bps, 1번채널 등이 디폴트 모드이다. 따라서 모듈 통신 시험만 하고 싶다면 다음으로 넘어가고, 셋팅을 조절할 필요가 있다면 아래를 참고하자. 셋팅 작업시는 모듈의 SET 아두이노 보드의 GND 연결해 두어야 한다. 실제 통신시에는 제거한다.

 

Github 링크 : HC-12 셋팅 : https://github.com/bbangpan/bbangpan.com/blob/master/neibc_hc12_cmd.ino

 #include <SoftwareSerial.h>

 

SoftwareSerial HC12(2,3); // HC-12 TX Pin D2(RX), HC-12 RX Pin D3(TX)

 

void setup() {

  Serial.begin(9600);             // 시리얼 모니터 속도 정의

  HC12.begin(9600);               // HC12 시리얼 통신 속도 정의

}

 

void loop() {

  while (HC12.available()) {        // HC-12 수신 데이터가 존재하는 경우

    Serial.write(HC12.read());      // HC-12 모듈의 출력 내용을 읽어 시리얼 모니터로 전송

  }

  while (Serial.available()) {      // 시리얼 모니터의 입력 내용이 존재하면

    HC12.write(Serial.read());      // 읽어서 HC-12 모듈로 전송

  }

}

[HC-12 의 SET핀을 아두이노의 GND에 연결해야 모듈 셋팅이 가능하다]

 

 

상기 소스 코드를 컴파일해서 올리면 시리얼 모니터 창에서 아래와 같이 여러가지 작동이 가능하다. 실행 후 시리얼 모니터를 띄우고, 전송 창에 AT를 입력하고 전송을 누르면 OK가 출력되는 것이 정상 상태이다. 이후에 아래 명령으로 모듈 셋팅을 변경할 수 있으며 AT+RX명령으로 셋팅된 전체 내역을 확인할 수 있다.

 

AT+Bxxxx (속도정의(bps), 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, default:9600)

AT+Cxxx (채널정의 001~127이지만 100이하만 사용 권고 ß 100Mhz~473.0Mhz까지 400Khz간격으로 주파수를 늘리게 됨, 송수신 모듈 2개가 이 채널이 같아야 통신이 된다.)

AT+Px (전송파워 정의 1~8, 0.8mW~100mW까지 전력 소모를 조절가능)

AT+FUx (모듈 전송 모드 변경 1~4, 숫자가 높을수록 조금더 전송 딜레이를 늦춰 멀리갈 수 있다. FU39600bps/600m 도달, FU4의 경우는 1200bps/1.8km 도달이 가능하다고 한다.)

AT+V (버전출력)

AT+RX (전체 셋팅 현황 출력)

 

세부 내용은 http://www.alselectro.com/files/HC-12_v2.3B_UserManual.pdf 문서를 참조할 있다.

 

아래가 AT, AT+B9600, AT+C001, AT_P8, AT+FU3,AT+V,AT+RX를 차례로 전송하여 출력결과를 본 시리얼 모니터 화면이다.

[ 모듈 세팅을 위한 시리얼 모니터 화면, 윗 전송 창에 명령을 입력하고 전송 버튼을 누른다]

 

셋팅이 끝났으면, 셋팅을 위해 연결한 SETGND연결을 제거하고, 아래 send/recv각 소스를 컴파일하여 두 보드에 각각 탑재시킨 후 recv가 담긴 보드를 들고 다니면, 제대로 신호가 수신될 시 보드의 깜빡이는 불을 볼 수 있다.

(해당 소스는 짧은 간격으로 A를 전송하고, 수신부에서 읽으면 Blink로 깜빡이게 만든 소스이다. 예시에서는 한 방향으로만 전송하지만, 실제로는 양방향으로 통신도 가능하다.)

 

Github : HC-12 송신 소스 링크 : https://github.com/bbangpan/bbangpan.com/blob/master/neibc_hc12_send.ino

#include <SoftwareSerial.h>

SoftwareSerial HC12(2,3); // HC-12 TX Pin, HC-12 RX Pin

 

void setup() {

  HC12.begin(9600);         // Serial port to HC12

}

 

void loop()

{

  HC12.print("A");

  delay(500);

}

 

Github : HC-12 수신 소스 링크 : https://github.com/bbangpan/bbangpan.com/blob/master/neibc_hc12_recv.ino

#include <SoftwareSerial.h>

SoftwareSerial HC12(2,3); // HC-12 TX Pin, HC-12 RX Pin

 

void setup() {

  pinMode(LED_BUILTIN, OUTPUT);

  Serial.begin(9600);        // Serial port to computer

  HC12.begin(9600);         // Serial port to HC12

}

 

void loop()

{

  while(HC12.available()) {

    Serial.print((char)HC12.read());

    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)

    delay(200);                       // wait for a second

    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW

  }

  delay(200);

}

 

아래와 같이 별도 전원을 연결하여 들고 다니면서, 주파수 도달 거리를 알 수 있다(노트북/PC에서는 송신부가 USB에 연결되어 작동하고 있는 경우다)

[recv  소스 컴파일하여, 배터리를 연결해 들고 다니면서 보드의 LED가 깜빡이는지 확인한다]

 

상기 소스를 다양하게 변형하여 집 전체에 도달하는 통신기능을 구현할 수 있다.

[주의, 통신 모듈의 경우에는 간단한 실험외에 본격적으로 사용하려면 국내 전파법 위반등을 미리 확인하시고 사용할 필요가 있습니다]

 

▶ 구매 가이드

HC-12 : https://www.aliexpress.com/af/HC-12-wireless-serial.html?d=y&origin=n&SearchText=HC+12+wireless+serial&catId=0&initiative_id=SB_20200821182016 ($3전후)

 

강의 키워드

HC-12, 시리얼 통신 모듈, serial communication, wireless, Arduino, 아두이노

Posted by 작동미학

댓글을 달아 주세요