반응형

https://gun-ny.tistory.com/77

이전에 한번 재미난걸 만들어보고 싶어서 보일러 리모컨을 뜯었다가 재밌는게 나오지는 않을거 같아서 다시 덮은적이 있다.

 

그리고 계속 찾다가 집에 달려있는 구형 도어락이 생각났다.

 

현재 최신 도어락이 블루투스나 와이파이로 스마트폰 제어가 가능한지는 모르겠으나 집에 달려있는 월패드로는 제어가 가능하다.

 

"이걸 스마트홈 처럼 블루투스나 와이파이로 제어할 수 있게 만들어 볼까?"라는 생각이 들었다.

 

그렇게 이 프로젝트는 시작되었다.

 

현재 집에 설치되어 있는 삼성 도어락 SHS-6601 모델이다.

구형이지만 나름 푸시풀 도어락에 카드키 기능까지 탑재되어 있다.

 

아, 한가지 더 있다.

별도 판매되는 모듈을 구매하여 설치하면 리모컨이나 월패드로 원격제어가 가능하다.

이렇게 보니 나름 최신식(?)인듯..?

모듈 구성품 중 수신기는 건전지 아래 나와있는 선에 연결해주면 된다.

 

리모컨(SHS-DARCX01), 수신기(SHS-AST210)(출처 : 다나와)

 

수신기(SHS-AST210) 모듈 상세이미지 (출처 : 다나와)

보통 2가지 방법으로 사용된다.

 

도어락에 수신기 모듈을 설치하고

1. 리모컨을 이용하여 도어락 제어

2. 월패드에 송신기 모듈을 설치하여 월패드로 도어락 제어

 

모듈을 구매해서 편하게 사용하는 방법이 있지만 이건 나만의 프로젝트라는 이유와 내가 직접 분석하고 내 생각으로 색다르게 만들어보고 싶어서 시중에 판매하는 모듈은 사용하지 않기로 했다.

 

이번 프로젝트에 사용될 보드는 STM32F103RB 칩의 Nucleo 보드이다.

 

안될 걸 알았지만 혹시나 해서 기존에 수신기 설치 목적을 위해 나와있던 선에 무작위 공격(?)을 해보았지만 아무 반응이 없었다.

 

흠.. 그럼 뭐 더 돌격.. 아니 뜯어봐야지

 

먼지가 꽤나 붙어있다. 외부와 온도차도 있어서 약간의 물기도 있다.

여기서 완제품은 완제품이구나라고 생각했던게 실내외에서 사용되는 기기라 쇼트방지를 위해 기판을 코팅하여 방진방습을 한것과 단선방지를 위해 와이어 커버가 씌워져있는 디테일한 모습들이 정말 꼼꼼하게 만들었구나 하는 생각을 하게 만들었다. 

 

난생 도어락을 설치해 본적도 없는데 분해를 하였다.

분해하면서 느낀게 정말 간단한 구조로 있어야 할것들로 깔끔하게 잘 만들었구나 생각이 들었다.

 

이렇게 (왼쪽부터) 도어락 실내부, 모티스, 도어락 실외부가 분해되었다.

 

모든 신호의 영점인 GND를 기판의 캐패시터를 찍어가면서 찾고

 

모든 핀들을 분석하였다.

 

어떤 신호가 오가는지

어떤 통신을 하는지

상태 변화에 따라 신호가 어떻게 바뀌는지

 

그렇게 각 핀들의 역할들을 알아냈다.

 

그 중에 위 2개의 핀으로 모든 모듈과 센서가 시리얼 통신을 하게 된다는 것을 알았다.

 

로직 아날라이저를 이용하여 시리얼 통신을 분석해보기로 한다.

 

시리얼 통신의 패킷을 분석하려면 시리얼 통신 속도인 보드레이트(Baudrate)를 알아야 하는데 로직 아날라이저에서는 57.762kHz로 측정되어 표기되고 있다. 이는 시리얼 통신에서 표준적으로 사용하는 보드레이트 중 57600과 근접하여 보드레이트를 57600으로 설정하니 패킷들의 값이 보이기 시작했다.

 

우선 첫번째 시도로 도어락이 Unlock 되는 타이밍에 통신되는 시리얼 통신을 복제하여 내가 원할 때 Unlock을 해볼 생각이다.

 

