[OP] new to Rpi and electronics, but quite familiar with Win C#
Now experimenting, but not bound to Win IoT
Can switch to Raspian Mono C# or even change language
Want to use sensor to detect position
Want to know if Adafruit accel/mag/gyro sensor for Arduino also for Rpi/Win?
Or should look for a different sensor?
The following two references to 9DOF are good for newbies:
Using Inertial Sensors for Position and Orientation Estimation - M Kok etal, 2017
Rpi4B Buster AdaFruit Circuit Python Blinka using BNO055 9DOF MEMS Sensor and PCA9865 PWM Servo/DC Motor Driver
For newbies, I won't recommend to start with 9-DOF, MPU9250 (gyro +
accelero + magneto) or similar, or even 10-DOF. I would suggest to start humbly,
either 6-DOF MPU6050 (gyro + accelero), or the simplest 3-DOF ADXL345
(accelero), both are very cheap, popular, and recommended by SparkFuan
The OP introduces his background, his objective, and asks a couple of questions.
His objective is clear: detect position using a sensor.
He is considering a couple of alternatives, but he is very flexible on OS, language, and sensor
I am more or less on the mirror side of the OP. I am quite familiar with electronics and have 10 years hobbyist experience in Arduino and Rpi. I am familiar with Python, but know very little Win C#.
I have decided to do some research, and see if I can give an answer, or part of an answer.
Since I have almost zero experience in gyro/accelero/magnetic sensors, I need to do quite a bit of research first. So I am starting to write random, unstructured research notes which would finally be deleted, and hopefully replaced by my answer.
What is 9DOF?
As titled, the OP wants to use 9DOF sensors. I don't really know what the hell exactly is 9DOF. :) So I googled and started reading the following article.
9dof - The highest quality sensors - xsens.com
I skimmed xsens but could not find what is 9DOF. I only made a summary.
Xsens PCB fuses the following:
- Attitude and Heading Reference System (AHRS),
- Vertical Reference Unit (VRU), and
- Inertial Measurement Unit (IMU) on PCB,
And produces the following output:
- Inertial data,
- Magneticic field,
- Free acceleration,
- Heading tracking,
- Referenced yaw
Almost all the above terms are new to me, though I guess output 5 "Heading tracking" should be important to avoid airplane crashing. :)
6/9 DOF, MEMS, IMU, Gyro/Accelero/Magneto sensor reading notes
I still don't know what is 9-DOF. So I wikied the following to read. Finally I now know that 6-DOF is for mechanical (3 translation, 3 rotating), 3-DOF is for magnetic, adding together is 3 + 3 + 3 = 9 DOF. I found Wikipedia good. So I am reading more wiki articles.
And the summary of 6 degrees of freedom:
- Moving up and down (elevating/heaving)
- Moving left and right (strafing/swaying)
- Moving forward and backward (walking/surging)
- Swivels left and right (yawing)
- Tilts forward and backward (pitching)
- Pivots side to side (rolling)
Degrees of freedom (mechanics) (DOF) - Wikipedia
Microelectromechanical systems (MEMS) - Wikipedia
Inertial measurement unit (IMU) - Wikipedia
Gyroscope (Gyro) - Wikipedia
Accelerometer (Accelero) - Wikipedia
Magnetometer (Magneto) - Wikipedia
AdaFruit or SparkFun, That is the Question
The OP mentions AdaFruit but not SparkFun. I think one reason is that Adafruit is more friendly to everybody, but SparkFun more friendly to technical people. Anyway, I googled both and summarized below.
After considering many factors, my first choice is MPU9250.
AdaFruit Motion Sensors Catalog
Accelero - AXDL335, AXDL345, AXDL326, AXDL337, AXDL 343, LIS3DH,
Gyro - L3GD20H,
9-DOF - BNO055, FXOS8700 + FXAS21002, L3GD20H + LSM303
10-DOF IMU - L3GD20H + LSM303 + BMP180
Triple Axis Accelerometer and Gyro Breakout - MPU-6050 $29.95
VR IMU Breakout - BNO080 (Qwiic) $34.95
SparkFun IMU Breakout - MPU-9250 $14.95
6-DOF IMU - ITG3200/ADXL345
6-DOF IMU - - ITG3200/ADXL345
Accelerometer - MMA8452Q $10.49 Accelerometer - ADXL335 $14.95
Accelerometer Breakout - LIS331 VR IMU (Qwiic) - BNO080 High Precision
SPX-14618 Qwiic IMU - MPU-9250 SPX-14896 - $148.00
Accelerometer, Gyro and IMU Buying Guide
Gyroscope Tutorial - SparkFun
Gyro Tutorial - AdaFruit
SparkFun Accelerometer and Gyro - MPU-6050 $29.95
SparkFun IMU Breakout - MPU-9250
MPU-9250 Hookup Guide - SparkFun
The OP's AdaFruit 9DOF Consideration
The OP mentioned FXOS8700 which is not popular than MPU9250. I usually thing that more people googling means more popular. I know 6-DOF MPU6050 is more popular, but the vendor says MPU6050 is discontinued, and replaced by MPU9250.
FXOS8700 16,200 search results
MPU9250 409,000 search results
MPU6050 2,210,000 search results
After read SparkFun's buying guide, MPU9250 is my final choice.
Now I am starting to read the SparkFun tutorials, then the datasheet.
The OP's preferred language - C#
It is very likely that I will use Rpi Python 3.5.3 to test out MPU6250. I remember the OP is familiar with C#, but flexible to change language.
I am thinking of skimming through C#'s features and see if I can use its features in my python program.
As usual I wikied.
C# is a general-purpose, multi-paradigm programming language encompassing
It was developed around 2000 by Microsoft (.NET) and later approved as a standard by Ecma and ISO.
I once thought of trying C# in Rpi, using things like Mono, WinIoT etc. Just now I googled and found too many cons than pros. I also read the following article and very much agree with all the thing the author said. My quick and dirty conclusion is that for a lazy hobbyist like me, python is the only choice.
Python vs C#: Comparison of the Programming Languages - Jakub Protasiewicz 2018jul19
Guido van Rossum talked about useful type-annotation features in TypeScript, which have inspired similar features in Python
Arduino 9-DOF sensor for Arduino also good for Rpi
The OP asks if AdaFruit's sensor ofr Rpi is also good for Rpi. My answer is YES. But the trouble is that AdaFruit almost always provide library, tutorial, and demo code for Arduino, but nothing for Rpi. What is worse is that Ada is switching from Arduino to CircuitPython which is not 100% compatible with Rpi.
So I would suggest the OP to consider SparkFun. SparkFun does not has any good support for Rpi either. So SparkFun in the OP's case is the lesser evil, because SparkFun's 9-DOF sensor seems better than AdaFruit.
So I am leaving AdaFruit altogether and start exploring SparkFun.
SparkFun MPU9250 Tutorials Also for Arduino Only, Nothing for Rpi
I skimmed SparkFun's MPU9250 tutorials and software library and found them all for Arduino, so unhelpful for Rpi newbies. So I am leaving SparkFun as well. My plan is to first study the following references, then goggle for more help.
MPU-9250 Datasheet - Rev 1.0 2014 InvenSense
MPU-9250 Datasheet - Rev 1.1 2016 InvenSense 2016
MPU-9250 Register Map - Rev 1.4 2013 InvenSense
MPU-9250 Register Map - Rev 1.6 2015 InvenSense
MPU-9250 Breakout Schematic - Rev 10 2016 SparkFun
MPU9250 Datasheet Reading Notes
Now I am reading the datasheet, and making summaries. I usually read the block diagram to get a rough picture of the things inside the chip. (I found SparkFun's datasheet is 2 years out of date)
I found SparkFun's MPU9250 Register Map is also 2 years out of date. So I have updated the above links.
Anyway, I googled and found a schematic.
MPU-9250 9-DOF IMU Module - Thaou Electronics
Recommendation to MEMS newbies
It is true that MPU9250 will very soon replaced by new version, or
DOF10 modules. But for newbies who have never played with gyros or
acceleros, it is no hurry to start with DOF 9 with magnetos. I think
DOF 6 MPU6050 (gyro and accelero) is OK to start. Or to start as easy
as possible, I would recommend ADXL345, a very popular accelero,
recommended by both SparkFuna and AdaFruit.
To OP @ccalboni: Actually there are too many things to consider when
selecting a 9DOF sensor. The MPU6060, MPU9250 modules are not that
newbie friendly, and more suitable for hackers.
In case you don't wish to spend too much time doing hardware DIY and
troubleshooting, I would recommend the
Raspberry Pi Sense Hat,
which uses Bosch's BNO055 9 DOF sensor.
/ to continue, ...