Нужна помощь в понимании скетча

nail2007
Offline
Зарегистрирован: 08.12.2017

mykaida, sadman41, Спасибо большое за то, что указали где ошибки и как исправить!!

изменил код в сообщении. надеюсь, что хоть часть ошибок исправил

nik182
Offline
Зарегистрирован: 04.05.2015

На первый взгляд нормально, а компиляция что говорит и выполнение. Я б еще вывел сумму квадратов для проверки - она не превышает ли 32000? И на результат работы где? 

nail2007
Offline
Зарегистрирован: 08.12.2017

nik182, проверка ругалась на booleanБ поменял немного имена переменных. код теперь такой. результаты в мониторе и в плоттере не выводятся

#include <I2Cdev.h>
#include <MPU6050.h>

int a; //переменная для полного ускорения
int amax;
int amin;
unsigned long tmax;
unsigned long tmin;
byte nmax;
byte nmin;
boolean vmax = 0;
boolean vmin = 0;
float v; 
MPU6050 accel;

void setup() {
    Serial.begin(9600);
    amin=32000;
    a=0;
    amax=0;
    tmax=0;
    tmin=0;
    nmax=0;
    nmin=0;
    v=0;
    accel.initialize();
    Serial.println(accel.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}

void loop() {

     int16_t ax_raw, ay_raw, az_raw, gx_raw, gy_raw, gz_raw; //вызываем значения ускорений 
     accel.getMotion6(&ax_raw, &ay_raw, &az_raw, &gx_raw, &gy_raw, &gz_raw); //запрашиваем значения ускорений с датчика
     
     a=ax_raw*ax_raw+ay_raw*ay_raw+az_raw*az_raw; //сумма трех квадратов
     if (!vmax){
      if (a>amax){
        amax=a;
        tmax=micros();
        nmax=0;}
      }
     else{
      nmax++;
      if (nmax>50){
        vmax == true;}
      }

     if (!vmin){
      if (a<amin){
        amin=a;
        tmin=micros();
        nmin=0;}
      }
     else{
      nmin++;
      if (nmin>50){//тут так же оставить или меньше 50??
        vmin == true;}
      }
if (vmax == true && vmin == true){
 v=4000000.0/(tmax-tmin);
 Serial.println(v);   
    amin=32000;
    a=0;
    amax=0;
    tmax=0;
    tmin=0;
    nmax=0;
    nmin=0; 
 } 
}

 

nik182
Offline
Зарегистрирован: 04.05.2015

Навставляте принтов в строки 35,38,39,43 ну и в минус так же посмотрим что происходит с логикой работы. 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Теперь 45, 57 ошибки - там вы назначаете, соответственно надо употреблять знак равенства. Т.е. не vmin == true;, а vmin = true;

Кроме того писать if (vmax == true && vmin == trueнеобязательно - это и так проверяется именно на истину. Достаточно 

if (vmax && vmin){

nik182
Offline
Зарегистрирован: 04.05.2015

И vmin vmax не обнуляются в конце

nail2007
Offline
Зарегистрирован: 08.12.2017

nik182, выводятся только значения а

a_-14448
a_14352
a_18864
a_15392
a_16688
a_-21168
a_-4432
a_8528
a_-5200
a_-25392
a_17488
 
код следующий
#include <I2Cdev.h>
#include <MPU6050.h>

int a; //переменная для полного ускорения
int amax;
int amin;
unsigned long tmax;
unsigned long tmin;
byte nmax;
byte nmin;
boolean vmax = 0;
boolean vmin = 0;
float v; 
MPU6050 accel;

void setup() {
    Serial.begin(9600);
    amin=32000;
    a=0;
    amax=0;
    tmax=0;
    tmin=0;
    nmax=0;
    nmin=0;
    v=0;
    accel.initialize();
    Serial.println(accel.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}

void loop() {

     int16_t ax_raw, ay_raw, az_raw, gx_raw, gy_raw, gz_raw; //вызываем значения ускорений 
     accel.getMotion6(&ax_raw, &ay_raw, &az_raw, &gx_raw, &gy_raw, &gz_raw); //запрашиваем значения ускорений с датчика
     
     a=ax_raw*ax_raw+ay_raw*ay_raw+az_raw*az_raw; //сумма трех квадратов
     Serial.print("a_");
     Serial.println(a);
     if (!vmax){
      if (a>amax){
        amax=a;
        Serial.print("a_");
        Serial.println(amax);
        tmax=micros();
       Serial.print("a_");
       Serial.println(tmax);
        nmax=0;}
      }
     else{
      nmax++;
      if (nmax>50){
        vmax = 1;}
      }

     if (!vmin){
      if (a<amin){
        amin=a;
        tmin=micros();
        nmin=0;}
      }
     else{
      nmin++;
      Serial.print("a_");
      Serial.println(nmin);
      if (nmin>50){//тут так же оставить или меньше 50??
        vmin = 1;}
      }
if (vmax && vmin){
 v=4000000.0/(tmax-tmin);
 Serial.println(v);   
    amin=32000;
    a=0;
    amax=0;
    tmax=0;
    tmin=0;
    nmax=0;
    nmin=0;
    vmin=0;
    vmax=0;
    delay(20); 
 } 
}

 

 

nail2007
Offline
Зарегистрирован: 08.12.2017

Прошу прощения!! не переименоват в выводе имен переменных

после исправления такая картина

a_32656
amax_32656
tmax_2008
a_22784
a_-4816
a_23264
a_-23328
a_-25440
a_-29216
a_-11072
a_8032
 
a_-4400
a_6416
a_21712
a_12624
a_32736
amax_32736
tmax_20019836
a_-23008
a_29840
a_-21951
a_-11759
a_273
 
то есть дольше tmax не считает

 

nik182
Offline
Зарегистрирован: 04.05.2015

Плохо. Int меняем на long  в строках 4,5,6 и пробуем

nail2007
Offline
Зарегистрирован: 08.12.2017
сначала так получилосЬ. после так же как и до этого
 
MPU6050 connection successful
a_19936
amax_19936
tmax_2008
a_-24624
a_20736
amax_20736
tmax_31036
a_-26800
a_17424
a_32304
amax_32304
tmax_85116
a_23376
a_-19360
a_-17264
a_-14800
a_21200
a_18224
a_-24224
 
nail2007
Offline
Зарегистрирован: 08.12.2017

не нужно ли фильтровать значения, полученные от акселерометра? может через фильтр калмана пропустить, чтобы хотя бы часть шумов убрать?

nik182
Offline
Зарегистрирован: 04.05.2015

Пока нет. Сейчас надо получить устойчивое значение. Сумма трех квадратов не может быть отрицательной. Она за разрядность инт выходит при расчете. Попробуй в 35 строке (long) перед каждым сомножителем поставить. 

nail2007
Offline
Зарегистрирован: 08.12.2017

nik182, ошибка в этой строке

 a=long ax_raw*long ax_raw+long ay_raw*long ay_raw+long az_raw*long az_raw; //сумма трех квадратов

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

(long)

nail2007
Offline
Зарегистрирован: 08.12.2017
nik182, sadman41
Стало лучше, отрицательных значений вроде нет, да и значения amax tmax чаще появляются в мониторе. следующих нет, к сожалению.
 
a_1208570193
a_1152502864
a_1040631392
a_899194960
a_1261283984
a_1928347664
amax_1928347664
tmax_8600636
a_305509520
a_154466912
a_120131600
a_196004816
a_272618304
a_327636656
 
nik182
Offline
Зарегистрирован: 04.05.2015

Приведи вывод всех значений от одного tmax до второго обязательно при дрожании датчика как при треморе. Это нужно для уточнения 50. И у тебя нет вывода amin tmin. Тоже хорошо бы посмотреть. Если правильно работает то время тмин должно быть точно по середине между первым и вторым тмах

nail2007
Offline
Зарегистрирован: 08.12.2017

nik182, все равно выдает те же данные.

a_287437328
amax_287437328
tmax_2388
a_249736464
a_252787408
a_250687136
a_251127840
a_247728224
a_247020112
a_247536304
a_251780576
a_250837472
a_248466096
a_248776608
a_249195600
a_249098528
a_248592000
a_247887184
a_249381680
a_249292176
a_247042976
a_252271712
a_256119712
a_249697248
a_254210176
a_251671776
a_252776928
a_288109184
amax_288109184
tmax_361756
a_258029536
a_273510080
a_253157888
a_308188512
amax_308188512
tmax_445996
a_386624016
amax_386624016
tmax_489676
a_337281056
a_337594752
a_369568400
a_482533776
amax_482533776
tmax_573916
a_504761488
amax_504761488
tmax_617596
a_102184736
a_122429600
a_235343952
a_281394464
a_297012864
a_283931056
a_203277216
a_231225056
a_258133392
a_339436112
a_520800608
amax_520800608
tmax_796476
a_1159376528
amax_1159376528
tmax_842236
a_398219456
a_275786368
a_290491088
 

 

код такой

#include <I2Cdev.h>
#include <MPU6050.h>

long a; //переменная для полного ускорения
long amax;
long amin;
unsigned long tmax;
unsigned long tmin;
byte nmax;
byte nmin;
boolean vmax = 0;
boolean vmin = 0;
float v; 
MPU6050 accel;

void setup() {
    Serial.begin(9600);
    amin=32000;
    a=0;
    amax=0;
    tmax=0;
    tmin=0;
    nmax=0;
    nmin=0;
    v=0;
    accel.initialize();
    Serial.println(accel.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}

void loop() {

     int16_t ax_raw, ay_raw, az_raw, gx_raw, gy_raw, gz_raw; //вызываем значения ускорений 
     accel.getMotion6(&ax_raw, &ay_raw, &az_raw, &gx_raw, &gy_raw, &gz_raw); //запрашиваем значения ускорений с датчика
     
     a=(long)ax_raw*(long)ax_raw+(long)ay_raw*(long)ay_raw+(long)az_raw*(long)az_raw; //сумма трех квадратов
     Serial.print("a_");
     Serial.println(a);
     if (!vmax){
      if (a>amax){
        amax=a;
        Serial.print("amax_");
        Serial.println(amax);
        tmax=micros();
       Serial.print("tmax_");
       Serial.println(tmax);
        nmax=0;}
      }
     else{
      nmax++;
      Serial.print("nmax_");
     Serial.println(nmax);
      if (nmax>50){
        vmax = 1;}
      }

     if (!vmin){
      if (a<amin){
        amin=a;
        Serial.print("amin_");
     Serial.println(amin);
        tmin=micros();
        Serial.print("tmin_");
     Serial.println(tmin);
        nmin=0;}
      }
     else{
      nmin++;
      Serial.print("nmin_");
      Serial.println(nmin);
      if (nmin>50){//тут так же оставить или меньше 50??
        vmin = 1;}
      }
if (vmax && vmin){
 v=4000000.0/(tmax-tmin);
 Serial.print("v_");
     Serial.println(v);  
    amin=32000;
    a=0;
    amax=0;
    tmax=0;
    tmin=0;
    nmax=0;
    nmin=0;
    vmin=0;
    vmax=0;
    delay(20); 
 } 
}

 

nik182
Offline
Зарегистрирован: 04.05.2015

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

amin = 32000000000; гдето так с девятью нулями. И в конце тоже. 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Можно нули не считать, а взять в качестве начальных значений LONG_MIN и LONG_MAX , подключив limits.h

nail2007
Offline
Зарегистрирован: 08.12.2017
ТОВАРИЩИ! получил в первый раз минимальные значения!) между макс и мин было очень много разных значений а (для удобства восприятия удалил из при копировании)
a_2147433234
amax_2147433234
tmax_4662156
a_1728307040
a_752798480
a_257345168
a_71685904
a_917195792
a_1228209184
a_1397333120
a_1326617120
a_1284339408
a_595635728
a_777737744
a_1825227281
a_-2147467262
amin_-2147467262
tmin_16311196
a_507850576
a_167837856
a_55401440
 
nail2007
Offline
Зарегистрирован: 08.12.2017

sadman41, вот тут поподробнее пожалуйста!!!

nik182
Offline
Зарегистрирован: 04.05.2015

Скобку стр 47 надо перенести на 55. Это ошибка. 

nail2007
Offline
Зарегистрирован: 08.12.2017

nik182, получается и скобку аналогично с максимум и минимум перенести? с 65ой на 73ю?

nail2007
Offline
Зарегистрирован: 08.12.2017

перенес еще скобку с 65 на 73 и пошла жара)))

a_0
nmax_1
amin_0
tmin_1764
a_0
nmax_2
nmin_1
a_255916496
amax_255916496
tmax_50796
nmin_2
a_742156640
amax_742156640
tmax_101756
nmin_3
a_201689056
nmax_1
nmin_4
a_144152592
nmax_2
nmin_5
a_1133597520
amax_1133597520
tmax_216156
nmin_6
a_963928272
nmax_1
 
 
nik182
Offline
Зарегистрирован: 04.05.2015

Ну тогда все ещё хуже. Акселерометр выдает безумные значения. Разрядности не хватает на лонг. Ужас. Будем резать без наркоза. Возвращаемся к интам. Добавляем 3 переменные типа инт и после получения данных пишем в них три ускорения сдвинув на лево на 9 или разделим на 512. И уже эти переменные возводим в квадрат и расчитываем а. Заодно и пофильтруем. 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

nail2007 пишет:

sadman41, вот тут поподробнее пожалуйста!!!

#include <limits.h>

void setup() {
  Serial.begin(115200);
  long theLongVariable = LONG_MIN;
  Serial.println(theLongVariable);
  Serial.println(LONG_MAX);
}

void loop() {}

 

Если не хватает long, возьмите unsigned long или uint64_t в конце-то концов ))

 

