MAL4X Научно-технический форум разработчиков симуляторов и автоматики


Симуляторы перегрузок. DIY электроника. ЭВМ. Компьютерные сети.
Up

Новейшая прошивка для Arduino.

Строим реалистичный симулятор перегрузок своими руками. Рекомендации. Советы.

Модераторы: Death_Morozz, null, Ale

Re: Новейшая прошивка для Arduino.

Сообщение Spirit » 27 авг 2019, 11:50

Крутототень :) А как на этих двигателях ощущается движение платформы при плавных перемещениях, чувствуются ли шаги?
Аватара пользователя
Spirit
SIMER
 
Сообщения: 298
Зарегистрирован: 18 ноя 2014, 14:40
Откуда: Киев
Благодарил (а): 82 раз.
Поблагодарили: 94 раз.
Баллы репутации: 58
Технарь

Re: Новейшая прошивка для Arduino.

Сообщение Spirit » 27 авг 2019, 11:50

Как реализована обратная кинематика?
Аватара пользователя
Spirit
SIMER
 
Сообщения: 298
Зарегистрирован: 18 ноя 2014, 14:40
Откуда: Киев
Благодарил (а): 82 раз.
Поблагодарили: 94 раз.
Баллы репутации: 58
Технарь

Re: Новейшая прошивка для Arduino.

Сообщение deadlymanager » 28 авг 2019, 07:45

Spirit писал(а):Как реализована обратная кинематика?

Обратная кинематика рассчитывается ардуиной. Заданы параметры плечей и тяг до верхней платформы. Изначально проверяли средствами T-Flex CAD на чертеже. При установке 400 шагов на оборот шаги чувствовались. Когда заменил на 1600 - прям песня. Скорости вполне хватает.
Я тупой...., я очень тупой.
Аватара пользователя
deadlymanager
Новичок
 
Сообщения: 13
Зарегистрирован: 30 июн 2019, 10:04
Благодарил (а): 2 раз.
Поблагодарили: 6 раз.
Баллы репутации: 15
Новичок

Re: Новейшая прошивка для Arduino.

Сообщение deadlymanager » 28 авг 2019, 07:50

https://youtu.be/Kaz-99mTAuQ вот видео.
Я тупой...., я очень тупой.
Аватара пользователя
deadlymanager
Новичок
 
Сообщения: 13
Зарегистрирован: 30 июн 2019, 10:04
Благодарил (а): 2 раз.
Поблагодарили: 6 раз.
Баллы репутации: 15
Новичок

Сообщение deadlymanager » 06 сен 2019, 18:48

Работа перед установкой сиденья и органов управления. https://youtu.be/wbhxZw_RHFY
Решили отказаться от Симтулз. Написали на Делфи свою программу выдергивающую, обрабатывающую инверсную кинематику и выдающую строку для парсинга ардуиной, в которой выдаются готовые углы поворота оси шаговиков. Соберу до конца выложу еще. Пока софт ловит данные из DCS и XPlane 11. Редукторы можно было поставить и помощнее 1:30 или 1:40. Вполне хватает скорости. Сейчас 1:20. Софт выложу скоро.
Я тупой...., я очень тупой.
Аватара пользователя
deadlymanager
Новичок
 
Сообщения: 13
Зарегистрирован: 30 июн 2019, 10:04
Благодарил (а): 2 раз.
Поблагодарили: 6 раз.
Баллы репутации: 15
Новичок

Re: Новейшая прошивка для Arduino.

Сообщение deadlymanager » 07 сен 2019, 05:02

Код: Выделить всё
#include <AccelStepper.h>

#define MOTORS_ENABLE_PIN 8 // ENABLED установлен для всех моторов на PIN8
/////////////////////////////////// Первый двигатель//////////////////////////
#define MOTOR1_DIR_PIN  50
#define MOTOR1_STEP_PIN 46
/////////////////////////////////// Второй двигатель///////////////////////////
#define MOTOR2_DIR_PIN  44
#define MOTOR2_STEP_PIN 40
/////////////////////////////////// Третий двигатель///////////////////////////
#define MOTOR3_DIR_PIN  26
#define MOTOR3_STEP_PIN 22
/////////////////////////////////// Четвертый двигатель////////////////////////
#define MOTOR4_DIR_PIN  32
#define MOTOR4_STEP_PIN 28
/////////////////////////////////// Пятый двигатель///////////////////////////
#define MOTOR5_DIR_PIN  38
#define MOTOR5_STEP_PIN 34
/////////////////////////////////// Шестой двигатель///////////////////////////
#define MOTOR6_DIR_PIN  4
#define MOTOR6_STEP_PIN 2
#define PARSE_AMOUNT 6
//MultiStepper steppers;

 int intData[PARSE_AMOUNT];     // массив численных значений после парсинга
  boolean recievedFlag;
  boolean getStarted;
  byte index;
  String string_convert = "";
double MaxSpeed = 4500;
double Acceleration = 800;

