roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 14:45

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 216 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10 ... 15  След.
Автор Сообщение
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 12 ноя 2014, 17:30 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
на заморском сайте нашел
http://www.robotshop.com/ca/en/wild-thumper-6v-dc-motor-751.html

но блин от туда доставка будет дороже чем сам товар :)

а в Китае чет найти не могу, хотя эти движки китайские


п.с. сравнение целой и убитой
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 12 ноя 2014, 19:02 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
из как минимум десятков магазинов нашли только в одном? если отделить стоимость моторов от доставки, мотор-редукторы в основном 15-20, доставка 5-30. а дальше в основном влияет вес. думайте, ищите. где мотор-редукторы от дагу, а где нет, уже другой момент.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 12 ноя 2014, 22:04 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
сегодня погонял ребенка тачкой по комнате :)
поначалу он ее боялся, потом я научил его через клавиатуру жать нужные кнопки(я на них наклеил белые наклейки, клава черная) ребенок понял что машиной можно управлять и перестал ее бояться, дальше играли в догонялки. мин через 10-15 покатушек на 150 скорости(макс 250, но решил ограничить) потрогал моторы, ощутимо теплые но не горячие, хотя это через редуктор и пластиковый кожух. думаю что сами моторы градусов до 40-45 нагрелись, примерно так же нагрелась пробка(включатель) на плате тирекса ничего не нагрелось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 17 ноя 2014, 17:03 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
собрал из разных кусков вот такой скетч


Код:
#include <BTCA2ALite.h>
#include <Servo.h> // Добавляем библиотеку

    Servo myservoH; // Горизонтальная серва углы от 25 до 145 (центровка 85)
    Servo myservoV; // Вертикальная серва углы от 0 до 35
    const int H_SERVO_PIN = 7; // Горизонтальная серва подключена к пину 7
    const int V_SERVO_PIN = 8; //Пин вертикального сервопривода 8
    const float H_L_ANGLE = 180; // Максимальные угл поворота башни налево
    const float H_R_ANGLE = 0;  // Максимальные угл поворота башни направо
    const float H_DEF_ANGLE = 89; // Дефолтный угол (центровка)
    const float V_U_ANGLE = 70;  // Максимальные угл поворота башни вверх
    const float V_D_ANGLE = 4; // Максимальные угл поворота башни вниз
    const float V_DEF_ANGLE = 55; // Дефолтный угол (центровка)
    //Размер шага V_STEP и H_STEP побираем экспериментально для достижения нужной скорости поворота серв
    const float V_STEP = 0.007; // Шаг - знаение отвечающее за скорость вращения по вертикали.
    const float H_STEP = 0.012; // Шаг - знаение отвечающее за скорость вращения по горизонтали
    float curVAngle = V_DEF_ANGLE; //Переменная текущего угла верт. сервы
    float curHAngle = H_DEF_ANGLE; //Переменная текущего угла гор. сервы
    bool moveServoVUp = false; //Флаг движения верт. сервы вверх
    bool moveServoVDown = false; //Флаг движения верт. сервы вниз
    bool moveServoHLeft = false; //Флаг движения гор. сервы влево
    bool moveServoHRight = false; //Флаг движения гор. сервы вправо

btca2aLite btca2aLite; // Конструктор btca2aLite

// Для удобства подключения, затвор мосфета подключен к аналоговому входу A0, однако,
    // входы A0-A6 можно использовать как цифровые, в коде будут нумероваться как 14-19
    int SHOT = 12; 

int Speed = 80; // Текущая максимальная скорость
int TSpeed = 150; // Скорость тупящего мотора при повороте
int RLSpeed = 200; // Скорость танкоаого разворота

#define Dir_L 2
#define Pwm_L 3
#define Brake_L 4

#define Dir_R 10
#define Pwm_R 11
#define Brake_R 9




enum States
    {
      WAITING,
      READING,
      RUNNING,
      ERROR,
      TIMEOUT
    };
     
    States state;
    States onWait();
    States onRead();
    States onRun();
    States onError();
     
    States onTimeout();
     
    void performServo();



