使いますroot@satoraspi:~#......と、いうわけで、サクッと入る。PHPの作動を確かめるそれでは早速......。infotest.phpで、中身はこじんまりとこう書いて......<html><head></head><body><?phpinfo();?></body></html>早速ブラウザで見ると......うん。動いちょる動いちょる。PHPでLチカさて、次に、phpからGPIOだな。マンネリだけどやっぱり「Lチカ」か。17);?></body></html>ブレッドボードにLEDと330Ωの抵抗を直列につけて、17番ピンとアースにつなぐ。いうフォームになるのだが......いや、そりゃまあ、動くわけないわな、GPIOはrootでなきゃ読み書きできんのだから。「何かをSUID」......などと、いろいろあるが、どうも、どれもいまいち、ピンと来ないな......。GPIOのアクセスをヌルくする、これかなあ......。gpio/root@satoraspi:/sys/class#なんっか、もう、力いっぱい777丸出しですけどね(笑)。700とか760でも大丈夫じゃないかなあ。これで、フォームをクリックするとLEDが点いたり消えたりする。SSRでAC100Vの家電製品を制御これをそのまま、いつぞやArduinoでやったSSR(ソリッド・ステート・リレー)につなぐと、家電製品のオン・オフなどができるわけだ。SSRモジュールでは、やってみよう。2で扇風機のオン・オフ真ん中の黒い箱がSSRだ。2は3.3Vで電圧が違うが、このSSRは3Vから8Vまでの入力を受け付けるので、大丈夫なのである。JST先日作成した「ピアノでLチカ」の、光り方のダイナミックレンジと言うか、そういうのが小さいので、もっと多段階に光らせられないものかな、と思った。そもそも、5V/10ビット=1024段のAD変換器にせいぜい4ビット分くらいの入力しかしていないのだから、これを12ビット分4096に展開したって、光り方に濃淡が足りないのは当たり前である。これは適切なアンプを使っていないからだというのは自明だ。そこで、今朝、フリップフロップ遊びをするために使ったトランジスタ、「2SC1815」に目が向く。うんうん、これで1石増幅してやろう。普通はこの場面ではオペアンプとかリニアICを買いに行くのだろうが、何しろ150円で10個も入っていた2SC1815がもったいない。えーっと、どうやるんだっけな、と思い出し思い出し、ブレッドボードを作る。抵抗分圧でベースにバイアスをかける。エミッタにつなぐ抵抗に増幅したい倍率をかけ、それをコレクタにつなぐ。普通は直流成分カットのためのコンデンサを出力につなぐが、0~5VまでのArduinoのアナログ入力に入れるのだから、これはいらない。結局、ベースバイアスには220kΩ×2個、コレクタに10kΩ、エミッタに1kΩをつけた。望ましい抵抗値は他にあると思うのだが、なにしろ、手持ちのものがそれしかない。粗製1石アンプいやまあ、お詳しい方からすると、各種の数値がツッコミどころ満載なのでしょうが、いや、その、手元にある抵抗等がこんなのしかなかったんですよ(苦笑)。小さいスピーカーをつないで音を聴いてみると、耳がおかしくなるくらい音が歪んでいるが(笑)、レベルは十分であるようだ。こんなスケッチを書き、PCのヘッドホン端子にArduinoをつないでレベルをチェックする。「2SC1815」を1個通しただけで、うんと幅広になる。2SC1815で増幅して入力した場合......というわけで、うまく幅広な入力が得られるようになった。入力はこれでOKだ、というわけで、それを「ピアノLチカ」につないでみたのだが、あれ......?3端子レギュレータが触れないくらい熱くなっている。いかんいかん、というのですぐ電源を外す。回路にどこか間違いがあるのかな、と小一時間調べたが、間違いはない。LEDドライブICのTLC5940NTがダメになってしまったみたいだ。いつもArduinoを保護するために、TLCには3端子レギュレータで5Vの別建て電源を作り、それを与えていたのだが、ネットの情報によると、それでTLCが不安定な状態の時に電源が通り、壊れてしまうことはよくあることらしい。うーん、390円、もったいないなあ......。買いに行くとするか......。ピアノLチカは、また今度だな......。JSTそういえばまだアレをやっていなかったな、と思いつく。やっていなかったな、というのは正確ではない。やるのは30年ぶりくらいかな、というと正確だ。アレ、というのは「マルチバイブレータ」という回路のことだ。この「マルチバイブレータ」という回路ををもとに少しづつカスタマイズを進めていくと「2安定マルチバイブレータ」、つまり「フリップフロップ」になり、それはそのまま1ビット記憶素子となり、やがてコンピュータそのものにつながっていくのである。その原点の、「マルチバイブレータ」というのは下のような回路である。私などは若い頃、職場でこの回路を随分と叩き込まれたもので、当時は二つのトランジスタのところが真空管になっている回路がさまざまな機材の中にまだ現役で存在した。真空管でマルチバイブレータを構成する場合はヒータ回路などを一緒に考えなくてはならないことや、電圧が高いことなどで、実際に作動させるにはもう少し複雑な配慮が必要になる。その点、トランジスタで構成すると電力も少なくてすみ、単純明瞭だ。回路自体の知財権等がどうなっているか、ということを今日まで知らなかったが、今ネットで少し検索してみると、Wikipediaには「イギリス人の物理学者ウィリアム・エックルスとフランク・ジョーダンによって1919年に作られた」とある。ウィリアム・エックルスは1966年に亡くなっているが、フランク・ジョーダンの没年は不明である。電子回路の知財権に関して、著作権はあいまいでよくわからないが、回路配置利用権については、日本では申請登録が必要で、かつ登録後10年となっている。要するにマルチバイブレータの回路図をネットでコピーしたり利用したりする場合の知財権関係の問題点は、回路配置利用権については申請されていないから存在しないが、著作権についてははっきりせず、よくわからないということである。マルチバイブレータの回路図は、あらゆる教科書に作成者の紹介もなく掲載されているので、多分ネットに書いても大丈夫なのではなかろうか。おき、この回路の動作原理は複雑で、理解するのは困難だが、動作結果や回路自体はご覧のように簡単なので、すぐに覚えてしまえる。一方のトランジスタのベースをもう一方のトランジスタのコレクタにコンデンサをはさんで「たすき掛け」に接続し、それぞれの接続点に抵抗を全部で4つつなぎ、これを介して電源電圧を加え、最後にエミッタを接地する......、というふうに覚えるのだ。発振周期の計算は私は恥ずかしながら覚えていない。ネットを漁ると、......と、すぐにその式は出てくる。コンデンサふたつと、真ん中の抵抗ふたつで周期が決まる。両側の抵抗ふたつはトランジスタに流す電流を決めると思えばよい。この両側二つの抵抗をLEDの電流調整抵抗とみなせば、LEDはここに直列につなげばよい。2秒に1回くらい、つまり0.5HzくらいでLEDをチカチカさせる場合を考える。手持ちの部品で47μFの電解コンデンサがいくつかあるのでそれを使いたい。左右とも同じ周期で発振させるなら、この場合はR2とR3、C1とC2は同じ容量のものを使えばよい。先ほどの式は......というふうに簡単になる。手持ちの電解コンデンサ47μFで、0.5HzくらいのLチカをやりたいときの抵抗は、......というふうになる。私のガラクタ箱の中に入っている一番近い値の抵抗は、10kΩだ。代わりにこれを使うと、結局、......というわけで、2秒に3回くらいチカチカするものが作れる。C1とC4、つまり両側の電流調整用には330ΩとLEDを直列に入れる。適当なトランジスタがないので、買う。NPN型の定番品に2SC1815というのがあり、秋葉原千石電商で10個入りのパケットが150円だ。この「2SC1815」は汎用的に使われている石なので、さまざまな電子工作にもよく登場している。余分に持っていて損はないし、10個で150円ならお金を使った気にすらならないので、一袋買っておくのは正解だと思う。ブレッドボードに並べれば、次のようになる。上のほうに3端子レギュレータを設け、ACアダプタの13Vを5Vに落としている。切り欠きのあるトランジスタふたつ、切り欠きに向かって左からエミッタ・コレクタ・ベースなので、――昔はこれを「E-C-B」とも「エ・ク・ボ」とも覚えたものであった――ベースから黄色いジャンパで「たすき掛け」になっているところがよくわかる。R1・R4が下のほうの抵抗で、茶・黒・橙(1・0・3、10×10の3乗)の10kΩであることが見て取れる。動かすとこんな感じである。次に、この「Lチカ周波数」をできるだけ正確に測ってみよう。私はオシロスコープなど持っていない。そこで、LEDの電流調整抵抗の後に直列にArduinoのデジタル入力をつなぎ、LOW~LOWの間をμ秒単位で計れば、周波数がわかるわけだ。電源も5Vなので、ちょうどよい。非安定マルチバイブレータの周波数を測る。}}それから、このように繋ぐ。Arduinoのシリアルモニタで観測すると、波長から周波数が計算されてくる。2.062Hzとなっているから、最初の計算の1.5Hzからすると、だいぶ誤差があるが、CR回路の発振なんて、こんなもんである。この「非安定マルチバイブレータ」は、回路にコンデンサが含まれていることにミソがある。ふたつのコンデンサが入っているからその充放電の働きにより発振し、放っておいても時間ごとに切り替わるのである。そこでこのコンデンサをとっぱらい、少し回路の配置を変える。するとアラ不思議、状態を保持する1ビットの記憶素子、「フリップフロップ」になるのである。フリップフロップ(2安定マルチバイブレータ)この場合、トランジスタのベースから出したスイッチを押すたび、状態が切り替わる。ブレッドボードに組むとこうなる。動かしている様子である。ボタンを操作するたび、光っているLEDが代わる。二つの状態のいずれかを保持しているということであり、それが1ビットの記憶ということである。2安定マルチバイブレータが1ビットのメモリーだということがここからもわかる。B」という最新のものだ。モデルA」「同B」なので、少しづつ合わないところがあるが、ごく細部を除いては、特に気にする必要はない。細部の違いが影響してくるのは、よほど高度なことをやる場合だ。Piのことを知らない、という人に向けて書けば、結局はこうだ。Piは、GPIOインターフェイスボードを積んだ普通のPCだと思えばよい。普通のPCなので、Linux系OS以外にも、Windows10なども使える。成果物のほとんどはRaspbianというLinuxディストリビューション上で得られているので、OSにはRaspbianを選択しておくのが無難。前記GPIOは、普通にファイルに見えるので(と言っても、/devの下にデバイスファイルがあるわけではない;もちろん、シンボリックリンクでそういうふうにすることはできるが)、標準出力でファイルを開け、書いて閉じれば、それでGPIOにつないだ電子工作をコントロールできる。Arduinoに比べると、ロジックが正=3.3Vであること、アナログ入力がないことなどが違う。Piのニュースが流れたとき、それがArduinoキラーになるのではないかと多くの人が考えました。値段はたいして違わないのに、Piはずっと大きなCPUパワーを持っています。Arduinoを使う理由はもうない、というわけです。両者は補完的な関係にあることが分かってきました。以下のような状況を考えると、ArduinoとPiを組み合わせるメリットが見えてきます。Arduinoの豊富なライブラリと作例を活用したい。うまく動いているArduinoプロジェクトにCPUパワーを追加して、もっと高度なことがしたい。5Vで動作する回路を扱いたいが、Piは3.3V動作で、5V入力に対応しない。誰かがプロトタイピングの過程で少しばかり無茶をしてチップがダメージを受けた時(Arduinoのピンにモーターを直結している人を見たことがあります)、Arduinoならば数百円以下でスペアのチップを買って自分で交換することもできるが、Piでそれをするのはほぼ不可能。3Dプリンタ用コントローラのように高精度なリアルタイム処理を必要とするものを作るとき、リアルタイムOSとは言えないRaspbianよりも、命令サイクルを計算できるマイクロコントローラのほうが要求に適う可能性が高い」(p.88冒頭から引用)......等とある。Linuxなので、使い始めるにはとりあえずrootを把握して、ユーザを作ればよい。/home/toshio」......なんてことをやらないと落ち着かないのである。さまざまな作例等はPythonの利用が想定されているので、さまざまな作品例のマネがしたければPythonを使えばよいが、前記したように「普通のLinuxマシン」なので、PerlだろうがCだろうが、おっさん系の言語も全部使えるから、私のようなおっさんは自分が使いたい言語を使えばよい。Piをはじめよう」の102ページあたりに載っている最初のLチカの例は、次のような方法でも再現できる。./perl2LEDとやると、LEDが1秒おきにチカチカするのである。JSTいやもう、「オッサンとバイエル、ピアノ等」って銘打ってて、長らくなかったこのネタ。ええ、ピアノですよ、ピアノ。「Arduinoをピアノにつなぎたいッ!」......すなわちコレである。Arduinoをピアノにつなぎ、LEDをピアノ演奏に合わせて明滅させようというものだ。いまや遅しとやってみた。ノクターンでLチカ一つ覚えみたいにノクターンで申し訳ないですが(笑)、すんませんレパートリーがあんまりないもんで。アナログピンからピアノの音声出力を読み、それに合わせてTLC5940NTに接続されたLEDを適宜明滅させるわけである。ピアノ風味に明滅させるにあたっては、乱数によるLED選択と、先日会得した「PWMを十分に使い、余韻をもって各LEDを徐々に消す」という技を遺憾なく使用した。これをやるには、アナログピンに上手に音声を入れる必要がある。いう時、電圧レベルを知るのにオシロスコープなどが使えればいいのだが、残念ながら持っていない。そこで、あらかじめテスターのACでテレビ、ラジオ、自分のピアノなどの音声出力端子からだいたいのレベルを推定し、次に十分な抵抗を入れて、Arduinoのアナログピンに入力して読み取った。その結果、だいたい200mVの振幅程度であることがわかった。これならばArduinoに直接入れてもどうということはなさそうだ。レベルが小さいから、ソフトウェアのほうでうまくやる必要がある。次に、音声はアナログ信号だから、プラス・マイナスに振れる。Arduinoのアナログ入力は0~5Vの間を1024分割で読むのだから、ここをうまく工夫しなければならない。2.5Vを中心に電圧が振れるよう、2.5Vを生成して合成する。TLC5940NTを動かすために5Vの3端子レギュレータを使っているので、ここから抵抗分圧で2.5Vを作り、それを合成する。合成するとき、出力側の音声端子に電流が流れ込んではまずいから、コンデンサを0.1μFばかりつける。周波数は見当がつくが、電圧の見当がつきにくいので、とりあえず0.1μFにして、出来が悪いようなら取り換えることにする。疑問もない簡素な付加回路。パルス技術ではこういうの、「クランパ」って言ったっけな......。音声入力のためのクランパそれで、TLCなどと一緒にLEDを植え込む。ミニジャックを接続するために、秋月電子の「ステレオミニジャックDIP化キット」を取り付けた。ミニジャックの部分で、スケッチはこうなった。アナログピンに音声を入れ、TLC5940NTを使ってLEDを光らせる。JSTブレッドボードに小さいプロトタイプを作るとき、この「プロトタイピングシールド」も捨てがたい。使ってみての感想なのだが、小さくて不便だ。電源ラインもどうも使いづらい。シールド上の赤ソケットには実は5Vは到達していないので、自分で配線しなければならないのだ。便利だが、小さいところが難と言って、大きい方だと、Arduinoに重ねるわけにもいかず、昨日のようになってしまう。たかが7セグLED2個のためにゴチャつくブレッドボード(笑)何かいいことないかな、と思ってネットを漁っていたら、ある方がブレッドボードの脇に直接Arduino用のピンヘッダを接着剤で取り付けて、目的を達成しておられるのを見つけた。ほほー、なるほどなるほど......。ブレッドボードは、同じメーカーの物なら、こういうふうに脇を取り外したり組み合わせたりできるのだが、電源ラインを一つ外すと、Arduinoの上下のピン幅とピッタリなのである。チナミに、このようにバラしたり組み合わせたりするには、ブレッドボード裏の両面テープの、つけ外しする部分をカッターナイフでスーッと切ると良い。接着剤でピンソケットを付けてしまう、てのも、なあ......。他のことにブレッドボードが使えなくなってしまうし......。考えてみたら、私は次の写真のようなArduino用のプラスチックケースを使っているが............この上に電源ラインを一本外したブレッドボードを亀の子にし、輪ゴムか何かで縛っておけば、目的は達成できるではないか。して今までこうしなかったかと言うと、そのままだとプラスチックケースの上下に細く開けてあるピンソケットにアクセスするためのスリットがふさがり、Arduinoから信号線が出せないからである。電源ラインを外すと、上下ともちょうどピッタリ、スリットが隠れずにすむのだ。いうわけで、この前作ったビーズのLEDなど植えてみる。HEART♥」みたいな感じで、ハートですな、男のくせにw。このLチカはシンプルで、スケッチはこう。delay(2);}そう言えば、以前、「なんとっ!Arduinoって3項演算子ないのかッ!?」「ううっ、あったらなあ」などと書いたことがあったが、これは早とちりで、私の間違い。JST7セグメントLEDのお稽古をする。意味のあるなしはどうだってよろしい。私は古株ぶっているが、実は若い頃に7セグLEDを扱ったことがない。子供の頃の電子工作はもっぱらラジオなどのトランジスタ回路、長じてからは仕事関係で5極真空管やマイクロ波の発振管などを扱っていた。数値表示のためには、その頃の仕事関係では「ニキシー管」という数値表示のための真空管を扱っていた。これは放電管で、数字の形をした陰極が赤く光るものだ。いうわけで、7セグLEDを知らないのである。いや、無論、当時から7セグメントLEDは世の中にあったが、私の職場が特殊だったのである。買ってきた、1個60円の7セグLEDである。OSL10561-IRAさて、まずは点灯からだ。して、......まず、200Ωばかりつけておいてやればよいのだろう。この前買った集合抵抗の手持ち、8素子9ピンで330Ωのがあるから、それを付ければ多少暗いが10mA前後で光るだろう。全点灯で光らせてみよう。電源をくれてやって、抵抗に結線するだけだ。光らせてみると、計算上の抵抗の倍近い抵抗値なのに、なかなかどうして、結構明るく光る。単純全点灯で光らせてみたところ次に、Arduinoをつないで、数字を表示させる。全点灯で電流を測ってみると67mAほど流れているので、電源はこのまま別建てのほうがいいだろう。アノードコモンのLEDであるから、カソード側で制御しなければならない。集合抵抗では一本づつ制御できないので、330Ωの電流制御抵抗をバラで8本とりつける。それぞれの足をArduinoのデジタル2ピンから9ピンまで取り付ける。点灯のパターンは配列に書くのが手早いだろう。7セグメントLEDを1個動かす。}}アノードコモンなので、論理は負論理だ。Arduinoとブレッドボードをこういうふうにする。動かすと、ゆっくりカウントアップする。