int Motor1 = 0;
int Motor2 = 0;
int Motor3 = 0;
int Motor4 = 0;
int Motor5 = 0;
int Motor6 = 0;
////////////////////////Подключаем моторы к библиотеке////////
AccelStepper stpMotor1(AccelStepper::DRIVER, MOTOR1_STEP_PIN, MOTOR1_DIR_PIN);
AccelStepper stpMotor2(AccelStepper::DRIVER, MOTOR2_STEP_PIN, MOTOR2_DIR_PIN);
AccelStepper stpMotor3(AccelStepper::DRIVER, MOTOR3_STEP_PIN, MOTOR3_DIR_PIN);
AccelStepper stpMotor4(AccelStepper::DRIVER, MOTOR4_STEP_PIN, MOTOR4_DIR_PIN);
AccelStepper stpMotor5(AccelStepper::DRIVER, MOTOR5_STEP_PIN, MOTOR5_DIR_PIN);
AccelStepper stpMotor6(AccelStepper::DRIVER, MOTOR6_STEP_PIN, MOTOR6_DIR_PIN);


void setup() {
  phInit();
  Serial.begin(115200);
  }

void phInit()
{
  digitalWrite(MOTORS_ENABLE_PIN, LOW);
  //delay(5000);
  //////////////////////////////////////////Параметры первого двигателя//////////
  pinMode(MOTOR1_DIR_PIN, OUTPUT);
  pinMode(MOTOR1_STEP_PIN, OUTPUT);
  //////////////////////////////////////////Параметры второго двигателя//////////
  pinMode(MOTOR2_DIR_PIN, OUTPUT);
  pinMode(MOTOR2_STEP_PIN, OUTPUT);
  //////////////////////////////////////////Параметры третьего двигателя//////////
  pinMode(MOTOR3_DIR_PIN, OUTPUT);
  pinMode(MOTOR3_STEP_PIN, OUTPUT);
  //////////////////////////////////////////Параметры четвертого двигателя////////
  pinMode(MOTOR4_DIR_PIN, OUTPUT);
  pinMode(MOTOR4_STEP_PIN, OUTPUT);
  //////////////////////////////////////////Параметры пятого двигателя////////
  pinMode(MOTOR5_DIR_PIN, OUTPUT);
  pinMode(MOTOR5_STEP_PIN, OUTPUT);
  //////////////////////////////////////////Параметры шестого двигателя////////
  pinMode(MOTOR6_DIR_PIN, OUTPUT);
  pinMode(MOTOR6_STEP_PIN, OUTPUT);

  digitalWrite(MOTORS_ENABLE_PIN, HIGH);
}

void parsing() {
 
    if (Serial.available() > 0) {
      char incomingByte = Serial.read();        // обязательно ЧИТАЕМ входящий символ
      if (getStarted) {                         // если приняли начальный символ (парсинг разрешён)
        if (incomingByte != '/' && incomingByte != '>') {   // если это не пробел И не конец
          string_convert += incomingByte;       // складываем в строку
        } else {                                // если это пробел или ; конец пакета
          intData[index] = string_convert.toInt();  // преобразуем строку в int и кладём в массив
          string_convert = "";                  // очищаем строку
          index++;                              // переходим к парсингу следующего элемента массива
        }
      }
      if (incomingByte == '<') {                // если это $
        getStarted = true;                      // поднимаем флаг, что можно парсить
        index = 0;                              // сбрасываем индекс
        string_convert = "";                    // очищаем строку
      }
      if (incomingByte == '>') {                // если таки приняли ; - конец парсинга
        getStarted = false;                     // сброс
        recievedFlag = true;                    // флаг на принятие
      }
    }
}

void loop() {
 
parsing();       // функция парсинга
    if (recievedFlag) {                           // если получены данные
      recievedFlag = false;
    Motor1 = intData[0];
    Motor2 = intData[1];
    Motor3 = intData[2];
    Motor4 = intData[3];
    Motor5 = intData[4];
    Motor6 = intData[5];
    }
    //Serial.println(String(Motor1) + '/' + String(Motor2) + '/' + String(Motor3) + '/' + String(Motor4) + '/' +
 String(Motor5) + '/' + String(Motor6));
  stpMotor1.setMaxSpeed(MaxSpeed);
  stpMotor2.setMaxSpeed(MaxSpeed);
  stpMotor3.setMaxSpeed(MaxSpeed);
  stpMotor4.setMaxSpeed(MaxSpeed);
  stpMotor5.setMaxSpeed(MaxSpeed);
  stpMotor6.setMaxSpeed(MaxSpeed);

  stpMotor1.setAcceleration(Acceleration);
  stpMotor2.setAcceleration(Acceleration);
  stpMotor3.setAcceleration(Acceleration);
  stpMotor4.setAcceleration(Acceleration);
  stpMotor5.setAcceleration(Acceleration);
  stpMotor6.setAcceleration(Acceleration);

  stpMotor1.moveTo(Motor1);
  stpMotor2.moveTo(Motor2);
  stpMotor3.moveTo(Motor3);
  stpMotor4.moveTo(Motor4);
  stpMotor5.moveTo(Motor5);
  stpMotor6.moveTo(Motor6);

  stpMotor1.run();
  stpMotor4.run();
  stpMotor2.run();
  stpMotor5.run();
  stpMotor3.run();
  stpMotor6.run();

}


Вот софт для Arduino Mega, думаю что на других ардуинах тоже будет работать без проблем.
Я тупой...., я очень тупой.
Аватара пользователя
deadlymanager
Новичок
 
Сообщения: 13
Зарегистрирован: 30 июн 2019, 10:04
Благодарил (а): 2 раз.
Поблагодарили: 6 раз.
Баллы репутации: 15
Новичок

Пред.

Вернуться в X-SIMULATOR и RU-SIMULATOR & SimTools

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

Сейчас этот форум просматривают: Google [Bot] и гости: 15

cron
x

#{title}

#{text}