nail2007
Offline
Зарегистрирован: 08.12.2017
nmax_47
a_270971984
nmax_48
a_1281485184
nmax_49
a_1562212304
nmax_50
a_1095692624
nmax_51
v_1.55
 
ЕСТЬ ЗНАЧЕНИЕ ЧАСТОТЫ! )) правда выводится оно крайне редко.
nail2007
Offline
Зарегистрирован: 08.12.2017

nik182, примерно так?

#include <I2Cdev.h>
#include <MPU6050.h>

long a; //переменная для полного ускорения
long amax;
long amin;
unsigned long tmax;
unsigned long tmin;
byte nmax;
byte nmin;
boolean vmax = 0;
boolean vmin = 0;
float v;

int x1;
int x2;
int x3;

MPU6050 accel;

void setup() {
    Serial.begin(9600);
    amin=32000000000;
    a=0;
    amax=0;
    tmax=0;
    tmin=0;
    nmax=0;
    nmin=0;
    v=0;
    accel.initialize();
    Serial.println(accel.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}

void loop() {

     int16_t ax_raw, ay_raw, az_raw, gx_raw, gy_raw, gz_raw; //вызываем значения ускорений 
     accel.getMotion6(&ax_raw, &ay_raw, &az_raw, &gx_raw, &gy_raw, &gz_raw); //запрашиваем значения ускорений с датчика
x1=(ax_raw<<9)/512;
x2=(ay_raw<<9)/512;
x3=(az_raw<<9)/512;

 

nik182
Offline
Зарегистрирован: 04.05.2015

Почти. Сдвиг вправа на 9 равен делению на 512. Моя описка. Лево право попутал. Так что или право или деление, что быстрее будет работать. Но думаю в ассемблере будет одно и тоже. 

Строки 3 4и5 то же инт, амин 32000

При умножении (long) не нужен. 

nail2007
Offline
Зарегистрирован: 08.12.2017

nik182, значения пришли в более менее порядок) проскакивают значения тмин и тмакс большие. вот какая штука до появления первой частоты. мне получается усеньшить нужно значение nмакс и nмин? там было сравнение с 50. поставить где-то 15? да, еще сразу вопрос вдогонку: что мы делаем этим сравнением с 50? просто в Уфе сейчас уже ночь, голова не соображает.

a_997
amax_997
tmax_1824
amin_997
tmin_5036
a_964
nmax_1
amin_964
tmin_42476
a_865
nmax_2
amin_865
tmin_80956
a_890
nmax_3
nmin_1
a_980
nmax_4
nmin_2
a_964
nmax_5
nmin_3
a_937
nmax_6
nmin_4
a_1356
amax_1356
tmax_208876
nmin_5
a_1181
nmax_1
nmin_6
a_865
nmax_2
nmin_7
a_721
nmax_3
amin_721
tmin_305596
a_1571
amax_1571
tmax_338876
nmin_1
a_1540
nmax_1
nmin_2
a_914
nmax_2
nmin_3
a_830
nmax_3
nmin_4
a_1732
amax_1732
tmax_453276
nmin_5
a_2853
amax_2853
tmax_494876
nmin_6
a_2216
nmax_1
nmin_7
a_4193
amax_4193
tmax_561436
nmin_8
a_2373
nmax_1
nmin_9
a_1496
nmax_2
nmin_10
a_3285
nmax_3
nmin_11
a_4670
amax_4670
tmax_679996
nmin_12
a_1385
nmax_1
nmin_13
a_1413
nmax_2
nmin_14
a_4314
nmax_3
nmin_15
a_5410
amax_5410
tmax_800636
nmin_16
a_1765
nmax_1
nmin_17
a_5281
nmax_2
nmin_18
a_4517
nmax_3
nmin_19
a_1480
nmax_4
nmin_20
a_1685
nmax_5
nmin_21
a_5113
nmax_6
nmin_22
a_4787
nmax_7
nmin_23
a_1890
nmax_8
nmin_24
a_2978
nmax_9
nmin_25
a_5578
amax_5578
tmax_1077276
nmin_26
a_1249
nmax_1
nmin_27
a_1622
nmax_2
nmin_28
a_5492
nmax_3
nmin_29
a_4521
nmax_4
nmin_30
a_1934
nmax_5
nmin_31
a_5339
nmax_6
nmin_32
a_5749
amax_5749
tmax_1276956
nmin_33
a_1902
nmax_1
nmin_34
a_5342
nmax_2
nmin_35
a_3058
nmax_3
nmin_36
a_2634
nmax_4
nmin_37
a_5036
nmax_5
nmin_38
a_1445
nmax_6
nmin_39
a_1851
nmax_7
nmin_40
a_2626
nmax_8
nmin_41
a_1509
nmax_9
nmin_42
a_1290
nmax_10
nmin_43
a_1185
nmax_11
nmin_44
a_1092
nmax_12
nmin_45
a_3654
nmax_13
nmin_46
a_3137
nmax_14
nmin_47
a_2058
nmax_15
nmin_48
a_4869
nmax_16
nmin_49
a_3146
nmax_17
nmin_50
a_1682
nmax_18
nmin_51
a_2504
nmax_19
a_5246
nmax_20
a_5347
nmax_21
a_3302
nmax_22
a_1542
nmax_23
a_1445
nmax_24
a_2150
nmax_25
a_4598
nmax_26
a_5561
nmax_27
a_3194
nmax_28
a_1886
nmax_29
a_2245
nmax_30
a_4034
nmax_31
a_3989
nmax_32
a_2946
nmax_33
a_1590
nmax_34
a_1597
nmax_35
a_2857
nmax_36
a_3828
nmax_37
a_4557
nmax_38
a_2628
nmax_39
a_1377
nmax_40
a_1746
nmax_41
a_4105
nmax_42
a_4154
nmax_43
a_4099
nmax_44
a_2290
nmax_45
a_1531
nmax_46
a_2225
nmax_47
a_4781
nmax_48
a_3662
nmax_49
a_2505
nmax_50
a_1621
nmax_51
v_4.12
 
nik182
Offline
Зарегистрирован: 04.05.2015

Это число должно быть равно числу точек между максимумом и минимумом на средней скорости тремора. Это глубина поиска максимума в текущей реализации данных. Если сделать маленьким, то будет ловить верхние гармоники, большим, пропускать максимумы и давать ошибку. Частота получилась адекватной. Уменьши нмин нмах до 25 и попробуй. Теперь настройка под твои параметры. Похоже что работает. И закоментируй весь отладочный вывод кроме нмин нмах тмин тмах

P. S. Мысль вот с утра пришла. Можно повесить на аналоговый вход переменный резистор, в цикле оцифровывать, преводить его значения в диапазон 5 - 50 и использовать это значение как глубину поиска. Тогда изменяя его значения, не переписывая программу, можно подстраивать в прцессе работы на получение устойчивых данных на разных гармониках. Именно устойчивых! Если глубина поиска будет соответствовать периоду колебаний. 

nik182
Offline
Зарегистрирован: 04.05.2015
Что бы двигаться дальше, хотелось бы прояснить некоторые вопросы. Самый первый - зачем нужна эта работа. Что с ней дальше будет. Это одноразовая конструкция для зачета или она будет реально использоваться в жизни? Если первое, то всё сделано. Немножко причесать, подстроить параметры и всё. Если второе, то в каком виде будет использоваться? В виде коробочки с дисплеем на плече у испытуемого или в коробочки около ноутбука? Если без ноутбука, то процессор явно не тот. Не хватит памяти на обеспечение сервисного обслуживания. Если с ноутбуком то функционал программы излишнен. Достаточно гнать на максимальной скорости данные акселерометра на комп и уже там делать обработку. Для это тоже лучше подходит другая плата, например дигиспак с 85 тинькой, которая втыкается прямо в USB и с неё проводок к акселерометру. Этакий датчик получается. Напишите, пожалуйста, что дальше делать? В каком напрвлении двигаться? Если реально для исследований то правильный путь второй - только датчик и вся обработка на компьютере с применение FFT  пребразования. Будет точно, красиво, с набром статистики. Здесь я тоже могу помочь. 
 
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

nik182 пишет:

Ну тогда все ещё хуже. Акселерометр выдает безумные значения.

Вы просто не умеете с ним работать )))

