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

2017年5月7日日曜日

[Pduino]ロータリーエンコーダーをPuredataで使うヒント

実は難しいのです!
PuredataのフォーラムでもC++やPyhon使ったほうが簡単ですと回答があります。
難しいと言われるとPuredataだけでどうにかしたくなります。

やってみました。
こんな感じで割とサクサク動きます。
※配線の誤記載があったので修正しました。
また、回転方向の誤検出のパターンについて付録につけました。






使ってみたロータリーエンコーダーはこちらです。
安い。
一般的なACBピン配列でプッシュすればモーメンタリーのボタンにもなるものです。

ピン配列は入手したものにより異なるのでデータシートを要確認ですが、
上記の物はこちら。


繋ぎ方と回路図的なものはこちら。



Arduinoとの繋ぎ方もテンプレ的な繋ぎ方です。
なお、デジタルピンは
A・・・53ピン
B・・・52ピン
で繋いでいますが、お好みで。

rotary_encorder_testV1.zip
同じ環境を再現しないと動作しないかと思いますが、使ったパッチをアップロードしました。
[arduino]オブジェクトは必須です。
一番最初にArduinoが出力したピンNo.を拾って右回転・左回転を検出するので、
残念ながら若干回転方向を間違える事がありますが、シビアなリアルタイム操作が不要な場合はまぁ支障無いかと思います。
Arduinoが出力した値を適宜削る方法には[route]オブジェクトがありますが、
今回は[unpack]を使用しました。こちらのほうが簡単です。
ロータリーエンコーダーを1個しか使わないなら[unpack]のほうが早いですが、
多数の可変抵抗等を繋ぐ際は[route]で出力を綺麗にデータ抽出するほうがいいです。

[moses 52]はたまにピンNo.が0や1といった予期しない値を出力したときがあったので削除するために保険で入れています。

【回転方向の検出について】
[t b b]
|
[timer]
|
[ float  ]
|
[moses 50]

ロータリーエンコーダーを回すと高速で多数の出力が始まるのですが、一番最初の値だけが欲しいので、
Bang版threshold~的な動作をするフローを作りました。
すなわち、bangとtimerを使って出力の間隔時間が短い時(ここではmoses 50 の50ms)
は次のspigotで出力を遮断します。


*汎用的にすぐ使えるようパッチを作りました。
rotary_encorder_forPduinoV1.zip
上記のように繋いでピン情報を送るとすぐ使えます。
ロータリーエンコーダーのAピンをArduinoの若番(例えば22)
ロータリーエンコーダーのAピンをArduinoの老番(例えば23)
に繋いで下さい。




2017年4月25日火曜日

[Pduino]タップテンポとテンポに合わせてLED点滅

[Pduino]エフェクトOnOffを物理スイッチで制御&LEDの点灯・消灯
こちらの記事で紹介した、
上記の物理的な回路ですが、
少し工夫を加えれば、
モーメンタリースイッチのタップでテンポ計測し、
テンポに合わせてLEDを点滅させることができます。
エフェクターでいうとタップテンポのディレイ等に応用できます。
※モーメンタリスイッチはクリック感の少ない、軽快に押せるものがオススメです。
深くしっかり押さないといけないタイプだと苦しいです。


タップテンポの計測方法はこちらのフォーラムを参考にしました。

Puredata側はこのようなパッチになっています。
一番左のフローは急造で作ったディレイ回路なのでスルーするとして、
ポイントは右側の[arduino]に繋がるフローです。

