Skocz do zawartości
Dawides29

Wizualizacja danych z czujnika Pololu AltIMU-10 v5

Pomocna odpowiedź

Witam wszystkich, jestem nowy więc proszę o informację o niejasnościach 

Do tematu, mam problem, używam arduino i pololu altimu-10 v5, żyroskop, akcelenometr, barometr. Mam pytanie bo program mam i działa, chciałbym zobaczyć wizualizację wszystkich czujników na komputerze i nie mam pojęcia jak to zrobić. Czy mógłby ktoś mi pomóc przesyłając program albo pomóc mi to zrobić? Zaznaczam że nie znam się na programowaniu aplikacji... 

Udostępnij ten post


Link to post
Share on other sites

@Dawides29 witam na forum!

40 minut temu, Dawides29 napisał:

Mam pytanie bo program mam i działa

A mógłbyś doprecyzować jak działa to co masz? Czyli Twój program wysyła portem szeregowym pomiary do komputera?

Jak miałby wyglądać program po stronie komputera? Np. odczytujesz pomiary wysłane po UARTcie i robisz tego wykres punktowy w jakiejś aplikacji? Czy ma to iść gdzieś w internet i dopiero otwierasz to na komputerze? 

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@Gieneq

Dane odczytuję np A 1123 - 45 - 485 G -541 - 852 -128 wysyłane przez arduino na monitor portu szeregowego 

Czytałem że są to surowe dane, które są pobierane. Apka miałaby wyglądać tak, że pokazuje mi figurę geometryczną np walec, pokazuje mi ruch tego walca w czasie rzeczywistym, pobieram dane o przeciążeniach na trzech ruchomych wykresach słupkowych zmieniających się w czasie, cieszyłbym się gdyby była funkcja zapisu i ponownego odczytania 

Edytowano przez Dawides29

Udostępnij ten post


Link to post
Share on other sites

Może spróbuj zapoznać się z Processing - jak pisałeś program na Arduino, to środowisko będzie ci znane. 

17 godzin temu, Dawides29 napisał:

Zaznaczam że nie znam się na programowaniu aplikacji... 

Bez napisania kodu się nie obędzie, ale nie jest to takie straszne 🙂 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
40 minut temu, Gieneq napisał:

Bez napisania kodu się nie obędzie, ale nie jest to takie straszne 🙂 

@Gieneq

O jaki kod ci chodzi?

Sam program widziałem ale z obsługą gorzej 🙃

Udostępnij ten post


Link to post
Share on other sites
4 minuty temu, Dawides29 napisał:

O jaki kod ci chodzi?

O kod programu, czyli jak używać te środowisko. Polega to na tym że piszesz jakiś kod programu, uruchamiasz i to jest Twoja aplikacja.

17 godzin temu, Dawides29 napisał:

że pokazuje mi figurę geometryczną np walec

No to zaczynamy od narysowania kształtu i wykonanie przekształceń w 3D. To np. ten filmik pokazuje jak to zrobić, przykład jest prosty:

a jak podłączyć Arduino, to np. ten filmik:

 

Myślę, że bez dogłębnej wiedzy programistycznej uda Ci się złożyć coś z tych 2 przykładów. Processing ma też swoje przykłady, które powinny pomóc. 

Udostępnij ten post


Link to post
Share on other sites

Dobra, dzięki wielkie, wrócę do domu i zobaczę co i jak, jeszcze jedno pytanie, jaką wersja programu pobrać? 

Udostępnij ten post


Link to post
Share on other sites

Więc tak, sam program wiem mniej więcej jak działa, interfejs podobny do tego z arduino ide, ale mam problem, mianowicie pomimo obejrzenia filmów które mi podesłano nie potrafię programu przerobić tak, by mógł być odczytywany przez Processing, więc pytanie, czy mógłby ktoś przerobić ten program + co mam zrobić z biblioteką i do tego programu? 

Udostępnij ten post


Link to post
Share on other sites

Jeśli chodzi o kody to tutaj mam kod do ArduinoIDE, obsługuje wszytko w Altimu 10-v5:

#include <LSM6.h>