STM32 UART1 -- (복제된 Rx 신호) --> 도어락 Rx
STM32 UART3 -- (복제된 Tx 신호) --> 도어락 Tx

복제된 신호의 Rx는 STM32보드의 UART1과 연결되며 Tx는 UART3와 연결되어 도어락(Rx, Tx)으로 보내진다.

 

각 신호가 전송되는 타이밍은 타이머를 사용하여 출력비교(Output Compare)의 CCR 인터럽트를 사용하여 내보낼 생각이다.

Rx 전송 타이밍은 TIM2의 CCR, Tx 전송 타이밍은 TIM3의 CCR의 레지스터를 설정하여 인터럽트를 발생시킬 것이다.

 

"Session 3"이 원본 신호, "Session 4"가 만들어낸 신호이다.

STM32보드의 USER버튼을 누르면 인터럽트가 발생되게 하였고 약간의 타이밍 오차가 있으나 무시해도 될 정도이며 거의 완벽하게 복제된 것을 볼 수 있다.

 

두근두근.. 두근세근(?).. 딸깍..!

 

...

 

..

 

??

 

안된다..

 

첫번째 시도만에 성공하면 당연히 좋겠지만 원인을 찾아보니 될 수가 없었다.

 

이미 도어락에서는 시리얼 통신을 하면서 PULL-UP 상태를 유지중인데 그 중간에 선을 연결해서 내가 아무리 신호를 넣어도 서로 충돌하여 작동이 될 수가 없었다. 

 

이를 해결하기 위해서는 선을 잘라야 했다.

하.. 순정 배선 자르는거 정말 싫어하는데 방법이 없나?

 

똑같은 종류의 커넥터을 암수로 조합하고 결선하고 연장하면 순정 배선을 건들지 않을 수 있지 않을까?

 

이때부터 (진짜 개)뻘짓이 시작되었다.

 

커넥터가 피코 블레이드라는 것은 알아냈고 핀 피치는 2.0mm이다.

 

내가 못 찾는건가 아무리 찾아봐도 피코 블레이드 1.25만 있고 2.0은 없었다.

 

흠.. 다른 방법으로 가야하나?

 

도어락 실내부의 메인 기판을 들어내본다.

 

 

도어락 실내부 메인 기판의 (위에부터) 하단부, 상단부이다.

이 사진은 혹여 도어락 기판 사진을 필요로 하는 사람들을 위해 찍어보았다. 

 

메인 기판의 하단부에 피코 블레이드 커넥터가 납땜이 된 부분이 보인다.

납땜이 되어있는 피코 블레이드의 커넥터를 떼어서 바꿔버리면 순정을 최대한 건들지 않겠다는 의미가 없어져 버리는거고..

그럼 XH 2.54의 배선 커넥터를 납땜으로 이어서 주 커넥터를 XH 커넥터로 쓰면 되지 않을까?

 

바로 실행.

 

으아아아아~~~~~ 줴에에엥장~~~~~

메인 기판에 딱 맞게 설계되어 있어 배선이 지나갈 공간이 없다..

 

결국 원상복구..ㅋ..ㅎ.. 방습과 부식방지를 위해 조져놓은 곳은 깔끔하게 마무리

 

결국 순정 배선을 자르고 말았다.

정말 개.뻘.짓.이였다.

 

중간에 연장이 용이하게 XH 2.54 암수 커넥터 배선으로 깔끔하게 작업 완료!

지금 글을 쓰면서 느끼는거지만 임베디드용 커넥터로 XH 2.54는 약간 큰 느낌이 없지 않아 있다.

 

잘 연결되어 잘 작동하는 것도 확인

 

분리 회로는 2N2222 바이폴라 트랜지스터 2개를 사용하여 위와 같이 설계하였다.

 

평상시에는 원래처럼 도어락의 Rx Tx 통신을 하다가

 

인터럽트를 발생시킬 타이밍에 복제된 신호로 통신하게 만드는 것이다.

 

..?

 

완벽하게 복제된 신호가 완벽한 타이밍에 통신을 하는데 원하는 결과가 나오질 않는다.

 

여기서 시간을 제일 많이 잡아먹었다. (몇주였나..?)

지금까지의 과정도 하루만에 진행된게 아닌 며칠 만에 진행된 결과이다.

