3DCG屋さんの活動記録

PROFILE ★★こんな人です

3DCGを活用した映像や没入体験コンテンツの制作をしています。テクノロジーの社会実装に興味があり。テクニカルディレクター。面白いこと新しいことにワクワクする気持ちに『素直』でいつづける。

ラベル Serial の投稿を表示しています。 すべての投稿を表示
ラベル Serial の投稿を表示しています。 すべての投稿を表示

2017年12月31日日曜日

BlenderGame に ArduinoからSerialでボタン入力! その2


pyserial  inWaiting() でデータ受信の確認してる
https://www.youtube.com/watch?v=k2prOyRfimg&t=168
受信バッファとは http://www.7key.jp/nw/tcpip/tcp/window.html

pyseialのオプオプション(Serialオブジェクトのメソッド)
https://github.com/whosaysni/pyserial-doc-ja
http://pythonjp.osdn.jp/contrib/pySerial/README_JP.txt

とりま、Arduinoのボタン押してる間だけ動く、システム作成
Arduino
Blender Python
でそれぞれ設定


ちなみに、Arduinoでpyserialの送信で改行したいとき
必要な "\n" のバックスラッシュ。
Macでは 『option + ¥』 で 入力できる!


で、なぜかボタンを離しても一定時間信号受信してる。
シリアルモニターを同時起動すると、離した時に信号切れる・・・
おそらく、改行込みで送信した文字列が、受信バッファに溜まって
フレームレートの異なる環境(ArnordoとBlender)でずれる。



=========
Arduino
=========

===================
Blender python (for BGE)
===================



================================
★スイッチ離したら重力で落下
 motionにz 0.2 を追加。
 おさるの右端タブでStatic を Rigidに変更
Bulled(物理演算)参考サイト

★GameSatrtのショートカット  キーボードのP
ショートカットまとめサイト


★Python使ってScaleの変動Logic


オブジェクトのScaleをPythonで変化させるのは
cont.owner.localScale.x
もしくは
cont.owner.localScale=[Ax,Ay,Az]

================================



えーと色々と書きましたが、まとめます。

試行錯誤の結果・・・

Arduinoのボタンを押している間だけBlenderで処理を実行
※ボタンOffが遅延することなく

ができました!!!!!!!

ArduinoとBlenderPythonの内容は以下の通り。

=========
Arduino
=========
上記のスケッチでOk

===================
Blender python (for BGE)
===================





 
Arduinoのボタンを押している間だけ、処理実行。
処理:回転&スケール3倍
重力適用しているので、処理終わると下に落ちる





2017年12月25日月曜日

BlenderGame に ArduinoからSerialでボタン入力! その1


前回から時間が経ったので、まずは復習&確認から


⑴まず、ArduinoでボタンのONOFFチェック(Lチカ=LEDチカチカテスト)
  ・・・サンプルスケッチからテスト。ok。なんて基礎からするんだと、悲しいw
     ※参考




⑵次に、Blenderでpyserialがimportできるかチェック。
  ・・・lenderでpySerialが使える設定が完了
     



⑶次に、Blenderでpython使ったlogicの復習
   ・・・sensor Always,  controller Python,  actuator  Logic
                  実にシンプル





⑷上記の基礎の復習を終えて、ここからが今回の本題!
 Arduinoのボタン入力をSerialに送り、Blenderでpyserialから取得、Cubeを回す

まずは、Arduino、ボタン押したらserial出力するスケッチ↓


//Arduinoでボタン押すとシリアルそうしん &LEDテントウ


const int buttonPin = 2;
const int ledPin = 13;
int buttonState = 0;

void setup(){
  pinMode(buttonPin,INPUT);
  pinMode(ledPin,OUTPUT);
  Serial.begin(9600);
}


void loop(){
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH){
    Serial.write("1");
    digitalWrite(ledPin,HIGH);
  }else{
  
    digitalWrite(ledPin,LOW);
  }
  delay(30);
  
}



次に、Blender python で serial通信を受信してfor文を実行するやつ

が、うまくいかず・・・

その前にまずは、pythonの関数を実行するテスト

Aキーを押してる間だけおサルが回転するLogic
のはずが、なぜか回転が止まらない
printはちゃんと押してる間だけ出力されてる。
理由は分からず、、、調べときます!

ちなみにPythonは作成したあと画面下パネルのTextから保存して、読み込んでます。
あと関数は()をつけないとだめ!



ちなみにこちらがpyserial with Blenderの参考



以上、続きは今度。

