суббота, 4 февраля 2017 г.

Настоящий робот

В этой статье я расскажу об электронике установленной на мою новую платформу. Также здесь приведен простой тестовый скетч.


Фотография робота


Сейчас управление роботом возложено на Arduino UNO


Для более комфортной работы с ардуино, используется Arduino Sensor Shield v5.0


Драйвер двигателей на L298N


Закреплено всё на нейлоновых стойках


Источником энергии служит аккумулятор LiPo 3S 1600mAh


Компактные, легкие, ёмкие. Но пожароопасные и взрывоопасные.

Хранить и заряжать их следует в специальных защитных пакетах.


Литий полимерные аккумуляторы настоятельно не рекомендуется эксплуатировать без специальных устройств контроля напряжения


Литий полимерные аккумуляторы, зарядные устройства для них и прочее связанное с литиевыми аккумуляторами лучше покупать на https://hobbyking.com/

Последствия неправильного обращения с литиевыми аккумуляторами можно увидеть на http://youtube.com/ Ищите по ключевым словам lipo и fire.

Подключается всё в соответствии с изложенными ниже инструкциями.

arduino uno --- motor driver
D9 --- IN4
D10 --- IN3
D11 --- IN2
D12 --- IN1

motor driver --- left motor
OUT3 --- M1 (зеленый провод)
OUT4 --- M2 (черный провод)

motor driver --- right motor
OUT2 --- M1 (зеленый провод)
OUT1 --- M2 (черный провод)

motor driver --- battery (12V)
GND --- минус батареи (черный провод)
+12V --- плюс батареи (красный провод)

На батарее используется разъем XT60


Мне паять было лень и я подключил батарею через маленькие крокодильчики. Ток небольшой. Всё работает. Но нужна осторожность. Если устроить короткое замыкание литиевой батарее, то мало не покажется.

К ардуино батарея подключается через Power Plug Connector Adapter 2.1*5.5 mm


Точных измерений я не проводил. Однако некоторые приблизительные расчеты думаю следует привести.

При потреблении 350 миллиампер одним двигателем, получится 1400 миллиампер для четырех моторов. Если остальной электронике отвести 200 миллиампер, в сумме будет 1600 миллиампер. С аккумулятором на 1600mAh робот сможет непрерывно передвигаться около часа.

Аккумулятор способный отдать большой ток, вроде использованного мной, не нужен. Если бы я покупал аккумулятор специально для этой платформы, то взял бы Zippy LiFePo4 3s 9.9v 1800mAh 5c. Эти аккумуляторы более безопасны.

Скетч

////////////////////////
//
// Arduino UNO
//
////////////////////////
//
// Sketch: Robot
//

#include <util/delay.h>

const unsigned char IN1 = 12;
const unsigned char IN2 = 11;
const unsigned char IN3 = 10;
const unsigned char IN4 = 9;

void motors_init();
void stop();
void forward();
void backward();
void right();
void left();

void setup()
{
    motors_init();
    stop();
    _delay_ms(4000);
}

void loop()
{
    forward();
    _delay_ms(2000);
    stop();
    _delay_ms(1000);

    backward();
    _delay_ms(2000);
    stop();
    _delay_ms(1000);

    right();
    _delay_ms(2000);
    stop();
    _delay_ms(1000);

    left();
    _delay_ms(2000);
    stop();
    _delay_ms(1000);
}

void motors_init()
{
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);
}

void stop()
{
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
}

void forward()
{
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
}

void backward()
{
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
}

void right()
{
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
}

void left()
{
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
}

//
// End
//
////////////////////////

Выполняется программа следующим образом. После подачи питания робот стоит на месте четыре секунды. Затем робот едет вперед две секунды. Останавливается и стоит одну секунду. Затем едет назад две секунды. Останавливается и снова стоит одну секунду. Дальше робот поворачивает направо в течении двух секунд. Затем стоит одну секунду. Потом поворачивает налево в течении двух секунд. Опять останавливается на одну секунду. И всё повторяется начиная с движения вперед.

Этот скетч дает возможность визуально оценить скорость движения, скорость поворота.

Платформа получилась более быстрой, чем хотелось. Нужно будет её немного замедлить.

И таки да. Это уже настоящий мобильный робот.