void setup(){
  Serial.begin(9600); // Скорость BT и порта должна быть 9600
  //Моторы
  pinMode (Pwm_L, OUTPUT);
  pinMode (Dir_L, OUTPUT);
  pinMode (Brake_L, OUTPUT);

  pinMode (Pwm_R, OUTPUT);
  pinMode (Dir_R, OUTPUT);
  pinMode (Brake_R, OUTPUT);

  digitalWrite (Pwm_L, LOW);
  digitalWrite (Pwm_R, LOW);

  digitalWrite (Brake_L, LOW);
  digitalWrite (Brake_R, LOW);
 
 
  // устанавливаем пин как вывод управления сервой 
      myservoH.attach(H_SERVO_PIN);
      myservoV.attach(V_SERVO_PIN);
      myservoH.write(curHAngle);
      myservoV.write(curVAngle);
 

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

void loop(){

  btca2aLite.ReadCommand(); // Считывание принятых команд (кодов кнопок)


  //---------- Движение Вперед —-------------
  if (btca2aLite.ButtonPressed(KEYCODE_DPAD_UP)) // Едет вперед если нажат курсор ВПЕРЕД
  {
    if (btca2aLite.ButtonPressed(KEYCODE_DPAD_RIGHT)){ // Поворот направо при нажатии курсора ВПЕРЕД и ВЛЕВО
      digitalWrite (Dir_L, HIGH);
      analogWrite (Pwm_L, TSpeed);
      digitalWrite (Dir_R, HIGH);
      analogWrite (Pwm_R, Speed); 
    }
    if (btca2aLite.ButtonPressed(KEYCODE_DPAD_LEFT)){ // Поворот налево при нажатии курсора ВПЕРЕД и ВПРАВО
      digitalWrite (Dir_L, HIGH);
      analogWrite (Pwm_L, Speed);
      digitalWrite (Dir_R, HIGH);
      analogWrite (Pwm_R, TSpeed);
    }
    digitalWrite (Dir_L, HIGH);
    analogWrite (Pwm_L, Speed);
    digitalWrite (Dir_R, HIGH);
    analogWrite (Pwm_R, Speed);
  }

  //--------- Движение Назад —-------------
  if (btca2aLite.ButtonPressed(KEYCODE_DPAD_DOWN)) // Едет назад если нажат курсор НАЗАД
  {
    if (btca2aLite.ButtonPressed(KEYCODE_DPAD_RIGHT)){ // Поворот налево при нажатии курсора НАЗАД и ВЛЕВО
      digitalWrite (Dir_L, LOW);
      analogWrite (Pwm_L, TSpeed);
      digitalWrite (Dir_R, LOW);
      analogWrite (Pwm_R, Speed);
    }
    if (btca2aLite.ButtonPressed(KEYCODE_DPAD_LEFT)){ // Поворот направо при нажатии курсора НАЗАД и ВПРАВО
      digitalWrite (Dir_L, LOW);
      analogWrite (Pwm_L, Speed);
      digitalWrite (Dir_R, LOW);
      analogWrite (Pwm_R, TSpeed);
    }
    digitalWrite (Dir_L, LOW);
    analogWrite (Pwm_L, Speed);
    digitalWrite (Dir_R, LOW);
    analogWrite (Pwm_R, Speed);
  }

  //--------- Движение Влево (Танковый разворот) —-------------
  if (btca2aLite.ButtonPressed(KEYCODE_DPAD_LEFT )) // Едет вперед если нажат курсор ВПЕРЕД
  {
    digitalWrite (Dir_L, LOW);
    analogWrite (Pwm_L, RLSpeed);
    digitalWrite (Dir_R, HIGH);
    analogWrite (Pwm_R, RLSpeed);
  }

  //--------- Движение Вправо (Танковый разворот) —-------------
  if (btca2aLite.ButtonPressed(KEYCODE_DPAD_RIGHT)) // Едет вперед если нажат курсор ВПЕРЕД
  {
    digitalWrite (Dir_L, HIGH);
    analogWrite (Pwm_L, RLSpeed);
    digitalWrite (Dir_R, LOW);
    analogWrite (Pwm_R, RLSpeed);
  }

   //--------- движение горизонтальной сервы —-------------
  if (btca2aLite.ButtonPressed(KEYCODE_DPAD_RIGHT)) // Едет вперед если нажат курсор ВПЕРЕД
  {
    digitalWrite (Dir_L, HIGH);
    analogWrite (Pwm_L, RLSpeed);
    digitalWrite (Dir_R, LOW);
    analogWrite (Pwm_R, RLSpeed);
  }


    //Вызываем функцию управление сервами
      performServo();


  //---------- Переключение скоростей —-------------

if(btca2aLite.Button(KEYCODE_BUTTON_X)) // servoV вниз
   {
  moveServoVDown = true;
   }
   if(btca2aLite.Button(KEYCODE_BUTTON_Y)) // servoH движется к 25
   {
    moveServoHRight = true;
   }
   if(btca2aLite.Button(KEYCODE_BUTTON_B)) // servoV вверх
   {
     moveServoVUp = true;
     
   }

   if(btca2aLite.Button(KEYCODE_BUTTON_A)) // servoH движется к 145
   {
    moveServoHLeft = true;
   }



  //------------------ Стоп —---------------------

  // Если не нажата ни одна кнопка курсора происходит остановка, скорость 0 для каждого мотора
  if (btca2aLite.ButtonReleased(KEYCODE_DPAD_UP) && btca2aLite.ButtonReleased(KEYCODE_DPAD_DOWN) && btca2aLite.ButtonReleased(KEYCODE_DPAD_LEFT) && btca2aLite.ButtonReleased(KEYCODE_DPAD_RIGHT)){
    analogWrite (Pwm_L, 0);
    analogWrite (Pwm_R, 0);
  }


//Функция управления сервоприводами (вызывается в теле loop на каждой итерации)
    //Выполняет изменения положения серв на подобранный шаг согласно установленным флагам движения
    //Флаги устанавливаются согласно поступившим символам управления сервами
    void performServo()
    {
      //Установлен флаг движения вверх и текущий угол не максимальный
      if (moveServoVUp && curVAngle + V_STEP <= V_U_ANGLE)
      {
        //К текущему верт. углу прибавляем шаг
        curVAngle += V_STEP;
      }
      //Установлен флаг движения вниз и текущий угол не минимален
      else if (moveServoVDown && curVAngle - V_STEP >= V_D_ANGLE)
      {
        //От текущего верт. угла отнимаем шаг
        curVAngle -= V_STEP;
      }
      //Установлен флаг движения влево и текущий угол не максимален
      if (moveServoHLeft && curHAngle + H_STEP <= H_L_ANGLE)
      {
        //К текущему гор. углу прибавляем гор. шаг
        curHAngle += H_STEP;
      }
      //Установлен флаг движения вправо и текущий угол не минимален
      else if (moveServoHRight && curHAngle - H_STEP >= H_R_ANGLE)
      {
        //От текущего угла отнимаем гор. шаг
        curHAngle -= H_STEP;
      }
     
      //Если было движние по вертикали
      if (moveServoVUp || moveServoVDown)
      {
            myservoV.write(curVAngle);
      }
      //Если было движение по горизонтали
      if (moveServoHLeft || moveServoHRight)
      {
        myservoH.write(curHAngle);
      }
    }



задача управлять с мобилки тележкой, вперед, назад, лева, право... и 2мя серва приводами, по горизонтали и вертикали.
с ездой проблем нет, а вот с сервами есть косяк.

при включении как и должно быть они становяться в заданное положение, но при нажатии на кнопки управления серва вместо сдвига на небольшой шаг, начинает делать много шагов подряд пока не упереться в предел...

как ограничить шаги, чтобы при нажатии 1 раз на кнопку выполнился 1 шал и стоп, а не как сейчас шаги зацикливались... ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 18 ноя 2014, 17:32 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
провел полевые испытания на море :)
акум тяжелый и просаживает телегу по центру, а из за того что центральные колеса не работают, проходимость снизилась, на песке и гальке не хватает сцепления крайним колесам, идет пробуксовка, колеса вкапываются.

Изображение
Изображение


управление через блютус модуль HC-06 и программу BTCA2A

спереди установил 2х осевой вращатель, на нем хомутом закрепил насос.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 21 ноя 2014, 00:37 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
все сегодня доделал основной этап работы.

на данный момент телега управляется по блютус через телефон.
движения:
вперед, назад, танковый разворот, плавный разворот.
управление 2х осевым вращателем, на 2х сервах.
управление насосом

насос бьет струей примерно на 3 - 4 метра.
фото конструкции будут позже.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 21 ноя 2014, 00:50 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Молодец. Подготовьте публикацию по-подробней с рабочим кодом. Можно в DAGU послать код.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 21 ноя 2014, 09:46 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
можно, только это не мой код, а сборка из нескольких скетчей, которыми поделились разные люди :)
правда кое что пришлось уже самому додумывать, т.к коды были от разных вариантов управления, под разные библиотеки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 21 ноя 2014, 12:25 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
и что? код под Ардуино не может быть закрытым. Он должен быть публичным - в этом философия Arduino.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 21 ноя 2014, 15:32 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
avr123.nm.ru писал(а):
и что? код под Ардуино не может быть закрытым. Он должен быть публичным - в этом философия Arduino.


