ультразвуковой датчик дает неправильные расстояния
. Я использовал встроенный базовый пример измерения расстояния для проверки своего ультразвукового датчика. предмет держится на 10 - 15 см. формируют ультразвуковой датчик, но показания показывают только 135 см
#include <Ultrasonic.h>
int trigPin = 5;
int echoPin = 6;
#include <Servo.h> //сервобиблиотека
Servo servo;
int servoPin = 7;
long duration, dist, average;
long aver[3]; //массив для среднего
void setup() {
Serial.begin(9600);
servo.attach(servoPin);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
servo.write(0); //закрыть крышку при включении питания
delay(100);
servo.detach();
}
void measure() {
digitalWrite(100,HIGH);
digitalWrite(trigPin, LOW);
delayMicroseconds(100);
digitalWrite(trigPin, HIGH);
delayMicroseconds(150);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
dist = (duration/2.0) / 29.1; //получить расстояние
}
void loop() {
for (int i=0;i<=2;i++) { //среднее расстояние
measure();
aver[i]=dist;
delay(100); //задержка между измерениями
}
dist=(aver[0]+aver[1]+aver[2])/3;
if ( dist<15 ) {
//Изменить расстояние в соответствии с вашими потребностями
servo.attach(servoPin);
delay(1);
servo.write(0);
delay(2500);
servo.write(100);
delay(500);
servo.detach();
}
Serial.print(dist);
}
#include <Ultrasonic.h>
int trigPin = 5;
int echoPin = 6;
#include <Servo.h> //сервобиблиотека
Servo servo;
int servoPin = 7;
long duration, dist, average;
long aver[3]; //массив для среднего
void setup() {
Serial.begin(9600);
servo.attach(servoPin);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
servo.write(0); //закрыть крышку при включении питания
delay(100);
servo.detach();
}
void measure() {
digitalWrite(100,HIGH);
digitalWrite(trigPin, LOW);
delayMicroseconds(100);
digitalWrite(trigPin, HIGH);
delayMicroseconds(150);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
dist = (duration/2.0) / 29.1; //получить расстояние
}
void loop() {
for (int i=0;i<=2;i++) { //среднее расстояние
measure();
aver[i]=dist;
delay(100); //задержка между измерениями
}
dist=(aver[0]+aver[1]+aver[2])/3;
if ( dist<15 ) {
//Изменить расстояние в соответствии с вашими потребностями
servo.attach(servoPin);
delay(1);
servo.write(0);
delay(2500);
servo.write(100);
delay(500);
servo.detach();
}
Serial.print(dist);
}
1 ответ
▲ 1
У вас много лишнего кода:
- включать Ultrasonic.h не нужно.
- servo.attach и servo.detach без повторного использования штифта не нужны
- Неправильный ультразвуковой код. Это должно быть:
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// измеряем длительность импульса с вывода ECHO
duration_us = pulseIn(echoPin, HIGH);
// вычисляем расстояние
distance_cm = 0.017 * duration_us;
См. руководство по работе с ультразвуковым датчиком и Учебное пособие по серводвигателям
,
@Rozona Zoro
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Нет, мы не можем, потому что вы не предоставили нам достаточно информации. Вы должны отредактировать свой вопрос, включив в него полный код (пожалуйста, отформатируйте его правильно) и проводку. Также вы должны объяснить, как вы тестируете проект. Ультразвуковой датчик нуждается в достаточно твердой поверхности перед собой, чтобы ультразвуковые волны достаточно отражались. Мягкие материалы, такие как ткань, или поверхности, которые не параллельны датчику, сделают измерение более трудным/менее точным., @chrisl
я отправил свой код, @Emmanuel Gudinho
Чтобы предоставить дополнительную информацию, пожалуйста, всегда редактируйте свой вопрос. Для этого есть кнопка редактирования. Ваш код не является ответом на ваш вопрос, поэтому его не следует публиковать в качестве ответа. Поскольку вы новый участник (добро пожаловать!), вы можете найти [Тур](https://arduino.stackexchange.com/tour) весьма полезным. Вопрос высокого качества имеет гораздо больше шансов получить хорошие ответы., @chrisl
Я отредактировал ваш вопрос для вас, @chrisl
Относительно «
digitalWrite(100, HIGH);
»: на Uno нет контакта 100., @Edgar BonetПочему вы добавили свой код во второй раз в свой вопрос? Я не вижу разницы. Также вам действительно следует написать больше текста и что-то объяснить. Я задал больше вопросов в своем первом комментарии, и вы до сих пор не ответили на них, @chrisl