c 공부 2024.04.15
G-NSDMG-023 경사계 센서
핵심 특징 및 사용 방법 요약:
특징:
- 고정밀도: 매우 정밀한 기울기 측정이 가능.
- 다양한 출력 옵션: 디지털 (RS232), 아날로그 (전압, 전류), PWM, 스위치 및 CANopen 출력 옵션을 제공.
- 환경 보호: 견고한 알루미늄 하우징과 IP 67/68 등급으로 먼지와 물로부터 보호.
- 온도 보상: 광범위한 온도 범위에서도 정확도를 유지할 수 있게 도와주는 온도 보상 기능이 탑재되어 있다.
사용 방법:
- 설치: 센서는 측정하려는 축에 맞추어 설치해야 하며, 견고한 연결을 위해 M12 male 커넥터를 사용.
- 전원 연결: 센서는 10V에서 30VDC 사이의 전원이 필요하다. 해당 전원을 연결하여 센서를 작동.
- 데이터 읽기 및 설정 조정:
- 디지털 데이터 (RS232): 컴퓨터나 다른 디지털 장치로 직접 연결하여 데이터를 읽을 수 있다.
- 아날로그 데이터: 기울기에 따라 변하는 전압 또는 전류 신호를 출력하여, 간단한 측정 장비로도 읽을 수 있다.
- CANopen: 산업 네트워크를 통해 여러 장치와의 통신이 가능하여 복잡한 시스템에서도 효율적으로 활용할 수 있다.
D-시리즈 경사계는 색상 구성표를 사용하여 커넥터의 배선을 나타내며 이는 특히 올바른 설치 및 연결을 보장하는 데 유용. 색상 코딩이 사용되는 방법은 다음과 같다.
RS 232 인터페이스 및 아날로그 출력:
+Ub(양극 전원 공급 장치)
: 흰색
RxD(Rx 직렬 신호 RS 232 입력)
: 갈색
TxD(Tx 직렬 신호 RS232 출력)
: 녹색
GND(접지 공급)
: 노란색
XOut(X축 출력)
: 회색
SGND(신호 접지 공급 장치)
: 분홍색
YOut(Y축 출력)
: 파란색
NC(연결 없음)
: 연결되지 않음
CANopen 인터페이스:
+Ub(양극 전원 공급 장치)
: 흰색
NC(접속 없음)
: 갈색
NC(연결 없음)
: 녹색
GND(접지 공급)
: 노란색
CANout(CAN 저출력)
: 회색
CANgnd(CAN 접지 공급)
: 분홍색
CANout(CAN 고출력)
: 파란색
NC(연결 없음)
: 연결되지 않음
D-시리즈 경사계 데이터시트의 “주문 정보” 섹션에서는 특정 기능 및 구성을 포함하여 주문할 수 있는 다양한 경사계 모델에 대한 세부 정보를 제공한다. 이 섹션은 잠재 구매자가 필요에 따라 적절한 모델을 선택하는 데 필수적.
제공된 주문 정보는 다음과 같다.
부품 번호 및 설명
D-시리즈 경사계의 각 모델에는 범위, 인터페이스 및 출력 유형을 나타내는 특정 부품 번호가 있다.
예를 들어:
G-NSDMG-015
: ±5° 범위의 경사계, 10 ~ 30 VDC 전원 공급 장치, 전압 출력이 있는 RS232 인터페이스.
G-NSDMG-017
: 위와 비슷하지만 전류 출력이 있다.
G-NSDMG-030
: 이 모델은 최대 ±5°까지 측정하지만 RS232 대신 CANopen 출력 인터페이스를 사용.
부품 번호는 지원하는 출력 범위와 유형에 따라 늘어남. ±15° 및 ±30°와 같은 더 넓은 범위의 경우 유사한 출력 옵션을 갖춘 해당 모델이 있다.
- 전압 출력(RS232)
- 전류 출력
- PWM 출력
- 스위치 출력
- CANopen 인터페이스
부속품
또한 다른 장치나 시스템에 대한 설치 및 연결을 용이하게 하기 위해 다양한 유형과 길이의 커넥터 및 케이블과 같은 경사계에 사용할 수 있는 액세서리가 있다.
G-NSDMG-023 경사계 센서 아두이노와 통합
필요한 재료
- D-Series 경사계 센서
- 아두이노 보드 (예: 아두이노 우노)
- 적절한 인터페이스 케이블 및 연결 부품
- 컴퓨터 (아두이노 IDE 설치 필요)
준비 단계
- 센서 및 아두이노 연결:
- 아날로그 출력의 경우: 센서의 전압 출력을 아두이노의 아날로그 입력 핀에 연결.
- 디지털 출력의 경우 (RS232): RS232를 TTL 신호로 변환하는 컨버터가 필요할 수 있다. 이 컨버터를 통해 센서를 아두이노의 디지털 핀에 연결.
- 전원 공급: 센서와 아두이노에 적절한 전원을 공급. 센서는 일반적으로 10V에서 30VDC를 요구하므로 별도의 전원 공급 장치가 필요할 수 있다.
프로그래밍
아날로그 출력 사용 시
1
2
3
4
5
6
7
8
9
10
11
12
void setup() {
Serial.begin(9600); // 시리얼 통신 시작
pinMode(A0, INPUT); // 아날로그 핀을 입력으로 설정
}
void loop() {
int sensorValue = analogRead(A0); // 센서에서 읽은 아날로그 값을 저장
float angle = map(sensorValue, 0, 1023, -30, 30); // 센서 값의 범위를 각도 범위로 매핑
Serial.print("Angle: ");
Serial.println(angle);
delay(1000); // 1초 대기
}
이 코드는 센서로부터 아날로그 값을 읽어 각도로 변환한 후 시리얼 모니터에 출력.
디지털 출력 사용 시 (RS232)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <SoftwareSerial.h>SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
mySerial.begin(9600); // 센서의 baud rate에 맞춰 시작
Serial.begin(9600); // 디버그를 위한 시리얼 통신 시작
}
void loop() {
if (mySerial.available()) {
String data = mySerial.readString(); // 센서로부터 데이터 읽기
Serial.print("Received data: ");
Serial.println(data);
}
delay(1000); // 1초 대기
}
이 코드는 센서로부터 디지털 데이터를 받아서 시리얼 모니터에 출력.
센서의 아날로그 출력에서 사용하는 map
함수의 값 0, 1023, -30, 30
은 아두이노에서 아날로그 입력을 처리하는 방식과 관련이 있다. 아두이노는 10비트 아날로그-디지털 변환기(ADC)를 사용하여 아날로그 신호를 디지털 값으로 변환. 이는 아날로그 신호를 0에서 1023 범위의 디지털 값으로 매핑한다는 것을 의미.
0
과1023
은 아날로그 입력 핀에서 읽을 수 있는 최소값과 최대값을 나타냄. 즉, 0V는 0으로, 최대 입력 전압 (일반적으로 5V)는 1023으로 변환된다.30
과30
은 센서의 측정 범위를 나타낸다. 이 경우, 경사계 센서는 -30도에서 +30도의 범위를 측정할 수 있다.
map
함수는 이러한 두 범위를 서로 연결함. 함수는 첫 번째 범위에서의 값을 읽고, 그 값을 두 번째 범위의 해당 값으로 변환. 예를 들어, 센서의 출력이 중간값인 512라면, 이는 0도에 해당될 것. 왜냐하면 512는 0과 1023의 중간값이고, 이것을 -30도에서 +30도로 매핑할 때 0도가 중간값이 되기 때문이다.
이렇게 map
함수를 사용하면 센서의 아날로그 출력을 실제 각도로 변환하여 쉽게 이해하고 사용할 수 있다.
테스트 및 디버깅
- 아두이노 IDE의 시리얼 모니터를 사용하여 센서로부터 받은 데이터를 확인.
- 코드 및 연결을 점검하여 모든 구성 요소가 정확히 작동하는지 확인.
이 단계들을 통해 아두이노와 D-Series 경사계 센서를 성공적으로 통합하고 원하는 프로젝트에 활용할 수 있습니다. 실험을 통해 최적의 설정을 찾아가야함.
이 센서의 각도를 찾는 알고리즘
x가 4일때 y는 0
x가 20일때 y는 100
방정식
두 점 (4, 0)
과 (20, 100)
을 통해 직선의 방정식을 구하고, 이를 사용하여 계산하는 과정은 아래에 있다.
1
2
3
4
5
6
7
8
9
10
11
12
기울기(m) = (y2 - y1) / (x2 - x1)
= (100 - 0) / (20 - 4)
= 100 / 16
= 6.25
이제 한 점을 대입하여 y 절편(b)을 구할 수 있다. 점 (4, 0)을 대입.
0 = 6.25 * 4 + b
b = 0 - 25
b = -25
따라서 직선의 방정식은 y = 6.25x - 25이다.
알고리즘 c언어
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/******************************************************************************
made by Park ji woon
04- 15 -2024
Ver. v12.123
*******************************************************************************/
#include <stdio.h>
/******************* Funcition List ******************/
// 각도를 계산하는 함수
double calculate_angle(int x) {
int x1 = 20, y1 = -30; // 첫 번째 점의 좌표를 설정
int x2 = 4, y2 = 30; // 두 번째 점의 좌표를 설정
// 기울기 계산
double a = (double)(y2 - y1) / (x2 - x1); // (y2 - y1)를 (x2 - x1)로 나누어 기울기를 계산
// y절편 계산
double b = y1 - a * x1; // y = ax + b에서 b를 계산
// 주어진 x 값에 대한 각도 y 계산
double y = a * x + b; // 주어진 x 값에 대한 y 값을 계산하여 각도를 구함
return y; // 각도 반환
}
/******************************************
Main program
*******************************************/
int main() {
int x; // x 값을 입력 받을 변수 선언
printf("Enter x value: "); // 사용자에게 x 값 입력 요청
scanf("%d", &x); // 사용자로부터 x 값 입력 받음
double angle = calculate_angle(x); // calculate_angle 함수를 호출하여 각도 계산
printf("The angle at x = %d is %.2f degrees\n", x, angle); // 계산된 각도 출력
return 0; // 프로그램 종료
}
협업 GUI 기반 도구
- git lens
- source tree
cli를 쓰던 gui를 쓰던 깃컨벤션을 지키면서 commit을 해야한다.
일단 git을 알아야하고 github로 협업하는 방법이 우선이 되어야 저러한 도구도 사용이 가능할듯하다.