Проблема в работе ультразвукового датчика HC-SR04 и в работе сервомотра Micro Servo 9g SG90

Тема в разделе "Arduino & Shields", создана пользователем Nikita228, 22 сен 2019.

  1. Nikita228

    Nikita228 Гик

    Есть задача: сделать так, чтобы сервомотор плавно вращался ту в одну то в другую сторону, и в то время как он вращается, нужно, чтобы датчик расстояния измерил расстояние 10 раз(за всё время пока вращается сервомотор) и в монитор порта выводил среднее арифметическое всех измеренных расстояний. Ниже, будет прикреплён написанный код
    ----------------------------------------------------------------------------------------------------------------------------------------------------------
    Код (Text):

    #include <Servo.h>
    Servo myservo;
    #include <Ultrasonic.h>
    Ultrasonic ultrasonic(2, 3);
    int dist_cm = 0;
    int sum = 0;
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(115200);
      myservo.attach(10);
      myservo.write(90);
      delay(1500);


    }

    void loop() {
      for (int pos = 0; pos <= 180; pos += 1) { //запускаем цикл вращения сервомотором
        myservo.write(pos);
        sum = 0; //обнуляем сумму всех считанных расстояний
        for (int i = 0; i < 10; i++) { //запускаем цикл считывания расстояний
          dist_cm = ultrasonic.Ranging(CM); //считываем расстояние
          sum += dist_cm; //складываем все считанные расстояния
        }
        Serial.println(sum / 10); //вывод расстояния в монитор порта
        delay(15); //небольшая задержка
      }
      for (int pos = 180; pos >= 0; pos -= 1) { //запускаем цикл вращения сервомотором
        myservo.write(pos);
        sum = 0; //обнуляем сумму всех считанных расстояний
        for (int i = 0; i < 10; i++) { //запускаем цикл считывания расстояний
          dist_cm = ultrasonic.Ranging(CM); //считываем расстояние
          sum += dist_cm; //складываем все считанные расстояния
        }
        Serial.println(sum / 10); //вывод среднего считанного расстояния
        delay(15); //небольшая задержка
      }

    }

     
    -------------------------------------------------------------------------------------------------------------------------------------------------------
    Но есть одна небольшая проблемка: сервомотор во время выполнения цикла вращения сервомотором начинает, как будто глохнуть, он начинает замедляться. И в это время ультразвуковой датчик начитнает выдавать очень большое расстояние в монитор порта, например: 2 360, 3 500, 11 000 и т.д.
    Я уже всё перепробовал: менял сервомотор, менял провода для ультразвукового датчика, менял сам ультразвуковой датчики всё равно ничего не меняется.
    Помогите пожалуйста
     
  2. Nikita228

    Nikita228 Гик

    Вот показания из плоттера по последовательному соединению
    upload_2019-9-22_10-44-28.png
     
  3. NikitOS

    NikitOS Король шутов Администратор

    По Вашему это будет выполнено одновременно?
    Нет. for будет крутиться до тех пор, пока не завершит условие
     
  4. Nikita228

    Nikita228 Гик

    И что вы предлагаете?
     
  5. NikitOS

    NikitOS Король шутов Администратор

    Загуглить
     
  6. Nikita228

    Nikita228 Гик

    Вау, спасибо за совет
    А я сам не догадался
    Наверное за более точным ответом я и полез на форум
     
  7. NikitOS

    NikitOS Король шутов Администратор