Клиент для программы IMU+GPS-Stream для балансировки БК моторов.

Намучавшись с балансировкой моторов для своих квадриков и самолей, и не имея возможности построить полноценный стенд для балансировки, в результате написал программу-клиент для ПО IMU+GPS-Stream под Andriod.
IMU+GPS-Stream умеет передавать в потоке по протоколу UDP на заданный IP и порт данные с датчиков телефона. Я воспользовался этой возможностью и теперь данные акселерометра можно видеть не на маленьком экране телефона, а на экране компьютера, что сильно облегчило задачу балансировки. Для работы с программой нужно установить на телефон программу IMU+GPS-Stream (play.google.com/store/apps/details?id=de.lorenz_fe…) и указать у ней IP адрес и порт на которых будет запущен ее клиент. Далее запускаете клиента , задаете временной промежуток в течении которого нужно снимать параметры с мотора и далее все как на этом видео (оно не моё):

www.youtube.com/watch?v=cOzuQ5RUdxs

Вдобавок, если у вас есть Arduino и какой-нибудь акселерометр, то в программе предусмотрена возможность захвата данных из COM порта.
Данные из COM программа принимает вот в таком формате: 0,0,X,Y,Z где XYZ показатели ускорения от акселерометра.
Скриншотик:

Сама программка.
www.dropbox.com/sh/…/AAB7lipSloIBdbNA_Min5506a?dl=…
Попозже выложу на что-то более приличное.

  • 2475
Comments
gorbln

А программу Никиты Есенина вы видели?
rcopen.com/blogs/109830/19122
(это не в укор, а для пущего вдохновения, вот =)))

daneg

Да ею и вдохновился. Но у меня дома нет столько рабочего пространства для стенда, поэтому использовал телефон , но т.к. в телефоне экран маленький и смотреть не удобно, плюс пока добавляешь груз двигаешь телефон и из-за этого данные становятся не актульными… вообщем я написал свое.
А у Никиты Есенина программа что надо конечно…

daneg

Что я пишу??.. Не “добавляешь груз”, а когда стартуешь-стопишь таймер в программах сейсмометрах на телефоне… простите.=)

Можаефф

Очень хорошая разработка, потому что очень нужная!

А какой код нужно заливать в ардуину с припаянным мпу6050? И можно что бы тоже работало через блютус? Мне кажется будет еще удобнее.

daneg

Александр, добрый день.
Спасибо.
Для mpu6050 наверное что то такое:
#include<Wire.h>
const int MPU=0x68; // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup(){
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B-); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
Serial.begin(9600);
}
void loop(){
Wire.beginTransmission(MPU);
Wire.write(0x3B-); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true); // request a total of 14 registers
AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
String str = “0,0,”+String(AcX,2)+“,”+String(AcY,2)+“,”+String(AcZ,2)
Serial.println(str);
delay(30);
}
Это я выдернул из скэтча примера отсюда: playground.arduino.cc/Main/MPU-6050#short
Я купил акселерометр Troyka в магазине и сделал для него небольшой корпус из пластика. Прикрепляю его к лучу квадрика, а потом балансирую.
Насчет блютус не знаю, надо подумать…

Можаефф

Данила, спасибо за ответ.
С Тройкой тоже хорошее решение, конечно дороговато она стоит по сравнению с МПУ за 120р.
А датчик на Тройке лучше или хуже, чем МПУ? Если хуже, то точно стоит на МПУ сделать.

По поводу блютус, предполагаю, что если взять обычный HC-06 и подключить к TX-RX, то должно коннектится к компу, как и на любых полетных контроллерах.

Тогда бы получился дешевый и очень удобный прибор для измерения вибраций еще и с пропеллерами на раме.
Ардуинка с акселем и БТ получается около 300р. Грубо.

И вот у меня еще идея появилась - можно его даже использовать для записи лога вибраций в полете!
Это давало бы возможность видеть вибрации всей рамы в реальных условиях полета.

daneg

