Автор Тема: Проблем с Ultrasonic sensor HC-SR04  (Прочетена 4344 пъти)

importante

  • Зомбиран Роботостроител
  • *****
  • Публикации: 178
    • Профил
Проблем с Ultrasonic sensor HC-SR04
« -: Май 24, 2014, 10:22:14 am »
Здравейте!
Свързвам два сензора към ардуино платката и вкарвам ето този код:
#define trigPin1 13
#define echoPin1 12
#define led1 11
#define led2 10
#define trigPin2 9
#define echoPin2 8
#define led3 7
#define led4 6

void setup() {
  Serial.begin (9600);
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
}


void loop() { //L1
long duration, distance;
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration = pulseIn(echoPin1, HIGH);
distance = (duration/2) / 29.1;
if (distance < 10) { //L2
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
} //R1
else { //L3
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);

}
{
long duration, distance;
  digitalWrite(trigPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);
  duration = pulseIn(echoPin2, HIGH);
  distance = (duration/2) / 29.1;
  if (distance < 10) {
    digitalWrite(led3,HIGH);
  digitalWrite(led4,HIGH);
}
  else
    digitalWrite(led3,LOW);
    digitalWrite(led4,LOW);
 
  }
  delay(500);
}

Обаче ардуино, когато няма нищо пред сензорите на по-далечно разстояние подава високо ниво на пиновете. Демек на затворено пространство сензорите реагират добре, но щом ги изкарам на вън пиновете са на постоянно високо ниво, докато не сложа нещо пред сензора (на примерно 2метра), тогава вече ардуино работи по програмата, задава високо ниво при 10 см. Как да поправя този проблем?
Мартин Костадинов
Skype - Optixam

mivr

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 118
    • Профил
Re: Проблем с Ultrasonic sensor HC-SR04
« Отговор #1 -: Май 29, 2014, 09:47:06 pm »
Здравей,

Прочитайки документацията на сензора забелязах че сензора изпраща сигнал обратно само ако е получил сигнал което води до грешно отчитане от функцията pulseIn която връща 0 ако не засече импулс в рамките на зададеното време, ако не е зададено се използва 1 секунда. Препоръката ми е да зададеш граница на функцията и да филтрираш варианта с отговор 0 от pulseIn.

Източниците ми са:
Документацията на Ардуино езикът, функция pulseIn(): http://arduino.cc/en/Reference/pulseIn
Документация на сензора: http://www.micropik.com/PDF/HCSR04.pdf

Поздрави,
Михаил Врачански
Михаил Врачaнски 19год. В ТУ-София Автоматика

Skype: mivrmmm

email: [email protected]