Posts

Showing posts from January, 2019

[Arduino] - 디스플레이 오토피벗 디바이스 "피버시노" 파이썬 프로그램 업데이트 (피버시노 v.1.1.2)

Image
"피벗이노"는 화면 방향을 전환할때 display.exe  라는 외부 프로그램을 사용해왔다. 문제는 핵심적인 기능을 담당하는 이 프로그램에 문제가 생기면 아무것도 하지 못한다. 이렇게 프로그램이 분산되어 있으면 결손, 손상, 수정에 어려움이있다. MDSN에서 개발자들에게 제공해주는 DEVMODE 를 이용하면 연결된 디스플레이 정보를 가져와 컨트롤 패널의 디스플레이 설정을 프로그래밍으로 만져볼 수 있다. 실제로 디스플레이와 관련된 응용프로그램이나 드라이브를 운용하기위한 드라이버를 만들때 사용된다. DEVMODE를 이용해  rotateTO  함수를 만들었다. rotateTO 함수 작동방식은 오토피벗 기능을 사용할 디스플레이 넘버를 지정해주고 모니터의 현재 방향에 따른 너비와 높이 값 교환 및 회전이다. 이 함수를 이용하면 display.exe에 의존하지 않아도 된다. 파이썬 에서는 win32api를 이용해 DEVMODE를 사용할수 있다. win32api를 사용하려면 라이브러리가 있어야한다. pip install pypiwin32 이 함수는  Rotating the Screen in C#  을 참고하여 작성되었다. Mapping the APIs 의  NativeMethods 클래스에 화면 방향에 따른 상수 값이 정해져 있다. 여기서 봐야 할 값들은 다음과 같다. DMDO_DEFAULT = 0; DMDO_90 = 1; DMDO_180 = 2; DMDO_270 = 3; 이 상수값들이 디스플레이의 회전 방향을 결정해준다. # Changing Screen Orientation Programmatically def  rotateTO(rotateDic):    display_num  =   0   # display 1    device  =  win32.EnumDisplayDevices(None,display_num)    dm  =  win32.EnumDisplaySettin

[Arduino] - 피버시노 비정상 작동 해결 (피버시노 v.1.1.1)

Image
오늘 아침 " 피벗이노v.1.1 "가 작동을 하지 않았다. 시리얼 전송값을 확인해보니 디바이스가 재시작 될때 확률적으로 읽을 수 없는 시리얼 값을 전송하는 것이 확인되었다. 프로그램을 재실행 및 모든장비를 PC에 재연결 해주어야 정상작동을 했다. 이건 해경 방법이 아니다. 이 디바이스는 사용자가 컴퓨터를 사용하고 있을때 전원만 들어와 있다면 어떤 상황에도 정상작동을 해야한다. 그만큼 안전성과 신뢰도가 중요한 디바이스다. dfrobot WiKi 를 확인하니 무선 프로그래밍 환경을 이용할때 디바이스 baud rate를 115200 로 사용할 것을 권장하고 있었다. 유선도 아니고 무선이니 데이터 전송의 안정성을 위한것으로 보인다. 실제로 디바이스 통신이 재연결 될때 3번중 1번은 시리얼 데이터가 읽을 수 없는 상태로 전송되어 프로그램이 정상작동하지 않았다. 시리얼 통신 안정성을 높이기 위해 디바이스의 baud rate를 수정했다. 이 후로 디바이스 연결이 끊어지게되는 어떠한 상황이 와도 재연결 되었을때 정상작동하는 것이 확인되었다. 업데이트 버전 ===================================================== 피버시노 v1.0 피버시노 v1.1 피버시노 v1.1.1 피버시노 v1.1.2 피버시노 v1.1.3

[Windows] - 윈도우10 시작 프로그램 추가하기

Image
아래 경로를 탐색기 주소창에 입력 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 이 경로에 프로그램을 복사 혹은 바로가기를 추가해두면 다음 부팅부터 해당프로그램을 자동으로 실행한다.

[Arduino] - 시리얼 통신을 이용한 디스플레이 오토피벗 (피버시노 v.1.1)