・Pyserialのreadを含む関数、を呼び出すPython作成










2017年11月4日土曜日

ArduinoとBlenderGameをSerialでリアルタイム通信 その3[完結]


MacのPythonを3にしてpyserialを追加する!


というわけで、Python3にする方法はこちら参考!

まず、HomeBrewをインストール
ターミナルで以下を実行

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

以下の表示で完了。ちょっと時間かかった (5分?)

==> Installation successful!

==> Homebrew has enabled anonymous aggregate user behaviour analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics.html

==> Next steps:
- Run `brew help` to get started
- Further documentation: 

    https://docs.brew.sh



次にPython3
ターミナルで以下を実行

brew install python3

と、ここでDLは完了したけど
インストールで問題発生&エラーで終了。(5分?)

どうやらXcodeのコマンドラインツールのインストールが必要なようでした。
つまり、ターミナルで以下をじっこう

xcode-select --install

以下の表示で完了。(1分?)

xcode-select: note: install requested for command line developer tools


そして、再度 python3のインストールコマンド実行。
brew install python3

以下の表示で完了。(4分)


Pip, setuptools, and wheel have been installed. To update them
  pip3 install --upgrade pip setuptools wheel

You can install Python packages with
  pip3 install <package>

They will install into the site-package directory
  /usr/local/lib/python3.6/site-packages

See: https://docs.brew.sh/Homebrew-and-Python.html
==> Summary
🍺  /usr/local/Cellar/python3/3.6.3: 7,973 files, 111.1MB, built in 3 minutes 57 seconds


はい!python3インストール完了!!




あとは、前回にやったpip3からのpyserialインストールをやるだけ。
参考こちら。

以下、備忘録・・・

brew link --overwrite python3

ターミナルでpython3実行するときは python3

ここで、pythonのモジュールを確認!★★★★


python3 -c "help('modules')"

これでpipや pyserialがあればオK

私の場合、pipはあったがpyserialはなかった。。なぜ??
というわけで以下を実行★★★★


python3 -m pip install -U pyserial


あ、入った!
Blenderで、上記コマンド実行後に表示されたPathをsysで読み込んだらimport serial通った!

・・・が結局うまくいかず!!


というわけで、力技にします。。。
フォルダのファイルをコピペで
MacPythonのpyserial →  BlenderPythonに丸々コピー

でMacのフォルダ構造がいまいちわからんかったけど、ようやく判明!

以下が、MacのPython保存場所
ここの奥底のsite-packageのpyserial(serialフォルダ)を丸々コピー


そして、BlenderのPython保存場所
ここの奥底のsite-packageにpyserial(serialフォルダ)を丸々ペースト

以上!

そして Blenderでimport serial すると・・・・

問題なく通った!!!

あとはその1のプロジェクトファイるをそのまま実行したら成功!
長かった・・・眠い。。。

ちなみに、これでもエラーでBlenderが泊まるときは以下の点を確認

・Arduinoが接続されているか
・Arduinoのポート名が正しいか
・Arduinoのシリアルがbusyではないか(シリアルモニターは閉じる!)

など

あー疲れた、けどこれでようやくいろいr試せる^^

ArduinoとBlenderGameをSerialでリアルタイム通信 その2


前回のその1
pyserialのインストール不具合で失敗しました。。

その後もなかなかうまくいかなかったけど、
ようやくうまく言ったので、まとめマス!!!

タイトルは
ArduinoとBlenderGameをSerial通信、ですが

厳密には

Blenderでpyserialを使えるようにする @Mac、です

そもそも、つまづいた部分を、順を追って確認。
1)  Pythonでシリアル通信するには、pyserilのアドオン追加。
2)  Blenderにpyserial追加する方法がわからないので、MacのPythonにpyserial追加。
  ※方法の詳細はあとで説明
3)  BlenderのPythonで、Macに入れたpyserialのpathを追加 ←うまくいかない!><;


というわけで、色々試して次の通りしたらうまく言った。

上記の(1)から順に説明します。
Macのターミナルで以下を実行



easy_install pip

sudo pip3 install pyserial


これでMacのPythonにpyserialが追加されました。
さてどこに保存されているか、そのPathは?



上記コマンドを実行した後に表示されたpath!
…と思っていたら違った(;;)

本当は


python

import serial

serial

<module 'serial' from '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/serial/__init__.pyc'>


で実行して、最後の青塗りの2行に注目!!
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

この部分が有効なpyseiralのPath!
これに気づくのに時間かかった〜。。。


というわけで、BlenderのPython consoleでpyserialのpath追加!

