RaspberryPi ZeroをMacとUSB OTGで繋いで制御するまで
RaspberryPi Zeroが手に入りやすくなっていたので、購入してみました。購入はKSYから。料金はZero本体が600円、送料・支払い手数料が700円、消費税104円で合計1404円でした。本体より手数料の方が高いですね。ちなみにWiFiなしモデルです。
接続に必要なケーブルなど
色んな方が書いていますが、基本はUSBAオス-microBオスケーブル1本で繋ぐことができます。
そんな事情も知らずに衝動買いしたため、どういう風に外と繋ぐか頭になく、届いてから慌てました。何しろ3BとZeroではデフォルトのインタフェースが結構異なります。同じなのは電源(microB)、microSD、PiCameraの口くらいだと思います。
- HDMI・・・3Bは通常のHDMI, Zeroはmini
- GPIO・・・ピン数は一緒だが、ピンヘッダがない
- LAN・・・ZeroにはLANソケットがない
- 2.5φイヤホン端子・・・Zeroにはない
- USB端子・・・3BはAが4つ、ZeroはmicroBが1つ。
- WiFi・・・ない(WiFi付きモデルも販売されているが、より入手困難)
LANもWiFiもないため、SSHで入れません。それにUSB端子もmicroBなので、microB->Aメスに変換して、Aメスからハブ繋いでマウスとキーボードを繋ぐ、みたいなことをしないと、直接叩くこともできません。
しかし、上述の通り、Zeroは普通のUSBAオス-microBオスケーブルだけで開発が可能になっています。設定を少し弄ると、USBをEtherDeviceとして動作させることができます。ということで、必要なのは以下の3つ。
- USBケーブル(Aオス-microBオス)
- microSD
- ピンヘッダ2x22 (for GPIO)
ピンヘッダは半田付けしておきましょう。
USB IPを利用するための設定
USBからEtherDeviceとして接続するために、ちょっとだけ作業が必要です。下記リンク先の説明が一番シンプルでわかりやすいと思います。
Simple guide for setting up OTG modes on the Raspberry Pi Zero, the fast way! · GitHub
- SDCardにRaspbianを書き込む(これは従来のRaspberryPiと変わりません)
- 書き込んだSDの/boot直下にあるconfig.txtの末尾に
dtoverlay=dwc2
を追加 - 書き込んだSDの/boot直下に
ssh
という空ファイルを生成する(例えばMacなら$ touch /Volumes/boot/ssh
) - 書き込んだSDの/boot直下にあるcmdline.txtを開き、
modules-load=dwc2,g_ether
をrootwaitの後ろに追加する - ZeroとMacをUSBで繋いで起動し、90秒ほど待ってから、
ssh pi@raspberrypi.local
でインしてみる(初期パスはraspberry)
起動は結構遅いので、気長に待ちましょう。4をミスると最悪起動しなくなるので注意。リンク先にコピペ用テキストが載っているので、それを使った方が安全かもしれません。
ちなみに、このモードをRaspberryPi Zero USB OTG(On the go)と呼んでいるようです。PWR INという従来と同じmicroBの給電の口がありますが、OTGで使用する場合、ここから給電しなくても動作します。電流が足らない場合に差すといいと思います。
USB OTG?
USBは、PCとMouseの関係のように、通常はホストとデバイスがはっきり決まりますが、デバイスがホストになることもできるのがOTGです。オンザゴーと読みます。Androidが一番わかりやすいですかね。AndroidはPCと繋ぐとデバイスとして機能しますが、microBからデバイスを繋ぐと、ホストとして動作させることができます。例えば、USB Serial(FTDIなど)を繋ぐと、/dev以下にデバイスが出現して、openすることでデバイスをコントロールすることができたりします。
ということで、USB OTG=USB Etherではありません。上記設定をすると、USB Deviceモードの場合はEtherとして起動するようにしているだけです。Zeroで使用されているOTG Controllerはこれではないかと思います。dwc=DesignWare Coresです。
従来のRaspberryPiでは、残念ながらこの技は使えません。USBポートはAメスしかないためで、Aメスの場合はOTGが使えず、常にホストとして動作します。ここのページが詳しいですが、micro(およびmini)Bはピンが5個出ていますが、Aは4本(5V,D+,D-,GND)しかありません。
http://ktsite.ddo.jp/kikaku/usb/index.html
microBのIDピンを開放状態で使用した場合はデバイス、GNDへ短絡した場合はホストとして動作します。IDをGNDへ短絡させたケーブルをOTGケーブル、もしくはUSBホストケーブルと言います。USBホストケーブルの方が実情に即している気がしますね。
なお、規格としてのOTGは、どちらがホストとなるかデバイスとなるかをその場その場で切り替えるデュアルロールを目指しているため、ホストとデバイスが一意に決まってしまうUSBホストケーブルは邪道なんじゃないの?と思ったりしますが、詳しくは以下のページのOTG補足を参照してみると良いと思います。
USB On-the-Go(OTG)| 3分でわかるシリーズ | [技術コラム集]組込みの門 | ユークエスト株式会社
インターネットへの接続
話をZeroに戻します。SSHでつながったとは言え、WiFiもLANも繋がっていないので、インターネットに接続できません。つまりapt-getもできません。ただ、Macならインターネット共有から、実に簡単にネットワーク機能を提供することができます。
このRNDIS/Ethernet Gadget
がZeroです。ここにチェックを入れてInternet共有をすると、特に苦も無くZero上でインターネットが利用できるようになります。
ZeroでYMZ294を制御してみる
YMZ294の回路をそのままにしてあったので、3Bと差し替えてみました。ごくごく普通に動作しました。起動がおそいなーという程度。写真見ておわかりのように、ミニブレッドボードの幅1.5倍くらいしかありません。非常に小さい。
動画はこちら。ただ単純に再生できたよ、という確認だけにすぎませんが・・・。曲はAve Mariaです。
お絵描き
【緒方智絵里】「フラワーエンジェル」イラスト/kinokorori [pixiv]
一応、今回気にした点を備忘録的に。
- 輪郭線の色
絵がどうも固くなってしまうところが気になったため、今回は輪郭線を輪郭対象の色に近づけて描いています。ほぼ影と同じ扱いで描いている感じです。
- 光の入れ方と色
光の入れ方は、今まで逐次髪なら髪、服なら服、肌なら肌と各自バラバラに光を入れていたんですけど、最後に0x4C4C30くらいの色を一気に描いて、少し統一感を出してみています。艶消し状態から一気に入れたということです。光源追加前はこんな感じ。
それにしても、自分の絵が良い方向に進んでいるのか、少しはイケてる絵が描けてるのか、あんまり自信がありません。むしろ、絵の練習を始めたころの方が、自分はイケていたという謎の自信があった気がします。
当時良く描けたと思っていた絵も、半年くらい経って見返すと、「うわなんだこれ」という感想しか出ずに凹む、というのを何度も繰り返しているので、すっかり自分の目に自信がなくなってきます。自分の絵ってなぜか客観視しづらいんですよね。
ディベートは人を屁理屈で言い負かす弁論術ではありません
ディベートが割と誤解されている風潮がありますので、ディベート本の紹介を。
ビジネス・ディベート (日経文庫) | 茂木 秀昭 |本 | 通販 | Amazon
どちらも素晴らしい本です。非常に読みやすくもあるので、ぜひ読んで欲しいと思います。
ディベートって何?
ディベートは、決められた論題に対して、肯定派と否定派とにわかれ、それぞれがルールに従って主張を行う競技です。 そう、競技なんです。ルールがあります。審査員もいます。
肯定派と否定派が意見を述べる時間が決まっており、大体以下のような順序で行われます。
- 肯定側立論
- 質疑
- 否定側立論
- 質疑
- 否定側第一反駁
- 肯定側第一反駁
- 否定側第二反駁
- 肯定側第二反駁
- 否定側結論
- 肯定側結論
立論というのは、「私はこう思いますよ」という主張を、なぜそう思うのかという理由とともに説明する時間です。 反駁は、相手の主張に対して、いやいや違いますよというリアクションでの反撃を行う時間です。
論題は、必ず賛否が明確に分かれるように設定されます。例えば、 「死刑制度は廃止すべきである」 「日本は移民を受け入れるべきである」 「当社は英語を公用語とすべきである」 といった具合です。
相手を言い負かすのが目的なんですか?
Noです。肯定派も否定派も、相手の意見を聞いて、立場を変えるようなことをしません。ディベートは、どちらの言い分がより説得力があるかを、審査員という第3者視点で判断し、優劣を競うゲームです。最終的にどっちが良かったかジャッジされるということです。
また、論述に対する意見を述べるのであって、人格攻撃や、論題と無関係なことを述べてはいけません。そして、肯定派を取るか否定派を取るかは、大抵くじで決まります。その人の信条と同じか違うかはあまり関係ありません。
ゲームスキルってことになるけど実践で使えるわけ?
冒頭で紹介した本でも力説されていますが、考え方の教育に非常に適していると思います。その効果は、ディベートはルールのあるゲームだからこそでしょう。
理由1. 審査員が判断する
審査員は、述べられた意見に対して、どちらの方が説得力があったかを審査します。審査員による評価が入ることで、自分の意見の組み立てが適切だったかどうかの振り返りの機会が得られます。
例えば、社内公用語の英語化について、否定派が「英語だとコミュニケーションロスが増えるから反対です」とだけ主張をした場合、否定派に賛同できるでしょうか?
Noでしょう。これだけだと、あっそう、で終わってしまいます。その主張の理由付けが要ります。例えば、どれくらいのコミュニケーションロスが発生するのか?それは他でリカバリできないほど深刻だと言えるのか?英語の公用語化のメリットを上回るほどのものなのか?その問題が業績にどれくらいのインパクトを与えるのか?などの観点から説明を加える必要があります。でないと、ただのボヤキです。
ここで役に立つのが演繹法や帰納法などの垂直思考になります。垂直思考が出来ていないと、論理の接続がおかしいため、ツッコミが入ってしまいます。ここの辺りの考え方は、紹介した本に丁寧に書かれています。
また、審査員がいることで、先ほど書いた人格攻撃のような、無意味な論述は排除されます。これも大きなメリットです。
理由2. 論述の順番と時間が決まっている
時間が決まっているので、声のでかい一人が延々としゃべり続けることはできません。また、論旨不明のままダラダラしゃべってしまうと、すぐ時間切れになってしまいます。発言する内容を精査し、取捨選択する必要があります。時間設定にも拠ると思いますが、立論で主張できるポイントは、大体2つくらいです。
この主張ポイントはただ増やせばいいというものではなく、ポイントが増えた分、どうしてもそれぞれに対する「なぜそう思ったのか」を述べる時間が短くなります。主張ポイントの優先順位付けと、どのくらい述べるかの戦略を練る必要があるということです。
日常見られるような長ったらしい会議も、座長はこんな感じの戦略をあらかじめ練って欲しいと常々思っています・・・。
理由3. 相手がいる
これは割とディベートならではの環境だと思いますが、自分たちと真逆のポジションを取った相手がいます。相手の立論や質疑、反駁をよく聞いて、その主張を理解する必要があります。相手の主張に穴がないか、相手が何を狙ってこちらの攻撃をしているのかなどを判断し、自分たちの戦略をその場で練り直す必要がでてきます。いわゆるクリティカルシンキングです。
立論で終わらず、意見の応酬があるのがミソですね。相手がどこからパンチを繰り出してくるのか、ある程度予測しなければならず、不測の事態にも対処しなければならないということです。
理由4. しゃべる
当たり前ですが、実際にしゃべります。喋り方も、やはり説得力に直結します。プレゼンスキルは誰しも重要だと思っていますが、そのトレーニングにもなります。
下の動画はフジテレビでやっていたディベートの番組で、現役高校教師チーム vs 落語家チームの対決です。実は、この現役高校教師チームの男性教師が、冒頭紹介した本の著者です。本でもチラッとこの時の紹介がありますが、落語家チームの話し方の上手さに舌を巻いていました。
それにしてもフジテレビがこんな本格的なディベート番組をやっていたことに驚きました。本を読むまで知りませんでした。
最後に
以上、本に書いてあったことを自分なりの解釈を織り交ぜながらディベートの説明をしてみましたが、自分には実際ディベートの経験がありません。興味はありますけど。
ただ、ディベートに必要な思考法が、現実のビジネスシーンでも非常に親和性が良いと感じています。「考える」というのは言うは易しで、なかなか身につかないスキルです。その「考える」ということがどういうことか、ディベートのトレーニングを行うことで、身につくんじゃないかと思います。
Raspberry pi + YMZ294用MMLプレーヤーコード公開
Raspberry pi + YMZ294用MMLプレーヤーのソースコードをgithubに公開しておきました。ライセンスはMIT。
GitHub - kinokorori/rpi_psg_mml: MML player using Raspberry Pi with YMZ294(PSG).
使い方はREADME_ja.mdを参照してください。ごく一般的な再生のみサポートしていますが、オープンソースということで、適当に改変して使っていただければ幸いです。サンプルとして、Ave Mariaを16小節分再生するコード(sample-avemaria.py)もくっつけてあります。Raspberry PiはArduinoと違って「こうやってピン配するよね」というデフォルトがないので、外側から設定できるようにはしてあります。
オリジナルで曲を書く場合、sample-avemaria.pyを改変するのが一番楽だと思います。MMLの文字列を弄って確認してみてください。
なお、READMEには日本語版があります。GitHub上でREADME_ja.mdを選択すると、日本語版READMEが表示されます。
Raspberry Pi + YMZ294でのノイズ対策にコンデンサを使用する
前回はアナログフォトカプラでスピーカーを絶縁し、ノイズの少ない電源を用意しました。
今回はコンデンサでノイズ除去。アンプ周辺の回路図はこんな感じにしました。47μFはアルミ電解コンデンサです。ちなみに今までサボってYMZ294近辺のデカップリングコンデンサすら配置していませんでしたが、それも配置。
電源のパスコンもちょっと効果ありましたが、信号線(IN+,IN-)側の効果が大きく、ほとんどノイズが聞こえなくなりました。グランドノイズが大きいということですかね。ただ、全体的なボリュームが若干下がってしまう上に、少し音がマイルドになってしまいます。47μFから10μFに変更すると、PSG特有の元のとんがった音がある程度保存されますが、ちょっとだけノイズが気になります。22μFあたりが丁度よさげな感じ。なお、全体的なゲインが下がってしまうので、抵抗を1Kから100Ωに変更しています。
ノイズ対策にはコンデンサを使いましょうとか、アンプ回路を見ると、コンデンサが大量に配置されてたりしますが、実際に試してみると、おーなるほど、という感じです。オーディオも楽器もやらないソフト屋にとっては割と新鮮な体験だったりします。結構コンデンサ容量は勘だったり試行錯誤だったりという話を聞きますが、確かに入れ替えてみるとノイズ感がガラッと変わりますね。
非常に素人感満載ですが、動画も撮ってみました。
Raspberry Pi + YMZ294でのノイズ対策にアナログフォトカプラを使ってみる
前のエントリで、ドレミファソラシドを鳴らしてみましたが、凄くノイズが乗っています。
Raspberry piでYMZ294を鳴らす - キノコの自省録
ラズパイに挿しただけで、ピギャーピーという感じのけたたましいノイズが乗ります。以下のエントリの時にも書きましたが、シールド線使ったところでどうにもなりませんでした。
ノイズの原因と対策
ノイズの原因は電源です。電源はラズパイから引っ張っているので、ラズパイの電源がノイジーだということです。ピュアオーディオマニアが発電所を評価したりマイ電信柱買ったりと、電源にやたらこだわる理由がちょっとだけわかった気がします。ちょっとだけ。電源ってこんなにノイズが乗るんですねえ。
ということで、スピーカー電源にラズパイのピンを使わず、どこかで電気的に絶縁してノイズ対策を施してみます。どこかで、といっても、2か所しかありません。
- ラズパイとYMZ294の間をフォトカプラで繋いで絶縁する
- YMZ294のSO出力とアンプ間を絶縁する
1はデジタルですが、なにしろピン数が多いため、かなりヘビーです。あまりやりたいと思わない、というかこんなことするならノイズの少ないArduino使います。2はSO出力だけなので配線は楽チンですが、アナログです。アナログの絶縁ってどうやるんでしょう・・・
※もう一つ、ラズパイに使っているUSB電源から5V/GND線を横取りしてスピーカー電源につなぐという方法もアリだと思います。
アナログフォトカプラ
アナログフォトカプラみたいなものはなんかないですかね?と検索したら、すぐ出てきました。
CdS+LED アナログ・フォトカプラ MI0202CL: 半導体 秋月電子通商-電子部品・ネット通販
フォトカプラというかフォトレジスタですね。構造は至って単純で、片側にLED、片側にCdSを取り付けて箱に閉じ込めているだけです。LEDの光量に応じて、CdSの抵抗値が上下するという仕組みです。なるほど。なので、CdSサイドはただの可変抵抗と考えればいいということです。スピーカーユニットを鳴らすには、抵抗の変動に応じて、電圧を上下させる必要があります。単純に繋いだ場合、変動するのは電流になってしまうので、GNDとの間に抵抗を繋いで並列回路構成にする必要があります。
MI0202CLのLED順方向電流は最大40mAです。YMZ294のSO電流を調べたところ、大体15mA~20mAで変動しています。なので、直挿ししてOK。
ということで、回路はこんな感じになりました。大分単純です。
鳴らしてみる
ちゃんと鳴るか心配でしたが、ちゃんと音が出ました。YMZ294を直挿しした時に比べると、音が丸くなっています。音が丸くなるというか、Lo-Fiっぽいです。これはこれでなかなか味があって良いかもという感じなのですが、たまにボツ音が乗ります。うーん。
電源はいくつか試したのですが、一番静かだったのが乾電池でした。ノイズがほとんど聞こえません。AC/DC変換しないせいですかね。ちょっと驚きました。
とりあえず動画。最初はラズパイ直での再生、0:57あたりから、MI0202CLで絶縁して、アンプ電源に乾電池を使用したバージョンです。ノイズ比較も行っています。
コンデンサでのノイズ除去も試してみようかなあと思いますが、とりあえず今回はこの辺で。
シャイニングゴッドチェリー
シャイニングゴッドチェリー描きました。
【アイドルマスターシンデレラガールズ】「シャイニングゴッドチェリー」イラスト/kinokorori [pixiv]
6年前のGWから絵を練習しようと決めたので、GWにはなるべく絵を描くようにしています。最初から比べると上手くはなったけど、具体的に何が変わったかと言われると説明できない。