nik182
Offline
Зарегистрирован: 04.05.2015

ua6em пишет:

nik182 пишет:

Ну тогда все ещё хуже. Акселерометр выдает безумные значения.

Вы просто не умеете с ним работать )))

Слушай, шутник, достал конкретно. Засунь свои подъ...ки себе в ж... и обрати внимание на то всё заработало штатно. Твой пук оказался в лужу. (У кого то вчера про лужу я уже читал... Да) 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

nik182 пишет:

Ну тогда все ещё хуже. Акселерометр выдает безумные значения.

...Слушай, шутник, достал конкретно

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

nik182
Offline
Зарегистрирован: 04.05.2015

Ты хотя бы вник в то, что произошло? Безумными они были исключительно как входные данные для того метода обработки и ограничений 8 битного МК. После корректировки данных акселерометра под эти ограничения все заработало. То есть как раз работать то мы с ним умеем. Этот процесс отладка называется и подъ...ть к телодвижениям в середине отладки можно только от небольшого ума. А поделу, с полезными замечаниями, ни одного сообщения в этой теме от тебя не было. Даже частота тремора не совпадает с возможностями твоего тренированного пальца. Делаю вывод. Ты себя позиционируешь как штатный шут. Обид никаких, кроме раздражения что в серьёзный разговор сбоку влазит паяц.

 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

