Добрые люди. Подскажите пожалуйста, как подключить четыре моторчика ( http://ru.aliexpress.com/item/N20-R...e-Electric-Gear-Box-Motor-5PCS/543637993.html ) к ( http://ru.aliexpress.com/item/Big-D...UNO-Free-Shipping-Dropshipping/620258354.html ) ? Никак не могу разобраться, почему не работает библиотека? В дальнейшем хочу это все скомбинировать с ультразвуковым дальномером, чтобы избегать препятствия и менять курс движения. Заранее спасибо. CasperSimferНубДобрые люди. Подскажите пожалуйста, как подключить четыре моторчика ( http://ru.aliexpress.com/item/N20-R...e-Electric-Gear-Box-Motor-5PCS/543637993.html ) к ( http://ru.aliexpress.com/item/Big-D...UNO-Free-Shipping-Dropshipping/620258354.html ) ? Никак не могу разобраться, почему не работает библиотека? В дальнейшем хочу это все скомбинировать с ультразвуковым дальномером, чтобы избегать препятствия и менять курс движения. Заранее спасибо. CasperSimferНубДобрые люди. Подскажите пожалуйста, как подключить четыре моторчика ( http://ru.aliexpress.com/item/N20-R...e-Electric-Gear-Box-Motor-5PCS/543637993.html ) к ( http://ru.aliexpress.com/item/Big-D...UNO-Free-Shipping-Dropshipping/620258354.html ) ? Никак не могу разобраться, почему не работает библиотека? В дальнейшем хочу это все скомбинировать с ультразвуковым дальномером, чтобы избегать препятствия и менять курс движения. Заранее спасибо.
#include <AFMotor.h> AF_DCMotor motor(4); void setup() { Serial.begin(9600); // set up Serial library at 9600 bps Serial.println("Motor test!"); // turn on motor motor.setSpeed(200); motor.run(RELEASE); } void loop() { uint8_t i; Serial.print("tick"); motor.run(FORWARD); for (i=0; i<255; i++) { motor.setSpeed(i); delay(10); } for (i=255; i!=0; i--) { motor.setSpeed(i); delay(10); } Serial.print("tock"); motor.run(BACKWARD); for (i=0; i<255; i++) { motor.setSpeed(i); delay(10); } for (i=255; i!=0; i--) { motor.setSpeed(i); delay(10); } Serial.print("tech"); motor.run(RELEASE); delay(1000); }
А не мало ли 10мс на итерацию? Мотор поди и сообразить не успевает, что ему ехать нужно. Впрочем, там 2.5с набегает за цикл... м\б и нормально. Питание как организовано?
Скажите, пожалуйста, насколько большой у этих моторов крутящий момент? Для чего Вы их используюте? справляется с задачей?
подскажите пожалуйста лучше следующее. Гудит сервопривод, как будто бы он хочет крутиться,а ему некуда. Как убрать этот шум? серво MG995
подскажите пожалуйста, что это за ошибка? sketch_nov18a.ino:83:16: error: invalid suffix "nt" on integer constant
#include <AFMotor.h> #define trigPin 14 #define echoPin 15 AF_DCMotor motor1(1); // передний мотор AF_DCMotor motor2(2); // передний мотор AF_DCMotor motor3(3); // задний мотор AF_DCMotor motor4(4); // задний мотор int d1, d2; void set_speed(int speed) { motor1.setSpeed(speed); motor2.setSpeed(speed); motor3.setSpeed(speed); motor4.setSpeed(speed); } void robot_forward() { motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); } void robot_backward() { motor1.run(BACKWARD); motor2.run(BACKWARD); motor3.run(BACKWARD); motor4.run(BACKWARD); } void robot_release() { motor1.run(RELEASE); motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); } void turning_to_the_right() { motor1.run(FORWARD); motor3.run(FORWARD); motor2.run(BACKWARD); motor4.run(BACKWARD); } void turning_to_the_left() { motor2.run(FORWARD); motor4.run(FORWARD); motor1.run(BACKWARD); motor3.run(BACKWARD); } int get_distance() { long duration; int d_1, d_2, average = -1; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); d_1 = (int) duration / 58.2; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); d_2 = (int) duration / 58.2; average = (1nt) (d_1 + d_2) / 2; Serial.print("distance: "); Serial.print(average); return average; } void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); motor1.setSpeed(200); motor1.run(RELEASE); motor2.setSpeed(200); motor2.run(RELEASE); motor3.setSpeed(200); motor3.run(RELEASE); motor4.setSpeed(200); motor4.run(RELEASE); robot_forward(); } void loop() { if (get_distance() < 20){ Serial.println("backward"); robot_backward(); delay(1000); Serial.println("forward"); robot_forward(); } else if (get_distance() < 50){ robot_release(); delay(500); d1 = get_distance(); delay(500); d2 = get_distance(); if (d1 > d2){ Serial.println("turning to the right"); turning_to_the_right(); } else { Serial.println("turning to the left"); turning_to_the_left(); } delay(500); while (get_distance() < 50){ delay(500); } robot_forward(); } delay(500); }
спасибо. Это я исправил, но в чем проблема все еще осталась, так в том, что на каком то этапе своего пути робот просмотрев направо и налево начинает ехать прямо(если нет преград), но как он упирается в стену, он просто начинает двигаться вперед-назад...и так бесконечно, пока его не поставить на свободную от преград местность. как исправить не могу сообразить. Вот конечный код, который я сейчас имею #include <Servo.h> #include <AFMotor.h> #define trigPin 14 #define echoPin 15 AF_DCMotor motor_b1(1); AF_DCMotor motor_b2(2); AF_DCMotor motor_f1(3); AF_DCMotor motor_f2(4); Servo neck; int d1, d2; void set_speed(int speed) { motor_b1.setSpeed(speed); motor_b2.setSpeed(speed); motor_f1.setSpeed(speed); motor_f2.setSpeed(speed); } void robot_forward() { motor_b1.run(FORWARD); motor_b2.run(FORWARD); motor_f1.run(FORWARD); motor_f2.run(FORWARD); delay(1000); } void robot_backward() { motor_b1.run(BACKWARD); motor_b2.run(BACKWARD); motor_f1.run(BACKWARD); motor_f2.run(BACKWARD); delay(1000); } void robot_release() { motor_b1.run(RELEASE); motor_b2.run(RELEASE); motor_f1.run(RELEASE); motor_f2.run(RELEASE); delay(1000); } void turning_to_the_right() { motor_b1.run(FORWARD); motor_f2.run(FORWARD); motor_b2.run(BACKWARD); motor_f1.run(BACKWARD); delay(1000); } void turning_to_the_left(){ motor_b2.run(FORWARD); motor_f1.run(FORWARD); motor_b1.run(BACKWARD); motor_f2.run(BACKWARD); delay(1000); } int get_distance() { long duration; int d_1, d_2, average = -1; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); d_1 = (int) duration / 58.2; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); d_2 = (int) duration / 58.2; average = (int) (d_1 + d_2) / 2; Serial.print("distance: "); Serial.println(average); return average; } void setup() { Serial.begin(19200); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); neck.attach(10); neck.write(120); set_speed(200); robot_forward(); } void loop() { if (get_distance() < 20){ Serial.println("backward"); robot_backward(); delay(1000); Serial.println("forward"); robot_forward(); } else if (get_distance() < 50) { robot_release(); neck.write(70); delay(500); d1 = get_distance(); neck.write(170); delay(500); d2 = get_distance(); if (d1 > d2) { Serial.println("turning to the right"); turning_to_the_right(); } else { Serial.println("turning to the left"); turning_to_the_left(); } neck.write(120); delay(500); while (get_distance() < 50) { delay(500); } robot_forward(); } delay(500); }
Поворачивай его не полностью, у меня такая же фигня с FS90. Максимальный угол легко выявить поворачивая его например потенциометром и отправляя угол по USB на компьютер.
Разберитесь сначала с понятиями силы тока и напряжением. Бывают ситуации когда не хватает напряжения, а бывает когда не хватает тока. Есть достаточно много примеров на основе воды ясно показывающие, что такое напряжение и сила тока и в чем разница между ними. А если компиляция происходит без ошибок, это совершенно не значит, что код будет работать так как вы захотели. Бывают как синтаксические ошибки (не верное написание функций, недостача запятых, скобок, лишние знаки) из за которых не компилируется код, а кроме этого есть и логические ошибки. Компиляция при этом происходит без ошибок, но код не работает или не работает как Вам надо ибо все функции верно написаны и все знаки на месте, но неверна логика построения кода. Один из банальных примеров логический ошибки это прописать LOW вместо HIGH или перепутать местами пины = код компилируется, но работает не так как хотите, ибо программа действует как Вы написали код, а не как Вы захотели. Для начала, если сложно с этим, напишите на бумаге ручкой по порядку НА РУССКОМ ЯЗЫКЕ БУКВАМИ по пунктам, что должна делать программа и подумайте, нет ли ошибок логики в этой цепочке, последовательность действий должна быть логичной. Нельзя полить огород из колодца, а потом узнать, что в колодце нет воды. Предвидите результат работы кода, что будет если случится так, а что будет если будет эдак? Напишите условия для исполнения любого из событий, если это необходимо. После чего переводите каждую строчку на язык программирования с соблюдением всех правил синтаксиса и вдумываясь в каждую строчку - "а то ли я пишу?"