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

Я пытаюсь изменить скорость двигателей в зависимости от количества света, попадающего на LDR. Здесь я пытаюсь сделать так, чтобы если LDR имеет большее значение, чем другой, то двигатель, связанный с этим LDR, замедлялся, чтобы он поворачивался к свету.

const int motorDirectionA = 9;
const int motorEnableA = 10;
const int motorDirectionB = 5;
const int motorEnableB = 6;


const int leftLDR = A0;
const int rightLDR = A1;

int motorSpeedA = 250;
int motorSpeedB = 250;

void setup() 
{
  Serial.begin(9600);
  pinMode(motorDirectionA,OUTPUT);
  pinMode(motorEnableA, OUTPUT);
  pinMode(motorDirectionB,OUTPUT);
  pinMode(motorEnableB, OUTPUT);

  pinMode(leftLDR, INPUT);
  pinMode(rightLDR, INPUT);

}

void loop() 
{
  int ldrReadL = analogRead(leftLDR);
  int ldrReadR = analogRead(rightLDR);
  int leftLDRread = ldrReadL;
  int rightLDRread = ldrReadR;

  digitalWrite(motorDirectionA, LOW);
  analogWrite(motorEnableA, motorSpeedA);
  digitalWrite(motorDirectionB, HIGH);
  analogWrite(motorEnableB, motorSpeedB);

  Serial.print("Left LDR reading: ");
  Serial.println(ldrReadL);
  Serial.print("Right LDR reading: ");
  Serial.println(ldrReadR);

  if (leftLDRread > rightLDRread)
  {
    motorSpeedA = 80;
    motorSpeedB = 210;
  }
     else
     {
        motorSpeedA = 210;
        motorSpeedB = 210;
     }

  if (leftLDRread < rightLDRread)
  {
    motorSpeedB = 80;
    motorSpeedA = 210;
  }
      else
     {
       motorSpeedA = 210;
       motorSpeedB = 210;
     }
}

@Maximillian Gerhardt Если левый LDR улавливает больше света, чем правый LDR, то левому двигателю следует назначить «скорость» 80, а правому — 210. Если у правого больше интенсивности, то правому двигателю следует назначить скорость 80, а левому — 210.

Если они оба равны, каждый двигатель должен иметь скорость 210 (хотя я не включил это в код).

, 👍1


1 ответ


1

Если левый LDR улавливает больше света, чем правый LDR, то левому двигателю следует назначить «скорость» 80, а правому — 210. Если правый имеет большую интенсивность, то правому двигателю следует назначить скорость 80, а левому — 210.

Если они оба равны, каждый двигатель должен иметь скорость 210 (хотя я не включил это в код).

В коде это можно выразить так

void loop() 
{
    int ldrReadL = analogRead(leftLDR);
    int ldrReadR = analogRead(rightLDR);
    int leftLDRread = ldrReadL;
    int rightLDRread = ldrReadR;

    digitalWrite(motorDirectionA, LOW);
    analogWrite(motorEnableA, motorSpeedA);
    digitalWrite(motorDirectionB, HIGH);
    analogWrite(motorEnableB, motorSpeedB);

    Serial.print("Left LDR reading: ");
    Serial.println(ldrReadL);
    Serial.print("Right LDR reading: ");
    Serial.println(ldrReadR);

    //предполагая, что motorSpeedA — это левый мотор
    // левое > правое
    if (leftLDRread > rightLDRread) {
        motorSpeedA = 80;
        motorSpeedB = 210;
    } else if( leftLDRread < rightLDRread ) {
        //левое < правое
        motorSpeedA = 210;
        motorSpeedB = 80;
    } else {
        // лево == право
        motorSpeedA = 210;
        motorSpeedB = 210;      
    }
}

Также следует отметить, что это довольно примитивная форма ПИД-регулятора. Вы хотите реагировать на влияние окружающей среды каким-то образом, для чего и предназначен ПИД.

Возможно, вам будут интересны эти видео:

Изменение: код был исправлен, использовалась неправильная переменная (номер контакта и считанное значение)

,