штатный шут тут - я.  попрошу не примазывать никаво больше к этому высокому званию. 

nik182
Offline
Зарегистрирован: 04.05.2015

Деда. Дорогой. В твоих шутках часто больше полезной информации, чем в больших серьёзных ответах. Шути на здоровье. Ты умеешь. Вот только другим похоже твоя слава покоя не дает, а таланта нету. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Наиль!
Ты бы привёл содержимое ТВОЕГО файла mpu6050.cpp а то ведь даже параметры инициализации неизвестны

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

nik182 пишет:

Деда. Дорогой. В твоих шутках часто больше полезной информации, чем в больших серьёзных ответах. Шути на здоровье. Ты умеешь. Вот только другим похоже твоя слава покоя не дает, а таланта нету. 


Деда, к твоей славе точно не примазываюсь, ... просто товарищ кинулся помогать, не запросив даже параметров конфигурации, а она во всех библиотеках по умолчанию разная, даже из одного GIT в разных релизах, то-есть, товарищ с эти девайсом дел не имел никаких, даже на моём дилетанском уровне...
А я его полгода крутил )))

nik182
Offline
Зарегистрирован: 04.05.2015

О! Попытка защитана. Но зачем, если уже работает? Что можно исправить в работающей программе поправив инициализацию? Вы мысль свою закончите пожалуйста? Причину сообщения озвучте. Что то послужило толчком к написанию поста о инициализации? 

