- Wymagane komponenty:
- Czujnik żyroskopowy MPU6050:
- Opis:
- Schemat obwodu i wyjaśnienie:
- Konfiguracja Raspberry Pi dla czujnika żyroskopowego MPU6050:
- Objaśnienie programowania:
Czujnik MPU6050 ma wiele funkcji na jednym chipie. Składa się z akcelerometru MEMS, żyroskopu MEMS i czujnika temperatury. Ten moduł jest bardzo dokładny podczas konwersji wartości analogowych na cyfrowe, ponieważ ma 16-bitowy konwerter analogowo-cyfrowy dla każdego kanału. Ten moduł może jednocześnie przechwytywać kanały x, y i z. Posiada interfejs I2C do komunikacji z kontrolerem hosta. Ten moduł MPU6050 to kompaktowy chip zawierający akcelerometr i żyroskop. To bardzo przydatne urządzenie do wielu zastosowań, takich jak drony, roboty, czujniki ruchu. Jest również nazywany akcelerometrem żyroskopowym lub trójosiowym.
Dzisiaj w tym artykule zamierzamy połączyć MPU6050 z Raspberry Pi i pokazać wartości na 16x2 LCD.
Wymagane komponenty:
- Raspberry Pi
- MPU-6050
- 10K POT
- Przewód połączeniowy
- Płytka prototypowa
- Zasilacz
Czujnik żyroskopowy MPU6050:
MPU-6050 to 8-pinowy 6-osiowy żyroskop i akcelerometr w jednym chipie. Moduł ten domyślnie pracuje na komunikacji szeregowej I2C, ale można go skonfigurować dla interfejsu SPI, konfigurując go w rejestrze. W przypadku I2C ma to linie SDA i SCL. Prawie wszystkie piny są wielofunkcyjne, ale tutaj będziemy postępować tylko z pinami trybu I2C.
Konfiguracja pinów:
Vcc: - ten pin służy do zasilania modułu MPU6050 względem masy
GND: - to jest pin uziemienia
SDA: - pin SDA służy do przesyłania danych pomiędzy kontrolerem a modułem mpu6050
SCL: - pin SCL służy do wejścia zegara
XDA: - Jest to linia danych czujnika I2C SDA do konfiguracji i odczytu z czujników zewnętrznych ((opcja) nieużywana w naszym przypadku)
XCL: - To jest linia zegara czujnika I2C SCL do konfiguracji i odczytu z czujników zewnętrznych ((opcjonalnie) nieużywanych w naszym przypadku)
ADO: - I2C Slave Address LSB (nie dotyczy w naszym przypadku)
INT: - Pin przerwania wskazujący gotowość danych.
Wcześniej połączyliśmy MPU6050 z Arduino.
Opis:
W tym artykule pokazujemy odczyty temperatury, żyroskopu i akcelerometru na wyświetlaczu LCD przy użyciu MPU6050 z Raspberry Pi. Jeśli jesteś nowy w Raspberry Pi, przejdź do naszej sekcji samouczków Raspberry Pi i dowiedz się, jak rozpocząć pracę z Raspberry Pi.
W tym projekcie najpierw pokazaliśmy wartość temperatury na wyświetlaczu LCD i po pewnym czasie pokazujemy wartości żyroskopu, a po pewnym czasie mamy odczyty akcelerometru jak na poniższych obrazkach:
Schemat obwodu i wyjaśnienie:
Schemat obwodu do połączenia MPU6050 z Raspberry Pi jest bardzo prosty, tutaj użyliśmy wyświetlacza LCD i MPU6050. Potencjometr 10k służy do kontrolowania jasności wyświetlacza LCD. W związku z MPU6050 wykonaliśmy 4 połączenia, w których podłączyliśmy zasilanie 3,3v i masę MPU6050 do 3,3v i masy Raspberry Pi. Piny SCL i SDA MPU6050 są połączone z fizycznym pinem 3 (GPIO2) i pinem 5 (GPIO3) Raspberry. LCD RS, RW i EN są bezpośrednio podłączone do GPIO18 i 23 raspberry pi. Pin danych jest bezpośrednio połączony z cyfrowym pinem o numerze GPIO24, GPIO25, GPIO8 i GPIO7. Dowiedz się więcej o łączeniu LCD z Raspberry Pi tutaj.
Konfiguracja Raspberry Pi dla czujnika żyroskopowego MPU6050:
Przed przystąpieniem do programowania musimy włączyć i2c Raspberry Pi podaną metodą:
Krok 1: Włącz komunikację I2C
Przed zainstalowaniem biblioteki Adafruit SSD1306 musimy włączyć komunikację I2C w Raspberry Pi.
Aby to zrobić, wpisz w konsoli Raspberry Pi:
sudo raspi -config
A następnie pojawi się niebieski ekran. Teraz wybierz opcję interfejsu
Następnie musimy wybrać I2C
Wcześniejsze
Następnie musimy wybrać tak i nacisnąć enter, a następnie ok
Następnie musimy zrestartować Raspberry Pi wydając poniższe polecenie:
sodo reboot
Krok 2: Zainstaluj python-pip i bibliotekę GPIO
sudo apt-get install build-essential python-dev python-pip
Następnie musimy zainstalować bibliotekę GPIO raspberry pi
sudo pip instaluje RPi.GPIO
Krok 3: Zainstaluj bibliotekę smbus
Na koniec musimy zainstalować bibliotekę smbus w Raspberry Pi za pomocą podanego polecenia:
sudo apt-get install python-smbus
Krok 4: Zainstaluj bibliotekę MPU6050
Następnie musimy zainstalować bibliotekę MPU6050 za pomocą podanego polecenia
sudo pip zainstaluj mpu6050
Teraz możemy znaleźć przykładowe kody w przykładach. Użytkownik może przetestować ten kod, przesyłając go bezpośrednio do Raspberry Pi lub dostosowując go zgodnie z wymaganiami. Tutaj wyświetliliśmy wartości osi X, Y i Z MPU6050 na wyświetlaczu LCD 16x2. Pełen kod Pythona można znaleźć na końcu samouczka.
Objaśnienie programowania:
Kompletny kod Pythona jest podany na końcu, tutaj wyjaśniamy kilka ważnych części kodu.
W programie Python zaimportowaliśmy wymaganą bibliotekę, taką jak czas, smbus i GPIO.
import smbus import time import RPi.GPIO jako gpio
Następnie musimy pobrać adres rejestru, aby skonfigurować MPU6050 i pobrać wartości z tego samego. Wzięliśmy również kilka zmiennych do kalibracji i inicjalizacji magistrali dla I2C.
PWR_M = 0x6B DIV = 0x19 CONFIG = 0x1A GYRO_CONFIG = 0x1B INT_EN = 0x38 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x38 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x47 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x47 = 0x41d adres magistrali = smbus. AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Następnie napisaliśmy kilka funkcji do sterowania 16x2LCD, takich jak def begin (), def cmd (ch), def write (ch), def Print (str), def clear () itd . Możesz dalej sprawdzić połączenie LCD z Raspberry Pi.
Następnie musimy zainicjować moduł MPU6050
def InitMPU (): bus.write_byte_data (Adres_urządzenia, DIV, 7) bus.write_byte_data (Adres_urządzenia, PWR_M, 1) bus.write_byte_data (Adres_urządzenia, CONFIG, 0) bus.write_byte_data (Adres_urządzenia, PWR_M, 1) bus.write_byte_data (Adres_urządzenia, CONFIG, 0) bus.write_byte_data (Adres_urządzenia, PWR_M, 1) bus.write_byte_data (Adres_urządzenia, CONFIG, 0) bus.write_byte_data (Adres_urządzenia_przez, GYRO_data), INT_EN, 1) time.sleep (1)
Następnie musimy napisać kilka funkcji odczytujących wartości z MPU6050 i wyświetlających je na LCD. Podana funkcja służy do odczytu danych z MPU6050
def readMPU (addr): high = bus.read_byte_data (Device_Address, addr) low = bus.read_byte_data (Device_Address, addr + 1) value = ((high << 8) - low) if (value> 32768): value = value - 65536 zwracana wartość
Podana funkcja służy do odczytu danych z akcelerometru i żyroskopu
def accel (): x = readMPU (ACCEL_X) y = readMPU (ACCEL_Y) z = readMPU (ACCEL_Z) Ax = (x / 16384.0-AxCal) Ay = (y / 16384.0-AyCal) Az = (z / 16384.0-AzCal) #print "X =" + str (Ax) display (Ax, Ay, Az) time.sleep (.01) def gyro (): global GxCal global GyCal global GzCal x = readMPU (GYRO_X) y = readMPU (GYRO_Y) z = readMPU (GYRO_Z) Gx = x / 131.0 - GxCal Gy = y / 131.0 - GyCal Gz = z / 131.0 - GzCal #print "X =" + str (Gx) wyświetlanie (Gx, Gy, Gz) time.sleep (. 01)
Następnie napisaliśmy funkcję odczytu temperatury
def temp (): tempRow = odczyt MPU (TEMP) tempC = (tempRow / 340,0) + 36,53 tempC = "%. 2f"% tempC druk tempC setCursor (0,0) Print ("Temp:") Print (str (tempC)) time.sleep (.2)
Funkcja def calibrate () służy do kalibracji MPU6050, a funkcja def display () służy do wyświetlania wartości na wyświetlaczu LCD. Sprawdź te funkcje w pełnym kodzie podanym poniżej.
Po tym, zaczęliśmy LCD zainicjować i przeprowadzić kalibrację MPU6050 a potem , gdy pętla nazwaliśmy cały zestaw wszystkich trzech wartości z MPU- temperatury, akcelerometru i żyroskopu i pokazał je na wyświetlaczu LCD.
zaczynać(); Print ("Interfejs MPU6050") setCursor (0,1) Print ("Circuit Digest") time.sleep (2) InitMPU () calibrate () while 1: InitMPU () clear () for i in range (20): temp () clear () Print ("Accel") time.sleep (1) for i in range (30): accel () clear () Print ("Gyro") time.sleep (1) for i in range (30): żyroskop ()
Żyroskop i akcelerometr MPU6050 służą do wykrywania pozycji i orientacji dowolnego urządzenia. Żyroskop wykorzystuje ziemską grawitację do określenia pozycji osi x, yi z, a akcelerometr wykrywa na podstawie szybkości zmiany ruchu. Korzystaliśmy już z akcelerometru z Arduino w wielu naszych projektach, takich jak:
- Robot sterowany gestami dłoni oparty na akcelerometrze
- System ostrzegania o wypadkach pojazdów oparty na Arduino
- Alarm wykrywacza trzęsień ziemi za pomocą Arduino