Merhaba. Ben bir servo motora bağlı HC-SR04 modülü ile 2 motorlu tekerlekli (klasik sarı dc motorlu) , HW 130 motor sürücülü bir engelden kaçan robot yapıyorum. Aşağıda paylaştığım kodu yüklediğimde, motor sürücü tiz bir bipleme sesi çıkarıyor. Bazı forumlarda frekans yüksekliğinden vs. olduğu yazılmış bazı forumlarda ise güç yetmediğinden olduğu. Harici güç girişinden 9V ile besliyorum. İzlediğim videodakinin aynısını yaptım, ama benimki nedense ötüyor. Yardımcı olabilirseniz sevinirim.
#include <AFMotor.h>
#include <NewPing.h>
#include <Servo.h>
#define TRIG_PIN A1
#define ECHO_PIN A0
#define MAX_DISTANCE 200
#define MAX_SPEED 190 // sets speed of DC motors
#define MAX_SPEED_OFFSET 20
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor left_motor2(2, MOTOR12_1KHZ);
AF_DCMotor right_motor3(3, MOTOR12_1KHZ);
Servo myservo;
boolean goesForward=false;
int distance = 100;
int speedSet = 0;
void setup() {
myservo.attach(10);
myservo.write(115);
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}
void loop() {
int distanceR = 0;
int distanceL = 0;
delay(40);
if(distance<=15)
{
moveStop();
delay(100);
moveBackward();
delay(300);
moveStop();
delay(200);
distanceR = lookRight();
delay(200);
distanceL = lookLeft();
delay(200);
if(distanceR>=distanceL)
{
turnRight();
moveStop();
}else
{
turnLeft();
moveStop();
}
}else
{
moveForward();
}
distance = readPing();
}
int lookRight()
{
myservo.write(50);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
}
int lookLeft()
{
myservo.write(170);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
delay(100);
}
int readPing() {
delay(70);
int cm = sonar.ping_cm();
if(cm==0)
{
cm = 250;
}
return cm;
}
void moveStop() {
left_motor2.run(RELEASE);
right_motor3.run(RELEASE);
}
void moveForward() {
if(!goesForward)
{
goesForward=true;
left_motor2.run(FORWARD);
right_motor3.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
left_motor2.setSpeed(speedSet);
right_motor3.setSpeed(speedSet);
delay(5);
}
}
}
void moveBackward() {
goesForward=false;
left_motor2.run(BACKWARD);
right_motor3.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
left_motor2.setSpeed(speedSet);
right_motor3.setSpeed(speedSet);
delay(5);
}
}
void turnRight() {
left_motor2.run(FORWARD);
right_motor3.run(BACKWARD);
delay(500);
left_motor2.run(FORWARD);
right_motor3.run(FORWARD);
}
void turnLeft() {
left_motor2.run(BACKWARD);
right_motor3.run(FORWARD);
delay(500);
left_motor2.run(FORWARD);
right_motor3.run(FORWARD);
}