Image
지난번 에 모니터 상태에 따라 디스플레이 출력 방향을 자동으로 바꿔주는 오토피벗 장치를 만들어보았다. 테스트 용이라 크기도 크기지만 케이블이 자꾸 결려서 파손위험이 있었다. 이번에 만든 피버시노v.1.1은 BlunoBeetle을 이용해서 케이블 과 크기를 해결했다. BlunoBeetle 은 작은 크기의 아두이노 이다. 예전에 키패드 를 만들때 사용한 Beetle 과 비슷하지만 BlunoBeetle에는 블루투스가 추가로 탑재 되어있고 Beetle은 레오나르도로 인식하여 HID 장비로 사용할수 있지만 BlunoBeetle은 아두이노 우노로 작동한다. 물론 AT커맨드를 이용해 HID 무선 장비로 사용 할 수 있다. 그러나 내 개발 환경의 문제인지 데스크탑 PC에서는 BlunoBeetle 을 찾지 못하는 문제가 발생했다. 블루투스 스피커중에 모바일이나 테블릿과는 문제가 없지만 내 컴퓨터랑 연결이 안되던 제품이 있었는데 그거랑 같은 문제같다. 아마도 블루투스 드라이버나 서비스 지원 문제로 보인다. 그러나 BlunoBeetle은 두대가 있으면 마스터 슬레이브를 부여해 무선환경에서 데이터 링크기능을 이용할 수 있다. BlunoLink 가 이렇게 빛을 보게 되었다. 무선 모드 사용법 1. 시리얼 모니터를 열고 "+++" 입력 2. "Both NL & CR" 로 변경 3. AT커맨드 "AT+FSM=FSM_TRANS_USB_COM_BLE" 를 이용해 transparent mode로 바꿔주고 한 쪽은 "AT+SETTING=DEFPERIPHERAL" 을 다른 한 쪽은 "AT+SETTING=DEFCENTRAL" 로 상태를 바꿔준다. 4. "AT+EXIT" 종료 연결 확인은 BlunoBeetle의 "LINK" Led 가 초록색으로 점등되면 성공이다. 이

[브라우저] - 네이버 웨일(크롬) 미디어 자동재생 안될때

Image
언제부턴가 웨일에서 자동재생이 되지 않았다. 원인은 크롬이 오디오와 비디오 자동재생 정책이 바뀌었기 때문이다. 네이버 웨일이 크롬을 기반으로 되어있기 때문에 이러한 정책 옵션을 수정하는 방법도 크롬과 동일하다. 주소창에 whale://flags를 입력하면 실험실이 나온다. 크롬은 chrome://flags를 입력하면된다. 이 곳에서 Autoplay 정책을 찾아보면 기본으로 Default로 되어있다. 사용자 제스쳐 필요 없음을 선택해주고 브라우저를 재시작 해주면 자동으로 재생이된다.

[Arduino] - 시리얼 통신을 이용한 디스플레이 오토피벗 구현 (피버시노 v1.0)

Image
시작하며 인텔 그래픽을 사용하는 컴퓨터는 ctrl + alt + 방향키로 디스플레이 화면을 돌릴 수 있다. 하지만 지포스 같은 외장그래픽 사용자는 컨트롤 패널에서 직접 설정해주어야만 가능하다. 모니터를 물리적으로 회전시키면 디스플레이 화면도 회전시켜주는 무언가가 필요하다. 그래서 생각한 것이 피버시노 프로젝트 이 프로젝트의 목적은 피벗 모니터의 디스플레이 화면을 자동으로 회전 시키는 것에 있다. 물론 시중에 이러한 오토피벗 기능을 내장한 모니터가 판매되고 있지만 전문가용이거나 대부분 고가의 제품들이다. 이 장비를 이용하면 오토피벗 기능이 없는 저렴한 모니터에서 추가적인 설정 없이 모니터를 돌리기만 해도 아두이노가 대신 디스플레이를 회전시켜준다. 아두이노, 가속도센서, 파이썬 만으로 구현 할 수 있으며 소형화도 가능하다. 하드웨어 이 프로젝트에서 사용한 가속도 센서는  MMA7361 이다. 사용방법이 궁금하다면 라이브러리에 예제가 포함되어있다. 아두이노 우노에 적층 할 수 있도록 만들었다. 각 핀의 이름은 다음과 같다. 5V, 3V3, GND, g-Selec(10pin), selfTest(12pin) x(A0pin), y(A1pin), z(A2pin), Sleep(13pin), 0g(11pin), 전원은 5V를 사용하였다. 본인이 사용할 핀들만 연결해주어도 된다. 아두이노 코드 이 프로그램은 현재 상태를 가속도 센서로 감지하여 변화하였을때 시리얼 값을 출력한다. 작동원리는 P[0]에는 과거의 값이 P[1]에는현재의 값이 지속적으로 저장된다. 이 두 값을 아두이노가 반복적으로 비교 하여 시리얼 신호를 보낼지 말지를 결정한다. 이러한 구조를 가지게 된 이유는 상태가 변화하지 않고 있을 때에도 신호를 보내게 되면 수신측(컴퓨터)에서 지속적으로 처리를 해주어야 하기 때문에 자원의 낭비가 발생하게된다. 자원의 낭비는 곧 성능 하락으로 이어지기 때문에 필요한 상황에서만 작동하도록 해야

