ArduinoGY-521
De GY-521 is gebaseerd op de MPU6050 sensor welke een gecombineerde bewegingsmeter, versnellingsmeter en gyroscoop heeft. Het geeft waarden terug, middels I2C communication, over beweging, versnelling en rotering. Deze gegevens zijn erg precies. Er is een 16-bits analoog naar digitaal omzetter voor ieder kanaal. De waarden kunnen dan ook tegelijkertijd worden uitgelezen.
Naast de ze functies heeft de MPU6050 ook nog een digitale thermometer.

ArduinoBewegings controller
Dit component bevat een MPU-6050 6-Axis bewegings controller. Dat is een helemond vol voor een eenvoudige functie. Als je het component vast hebt, dan kun je 3 dingen doen: je kunt naar rechts. Je kunt omhoog. En je kunt naar voren. Dat noemen we de 3 assen waarop je kunt bewegen in een ruimte. En omdat je niet enkel naar rechts, omhoog en voren kunt gaan, maar ook in tegengestelde richting; links omlaag en naar achteren heb je 6 richtingen waarin je kunt gaan. Vandaar de term 6-Axis (=6 assen). Zie de figuur hieronder met links de assen als er enkel positieve waarden zijn, en rechts als er ook negatieve waarden zijn. De verplaatsing kan worden gemeten.

Hiermee kun je ook plaatsbepaling doen. Voorbeeld: De afstandbediening ligt 60 cm naar rechts, 40 cm omhoog en 140 cm naar achteren op een tafeltje.
ArduinoVersnellingsmeter
Dit component bevat een MEMS accelerometer. De afkorting MEMS staat voor Micro-elektromechanische systemen. Dit zijn kleine ingebedde systemen die onderdeel van een ander systeem. Ofwel de de accelero meter isonderdeel van de bewegingsmeter.
De vertaling van accelerometer is in het Nederlands versnellingsmeter. Het component meet de kracht van versnelling. Vanuit stilstand begint iets opeens te bewegen, of vanuit een beweging is er een versnelling of vertraging. Een bal rolt kalm over een veld, totdat iemand er een trap tegen geeft en de bal hard weg vliegt. De versnelling kan worden gemeten.
Hiermee kun je verplaatsing meten. Voorbeeld: We hebben 3 seconden met een snelheid van 10cm/s bewogen in een richting.
ArduinoGyroscoop
Dit component bevat een MEMS gyroscope. Wat MEMS is hebben we hierboven gezien. Een gyroscoop bevat een piƫzokristal, waarop een elektrische spanning wordt gelegd. Als er nu een draaibeweging, op het kristal inwerkt, dan kan het verschil in deze elektrische spanning worden gemeten. Hieruit kan de richting en hoek van de draaibeweging worden gemeten.
Hiermee kun je richting en de kracht van een draaibeweging meten. Voorbeeld: We zijn horizontaal 30 graden gedraaid en in de lengte richting 15 graden.
ArduinoGyroscoop
Op de afbeelding bovenaan de pagina was al te zien dat er standaard geen connectoren op de printkaart zitten. Die moeten we er op solderen.
ArduinoPINs
De GY-521 heeft 8 pins.
- VCC, voeding
- GND, aarde
- SCL, 12C Clock
- SDA, 12C Data
- XDA, Auxiliary 12C Data
- XCL, Auxiliary 12C Clock
- AD0, Adjusting 12C Address
- INT, Interrupt
ArduinoVCC en GND PINs
Om de voeding aan te sluiten gebruiken we de VCC en GND pins. VCC op het bord voor de positieve voeding, verbind met de Arduino 5V pin
Voor aarde, verbinden we de GND op het bord met de Arduino GND pin
ArduinoSCL en SDA PINs
Er zijn verschillende soorten Uno's. Deze Uno zijn niet allemaal helemaal gelijk. Sommige hebben namelijk extra pins, voor SCL en SDA.
Deze extra pinnen zitten meestal (virtueel doorgeteld) op pin 16 en 17 in de hoek bij de grote USB aansluiting. De codering hiervan staat meestal aan de achterkan van het kaartje.
Indien je Arduino de extra pinnen niet heeft, geen bezwaar. Je kunt hiervoor ook voor SCL pin A5 en voor SDA pin A4 gebruiken.
ArduinoXDA en XCL PINs
De XDA en XCL zijn auxiliary serial pins. Deze kun je gebruiken om hier andere MPU6050's op aan te sluiten. Ik heb hier zelf nog geen ervaring mee.
ArduinoAdafruit
Om het leven gemakkelijker te maken, kun je de "Wire" en "Adafruit-MPU6050 library" downloaden en opnemen in je project
ArduinoScript
Hieronder een script om de module te kunnen gebruiken.
#include#include #include Adafruit_MPU6050 mpu; void setup(void) { Serial.begin(115200); while (!Serial) { delay(10); // will pause Zero, Leonardo, etc until serial console opens } // Try to initialize! if (!mpu.begin()) { Serial.println("Failed to find MPU6050 chip"); while (1) { delay(10); } } mpu.setAccelerometerRange(MPU6050_RANGE_16_G); mpu.setGyroRange(MPU6050_RANGE_250_DEG); mpu.setFilterBandwidth(MPU6050_BAND_21_HZ); //Serial.println(""); delay(100); } void loop() { sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp); Serial.print("Temperature:"); Serial.print(temp.temperature); Serial.print("\tx-acceleration:"); Serial.print(a.acceleration.x); Serial.print("\ty-acceleration:"); Serial.print(a.acceleration.y); Serial.print("\tz-acceleration:"); Serial.print(a.acceleration.z); Serial.print("\tx-gyro:"); Serial.print(g.gyro.x); Serial.print("\ty-gyro:"); Serial.print(g.gyro.y); Serial.print("\tz-gyro:"); Serial.println(g.gyro.z); delay(10); }
