BASIC4MCU | 질문게시판 | 아두이노에 대해
페이지 정보
작성자 마이크로질문 작성일2021-12-11 16:54 조회975회 댓글2건본문
int v; //속도int vmax; //최대 속도int Sigpin = 11 ; // 신호 입력 핀void setup (){Serial.begin ( 9600 );pinMode (Sigpin , INPUT);}void loop (){unsigned long T; // 주기double f; // 주파수char s [ 20 ]; // Serial 출력 Lengthvmax = 0 ;while (digitalRead (Sigpin));while ( ! digitalRead (Sigpin));T =pulseIn (Sigpin , HIGH) + pulseIn (Sigpin , LOW); // 주기 측정f = 1 / ( double ) T; // 주파수 측정v = int ((f * 1e6 ) /44.0 ); // 속도 측정vmax = max (v, vmax); // 속도의 Max값 측정sprintf (s, "% 3d km / h" , vmax); // Serial 출력Serial.println (s); // Serial 출력delay ( 500 ); // Delay 500m/s}v = int ((f * 1e6 ) /44.0 ); // 속도 측정sprintf (s, "% 3d km / h" , vmax); // Serial 출력이 2줄의 코드가 뜻하는 바를 잘 모르겠습니다 예를 들어 f*1e6/44.0이 왜 속도를 측정을 하는 것인가 그리고 &3d km/h가 무엇인지를 모르겠습니다
댓글 2
조회수 975master님의 댓글
master 작성일
T =pulseIn (Sigpin , HIGH) + pulseIn (Sigpin , LOW); // 주기 측정
pulseIn은 us 단위로 측정합니다.
f = 1 / ( double ) T; // 주파수 측정
T가 sec단위가 아니고 usec단위이므로 f는 (sec 단위의) 정상적인 주파수는 아닙니다.
v = int ((f * 1e6 ) /44.0 ); // 속도 측정
따라서 10^6을 나눠서 sec 단위로 바꿔야 합니다.
왜 곱하고 있을까요?
속도=거리/시간
공식대로라면 f를 계산할 필요 없이 주기T를 바로 사용하면 됩니다.
44가 거리일까요?
거리라면 분자 위치에 가야하는데 어째서 분모 위치에 가 있을까요?
sprintf (s, "% 3d km / h" , vmax); // Serial 출력
거리의 단위가 km라는 것은 억지로 인정 하겠습니다.(44가 무슨 의미인지 모르므로)
시간이 갑자기 h(hour)인 것인 무슨 뜻일까요? sec가 아닌가요?
어느 사이트 예제인지 모르겠지만 설명글을 잘 읽어보세요
master님의 댓글
master 작성일
https://blog.naver.com/PostView.naver?blogId=tione_hq&logNo=222099150093&parentCategoryNo=&categoryNo=17&viewDate=&isShowPopularPosts=true&from=search
3초정도 웹검색을 해보니 설명글이 있군요