MEMS 마그네토미터 작동 원리와 데이터 가져오는 방법에 대한 자세한 내용은 저의 MEMS 센서 튜토리얼을 참조하세요.
프로세싱 IDE 부분
여기서는 먼저 시리얼 포트에서 들어오는 헤딩 값을 수신합니다. 이 방법에 대한 자세한 내용은 저의 아두이노와 프로세싱 튜토리얼을 참조하세요.
나침반은 실제로 이미지이며, 더 정확히 말하면 프로세싱 IDE에 로드된 여러 투명 이미지로 구성됩니다. 이미지는 스케치의 작업 디렉토리에 위치해야 합니다. draw() 섹션에서 image() 함수를 사용해 배경 이미지(선택 사항, 단순 색상 배경도 가능)를 로드합니다. 그런 다음 rotateZ() 함수를 사용해 헤딩 값으로 나침반 이미지를 회전시킵니다. 그 위에 나침반 화살표 이미지를 로드합니다.
프로세싱 IDE 코드는 다음과 같습니다:
/* 아두이노 나침반
* by Dejan Nedelkovski,
* www.HowToMechatronics.com
*/
import processing.serial.*;
import java.awt.event.KeyEvent;
import java.io.IOException;
Serial myPort;
PImage imgCompass;
PImage imgCompassArrow;
PImage background;
String data = "";
float heading;
void setup() {
size(1920, 1080, P3D);
smooth();
imgCompass = loadImage("Compass.png");
imgCompassArrow = loadImage("CompassArrow.png");
background = loadImage("Background.png");
myPort = new Serial(this, "COM4", 115200); // 시리얼 통신 시작
myPort.bufferUntil('\n');
}
void draw() {
image(background, 0, 0); // 배경 이미지 로드
pushMatrix();
translate(width/2, height/2, 0); // 좌표계를 화면 중앙으로 이동해 회전이 중앙에서 일어나게 함
rotateZ(radians(-heading)); // Z축 기준 나침반 회전
image(imgCompass, -960, -540); // 나침반 이미지 로드, 좌표계가 이동했으므로 -960x, -540y(화면 크기 절반)에 이미지 배치
popMatrix(); // 좌표계를 원래 0,0,0 위치로 복원
image(imgCompassArrow, 0, 0); // popMatrix()로 인해 rotateZ() 영향을 받지 않는 나침반 화살표 이미지 로드
textSize(30);
text("Heading: " + heading, 40, 40); // 화면에 헤딩 값 출력
delay(40);
}
// 시리얼 포트에서 데이터 읽기 시작
void serialEvent(Serial myPort) {
data = myPort.readStringUntil('\n'); // 시리얼 포트에서 데이터 읽어 문자열 변수 "data"에 저장
heading = float(data); // 문자열 값을 float로 변환
}