полностью поддерживаю:

Код:
// Скетч для управления через блютус, Wild Thumper 6WD, на ардуино совместимом контролере TREX controller. реализовано движение и стрельба с водомета.


#include <BTCA2ALite.h>// Добавляем библиотеку блютус программы
#include <Servo.h> // Добавляем библиотеку серво

Servo myservoH; // Горизонтальная серва углы от 0 до 180 (центровка 89)
Servo myservoV; // Вертикальная серва углы от 1 до 45
const int H_SERVO_PIN = 7; // Горизонтальная серва подключена к пину 7
const int V_SERVO_PIN = 8; //Пин вертикального сервопривода 8
const float H_L_ANGLE = 180; // Максимальные угл поворота башни налево
const float H_R_ANGLE = 0; // Максимальные угл поворота башни направо
const float H_DEF_ANGLE = 89; // Дефолтный угол (центровка)
const float V_U_ANGLE = 45; // Максимальные угл поворота башни вверх
const float V_D_ANGLE = 1; // Максимальные угл поворота башни вниз
const float V_DEF_ANGLE = 15; // Дефолтный угол (центровка)
//Размер шага V_STEP и H_STEP побираем экспериментально для достижения нужной скорости поворота серв
const float V_STEP = 0.007; // Шаг - знаение отвечающее за скорость вращения по вертикали.
const float H_STEP = 0.012; // Шаг - знаение отвечающее за скорость вращения по горизонтали
float curVAngle = V_DEF_ANGLE; //Переменная текущего угла верт. сервы
float curHAngle = H_DEF_ANGLE; //Переменная текущего угла гор. сервы
bool moveServoVUp = false; //Флаг движения верт. сервы вверх
bool moveServoVDown = false; //Флаг движения верт. сервы вниз
bool moveServoHLeft = false; //Флаг движения гор. сервы влево
bool moveServoHRight = false; //Флаг движения гор. сервы вправо

