гусеничный вездеход

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Lunatic, 22 сен 2015.

  1. Lunatic

    Lunatic Нуб

    Здравствуйте, появилось желание собрать своего робота с управлением по Bluetooth.
    Для этого здесь был куплен двойной мотор-редуктор, набор гусениц и платформа от Tamiya.
    Из электроники:
    arduino Uno
    sensor shield v5
    bluetooth hc-05
    драйвер двигателя L298N
    Встал вопрос с питанием проекта. На нижнем этаже пространство ограничено. Максимальная длина акумулятора 6см. Выбор пал на ZIPPY Flightmax 800mAh 2S1P 20C для питания драйвера двигателя с моторами.
    Подскажите сколько на нем примерно по времени можно будет откатать?
     

    Вложения:

    • IMG_0025.JPG
      IMG_0025.JPG
      Размер файла:
      420,6 КБ
      Просмотров:
      711
  2. vvr

    vvr Инженерище

    смотрите сколько ампер потребляют ваши моторы, прибавьте полампера на всю электронику - получим потребление всей системы
    делим 800mah на потребляемый ток и будем знать ориентировочное время для покатушек
    в реале получится меньше
     
  3. Lunatic

    Lunatic Нуб

    Друзья, подскажите!
    Пришел ко мне ZIPPY Flightmax 800mAh 2S1P 20C. Запитал им напрямую драйвер двигателя L298N. Саму ардуинку питаю от кроны. Все собрал. Залил
    const int TIMEOUT_TIME_MS = 150;
    unsigned long lastPilotSymbolTime;
    char symbol;

    int val;
    int IN1 = 7; // выводы модуля L298N подключены к следующим пинам Arduino
    int IN2 = 6;
    int IN3 = 5;
    int IN4 = 4;
    int LED = 13; // используем встроенный светодиод для индикации работы

    enum States
    {
    WAITING,
    READING,
    RUNNING,
    ERROR,
    TIMEOUT
    };

    States state;
    States onWait();
    States onRead();
    States onRun();
    States onError();

    States onTimeout();

    void setup()
    {
    Serial.begin(9600);
    lastPilotSymbolTime = 0;
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);

    //используем 13 пин как индикатор включённой ардуины
    pinMode(LED, OUTPUT);
    digitalWrite(LED, HIGH);
    }

    void loop()
    {
    switch (state)
    {
    case WAITING:
    state = onWait();
    break;
    case READING:
    state = onRead();
    break;
    case RUNNING:
    state = onRun();
    break;
    case TIMEOUT:
    state = onTimeout();
    break;
    default:
    state = onError();
    }
    }

    States onWait()
    {
    if (Serial.available() > 0)
    {
    return READING;
    }
    if (lastPilotSymbolTime && (millis() - lastPilotSymbolTime > TIMEOUT_TIME_MS))
    {
    return TIMEOUT;
    }
    return WAITING;
    }

    States onRead()
    {
    symbol = Serial.read();
    return RUNNING;
    }

    States onRun()
    {
    switch (symbol)
    {
    case 'W':
    //начало действий при полученном символе 'W' (вперед)
    //[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    break;
    case 'S':
    //начало действий при полученном символе 'S' (назад)
    //[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    break;
    case 'D':
    //начало действий при полученном символе 'D' (вправо)
    //[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    break;
    case 'A':
    //начало действий при полученном символе 'A' (влево)
    //[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    break;
    case 'T':
    //начало действий при полученном символе 'T' (остановка)
    //[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    break;
    }
    return WAITING;
    }

    States onError()
    {
    //Получены неоговоренные символы. Очищаем ввод и продолжаем.
    //Здесь можно добавить какие-то действия для этой ситуации.
    //...
    while (Serial.available())
    {
    Serial.read();
    }
    return WAITING;
    }

    States onTimeout()
    {
    //Действия при таймауте.
    //Вероятно, связь утеряна,
    //но при получении контрольного символа она будет восстановлена.
    //Здесь, например, уместно выключить двигатели
    //[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
    digitalWrite(IN1, LOW); // На пары выводов IN поданы сигналы одинакового уровня, моторы не работают
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    if (Serial.available())
    {
    return READING;
    }
    return TIMEOUT;


    Все работает, но измерил напряжение котрое идет на моторы 6В, по ттх моторов максимум 3 надо. http://files.amperka.ru/datasheets/fa-130ra.pdf
    вопрос как его ограничить?
     
  4. Lunatic

    Lunatic Нуб

    Народ прошу помощи в данном вопросе.
     
  5. vvr

    vvr Инженерище