Александр.
Вообще я прикинул тут. Не должно быть препятствий для скрещивания arduino blutooth и программы.
Arduino ведь пишет в bluetooth как в serial.
Поэтому наверное(!), надо будет просто настроить соединение arduino с компьютером по bluetooth и в качестве COM порта для программы указать Incoming порт который bluetooth выдаст винда.
Черт его знает, надо попробовать.
Запись в файл сырых данных включу в следующую версию.

Можаефф

Это просто замечательно. У меня есть все компоненты. Можно проверить.

Можаефф

Данила, а вам не сложно было бы сделать полный код для Ардуины и МПУ? Откомпилить и залить я могу.

daneg
Можаефф;bt142033

Данила, а вам не сложно было бы сделать полный код для Ардуины и МПУ? Откомпилить и залить я могу.

Попробуйте так:
www.dropbox.com/s/ge4e5k2p37vbz8q/mpu6050.ino?dl=0

Можаефф

Спасибо большое!
На каких выводах SCL SDA, стандартно а4 а5?
Блютус на 9600 конфигурировать?

gorbln
Можаефф;bt142042

На каких выводах SCL SDA?

lmgtfy.com/?q=arduino+pro+mini+pinout

daneg

Смотря какая Arduina
У меня mini на 168А
SCL на А5
SDA на A4

Можаефф

У меня промини 328 - значит то-же самое.

Можаефф

Попробовал подключить пока через телефон - не пошло.
В связи с чем несколько вопросов:

  1. Какой выставлять IP - как у wifi соединения на Андроиде?
  2. Почему в программе стоит подчеркивание перед адресом порта?
  3. Как понять, что стрим попадает в компьютер?
daneg
  1. Ip выставлять в телефоне тот который у компьютера. Т.е. вы стримите данные на компьютер с телефона, поэтому в программе на телефоне указываете ip компьютера куда стримить. Ну и порты должны совпадать.
  2. Если вкратце то - так надо.Это ни на что не влияет. Позже уберу. =)
  3. При нажатии кнопки старт , начнут строиться графики. По умолчанию через 10 секунд, данные прекратят собираться и появится значения в таблице.
Можаефф

Спасибо! Заработало конечно! Только у меня такой квадр, что к нему телефон прислонить только сбоку можно! ))))
Так что буду сейчас шить Ардуину.

Можаефф

Ну вот, приехали. У меня ком 26 а в программе максимум 7 😃

Можаефф

Вроде работает, но с несколько странными показателями! 😃

i.imgur.com/xrL78vj.png

Можаефф

С другим скетчем вот так выглядит i.imgur.com/8521I7Y.png?1

daneg
Можаефф;bt142094

Вроде работает, но с несколько странными показателями! 😃

i.imgur.com/xrL78vj.png

Ого! =)
А можно мне на почту enterup(собака)gmail.com скинуть данные с первым скэтчем?
Ну то есть заливаете первый скэтч который для программы, запускаете COM монитор, потом копируете данные из монитора или скриншот.
Спасибо!

Можаефф

Там все просто:

0,0,1111111010010010,101111000,1101111111010001
0,0,1111111010011110,101101111,1101111111010111
0,0,1111111010011010,101110101,1101111111001101
0,0,1111111010001101,110000011,1101111111010000
0,0,1111111010001111,110000100,1101111111001101
0,0,1111111010011010,101111000,1101111111001011
0,0,1111111010101000,101111100,1101111111010001
0,0,1111111010100001,101111110,1101111111010000
0,0,1111111010011000,110000011,1101111111001010
0,0,1111111010010111,110000001,1101111111010000
0,0,1111111010100010,101111001,1101111110111111
0,0,1111111010011001,101111010,1101111111001010
0,0,1111111010011100,110000100,1101111111011000

daneg

Два варианта.
Либо Вы в районе черной дыры. Либо проблема в коде для ардуины. Первое врядли. Насчет второго надо подумать.

Можаефф

😃

А во втором скетче нормальные значения? Может его взять за основу?

daneg
Можаефф;bt142106

😃

А во втором скетче нормальные значения? Может его взять за основу?

Да нормальные.
Хорошая мысль.
Где брали код?