[모니터] - 베사홀 없는 모니터 세로로 쓰기

Image
모니터를 돌려서 사용하는 일이 많기 때문에 주모니터에 데스크암을 장착해 사용하고 있다. 문제는 계속 돌려서 쓰다보니 화면 전환도 귀찮고 보조 모니터도 아니고 주 모니터가 더 크기 때문에 계속 돌려쓰기가 불편했다. 하지만 사용중인 BenQ EW2440 모니터는 기본적으로 틸트 기능은 있지만 피벗 기능이 없는데, 어찌나 튼튼한지 단 1도도 돌릴 수 없고 베사홀도 없다. 4년정도 된 모니터인데 해를 거듭 할 수 록 아쉬운점이 이만저만이 아니였다. 받침대를 이용해 벽쪽에 붙이는 것이 가장 튼튼한 방법이였지만 자리도 없고 가뜩이나 찬 바람이 숭숭 들어오는 벽에 구멍을 뚫을 용기도 없었다. 그리하여 2단 책꽂이를 책상위에 올려놓고 'L' 브라켓을 이용해 모니터를 고정시키는 방벅을 생각해 냈다. 하지만 모니터에 당장 사용할 수 있는 브라켓이 시중에 팔고 있을리 없었고 주문제작을 해야만 했다. 별 수 없이 대충 집에서 모니터 받침대에 달려있는 브라켓과 같은 사이즈의 무쇠 플레이트를 여러개 이용해 만들었다. 당장은 이렇게 쓰기로 하고 주문제작을 하던지 내가 직접 만들던지 해야겠다.

[Arduino] - Gcode Draw 만들기

Image
집에 나뒹구는 부품들 소진도 할 겸 시작한 프로젝트다. 사진에 있는 ipTime과 The Style보면 알겠지만 정상적인 녀석은 아니다. 이 프로젝트에 사용하려던 모터 드라이버는 l293d 우노 쉴드 였는데, 생각보다 발열도 심하고 전원도 자꾸 나가서 a4988로 바꾸게 되었다. cnc v4 (Nano shield) 저렴하고 매력적인 보드 Arduino nano cnc v4 shield 다. 이 쉴드는 a4988를 이용해 스텝모터를 구동 시킬 수 있게 해준다. 주의사항은  인가 전원은 12V를 넘지기 않아야하고,  쉴드에 a4988를 잘못된 방향으로 장착하면 회로가 타버린다. 코드는 nano cnc v4 shield의 기본 예제 가 인터넷에 올라와 있다. 읽기 귀찮은 사람들은 이미 훌륭하게 편집된 코드들이 많기때문에 걱정하지 않아도 된다. 참고로 인터넷 상에 떠도는 소스 코드들 대부분이 우노를 기반으로 작성되어 있다. 때문에 도전 할 거면 우노를 추천한다. 나는 나노를 좋아하기 때문에 나노를 선택했다. a4988 나노의 cnc 쉴드는 우노의 cnc 쉴드가 Arduino와 a4988가 연결되는 핀 넘버가 다르다. Nano cnc shield X축 DIR = 2 STEP = 5 Y축 DIR = 3 STEP = 6 Z축 DIR = 4 STEP = 7 우노 cnc 쉴드랑은 DIR과 STEP의 핀 번호가 반대다. Uno cnc shield X축 DIR = 5 STEP = 2 Y축 DIR = 6 STEP = 3 Z축 DIR = 7 STEP = 4 로 되어있다. ENABLE은 8번 핀으로 둘다 동일하다. 사실 기판에 회로가 전부 보이기 때문에 사다리타기 만 잘 하면 된다. 작동 영상 코드가 완성되지 않았기 때문에 출력은 아직이지만 gcode를 받아 작동하는 모습은 볼 수 있다.