>>>imoprt sys
>>>sys.path.append("/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages")




はい!
無事追加されました!


というわけで、Arduinoとのシリアル通信してみた。

・・・が、うまくいかない!?




やっぱり、そうでしたか・・・

[Python version]
Mac     2.7
Blender 3.5

import sys
sys.version

で確認できます。

というわけで・・・・・

MacのPythonを3にする方法は次回!





2017年11月2日木曜日

ArduinoとBlenderGameをSerialでリアルタイム通信 その1


iPhone -> OSC(iPhoneアプリ) ->   Blender(PC) の通信は成功。


iPhoneではなく
物理インターフェースと Blenderを接続するのにSerial
で試す。

ここで、以前やって見た
Arduino ->  Serial -> Blender の記事はこちら(2016年4月)
ちなみに、前回はArduinoの入力インターフェースでBlender制御。
今回やってみるのは逆の流れで、
Blender内の変化をArduinoにつなげたLEDに反映してみる。


ちなみに、OSCの方が他の機器との汎用性ありそうなので、
OSC on Arduino をやりたいが、イーサネットシールドが必要…持ってない。。

どうせPCと合わせてArduino使うんだからPCのネットワーク機能使えばいいじゃん!
つまりArduinoの信号をProcessingでOSCに変換して実現したい…この辺かな


Arduino -> OSC (Processing) ->  Blender 
はまた今度!

今回は

Blender ->  Serial ->  Arduino LED

の確認。
ちなみに以前の記事で

Arduino ->  Serial ->  Blender

も実現してるのでどうぞ。
特にBlender内のPythonで pyserial をimportするところでつまづいたので
参考にすると良いかもです。

なお今回は、基本的にこちらを参照しました!

細かいトラブルシューティング


◆MacでシリアルポートがCOMじゃない!
→/dev/cu.usbmodem1411
 Arduinoのツールか、macのターミナルから確認できる
 
◆BlenderGameのロジックでpythonを使用する
その場で作るpython か pythonファイルを参照

◆Blender 2.79 はPython3.5!
→MacにPython3.5インストール


.
.
.

BlenderのPythonで serial が読み込まれない
続きはまた





続きはその2で!
BlenderのPythonにpyserialを追加する方法もアルよ。




Arduino Blender & Maya Serial通信テスト(Facebook内容転載)


Facebook記事を転載(2016年4月時点の情報です)

Arduino  ->  Serial  ->   Blender
========================

▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
          for Mac
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️

【Mac で pyserial】 ★★★
pyserialが動かんわ!!!!かれこれ1ヶ月近くになる
import serialはOKでも、その次serial.Serialが通らない。。
Arduinoにシリアル通信、、できない。
というわけで、win64では諦め、
とりあえずmacで。Blender + pyserialを確立したい
とりあえずmacのpython+Blender環境を刷新。
Blender 2.77に。
python3.5インストール

macにはpython2.7が標準インストールされてるので
それ以外をアンインストール。
●アプリケーションから削除
●アプリケーションに表示のないpythonを削除
  移動/フォルダへ移動 から以下のパスを
/Library/Frameworks/Python.framework/Versions/
 例えば3.4のフォルダを削除して3.5を入れるとかするときなど

pythonの最新版3.51を公式サイトからインストール

pipのインストール
macのターミナルから
easy_install pip
sudo pip3 install pyserial
ここで結果pyserialのインストール先が表示されるので確認
pyserial in /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages
④Blender起動
sys.version
sys.prefix
sys.path.append("ここにserialのパスを入れる")



▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️

ようやく安定して使えるようになってきた(^^)

安定の使用手順

①Arduino電源再起動(USB抜き差し)
②Blender再起動
③Scriptで一度RunScriptする (シリアルポートの認識?)
  ここでArduinoが反応してチカチカします
④Blender再生→OK



▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️

Blender でオブジェクトの位置を変数化、
それをpyserialでシリアル通信する。
→Blenderのオブジェクト位置からLEDの明るさ制御


ser.write(b"値.") の値に変数を入れるのに苦労。。。encodeで解決。理由はまだわかりません!!!わら
あと、若干LEDがチカチカするのが気になるけどまた今度

====以下=======================================
import bpy
import serial
import math
ser = serial.Serial("dev/cu.usbmodem1421",9600)

def my_handler(scene):
height = bpy.data.objects['Cube'].location.z
val = math.floor(height)
outPut = str(val)+"." #ArduinoSerialInput needs "." at last
ser.write(outPut.encode())

