arduino - arudino car bot的问题,伺服电机随机移动也很快变热
问题描述
我是一个绝对的初学者
我正在尝试创建一个 Arduino 避障车。我正在使用Arduino uno +shield(传感器屏蔽v5.0),问题是当我上传colde时,伺服随机移动(它不会向右旋转)并且很快变热,它是一个5v的SG90。我已经检查了几次,硬件似乎没有问题。
我试图改变伺服的角度,检查了几次引脚 - 多次上传代码我也使用了 serial.prints。在互联网上研究过。
#include <NewPing.h> //Ultrasonic sensor function library. You must install this library
//our L298N control pins
const int LeftMotorForward = 5;
const int LeftMotorBackward = 4;
const int RightMotorForward = 1;
const int RightMotorBackward = 0;
//sensor pins
#define trig_pin A1 //analog input 1
#define echo_pin A2 //analog input 2
#define maximum_distance 200
boolean goesForward = false;
int distance = 100;
NewPing sonar(trig_pin, echo_pin, maximum_distance); //sensor function
Servo servo_motor; //our servo name
void setup(){
pinMode(RightMotorForward, OUTPUT);
pinMode(LeftMotorForward, OUTPUT);
pinMode(LeftMotorBackward, OUTPUT);
pinMode(RightMotorBackward, OUTPUT);
servo_motor.attach(11); //our servo pin
servo_motor.write(90);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}
void loop(){
int distanceRight = 0;
int distanceLeft = 0;
delay(50);
if (distance <= 20){
moveStop();
delay(300);
moveBackward();
delay(400);
moveStop();
delay(300);
distanceRight = lookRight();
delay(300);
distanceLeft = lookLeft();
delay(300);
if (distance >= distanceLeft){
turnRight();
moveStop();
}
else{
turnLeft();
moveStop();
}
}
else{
moveForward();
}
distance = readPing();
}
int lookRight(){
servo_motor.write(10);
delay(500);
int distance = readPing();
delay(100);
servo_motor.write(90);
return distance;
}
int lookLeft(){
servo_motor.write(170);
delay(500);
int distance = readPing();
delay(100);
servo_motor.write(90);
return distance;
delay(100);
}
int readPing(){
delay(70);
int cm = sonar.ping_cm();
if (cm==0){
cm=250;
}
return cm;
}
void moveStop(){
digitalWrite(RightMotorForward, LOW);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorBackward, LOW);
digitalWrite(LeftMotorBackward, LOW);
}
void moveForward(){
if(!goesForward){
goesForward=true;
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorBackward, LOW);
}
}
void moveBackward(){
goesForward=false;
digitalWrite(LeftMotorBackward, HIGH);
digitalWrite(RightMotorBackward, HIGH);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorForward, LOW);
}
void turnRight(){
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorBackward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorForward, LOW);
delay(500);
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorBackward, LOW);
}
void turnLeft(){
digitalWrite(LeftMotorBackward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorBackward, LOW);
delay(500);
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorBackward, LOW);
}```
Expected to the servo to rotate 90 degrees, but right now the servo is moving randomly-
解决方案
我不是电子专家,但如果电机变热(以异常方式),电源可能会提供电机输入无法处理的更高输出(伏特/安培)(最大伏特/安培)。尝试测试电源是否提供超过电机的最大电流和电压。
推荐阅读
- linux - 列出 Linux 中的用户
- python - ModuleNotFoundError:没有名为“python”的模块
- azure-data-factory-2 - Azure 数据工厂是否支持 EBCDIC 文件?
- vimeo - 保持 Vimeo 控制栏嵌入,但将时间码更改为显示 0:00 开始?
- javascript - 如何让 addEventListener 点击条件与 hbs 中的单选按钮一起工作
- google-apps-script - 谷歌应用脚本的数据查询问题
- javascript - 根据对象的对象生成对象数组
- autodesk-forge - Autodesk Forge 设计自动化冻结
- c# - (2D) 在 Unity 中使用脚本制作 GameObject Shake
- java - 我们可以在 C++ 资源中嵌入可执行 jar 文件并从内存中运行它吗?