Сделать робота стоимостью $50 очень просто. Мы уже поговорили про управление моторами робота и про его механические части. Теперь нужно связать всё воедино и запрограммировать электронику.

Соединения
Для правильного соединения Arduino, драйвера TB6612FNG, двигателей и держателей батареек желательно использовать приведенную ниже таблицу.

Код
Теперь мы можем проверить базовую функциональность нашего робота, поэтому для начала напишем небольшой фрагмент кода. Чтобы сохранить функцию main практически нетронутой, создадим для каждого базового движения свою функцию. Для понимания принципа работы приведем таблицу логики управления из документации на драйвер TB6612FNG.

/* Определить разводку выводов Arduino в соответствии с физическими соединениями */
#define PWMA 3
#define AIN1 0
#define AIN2 1
#define PWMB 5
#define BIN1 2
#define BIN2 4
#define STBY 6
void setup() {
/* Настроить все 7 выводов на выходы, идущие к драйверу TB6612FNG */
pinMode(PWMA,OUTPUT);
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
pinMode(PWMB,OUTPUT);
pinMode(BIN1,OUTPUT);
pinMode(BIN2,OUTPUT);
pinMode(STBY,OUTPUT);
}
void loop() {
startUp();
goForward();
delay(5500);
turnAround();
goForward();
delay(5500);
turnAround();
goBackward();
delay(5500);
rotateLeft();
delay(560);
rotateRight();
delay(560);
goForward();
delay(3000);
applyBrakes();
delay(2000);
}
/* Определение функций */
/* Опытным путем было выяснено, что при коэффициенте ШИМ равном 233 */
/* для левого двигателя и 255 для правого позволяют роботу */
/* двигаться по прямой на полной скорости. Тесты показали, что робот */
/* совершает 27 оборотов вокруг своей оси в минуту при вращении двигателей */
/* в противоположные стороны при полном заполнении ШИМ. Эта величина */
/* была использована для определения времени, */
/* за которое робот повернется на 90, 180 и 360 градусов. */
void goForward ()
{
digitalWrite (AIN1,HIGH);
digitalWrite (AIN2,LOW);
analogWrite(PWMA,234);
digitalWrite (BIN1,HIGH);
digitalWrite (BIN2,LOW);
analogWrite(PWMB,255);
}
void goBackward ()
{
digitalWrite (AIN1,LOW);
digitalWrite (AIN2,HIGH);
analogWrite(PWMA,233);
digitalWrite (BIN1,LOW);
digitalWrite (BIN2,HIGH);
analogWrite(PWMB,255);
}
void rotateRight ()
{
digitalWrite (AIN1,HIGH);
digitalWrite (AIN2,LOW);
analogWrite(PWMA,255);
digitalWrite (BIN1,LOW);
digitalWrite (BIN2,HIGH);
analogWrite(PWMB,255);
}
void rotateLeft ()
{
digitalWrite (AIN1,LOW);
digitalWrite (AIN2,HIGH);
analogWrite(PWMA,255);
digitalWrite (BIN1,HIGH);
digitalWrite (BIN2,LOW);
analogWrite(PWMB,255);
}
void veerLeft ()
{
digitalWrite (AIN1,HIGH);
digitalWrite (AIN2,LOW);
analogWrite(PWMA,190);
digitalWrite (BIN1,HIGH);
digitalWrite (BIN2,LOW);
analogWrite(PWMB,255);
}
void veerRight ()
{
digitalWrite (AIN1,HIGH);
digitalWrite (AIN2,LOW);
analogWrite(PWMA,255);
digitalWrite (BIN1,HIGH);
digitalWrite (BIN2,LOW);
analogWrite(PWMB,190);
}
void applyBrakes ()
{
digitalWrite (AIN1,HIGH);
digitalWrite (AIN2,HIGH);
analogWrite(PWMA,255);
digitalWrite (BIN1,HIGH);
digitalWrite (BIN2,HIGH);
analogWrite(PWMB,255);
}
void startUp ()
{
digitalWrite(STBY,HIGH);
}
void turnAround()
{
rotateLeft();
delay(1370);
}
void shutDown ()
{
digitalWrite(STBY,LOW);
}
Пробный пуск
Хотя робот еще слеп и глух, но он может уже совершать определенные движения. Вот как это выглядит:
В следующий раз мы добавим роботу ультразвуковой датчик, чтобы он мог ориентироваться в пространстве.
Робот на основе Arduino. Часть I – управление двигателями
Робот на основе Arduino. Часть II – шасси, средства передвижения и питание
Робот на основе Arduino. Часть IV – ультразвуковой датчик HC-SR04
Перевод © digitrode.ru