nekolabの資料庫に、9軸センサを使った姿勢制御のページを作りました。
https://sites.google.com/site/nekolabwiki/electronic/posturecontroll
いままでブログにちょこちょこ載せてきた内容をまとめたものです。
2014/06/27
2014/06/20
RasPiで9軸センサーを動かす
Raspberry PiでI2Cを使って9軸センサー(MPU9150)を動かしてみました。
今後も使う可能性あるので自分メモです。
RasPiでI2Cを使うのに参考にした(丸パクリしたともいう)サイトは次のサイトです。
http://www.instructables.com/id/Raspberry-Pi-I2C-Python/all/?lang=ja
OS :Raspbian
センサ:9 Degrees of Freedom Breakout - MPU-9150
/etc/modprobe.d/raspi-blacklist.conf にある設定ファイルを変えると有効化できます。
ファイルをエディタで開きます。
blacklist i2c-bcm2708をコメントアウトします。
これでI2Cが有効化されました。
の末尾に、i2c-devを追加します。
終わったら再起動します。
再起動が終わったら、インストールしたソフトがちゃんと動いてるか確かめます。
こんな感じの表示が出れば大丈夫です。
i2cdetectコマンドの引数は、RasPiのタイプ(?)によって違うのを用いるみたいです。
参考サイトでは引数を0にしていますが、今回用いたRasPi、Model.B(メモリが512MBのほう)では、引数を1にするとうまくいきました。
RasPiの端子配列は(http://elinux.org/RPi_Low-level_peripherals)を参考に。
9軸センサの端子は、センサボードごとに調べてください。
I2Cなので、SDAとSCLにプルアップ抵抗は必要です。
センサボードに搭載されてなければ、自分で抵抗を接続してください。
だいたいこんな感じです。
センサのI2Cスレーブアドレスは用いるセンサのマニュアルを参照してください。
このプログラムには例外を組み込んでないので通信が失敗したらクラッシュします。注意。
大体こんな感じでI2C通信ができました。
Pythonだと楽ですね。
今回はPythonのコードを書いてI2Cを行いましたが、シェル上からコマンドでI2Cすることも出来るようです。C言語でも同じようなコードが書けるようなので、知りたい方はグーグル先生へ。
では。
今後も使う可能性あるので自分メモです。
RasPiでI2Cを使うのに参考にした
http://www.instructables.com/id/Raspberry-Pi-I2C-Python/all/?lang=ja
環境
実機 :Raspberry Pi Model.BOS :Raspbian
センサ:9 Degrees of Freedom Breakout - MPU-9150
1.RasPiのI2Cを有効化する。
RasPiのI2Cはなぜかデフォルトでは使えません。/etc/modprobe.d/raspi-blacklist.conf にある設定ファイルを変えると有効化できます。
$ sudo vi /etc/modprobe.d/raspi-blacklist.conf
ファイルをエディタで開きます。
blacklist spi-bcm2708 blacklist i2c-bcm2708
blacklist i2c-bcm2708をコメントアウトします。
blacklist spi-bcm2708 #blacklist i2c-bcm2708
これでI2Cが有効化されました。
2.カーネルのI2Cモジュールを有効化する。
/etc/modulesを編集して、I2Cモジュールを読み込むようにします。snd-bcm2835
の末尾に、i2c-devを追加します。
snd-bcm2835 i2c-dev
3.パッケージをインストールする。
apt-get updateを実行してから、i2c-toolsと、python-smbusをインストールします。$ sudo apt-get update $ sudo apt-get install i2c-tools $ sudo apt-get install python-smbus
終わったら再起動します。
$ sudo reboot
再起動が終わったら、インストールしたソフトがちゃんと動いてるか確かめます。
$ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
こんな感じの表示が出れば大丈夫です。
i2cdetectコマンドの引数は、RasPiのタイプ(?)によって違うのを用いるみたいです。
参考サイトでは引数を0にしていますが、今回用いたRasPi、Model.B(メモリが512MBのほう)では、引数を1にするとうまくいきました。
4.9軸センサを実際に接続してみる。
RasPiの外部端子と9軸センサを接続します。使うのは3.3V,GND,SDA,SCLのみです。RasPiの端子配列は(http://elinux.org/RPi_Low-level_peripherals)を参考に。
9軸センサの端子は、センサボードごとに調べてください。
I2Cなので、SDAとSCLにプルアップ抵抗は必要です。
センサボードに搭載されてなければ、自分で抵抗を接続してください。
5.Pythonで通信するコードを書く。
import smbus import time class Mpu9150: def write(self, register, data): bus.write_byte_data(self.address, register, value) return 0 def read(self, register): data = bus.read_byte_data(self.address, register) return data def __init__(self): self.bus = smbus.SMBus(1) self.address = 0x68 #ここにセンサ初期化用の処理 if __name__ == '__main__': mpu = Mpu9150() while True: #何らかの処理
だいたいこんな感じです。
センサのI2Cスレーブアドレスは用いるセンサのマニュアルを参照してください。
このプログラムには例外を組み込んでないので通信が失敗したらクラッシュします。注意。
大体こんな感じでI2C通信ができました。
Pythonだと楽ですね。
今回はPythonのコードを書いてI2Cを行いましたが、シェル上からコマンドでI2Cすることも出来るようです。C言語でも同じようなコードが書けるようなので、知りたい方はグーグル先生へ。
では。
Label:
Raspberry Pi,
プログラミング,
電子工作
2014/06/04
ATMega328Pをアセンブラで動かしてみた
タイトルまんまです。
僕はわりと最近マイコンを触り始めた勢ということもあり、アセンブラを触ったことがありません。
と、いうわけで書いた!
Lチカ!!!!
楽しい!!!!!!
アセンブラはめんどくさそうと思っていましたが、全くその通りでした。
でも楽しかったので良しとします!
次は条件分岐だ...
僕はわりと最近マイコンを触り始めた勢ということもあり、アセンブラを触ったことがありません。
と、いうわけで書いた!
.include "m328Pdef.inc" .def TEMP=R16 .org 0x0000 rjmp RESET RESET: ldi R16,LOW(RAMEND) out SPL,R16 ldi TEMP,0xFF out DDRB,TEMP MAIN: LED_ON: ldi TEMP,0b00000001 out PORTB,TEMP rcall wait05 LED_OFF: ldi TEMP,0b00000000 out PORTB,TEMP rcall wait05 rjmp MAIN wait05: ldi R18,5 wait052: rcall wait01 dec R18 brne wait052 ret wait01: ldi R19,40 wait012: rcall wait1m dec R19 brne wait012 ret wait1m: ldi R20,250 wait1m2: nop dec R20 brne wait1m2 ret
Lチカ!!!!
楽しい!!!!!!
アセンブラはめんどくさそうと思っていましたが、全くその通りでした。
でも楽しかったので良しとします!
次は条件分岐だ...
登録:
投稿 (Atom)
人気の投稿
-
【2014/10/12 記事更新】 前回の記事( http://nekolab.blogspot.jp/2013/05/arduino.html )で、加速度センサ(ADXL345)を動かしてみました。 今回は、センサから得た値の計算をして、センサの傾きを検出してみよ...
-
秋月に売ってるIR2302ゲートドライバを使ったNchFETフルブリッジモータドライバです。 FETは、IR社の IRFB4410PBF (100V 96A 250W)を使っています。 IR2302 は、ハーフブリッジ用のゲートドライバです。 Nchの...
-
エアシリンダーなどを駆動するとき、欠かせないのが電磁弁。 ロボコンでも使っているのをよく見かけます。 僕もロボコンでエアシリンダを使うことになったので回路を設計したのですが、それについて書きます。自分用メモの意味合いが強いので、あしからず。 電磁弁は ...
-
どうも、Nekosanです。 モタドラ回路製作記事2回目です。 前記事ではドライバ回路の概要を記載したので、回路設計に入っていきます。 たくさんの数式が出てくるので、注意です。 言っても、四則演算ですが。 ドライバ回路の、ハーフブリッジを抜...
-
忘れそうなので自分用メモ。 ラジコン飛行機などに使われる小型のブラシレスモータを動かす、ESC(アンプ)をマイコンで制御したかったので、やってみました。 用意したもの ・ブラシレスモータ A2208-KV1400 ブラシレスモーター http://www.rc-e...
-
部の顧問の先生から、こんなモジュールを頂きました。 加速度センサ(ADXL345)と方位センサ( HMC5883L )とジャイロセンサ( ITG-3200 )が一つの基板にまとめられたモジュールです。 ストロベリーリナックスで売られてました。 一個で一万円ぐらいし...
-
どーも、Nekosanです。 今年の高専ロボコンのルール発表されましたね。結構前ですが。 今年はなかなか難しい課題な気がします、例年に比べて、ですが。 まあそれはいいのです。あんまりそのことをブログに書いちゃうとメンバーに怒られそうなのでこれぐらいで。 ロボ...
-
どうも、Nekosanです。 今まで何回かモータドライバについての記事を書いてましたが、回路設計メモを兼ねて、ブログ記事にしながら、設計をしようかと思います。 という訳で、第一号記事です。 まずは作ろうとしているモタドラの概要から。 概要 ブートスト...
-
Raspberry PiでI2Cを使って9軸センサー(MPU9150)を動かしてみました。 今後も使う可能性あるので自分メモです。 RasPiでI2Cを使うのに参考にした (丸パクリしたともいう) サイトは次のサイトです。 http://www.instructables...
-
どーも、Nekosanです。 またもや学校が忙しかったり、部活が忙しかったり、資格の勉強が忙しかったり、眠かったり、鬱になってたりで間が空いてました。 まあ今後もこんな感じが続くかもです。 できるだけ続けて書くようにがんばります。 ここ最近、ロボコンで使うドライ...