左上の[receive Tempo]から[arduino]に繋がるまでの回路は、
LEDをテンポに合わせて点滅させる回路です。
[metro]で点滅させますが、消灯処理が必要になるため、
[delay 10]
|
[digital 13 0(
で消灯させます。
また、[metro]の手前にBangボタンがあるのは、
 テンポが変更した際にLED点滅の挙動がおかしくなるため、
テンポの数字が変更した際に合わせて[metro]をリセットするようBangしています。

[arduino]から下のフローはモーメンタリスイッチのタップでテンポを検出する回路です。
[change]の直後はタップする度に
押した瞬間:1
離した瞬間:0
を吐き出すため、
[moses 1]で1だけを抽出し[trigger b b]に送ります。
後のタップテンポの仕組みはPuredata Forumの通りです。
ここで得たテンポをそのままLED点滅の回路とディレイタイムの回路へ送れば完成です。

※まだ、[trigger]の使い方が自分はヘタクソです。理解が足りない、精進せねば。


[Pduino]エフェクトOnOffを物理スイッチで制御&LEDの点灯・消灯

[Pduino]Lチカと応用(エフェクトOnOffのLED点灯)
[Pduino]物理スイッチでのエフェクトOnOff

まとめとして書きますが、上記2つの記事の内容を合わせれば、
エフェクトのOnOffを物理スイッチで切り替え、更にその状態をLEDで点灯・消灯して表現できます。


右側がエフェクトOnOffの回路で、左側がLED点灯・消灯の回路になります。

[Puredata]スライダーのliner増減をlog増減へ変換する[Pduinoでも可]

今回の記事はPuredataのスライダーの増減量をlinからlogに似非変換するTipsです。


上の写真のとおり、スライダーは増減量をlinとlogで選べます。
スライダーのプロパティから変更できますが、
以下の場合では使いづらい場合があります。

・物理的なポテンションメーターは付けてしまえばlogとlinを変更できないが、
エフェクトに合わせてlinとlogを切り替えたい場合

・Puredata内のスライダーについてもスライダー自体は共用にして
複数のエフェクトに合わせてlinとlogを切り替えたい場合

さてこの場合、どう対処するかですが、
ひとまず物理的なポテンションメーター、Puredata内のスライダーを問わず、
Bカーブ(lin)を使ってください。
ポテンションメーター等の変化の範囲が
0≦x≦1
0≦y≦1
の範囲限定になりますが、
以下のカーブのようにそれっぽくではありますが簡易に変換できます。

Bカーブ(liner)
Y=X

Aカーブ
Y=X^3

Dカーブ
Y=X^2

Cカーブ
Y=1 - (X-1)^2


これで可変抵抗を買うときに困ったら、ひとまずBカーブ(liner)で対応できます。

※ただ、Puredataの実際のlogの増減のカーブは
Dカーブよりももっときつい増減な気がするので改良が必要かも。

[Pduino]物理スイッチでのエフェクトOnOff

※完全に自己流のため、他に上手いやり方がありましたら是非ご連絡ください。

物理スイッチには色々種類がありますが、今回は単純に1回路をOnOffするスイッチで
エフェクターの機能を再現できるか考えてみました。


スイッチには
オルタネート(押すたびにOn・OFFが入れ替わる)
モーメンタリ(押している間だけOn。離すとOff。)
の2種類があります。
それぞれPuredataでエフェクトのOnOffをする際には工夫が必要です。

今回は

5V

スイッチ

アナログインプットA0(pinMode 54)

で接続してテストしました。
Puredata側のエフェクト回路の部分はいつもの簡易ディストーションに自作のspigot~です。


【オルタネートスイッチの場合】

フットスイッチやスライドスイッチ、トグルスイッチで入手が容易です。
押しボタンタイプもまぁ、無くはないです。

さて、考えた回路はこちらです。
まず、いつも通りポートを
[open 3(
で開けまして、
[pinMode 54 analog(
でアナログ入力 A0(arduino Megaの場合)を使えるようにします。

この状態でスイッチをOnOffすると
[arduino]
からメッセージが「常に」出力されます。
試しにprintでコンソールへ出力してみます。

Offの場合、
print:analog 0 0.2前後


Onの場合、
print:analog 0 0.9前後

analog は アナログ入力
0 は 端子番号
その後の数字は物理的な回路の状態により0~1までの間で変化・受信した値です。

※注意すべき点は、
端子を使えるようにするときは、すべての端子から数えた順番の
[pinMode 54 analog(
だったのに対し、
出力されるメッセージでは
analog 0 0.99
とアナログ端子内での順番に代わる点です。
上手く出力できない場合は見直してみてください。


必要な値は最後の0~1の値なので、他の不要な情報は
[route]
で削除します。
(入力された値にrouteで指定した文字があれば削除して左インレットから出力)
更に、値が常にフラフラ揺れるため、
>= 0.5
で値を1 or 0に置き換えて、EffectOnを制御するトグルボタンに送ります。
これでオルタネートスイッチの場合のエフェクトの切り替えはできます。

※もし、常に値がトグルボタンへ送られるのが気になる人は後述の
[change]
を使ってみてください。




【モーメンタリスイッチの場合】
押している間だけONになるスイッチです。
押しボタンタイプだと入手が容易ですが、
フットスイッチタイプは強度的なものもあり、
なかなか見つけづらそうではあります。

さて、モーメンタリースイッチの場合のPuredataの回路はこちら。
[>=5]
まではオルタネートスイッチと同じですが、
常にBangを打つが如く、フラフラ1 or 0の値がトグルボタンに向けて飛ぶため、
エフェクトOnOffの動作が不安定です。
このため、
[change]

[bang]
を間に挟みました。
これで動作が安定します。

※解説しますと、
[change]
は違う値が飛んでくるまでは、同じ値が飛んできても「何も出力しない」オブジェクトです。
違う値が飛んできて初めてその値を「1回だけ出力」します。

そしてこの後ろに
[bang]
を置きます。
エフェクトonのトグルボタンはbangが打たれる度にOnOffを切り替えするためです。

2017年4月24日月曜日

[Pduino]Lチカと応用(エフェクトOnOffのLED点灯)

この記事では定番のHello World!的なLチカを扱いますが、
それだけではつまらないので、実用的なエフェクトのOnOff用のLED点灯を考えてみます。


基本的なArduinoの接続と端子の指定方法
【Arduinoとの接続ポートを調べる】
arduinoオブジェクトにメッセージで
[devices(
を送ってください。
コンソール画面に接続されているポートの番号がでます。


【ポートを開く】

先ほど分かったポート番号を使います。
更にメッセージ
[open ポート番号( 
を送って下さい。
これでPuredataからArduinoを使う準備ができました。


【Arduino側で使う端子を指定する】
[pinMode 端子番号 output(
のメッセージを送ります。
上記は「端子番号」の「Output(アナログ出力)」を使うという意味です。




LチカでHello World!

物理的なつなぎ方の回路図は後程UPします。
物理的なつなぎ方は以下の通りです。
アナログ出力の13番端子

LED

抵抗

GND
の順に繋ぎます。
LEDを使う際は100~1kΩ程度なら何でもいいので必ず抵抗を入れてください。



メッセージで
[digital 13 $1(
と書いて、トグルボタンを接続します。
そしてメッセージをarduinoに接続します。
トグルスイッチはOnで「1」、Offで「0」を出力します。
$1は変数。トグルスイッチの1or0が入ります。
トグルスイッチを操作する度に [digital 13 $1( のメッセージがarduinoオブジェクトに飛んでいきます。
これで1のときに電流が端子から流れ、0のときに電流が止まります。
なお、
[digital 13 $1(
の13は
[pinMode 13 output(
で指定した端子番号13です。



エフェクトOnOffでLEDを点灯消灯させてみる


上のようにシンプルなディストーション回路でエフェクトOnOffをします。
[pd spigot~]はPd-extendedにある[spigot~]と機能的に同じで私が作成したものです。
作り方の記事についてはこちら
トグルスイッチOnでLED点灯と共にディストーションがOn、
トグルスイッチOffでLED消灯と共にディストーションがOffになります。

2017年4月17日月曜日

[Puredata]ArduinoとPduino その2

ここではArduinoとPuredataのセットアップについて書きます。

まずArduinoとPC、USBケーブルを用意してください。
念のためまだArduinoとPCは接続しないでください。。

私はArduino Megaの互換機を使いますのでそれ用に書きますが、
UNO等、他の機種を使う場合は読み替えてください。

【①Arduino IDEのダウンロード】
Arduinoのプログラムのコード書いたりコンパイル・Arduinoのメモリへ書き込みしたりするソフトウェアです。
これをダウンロード・インストールしてください。
Arduino - Software


【②ArduinoにFirmataをインストール】
FirmataというプログラムをArduinoのメモリに書き込みインストールします。
ArduinoをUSBでPCに繋いでください。
ArduinoのLEDが点灯してればOK。

次に先ほどインストールしたArduino IDEを起動してください。結構時間掛かります。

メニューバーより
ツール>ボードで「Arduino/Genuino Mega or Mega 2560」を選びます。
次に
ツール>シリアルポートでCOM3「Arduino/Genuino Mega or Mega 2560」を選びます。
COMの番号は環境によって違うかもしれません。
このCOM番号、覚えておくと後で役立つかもしれません。

メニューバーより
ファイル>スケッチ例>Firmata>StandardFirmataを選びます。
Firtamaのソースコードがウィンドウに表示されます。

最後にFirmataのプログラムをArduinoのメモリに書き込みます。
メニューバーより
スケッチ>マイコンボードに書き込む
を選んでください。
ちょっと時間が掛かります。書き込み完了まで待ってください。

書き込み終わったらArduinoは設定完了です。
まだセットアップありますが、後はPuredataにPduino(と名前ついているが「arduino」というオブジェクト)を別途導入するだけです。


【③Pduinoのセットアップ】
Pd Objectclasses
このサイトの
Pduino object + Firmata firmware
の項目から
Download Pduino-0.5.zip (Pd object and examples + Arduino library and examples)
を選んでダウンロードします。

Zipファイルを解凍して使うのはarduino.pdだけです。(他は動作確認のサンプル)
使いたいパッチと同階層のフォルダ内に置くか、
他の外部オブジェクトのようにC:\Program Files (x86)\Pd\extraフォルダに置いてください。

あとは適当に新規でPuredataパッチを作ってオブジェクトで「arduino」を作るだけで準備完了です。


・・・と言いたいところですが、arduino.pdを使うために、
更に呼び出しが必要な外部オブジェクトの導入が必要です。
ざっと中身を見た限りでは

外部オブジェクト群
zexy
mapping
cyclone

単品の外部オブジェクト?
comport

が必要です。
このためPuredata vanillaで使おうとすると物凄い量の
「...can't create」エラーをコンソールで吐きます。
これらの外部オブジェクトの導入が終わっていればこの限りではありません。

※外部オブジェクトの導入ですが、私、得意ではないです。
「...can't create(読み込めなくてオブジェクト作れません)」や
「duplicate(オブジェクトが重複して登録されて呼び出せません)」のエラーが頻発します。
余力あればいつか外部オブジェクトの導入方法を記事にしたいです。

[Puredata]ArduinoとPduino その1

自分もド素人で詳しくないですがArduinoはマイコンと呼ばれるものです。
(マイクロコンピュータなのかマイクロコントローラなのかよく分かりませんが、、)
Puredataに限らず、プログラムとArduinoを組み合わせて色々工作する記事をネットで見かけます。
当ブログでは、Puredataと併用した、ギターエフェクターに特化した内容で書こうと思います。



【ArduinoとPuredataで何ができるの?】
WindowsPCでPuredataを使ってエフェクターを作る場合、GainやToneの調整にスライダーをオブジェクトで置きますが、
実際のエフェクターのように物理的なツマミをひねって操作したいと思いませんか?
また、エフェクターのON・OFFに合わせてLEDを点灯させたり、
ディレイのタップテンポに合わせてLEDを点滅させたり、
はたまた、ボタンをタップしてPuredataにテンポ情報を送ったりできたら素敵です。

WindowsPCだとマウスとキーボード(または高価で仰々しいMIDIコントロ-ラ)で操作することになりますが、
Arduinoを使うと幾つかのパーツ組み合わせで自分に合った物理的なコントローラやセンサーを作成できます。


【Raspberry PiでArduinoをわざわざ使う理由】
Raspberry Piでも搭載のGPIOピンにスイッチやLED付けたり、可変抵抗+ADコンバータICの組み合わせでArduinoと似たような事が出来る、、、のですが、
IC1個使うにも電源供給が要りますし、GPIOを制御するのにPython使ったりと、
とにかく面倒です。

(Puredataでもいくつかの拡張オブジェクトのインストールが必要になるものの)
Arduinoを使うと導入は遥かに難易度が低くなります。
私が思うに以下のメリットがあります。

・実際に使うときはPuredataのプログラミングだけでセンサー類の操作や可変抵抗のデータの受信ができる。
・Raspberry PiのGPIOピンを使わなくて済む。LEDディスプレイでピンを使い切ってしまっていたりしても、ArduinoならUSBポート1個で済みます。
・こういった効果を考えると、Arduinoの導入は時間や労力の費用対効果が(特に安価な互換機なら)大変高い。

エフェクターでの使用でのデメリットとしては
・Arduinoの設置スペースやUSBケーブルの取り回しの分だけケースのハウジングに苦労する。

、、、くらいしか思いつきません。
このデメリットも小型でmicroUSB使えるものをチョイスすれば幾らか解消すると思います。




【とりあえずどのArduino買えばいいの?】
Amazon探すと本家の純正品や安価な互換機(ものによっては500円切ってる!)がありますが、
あまり安いものを買うとUSBでの接続にドライバが要る機種や、
ハンダが甘い初期不良で出くわすことがあるようなので、
そこそこ安い互換機がねらい目です。

自分はPPTPがGUI付きで既に巨大化がほぼ確定しているため、
Arduino Megaの互換機を選びました。
ちなみにこの機種についてはWindows10およびRaspbianでドライバ無しにUSB接続で認識します。


ここのメーカー、定番のUNOやMicroの互換も1000円前後なので1台とりあえず買っておいてもよさそうです。



【番外編】
 
Raspberry PiでLEDチカチカとか赤外線モジュールとかもやってみたい人にはこれオススメ。
安いなりの質(ブレッドボードが若干曲がってる等)ですが一杯パーツが入ってます。
お買い得なのは40ピンT字型GPIO拡張ボードが入っているところ。
某所で同等のものを買おうとするとこのセットと同じ値段くらいします。

2017年1月23日月曜日

[Puredata]目次[Contents]

この項目ではPuredata with Pi The Pedal(PPTP)の心臓部でもある
DTM用ビジュアルプログラミング言語Puredataについて取り上げます。
※ArduinoとPuredataを併用したPduinoについてもこちらで取り上げます。

※できるだけPuredata Vanillaで書きます。Pd-Extendedは更新が久しく止まっているので使いません

【エフェクター関連(パッチ配布含む)】

[マルチエフェクター・デモ]
[Puredata]Pi The Effectors Set[Guitar]
[Fuzz,Distortion,OverDrive]

[Puredata]EasyBooster

[Puredata]Fuzz Faceクローン 1
[Puredata]Fuzz Faceクローン 2[Traditional Fuzz]

[Puredata]Tube Scuttle[Overdrive]

[Piuredata]Distortus One[Distortion]

[Puredata]Range Maestro[treble booster]
[Puredata]Champman Preamp

[Puredata]UKM450 Preamp
[Puredata]UKM800 Preamp

[Puredata]1390 Preamp

[Puredata]V8custom Preamp
[Puredata]V8proto Preamp

[Puredata]TriBass Preamp


[フィルタ・トーンスタック]
1)[Puredata]アナログ回路のフィルタについて[初心者向け]

[Puredata]CabinetEQ & Air(現行)
[Puredata]Cabinet EQ(旧バージョン)
[Puredata]Cabinet EQ vBeta


[モジュレーション・空間系エフェクト]
[Puredata]フランジャーの改造[Flanger]

[Puredata]N_Phaser[Notch使用]

[Puredata]Uber Delay
[ゲート]
[Puredata]Noise Gate
  ・【Puredata】ノイズゲートの作り方・考え方の備忘録【Noise Gate】

[未分類patch]
[Puredata]Adjust adc~[入力レベル微調整]
[Puredata]ADDAcontrol[入力レベル微調整]


【Pduino関連】
[セットアップ]
1)[Puredata]ArduinoとPduino その1
2)[Puredata]ArduinoとPduino その2

[LED点灯・スイッチの切り替え]
1)[Pduino]Lチカと応用(エフェクトOnOffのLED点灯)
2)[Pduino]物理スイッチでのエフェクトOnOff
3)[Pduino]エフェクトOnOffを物理スイッチで制御&LEDの点灯・消灯
4)[Pduino]タップテンポとテンポに合わせてLED点滅


[ロータリーエンコーダを使う]
[Pduino]ロータリーエンコーダーをPuredataで使うヒント



[Tips]
[Puredata]untilを使わずカウントアップする

[Puredata]bad vector sizeについて[音が出ない]

[Puredata]vanillaで頑張ってbiquad~を使うヒント

[Puredata]vanillaでspigot~を再現する

[Puredata]スライダーのliner増減をlog増減へ変換する[Pduinoでも可]


[機材]Boss Mega Distortion MD-2 MOD

こちらの記事 で無改造のVanillaを紹介していますが、 今回紹介するのは自分で改造したものです。 紹介動画は以下。 内容は、 Vanillaの低音域が効きすぎて少々使いづらかったので 1:低音をカット(ただしゲインも少なくなるので) 2:ブースター...