BASIC4MCU | 질문게시판 | 초음파 센서 거리측정 스코프 측정 & 소스이해
페이지 정보
작성자 정기린 작성일2018-12-19 18:24 조회14,485회 댓글3건본문
현재 도와주신 부분을 이해하려 노력하고 책을 뒤적거리며 공부를 하고 있습니다.
(도움 항상 감사합니다)
현재 KUT-128키트의 PC0, PC1 LED두개로
5cm거리 이상일때 LED0번 점등
미만일때 LED1번 점등
PCA0 - 트리거 PCA1-에코
구현을 목적으로 진행중입니다. range값을 5,10,15,30,60cm로 했을때
얼추 맞습니다. 자를 대봤을때 0.5cm~1cm정도를 못맞춘것 같습니다.
초음파 센서 트리거와 에코 제가 제대로 파형을 측정하고 있는지
그것과 소스 부분에서의 이해가 부족합니다.
DDRx를 while문 이전에 주면 led가 설정해둔 값 모두 켜져있더군요.
특정 거리가 될때만 키고 싶어서 if문 안에 집어넣어봤습니다.
파형 측정과 소스에 대해 조언 부탁드립니다!
거리 측정하는 것 자체를 완벽하게 이해하고 싶습니다.
![]()
트리거는 10us의 값이 나옵니다.
HC-SR04가 58us당 1cm로 알고있습니다. 에코 쪽 파형을 측정할때
5cm에 위치해 있을때 윗부분 파형이 290us이 나와야 올바른 것인가요?
현재 코드비전 소스입니다.
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 | #include //현재 사용하는 칩(ATMEGA128) 레지스터 불러오기위한 헤더파일 #include #include //delay사용하기 위해 사용 #define Trig PORTA.0 //HC-SR04의 트리거 포트A 0번에 연결되어 있음. #define Echo PINA.1 //에코 포트A의 1번에 연결 /* range의 변수에 측정된 에코값을 58x2= 116 으로 나누어 cm를 계산해주는 함수 */ unsigned int getEcho(void){ unsigned int range; //펄스 길이값 저장변수 while(!Echo); //high가 될때까지 대기 TCNT1=0; TCCR1B=2; // 카운터 시작, 8분주 = 0.5us while( Echo); //low가 될때까지 대기 TCCR1B=0; //카운터 정지 range=TCNT1/116; //Cm로 변경 return(range); } /*DDRx 레지스터의 각 비트값(DDxn)은 해당비트(핀)의 입출력 방향을 설정하며, 1이면 출력이고 0이면 입력으로 설정된다. */ /*PORTxn이 입력핀으로 설정되고 SFIOR 레지스터의 PUD비트가 0인 경우 이 핀에 1을 출력하면 풀업 저항이 활성화된다. 풀업 저항이 동작하지 않도록 하기 위해서는 PORTxn에 0을 출력하거나 또는 이 핀이 출력방향으로 설정되어 있어야 한다. */ void main(void) { unsigned int range; //에코에서 측정한cm값 변수 //DDRC=0b00000011; // LED PC0,PC1 DDRA=1; // TRIG PCA0 //PORTC=0x00; while(1) { Trig=1; delay_us(10); Trig=0; //10us range=getEcho(); //에코함수 호출 /* 5cm초과일 경우 맨끝LED0번 [PC0] 점등 */ if(range>5) { DDRC=0b00000001; PORTC=0b0000001; } /* 그렇지 않을경우 LED1번 [PC1]점등*/ else { DDRC=0b00000010; PORTC=0b0000010; } //delay_ms(100); PORTC=0; } } |
댓글 3
조회수 14,485master님의 댓글
master 작성일
//delay_ms(100);
딜레이 삭제하면 안됩니다.
에코 신호 측정 후 최소 10ms 이상 주어야하며
50ms 이상으로 인터벌을 줘야지 가끔 이상한 값이 나오는 것이 발생하지 않는 것 같았습니다.
딜레이가 없으면 늦게 반사되는 신호 때문에 오동작합니다.
정기린님의 댓글
정기린
hc-sr04의 데이터시트를 다시 보니 말씀해주신 내용이 있었네요!
꼼꼼히 확인하지 않고 질문올려서 죄송합니다ㅜㅜ 도움 정말 감사합니다.
master님의 댓글
master 작성일
https://www.basic4mcu.com/bbs/board.php?bo_table=gesiyo13&wr_id=46
https://www.basic4mcu.com/bbs/board.php?bo_table=gesiyo13&wr_id=75
위 두 개의 글 참고하세요
초음파의 전파속도는 음파와 같은데
공기 밀도의 영향을 많이 받습니다.
공기 밀도는 온도의 영향을 받으므로 온도를 매개변수로 사용해서 거리를 측정하면 좀 더 정확한 값을 얻습니다.