Как подключить к плате стрела УЗ датчики HC-05

Тема в разделе "Arduino & Shields", создана пользователем robotehnika18, 13 фев 2017.

  1. robotehnika18

    robotehnika18 Нерд

    Подскажите, как подключить к плате стрела УЗ датчики HC-05?
    Спасибо
     
  2. serg_admin

    serg_admin Гик

    Если я правильно понял - это ультразвуковой датчик топлива с аналоговым выходом.
    Соответственно тебе нужно повесить что-то с АЦП на одной стороне и RS232 на другой. Можно и Arduino, но сначала надо замерить что датчик выдает.

    На самом HC-05 АЦП вроде нет, да и для прошивки программатор понадобится.
     
  3. robotehnika18

    robotehnika18 Нерд

    [​IMG]
    Вот такой датчик. Нет информации в Интернете, не в инструкции к набору СКАРТ
     
  4. serg_admin

    serg_admin Гик

  5. robotehnika18

    robotehnika18 Нерд

    И что? Я знаю как к Ардуино подключить УЗ датчик:
    На плате Strela эта схема не работает
     
  6. Unixon

    Unixon Оракул Модератор

    В каком смысле не работает?
     
    Последнее редактирование: 13 фев 2017
  7. serg_admin

    serg_admin Гик

    Скинь, что за стрела. То, что я по стреле нашел так это уже готовые устройства а не платы. Хотя бы модификацию.
     
  8. robotehnika18

    robotehnika18 Нерд

  9. serg_admin

    serg_admin Гик

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

    И как не работает - совсем ноль или неправильно
     
  10. robotehnika18

    robotehnika18 Нерд

    Код (C++):
    #include <Strela.h>
    void setup() // процедура setup
    {
      uPinMode(P9, OUTPUT);
      uPinMode(P10, OUTPUT);
    }

    void loop() // процедура loop
    {
      uDigitalWrite(P9, 1);
      uDigitalWrite(P10, 1);
      delay(500);
      uDigitalWrite(P9, 0);
      uDigitalWrite(P10, 0);
      delay(500);
    }
    Светодиоды мигают
     
  11. serg_admin

    serg_admin Гик

    Уже хорошо!

    На вывод trig (OUTPUT) ты подаешь сигнал начала измерения - допустим это будет светодиод параллельно с датчиком (должен вспыхивать)
    На Echo (INPUT) на плате должен ловить импульс длительности прохождения звука. Можно подать сигнал 5 вольт проводком.

    Если DigitalRead отрабатывает, надо проверить выход на датчике:
    теоретически его можно отключить от платы и повесить светодиод (прямо на Echo, GND), но видно ли будет глазом вспышку такой длительности я не знаю (дома попробую).

    Таким образом можно проверить выход платы, вход платы, выход датчика. Если датчик дает импульс остается померить его длительность это и будет дистанция.
     
  12. mcureenab

    mcureenab Гуру

    Он простой как валенок.
    На пин trig нужно кинуть цифровой имульс 10uS.
    А затем функцией pulseIn определить длительность сигнала на пине Echo. Это время путешествия ультразвукового пакета от датчика до мишени и обратно. Остается по скорости звука в воздухе пересчитать время в сантиметры.
    Distance (in cm) = (elapsed time * sound velocity (340 m/s)) / 100 / 2
     
  13. robotehnika18

    robotehnika18 Нерд

    Код (C++):
    #include <Strela.h>

    #define trigPin P9
    #define echoPin P10

    int duration, cm;

    void setup() // процедура setup
    {
      Serial.begin (9600);
      uPinMode(P9, OUTPUT);
      uPinMode(P10, INPUT);
      uPinMode(P11, OUTPUT);

      uDigitalWrite(P11, 1);
    }

    void loop()
    {
      uDigitalWrite(trigPin, LOW); // изначально датчик не посылает сигнал
      delayMicroseconds(2); // ставим задержку в 2 ммикросекунд

      uDigitalWrite(trigPin, HIGH); // посылаем сигнал
      delayMicroseconds(10); // ставим задержку в 10 микросекунд
      uDigitalWrite(trigPin, LOW); // выключаем сигнал

      duration = pulseIn(echoPin, HIGH); // включаем прием сигнала

      cm = duration / 58; // вычисляем расстояние в сантиметрах

      Serial.print(cm); // выводим расстояние в сантиметрах
      Serial.println(" cm");

      delay(500);
    }
     
    Нули выводятся на мониторе
     
  14. robotehnika18

    robotehnika18 Нерд

    При таком скетче выдает значение "0" и "1" при подключении P10 к GND или 5В.
    Значит порт читает значения.

    Код (C++):
    #include <Strela.h>

    #define echoPin P10

    int duration, cm;

    void setup() // процедура setup
    {
      Serial.begin (9600);
     
      uPinMode(P9, OUTPUT);
      uPinMode(P10, INPUT);
      uPinMode(P11, OUTPUT);
    }

    void loop() {
     
    uDigitalRead(echoPin); // изначально датчик не посылает сигнал

    Serial.print(uDigitalRead(echoPin));

    delay(500);

    }
     
  15. serg_admin

    serg_admin Гик

    Ты проверь датчик HIGH дает вообще? Может на нем питания нет
    А расстояние до цели сколько тестируйте?
     
  16. mcureenab

    mcureenab Гуру

    Используйте пины P11, P12 и функции без префикса u.
     
  17. robotehnika18

    robotehnika18 Нерд

    Спасибо. Заработало

    Код (C++):
    #include <Strela.h>

    #define trigPin P11
    #define echoPin P12

    int duration, cm;

    void setup() // процедура setup
    {
      Serial.begin (9600);
      pinMode(P11, OUTPUT);
      pinMode(P12, INPUT);
     
      uDigitalWrite(P11, 1);
    }

    void loop()
    {
      digitalWrite(trigPin, LOW); // изначально датчик не посылает сигнал
      delayMicroseconds(2); // ставим задержку в 2 ммикросекунд

      digitalWrite(trigPin, HIGH); // посылаем сигнал
      delayMicroseconds(10); // ставим задержку в 10 микросекунд
      digitalWrite(trigPin, LOW); // выключаем сигнал

      duration = pulseIn(echoPin, HIGH); // включаем прием сигнала

      cm = duration / 58; // вычисляем расстояние в сантиметрах

      Serial.print(cm); // выводим расстояние в сантиметрах
      Serial.println(" cm");

      delay(500);
    }
     
  18. mcureenab

    mcureenab Гуру

    У Strela с пинами все довольно сложно. Часть пинов используется для управления интегрированными устройствами. Например пин 10. Часть реализована через мультиплексор и функционально ограничены. Нужно аккуратно выбирать пины.

    http://wiki.amperka.ru/продукты:strela