nik182
Offline
Зарегистрирован: 04.05.2015

Поздравляю. Сектор приз. Я тоже его крутил. И даже на машинке радиоуправляемой у меня программа вертится, заносы вычисляет. И я знаю что можно добывать из него данные по разному. Но тема не про акселеорометр, а про обработку данных. А данные можно просто взять и обработать и из любых получить нужный результат. Если в них есть даже замаскированная информация. И с этой библиотекой со штатными настройками данные с акселерометра вполне валидны. Чтобы не лазить в настройки я скорректировал их снаружи. ТС новичок и разбираться ещё и акселерометром посылать его это перебор. Ещё раз для не догоняющих. Тема про обработку данных акселерометра, а не про его настройку. 

nik182
Offline
Зарегистрирован: 04.05.2015

ua6em пишет:

... товарищ с эти девайсом дел не имел никаких, даже на моём дилетанском уровне...

А я его полгода крутил )))

Перечитал тему. И вдруг неожиданно в #37 вижу: я датчик не сильно пытал, если действительно выдаёт ускорения, тогда да.

Вы уж определитесь пожалуйста. Пытали полгода, а то что он ускорение выдает не знаете. Неувязочка получается. 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Может просто в руках крутил? ;)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

Может просто в руках крутил? ;)

естественно в руках и не один оборот, его же сначала калибруют по трём осям, строго по методикам в интеренете )))

