ардуино уно зависает
Есть ли причина, по которой мой Arduino Uno зависает после нескольких минут работы при питании от USB-кабеля, подключенного к моему компьютеру?
#include <GY6050.h>
#include <Wire.h>
#include <VarSpeedServo.h>
#define angle1 20
#define angle2 90
#define Sensor_BL A0
#define Sensor_BR A1
VarSpeedServo servo;
GY6050 gyro1(0x68);
GY6050 gyro2(0x69);
int X = 0;
int Y = 0;
int y1_axis = 0;
int y2_axis = 0;
int sensorBL;
int sensorBR;
int speed = 0;
int angle = 0;
int prev_y1_axis = 0;
int y1_hold = 0;
unsigned long timer;
int start = 1;
byte step = 0;
String steps , laststep;
int freq;
void setup() {
Serial.begin(9600);
Wire.begin();
gyro1.initialisation();
gyro2.initialisation();
delay(100);
servo.attach(8);
servo.write(90);
}
void loop() {
y1_axis = gyro1.refresh('A', 'Y');
y2_axis = gyro2.refresh('A', 'Y');
sensorBL = analogRead(Sensor_BL);
sensorBR = analogRead(Sensor_BR);
//0 справа - 90 по центру - 180 слева
if (sensorBL > 250) {
speed = map( sensorBL , 0 , 1023 , 0 , 255);
if (sensorBL < 700) { //без давления 90+20=110
servo.write(95 , speed);
angle = 95;
}
else if (sensorBL > 700) { //дополнительно нажмите 90+90 = 180
servo.write(105 , speed);
angle = 105;
}
}
else if (sensorBR > 250) {
speed = map( sensorBR , 0 , 1023 , 0 , 255);
if (sensorBR < 700) {
servo.write(95 , speed);
angle = 95;
}
else if (sensorBR > 700) {
servo.write(105 , speed);
angle = 105;
}
}
else if ((start == 0 || millis() - timer > 800) && y1_axis > -90 && y1_axis < 20 && y2_axis > -90 && y2_axis < 20 && sensorBL < 10 && sensorBR < 20) //плоский тупик без движения сервопривода - центральное положение - можем ли мы разделить на разные линии датчик давления и ускорение, чтобы я мог установить мертвое конечное значение отдельно для датчика давления и акк ?
{
servo.write( 85 , 15);
//Serial.println("Сервопривод обнуляется");
start = 1;
step = 0;
angle = 0;
steps = "0";
}
else if ((y1_axis < 60 & y1_axis >40) && (step == 0 || step == 2))
{
step = 1;
steps = "1";
}
else if ((y2_axis < 55 & y2_axis > 40) && (step == 0 || step == 1))
{
step = 2;
steps = "2";
}
if (!steps.equals(laststep)) {
if ((step == 1 || step == 2) && millis() - timer <= 700) {
if (freq > 1) {
servo.write(70 , 20);
angle = 70;
}
else {
servo.write(78 , 20);
angle = 78;
}
freq++;
}
else if ((step == 1 || step == 2 && millis() - timer > 750)) {
servo.write(78 , 20);
angle = 78;
freq = 0;
}
timer = millis();
}
//Serial.println("Y1: " + String(y1_axis) + " Y2: " + String(y2_axis) + " S1: " + String(sensorBL) + " S2: " + String(sensorBR) + " Millis: " + String(millis() - timer) + " Step: " + String(steps) + " Last: " + String(laststep) + " Angle: " + String(angle));
Serial.println("Millis: " + String(millis() - timer) + " Angle: " + String(angle));
laststep = steps;
}
Я использую USB-кабель питания от ПК для питания Arduino, двух акселерометров и одного серводвигателя SG90 для хобби. Будет ли лучший способ включить 1 сервопривод с помощью собственного источника питания?
Какой источник питания вы бы предложили для 1 серводвигателя?
Когда я не подключен к компьютеру, я использую 9-вольтовую батарею для одновременного питания Arduino и одного серводвигателя
спасибо!
Это часть кода для движения вперед и назад в этой системе передвижения, которую я придумал
https://github.com/marcob2178/Arduino-Based-Game-Locomotion
https://www.youtube.com/watch?v=OYTlF2GhXpQ
Датчики крепятся на обувь
@Marco Balletta, 👍0
Обсуждение1 ответ
Вы не сказали и не показали, как питается ваш сервопривод, но и источник питания Arduino ограничен, и мощность USB вашего компьютера имеет защитный предел. Вы можете питать любительский сервопривод SG90 от Arduino, но любой более крупный сервопривод нуждается в собственном источнике питания, при этом от Arduino берется только сигнал ШИМ. Если сервопривод (или любое другое устройство или набор устройств) превышает возможности источника питания Arduino, его выходное напряжение упадет. Одним из последствий этого является то, что MCU останавливается. Или, если запас USB-накопителя вашего компьютера исчерпан, он выключится в целях защиты.
Я предполагаю, что вы питаете свой двигатель от Arduino, а это приводит к голоданию микроконтроллера.
- Как заставить сервопривод вращаться на угол больше 180°
- Подключение Arduino к сервоприводу с внешним источником питания
- Мой сервопривод не работает плавно
- Бесполезная проводка коробки и код
- Почему сервопривод не перемещается по углам должным образом
- Микро сервопривод не работает с Arduino UNO
- поворот позиционного серводвигателя более чем на 180 градусов
- Почему loop() останавливается?
что он делает, когда он работает правильно?, @jsotola
Возможно ли, что серводвигатели потребляют слишком большой ток?, @Michel Keijzers
Является ли ваша батарея 9 В блочной батареей 9 В? Если да, вам следует перейти на другой тип батареи, поскольку блочные батареи 9 В предназначены для приложений с низким энергопотреблением. Они не могут обеспечить большой ток, и любой двигатель (сервопривод также является двигателем) может потреблять большой ток (особенно в остановленном состоянии)., @chrisl
да, это аккумуляторная батарея на 9 В. Будет ли достаточно батареи 6AA 9V для питания arduino uno или mega + 2 акселерометра + 1 серводвигатель?, @Marco Balletta