bpy.app.handlers.frame_change_post.append(my_handler) # Tells blender to load "my_handler" on every new frame

=============================================


<特に pyserial 関係のトラブルシューティング>


blender でpyserialが読み込まれない。。。
原因はBlenderコンソールという、
Blender専用のpythonエディタ上で作業していたから。Mayaも一緒かな?
というわけで、コンソールからフォルダを指定してModuleを読み込めば使えるのか?というわけでエラー時の対処法まとめ


pythonの保存場所は次のコマンドで
import sys
sys.prefix



「Blender のpython」でpip及びpyserialをインストール(ファイルをコピペ?)しなきゃでした ><



▪️
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
       for Windows

▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️

【Win で pyserial】 ★★★
・・・pyserialがどーしても使えない(インストールできない)ので
思い切ってpythonのインストールをはじめから。

①完全にアンインストール (最後にフォルダ残りかすも削除)
②新規インストール
ここまでで3分
③pip install pyserial をcmdで実行。OK
    しかしpipのアップグレードしてとのことで言われるままにアップデートを実行。が、その後再度pyserialインストールしようとするが更新されていない感じ。もしかしたら、さきにアップグレードするべき?

=========================
てか、mayaでもpyserialつかえた!!キタコレーー!!!!
★★★★★★★★(´艸`*)★★★★★★★★★★


④site-packagesのsrialフォルダをコピー
⑤mayaのpythonフォルダのLib/site-packagesフォルダがあるので貼る
※ちなみにmayaでsys.prefixでpythonフォルダしらべる
⑥あとはArduinoをインストールして接続(ポート認識のため)
⑥あとはblenderのときとおなじ

import serial
serial.Serial("COM3",9600)

今までは余計なことたくさんしててファイルがおかしくなってたぽい。。クリーンインストールしたら何も問題なさそう(^o^)/

=============================
Windowsでpipのエラー出たとき、
cmdで
python -m pip install

これで一旦反応見る。
必要ならpipのアップグレード。

その後
python -m pip install pyserial
==============================


Mayaでオブジェクトの位置からLEDのPWM制御は完成!
あとはpython APIで処理速度を高めるとこまでマスターしたい。


以下プログラム
◆Arduino
char input[4]; //受信した文字列の格納
int i = 0; //文字数のカウンタ
int val = 0; //受信した数値(変換後)
int ledVal = 0; //LEDにPWM出力する値

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(3,OUTPUT);
pinMode(13,OUTPUT);
}

// シリアル通信で受信したデータを数値に変換
int serialNumVal(){
// データ受信した場合の処理
if (Serial.available()) {
input[i] = Serial.read();
// 文字数が3以上 or 末尾文字がある場合の処理
if (i > 2 || input[i] == '.') {
input[i] = '\0'; // 末尾に終端文字の挿入
val = atoi(input); // 文字列を数値に変換
Serial.write(input); // 文字列を送信
Serial.write("\n");
i = 0; // カウンタの初期化
}
else { i++; }
}
return val;
}

void loop() {
ledVal = serialNumVal();
// A3Pinに通電
analogWrite(3,ledVal);
// 基盤のD13PinLEDを点灯
if(ledVal>100){digitalWrite(13,HIGH);}
else{digitalWrite(13,LOW);}
}

◆Python for maya
##========================================================
## maya で ballオブジェクトのYと連動してシリアル送信 フ
##========================================================

# まずはArduinoにポート接続
#import serial
#ser=serial.Serial('COM3', 9600)
#ser.close() #最後に閉じる

# 次にMayaからシリアル送信する
import maya.cmds as mc

def com():
pos = mc.getAttr("ball.translateY")
ledCheck = str(int(pos))+"."
ser.write(ledCheck.encode())

# HUDでイベント察知して更新
mc.headsUpDisplay( 'ArduinoRunning1', s=1, b=5,lw=100,dw=200, l='AraduinoRunninavga',ev="timeChanged",command="com()") #HUD作成
#mc.headsUpDisplay( 'ArduinoRunning1', s=1, b=5,lw=100,dw=200, l='AraduinoRunninavga',ev="timeChanged",command="com()",e=True) #HUD作成
#mc.headsUpDisplay( 'ArduinoRunning1',rem=True) # 最後に削除

===================
pyserial格納場所

パソコン👉 Cドライブ/python27/Lib/site-packages/serial
MAYA👉 C/program file/auto desk/maya2016/python/Lib/site-packages

コマンドラインでインストールしたあとmayaにフォルダをコピペすると良い?