а тут без просмотра файла конфигурациии и приведения его в надлежащий вид, без калибровки, опа и в дамках...всё изумительно работает...

Садман41, ты же грамотный, посмотри пост 80, там же получают с акселерометра полную хрень
 

 

strarbit
strarbit аватар
Offline
Зарегистрирован: 12.06.2016
nik182
Offline
Зарегистрирован: 04.05.2015

ua6em пишет:

sadman41 пишет:

Может просто в руках крутил? ;)

естественно в руках и не один оборот, его же сначала калибруют по трём осям, строго по методикам в интеренете )))

а тут без просмотра файла конфигурациии и приведения его в надлежащий вид, без калибровки, опа и в дамках...всё изумительно работает...

Садман41, ты же грамотный, посмотри пост 80, там же получают с акселерометра полную хрень

Включи уже мозги, а? Нам не нужны абсолютные точные калиброванные данные акселерометра. Нам плевать как он расположен в пространстве. Нам нужно только относительное полное, не по осям, ускорение. Мы берём от него производную и по ней получаем необходимые нам данные. Нам нужна частота, а не координаты. Колебания выходных данных акселерометра не зависят от настроек. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

да всё проще, есть масса приложений под Андроид для измерения вибраций...там и графики рисуются

nail2007
Offline
Зарегистрирован: 08.12.2017

