Здравствуйте, подскажите, почему из-за сервопривода sr90 происходит баг в схеме, пробовал подключать 3, и на каждом это происходит, без него все ок. При шаге меньше 3, происходит рандомно, раз через раз. Нашёл в интернете, что это может быть из-за короткого замыкания которое происходит из-за нехватки питания, подключаю к ПК, блока питания и кроны 9 в. Ниужели модуль не тянет какую простую схему? Видел в интернете, что подключали и 3 сервопривода без внешнего питания для них в Nano. Или же где-то косячу в конде?
Подключено:сервопривод, пьезоизлучатель, датчик движения инфорокрасный, светодиод, arduino uno(орег.) .
По сценарию: при срабатывании датчика движения происходит движение сервопривода, мигание светодиода, проигрывается милодия, потом все в переходит в режим ожидания.
На факту: при срабатывании датчика движения происходит движение сервопривода, мигание светодиода, проигрывается милодия, потом все повторяется по кругу без остановки.
cpp
#include <Servo.h>
#define servoPin 9
#define motionSensorPin 6
#define piezoPin 11
#define ledPin 13
Servo myservo;
int pos = 0;
int motionState = LOW;
bool servoStopped = false;
const int melodyNotes = {392, 392, 392, 311, 466, 392, 311, 466, 392, 587, 587, 587, 622, 466, 369, 311, 466, 392, 784, 392, 392, 784, 739, 698, 659, 622, 659, 415, 554, 523, 493, 466, 440, 466, 311, 369, 311, 466, 392};
const int melodyTimes = {350, 350, 350, 250, 100, 350, 250, 100, 700, 350, 350, 350, 250, 100, 350, 250, 100, 700, 350, 250, 100, 350, 250, 100, 100, 100, 450, 150, 350, 250, 100, 100, 100, 450, 150, 350, 250, 100, 750};
int melodyLength = 39;
int currentNote = 0;
void setup() {
myservo.attach(servoPin);
pinMode(motionSensorPin, INPUT);
pinMode(piezoPin, OUTPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Serial.println(“Скетч запущен”);
}
void loop() {
motionState = digitalRead(motionSensorPin);
if (motionState == HIGH) {
Serial.println(“Обнаружено движение!”);
turnServo(90);
blinkLED(4);
playMelody();
turnServo(180);
delay(1000);
}
if (servoStopped && motionState == LOW) {
delay(5000);
servoStopped = false;
}
delay(100);
}
void turnServo(int angle) {
int step = 1;
if (angle < pos) {
step = -1;
}
while (pos != angle) {
pos += step;
myservo.write(pos);
delay(15);
}
servoStopped = true;
}
void blinkLED(int numTimes) {
for (int i = 0; i < numTimes; i++) {
digitalWrite(ledPin, HIGH);
delay(250);
digitalWrite(ledPin, LOW);
delay(250);
}
}
void playMelody() {
for (int i = 0; i < melodyLength; i++) {
tone(piezoPin, melodyNotes[i]);
delay(melodyTimes[i]);
noTone(piezoPin);
delay(melodyTimes[i]);
}
}