Контролировать скорость двигателя вибратора с помощью ультразвуковых датчиков
Во-первых, спасибо, что нашли время прочитать мой пост.
Я пытаюсь использовать 3 ультразвуковых датчика для управления 3 вибраторами постоянного тока с использованием ШИМ-выхода Arduino. Знаю, довольно просто, но я только новичок. :)
Вот мой код
int trigpin_1 = 2;
int echopin_1 = 3;
int trigpin_2 = 4;
int echopin_2 = 5;
int trigpin_3 = 6;
int echopin_3 = 7;
int motor_1 = 8;
int motor_2 = 9;
int motor_3 = 10;
void setup() {
// поместите сюда свой код установки для однократного запуска:
Serial.begin (9600);
pinMode(trigpin_1, OUTPUT);
pinMode(echopin_1, INPUT);
pinMode(trigpin_2, OUTPUT);
pinMode(echopin_2, INPUT);
pinMode(trigpin_3, OUTPUT);
pinMode(echopin_3, INPUT);
pinMode(motor_1, OUTPUT);
pinMode(motor_2, OUTPUT);
pinMode(motor_3, OUTPUT);
}
void loop() {
// поместите сюда свой основной код для многократного запуска:
long duration, distance;
digitalWrite(trigpin_1, HIGH);
digitalWrite(trigpin_2, HIGH);
digitalWrite(trigpin_3, HIGH);
delayMicroseconds(1000);
digitalWrite(trigpin_1, LOW);
digitalWrite(trigpin_2, LOW);
digitalWrite(trigpin_3, LOW);
duration = pulseIn(echopin_1, HIGH);
duration = pulseIn(echopin_2, HIGH);
duration = pulseIn(echopin_3, HIGH);
distance = (duration/2) /29.1;
if (distance > 200)
{
analogWrite(motor_1, 0);
analogWrite(motor_2, 0);
analogWrite(motor_3, 0);
}
else if(200 == distance > 160)
{
analogWrite(motor_1, 50);
analogWrite(motor_2, 50);
analogWrite(motor_3, 50);
}
else if(160 >= distance > 90)
{
analogWrite(motor_1, 100);
analogWrite(motor_2, 100);
analogWrite(motor_3, 100);
}
else if(90 >= distance > 60)
{
analogWrite(motor_1, 150);
analogWrite(motor_2, 150);
analogWrite(motor_3, 150);
}
else if(60 >= distance > 40)
{
analogWrite(motor_1, 200);
analogWrite(motor_2, 200);
analogWrite(motor_3, 200);
}
else if(40 >= distance)
{
analogWrite(motor_1, 255);
analogWrite(motor_2, 255);
analogWrite(motor_3, 255);
}
Serial.print (distance);
Serial.println (" cm");
delay(100);
}
Но проблема в том, что двигатели постоянного тока будут работать постоянно с рабочим циклом 100%. если кто-нибудь сможет мне помочь, буду благодарен
@, 👍-1
1 ответ
▲ 0
Вы не хотите использовать выходы GPIO для прямого управления двигателями. Скорее всего, вы сожжете свой Arduino с помощью приведенной вами схемы. Как минимум, вам понадобится использовать транзисторы (которые могут выдерживать токовую нагрузку двигателя) для включения/выключения двигателей.
,
@Jeff Wahaus
Смотрите также:
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Вопрос о различных способах подключения платы драйвера двигателя L298N к Arduino и двигателям и их питания.
- Обратное вращение шагового двигателя
- Неиспользуемые контакты в Arduino L293D motor shield?
- Как заставить сервопривод вращаться на угол больше 180°
- Остановка/запуск двигателя постоянного тока с концевыми выключателями и кнопкой включения/выключения
- Почему Adafruit motor shield не крутит моторы?