Posts

Showing posts from May, 2016

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

Bezier Curve 베지어 곡선 구현

Image
베지어 곡선 typedef struct { float x, y; } point;  CurvePoint.x = ControlPoints[0].x * (1.0 - t) * (1.0 - t) * (1.0 - t)   + ControlPoints[1].x * 3.0 * t * (1.0 - t) * (1.0 - t)   + ControlPoints[2].x * 3.0 * t * t * (1.0 -t )   + ControlPoints[3].x * t * t * t;  CurvePoint.y = ControlPoints[0].y * (1.0 - t) * (1.0 - t) * (1.0 - t)   + ControlPoints[1].y * 3.0 * t * (1.0 - t) * (1.0 - t)   + ControlPoints[2].y * 3.0 * t * t * (1.0 - t)   + ControlPoints[3].y * t * t * t; point 구조체 배열을 제어점 ControlPoints로 부터 얻어낸 곡선의 점들로 채우는 함수가 필요하며, 이함수의 호출에는 충분한 메모리가 할당되어야한다. 메모리가 부족하면 정상적으로 출력이 되지 않는다. ex)ControlPoints = (point *)malloc(sizeof(point)*n);       n은 점의 개수로 생각하면된다. 500정도면 어느정도 봐줄만한 곡선이 그려진다. ControlPoints[0]은 시작점 (P0), ControlPoints[1]은 첫번째 제어점 (P1) ControlPoints[2]는 두번째 제어점 (P2), ControlPoints[3]은 끝점 (P3) t는 매개변수로, 0 ≤ t ≤ 1 사이값을 갖는다. 0 ≤ i < n, delta = 1.0/n,  t =  i * delta 곡선의 모양은  제어점을 변경하여 조절할수 있으며, 베지어 곡선은 어떠한 경우에든지 항상 블록다각형(Convex Hull)내에 위치하게 된다. 시작점(P0)