Гироскоп на mpu6050 HELP!!! РЕШЕНО!!!

Тема в разделе "Arduino & Shields", создана пользователем JanPopVandal, 1 авг 2018.

  1. JanPopVandal

    JanPopVandal Нерд

    Всех приветствую!! прошу сразу строго не судить т.к. познания мои в программном коде просто ноль.
    И так, опишу суть задачи, сделал макетку ардуино нано с использованием модуля mpu6050, в просторах интернета нашел скетч подходящий для моих задач, но что - то идет не так. Скетч взял с готового проекта робот балансир, при отклонении в сторону сразу идет реверс ну и в обратном порядке соответственно. НО мне нужно для работы задержка или отключение моторов при достижении горизонтального положения т.е. если отклонение 250град. начинается крутится мотор и по достижению угла к примеру 190 градусов. мотор отключился пример: (250->->->190__180__-190<-<-<-250) вот в промежутке 190__180__-190 моторы не должны крутиться. сам скетч ниже. ТКНИТЕ где этот параметр можно изменить, пожалуйста!
    Код (C++):
    #include <Wire.h>
    #include "Kalman.h"
    #include "PID_v1.h"
    Kalman kalmanY;
    uint8_t IMUAddress = 0x68;
    /* IMU Data */
    int16_t accX;
    int16_t accY;
    int16_t accZ;
    int16_t gyroY;
    double accYangle;
    double gyroYangle = 180;
    double compAngleY = 180;
    double kalAngleY;
    double in, out, setpoint;
    PID pid(&in, &out, &setpoint, 30, 410 , 0.8, DIRECT);
    uint32_t timer;
    void setup() {
      Serial.begin(115200);
      Wire.begin();
      i2cWrite(0x6B,0x00); // Disable sleep mode
      if(i2cRead(0x75,1)[0] != 0x68) { // Read "WHO_AM_I" register
        Serial.print(F("MPU-6050 with address 0x"));
        Serial.print(IMUAddress,HEX);
        Serial.println(F(" is not connected"));
        while(1);
      }  
      kalmanY.setAngle(180);
      pid.SetMode(AUTOMATIC);
      pid.SetOutputLimits(-255,255);
      pid.SetSampleTime(10);
      setpoint = 181.8;

      timer = micros();
    }
    double ang;
    int pwm;
    void loop() {
      /* Update all the values */
      uint8_t* data = i2cRead(0x3B,14);
      accX = ((data[0] << 8) | data[1]);
      accY = ((data[2] << 8) | data[3]);
      accZ = ((data[4] << 8) | data[5]);
      gyroY = ((data[10] << 8) | data[11]);

      /* Calculate the angls based on the different sensors and algorithm */
      accYangle = (atan2(accX,accZ)+PI)*RAD_TO_DEG;

      double gyroYrate = -((double)gyroY/131.0);
      gyroYangle += gyroYrate*((double)(micros()-timer)/1000000);
      kalAngleY = kalmanY.getAngle(accYangle, gyroYrate, (double)(micros()-timer)/1000000);
      timer = micros();

      in = kalAngleY;
      pid.Compute();
      if (out < 0) {
        pwm = -1 * out;
        analogWrite(11, 0);
        analogWrite(10, pwm);
      } else {
        pwm = out;
        analogWrite(10, 0);
        analogWrite(11, pwm);
      }

      delay(1); // The accelerometer's maximum samples rate is 1kHz
    }
    void i2cWrite(uint8_t registerAddress, uint8_t data){
      Wire.beginTransmission(IMUAddress);
      Wire.write(registerAddress);
      Wire.write(data);
      Wire.endTransmission(); // Send stop
    }
    uint8_t* i2cRead(uint8_t registerAddress, uint8_t nbytes) {
      uint8_t data[nbytes];
      Wire.beginTransmission(IMUAddress);
      Wire.write(registerAddress);
      Wire.endTransmission(false); // Don't release the bus
      Wire.requestFrom(IMUAddress, nbytes); // Send a repeated start and then release the bus after reading
      for(uint8_t i = 0; i < nbytes; i++)
        data[i] = Wire.read();
      return data;
    }
     
  2. Daniil

    Daniil Гуру

    Там используется ПИД его крутите, а лучше изучайте всё с основ.
     
  3. Ariadna-on-Line

    Ariadna-on-Line Гуру

    То есть у вас задача - повернули до точки CP (CheckPoint), - "взвели пружину", и отключились пока оно само не повернется (например по часовой стрелке) на 180 градусов, и тогда включились снова. Дополнительное условие - ваша конструкция самопроизвольно не будет поворачиваться против часовой стрелки, или вам пофигу ? Вам PID регулирование тут может понадобиться только во время "взвода", чтоб как можно быстрей "взвести" и при этом не перескочить по инерции через CP. Так ? Или это нафиг не надо ? Когда ясно сформулируете задачу - сами поймете половину проблемы. Определитесь.
     
    Последнее редактирование: 1 авг 2018
  4. JanPopVandal

    JanPopVandal Нерд

    Да мне моя проблема ясна как божий день. Есть у меня вышка подъемная, у нее люлька, т.е. кабинка открытого типа, вот она управлялась примитивным датчиком положения. Эта электроника пошла по одному признаку и из-за отсутствия в продаже нужных комплектующих починить не могу. вот увидел гироскутер и понял, что это решение для меня. люлька висит на пол шестого и в момент поднятия стрелы она должна выравниваться по горизонтали и удерживать это равновесие. но т.к. люльку поднимает и опускает гидравлическая система, то нет необходимости ежесекундного баланса иначе она будет постоянно плавать немного вверх немного вниз. вот выравнялся горизонт и она стоит ровно и мотор отключился, если поднимаю стрелу выше или ниже, положение люльки меняется и она должна опять взять горизонт, мотор включился и выровнял ее.
    PID значения я изменял и ничего не происходит.
     
  5. Mitrandir

    Mitrandir Гуру

    Как это нет. На люльке люди работают. Центр тяжести плавает только так. И его надо компенсировать
     
  6. JanPopVandal

    JanPopVandal Нерд

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

    JanPopVandal Нерд

    Есть у кого идеи? прошу помощи т.к. в программировании не понимаю
     
  8. DetSimen

    DetSimen Guest

    И ничтоже сумняшеся берешься делать механизм от которого зависят жизни людей? Мосье - идиот? Ты еще людям вместо касок пилотки из газеты сверни и раздай.
     
    Airbus нравится это.
  9. Belkin

    Belkin Гик

    Насколько я знаком с гидросистемами АГП, то насос всегда вращается в одну сторону, а система управляется электроклапанами.
    Упростите идею до использования концевиков, контролирующих положение люльки и, соответственно, управляющих эл/клапанами.

    Только потом не забудьте, если получится, протащить свою самоделку через Ростехнадзор... ;)
    Или у вас есть лицензия на самостоятельную переделку подобного оборудования ? ;)
     
  10. JanPopVandal

    JanPopVandal Нерд

    А вы мосье вообще видели эту вышку?! прежде чем судить грехи чужих, начните со своих и до чужих не доберетесь!!!
    По делу! у этой вышки люлька совсем не много отклонена от горизонта не более чем на 45град., она не переворачивается и ни при каких обстоятельствах из нее не выпасть т.к. там изначально все продумали немцы в случае отказа электроники.
    Насос там интересный в виде цилиндра в него входит 2 провода + и - 28вольт и из него выходит два рукава на цилиндр. вот и спросите у немцев как они это сделали. кидаешь питание цилиндр выдвигается, меняешь полярность шток заезжает.

    P.S. И вообще это личная вышка для личных целей! Я прошу помощи в программном коде а не в реализации электронных и механических узлов.
     
  11. DetSimen

    DetSimen Guest

    да мне то чо, тебе сидеть. флаг в руки.
     
  12. JanPopVandal

    JanPopVandal Нерд

    Хватит флуд разводить
     
  13. Belkin

    Belkin Гик

    При помощи диодной развязки вполне реально организовать, чтоб насос вращался всегда в одну сторону, а клапана срабатывали в зависимости от полярности.
    Есть 100%-я уверенность, что за начинка внутри "немецкого цилиндра" ?
    Любая программа начинается со схемотехники, работу которой уже описывают в коде.

    И неважно, чья эта вышка (автокран, погрузчик, ...) - вмешательство в заводскую конструкцию не приветствуется... ;)
     
  14. Belkin

    Belkin Гик

    В гидросистемах высокого давления это самое "высокое давление" реализуется за счет обратных клапанов.
    А в этом случае реверс насоса исключен.
    Вряд ли немцы стали городить систему клапанов для реализации реверса... ;)
     
  15. JanPopVandal

    JanPopVandal Нерд

    Т-а-а-а-к! тут уже интересно :) высокое давление создает гидравлический насос к примеру шестеренчатый или пластинчатый, насосы бывают левого так и правого вращения, кто и что будет крутить насос. это дело второе. на выходе насоса высокое давление поступает на гидрораспределитель, управление которого в свою очередь бывает механическое или электронное. в холостую идет сброс высокого давления через распределитель в бак с маслом. НО в моем случае это все реализовано в один большой цилиндр где есть мотор и насос и емкость с маслом и он завальцован и работает и лесть туда я не хочу. сломалась плата управления где установлены три датчика положения принцип работы как у гироскопа. И если я это переделываю под управлением микроконтроллера "как в современных вышках" то в этом ничего плохого нет. Почитайте и посмотрите DENKA LIFT
     
  16. Belkin

    Belkin Гик

    В плане общего описания все верно... ;)
    А лично я и не заставляю. Это - ваше оборудование и вы должны знать его устройство.
    Повторно возникает вопрос - есть уверенность, что датчики положения не контактного типа, а "как у гироскопа" ?
    Плохого ничего нет, но есть понятие сертификации.
    Ваша вышка получала сертификат соответствия с другой системой (платой) управления.
    Случись что (тьфу три раза) - будут большие неприятности...
    Одни картинки и общие описания...
     
  17. JanPopVandal

    JanPopVandal Нерд

    Я вас услышал в полном объеме, спасибо, что хоть отозвались. Надеюсь вам в жизни не попадутся такие же советчики делетанты которые все с ног на голову переворачивают. Думаю по вашим описанием даже переоборудование бензинового ДВС под ГБО смерти подобно, тогда на следующее утро просто не подходите к своему авто, а вдруг взорвется балон.!!!!
     
  18. DetSimen

    DetSimen Guest

    Если ГБО мне будут ставить люди, которые
    да еще и вместо сертифицированного промышленного оборудования будут ставить из говна и палок - не подойду.
     
    Последнее редактирование модератором: 3 авг 2018
    Belkin и Airbus нравится это.
  19. Airbus

    Airbus Радиохулиган Модератор

    А зачем там колхозить если Немцы все сделали?Или Фашистам не доверяет?
     
  20. JanPopVandal

    JanPopVandal Нерд

    Да вы сиррр зазвездившийся программист мильйонер который не знает куда свое время подевать, да флуд разводить, пыль с пагонов труханите а то ваши словишки на умишке кроме критики ничем то и не блястят!!!