Skocz do zawartości

GY-217 - odczytanie danych z czujnika


Pomocna odpowiedź

@RafalT witam na forum 🙂 Co dokładnie Ci nie działa? Zupełnie nic czy tylko jakaś część programu? Sama komunikacja z czujnikiem przebiega poprawnie?

Początkowo kompletnie nic, nie dało się skompilować. Teraz kompiluje się, ale na monitorze portu szeregowego wyskakuje że nie może znaleźć urządzenia, sprawdź połączenia. Dobrze jest połączone, przewody też działają.

(edytowany)

Mam drugi program (sciągnięty jako przykład w bibliotekach arduino)

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>

/* Assign a unique ID to this sensor at the same time */
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);

void displaySensorDetails(void)
{
  sensor_t sensor;
  mag.getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" uT");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" uT");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" uT");  
  Serial.println("------------------------------------");
  Serial.println("");
  delay(500);
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println("HMC5883 Magnetometer Test"); Serial.println("");
 
  /* Inicjalizacja czujnika */
  if(!mag.begin())
  {
    /* wystąpienie problemu z połączeniem*/
    Serial.println("Ooops, no HMC5883 detected ... Check your wiring!");
    while(1);
  }
    /* Podstawowe informacje o czujniku*/

  displaySensorDetails();
}

void loop(void)
{
  /*Nowe zdarzenie czujnika*/
 
  sensors_event_t event;
  mag.getEvent(&event);
  /* DWyświetl wynik(magnetic vector values are in micro-Tesla (uT)) */

  Serial.print("X: "); Serial.print(event.magnetic.x); Serial.print("  ");
  Serial.print("Y: "); Serial.print(event.magnetic.y); Serial.print("  ");
  Serial.print("Z: "); Serial.print(event.magnetic.z); Serial.print("  ");Serial.println("uT");

  // Hold the module so that Z is pointing 'up' and you can measure the heading with x&y
  // Calculate heading when the magnetometer is level, then correct for signs of axis.
  float heading = atan2(event.magnetic.y, event.magnetic.x);
 
  // Once you have your heading, you must then add your 'Declination Angle', which is the 'Error' of the magnetic field in your location.
  // Find yours here: http://www.magnetic-declination.com/
  // Mine is: -13* 2' W, which is ~13 Degrees, or (which we need) 0.22 radians
  // If you cannot find your Declination, comment out these two lines, your compass will be slightly off.
  float declinationAngle = 0.22;
 heading += declinationAngle;
 
  // Correct for when signs are reversed.
  if(heading < 0)
    heading += 2*PI;
    
  // Check for wrap due to addition of declination.
  if(heading > 2*PI)
    heading -= 2*PI;
   
  // Convert radians to degrees for readability.
  float headingDegrees = heading * 180/M_PI;
 
  Serial.print("Heading (degrees): "); Serial.println(headingDegrees);
 
  delay(500);
}

 

Moim problemem jest to, iż wynikiem działania programu jest (załącznik). 
Chciał bym otrzymać pomiar z magnetometru. Czy ktoś jest mi w stanie pomóc? Bardzo bym był wdzięczny 🙂

forbot.png

Edytowano przez Gieneq
Zachęcam do używania bloku kodu

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...