btca2aLite btca2aLite; // Конструктор btca2aLite

// Задаем скорости для движения
int Speed = 80; // Текущая максимальная скорость
int TSpeed = 150; // Скорость медленного мотора при повороте
int RLSpeed = 200; // Скорость танкоаого разворота

// задаем пины для левого мотора
#define Dir_L 2
#define Pwm_L 3
#define Brake_L 4
// задаем пины для правого мотора
#define Dir_R 10
#define Pwm_R 11
#define Brake_R 9

#define SHOT  12 // пин для водомета

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

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

States onTimeout();

void performServo(); // добовляем сервы


void setup(){
    Serial.begin(9600); // Скорость BT и порта должна быть 9600
    //Моторы
    pinMode (Pwm_L, OUTPUT);
    pinMode (Dir_L, OUTPUT);
    pinMode (Brake_L, OUTPUT);
   
    pinMode (Pwm_R, OUTPUT);
    pinMode (Dir_R, OUTPUT);
    pinMode (Brake_R, OUTPUT);
   
    digitalWrite (Pwm_L, LOW);
    digitalWrite (Pwm_R, LOW);
   
    digitalWrite (Brake_L, LOW);
    digitalWrite (Brake_R, LOW);
 
pinMode(SHOT, OUTPUT); // задаем выход для стрельбы водой
   
    // устанавливаем пин как вывод управления сервой
    myservoH.attach(H_SERVO_PIN);
    myservoV.attach(V_SERVO_PIN);
    myservoH.write(curHAngle);
    myservoV.write(curVAngle);
   
   
    //Светодиод
    pinMode(13, OUTPUT); // Инициализируем пин светодиода
    digitalWrite(13, HIGH); // Светодиод выключен
}

