제조사 | OEM |
---|---|
브랜드 | 에듀이노 |
판매가 | 55,000원 |
적립금 | 550원 |
자체상품코드 | C-59 |
상품요약정보 | 수압센서 MS5540-CM |
국내·해외배송 | 국내배송 |
배송방법 | 택배 |
수량 |
COMMENT |
(최소주문수량 1개 이상 / 최대주문수량 0개 이하)
사이즈 가이드
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181 |
#include <SPI.h>
// generate a MCKL signal pin
const int clock = 9;
void resetsensor() //this function keeps the sketch a little shorter
{
SPI.setDataMode(SPI_MODE0);
SPI.transfer(0x15);
SPI.transfer(0x55);
SPI.transfer(0x40);
}
void setup() {
Serial.begin(9600);
SPI.begin(); //see SPI library details on arduino.cc for details
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV32); //divide 16 MHz to communicate on 500 kHz
pinMode(clock, OUTPUT);
delay(100);
}
void loop()
{
TCCR1B = (TCCR1B & 0xF8) | 1 ; //generates the MCKL signal
analogWrite (clock, 128) ;
resetsensor(); //resets the sensor - caution: afterwards mode = SPI_MODE0!
//Calibration word 1
unsigned int result1 = 0;
unsigned int inbyte1 = 0;
SPI.transfer(0x1D); //send first byte of command to get calibration word 1
SPI.transfer(0x50); //send second byte of command to get calibration word 1
SPI.setDataMode(SPI_MODE1); //change mode in order to listen
result1 = SPI.transfer(0x00); //send dummy byte to read first byte of word
result1 = result1 << 8; //shift returned byte
inbyte1 = SPI.transfer(0x00); //send dummy byte to read second byte of word
result1 = result1 | inbyte1; //combine first and second byte of word
Serial.print("Calibration word 1 = ");
Serial.print(result1,HEX);
Serial.print(" ");
Serial.println(result1);
resetsensor(); //resets the sensor
//Calibration word 2; see comments on calibration word 1
unsigned int result2 = 0;
byte inbyte2 = 0;
SPI.transfer(0x1D);
SPI.transfer(0x60);
SPI.setDataMode(SPI_MODE1);
result2 = SPI.transfer(0x00);
result2 = result2 <<8;
inbyte2 = SPI.transfer(0x00);
result2 = result2 | inbyte2;
Serial.print("Calibration word 2 = ");
Serial.print(result2,HEX);
Serial.print(" ");
Serial.println(result2);
resetsensor(); //resets the sensor
//Calibration word 3; see comments on calibration word 1
unsigned int result3 = 0;
byte inbyte3 = 0;
SPI.transfer(0x1D);
SPI.transfer(0x90);
SPI.setDataMode(SPI_MODE1);
result3 = SPI.transfer(0x00);
result3 = result3 <<8;
inbyte3 = SPI.transfer(0x00);
result3 = result3 | inbyte3;
Serial.print("Calibration word 3 = ");
Serial.print(result3,HEX);
Serial.print(" ");
Serial.println(result3);
resetsensor(); //resets the sensor
//Calibration word 4; see comments on calibration word 1
unsigned int result4 = 0;
byte inbyte4 = 0;
SPI.transfer(0x1D);
SPI.transfer(0xA0);
SPI.setDataMode(SPI_MODE1);
result4 = SPI.transfer(0x00);
result4 = result4 <<8;
inbyte4 = SPI.transfer(0x00);
result4 = result4 | inbyte4;
Serial.print("Calibration word 4 = ");
Serial.print(result4,HEX);
Serial.print(" ");
Serial.println(result4);
//now we do some bitshifting to extract the calibration factors
//out of the calibration words;
long c1 = (result1 >> 1) & 0x7FFF;
long c2 = ((result3 & 0x003F) << 6) | (result4 & 0x003F);
long c3 = (result4 >> 6) & 0x03FF;
long c4 = (result3 >> 6) & 0x03FF;
long c5 = ((result1 & 0x0001) << 10) | ((result2 >> 6) & 0x03FF);
long c6 = result2 & 0x003F;
Serial.print("c1 = ");
Serial.println(c1);
Serial.print("c2 = ");
Serial.println(c2);
Serial.print("c3 = ");
Serial.println(c3);
Serial.print("c4 = ");
Serial.println(c4);
Serial.print("c5 = ");
Serial.println(c5);
Serial.print("c6 = ");
Serial.println(c6);
resetsensor(); //resets the sensor
//Pressure:
unsigned int presMSB = 0; //first byte of value
unsigned int presLSB = 0; //last byte of value
unsigned int D1 = 0;
SPI.transfer(0x0F); //send first byte of command to get pressure value
SPI.transfer(0x40); //send second byte of command to get pressure value
delay(35); //wait for conversion end
SPI.setDataMode(SPI_MODE1); //change mode in order to listen
presMSB = SPI.transfer(0x00); //send dummy byte to read first byte of value
presMSB = presMSB << 8; //shift first byte
presLSB = SPI.transfer(0x00); //send dummy byte to read second byte of value
D1 = presMSB | presLSB; //combine first and second byte of value
Serial.print("D1 - Pressure raw = ");
Serial.println(D1);
resetsensor(); //resets the sensor
//Temperature:
unsigned int tempMSB = 0; //first byte of value
unsigned int tempLSB = 0; //last byte of value
unsigned int D2 = 0;
SPI.transfer(0x0F); //send first byte of command to get temperature value
SPI.transfer(0x20); //send second byte of command to get temperature value
delay(35); //wait for conversion end
SPI.setDataMode(SPI_MODE1); //change mode in order to listen
tempMSB = SPI.transfer(0x00); //send dummy byte to read first byte of value
tempMSB = tempMSB << 8; //shift first byte
tempLSB = SPI.transfer(0x00); //send dummy byte to read second byte of value
D2 = tempMSB | tempLSB; //combine first and second byte of value
Serial.print("D2 - Temperature raw = ");
Serial.println(D2); //voila!
//calculation of the real values by means of the calibration factors and the maths
//in the datasheet. const MUST be long
const long UT1 = (c5 << 3) + 20224;
const long dT = D2 - UT1;
const long TEMP = 200 + ((dT * (c6 + 50)) >> 10);
const long OFF = (c2 * 4) + (((c4 - 512) * dT) >> 12);
const long SENS = c1 + ((c3 * dT) >> 10) + 24576;
const long X = (SENS * (D1 - 7168) >> 14) - OFF;
long PCOMP = ((X * 10) >> 5) + 2500;
float TEMPREAL = TEMP/10;
float PCOMPHG = PCOMP * 750.06 / 10000; // mbar*10 -> mmHg === ((mbar/10)/1000)*750/0
Serial.print("Real Temperature in C = ");
Serial.println(TEMPREAL);
Serial.print("Compensated pressure in mbar = ");
Serial.println(PCOMP);
Serial.print("Compensated pressure in mmHg = ");
Serial.println(PCOMPHG);
//2-nd order compensation only for T < 20°C or T > 45°C
long T2 = 0;
float P2 = 0;
if (TEMP < 200)
{
T2 = (11 * (c6 + 24) * (200 - TEMP) * (200 - TEMP) ) >> 20;
P2 = (3 * T2 * (PCOMP - 3500) ) >> 14;
}
else if (TEMP > 450)
{
T2 = (3 * (c6 + 24) * (450 - TEMP) * (450 - TEMP) ) >> 20;
P2 = (T2 * (PCOMP - 10000) ) >> 13;
}
if ((TEMP < 200) || (TEMP > 450))
{
const float TEMP2 = TEMP - T2;
const float PCOMP2 = PCOMP - P2;
float TEMPREAL2 = TEMP2/10;
float PCOMPHG2 = PCOMP2 * 750.06 / 10000; // mbar*10 -> mmHg === ((mbar/10)/1000)*750/06
Serial.print("2-nd Real Temperature in C = ");
Serial.println(TEMPREAL2);
Serial.print("2-nd Compensated pressure in mbar = ");
Serial.println(PCOMP2);
Serial.print("2-nd Compensated pressure in mmHg = ");
Serial.println(PCOMPHG2);
}
delay(5000);
}
|
cs |
상품의 사용후기를 작성해주세요.
글읽기 권한이 없습니다.
"19세 미만의 미성년자"는 출입을 금합니다!
no | photo | title | write | date | hit | point |
---|---|---|---|---|---|---|
3 | 한 아두이노에 두개이상 쓰려면 어떻게 해야하나요? [1] | 최**** | 2022-08-15 | 617 | ||
2 | 어떻게 사용해야하나요 기술문의 남겨도 답장도 없으시고... [1] | 김**** | 2018-04-15 | 733 | ||
1 | 어케 사용해야되나여 [1] | 서**** | 2017-07-14 | 741 |
상품에 대해 궁금한 점을 해결해 드립니다.
글읽기 권한이 없습니다.
"19세 미만의 미성년자"는 출입을 금합니다!
no | category | title | write | date | hit |
---|---|---|---|---|---|
15 | 재입고 문의 [1] | 박남호 | 2024-06-17 | 135 | |
14 | 예제 코드에서 압력값이 PCOMP 맞나요? [1] | 아두린이 | 2022-11-03 | 448 | |
13 | 주신 코드에 별다른 수정 없이디지털 입출력 위치 변경 해도 될까요? [1] | 아두린이 | 2022-10-04 | 417 | |
12 | 한 아두이노 보드에 두 개 수압 센서 연결 기술문의 [1] | 최보규 | 2022-08-17 | 404 | |
11 | MS5540과 MS5540-CM은 다른건가요? [1] | 바람가을 | 2022-04-12 | 221 |