LSM6 imu;
char report[80];
int wartosc, odczyt, poprzedni_odczyt;

#include <LIS3MDL.h>

#define X_MIN -1388
#define X_MAX 4718

#define Y_MIN -5143
#define Y_MAX 757

// Deklinacja magnetyczna
#define dek_stopnie 4
#define dek_minuty 45

LIS3MDL mag;

//char report[80];
float odchylenie;

#include <Wire.h>
#include <LPS.h>

LPS ps;

void setup() {
 Serial.begin(9600);
 
  Wire.begin();
  mag.init();
  mag.enableDefault();

  
  if (!ps.init())
  {
    Serial.println("Failed");
    while (1);
  }

  ps.enableDefault();
   imu.init();
  imu.enableDefault();
}

void loop() {


 
 imu.read();
 snprintf(report, sizeof(report), "A: %6d %6d %6d    G: %6d %6d %6d",
    imu.a.x, imu.a.y, imu.a.z,
    imu.g.x, imu.g.y, imu.g.z);
  Serial.println(report);

 mag.read();
  int x = map(mag.m.x, X_MIN, X_MAX, -360, 360);
  int y = map(mag.m.y, Y_MIN, Y_MAX, -360, 360);
  odchylenie = atan2(y, x);
  if (odchylenie < 0) odchylenie += 2 * PI;
  if (odchylenie > 2 * PI) odchylenie -= 2 * PI;
  int kat = (int) (odchylenie * 180 / M_PI) + (dek_stopnie + (dek_minuty / 60.0)) / (180 / M_PI);
  Serial.println(kat);


 float pressure = ps.readPressureMillibars();
  float altitude = ps.pressureToAltitudeMeters(pressure);
  float temperature = ps.readTemperatureC();
  
  Serial.print("p: ");
  Serial.print(pressure);
  Serial.print(" mbar\ta: ");
  Serial.print(altitude);
  Serial.print(" m\tt: ");
  Serial.print(temperature);
  Serial.println(" deg C");

  delay(1000);

  
}

Tutaj program który był robiony przy pomocy kilku poradników do Processing (używam wersji 2.0):

import processing.serial.*;
import java.awt.event.KeyEvent;
import java.io.IOException;

Serial myPort;

String data="";
float roll, pitch,yaw;

void setup() {
  size (1060, 550, P3D);
  myPort = new Serial(this, "COM3", 9600); 
  myPort.bufferUntil('\n');
}

void draw() {
  translate(width/2, height/2, 0);
  background(233);
  textSize(22);
  text("Roll: " + int(roll) + "     Pitch: " + int(pitch), -100, 265);


  rotateX(radians(-pitch));
  rotateZ(radians(roll));
  rotateY(radians(yaw));

  textSize(30);
  fill(0, 76, 153);
  box (386, 40, 200); 
  textSize(25);
  fill(255, 255, 255);
  text("Pudełko", -183, 10, 101);
}


void serialEvent (Serial myPort) { 
  data = myPort.readStringUntil('\n');

  if (data != null) {
    data = trim(data);
    String items[] = split(data, '/');
    if (items.length > 1) {

      roll = float(items[0]);
      pitch = float(items[1]);
      yaw = float(items[2]);
    }
  }
}

Problem? Wyświetla mi sam prostokąt z napisem, nie mogę tego w żaden sposób obrócić kiedy ruszam żyroskopem.

PS Tak, wiem że tam do arduino jest kilka programów, na razie skupiam się tylko na tym jednym do żyroskopu.

Tutaj biblioteki do Altimu:

https://github.com/pololu/lsm6-arduino

https://github.com/pololu/lis3mdl-arduino

https://github.com/pololu/lps-arduino

Udostępnij ten post


Link to post
Share on other sites

@Dawides29 sprawdziłeś chociaż czy do programu trafiają poprawne dane z czujniki? Processing odczytuje wysyłane do niego informacje? W kodzie nie ma żadnych komentarzy, ciężko to analizować, a nie wiemy nawet gdzie leży problem - na wysyłaniu, czy na dalszej obróbce otrzymanych danych 😉

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...