#define trigPin 9
#define echoPin 10
#define buzzer 8
#define ledPin 2
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
if (distance < 15) {
if (distance <= 2) {
digitalWrite(ledPin, HIGH);
tone(buzzer, 1000);
} else {
digitalWrite(ledPin, HIGH);
tone(buzzer, 1000);
delay(1000/(15 - distance + 1));
digitalWrite(ledPin, LOW);
noTone(buzzer);
delay(1000/(15 - distance + 1));
}
} else {
digitalWrite(ledPin, LOW);
noTone(buzzer);
}
}
HC-SR04를 사용하고 있는데
거리 탐지가 너무 이상함...
반응이 느린건지 탐지가 이상한건지 모르겠음...
시리얼 포트로 받아봐도 거리가 좀 이상한데,
하나 더 사야될 지 어떻게 해야 할 지 모르겠네요...
silentScreamer
어떻게 이상한지도 좀 써줘야지... 나도 몇번 안해보긴했는데 내꺼도 패키지에 딸려온거라그런지 그렇게 정확하진 않더라
변아
아두이노 UNO 사용중이고,
자동차 후방감지 카메라처럼 초음파 센서 이용해서 거리가 가까워지면 LED가 빨리 깜빡이면서, 부저도 삐소리 나게끔 만들려고하는데,
초음파센서가 이상한건지 연결선이 이상한건지 LED랑 부저는 문제 없는데, 거리 계산이 느린건지, 잘 안돼요....
시리얼모니터로 출력되게 해도 거리가 너무 이상해요... 아예 손을 갖다대도 100정도로 나오니까 미치겠음.....
silentScreamer
코드는 이상없는거 같은데, Serial prints 해서 센서에서 들어오는 distance 값 디버깅해보셈
변아
그렇게 해서 거리 본게 이상해요
거의 130 정도만 유지하고 있어요
센서에 가까이 손을 갖다대도 비슷한 값만 출력해요... 당연하겠지만 선을 만지면 거리 값 날뛰어요
silentScreamer
그래두 안되면 https://reference.arduino.cc/reference/en/libraries/newping/ 함 써보셈
https://forum.arduino.cc/t/very-slow-hc-sr04-ultrasonic-sensor/144091
변아
이번엔 거리 거의 대부분0만 출력해요 ㅠㅠㅠ
변아
PIR적외선 센서로 바꿧네요..
려비
gpt 돌려봐
변아
센서가 이상한거일수도 있는건데 GPT 가 어떻게 알음....
려비
그내용도 포함해서 물어봐
초뒤에개드립폭파됨
gpt 오류 찾는거 잘함
엔지니어
GPT 은근히 잘 도와줘...
변아
오류 찾는거 잘 하는거 아는데, 이미 사용 했고, 센서가 이상한지 선이 이상한지 모르는 상황에서 어떤 문제인줄 알고 물어보냐는 뜻이에요
거리값 자체를 이상하게 출력하고 있어요
심보고약한놈
그럼 우리가 센서가 이상한건지 선이 이상한건지 어케암? 코드 이상없으면 그게 문제겠지
변아
그래 너가 최고야
심보고약한놈
최고인거 알면 다른 부품으로 해봐라
엔지니어
지금 코드를 보고 있는데
혹시 Arduino IDE를 사용하고 있다면 자동으로 추가되지만, 그렇지 않다면
Arduino.h 헤더를 추가해줘야 할거에요 (pulseIn 함수 등등을 사용하기위해서)
만약 delay의 문제라면 mills() 함수를 이용해서 조절해주면 될 수 있겠지만
그게 아니라면 시리얼 모니터를 통해 값이 정확히 나오는지 보고 if 구문을 바꾸는게 좋을거 같아요
distance = duration * 0.034 /2 를
distance = ((duration * 340)/1000) / 2 혹은 (duration * 0.34) / 2 혹은 duration/ 2.9 / 2로 바꿔보시는게 좋을거 같아요
distance에 들어간 값이 int로 선언되어있는데 double이나 float로 선언해도 값이 비슷하게 나오는지도 궁금하네요
그래서 코드를 적어보면 이렇게 써봤는데 검증 후에 if 구문을 검증하면 동작하지 않을까 싶어요
#include <Arduino.h> //Arduino IDE를 이용하면 자동으로 추가 됨
int trigPin = 9;
int echoPin = 10;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop(){
float distance, duration; //변수 선언
digitalWrite(trigPin, LOW); //트리거핀 초기화
digitalWrite(echoPin, LOW); //에코핀 초기화
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration /2.9) / 2; // duration
Serial.print(distance); //serial 모니터에 distance 값 출력, 단위 mm
delay(100);
}
변아
센서자체가 잘못 된 거 같아서 RIP센서로 바꿧어요
엔지니어
해결되신거라면 다행이에요!
저소음흑축써주세요제발
distance = ((float)(340 * duration) / 1000) / 2; 이거 축약하면 0.034가 아니라 0.34아님?
저소음흑축써주세요제발
0.34*duration / 2로 계산해야 값 제대로 나오는거 아닐까?
변아
말씀은 감사드립니다! 근데, 역시나 안되네요...
이성적인도라이
아두이노 부품 중국산 싸구려가 많아서 복권처럼 꽝인 경우도 자주 있는데 그거 스피커처럼 생긴 초음파 거리 측정기지?
그거 꽝좀 많아 다른부품으로 해보샘
변아
맞아요... 그래서 RIP센서로 했네요
RX7900XTX
인터넷 보면 저센서 관련 아두이노 코드가 있음 그거 일단 드래그해서 센서 테스트를 해봐야 할 듯?
센서가 정상이라는 보장이 없어서 내가 학생 때 센서 오면 일단 테스트 코드로 테스트함
변아
인터넷 코드 긁어서 해도 안되길래 RIP센서로 바꿧어요...