Přístroj k měření vibrací s Akcelerometrem
Koupil jsi GY-521 a vyzkoušel podle toho návodu? Jdeme na náš nový projekt!
Dneska uděláme přistroj na měření vibrací.
Tenhle návod bude fungovat jen s čipem MPU6050 a I2C sběrnicí na adrese 0×68 a taky s Arduino Uno nebo Mega.
MPU6050_ReadData()
Tato funkce bude číst pouze užitečné údaje. V tom to případě se jedná o akcelerometr, gyroskop a teplotu. Po přečtení jsou tyto proměny (temp_scalled, accel_x_scalled, accel_y_scalled, accel_z_scalled, gyro_x_scalled, gyro_y_scalled a gyro_z_scalled) aktualizovány.
MPU6050_ResetWake()
Tato funkce obnoví čip do své výchozí hodnoty. Doporučuje se provést obnovení před nastavením čipu pro jakýkoliv účel.
MPU6050_SetDLPF(intBW)
Tato funkce bude konfigurovat vestavěný low-pass filtr. Int BW by měl obsahovat hodnoty (0-6). Šířka pásma filtru se bude měnit v závislosti na níže uvedené tabulce.
MPU6050_SetDLPF(intBW)
Tato funkce bude konfigurovat vestavěný low-pass filtr. Int BW by měl obsahovat hodnoty (0-6). Šířka pásma filtru se bude měnit v závislosti na níže uvedené tabulce.
int BW | DLPF šířka pásma |
0 nebo jakýkoli | Inf |
1 | 184 |
2 | 94 |
3 | 44 |
4 | 21 |
5 | 10 |
6 | 5 |
Pokud int BW není v (0-6), LPF je zakázána, což je totéž, jako šířka pásma nastavená do nekonečna.
MPU6050_SetGains(intgyro,intaccel)
Tuto funkci použijte pro nastavení maximálního rozsahu měření.
int gyro | Max měřítko [stupně/s] | int accel | Max měřítko [m/s2] | |
0 | 250 | 0 | 2g | |
1 | 500 | 1 | 4g | |
2 | 1000 | 2 | 8g | |
3 | 2000 | 3 | 16g | |
jakýkoli | syrová hodnota | jakýkoli | syrová hodnota |
Neupravený kód a knihovny najdeš tady: http://hobbylogs.me.pn/?p=47. Odkaz je v angličtině.
Upravený kód a knihovny jsou tady
Zapojíme to podle obvodu:
Nahrajeme kód:
/* Author = helscream (Omer Ikram ul Haq)
Website: http://hobbylogs.me.pn/?p=47
Ver: 0.1 beta --- Start
Ver: 0.2 beta --- Bug fixed for calculating "angle_y_accel" and "angle_x_accel" in "Gyro_header.ino" file
Upraveno laskarduino.cz
*/
#include
#include "gyro_accel.h"
// Defining constants
#define dt 5 // time difference in milli seconds
#define rad2degree 57.3 // Radian to degree conversion
#define Filter_gain 0.95 // e.g. angle = angle_gyro*Filter_gain + angle_accel*(1-Filter_gain)
unsigned long t=0; // Time Variables
// Main Code
void setup(){
Serial.begin(115200);
Wire.begin();
MPU6050_ResetWake(); // funkce obnoví čip na své výchozí hodnoty
MPU6050_SetGains(0,1); // nastavení maximálního rozsahu měření
MPU6050_SetDLPF(0); // konfigurovaní vestavěného low-pass filtrů do nekonečna pro kalibrací
MPU6050_OffsetCal();
MPU6050_SetDLPF(6); // konfigurovaní vestavěného low-pass filtrů na min. šířku pásma
Serial.print("accel_x_scalled");
Serial.print("\taccel_y_scalled");
Serial.print("\taccel_z_scalled");
Serial.println("\tzatíženi");
t=millis();
}
void loop(){
t=millis();
MPU6050_ReadData();
Serial.print(accel_x_scalled);
Serial.print("\t");
Serial.print(accel_y_scalled);
Serial.print("\t");
Serial.print(accel_z_scalled);
Serial.print("\t");
Serial.println(((float)(millis()-t)/(float)dt)*100);
while((millis()-t) < dt){ // ujistit se doba smyčky se rovna dt
// Nic neděláme, čekáme :)"
}
}
Délka smyčky je nastavena na 5 ms, aby měly smyčky stejnou dobu trvání (jinak smyčka trvá 3 až 5ms).
Pěvně přidělej čidlo třeba k motoru, spusť seriálový monitor (vyber rychlost 115200), vyčkej na kalibraci a zkus!
Teď vypni motor a Arduino, všechno zkopíruj (Ctrl + A , Ctrl + C) a dej to do Excelu. Zkoumej. Nezapomeň změnit formát buněk na čísla a vyměň všechny tečky za čárky. Příklad v příloze 🙂 Jo, a bacha na osu Z, je tam ještě Gravitační zrychlení 9,823 m·s-2
Já jsem na měření vibrací používal osu Y.
Hodně štěstí ve Tvém projektu 🙂