Мой код не регулирует скорость одного из двигателей. И я не уверен, почему.
Я пытаюсь изменить скорость двигателей в зависимости от количества света, попадающего на 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 (хотя я не включил это в код).
@mymotordude, 👍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;
}
}
Также следует отметить, что это довольно примитивная форма ПИД-регулятора. Вы хотите реагировать на влияние окружающей среды каким-то образом, для чего и предназначен ПИД.
Возможно, вам будут интересны эти видео:
Изменение: код был исправлен, использовалась неправильная переменная (номер контакта и считанное значение)
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Как заставить сервопривод вращаться на угол больше 180°
- Управлять двигателем с помощью кнопки
- Почему Adafruit motor shield не крутит моторы?
- Как управлять 6 шаговыми двигателями с помощью Arduino?
- Пропорциональный контроль расхода воды