1. Χρήση του Arduino
+Χρειαζόμαστε τις εξής βιβλιοθήκες πρώτα +https://maker.pro/files/MPU6050.zip +https://maker.pro/files/I2Cdev.zip
+2. Κώδικας του Arduino
+// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
+// for both classes must be in the include path of your project
+#include "I2Cdev.h"
+#include "MPU6050.h"
+#include "ArduinoJson.h"
+
+// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
+// is used in I2Cdev.h
+#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
+ #include "Wire.h"
+#endif
+
+// class default I2C address is 0x68
+// specific I2C addresses may be passed as a parameter here
+// AD0 low = 0x68 (default for InvenSense evaluation board)
+// AD0 high = 0x69
+MPU6050 accelgyro;
+//MPU6050 accelgyro(0x69); // <-- use for AD0 high
+
+int16_t ax, ay, az;
+int16_t gx, gy, gz;
+
+
+
+// uncomment "OUTPUT_READABLE_ACCELGYRO" if you want to see a tab-separated
+// list of the accel X/Y/Z and then gyro X/Y/Z values in decimal. Easy to read,
+// not so easy to parse, and slow(er) over UART.
+#define OUTPUT_READABLE_ACCELGYRO
+
+// uncomment "OUTPUT_BINARY_ACCELGYRO" to send all 6 axes of data as 16-bit
+// binary, one right after the other. This is very fast (as fast as possible
+// without compression or data loss), and easy to parse, but impossible to read
+// for a human.
+//#define OUTPUT_BINARY_ACCELGYRO
+
+
+#define LED_PIN 13
+bool blinkState = false;
+
+void setup() {
+ // join I2C bus (I2Cdev library doesn't do this automatically)
+ #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
+ Wire.begin();
+ #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
+ Fastwire::setup(400, true);
+ #endif
+
+ // initialize serial communication
+ // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
+ // it's really up to you depending on your project)
+ Serial.begin(38400);
+
+ // initialize device
+ //Serial.println("Initializing I2C devices...");
+ accelgyro.initialize();
+
+ // verify connection
+ //Serial.println("Testing device connections...");
+ //Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
+ //create JSON Document
+
+ // use the code below to change accel/gyro offset values
+ /*
+ Serial.println("Updating internal sensor offsets...");
+ // -76 -2359 1688 0 0 0
+ Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); // -76
+ Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); // -2359
+ Serial.print(accelgyro.getZAccelOffset()); Serial.print("\t"); // 1688
+ Serial.print(accelgyro.getXGyroOffset()); Serial.print("\t"); // 0
+ Serial.print(accelgyro.getYGyroOffset()); Serial.print("\t"); // 0
+ Serial.print(accelgyro.getZGyroOffset()); Serial.print("\t"); // 0
+ Serial.print("\n");
+ accelgyro.setXGyroOffset(220);
+ accelgyro.setYGyroOffset(76);
+ accelgyro.setZGyroOffset(-85);
+ Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); // -76
+ Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); // -2359
+ Serial.print(accelgyro.getZAccelOffset()); Serial.print("\t"); // 1688
+ Serial.print(accelgyro.getXGyroOffset()); Serial.print("\t"); // 0
+ Serial.print(accelgyro.getYGyroOffset()); Serial.print("\t"); // 0
+ Serial.print(accelgyro.getZGyroOffset()); Serial.print("\t"); // 0
+ Serial.print("\n");
+ */
+
+ // configure Arduino LED for
+ pinMode(LED_PIN, OUTPUT);
+}
+
+void loop() {
+ // read raw accel/gyro measurements from device
+ accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
+
+ // these methods (and a few others) are also available
+ //accelgyro.getAcceleration(&ax, &ay, &az);
+ //accelgyro.getRotation(&gx, &gy, &gz);
+
+ #ifdef OUTPUT_READABLE_ACCELGYRO
+ // display tab-separated accel/gyro x/y/z values
+ // Create a JsonObject
+const size_t capacity = JSON_OBJECT_SIZE(4);
+DynamicJsonBuffer jsonBuffer(capacity);
+//MORFI JSON
+JsonObject& sens = jsonBuffer.createObject();
+sens["sensor"] = "accelerometer";
+sens["X"] = ax;
+sens["Y"] = ay;
+sens["Z"] = az;
+//PRINT ACCELEROMETER OBJECT
+delay(100);
+sens.printTo(Serial);
+Serial.print(",");
+sens["sensor"] = "gyroscope";
+sens["X"] = gx;
+sens["Y"] = gy;
+sens["Z"] = gz;
+delay(100);
+sens.printTo(Serial);
+Serial.print(",");
+Serial.print("\n");
+
+
+
+ #endif
+
+ #ifdef OUTPUT_BINARY_ACCELGYRO
+ Serial.write((uint8_t)(ax >> 8)); Serial.write((uint8_t)(ax & 0xFF));
+ Serial.write((uint8_t)(ay >> 8)); Serial.write((uint8_t)(ay & 0xFF));
+ Serial.write((uint8_t)(az >> 8)); Serial.write((uint8_t)(az & 0xFF));
+ Serial.write((uint8_t)(gx >> 8)); Serial.write((uint8_t)(gx & 0xFF));
+ Serial.write((uint8_t)(gy >> 8)); Serial.write((uint8_t)(gy & 0xFF));
+ Serial.write((uint8_t)(gz >> 8)); Serial.write((uint8_t)(gz & 0xFF));
+ #endif
+
+ // blink LED to indicate activity
+ blinkState = !blinkState;
+ digitalWrite(LED_PIN, blinkState);
+}
+3. Σύνδεση με raspberry
++ + | ++Συνδέουμε με usb το arduino με το raspberry και τρέχουμε το python + | +
import serial
+
+from time import sleep
+
+ser = serial.Serial('/dev/ttyACM0', 38400)
+sleep(1)
+
+file = open("dataset", "a")
+file.write("[")
+
+for i in range(1000):
+ s = ser.readline()
+ print(s)
+ file.write(str(s))
+
+file.write("]")
+file.close()
+Embedded Youtube video
+Διαβάζει τα δεδομένα που δίνει το arduino και τα γράφει σε αρχείο +προς μοντελοποίηση+
4. Μοντελοποίση με το sketch-test3D.js
+Στο git Υπάρχει ο κώδικας που μοντελοποιεί τα δεδομένα του dataset
+Ωστόσο παρουσιάζει πρόβλημα στα μαθηματικά και βγάζει ΝαΝ
+