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

8,928 views

Published on

Published in: Technology

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

  1. 1. Raspberry Piに 何かつないで遊ぼう オープンソースカンファレンス関西@京都 2013 Yasuhiro ISHII
  2. 2. 自己紹介 •石井 康寛(Yasuhiro ISHII) •組み込み業界でソフト開発してます •出身 : 三重県度会郡度会町 •趣味 : 電子工作、ソフト開発、海外旅 行、などなど •Twitter : yishii •Facebook : •http://facebook.com/ishiiyasu •ブログ : 日曜エレクトロニクス(日エレ) •http://projectc3.seesaa.net/
  3. 3. RPiと外部機器を繋ぐ •USBポートに接続する •ピンヘッダに接続する RPiと外部機器とを接続方法の内、お手軽 なものとして、以下の2つが考えられます。
  4. 4. USBでの接続 ・USB-WiFi/3Gでネット接続 ・USB-BTアダプタでBT機器接続 ・USB WebCamでライブ配信 ・USB センサー機器でセンシング 等 既製or自作USB機器(Arduinoや PICマイコン等で作成出来る)との 接続は簡単です。
  5. 5. ピンヘッダでの接続 ピンヘッダとは?
  6. 6. RPiのピンヘッダ R2.0のみ
  7. 7. ピンヘッダのピン機能アサイン I2C-1 I2C-0 SPI UART GPIO_GENxはGPIO。 赤枠ピンもGPIOとして 使用可。 PWM I2S 電源専用ピン (制御に使用できない)
  8. 8. GPIO •GPIO = General Purpose Input/ Output(汎用入出力) •LEDの点灯をしたり、スイッチの入力 を読み取ったり出来る
  9. 9. UART • Universal Asynchronous Receiver Transmitter • 通常1対1の機器間通信に使用 • いわゆるRS-232C。 • USBシリアル変換チップ経由でPCからコンソール操作 • Arduinoと接続して連携 • UART接続タイプのGPSモジュールを接続 • シリアルサーボを接続
  10. 10. SPI • Serial Peripheral Interface • MISO、MOSI、SCLKに加え、接続対象デバイス数分のSSで接続 • 1対多で通信可能(通信相手数分、SS信号が必要) RPi 有機EL EEPROM NFCデバイス 接続例
  11. 11. I2C • Inter-Integrated Circuit • 2本の信号線(SCL、SDA)で複数の機器と接続可能 • 1対多接続可能(I2Cバス上で、個々のデバイス毎がユニークな番号(ス レーブアドレス)を持つ。 モータードライバ モジュール 電流・電圧測定 モジュール LCD RTC EEPROM RPi LCD モーター ドライバ RTC スレーブ アドレス 0x10 スレーブ アドレス 0x11 スレーブ アドレス 0x12 I2C マスターI2C対応デバイスの例
  12. 12. 実際にRPiを使用して 何か機器を作ってみよう! ▶ Raspberry Piでラジコンを作ってあそぼう
  13. 13. ラジコンの構成 I2Cモータードライバ 2 I2Cバス USB 無線 ワイヤレスキーボード モーター 2
  14. 14. 準備物 タミヤ 楽しい工作シリーズ No.168 ダブルギヤボックス (左右独立4速タイプ) 882円 @Amazon ストロベリー・リナックス I2Cモータードライバ・モジュール DRV8830 @567円 2個 http://strawberry-linux.com/catalog/items? code=12030
  15. 15. 準備物 タミヤ 楽しい工作シリーズ No.101 トラックタイヤセット(36㎜径) TRUCK TIRE SET (36mm DIA.) Item No:70101 組立キット 378円(本体価格360円) タミヤ 楽しい工作シリーズ No.98 ユニバーサルプレートセット UNIVERSAL PLATE SET Item No:70098 組立キット 378円(本体価格360円)
  16. 16. 準備物 線材少し USBモバイル バッテリー タミヤ 楽しい工作シリーズ No.144 ボールキャスター(2セット入) BALL CASTER (2pcs.) Item No:70144 組立キット 378円(本体価格360円)
  17. 17. モータードライバ DRV8830(TI) I2C制御 電源 2.75∼6.8V 連続1A出力 秋月電子通商 170円 ストロベリーリナックス 567円 →今回はストロベリーリナックスのものを使用します
  18. 18. 接続概略図 RPi モータ ドライバ モータ ドライバ I2C1-SCL I2C1-SDA
  19. 19. ・ ・ USBコネクタ 経由でバッテリーへ USBケーブル 経由でバッテリーへ 接続 実体配線図 VCC SCL SDA GND VCC SCL SDA GND
  20. 20. 車体の作成 ハードは完成です
  21. 21. ソフトの構成 Linux input subsystem (/dev/input/event0等) ラジコン メインプログラム キーイベント I2Cデバドラ (/dev/i2c-1等) モータードライバ 制御コマンド
  22. 22. I2Cを使用する準備 •/etc/modules •i2c-dev を記載 •/etc/modprobe.d/raspi-blacklist.conf •blacklist i2c-bcm2708 をコメントアウ ト
  23. 23. I2Cデバイスドライバのオープン    int  fd;    //  RPi  Rev1.0使用時は  /dev/i2c-­‐0    fd  =  open("/dev/i2c-­‐1",O_RDWR);    if(fd  <  0){        printf("i2c  open  errorn");        return(-­‐1);    }
  24. 24. メイン処理 (キーイベント取得+モーターへの指令) 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;      《中略》          } }
  25. 25. モータードライバ制御処理 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);
  26. 26. https://github.com/yishii/RaspberryPi_Radicon/ ソースコード(github) RPiでのビルド方法 $ g++ drv8840.cpp radicon.cpp -o radicon 実行方法 $ sudo ./radicon < /dev/input/event0 (event0がキーボードの場合) 実演
  27. 27. 太陽電池の充電状態をネットにアップする装置 I2C USB3Gドングル その他製作例1
  28. 28. その他製作例2 現在地の GoogleMapsや StreetViewを表示す る装置 UART 地 図 デ ー タ
  29. 29. ハードウェア制御用の ライブラリの使用 1 •bcm2835ライブラリを使用する •http://www.airspayce.com/mikem/ bcm2835/ •Cや各種スクリプト言語(Ruby等)から 呼び出し、容易に制御構築可能。
  30. 30. •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
  31. 31. ありがとうございました ブログ : 日曜エレクトロニクス(日エレ) http://projectc3.seesaa.net/

×