MPU6050 センサーは、シングルチップ上で多くの機能を備えています。これは、MEMS加速度計、MEMSジャイロ、および温度センサーで構成されています。このモジュールは、チャネルごとに16ビットのアナログ-デジタルコンバーターハードウェアを備えているため、アナログ値をデジタルに変換する際に非常に正確です。このモジュールは、x、y、zチャネルを同時にキャプチャすることができます。ホストコントローラーと通信するためのI2Cインターフェースを備えています。この MPU6050モジュールは、加速度計とジャイロの両方を備えたコンパクトなチップです。これは、ドローン、ロボット、モーションセンサーなどの多くのアプリケーションにとって非常に便利なデバイスです。ジャイロスコープまたは3軸加速度計とも呼ばれ ます。
今日この記事では、このMPU6050をRaspberry Piとインターフェイスさせ、16x2LCDでの値を示します。
必要なコンポーネント:
- ラズベリーパイ
- MPU-6050
- 10Kポット
- ジャンパー線
- ブレッドボード
- 電源
MPU6050ジャイロセンサー:
MPU-6050 は、シングルチップの8ピン6軸ジャイロおよび加速度計です。このモジュールはデフォルトでI2Cシリアル通信で動作しますが、レジスタを構成することでSPIインターフェイス用に構成できます。I2Cの場合、これにはSDAおよびSCLラインがあります。ほとんどすべてのピンは多機能ですが、ここではI2Cモードピンのみを使用しています。
ピン構成:
Vcc:- このピンは、グランドに対してMPU6050モジュールに電力を供給するために使用されます
GND:- これはグランドピンです
SDA: -SDAピンはコントローラーとmpu6050モジュール間のデータに使用されます
SCL: -SCLピンはクロック入力に使用されます
XDA:- これは、外部センサーを構成して読み取るためのセンサーI2C SDAデータラインです((オプション)この場合は使用されません)
XCL:- これは、外部センサーを構成して読み取るためのセンサーI2C SCLクロックラインです((オプション)この場合は使用されません)
ADO: -I2CスレーブアドレスLSB(この場合は適用されません)
INT:- データ準備完了を示すための割り込みピン。
以前、MPU6050をArduinoとインターフェースしました。
説明:
この記事では、Raspberry PiでMPU6050を使用して、LCDでの 温度、ジャイロ、および加速度計の読み取り値 を示しています。Raspberry Piを初めて使用する場合は、Raspberry Piチュートリアルセクションに目を通し、RaspberryPiの使用を開始してください。
このプロジェクトでは、最初に LCDに温度値を表示し 、しばらくするとジャイロ値を表示し 、しばらく すると下の画像に示すように加速度計の読み取り値を表示します。
回路図と説明:
MPU6050をRaspberryPiとインターフェースするための回路図は、 ここではLCDとMPU6050を使用して非常に単純です。LCDの明るさを制御するために10kポットが使用されます。MPU6050に関連して、MPU6050の3.3v電源とアースをRaspberryPiの3.3vとアースに接続する4つの接続を行いました。MPU6050のSCLピンとSDAピンは、ラズベリーの物理ピン3(GPIO2)とピン5(GPIO3)に接続されています。LCDのRS、RW、およびENは、GPIO18およびラズベリーパイの23に直接接続されています。データピンは、デジタルピン番号GPIO24、GPIO25、GPIO8、およびGPIO7に直接接続されています。LCDとRaspberryPiのインターフェースについて詳しくは、こちらをご覧ください。
MPU6050ジャイロセンサー用のRaspberryPiの構成:
プログラミングを開始する前に、次の方法を使用してRaspberryPiのi2cを有効にする必要があります。
ステップ1:I2C通信を有効にする
Adafruit SSD1306ライブラリをインストールする前に、RaspberryPiでI2C通信を有効にする必要があります。
Raspberry Piコンソールでこのタイプを実行するには:
sudo raspi -config
そして、ブルースクリーンが表示されます。次に、インターフェイスオプションを選択します
この後、I2Cを選択する必要があります
この後、[はい]を選択し、Enterキーを押してから[OK]を押す必要があります
この後、以下のコマンドを発行して、ラズベリーパイを再起動する必要があります。
sodoリブート
ステップ2:python-pipとGPIOライブラリをインストールする
sudo apt-get install build-essential python-dev python-pip
この後、ラズベリーパイGPIOライブラリをインストールする必要があります
sudoのピップインストールRPi.GPIO
ステップ3: smbus ライブラリをインストールする
最後に、次のコマンドを使用して、RaspberryPiに smbus ライブラリをインストールする必要があります。
sudo apt-get install python-smbus
ステップ4:ライブラリMPU6050をインストールします
この後、指定されたコマンドを使用してMPU6050ライブラリをインストールする必要があります
sudo pip install mpu6050
これで、例の中にサンプルコードを見つけることができます。ユーザーは、Raspberry Piに直接アップロードしてそのコードをテストするか、要件に応じてカスタマイズできます。ここでは、MPU6050のX、Y、Z軸の値を16x2LCDに表示しています。チュートリアルの最後に完全なPythonコードがあります。
プログラミングの説明:
完全なPythonコードはここの最後にあり、コードのいくつかの重要な部分を説明しています。
Pythonプログラムでは、time、smbus、GPIOなどの必要なライブラリをインポートしました。
インポートsmbusインポート時間インポートRPi.GPIOをgpioとして
この後、MPU6050を構成し、そこから値を取得するために、いくつかのレジスタアドレスを取得する必要があります。また、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_X = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
次に、 def begin()、def cmd(ch)、def write(ch)、def Print(str)、def clear()などの 16x2LCDを駆動するためのいくつかの関数を記述しました。LCDとRaspberryPiのインターフェースをさらに確認できます。
この後、MPU6050モジュールを初期化する必要があります
def InitMPU():bus.write_byte_data(Device_Address、DIV、7)bus.write_byte_data(Device_Address、PWR_M、1)bus.write_byte_data(Device_Address、CONFIG、0)bus.write_byte_data(Device_Address、GYRO_CONFIG、24)bus.write_byte_data(Device_Address 、INT_EN、1)time.sleep(1)
この後、MPU6050から値を読み取り、それらをLCDに表示するためのいくつかの関数を作成する必要があります。指定された関数は、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戻り値
与えられた関数は、加速度計とジャイロメーターのデータを読み取るために使用されます
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 ():グローバルGxCalグローバルGyCalグローバル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)display(Gx、Gy、Gz)time.sleep(。 01)
この後、温度読み取り関数を作成しました
def temp():tempRow = readMPU(TEMP)tempC =(tempRow / 340.0)+ 36.53 tempC = "%。2f"%tempC print tempC setCursor(0,0)Print( "Temp:")Print(str(tempC) )time.sleep(.2)
def calibrate() 関数はMPU6050を較正するために使用され、 def display() 関数はLCDに値を表示するために使用されます。以下に示す完全なコードでこれらの関数を確認してください。
この後、LCDを開始し、MPU6050を初期化してキャリブレーションし、 while ループで、MPU温度、加速度計、ジャイロから3つの値セットすべてを呼び出し、LCDに表示しました。
ベギン(); Print( "MPU6050 Interface")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) :ジャイロ()
MPU6050ジャイロと加速度計は どちらも、デバイスの位置と向きを検出するために使用されます。ジャイロは地球の重力を使用してx、y、z軸の位置を決定し、加速度計は動きの変化率に基づいて検出します。次のような多くのプロジェクトで、Arduinoで加速度計をすでに使用しています。
- 加速度計ベースのハンドジェスチャ制御ロボット
- Arduinoベースの車両事故警報システム
- Arduinoを使用した地震検知器アラーム