지난번 설계 에서 두 가지 업데이트 사항이 있다. 첫 번째로 3.3V 로 로직 컨버터를 거치지 않고 직접 통신할수 있는 포트를 구성하였다. 이 포트를 통해 3.3V 동작의 MCU를 사용할때 좀 더 빠르게 회로를 구성 할수 있을것으로 기대한다. 두 번째로 동작 전압 레벨이 서로 다른 MCU 와 Lora 모듈이 통신할때 사용할 기준전압을 직접 인가 할 수 있도록 하였다. 보드에는 위 와같은 점퍼가 주어지는데 3.3V 나 5V 로 점프 시키지 않을 경우 VREF 핀에 사용할 소스전압을 직접 인가해 주어야한다. 특수한 경우가 아니라면 Vref를 사용하는일은 없을것 같다. 위사 진들은 이번에 제작한 테스트 모듈이다. 왼쪽은 E22-900T22S 모듈이고 오른쪽은 ATmega328P/PB 3.3V 8Mhz 보드를 준비했다. 오른쪽의 보드는 ATmega328P/PB 를 모두 장착하여 사용할 수 있도록 설계했다. E22-900T22S 보드의 전체 회로는 다음과 같다. 동작 전압 레벨이 서로 다른 장치와 통신 할 수 있도록 레벨 컨버터를 추가 하였고, 핀 헤더를 장착하여 다른 MCU 보드와 통신하거나 점퍼를 수정해서 USB 시리얼 통신을 할수 있도록 했다. 모듈의 테스트는 mischianti의 E22 라이브러리 를 사용했다. 정리가 아주 잘 되어있는 라이브러리로 생각된다. 아래 코드는 라이브러리에 포함된 시리얼 입력을 LoRa 통신으로 전송하는 예제이다. Lora ATmega328p AUX D3 RX D4 TX D5 M1 D6/GND M0 D7/GND 송신측 코드 #include "Arduino.h" #include "LoRa_E22.h" LoRa_E22 e22ttl(4, 5, 3, 7, 6); void setup() { Serial.begin(9600); delay(500); // Startup all pins and UART e22ttl.begin(); Serial.println(&q
Get link
Facebook
X
Pinterest
Email
Other Apps
[Arduino] - 시리얼 통신을 이용한 디스플레이 오토피벗 구현 (피버시노 v1.0)
Get link
Facebook
X
Pinterest
Email
Other Apps
-
시작하며
인텔 그래픽을 사용하는 컴퓨터는 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]에는현재의 값이 지속적으로 저장된다.
이 두 값을 아두이노가 반복적으로 비교 하여 시리얼 신호를 보낼지 말지를 결정한다.
이러한 구조를 가지게 된 이유는 상태가 변화하지 않고 있을 때에도 신호를 보내게 되면 수신측(컴퓨터)에서 지속적으로 처리를 해주어야 하기 때문에 자원의 낭비가 발생하게된다.
자원의 낭비는 곧 성능 하락으로 이어지기 때문에 필요한 상황에서만 작동하도록 해야한다.
예를 들어 현재 y값을 RotateMonitor 함수에 대입하면 상태에 따라 결과 값이 나온다.
그 값을 "Idle" 이라 하자
1. "Idle" 은 P[0]에 저장이 된다.
2. 현재 i = 0이기 때문에 P[i]와 P[0]은 둘다 "Idle", 조건문 실행 X
3. P[1]에 현재 상태 값을 저장하고, i = 1이 된다.
이 작업을 P[i]와 P[0]이 다른 상태 값을 가질때 까지 반복한다.
4. 모니터를 왼쪽으로 회전시킨다.
5. 현재 i 값은 1이고 P[1]의 상태 값은 "Idle" 이다.
하지만 현재 모니터를 왼쪽으로 회전시켰기 때문에 P[0]의 상태 값은 "Left"가 된다.
6. P[i]와 P[0]의 상태 값이 서로 다르기 때문에 조건문이 실행된다.
다시 i = 0이 된다.
7. 상태 값이 시리얼 포트로 상태 값을 전송된다.
위의 과정을 반복하는 프로그램이며, 이 후의 과정은 컴퓨터에서 진행된다.
#include<AcceleroMMA7361.h>
#define commandLine_OPEN "Rotate <"
#define commandLine_CLOSE ">"
AcceleroMMA7361 accelero;
constchar* P[2];
constchar* RotateMonitor(int x);
int y;
int i =0;
void setup()
{
Serial.begin(9600);
accelero.begin(13, 12, 11, 10, A0, A1, A2); //(Sleep, selpTest, 0g, g-Select, x, y, z
accelero.setARefVoltage(5); //sets the AREF voltage to 5V
accelero.setSensitivity(LOW); //sets the sensitivity
다 되는데 화면만 안돌아가네여 display를 깔았는데 32랑 64가 있더라고여 전 c드라이브에 Program Files 에 넣어서 "C:\Program Files\display.exe /rotate:" + Monitor_ROTATE[direction 이렇게 썼는데 안되네요
파이썬 프로그램에서 아두이노와 시리얼 통신이 정상적으로 이루어지는지 확인해보세요. 경로가 정확하다면 display.exe 실행 부분이 문제가 아니라 통신문제일 수도 있습니다. 그리고 제 소스코드를 그대로 사용하셨다면 신경쓰셔야 할 변수는 display.exe 프로그램 경로와 COM 포트 넘버입니다. 참고하세요! :7
한국에 패스 오브 엑자일이 상륙하게 되면서 많은 사람들이 관심을 가지고 있다. 패스 오브 엑자일은 디아블로3가 기대에 미치지 못했던 플레이어들 사이에서는 디아블로2의 정신적 후속작으로 인정받고 있는 핵슬게임이다. 아직은 프리오픈 기간이지만 한국 서버가 생기면서 한국 플레이어들이 많아지고있다. 만약PC방과 같은 곳에서 한국 서버로 접속이 안되는 경우 내 문서 > my games 에 있는 Path of Exile 폴더를 지우고 실행하면된다. 채팅장에는 무수한 한글이 보이고 여러 질문들이 올라오는데 바로 아이템 획득 키인 F 키 이다. "아이템 획득키 어떻게 사용하는건가요?", "아이템이 먹어지지 않아요!", "아이템 어떻게 주워요?" "아이템 링크 어떻게 하나요?" 등 의 질문이 많이보인다. 사실 디아블로를 해본 사람들이라면 키 세팅도 크게 다르지 않기 때문에 적응하기에 쉽지만 그렇지 않은사람들도 있는것으로 보인다. 드롭된 아이템들을 확인할 수 있는 방법에는 크게 두 가지로 Alt 키 와 Z 키 가 있다. 우선 Alt 키 를 눌러 푸쉬온 방식으로 누르고 있을때만 드롭된 아이템들을 확인 하는 방법과 Z 키 를 이용해 푸쉬락 방식으로 한번 누르면 다음에 누를때 까지 강조효과가 지속되어 떨어져있는 아이템이나 오브젝트를 확인할 수 있는방법이 있다. 여기까지는 게임을 처음 접하는 사람들도 문제없이 인지하고 있다. 아이템 링크의 경우 패스 오브 엑자일에서는 Ctrl + Alt 를 누른상태에서 원하는 아이템을 클릭하면 채팅창에 올릴 수 있다. # 그럼 F 키는 어떻게 사용하나? 패스 오브 엑자일의 입력 설정 에서 확인해보면 F 키는 아이템 획득 키로 지정이 되어있다. 아마 이 옵션을 본 대다수의 플레이어가 F 키를 누르면 아이템이 인벤토리로 들어올 것으로 생각하는 것 같다. 이렇게 생각하는 원인은 요즘 온라인 게임들은 아주 편리하게 아이
아날로그 자이로 센서의 값을 블루투스 HC-06를 통해 컴퓨터로 전달 받을 수 있게 하려고 한다. 블루투스로 통신을 하기 위해서 지난번과 같은 문제 를 방지하기 위해 HC-06 의 baud rate를 115200로 변경해야한다. 115200로 사용해야 정상적으로 업로드가 된다. baud rate 수정 우선 아래의 코드를 아두이노에 업로드한다. #include SoftwareSerial BTSerial( 2 , 3 ); / / Tx:Digital 2pin, Rx:Digital 3pin void setup() { Serial.begin( 9600 ); BTSerial.begin( 9600 ); Serial.println( "Annajin AT" ); } void loop() { if (BTSerial.available()) Serial.write(BTSerial.read()); if (Serial.available()) BTSerial.write(Serial.read()); } Colored by Color Scripter cs AT 커맨드를 순서대로 입력한다. AT+BAUD8 을 입력하면 baud rate 가 115200로 바뀐다 다시 9600으로 바꾸려면 다음과 같이 수정하고 AT+BAUD4 를 입력하면 된다. void setup() { Serial.begin( 115200 ); BTSerial.begin( 115200 ); Serial.println( "Annajin AT" ); } cs HC-06 페어링 컴퓨터와 페어링을 하기 앞서 아두이노의 디지털 2번과 3번에 연결했던 HC-06의 TX, RX 핀을 디지털 0번 1번으로 옮겨준다. 여기까지 한 다음에 컴퓨터에 페어링을 해야한다. 블루투스 페
BlunoBeetle 버전 의 경우는 BlunoBeetle(피버시노) 과 BlunoLink(PC쪽 수신기) 가 무선을 해결해 주었기 때문에 PC가 직접 블루투스로 연결되지 않았다. 게다가 BlunoLink 의 시리얼 넘버도 한 자리로 잡혔었기 때문에 반쪽짜리 성공이였다. 하지만 지난번에 만든 블루투스 모듈(HC-06)을 이용한 피버시노 는 PC와 직접 블루투스로 연결된다. 초기 버전의 피버시노가 시리얼 넘버를 이용하여 통신포트를 찾았다면 이번에는 블루투스 장치의 MAC 주소를 이용하여 통신 포트를 찾아 보려고 한다. HC-06의 MAC 주소 알아내기 우선 블루투스 모듈의 MAC 주소를 알아내야한다. MAC 주소는 생각보다 어렵지 않게 알아낼 수 있는데 바로 장치관리자 에서 알아낼 수 있다. 이 방법 말고도 파이썬을 이용해서 알아내는 방법도 있다. 하지만 파이썬에서는 뭐가 MAC주소인지 알기 어려우니 장치관리자 에서 알아보는 것이 좋다. HC-06을 PC에 설치한 후 장치관리자에 보면 위와같이 2개의 직렬 포트가 열린것을 확인 할수 있다. 각각 송신과 수신이라고 보면 된다. 간혹 장치를 제거하고 재연결 했을때 두 포트의 역활이 바뀌는 경우도 있다. 재미있는건 한 포트에서만 MAC주소가 검출된다는 것이다. 내 경우에는 COM7으로 부터 아두이노의 시리얼 신호를 수신하는데, 바로 이 수신 포트만 MAC 주소를 가지고 있다. 참고로 HC-06의 패스워드는 "1234" 이다. 해당 포트의 속성 > 자세히 > Bluetooth Device Address 로 이동하면 나오는 값이 MAC주소이다. 뭔가 의심스러운 사람은 스마트폰과 연결해보면 쉽게 확인 할 수 있다. 아래 사진은 스마트폰에서 잡히는 MAC 주소이다. MAC 주소를 이용해 HC-06 통신 포트 찾기 장치관리자나 파이썬을 이용해 hwid(하드웨어ID) 를 찾아보면 다음과 같은 값을 확인 할 수 있다. 한 가지 아
이게 연결한 핀을 찾을수없다고 뜨는데요?
ReplyDelete연결된 핀을 확인해보세요. :7
Delete다 되는데 화면만 안돌아가네여 display를 깔았는데 32랑 64가 있더라고여 전 c드라이브에 Program Files 에 넣어서 "C:\Program Files\display.exe /rotate:" + Monitor_ROTATE[direction 이렇게 썼는데 안되네요
ReplyDelete파이썬 프로그램에서 아두이노와 시리얼 통신이 정상적으로 이루어지는지 확인해보세요. 경로가 정확하다면 display.exe 실행 부분이 문제가 아니라 통신문제일 수도 있습니다.
Delete그리고 제 소스코드를 그대로 사용하셨다면 신경쓰셔야 할 변수는 display.exe 프로그램 경로와 COM 포트 넘버입니다.
참고하세요! :7
This comment has been removed by the author.
Delete멋지십니다. 저는 안드로이드폰 Dock에 있는 HDMI Output 단자를 이용해 오래된 모니터에 연결해서 음악을 듣는(보는) 용도로 사용하는데 당연히 모니터는 피벗이 안됩니다. 이 경우는 어떤방식으로 구현이 가능할까요? 역시 아두이노로 가능할까요?
ReplyDelete