20130804 osc京都 raspberry piに何かつないで遊ぼう

31
Raspberry Pi何かつないで遊ぼう オープンソースカンファレンス関西@京都 2013 Yasuhiro ISHII

Upload: yasuhiro-ishii

Post on 11-Jun-2015

7.164 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

Raspberry Piに何かつないで遊ぼう

オープンソースカンファレンス関西@京都 2013Yasuhiro ISHII

Page 2: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

自己紹介•石井 康寛(Yasuhiro ISHII)•組み込み業界でソフト開発してます•出身 : 三重県度会郡度会町•趣味 : 電子工作、ソフト開発、海外旅行、などなど• Twitter : yishii• Facebook : • http://facebook.com/ishiiyasu•ブログ : 日曜エレクトロニクス(日エレ)• http://projectc3.seesaa.net/

Page 3: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

RPiと外部機器を繋ぐ

• USBポートに接続する

•ピンヘッダに接続する

RPiと外部機器とを接続方法の内、お手軽なものとして、以下の2つが考えられます。

Page 4: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

USBでの接続・USB-WiFi/3Gでネット接続・USB-BTアダプタでBT機器接続・USB WebCamでライブ配信・USB センサー機器でセンシング等

既製or自作USB機器(ArduinoやPICマイコン等で作成出来る)との接続は簡単です。

Page 5: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

ピンヘッダでの接続ピンヘッダとは?

Page 6: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

RPiのピンヘッダ

R2.0のみ

Page 7: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

ピンヘッダのピン機能アサイン

I2C-1

I2C-0SPI

UART

GPIO_GENxはGPIO。赤枠ピンもGPIOとして使用可。

PWMI2S

電源専用ピン(制御に使用できない)

Page 8: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

GPIO• GPIO = General Purpose Input/Output(汎用入出力)

• LEDの点灯をしたり、スイッチの入力を読み取ったり出来る

Page 9: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

UART• Universal Asynchronous Receiver Transmitter

• 通常1対1の機器間通信に使用

• いわゆるRS-232C。

• USBシリアル変換チップ経由でPCからコンソール操作

• Arduinoと接続して連携

• UART接続タイプのGPSモジュールを接続

• シリアルサーボを接続

Page 10: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

SPI• Serial Peripheral Interface

• MISO、MOSI、SCLKに加え、接続対象デバイス数分のSSで接続

• 1対多で通信可能(通信相手数分、SS信号が必要)

RPi

有機EL

EEPROM

NFCデバイス

接続例

Page 11: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

I2C• Inter-Integrated Circuit

• 2本の信号線(SCL、SDA)で複数の機器と接続可能