Добрый день, nik182!

Добрался до дома и могу ответить на вопросы:

эта конструкция в принципе имеет одноразовых характер - для исследования проблемы тремора рук у людей с Паркинсоном, НО если можно это дело улучшить, то было бы здорово! Ваш посыл в плане использования другого микроконтроллера мне предельно понятен, но это если только в июне, т.к. в мае я бы хотел попробовать уже на пациентах использовать уже получившейся приборчик. 

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

Что планирую: как только все наладится в плане измерения (даже с погрешностями и шумами), подцепить к ардуинке (и на браслет) вибромоторчики как в телефонах. Есть теория, что тремор рук у людей с Паркинсоном возникает из-за ошибок в работе мозга. Мозг отправляет друг за другом сигналы в мышцы "Старт" и "Стоп" из-за чего рука начниает дрожать. Т.к. по сути везде есть наличие обратной связи , а здесь она точно есть благодаря ЦНС, то с помощью раздражения от вибрации можно ,если сказать простым языком, сбить с тольку мозг. Тем самым неинвазивно и немедикаментозно подавлять тремор. Вот. 

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

Очень ценю Вашу помощь! Большое спасибо, что не остались в стороне и помогаете мне) Если Вы сможете мне помочь привести в порядок полученную систему, то было бы просто супер! Прошу не думать, что я хочу за просто так получить помощь, поэтому готов отблагодарить!

nail2007
Offline
Зарегистрирован: 08.12.2017

ua6em, sadman41, nik182

Товарищи! Давайте не будем ругаться из-за моей неграмотности в программировании и работе с ардуино!

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