원래 하는일이 있어 중간중간 시간을 쪼개서 이 방법 저 방법 시도하였는데 진도가 나아가질 않아 포기하려고 했었다.

 

다시 마음을 잡고 처음부터 차근차근 하나하나씩 짚어가면서 원인을 찾아보았다.

 

이번에도 숲(모든 핀)을 보지 않고 나무(시리얼 통신핀)만 본자의 뻘짓이였다.

 

액정 전원부인줄 알았던 핀이 알고보니 도어락의 Wake-UP을 담당하는 신호선이었던 것이다.

 

도어락이 Wake-UP을 하면 핀 상태가 LOW가 되고 모듈끼리 Rx Tx 통신을 하게된다.

 

그리고 시리얼 통신의 무결성 검증 때문인지는 모르겠으나 각 패킷의 두번째 버퍼에는 각 패킷의 순서가 지정되어 있는것도 알게 되었다.

 

이렇게 원인 분석을 마치고 회로를 다시 구성하였다.

STM32보드에서 보내주는 Tx신호 핀을 도어락의 Rx핀에 연결해주고 인터럽트가 발생할 타이밍에 도어락을 강제로 Wake-UP 할 수 있게 Fake_Sig핀을 구성하여 액정 전원부와 연결해주었다.

 

테스트로 액정 전원부가 LOW로 떨어지면(도어락 액정이 켜지면 Wake-UP) Unlock 신호를 도어락의 Rx로 전송하게 하였다.

 

긴 고생(?) 끝에 3번째 시도이다.

 

 

빰빠라밤~~!!!!!

정말 포기할까를 수십번 생각했는데 도어락이 Unlock 되는걸보고 정말 눙물이..ㅠ

고생 끝에 낙이 온다는게 이런걸까

 

힘을 입어 HC-05 모듈을 이용하여 블루투스 제어도 해보았다.

 

 

스마트폰 -- (블루투스 통신) --> HC-05 모듈 -- (시리얼 통신) --> STM32 보드 -- (시리얼 통신) --> 도어락

블루투스 앱은 레이아웃 구성이 가능한 Bluetooth Electronics를 이용 하였으며 스마트폰과 HC-05 모듈이 블루투스 페어링이 이루어진 상태에서 앱에서 버튼을 누르면 특정 문자가 전송되며 HC-05는 이를 STM32보드에 전송해주고 이를 받은 STM32보드는 문자를 검증하여 Unlock 신호를 도어락에 전송하는 구조로 설계하였다.

 

처음 목적은 와이파이로 도어락을 제어하는게 목표였던거라 ESP32 보드를 이용하여 와이파이 제어도 해보았다.

 

 

스마트폰 -- (와이파이) --> Bylnk IoT -- (내부 서버) --> Bylnk IoT 웹페이지 변화

//

변화된 Bylnk IoT 웹페이지 <-- (WebHook Polling) --> ESP32 <-- (시리얼 통신) --> STM32 보드

ESP32와 MQTT를 이용했으면 아주 쉽게 개발할 수 있었다.

하지만 STM32가 주 보드이기에 ESP32 보드는 AT Command 펌웨어를 올려 와이파이 모듈로 사용하였다.

MQTT는 아직 지식이 없기에 익숙한 WebHook Polling 방식으로 진행하였다.

실무에서는 MQTT 또는 WebHook Push 방식으로 진행해야 한다.

 

와이파이 앱은 Bylnk IoT를 이용 하였으며 앱에서 버튼을 누르면 Bylnk IoT 웹페이지의 값이 바뀌게 된다.

이를 STM32 보드에서 Polling 방식으로 ESP32에 AT Command로 웹페이지의 값을 가져오라고 명령을 하게되고 주기적으로 가져온 값을 검증하여 Unlock 신호를 도어락에 전송하는 구조로 설계하였다.

 

https://github.com/gitgunny/STM32F103_Doorlock_IoT_SHS-6601

이제까지 했던 과정의 소스코드의 기록은 위 깃허브에서 볼 수 있다.

 

 

간단했지만 긴 시간이었다.

 

전문가 입장에서는 위 과정이 해킹? 리버싱?이라고 하기에 뭐할거 같지만 위 과정을 겪으면서 든 생각은 기기를 제작한 개발자의 생각을 읽어야 한다는점을 느꼈다. 그럼 위에서 겪었던 뻘짓은 없지 않았을까..

 