• 1対多接続可能(I2Cバス上で、個々のデバイス毎がユニークな番号(スレーブアドレス)を持つ。

モータードライバモジュール電流・電圧測定

モジュール

LCD

RTC EEPROM

RPi

LCD モータードライバ RTC

スレーブアドレス0x10

スレーブアドレス0x11

スレーブアドレス0x12

I2CマスターI2C対応デバイスの例

Page 12: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

実際にRPiを使用して何か機器を作ってみよう!

▶ Raspberry Piでラジコンを作ってあそぼう

Page 13: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

ラジコンの構成

I2Cモータードライバ×2

I2Cバス

USB

無線

ワイヤレスキーボード

モーター×2

Page 14: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

準備物

タミヤ 楽しい工作シリーズ No.168ダブルギヤボックス (左右独立4速タイプ)882円 @Amazon

ストロベリー・リナックスI2Cモータードライバ・モジュール DRV8830@567円 × 2個http://strawberry-linux.com/catalog/items?code=12030

Page 15: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

準備物

タミヤ 楽しい工作シリーズ No.101トラックタイヤセット(36㎜径)TRUCK TIRE SET (36mm DIA.)Item No:70101 組立キット378円(本体価格360円)

タミヤ 楽しい工作シリーズ No.98ユニバーサルプレートセットUNIVERSAL PLATE SETItem No:70098 組立キット378円(本体価格360円)

Page 16: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

準備物

線材少しUSBモバイルバッテリー

タミヤ 楽しい工作シリーズ No.144ボールキャスター(2セット入)BALL CASTER (2pcs.)Item No:70144 組立キット378円(本体価格360円)

Page 17: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

モータードライバDRV8830(TI)

I2C制御 電源 2.75~6.8V 連続1A出力

秋月電子通商170円

ストロベリーリナックス567円

→今回はストロベリーリナックスのものを使用します

Page 18: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

接続概略図

RPiモータドライバ

モータドライバ

I2C1-SCL

I2C1-SDA

Page 19: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

USBコネクタ経由でバッテリーへ

USBケーブル経由でバッテリーへ

接続 実体配線図

VCCSCLSDA

GND

VCCSCLSDA

GND

Page 20: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

車体の作成

ハードは完成です

Page 21: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

ソフトの構成Linux inputsubsystem

(/dev/input/event0等)

ラジコンメインプログラム

キーイベント

I2Cデバドラ(/dev/i2c-1等)

モータードライバ制御コマンド

Page 22: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

I2Cを使用する準備• /etc/modules

• i2c-dev を記載

• /etc/modprobe.d/raspi-blacklist.conf

• blacklist i2c-bcm2708 をコメントアウト

Page 23: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

I2Cデバイスドライバのオープン

   int  fd;

   //  RPi  Rev1.0使用時は  /dev/i2c-­‐0    fd  =  open("/dev/i2c-­‐1",O_RDWR);

   if(fd  <  0){        printf("i2c  open  error\n");        return(-­‐1);    }

Page 24: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

メイン処理(キーイベント取得+モーターへの指令)while(1){        //  標準入力からイベント取り込み        read(0,&event,sizeof(event));        if(event.type  ==  EV_KEY  &&  event.value  !=  0){            switch(event.code){            case  KEY_UP:              //  左右モーターの前転              motor_l.control(MOTOR_POWER,DRV8830::MOTOR_FORWARD);              motor_r.control(MOTOR_POWER,DRV8830::MOTOR_FORWARD);                break;            case  KEY_DOWN:              //  左右モーターの後転                  motor_l.control(MOTOR_POWER,DRV8830::MOTOR_REVERSE);                  motor_r.control(MOTOR_POWER,DRV8830::MOTOR_REVERSE);                  break;

     《中略》          }}

Page 25: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

モータードライバ制御処理int  DRV8830::control(int  power,int  type){    unsigned  char  buff[2];

   //  制御対象デバイスのスレーブアドレスをセット    ioctl(i2c_fd,I2C_SLAVE,i2c_slaveaddr);

   //  コマンドを組み立ててデータ送出    buff[0]  =  0x00;    buff[1]  =  (unsigned  char)(power  <<  2)  |                        (unsigned  char)(type  &  0x03);        write(i2c_fd,buff,2);

Page 26: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

https://github.com/yishii/RaspberryPi_Radicon/ソースコード(github)

RPiでのビルド方法$ g++ drv8840.cpp radicon.cpp -o radicon

実行方法$ sudo ./radicon < /dev/input/event0

(event0がキーボードの場合)

実演

Page 27: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

太陽電池の充電状態をネットにアップする装置

I2C

USB3Gドングル

その他製作例1

Page 28: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

その他製作例2現在地のGoogleMapsやStreetViewを表示する装置

UART

地図データ

Page 29: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

ハードウェア制御用のライブラリの使用 1

• bcm2835ライブラリを使用する

• http://www.airspayce.com/mikem/bcm2835/

• Cや各種スクリプト言語(Ruby等)から呼び出し、容易に制御構築可能。

Page 30: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

• Arduino APIスタイルに慣れている方には、WiringPiもオススメ• https://projects.drogon.net/raspberry-pi/wiringpi/download-and-install/

pinMode (0, OUTPUT);

for (;;) { digitalWrite (0, 1); delay (500); digitalWrite (0, 0); delay (500); }

ハードウェア制御用のライブラリの使用 2

Page 31: 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう

ありがとうございました

ブログ : 日曜エレクトロニクス(日エレ)http://projectc3.seesaa.net/