2017年2月13日月曜日

Raspberry pi3 i2c経由でサーボを使う

Raspberry pi3からあらゆるモジュールをギュインギュイン
動かしたいですが,正直GPIOを制御するのはめんどくさそうです.
モータなどリアルタイム性が高いものは他のマイコンに任せるのが
いいと思いました.

そこでArduinoにサーボモータを接続し,i2c経由でアクセスしてみます.

こんな感じ.テストなのでごちゃごちゃです.



サーボは一般的なSG90です.
Rpi3 -> arduino
GPIO2 -> a4(SDA)
GPIO3 -> a5(SCL)
GND -> GND

arduino->SG90
Vcc -> Vcc
GND -> GND
Sig -> D4(サーボ1)
Sig -> D5(サーボ2)

Arduinoは3.3Vで起動しACアダプタから外部電源を取ります.
そうしなければサーボを動かした瞬間落ちます.

Arduino側プログラム
#include<Servo.h>
#include <Wire.h>

Servo servo_pan;
Servo servo_tilt;
byte recv_data[256];
byte addr = 8;// Slave ID #8
byte deg_pan = 0;
byte deg_tilt = 0;

void setup() {
    servo_pan.attach(4);
    servo_tilt.attach(5);
    Wire.begin(addr);
    Wire.onReceive(receiveEvent);
    Wire.onRequest(requestEvent);
    Serial.begin(115200);
}

void loop() {
    if(deg_pan>=0 && deg_pan<=180){servo_pan.write(deg_pan);}
    if(deg_tilt>=0 && deg_tilt<=180){servo_tilt.write(deg_tilt);}
    delay(1000);
}

void receiveEvent(int a){
  int i=0;
  //delay(100);
  while (Wire.available()) {
    recv_data[i] = Wire.read();
    Serial.print(recv_data[i],DEC);
    Serial.print(" ");
    i++;
  }
  if(i>0){Serial.println(' ');}
  if(i>1){
      if(recv_data[0] == 4){ deg_pan = recv_data[1]; }
      else if(recv_data[0] == 5){ deg_tilt = recv_data[1]; }
  }
}

void requestEvent() {
  Wire.write(addr);
}

一応シリアル通信でデバックできるようにしておきました.
マスタからはレジスタ(4or5),角度(0~180)を送ります.
マスタからの読み出しはi2cdetectコマンドで使用するので
アドレスを返すようにしておきます.

とりあえず動作確認
Rpi3でi2cを使えるようにする.
こちらを参考にライブラリをインストールしました.
以下コマンドで接続デバイスを確認します.
$ sudo i2cdetect -y 1
上記のArduinoプログラムでは0x08がスレーブアドレスです.
コマンドからは
$ sudo i2cset -y 1 0x08 0x04 "角度"
で操作できます.


接続まで確認しました.Arduinoを使用したのはATmega328と
クリスタル等数セットが余っていたので何かに利用できないかと思ったからです.
とりあえずブラウザからアクセスできるカメラマウントの製作を目指します.

Raspberry Pi3 WEBカメラでストリーミングしてみる

お久しぶりです.
今更ながらRaspberry pi3とWEBカメラを購入したので
動作確認をしました.Raspberry pi3のセットアップ等は
わかりやすいサイトが多々あるので割愛します.

WEBカメラは動作実績のある
LOGICOOL ウェブカム HD画質 120万画素 C270
を使用しました.



ちょっと大きいですがマイクもついているので
音声処理ソフトウェアも使えそうです.

ソフトウェアにはmjpg-streamerを使用しました.セットアップ等は
こちらのサイトを参考にさせて頂きました.というかまんまです.

できた動画がこちら


動作確認ができました.
しばらくは画像処理,音声処理等で遊びつつ
何を作るか考える予定です.

ちなみにこのカメラには第二関節?のところにおもりがついています.
サーボモータを取り付けるときは外した方がよさそうですね.