Żyroskopy są wykorzystywane w dzisiejszych czasach powszechniej, jeden na bank masz w kieszeni (tak twój telefon). Tym razem pokaże wam prosty układ żyroskopowy wykorzystujący układ MPU6050. Całość zostanie zwizualizowana na kolorowym wyświetlaczem TFT GMT130. Co to jest żyroskop nie będę się tu rozpisywał zapraszam do lektory Żyroskop co to jest oraz Akcelerometr: Historia, Definicja i Zastosowania, gdyż wykorzystany układ MPU6050 w module GY521 również go posiada.
Parę parametrów moduł GY-521, jest popularnym modułem bazującym na układzie MPU6050 firmy InvenSense. Układ ten zawiera:
- 3-osiowy akcelerometr,
- 3-osiowy żyroskop,
- przetwornik analogowo-cyfrowy,
- interfejs komunikacyjny I²C.
Dzięki połączeniu akcelerometru i żyroskopu możliwe jest określenie położenia oraz ruchu urządzenia w przestrzeni.
- Specyfikacja MPU6050
- Napięcie zasilania: 3,3 V – 5 V (na module GY-521)
- Komunikacja: I²C
- Zakres akcelerometru: ±2 g, ±4 g, ±8 g, ±16 g
- Zakres żyroskopu: ±250°/s, ±500°/s, ±1000°/s, ±2000°/s
MPU6050 znajduje zastosowanie między innymi w:
- dronach,
- robotach mobilnych,
- stabilizatorach kamer,
- systemach nawigacyjnych,
- modelarstwie,
- projektach IoT.
Garść informacji o samym wyświetlaczu GMT130 jest kolorowym wyświetlaczem TFT IPS o przekątnej 1,3 cala więc stosunkowo niewielki i rozdzielczości 240×240 pikseli. Moduł wykorzystuje sterownik ST7789, komunikuje się za pomocą magistrali SPI.
Najważniejsze parametry GMT130
- Przekątna: 1,3″
- Rozdzielczość: 240 × 240 pikseli
- Sterownik: ST7789
- Interfejs: SPI
- Kolory: 65 tysięcy kolorów
- Technologia IPS zapewniająca szerokie kąty widzenia
W prezentowanym projekcie wyświetlacz został podłączony do Arduino Mega 2560 za pomocą sprzętowego interfejsu SPI. Tak nie użyłem tu Arduino Uno gdyż, wydajność już nie pozwalała prawidłowo obsługiwać wyświetlacza.
Połączenie modułu GY-521
GND → GND
5V → 5 V
SDA → 20
SCL → 21
Połączenie ekranu GMT130
GND → GND
VDD → 5 V
SCK → 52
SDA → 51
RES → 8
DC → 9
BLK → 5V
Połączenie modułu GY-521 z wyświetlaczem GMT130 pozwala w prosty sposób stworzyć system monitorowania orientacji przestrzennej urządzenia. Dzięki zastosowaniu układu MPU6050 możliwy jest pomiar położenia w trzech osiach, natomiast kolorowy wyświetlacz ST7789 zapewnia czytelną i atrakcyjną wizualizację wyników. Projekt stanowi doskonałą bazę do dalszego rozwoju, na przykład budowy sztucznego horyzontu, poziomicy elektronicznej, systemu stabilizacji czy kontrolera lotu.
Kod programu
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
// by swistak // pobrano z www.tranzystor.pl // License CC BY-NC-ND 4.0 // https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode.pl #include <Wire.h> #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_ST7789.h> #include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> #define TFT_CS -1 #define TFT_DC 9 #define TFT_RST 8 Adafruit_ST7789 tft(TFT_CS, TFT_DC, TFT_RST); Adafruit_MPU6050 mpu; int oldDotX = 120; int oldDotY = 170; // =============================== // Funkcja wyśrodkowania tekstu // =============================== void printCentered(const char* text, int y, uint16_t color, uint8_t size) { tft.setTextSize(size); tft.setTextColor(color); int16_t x1, y1; uint16_t w, h; tft.getTextBounds(text, 0, y, &x1, &y1, &w, &h); int x = (240 - w) / 2; tft.setCursor(x, y); tft.print(text); } void setup() { Serial.begin(115200); Wire.begin(); // Mega: SDA=20, SCL=21 tft.init(240, 240, SPI_MODE2); tft.setRotation(2); tft.fillScreen(ST77XX_BLACK); if (!mpu.begin()) { printCentered("MPU6050 ERROR", 100, ST77XX_RED, 2); while (1); } // Ekran startowy printCentered("Tranzystor.pl", 20, ST77XX_BLUE, 2); printCentered("GY-521", 45, ST77XX_GREEN, 2); delay(1500); tft.fillScreen(ST77XX_BLACK); // Nagłówek printCentered("by Swistak", 10, ST77XX_BLUE, 2); printCentered("Tranzystor.pl", 35, ST77XX_BLUE, 2); // Opisy tft.setTextColor(ST77XX_WHITE); tft.setTextSize(2); tft.setCursor(10, 55); tft.print("Pitch:"); tft.setCursor(10, 80); tft.print("Roll:"); // Okrąg wskaźnika tft.drawCircle(120, 170, 50, ST77XX_BLUE); tft.drawLine(70, 170, 170, 170, ST77XX_BLUE); tft.drawLine(120, 120, 120, 220, ST77XX_BLUE); } void loop() { sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp); float roll = atan2(a.acceleration.y, a.acceleration.z) * 180.0 / PI; float pitch = atan2(-a.acceleration.x, sqrt( a.acceleration.y * a.acceleration.y + a.acceleration.z * a.acceleration.z)) * 180.0 / PI; // Czyszczenie pól z wartościami tft.fillRect(100, 55, 120, 20, ST77XX_BLACK); tft.fillRect(100, 80, 120, 20, ST77XX_BLACK); // Wyświetlanie wartości tft.setTextColor(ST77XX_GREEN); tft.setTextSize(2); tft.setCursor(100, 55); tft.print(pitch, 1); tft.setCursor(100, 80); tft.print(roll, 1); // Kasowanie starej kropki tft.fillCircle(oldDotX, oldDotY, 6, ST77XX_BLACK); // Nowa pozycja int dotX = 120 + constrain((int)roll, -40, 40); int dotY = 170 - constrain((int)pitch, -40, 40); tft.fillCircle(dotX, dotY, 6, ST77XX_RED); oldDotX = dotX; oldDotY = dotY; delay(20); } |
Połączenie modułu GY-521 z wyświetlaczem GMT130 pozwala w prosty sposób stworzyć system monitorowania orientacji przestrzennej urządzenia. Dzięki zastosowaniu układu MPU6050 możliwy jest pomiar położenia w trzech osiach, natomiast kolorowy wyświetlacz ST7789 zapewnia czytelną i atrakcyjną wizualizację wyników. Projekt stanowi doskonałą bazę do dalszego rozwoju, na przykład budowy sztucznego horyzontu, poziomicy elektronicznej, systemu stabilizacji czy kontrolera lotu.