void loop(){
   
    btca2aLite.ReadCommand(); // Считывание принятых команд (кодов кнопок)
    //Вызываем функцию управление сервами
    performServo();
   
   
   
    //--------— Движение Вперед —-------------
    if (btca2aLite.ButtonPressed(KEYCODE_DPAD_UP)) // Едет вперед если нажат курсор ВПЕРЕД
    {
        if (btca2aLite.ButtonPressed(KEYCODE_DPAD_RIGHT)){ // Поворот направо при нажатии курсора ВПЕРЕД и ВЛЕВО
            digitalWrite (Dir_L, HIGH);
            analogWrite (Pwm_L, TSpeed);
            digitalWrite (Dir_R, HIGH);
            analogWrite (Pwm_R, Speed);
        }
        if (btca2aLite.ButtonPressed(KEYCODE_DPAD_LEFT)){ // Поворот налево при нажатии курсора ВПЕРЕД и ВПРАВО
            digitalWrite (Dir_L, HIGH);
            analogWrite (Pwm_L, Speed);
            digitalWrite (Dir_R, HIGH);
            analogWrite (Pwm_R, TSpeed);
        }
        digitalWrite (Dir_L, HIGH);
        analogWrite (Pwm_L, Speed);
        digitalWrite (Dir_R, HIGH);
        analogWrite (Pwm_R, Speed);
    }
   
    //-------— Движение Назад —-------------
    if (btca2aLite.ButtonPressed(KEYCODE_DPAD_DOWN)) // Едет назад если нажат курсор НАЗАД
    {
        if (btca2aLite.ButtonPressed(KEYCODE_DPAD_RIGHT)){ // Поворот налево при нажатии курсора НАЗАД и ВЛЕВО
            digitalWrite (Dir_L, LOW);
            analogWrite (Pwm_L, TSpeed);
            digitalWrite (Dir_R, LOW);
            analogWrite (Pwm_R, Speed);
        }
        if (btca2aLite.ButtonPressed(KEYCODE_DPAD_LEFT)){ // Поворот направо при нажатии курсора НАЗАД и ВПРАВО
            digitalWrite (Dir_L, LOW);
            analogWrite (Pwm_L, Speed);
            digitalWrite (Dir_R, LOW);
            analogWrite (Pwm_R, TSpeed);
        }
        digitalWrite (Dir_L, LOW);
        analogWrite (Pwm_L, Speed);
        digitalWrite (Dir_R, LOW);
        analogWrite (Pwm_R, Speed);
    }
   
    //-------— Движение Влево (Танковый разворот) —-------------
    if (btca2aLite.ButtonPressed(KEYCODE_DPAD_LEFT )) // Едет вперед если нажат курсор ВПЕРЕД
    {
        digitalWrite (Dir_L, LOW);
        analogWrite (Pwm_L, RLSpeed);
        digitalWrite (Dir_R, HIGH);
        analogWrite (Pwm_R, RLSpeed);
    }
   
    //-------— Движение Вправо (Танковый разворот) —-------------
    if (btca2aLite.ButtonPressed(KEYCODE_DPAD_RIGHT)) // Едет вперед если нажат курсор ВПЕРЕД
    {
        digitalWrite (Dir_L, HIGH);
        analogWrite (Pwm_L, RLSpeed);
        digitalWrite (Dir_R, LOW);
        analogWrite (Pwm_R, RLSpeed);
    }
   
    //-------— движение в право —-------------
    if (btca2aLite.ButtonPressed(KEYCODE_DPAD_RIGHT)) // Едет вперед если нажат курсор ВПЕРЕД
    {
        digitalWrite (Dir_L, HIGH);
        analogWrite (Pwm_L, RLSpeed);
        digitalWrite (Dir_R, LOW);
        analogWrite (Pwm_R, RLSpeed);
    }
   
   
    //-------— включение насоса —-------------
   if (btca2aLite.ButtonPressed(KEYCODE_BUTTON_SELECT))
    {
     digitalWrite (SHOT, HIGH);
     }
    //-------— выключение насоса происходит автоматически после отпускания кнопки—-------------
   if(btca2aLite.ButtonReleased(KEYCODE_BUTTON_SELECT))
    {
   digitalWrite (SHOT, LOW);
    }
   
   
    //--------— Повороты серв при нажатии кнопок —-------------
   
    if(btca2aLite.Button(KEYCODE_BUTTON_X)) // servoV вниз
    {
        moveServoVDown = true;
             
    }
    if(btca2aLite.Button(KEYCODE_BUTTON_A)) // servoH движется к 0
    {
        moveServoHRight = true;
    }
    if(btca2aLite.Button(KEYCODE_BUTTON_B)) // servoV вверх
    {
        moveServoVUp = true;
             
    }
   
    if(btca2aLite.Button(KEYCODE_BUTTON_Y)) // servoH движется к 180
    {
        moveServoHLeft = true;
    }
   
//--------— чтобы сервы не продолжали движения при отжатых кнопках —-------------   
if(btca2aLite.ButtonReleased(KEYCODE_BUTTON_X))
{
moveServoVDown = false;
}
if(btca2aLite.ButtonReleased(KEYCODE_BUTTON_B))
{
moveServoVUp = false;
}

if(btca2aLite.ButtonReleased(KEYCODE_BUTTON_A))
{
moveServoHRight = false;
}
if(btca2aLite.ButtonReleased(KEYCODE_BUTTON_Y))
{
moveServoHLeft = false;
}
   
   
    //----------------— Стоп —---------------------
   
    // Если не нажата ни одна кнопка курсора происходит остановка, скорость 0 для каждого мотора
    if (btca2aLite.ButtonReleased(KEYCODE_DPAD_UP) && btca2aLite.ButtonReleased(KEYCODE_DPAD_DOWN) && btca2aLite.ButtonReleased(KEYCODE_DPAD_LEFT) && btca2aLite.ButtonReleased(KEYCODE_DPAD_RIGHT)){
        analogWrite (Pwm_L, 0);
        analogWrite (Pwm_R, 0);
    }
}



