робот (набор) на колесной базе + следование по заданному пути
- Войдите на сайт для отправки комментариев
Доброго времени суток, наконец получил долгожданную посылку с набором робота. Скачал диск с инструкциями (там же). Но "благородные" китайцы повыкладывали документацию половина на своем родном, половина на английском, при этом многие скетчи по распиновке не соответствуют общей сборке.
Опыт работы с ардуино практически нулевой (несколько уроков от Джереми...) прошу помощи, совета.
Первое что хочу реализовать это следование по пути.
Из документации имеем 2 общие схемы, на которых будет производится тестирование и сборка.
Используя макетную плату реализовал кусок схемы используя CNY70 сенсор (3 шт), драйвер двух двигателей на L298N и сами двигатели с робоплатформы.
По драйверу на L298N
in1 на 5 выход ардуино
in2 на 6 выход ардуино
in3 на 10 выход ардуино
in4 на 11 выход ардуино
5V через макетку на 5V ардуино
GRD через макетку на GRD ардуино
ENA ENB не подключал, хотя на втрой схеме там стрелки малиновым цветом идут на 10 и 6 пины а в скетче не используются.
Привожу скетч из набора ("кракозябры" это китайский):
int MotorRight1=5; int MotorRight2=6; int MotorLeft1=10; int MotorLeft2=11; const int SensorLeft = 7; //вС╦п°yфВщ■хКд_ const int SensorMiddle= 4 ; //жп╦п°yфВщ■хКд_ const int SensorRight = 3; //ср╦п°yфВщ■хКд_ int SL; //вС╦п°yфВ═Н▒B int SM; //жп╦п°yфВ═Н▒B int SR; //ср╦п°yфВ═Н▒B void setup() { Serial.begin(9600); pinMode(MotorRight1, OUTPUT); // д_н╩ 8 (PWM) pinMode(MotorRight2, OUTPUT); // д_н╩ 9 (PWM) pinMode(MotorLeft1, OUTPUT); // д_н╩ 10 (PWM) pinMode(MotorLeft2, OUTPUT); // д_н╩ 11 (PWM) pinMode(SensorLeft, INPUT); //╤╗аxвС╦п°yфВ pinMode(SensorMiddle, INPUT);//╤╗аxжп╦п°yфВ pinMode(SensorRight, INPUT); //╤╗аxср╦п°yфВ } void loop() { SL = digitalRead(SensorLeft); SM = digitalRead(SensorMiddle); SR = digitalRead(SensorRight); if (SM == HIGH)//жп╦п°yфВтз╨зи╚┘^сР { if (SL == LOW & SR == HIGH) // вС╨зср╟в, оРвСчD▐² { digitalWrite(MotorRight1,LOW); digitalWrite(MotorRight2,HIGH); analogWrite(MotorLeft1,0); analogWrite(MotorLeft2,80); } else if (SR == LOW & SL == HIGH) //вС╟вср╨з, оРсрчD▐² { analogWrite(MotorRight1,0);//срчD analogWrite(MotorRight2,80); digitalWrite(MotorLeft1,LOW); digitalWrite(MotorLeft2,HIGH); } else // ┐и┌х╬Ы·И╟ви╚, ж╠ъM { digitalWrite(MotorRight1,LOW); digitalWrite(MotorRight2,HIGH); digitalWrite(MotorLeft1,LOW); digitalWrite(MotorLeft2,HIGH); analogWrite(MotorLeft1,200); analogWrite(MotorLeft2,200); analogWrite(MotorRight1,200); analogWrite(MotorRight2,200); } } else // жп╦п°yфВтз╟ви╚┘^сР { if (SL == LOW & SR == HIGH)// вС╨зср╟в, ©ЛкывСчD { digitalWrite(MotorRight1,LOW); digitalWrite(MotorRight2,HIGH); digitalWrite(MotorLeft1,LOW); digitalWrite(MotorLeft2,LOW); } else if (SR == LOW & SL == HIGH) // вС╟вср╨з, ©ЛкысрчD { digitalWrite(MotorRight1,LOW); digitalWrite(MotorRight2,LOW); digitalWrite(MotorLeft1,LOW); digitalWrite(MotorLeft2,HIGH); } else // ╤╪йг╟ви╚, мёж╧ { digitalWrite(MotorRight1,HIGH); digitalWrite(MotorRight2,LOW); digitalWrite(MotorLeft1,HIGH); digitalWrite(MotorLeft2,LOW); }} }
после заливки в ардуино моторы никак не реагируют, хотя датчики (можно судить по светодиодам на их платах) работают.
Р.С. Никакие джамперы на драйвере двигателей не трогал и не переключал.
Может не хватает питания в 5 вольт от ардуино и нужно брать все-таки внешнее (запитывал по ЮСБ от компа)?
Прошу совета по этому всему.
ENA ENB не подключал, хотя на втрой схеме там стрелки малиновым цветом идут на 10 и 6 пины а в скетче не используются.
http://robocraft.ru/blog/arduino/170.html
http://robocraft.ru/blog/electronics/563.html
Насколько я понял необходимо задействовать и En1 En2, подав на них значение HIGTH.
Взял даташит на драйвер :
распиновку сделал как на рисунке, единственное добавил питание 5в с ардуннки (Уно) и перенес пины ИК датчиков на 7, 12, 13.
изменил скетч следующим образом:
добавив вывод на сериал.принт чтобы видеть вхождение в условия.
В итоге по условиям "заходы есть" а колеса как не крутились так и не крутятся...
Может нужно внешнее питание (например об БП компьютера +12в)? если да, то менять что-то на джамперах или нет? Или что-то другое?
Вот вам цитата про оригинальный Драйвер моторов:
Плата расширения Arduino Motor обязательно должна питаться от внешнего источника питания, поскольку микросхема L298, расположенная на плате, имеет два раздельных блока питания: один для логики, второй для управления потреблением двигателя. Ток потребления двигателя гораздо больше, чем может дать USB.
Внешнее питание (не USB) может подаваться либо с AC/DC преобразователя, либо с батареи. Соединение с адаптером выполняется подключением штекера 2,1 мм с центральным положительным контактом к разъему питания платы Arduino, на которой установлена плата расширения, либо подключением проводов, по которым подается питание, к зажимным контактам Vin и GND (обратите внимание на соблюдение полярности).
Чтобы избежать повреждения платы Arduino, на которой установлена плата расширения, мы рекомендуем использовать внешний источник питания напряжением от 7 до 12 В. Если вашему двигателю требуется напряжение более 9 В, мы рекомендуем вам разделить шины питания платы расширения и платы Arduino, на которой плата расширения установлена. Это возможно, если удалить перемычку "Vin Connect"на обратной стороне платы. Абсолютный предел напряжения Vin на зажимных контактах составляет 18 В.
http://arduino.ru/Hardware/ArduinoMotorShieldR3
Спасибо за ответы, подключил к БП от компа (+12 и - на общую землю) и все заработало (проверял на тестовом скетче), немного "дособираю" платформу и повыкладываю в проекты.
Базового функционала предостаточно, только китайцы со своими доками немного разочаровали...