Доброго времени суток, недавно я столкнулся с новым драйвером управления. И я как новичок прошу помощи, как примерно подключить такой вид драйверов? И если есть, то желательно узнать, есть ли библиотека для таких драйверов. Вот сама ссылка на драйвер: https://www.pololu.com/product/2992 Буду очень признателен за помощь или объяснения в этом виде драйверов.
https://www.google.ru/search?newwin...hUKEwiVpNjDouvrAhVslYsKHW6mCkQQ4dUDCAY&uact=5 https://www.pololu.com/docs/0J72/5
Спасибо огромное за весь материал, но проблема в ином теперь, когда писал простой код для оборотов двигателя вперёд и назад, то почему-то движение вперёд производилось без разных проблем, а вот при движение назад, драйвер начал издавать звук Код (C++): #include <G2MotorDriver.h> #define DIR 2 #define PWM_Motor 3 int pwm = 0; void setup() { int i; digitalWrite(DIR, LOW); // Устанавливаем направление delay(100); for (i = 0; i<255; i++) { digitalWrite(PWM_Motor, LOW); digitalWrite(PWM_Motor, HIGH); delay(5000); } digitalWrite(DIR, HIGH); // Смена направления delay(100); for (i = 0; i<255; i++) { digitalWrite(PWM_Motor, LOW); digitalWrite(PWM_Motor, HIGH); delay(5000); } }
Я в вашем случае могу разве что предположить, что дело в том, что мотор еще крутится в другую сторону и от этого драйвер работает не в штатном режиме. А поэтому сначала его нужно затормозить, после чего уже крутить в другую сторону. Да и звуки у вас скорее всего издают обмотки мотора. Собственно судя по вашему коду так оно и есть вы на полной скорости пытаетесь резко изменить направление вращения и на драйвер падает двойная нагрузка по ЭДС по отношению к той на которую он рассчитан и его корежит от этого не по детски, если я правильно все понимаю. Но может быть и какие то другие причины.
Ага, понял вас. Вообще вы правы, нужно было сразу поставить таймер на торможение.... Просто я думал почему драйвер сразу начал нагревать себя, а тут оказалось что я допустил оплошность в самом коде. Огромное спасибо.
плюс ко всему у вас в коде совершенно не используется ШИМ, как я понял его у вас заменяет порнография Код (C++): for (i = 0; i<255; i++) { digitalWrite(PWM_Motor, LOW); digitalWrite(PWM_Motor, HIGH); delay(5000); } где у вас 256 раз с паузой в 5 секунд пин сначала уходит в состояние логического нуля, а потом практически сразу же в состояние логической единицы, отчего особого смысла лично я в этом коде не вижу.
Ага, тогда можете подсказать как могу упростить сам код?? Или как исправить саму проблему в программе??
Просто проверял я саму программу на движение двигателя вперёд потенциометром, но после подумал просто убрать сам ШИМ и сделать по времени движение вперёд и назад.
Доброго времени суток, я примерно изменил сам код на изменение направления двигателя. Но вопрос иной, куда лучше поставить таймер на торможение(задержку). Код (C++): #include <G2MotorDriver.h> #define dir 2 #define motor 3 int pwm = 0; void setup() { pinMode(dir, OUTPUT); pinMode(motor, OUTPUT); } void demoOne() { int i; digitalWrite(dir, LOW); // Устанавливаем направление назад delay(2000); for (i = 0; i < 255; i++){ analogWrite(motor, i); delay(20); } for (int i = 255; i >= 0; --i);{ analogWrite(motor, i); delay(20); } } void demoTwo() { int i; digitalWrite(dir, HIGH); // Устанавливаем направление вперёд delay(2000); for (i = 0; i < 255; i++){ analogWrite(motor, i); delay(20); } for (int i = 255; i >= 0; --i);{ analogWrite(motor, i); delay(20); } } void loop() { demoOne(); delay(1000); demoTwo(); delay(1000); }
Вопрос ваш не понял, а по части алгоритма исходил бы из условия, что каждый раз когда у вас меняется направление у вас должен отрабатывать код Код (C++): for (int i = 255; i >= 0; --i);{ analogWrite(motor, i); delay(20); } задержку в delay подбирайте методом научного тыка с помощью монитора порта и Serial, подставив вместо 20 свою переменную, задавая ее значение через этот самый монитор порта.
Ну типа когда я вначале подключил ардуино и драйвер к источнику питания, то весь код RC машина отработала, но как вы говорили выше, что проблема в быстром изменении направления. Я просто заметил как двигатель за одну секунду, или даже быстрее поменял направление..... И я вот думал куда лучше поставить переменную задержки после каждого движения. Или в void loop(), ну или есть возможность поставить таймер отдельно для каждого направления отдельно в void demoTwo() и voidOne().
Доброго времени суток. Сразу начну с вопроса который меня заинтересовал. У меня есть датчик Sharp 2y0a21 ссылка на библиотеку тоже есть, но я не могу понять как именно добавить переменную на изменение оборотов двигателя... Сам скетч на вычисление данных у меня есть Код (C++): #include <SharpIR.h> #define sensor A0 #define model 20150 void setup() { Serial.begin(9600); } void loop() { float volts = analogRead(sensor)*0.0048828125; // считываем значение сенсора и переводим в напряжение float distance = 65*pow(volts, -1.10); Serial.println(distance); // отображение в порт delay(1000); // ждём } А вот сам код на движение вперёд Код (C++): #include <G2MotorDriver.h> #define DIR 2 #define PWM_Motor 3 int PWM = 0; void setup() { pinMode(DIR, OUTPUT); pinMode(PWM_Motor, OUTPUT); } void loop(){ int i; digitalWrite(DIR, LOW); // Устанавливаем направление delay(2000); for (i = 0; i<255; i++) { digitalWrite(PWM_Motor, LOW); digitalWrite(PWM_Motor, HIGH); delay(5000); } И как вы посоветуете соединить два скетча?