LoRa 모듈 E22-900T22S Breakout Board 설계 2

Image
지난번 설계 에서 두 가지 업데이트 사항이 있다. 첫 번째로 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

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


지난번에 모니터 상태에 따라 디스플레이 출력 방향을 자동으로 바꿔주는 오토피벗 장치를 만들어보았다.
테스트 용이라 크기도 크기지만 케이블이 자꾸 결려서 파손위험이 있었다.
이번에 만든 피버시노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 가 초록색으로 점등되면 성공이다.
이후로는 아두이노 프로그램이 BlunoLink를 통해 BlunoBeetle로 업로드된다.
참고로 수신(BlunoLink)과 송신(BlunoBeetle) 디바이스가 완벽히 LINK되는데 까지 5초 정도 걸린다.

  • 하드웨어

이번에 사용한 가속도 센서는 MPU6050이다.
여러 번 사용했던 부품들이라 조금 지저분하다.
핀배열은 SCL to SCL(A5), SDA to SDA(A4), INT to D2



2개의 구멍은 숨구멍이 아니라 리셋과 부트 버튼이다.

  • 아두이노 소스코드
소스코드는 센서 라이브러리와 변수명 정도가 조금 바뀌었다.
추가로 센서값을 알기쉬운 값으로 맵핑하여 사용했다.
파이썬은 바뀐점이 없기때문에 저번에 만든 프로그램을 그대로 사용하면된다.

"피벗이노"라고 이름을 붙여봤다.
어감이 사투리 같지만 그래서 더 마음에든다 "피버시노"
/* 
|| @ file Pivot_Ino_V1.1.ino
|| @ author Heejoong 
|| # 2019-01-16 ~
*/
#include <MPU6050.h>
#define commandLine_OPEN "Rotate <"
#define commandLine_CLOSE ">"
//default I2C address 0x68
MPU6050 accelgyro;
int value = 0;
int16_t ax, ay, az;
int16_t gx, gy, gz;
const char * P_array[2];
const char * RotateMonitor(int x);
void setup() {
    Wire.begin();
    Serial.begin(38400);
    Serial.println("Initializing I2C devices...");
    accelgyro.initialize();
}
void loop() {
    accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
    int mapped_ax = map(ax, -32768+32767-180+180);
    //int mapped_ay = map(ay, -32768, +32767, -180, +180);
    //int mapped_az = map(az, -32768, +32767, -180, +180);
    P_array[0= RotateMonitor(mapped_ax);
    if(P_array[value] != P_array[0]) {
      Serial.print(commandLine_OPEN);
      Serial.print(RotateMonitor(mapped_ax));
      Serial.println(commandLine_CLOSE);
      value = 0;
    }
    else { 
      P_array[1= RotateMonitor(mapped_ax);
      value = 1;
    }
    delay(100);
}
const char * RotateMonitor(int x){
  if( x > -120 && x < -60) { return "Left"; }            //270 degrees
  else if(x > 60 && x < 120) { return "Right"; }       //90  degrees
  else { return "Idle"; }                             //0  degrees
}
cs


집에있는 프라이머랑 검정 스프레이로 색을 입혀봤는데 어두운 회색이 나왔다.
분명히 뚜껑색과 같은 검정색이라고 적혀있지만 같은색이 아니였다.
사기당한 기분이다.
그래도 반짝 반짝 코팅 된 느낌은 만족스럽다.



크기가 확실히 작아져서 모니터 하단 빈공간에 장착했다.
모니터켜면 같이 켜지고 끄면 같이 꺼지고 USB가 있는 모니터라면 전원을 쉽게 공급 받겠지만 이 모니터는 USB가 없다. USB가 없어도 MHL 지원 모니터는 HDMI로 부터 전원을 받을 수 있다.

  • 마무리
아직은 외부 프로그램(display.exe)을 함께 사용중이다.
다음에는 외부 프로그램 없이 파이선 하나로 해결을 보려고 한다.


  • 업데이트 버전
=====================================================
피버시노 v1.0
피버시노 v1.1
피버시노 v1.1.1
피버시노 v1.1.2
피버시노 v1.1.3

Comments

Popular posts from this blog

[POE] - 패스 오브 엑자일 획득키 F 의 사용법 (Path of Exile)

[Arduino] - HC-06를 이용해 PC 와 Arduino 블루투스 연결

[Python] - 블루투스 모듈 HC-06의 MAC 주소를 이용하여 통신 포트 찾기