이 프로젝트(?)를 진행하면서 통신 커넥터를 연장하기 쉽게 만들어놔 기회가 된다면 후속편으로 설계했던 회로를 토대로 PCB 모듈을 만들어 보는것도 생각중이다. 만들게 된다면 이 글에 소식을 알리도록 하겠다. 일단 지금은 안드로이드 올인원이라는 재밌는 기기를 획득하여 다음 글은 안드로이드 올인원을 이용한 새로운 글이 만들어질 예정이다.

 

긴 글 읽어주셔서 감사합니다.

 

반응형
반응형

뭐 만들꺼 없나하고 집에 있는 온도조절기를 분해 해보았다.

 

출처 : 신동테크

신동테크에서 만든 온도조절기이다.

신동테크에서는 온도조절기와 함께 싱크대 밑에 있는 온도분배 시스템을 같이 납품하여 온도조절기로 온도분배 밸브를 조작하는 시스템으로 보인다.

 

8비트 MCU로 디스플레이에 상태를 표시하고 기판 아래 NTC센서로 온도를 읽어 조건에 맞춰 밸브를 조작하는 것으로 보인다.

 

따로 신호값이 있을까 궁금해서 오실로스코프를 찍어보았지만 단순히 현재 상태에 따라 밸브를 ON/OFF 시켜주는 시스템이었다.

 

이후 원상복구 완료

반응형
반응형

EasyEDA라는 툴의 사용법을 공부하여 PCB 제작을 하려고 한다.

 

최대한 작고 간단하고 깔끔하게 나만의 보드를 만드려고 하는데 이 USB잭이 제법 큰 공간을 차지한다.

다른 보드들은 USB잭 없이 프로그램을 업로드 하여 잘만 사용하던데.. 방법을 찾아보았다.

 

ICSP.. 아두이노 보드에 ICSP라는 핀이 있는것만 알고 이때동안 관심을 주지 않았는데 부트로더 업로드를 해주는 역할과 함께 프로그램 코드도 업로드 할 수 있는 핀이라는 것을 알게 되었다.

이렇게 되면 PCB 부품 배치에서 USB 관련 소자들을 제거하여 더 깔끔하게 PCB를 만들 수 있을거 같다.

 

대표적인 방법 중 하나로 ISP 소스코드를 프로그래머 보드로 설정한 보드에 업로드한 뒤, 원하는 소스코드를 프로그래머 보드를 통해 타겟 보드에 업로드 하는 방법이다.

 

출처 : 아두이노 공식 홈페이지
출처 : 아두이노 공식 홈페이지

USB를 프로그래머 보드에 연결한 뒤, 위와 같이 프로그래머 보드와 타겟 보드를 점퍼선으로 연결시킨다. *실수로 인한 쇼트 주의!

 

파일 > 예제 > ArduinoISP > ArduinoISP를 선택하여 예제 소스코드를 연다.

 

알맞은 보드와 포트를 선택한 뒤 업로드!!

 

여기까지 진행하면 프로그래머 보드 설정은 끝났다.

이제 내가 원하는 소스코드를 프로그래머 보드를 통해 타겟 보드에 업로드하면 된다.

 

타겟보드에 예제로 Blink 소스코드를 업로드 해보겠다. *바로 원하는 소스코드 업로드도 가능

 

알맞은 보드와 포트를 선택하고 프로그래머는 Arduino as ISP를 선택한다.

*타겟 보드가 아두이노 나노인 경우 보드는 Arduino Nano를 선택하고 알맞는 Processer를 선택하면 된다.

 

마지막으로 그냥 업로드가 아닌 스케치 > 프로그래머를 사용하여 업로드를 하게되면 소스코드가 업로드 되어 프로그래머 보드와 타겟 보드가 동일한 동작을 하는 것을 볼 수 있다. *그냥 업로드를 하게되면 오작동

 

부트로더 업로드 같은 경우에도 바로 위 단계에서 부트로더 굽기를 하면 USB잭으로는 할 수 없는 부트로더 업로드도 할 수 있다.

반응형
반응형

썬셋카

경기 광주시 봉골길134번길 19-15

010-3111-5594

반응형

+ Recent posts