//Функция управления сервоприводами (вызывается в теле loop на каждой итерации)
//Выполняет изменения положения серв на подобранный шаг согласно установленным флагам движения
//Флаги устанавливаются согласно поступившим символам управления сервами
void performServo()
{
    //Установлен флаг движения вверх и текущий угол не максимальный
    if (moveServoVUp && curVAngle + V_STEP <= V_U_ANGLE)
    {
        //К текущему верт. углу прибавляем шаг
        curVAngle += V_STEP;
    }
    //Установлен флаг движения вниз и текущий угол не минимален
    else if (moveServoVDown && curVAngle - V_STEP >= V_D_ANGLE)
    {
        //От текущего верт. угла отнимаем шаг
        curVAngle -= V_STEP;
    }
    //Установлен флаг движения влево и текущий угол не максимален
    if (moveServoHLeft && curHAngle + H_STEP <= H_L_ANGLE)
    {
        //К текущему гор. углу прибавляем гор. шаг
        curHAngle += H_STEP;
    }
    //Установлен флаг движения вправо и текущий угол не минимален
    else if (moveServoHRight && curHAngle - H_STEP >= H_R_ANGLE)
    {
        //От текущего угла отнимаем гор. шаг
        curHAngle -= H_STEP;
    }
   
    //Если было движние по вертикали
    if (moveServoVUp || moveServoVDown)
    {
        myservoV.write(curVAngle);
    }
    //Если было движение по горизонтали
    if (moveServoHLeft || moveServoHRight)
    {
        myservoH.write(curHAngle);
    }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 22 ноя 2014, 17:43 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
вот еще тележка с поливалкой стекломывателем на Arduino http://youtu.be/zUfW2ltCumU


_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 08 дек 2014, 11:32 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
немного новых фото и видео.
Изображение
Изображение
Изображение
Изображение



поставил емкость для воды на 250мл, этого оказалось мало, реально только 1-2 ребенка успевают пострелять :)
думаю над созданием альтернативного устройства тушения, чтоб расход был меньше или вообще фен поставить, с узким соплом чтоб задувал свечи на расстоянии :D

п.с. подскажите где в России можно недорого приобрести акум ли по и зарядку, кроме пакфлаера, так чтоб доставка шла непосредственно сразу по России и была недорогой, а не в 2 раза дороже самого товара :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 08 дек 2014, 14:08 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
купить на барахолке или у ремонтников пару битых планшетов или разгроханный ноут и вытащить оттуда акки :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 08 дек 2014, 17:44 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
Переделывать старт стоп двигателей, копать в сторону разгон торможение, тбо очень дерганое движение, быстро умрут шестерни и щетки двигателя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 08 дек 2014, 21:36 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
elmot писал(а):
купить на барахолке или у ремонтников пару битых планшетов или разгроханный ноут и вытащить оттуда акки :)


а пойдут од туда? где взять зарядку? :)

Aseris писал(а):
Переделывать старт стоп двигателей, копать в сторону разгон торможение, тбо очень дерганое движение, быстро умрут шестерни и щетки двигателя.


да шестеренки уже сдохли, 2 колеса не работают! :(
можно программно сделать плавный старт? может быть у вас есть примеры как?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 216 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10 ... 15  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO