ультразвуковой датчик HC-SR04 не работает

Алексей236
Offline
Зарегистрирован: 09.05.2017

Скетч на два татчика их проверял исправны но когда скетч работает один показывает нормальное значение а другой 0. Помогите пожалуйста.

программа если что на ардуино леонардо 

#include "Keyboard.h"
#include <Keyboard.h>
#include <HID.h>

//Sensor 1
int trigPin1 = 2;
int echoPin1 = 3;

//Sensor 2
int trigPin2 = 4;


int echoPin2 = 5;

long duration1, cm1;
long duration2, cm2;

//Status variables
int value1;
int value2;

void setup() {
  Serial.begin(9600);
  Keyboard.begin();

  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);

  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
}

void loop() {
  digitalWrite(trigPin1, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin1, LOW);

  pinMode(echoPin1, INPUT);
  duration1 = pulseIn(echoPin1, HIGH);
  // convert the time into a distance
  cm1 = (duration1 / 2) / 29.1;

  digitalWrite(trigPin2, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);

  pinMode(echoPin2, INPUT);
  duration2 = pulseIn(echoPin2, HIGH);
  // convert the time into a distance
  cm2 = (duration2 / 2) / 29.1;

  delay(300);

  Serial.println(cm1);
  Serial.println(cm2);
  //set value 1 true
  if (cm1 < 10) {
    value1 = 1;
    delay(100);
  }

  if (cm2 < 10 && value1 == 1) {
    value1 = 0;
    goLeft();
    delay(100);

  }

  //set value 2 true
  if (cm2 < 10) {
    value2 = 1;
    delay(100);
  }

  if (cm1 < 10 && value2 == 1) {
    value2 = 0;
    goRight();
    delay(100);
  }
}

int goLeft() {
  Serial.println("Im left");
  Keyboard.print("ktdj");
  Keyboard.write(KEY_RETURN);
  delay(100);
}

void goRight() {
  Serial.println("Im right");
  Keyboard.print("ghfdj");
  Keyboard.write(KEY_RETURN);
  delay(100);

}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Между свистками датчика нужно выдерживать определенную паузу. Вроде 50мс что ли...  Для теста махните их местами.

Алексей236
Offline
Зарегистрирован: 09.05.2017

Я менял их местами, единственное что оживляет второй датчик это плохой контакт на echo пине. Можете показать где именно в коде поставить эту паузу 

IVAN222
Offline
Зарегистрирован: 19.04.2017

Зачем Вам это строки 34, 35,45,46 ? они не нужны.

sadman41
Offline
Зарегистрирован: 19.10.2016

Если у вас контакты не контачат, никакой патч к коду ситуации не изменит.

Алексей236
Offline
Зарегистрирован: 09.05.2017

они контачат, дело в том что датчик оживает, наоборот только от плохого контакта

sadman41
Offline
Зарегистрирован: 19.10.2016

Перед вторым свистом вставьте delay. Надеюсь, что вы можете найти это место в своем скетче.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Если меняли местами и конкретный датчик глючит - смотрите тут поиском были темы про какое-то то ли усовершенствование от китайцев, то ли брак .. в общем вопрос уже обсуждался. Какое-то решение там было найдено..

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Arhat109-2 пишет:

Если меняли местами и конкретный датчик глючит - смотрите тут поиском были темы про какое-то то ли усовершенствование от китайцев, то ли брак .. в общем вопрос уже обсуждался. Какое-то решение там было найдено..

Тут не про датчики, тут про способ измерения: второй датчик сразу после включения ловит эхо от первого, поэтому показывает расстояние 0.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Может быть, не вникал шибко. В таком разе стоит разнести моменты замеров (особенно свистки) на около 40мсек. Этого достаточно чтобы эхо стало ниже порога срабатывания.

Или наоборот. Свистеть одновременно и слушать тоже. Удобно реализовать по прерываниям, и измеряемая точность может быть достигнута до 2мм на дистанциях под 5м.