音源はスピーカーとLEDミュージックスペクトラムに分岐させる(画像)。表面実装だったのでLEDの取り付けに手間取る(画像)。極性に関しては説明書を参考。LEDの予備は何個か用意されていた。電源を入れると、LEDの1ラインが流れるように1度だけ点灯する。これで接続不良のLEDを識別できる。音源を入力した場合、声や小さな音楽の場合は、大抵下の1ラインぐらいしか点灯しない。大きめの音楽を流すと、画面全体にLEDが点灯する。タクトスイッチを長押しすると、文字(決められた漢字など)のテスト表示ができる。2Bにおいて、GIPOをasmで制御してみた。これを応用すれば、asmでLチカも実現できる。ここではWebIOPiだけでGPIOの状態を確認した。5年ぶりに部屋にTVを設置することになった。GH-AMC03」があったので、これにマウントしてみた。テレビはPC用モニターとは異なり重量があり、このモニターアームでは耐えることができなかった。そこでテレビ専用の壁掛けのものを探した。前者は値段が安いが、配線をする度にテレビを器具から外す必要があり、位置が制限される。後者はアームなのでテレビの位置を後からでも調節でき、設置後のケーブルの配線も楽そうだったので、こちらを購入した。最近の部屋の壁は、壁クロスが貼ってある。その内側には柱を石膏ボードで隠した「大壁」があることが多い。石膏ボードはもろいため、ビスが効きにくい*1。重い物を引っ掛ける場合には、石膏ボードの内側の下地(柱・間柱・胴縁を含む)を狙う必要がある。前者の下地センサーで下地を探す。見付けたら、後者の下地探しピンで実際にピンを貫通させて調べる。マグネットがあるので、金属でないことも確認する。間柱を発見できればよい。アーム本体に内蔵されている水平器を利用して斜めにならないようにする。位置の確認と設置に1時間ほど。TVの下に物を置くことができるようになったので、少し電子工作用の机の上が整理できた。203:1)で組み立てる。ギアボックスの作成は30分程度。片側を組み立てれば、もう片方は慣れにより簡単に組み立てることができる。グリスの量はギリギリなので調整すること。WebIOAP(http://192.168.1.188:8000/bb/05/)で操作してギアボックスから伸びているシャフトの動きが適切かどうかを確認する。Piで学ぶ電子工作』P264。矢印のタッチエリアに押すことで、DCモーターの速度と回転方向を制御する。スマホ用にタッチ開示(touchstart)とタッチしながら指を動かしたとき(touchmove)のイベントを利用する。これらのイベントに対してtouchEventというイベントリスナーを登録する。タッチの終了(touchend)のイベントに対してtouchEndEventというイベントリスナーを登録する。同様に、PC用としてマウスがクリックしたとき(click)のイベントに対して、clickEventというイベントリスナーを登録する。計算結果のデューティ比をすぐにGPIOに送信すると、処理が追いつかない可能性がある。そこで、過去に送信した値を保存しておき、値の差の絶対値が一定値(th=0.1)を超えたときに、値を送信する。2つのGPIOに同時に値をセットするためにpwm2Writeマクロを用いている。Piで学ぶ電子工作』P256。UIによりスライダーを実装する。GPIO25への出力(PWMのデューティ比)を制御する。PythonプログラムからJavaScriptに値を返す必要がないので、マクロは存在しない。Piで学ぶ電子工作』P250。温度センサーADT7410で取得した値をPythonスクリプトで読み込み、WebIOPiを通じてWebページに表示する。センサーの値は2秒おきに更新するために、javascript.jsのgetTempPeriodic()関数において�「温度を取得」�「温度を表示」�「自身を呼び出し」という処理を行っている。PythonスクリプトではWebIOPiのマクロとしてgetTemp()関数を定義しており、これを通じて値を渡す。Piで学ぶ電子工作』P215。精度の高いPWM信号用のGPIO18(#12)を使用する。Piで学ぶ電子工作』P206。一般にホビー用のDCモーターでは100〜1kHzの周波数のPWM信号を与えることが多いらしいが、精度の低い方法でPWM信号を生成するため、ここでは小さめの周波数である50Hzとする。DCモーターを動かすためには大きな電流が必要なので、直接GPIOに接続してはいけない。そこでモータードライバを利用する。モータードライバを使えば回転の向きを制御することもできる。Piからではなく乾電池から6Vを与えるようにする(この電源はTA7291Pに与える)。TA7291Pの4ピンと8ピンは用いないので、3kΩ以上の抵抗を介して接続する(ここでは10kΩを使う)。ホビー用DCモーターはブラシ付きなので、動作時にノイズが発生し、マイコンに悪影響を与えることがある。そこで、モーターの端子にコンデンサ(0.01μF)を追加した。PiのGNDと乾電池のGNDを結ばなければならないことに注意)。半固定抵抗のGND側と電源側のそれぞれに330Ωの抵抗を接続する。するとA/コンバーターの読み込み値の範囲は0〜4,095ではなく、120〜3,975程度になる。ノイズにより0や4,095という値になったときにソフトウェア的に無視するようにするために、範囲を狭めたのである。3Vで駆動するDCモーターの場合、モータードライバに3Vを与えると電圧効果が起こり、3Vより小さい電圧で駆動されてしまい、モーターの回転が遅くなる。これを防ぐために、モータードライバに6Vを与えている。6Vの100%のデューティ比を与えるとモーターに対して大きすぎるため、ソフトウェア側で最大70%とする。Piで学ぶ電子工作』P198。RGBフルカラーLEDにLED光拡散キャップをかぶせて、色を見やすくする。LEDの大きさとキャップの大きさに注意(使用した物は5mm)。3つの半固定抵抗が赤・緑・青のどれかのLEDの明るさに対応する(つまみと色の対応は使用するRGBフルカラーLEDに依存する)。すべて左に回すとLEDは消え、どれが1つのつまみだけ右いっぱいに回すとその色のLEDが明るく点灯する。すべてのつまみを右に回すと、赤・緑・青がすべて点灯して、全体として白色に見える。使用するRGBフルカラーLEDはカソードコモン(共通カソード)なので、カソード端子をGNDに接続し、GPIOがHighのときに点灯する。Piで学ぶ電子工作』P192。周波数50HzのPWM信号を用いる。半固定抵抗値を左に回すとデューティ比が0%まで小さくなり、右に回すと100%まで大きくなる。このデューティ比の大きさに比例してLEDの明るさが変化する。Piで学ぶ電子工作』P178。温度センサーモジュールで取得した値をLCDに表示します(デジタル温度計)。while文の中でsleep(1)を実行することで、1秒ごとに温度を更新する。Piで学ぶ電子工作』P170。始めはI2C接続小型LCDモジュールピッチ変換キットを組み立てたが、i2cdetectコマンドで認識しなかった。ネットで調べてみると認識しない人がちらほらいるようだ。Pi電子工作』でも完成品の使用を勧めている)。ブレッドボードには温度センサーも存在しますが、ここでは使用していない。LCDに文字を書きこむと、電源を切らない限り保持されるので、プログラム上でwhileループは不要である。再実行時に事前における[Ctrl]+[C]の操作も不要である。プログラムの動作確認後、変換キットの修理を行った。ネットの情報によるとSDA-GND間にコンデンサ(68pF)を接続するとよいらしい。コンデンサ接続+プルアップ抵抗のはんだ付けはしない方法でi2cdetectコマンドで認識したが、プログラム実行時に画面に何も表示されなかった。液晶の接続部のはんだ付けを何度か調整したが、うまくいかなかった(断念)。Piで学ぶ電子工作』P165。I2C通信ができる温度センサー「ADT7410使用温度センサーモジュール」を接続する。Piで学ぶ電子工作』P153。フォトレジスタで取得したアナログ値をMCP3208を通じて、AD変換してデジタル値を取得する。明るいときはLEDを消灯、暗いときはLEDを点灯する。Piで学ぶ電子工作』P142。SPI通信によりMCP3208から12ビットのデジタル値を取得する。ADコンバーターであるMCP3208は8つのアナログ値(Ch0〜Ch7)を読み取る。Piで学ぶ電子工作』P111。タクトスイッチによるトグル動作でLEDを点灯・消灯を切り替える。GPIO24のポジティブエッジを検出し、そのたびにLEDの状態を切り替える。3軸加速度センサーモジュール「ADXL345」はX軸・Y軸・Z軸の加速度を計測できる。PiとADXL345はI2C通信でやり取りするため、配線も楽。Joystick)で代用した。内部に2つの可変抵抗(10kΩ)が直角に配置されており、スティックを動かすことで抵抗値が変化し、出力される電圧値が変化する。ジョイスティックの動きを検知してウィンドウ内に描画した円を動かすようにした。SPI通信によりMCP3002からAD変換し、デジタル値をコンソールに表示する。GUIで選択できる動画撮影プログラム。解像度・エフェクトをGUIで選択できる静止画撮影プログラム。Piのプロセッサが出力する信号の電圧と、サーボモーターの入力に必要な信号の電圧が異なるため、電圧レベルを変換する必要がある。これを実現するのがTD62783APGである。