100 - みる会図書館


検索対象: ラズパイマガジン = Raspberry Pi Magazine 2017年10月号
104件見つかりました。

1. ラズパイマガジン = Raspberry Pi Magazine 2017年10月号

端子として 8 番ピンを指定した以外 は、基本的に RaspberryPi のとき と同じです。 8 番ピンに 100Q 程度の抵抗を介 して LED をつないでください。 led. py を次のように実行します。 0 0 $ s udO . / 1 ed . py 子 図 LED が 1 秒おきに点滅します ( 図 10 ) 。なお、上記のように Tinker Boa rd では GPIO を制御するスクリプト を実行する際に root 権限が必要なこ とも、注意すべき点の一つです。「 / dev/mem 」を使ってメモリーマッ ブド I / O を制御しているため、 root 権限は欠かせません。 $ 1 s / d e v / i 2 c ☆ロ / d e v / i 2 c - 0 / d e v / i 2 c - 2 / d e v / i 2 c - 4 / d e v / i 2 c - 6 / d e v / i 2 c - 3 / d e v / i 2 c - 5 / d e v / i 2 c - 1 図 11 コマンドで「 / dev / i2c ☆」を参照した結果 C を使ってみよう Tinker Board では 12C や SPI と いったインタフェースも Raspberry Pi と同じように利用できます。例と して 12c を取り上げておきます。 TinkerBoard のデフォルトでは、 3 番ピンに「 12C チャンネル 1 の SDA 」 が、 5 番ピンに「 12C チャンネル 1 の SCL 」が割り当てられています。 れは Raspberry Pi と同じです。 Tinker Board で「 /dev/i2c* 」を 参照すると、 12C チャンネル 0 ~ 6 ま でのすべての 12C バスのデバイスノ ードが作成されていることが確認で きます ( 図 1 1 ) 。 ューザーがすぐに利用できる 12c チャンネル 1 の SDA と SCL は、 Ti nker Board 上でプルアップ済みで ね Raspberry Pi との互換性を維持 す。 Raspberry Pi では 1.8kQ の抵 はありません。 抗でプルアップされていますが Tin できます。 一方、 GPIO. BOARD については ker Board の 12C は 2.2kQ でした。 GPIO. setmode() の引数として使用 ソースコードの led. py では、 GP できます。 GPIO はピン番号で制御 IO. BOARD を使って Raspberry Pi プルアップされているので、 Tinker との互換性を保っています。 LED の B 。 ard でも外付けのプルアップ抵抗 するので、 p. 55 の表 1 の通りおおむ 0 4 一 '•-D 8 0 フ」 4- 8 0 っ 4 8 0 フ」 4 8 -1 -1 1 よ 1 フ」っ」フ」フ」っ」っ 0 っ 0 っ 0 っ 0 っ 0 4 1 亠っ 0 气 ) 7. -1 「 0 フ′ 9- 1 っ 0 「 / 9- イよ m 7 ′ 0 ・ - ・ 1 よイよ -1 亠よイよっ」っムっ 4 フ」っ」っ 0 っ 0 っ 0 っっ 0 5V 5V GND GP1014 GP1015 GP1018 GND GP1023 G P1024 GND G P1025 GP108/CE0 GP107/CE1 ID SC GND GP1012 GND GP1016 GP1020 GP1021 3.3v G PIO 2/SDA GP103/SCL G P104 GND GP1017 GP1027 GP1022 3.3V G PIO 10 / M OSI G P109/ M ISO GPIOI I/SPICLK GND ID SD GP105 GP106 GP1013 GP1019 GP1026 GND 1 宀つ」っ 0 4- L.n VDD -RESET SDA SCL GND AQM0802 TINKER BOARD 図 12 Tinker Board と AQM0802A を接続する ラスパイマカシン 2017.10 56

2. ラズパイマガジン = Raspberry Pi Magazine 2017年10月号

部」。 用 パワー上 ED 3 ハワ—LEDXI 個 99 抵抗 100C 、 IkQ 、 20kQ x 各 1 個 29 ハワー MOSFET x 1 個 100 AC アダブター xl 個 伽 DC ジャック DIP 化 99 抵抗 10 Q ( 1 W) キット x 1 個 x2 個 高輝度し ED を点灯制御する アダブターの電源は「 DC ジャック 避けて、 100 Q 、 10 Q 、 5 Q の順に LED には高輝度に点灯する「パワ DIP 化キット」を使うと、プレッド 取り替えながら点灯させます。 ー LED 」があります。パワー LED ポードにつなぎ込めます。 今回のように大電流を流す場合 は大電流を流すと非常に明るく点 プログラムは No. 1 の LED の点灯 は、回路の制御用にパワー MOSF 灯できる LED です。例えば、図 1 の した場合と同様のプログラムで点灯 ET を利用します。パワ—MOSFET XPGWHT は 1500mA 流すと、 433 できます ( 読者限定サイトに用意し は前ページのトランジスタの一種 ルーメンで点灯します。 N 。 .1 ( p. 16 ) ている「 power-led. py 」は 5 秒間隔 で、同じようにスイッチとして働き で説明した赤色 LED が約 1 ルーメン で点滅します ) 。 ます ( P25 の図 3 も参照 ) 。電流制 なので、約 400 倍の明るさです。な ◆ 100Q で点灯できたら電流制限用 限用抵抗を 100Q とする場合は、図 おパワー LED は高輝度なため、光 ◆ 抵抗を変更して輝度を上げてみまし 2 のように接続します。パワー LED を直接のぞき込まないように注意し よう。この際、抵抗の定格電力に への配線は、みの虫ジャンパー線 てください。 ◆ 注意が必要です。定格電力とは抵抗 ( p. 14 の図 1 参照 ) を利用します。 パワー LED も通常の LED と同様 ◆ にかけてよい電力の最大値のことで Raspberry Pi には 5V 電源があり に電流制限用抵抗を接続して流す ◆ す。抵抗には 1 / 4W 、 1 / 2W など記 ますが、パワー LED などに大電流を 電流を制限します。 433 ルーメンで 載されています。 流すと電流が不足して停止してしま 光らすには Vf が 3.25V 、Ⅱが 1500mA ◆ 電力は、抵抗にかかる電圧と流れ います。そこで、 5V の AC アダブタ となり約 1.1 Q を接続します。 ◆ る電流をかけ合わせた値です。例え ーから別途電源を供給します。 AC 高輝度でいきなり点灯するのは ば 130 ルーメンを光らせる場合は、 0 明るさと VfsIf 、 5V 電源の場合の 抵抗にかかる電圧が 2. IV 、電流が 十と記載された部分に電源を接続 電流制限用抵抗の関係 、◆ 350mA となり、 0.735W かかること が分かります。一般的に電子回路で 十 利用されている 1 / 4W では許容範囲 0 を超えてしまいます。そこで、 IW 、イ の抵抗を利用することで定格内で 動作させることができます。 今回は 10Q の抵抗に変えて点灯 させましよう。 5 Q にする場合は、 図 3 のように 10Q の抵抗を並列接続 します。電流は二つの抵抗に半分ず つ流れるので、定格も超えません。 電流制限 用抵抗 明るさ 6Q 130 ルーメン 2.9V 350mA 700mA 2.8Q 243 ルーメン 3.05V 325 ルーメン 1000mA 1 .9Q 3.15V 1 .1 Q 433 ルーメン 3.25V 1500mA 大電流を流すと超高輝度で点灯する 図 1 超高輝度で発光する パワー LED 「 XPGWHT 」 ビット経由でÅ c アダブターへつなぐ 安定動作させ るために抵抗 .. . を入れる 十 十 ーと記載された部分に GND を接続 2SK 4017 100 Q 図 3 10C 抵抗から 5Q にする接続図 十 10 Q X 2 6 0 図 2 接続図 ラスパイマガジン 2017.10

3. ラズパイマガジン = Raspberry Pi Magazine 2017年10月号

電子ハツ 25 をす動くつな 利用部品 2 フルカラー LED 99 抵抗 10kQX3 個 x 1 個 28 トランジスタ x3 個 99 抵抗 120C 、 150 Q 、 300 Q x 各 1 個 特集 1 ) フルカプー号 自由なでし ED, を点する フルカラー LED は、赤、青、緑 することで、さまざまな色に点灯で が流れて 3 色の明るさがそろいます。 の 3 色の LED が封入された LED で きます。例えば、赤と青を点灯させ 電子回路が出来上がったら図 4 の す。それぞれの色の発光具合を調節 れば紫になります。強弱を調整して プログラムを実行します。フルカラ 暗い青や明るい黄色にもできます。 ー LED で自由な色で発光させるに 今回利用するフルカラー LED は は、光の強弱を変える必要がありま 0 赤、青、緑の呶 LED が封入され 3 色それぞれのアノード端子を備え す。この場合は「 PWM 」という方 ている ています ( 図 1 ) 。短い端子から順に 法を利用して出力します。 PWM と 緑、赤、青で、一番長い端子は全色 は High と L 。 w を高速に切り替えて のカソードがまとまっています。 出力する方法で、 High となっている このフルカラー LED の Vf は、赤 時間の割合を調節することで明るさ が 2. OV 、緑が 3.6V 、青が 3.6V と緑 が変わります ( 図 5 、 p. 102 も参照 ) 。 と青が GPIO の出力する電圧 ( 3.3V ) 切り替えは高速で、人間の目では常 を超えてしまっています。この場 時点灯しているように見えます。 合、 Raspberry Pi が備える 5V の電 ◆ PWM で出力するには「 pi. softpw ◆ 源で別途回路を作って動作させま mCreate() 」を実行します。この際、 べース ◆ す。 LED を動かす回路をオン、オフ 出力を指定する範囲を決めておきま Raspberry Pi の GPIO に ◆ するパーツとして「トランジスタ」 す。サンプルプログラムでは 0 ~ 100 つなぐ ◆ を利用します。トランジスタは電気 の範囲を指定しています。 ◆ 的なスイッチのようなもので異なる 出力には pi. softPwmWrite() を利 工ミッター 回路を制御できます。 用します。対象の GPIO 番号の後に GND 側につ コレクター ◆ トランジスタは図 2 のような形状 pi. softPwmCreate() で設定した範囲 なぐ 電源側につなぐ ◆ - をしており、 ーこでは 5V 電源をコ 内で PWM の割合を指定します。 図 2 別の回路のオン、オフを制御できる 「トランジスタ」 ◆ - レクター、制御側 (Raspberry Pi の ◆・ GPIO) をベース、 LED のアノード 60 % の出力の場合 ◆ 工ミッターに接続します。べースが 3.3V ー OV と 3.3V Low の状態では電流が流れず、 High を短時間で 切り替える にすると流れて LED が点灯します。 OV ー 接続図は図 3 のようにします。電 消灯している 点灯している ◆ 2 : 3 ◆門 流制限用抵抗は秋月電子通商の推 時間 奨値にしました。これで適度な電流 図 5 高速に High 、 Low を切り替えて出力 に強弱を実現できる PWM アノード ( 緑 ) ( 赤 ) アノード 図 1 自由な色に発行が可能な「フルカラ ー LED 」 9 富 ( 3 す / ハ、«n 120C 300 Q 10kQ 2 C 1815 2SC 1815 25C P1 . softPwmCreate( green_pin, 0 , 100 ) pi . softPwmCreate( blue_pin, 0 , 100 ) PI . softPwmCreate( red_pin, 0 , 100 ) PWM 出力をするよう設定する。 0 ~ 100 の範囲で調節できるよ うにする pi . softPwmWrite( green_pin, 30 ) 各色の出力を 0 ~ 100 の PI . softPwmWrite( blue_pin, 50 ) 範囲で調節する 甲1 . softPwmWrite( red_pin, 10 0 ) 図 4 指定した色で発光させるプログラム「 colo 「 . py 」 ( 一部抜粋 ) 6 を 第 を を を 第 を 第 を を 第 を を を を 第 図 3 接続図 ラスハイマガジン 2017.10

4. ラズパイマガジン = Raspberry Pi Magazine 2017年10月号

、、安価で手軽な無線マイコン「 TWE 凵 TE 」と Raspberry Pi を組み合わせ、自宅のいろいろな場所に温度センサーや、扉の 開閉センサー ( 磁気スイッチ ) を設置しましよう。一定温度を超えたときや扉の開閉時につぶやくマシンに仕立てます。 ( モノワイヤレス齋藤拓史、奥村成吾 ) 自宅のいろいろな場所にセンサー で ) 10 年以上使えるほど省電力で ( 写真 1 ) を使い、センサーを接続し す * 1 。センサーをつないだ無線マイ を設置して、今の状況を調べられる て計測結果を親機へ送信します。 センサー無線ネットワーク。 Raspb コンを自宅内にたくさん置いて、 Ra ここではセンサーとして、温度 erry Pi を使えば、そんなシステム spberry Pi に情報を収集できるよう センサー「 LM61 」と磁気スイッチ も手軽に構築できます。 にしましよう。 「 MC-14AG 」を使います ( 表 1 、図 ただし Raspberry Pi は安価とは TWELITE はいくつかのバリエ 2 、 3 ) 。磁気スイッチは冷蔵庫や玄 いえ、センサーを設置する場所ごと ションがあります。 Raspberry 関などの扉に取り付け、開閉をチェ Pi には無線の親機として、 USB ポ に置くのはコストがかかります。そ ックするのに便利なものです。磁石 こでモノワイヤレスの無線マイコン ートにつなげる USB ドングル版 トワイライト モノスティック * 1 このほか、 32 ビット CPU を用いていて 「 TWELITE 」を活用します。 TWE 「 MONOSTICK 」をつなぎます ( 図 高速処理が可能、標準アンテナで最大 lkm LITE は、 1 台 1500 円くらいから購 1 ) 。子機にはプレッドボードにその と長距離通信が可能、多数の子機を接続可 能といった特徴があります。 入でき、ボタン電池でも ( 間欠駆動 まま差して使える「 TWELITE DIP 」 図 2 子機に温度センサーを取り付けたと 図 3 子機に磁気スイッチを取り付けたと 表 1 部品表 すべて秋月電子通商で購入した。 図 1 USB ドングル版の「 MONOST ℃ K 」 Raspberry Pi に差したところ。 一個数ー価格 分類 2980 円 200 円 250 円 100 円 1620 円 X 2 270 円 X 2 180 円 20 円 X 2 100 円 80 円 x 2 2430 円 ロロ : 親機 MONOST ℃ K 1 LM61ClZ ( 4 個入り ) 子機の温度センサー 1 MC-14AG ( 磁石付セット ) 1 子機の磁気スイッチ 抵抗 IMQ ( 100 本入り ) 1 TWELITE DIP-WA ( 半完成品セミキット ) 2 ブレッドボード E ℃ -801 2 ブレッドボードジャンバーコードセット センサー以外に 1 子機で利用するもの 緑色 LED 2 ( 2 台分 ) 抵抗 680Q ( 100 本入り ) 2 電池ポックス単 3X2 本用 ( フタ付プラスチック・ス 2 イッチ付 ) その他 TWELITE R 1 写真 1 ブレッドボードに差して使える 「 TWELITE D 旧」 37

5. ラズパイマガジン = Raspberry Pi Magazine 2017年10月号

1 #!/usr/bin/env python3 2 # - ☆ - coding: utf-8 - ☆ - 3 import time # sleep のためのモジュールをインポート ( 略 ) 6 def get-line-sensor-data(): 11 def set_motor_speed(left, right) : ( 略 ) 17 def set motor_power(mode): ( 略 ) 22 def get_switch-input(swnum) : 26 # センサー値を正規化するための関数を用意 27 def normalize(), rng): return (V 30 # センサーの値の範囲 なります。 31 left_end_range 32 left_range ライントレースする際、左側の 33 right_range センサーがライン上にあるとき、本 34 right_end_range = ( 500 , 1600 ) 体を左に向ける必要があります。 m a 1 n n a m e のとき、センサー値の差 (left-rig while not get-switch-input(0): # SW0 が押されるまで待機 print("ready") (t) が負の数になります。「 set-mot time. sleep(0.1) or-speed 」に与える引数 (100 + diff, set_motor_power(True) while not get-switch-input(l): # SWI が押されたら止める 100-diff) は左車輪の方が小さく、右 41 # センサー値を取得 車輪の方が大きくなります。右車輪 left end, left, right, right-end = get-line-sensor-data() の方が速く回転することで本体を左 # 内側のニっセンサー値を校正・比較 44 に向けることができます。この「セ # 外側のニっセンサー値を校正・比較 ンサーの差を計算」「車輪の回転速 47 # 校正したセンサー値を合算 度に反映」の行程を繰り返すことで diff = diff_in/2 + diff_out ライントレースを実現しています。 print(diff_in, diff_out) set_m0tor-speed(100*(1 + diff), 100*(1-diff)) 先ほどと同様にラズバイマウスの time. sleep(0.1) # 0.1 秒毎にセンサー値とモーターの回転速度を更新 車輪を浮かせた状態にし、 MOTOR set_m0tor-power(FaIse) SW をオンに倒し、次のように raspi 図 1 1 raspimouse linefollower4. py mouse—IinefoIIower3. PY を実行しま の校正 ( キャリプレーション ) もし 落下しないよう十分に注意しましよ す。 て、もう少しトレースの精度を向上 う。ったないながらもトレースがで させます。 きることを確認できたと思います。 実行権限を付与 $ chmod + x raspimouse—linefoll 校正のために raspimouse-linefol 場合によってはカープを曲がり切れ ower3. py lowerl. py を使用してセンサー値の なかったかもしれません。ライント Python のコードを実行 . /raspimouse—IinefoIIower3. P ばらっきを把握しましよう。ます、 レースができている ( ロポットがト y ロ ラズバイマウスのセンサー四つをコ レースしようとしている ) ことを確 ready ready ース上の白い部分に合わせ、 raspi 認したら、 SWI を押してラズバイマ ready mouse—linefollowerl. PY を実行しま ウスを停止させます。 す。そのとき端末に出力された四つ のセンサー値の最大値をメモしてお トレースの精度を向上させる 実行後、 HDMI ケープルやキー きます。 ボードを外します。コースの黒い線 raspimouse linefollower3. PY で は内側の二つのセンサーの値をその の上にラズバイマウスを置き、 SWO ままステッピングモーターの回転速 を押しましよう。ラズバイマウスが 度へ反映していました。今度はセン 走り出します。机の上にコースを設 サーを四つとも使用し、センサー値 置している場合はラズバイマウスが 右側のセンサー の位置 左側のセンサー の位置 ( 黒い線の上 ) ( 白い紙の上 ) ・ E ・ ec E 第・ ( 嘴 E ・を C 町 ( ORPO 舩引 ON 第ゞ 図 10 コース上のセンサーの位置 - rng[0]) / (rng[l] - rng[0]) = ( 240 , 640 ) = ( 650 , 1350 ) = ( 550 , 1400 ) メモした値を代入 diff_in = normalize(left, left_range) - normalize(right, right-range) diff out = normalize(left-end, left end_range) - normalize(right-end, right-end-range) 1 . /raspimouse—linefollowerl . p ザ ラスパイマガジン 2017.10 0

6. ラズパイマガジン = Raspberry Pi Magazine 2017年10月号

回、 G 0 の PWM 出力 で、電圧を High にして 500 マイク PWM 出力に設定してみましよう。 ロ秒待機、電圧を Low にして 500 マ デジタル出力のときは OUTPUT で イクロ秒待機します。ここは繰り返 したが、 PWM 出力は PWM OUTP し実行する部分なので、先頭にイン UT と指定します。 デント ( ここではスペース 2 個 ) を 忘れすに入力してください。 Leafpad などのエデイタでプログ ラムを入力して保存します ( プログ ラムはすべて p. 146 に示す読者限定 サイトに用意 ) 。次のように実行す ると * 1 、 High/Low が繰り返されて 次に、 PWM 出力を細かく設定し を感じられたでしようか。デジタル 圧電スピーカーから lkHz の音が聞 ます。詳しくは後述するので、 出力をループ実行したときと比べ こえます ( 止めるときは℃ trl + c] では書いてある通り入力してくださ て、 PWM 出力は音 ( 周期・周波数 ) を入力 ) 。 い。この中の pwmSetClock() で指 を安定して出せます。また、プログ 定している 100 が High / Low の周期 ラムが止まっていても音を出し続け です。 100 だと lkHz で、 200 だと ることができるのが特徴です ( 別掲 500HZ になります。 己事「簡単に音を鳴らせる『ソフト ピーという機械音をよく聞いてみ ウェア TONE 』」も参照 ) 。 ると、時折、引っかかりのような雑 〉 > > pi . pwmSetM0de()i . PWM_MODE MS ) 音が出ていると感じるはすです。ラ PWM とは > > > pi . pwmSetRange(192) ズバイの Raspbian 上ではさまざま > > > pi . pwmSetCIock(100) ロ PWM (Pulse Width Modulati なプログラム ( グラフィックス表示 (n) をもう少し正確に説明すると、 やネットワーク処理など ) が同時に そして、次の通り PWM 出力を設 High/Low を一定の間隔で繰り返し 実行されています。 Python プログ 定すると圧電スピーカーから lkHz て High の時間を変化させることを ラムの実行中に、ほかのプログラム の音が聞こえます。さきほどのルー いいます。パルス幅を変化させて、 が割り込むことから、このように聞 プ実行と比べて、安定した lkHz にな LED の明るさを変えたり、サーポモ こえてくるのです。継続的に精度良 っていることが分かると思います。 ーターを制御したりすることができ く、 lkHz で High/Low にはなりま ます。 せん。 〉〉 > pi . pwmWrite(18, 96 ) ロ 出力する信号は、 High/Low を繰 り返す時間 ( 周期 ) と High と Low PWM 出力で音を出す 音を止めたいときは、次の通り の比率 ( デューティー比 ) の二つで そこで、もっと精度が高い PWM PWM 出力を 0 にします。 決まります。例えば、周期が 1 秒で 出力を出してみましよう。結線はそ デューティー比が 10 % の場合は図 のままで Python のプログラムを変 更します。 * 1 W ⅳ ingPi でエラーが出る場合、「 sudo apt update 」「 sudO apt upgrade 」を実行。 Python3 を立ち上げて、 GP1018 を import wiringpi as pi pi . wiringPiSetupGpio() pi . pinMode(18, pi . OUTPUT) w h i 1 e T r u e : p i . d i g i t a 1 W r i t e ( 18 , p i . H I GH ) pi . de1ayMicroseconds(500) p i . d i g i t a ] W r i te ( 18 , p i . LOW ) pi . de1ayMicroseconds(500) 図 3 圧電スピーカーを鳴らすプログラム 「 buzzer. py 」 $ sud0 python3 ロ 〉〉 > i mp 0 r t w i r i n g p i a s p i > > > pi . wiringPiSetupGpio() ロ 0 > > > pi . pinMode(18, pi . PWM_OUTP UT) $ sud0 python3 buzzer . py ロ > > > pi . pwmWrite(18, 0 ) デジタル出力と PWM 出力の違い 簡単に音を鳴らせる「ソフトウェア TONE 」 WiringPi ライブラリには、音 ( トーン ) を出力するソフトウ工 PWM 」と同じです。例えば、電話の待ち受け音 (440Hz) を ア TONE があります。 出すには次のように指定します。 ソフトウェア TONE では、 softToneWrite 関数にピン番号、周 pi . softToneCreate(18) 皮数を指定すると、その周波数の音が出力されるので、周期を pi . softToneWrite(18, 440 ) 十算する手間が減ります。タイミングのズレは「ソフトウェア ラ ( イマガジ - 01 10 103

7. ラズパイマガジン = Raspberry Pi Magazine 2017年10月号

" ラズバイ風 " ポド種を伏検証 特集 2 ・ AP 朝し。 n を p は ( 5Y5 い m を ) を nSp 1 、 0.2 」・ v ・ⅱは 80n ( ト m k R を 5 猷し ( “ nsp 池 0 「・ 1.0.2 te “ 0 ト材 ozi ド i 爬「 ox 5u05 d 02 」ヨ 5 興 ◆①・トは ps : / / webk 0 「 0 / pe 朝 / ゝ unsp - 1.02 / sun 印 id 一を 0.2 / 代 5 リ 5 上しに「 v を " sunsp 池 e 信 1.0.2 : Content Version: sunspide 「 -1.0.2 h ps : / / ebk 化 0 「 0 / p f, / Sunspid -1.0.2/sunspid 等 -1.0.2 / 「区上【 m に % 7B % 2 % 22 : % 20 % 2 お unspid -1.0.2 % 22. ( 施 u ( 20k 介 1 ⅸけ爬 5 ⅵ URLf 研ね t 部 ( omp 部 ison 、 ) 菊 compare another runoaste 0 saved 爬 su に URL け text れ e に and press enter: ー・一 SunSpider 1.0.2 JavaScript Benchmark ResuIts 図 3 Raspbian でグラフィックスのべンチマークテスト「 glma 「 k2 」を実行したところ 内の Ubuntu Server 16.04 LTS マシ ライプラリをイン ンを使いました。次のように iperf を ストールします。 サーバーモードで起動します。 RESULTS 作を誕湾 95 、 ( If 上 d 日に 2 ⅵ te 「 v 15 ) 4778. 5 + / ・ 1. 為 559. 物 5 + / ・ 2. 205. % 5 + / - ~ 1573 第 + / - 1. ハ 「 ay 「ヨ ( を : 195.8 を 5 + た 6. 68 合 .6 第 5 り - 3. ( を 55 : 191 第 5 り - 11. fannkuch: 262. 5 り・ 1. 筑 117 コ第 5 + / - 1. 110. 物 5 + / ・ 1. nS ー e を : bitops: 北・ bits - 朝 - b れ 2 : 浦 .5 り - 14.5 、 blts-in-byte: 189.4 + / - 1. b ⅱ・聞 d : 45 工 5 + / ・ 2. 為 れ 51 を、 e ・ bItS : 163.9 第 5 り - 1. ( 「 01f1 を : 乃 . % 5 り - 2. 義 13. % 5 + / ・ 2. 「を ( 0 1 を : ( 0 料 tO : 2 】 3.6 第 5 + / - 工ハ 76.3 第 5 り - 1. ハ 5 れを 1 : 67. 物 & り・ 1.6 、 378 は第 5 + / - 1. ハ 234.9 第 5 り - 2 . 173.3 第 5 + / ・ 1. 68.9 第 5 り - 3.1 、 ~ 42 .6 気、り - 1.5 、 1. 16 コ、 63.1 + / ・とハ 63.1 + / - 2. ハ 図 4 SunSpider 1.0.2 10t 誂 : $ s u d 0 a p t u p d a t e ロ $ s u d 0 a pt i n s t a ⅱ g i t b u i 1 d - e s s e n t i a 1 pkg-config g + + 1 i bxl 1 - dev 1 i bg 1 1 - me s a - d ev libjpeg-de v 1 i b p n g 1 2 ー d e v ロ $ i pe r f - s ロ クライアント側で次のように実行 すると TCP の帯域を検証できます。 fornt-tofte : fO t 市 : nath : 「ⅱ誂 - 新 5 : 5 ( t 「飜・ norm : $ i p e r f - c s e r v e r ロ ( s e r v e r はサーバーのホスト名または I P アドレス ) 今回は次のようにクライアント側 続いて GitHub で実行して、 100M バイトのデータ からソースツリーを入手します。 を読み込むことでサーバーとの帯域 を調べることにしました。 $ git clone https://github . com / g 1 ma r k 2 / g ] ma r k 2 . g i t ロ 0 SunSDider 1.0.2 」自 5 ( … SunSpide 「 1 . O. 2 と Octane 2. O SunSpider 1.0.2 はオープンソー スの HTML レンダラー WebKit が 公開している * 1JavaScript の性能 を調べるべンチマークです ( 図 4 ) 。 glmark2 にはビルド用の waf とい 総合性能を実行時間という形で知 グラフィックス用の mark2 うスクリプトが同こんされているの ることができます。実行時間が短い OpenGL のべンチマークテスト gl で、それを使って簡単にビルド、イ ほど高速ということです。 mark2 は、 Ubuntu ではリポジトリ ンストールできます。 一方、 Octane 2.0 は米 Google 社 ーから入手できます 00range Pi PC のプラウザー Chromium プロジェク 2 、 PINE A64 では Ubuntu 16.04 を トが公開している JavaScript べンチ 用いたので、リポジトリーから入手 マーク * 2 で、結果はスコアで示さ した glmark2 を利用しました。 れます ( 図 5 ) 。 一方、 Raspberry Pi 3 で利用して いすれもプラウザーで開いて実行 いる Raspbian と、 Tinker Board で 利用している TinkerOS は、リポジト 今回は、この方法で Raspberry Pi ーに glmark2 がないためビルドし 3 と Tinker Board でも glmark2 をテ て導入します。ます必要なツールと ストしました ( 図 3 ) 。 $ i p e r f - c s e r v e r - ] 100 M ロ $ cd gImark2 ロ . /waf configure 0 r s=x 11 - g 1 ロ $ . /wa f b u i 1 d ー j 4 $ sudo . / w a f i n s t a ⅱロ - w i t h ー f ] a v * 1 https://webkit.org/perf/sunspid e 「 - 1 ℃ .2/sunspider-I ℃ .2/driver. html * 2 http://chromium.github.io/octane/ ラスパイ ・ジン 2017.10 47

8. ラズパイマガジン = Raspberry Pi Magazine 2017年10月号

電波時言 t に電波をうプ 部屋のでも正確な時間を case 4 20us # i n c 1 u d e く s t d i 0 . h > # 1 n c 1 u d e く s t d 1 i b . h > #include く bCm2835. h 〉 #include く signal . h> / / 7 番ピンを使う #define PIN RPI_V2_GP10_P1_07 i n t ma i n ( i n t a r g c , c h a r ・☆☆ a r g v ) i f ( ! bcm283 5_i n i t ( ) ) r e t u r n 1 ; 写真 2 samplel 実行時の G 曰 04 の出力 オシロスコープで見たものです。 実を言うと usleep はそれほど高い 精度を持っていません。なので、 us leep では、このように 40kHz を発信 するのは、ほば不可能ということが 分かります。 高精度の関数で再挑戦 usleep の代わりとして、 BCM2835 ライプラリに bcm2835_delayMicro seconds() という SoC の機能を用い た高精度ディレイ関数が用意され ています。この関数は usleep より高 い精度が期待でき、 40kHz 程度の信 号の生成も可能かもしれません。そ れを使ってみましよう ( 図 3 ) 。 samplel. c と同じようにコンパイ ルし実行します。 bcm2835_gpio_fse1 (PIN, BCM2835 GPIO FSEL_OUTP); wh i 1 e ( 1 ) { bcm2835_gpiO—write(PIN, H I GH ) : u s 1 e e p ( 12 ) : bcm2835—gpiO—write(PIN, LOW) : u s 1 ee p ( 12 ) ; 図 2 samplel. c るだけです。 次のように、 samplel. c をコンパ イルしてください。 cd bCm2835 - 1 . 52 ロ . /configure ロ make ロ s u d 0 ma ke i n s t a 1 1 ロ これで、ライプラリがインストー ルできました。 出力波形をオシロで見ると・・・ usleep を使って 40kHz を生成で きるかどうか確かめてみましよう。 $ sud0 . /samplel ロ 図 2 が usleep を使うサンプルで す。 GPIO はどれを使ってもいいの 7 番ピンの出力はどうなるでしよ ですが、今回は 7 番ピン (GP104) うか ? 写真 2 は samplel 実行時に を使います。先にインストールした GP104 をオシロスコープで見たもの BCM2835 ライプラリでは、「 RPI です。オシロスコープは、韓国 sof 写真 3 が実行結果です。 usleep に V2_GPIO_Pl_07 」という定義を使 tDSP 社の「 SDS200 」という PC に 比べるとだいぶましになり、パルス って GP104 ( 7 番ピン ) を制御でき 接続するタイプを使いました。 幅はおおよそ 12 ~ 13 秒になり、 ます ( p. 31 の別掲記事「 BCM2835 写真 2 の横軸は、点線の目盛り 1 約 40kHz が得られました。 ライプラリの使い方」参照 ) 。 マスが 20 秒です。目盛りを数えて プログラムは簡単です。 bCm2835 みると、パルスの幅がだいたい 4 ~ * 1 60kHz でもいいのですが周波数が高 いほど難しくなるので本稿では 40kHz にしま -gpio-fsel() 関数を呼び出して 7 番ピ 5 マス程度、つまりパルス幅は 80 ~ す。市販されている電波時計は、東日本と西 ンを出力に設定して、ハイとロー ( 1 100 秒程度です。従って約 5kHz 日本のどちらでも使えるように両方の周波数 に対応しています。 と 0 ) を 12 秒ごとに繰り返してい にしかなっていません。 $ gcc samplel . c ー 1bCm2835 ー 0 S a mplel ロ 実行には ro 。 t 権限が必要です。 $ gcc samp1e2. c -1bCm2835 - 0 S a mpIe2 ロ $ s u d 0 . / s a mp 1 e 2 ロ ラスパイマガジン 2011.10 特別付録 29

9. ラズパイマガジン = Raspberry Pi Magazine 2017年10月号

拡張ポード HAT を作ろう、 LED や LCD が差すたけで動ぐ This script comes with ABSOLUTELY no warranty. Continue only if you know what you are doing. This will attempt to talk to an eeprom at i2c address 0X50. Make sure there is an eeprom at this address . -r - t = 24C64 -f=image . eep ロ $ s u d 0 . / e e p f 1 a s h . s h 8192 bytes ( 8 . 2 (B) copied, 1 .22469 s, 6 . 7 kB/s 16 + 0 records out 16 + 0 records in Reading . DO you wish tO continue? (yes/no): yes Done . 図 10 シリアル EEPROM の中身を読み出す が、異なる容量を使っている場合 は、そのシリアル EEPROM に合っ たタイプを指定してください。「 -f = 」の後ろに書き込むシリアル EEPR OM イメージのファイル名を指定し ます。 シェルスクリプトを実行すると本 当に書き込んでよいのか ( このスク リプトに保証はないと ) の確認を 求めてくるので、「 yes 」と入力し て CEnter] キーを押してください。 書き込みに成功すると、最後に「 Do ne. 」と表示されます。 書き込まれた内容をチェック これだけだと本当に書き込めてい るのか、少し不安になるかもしれま せん。また、将来何らかの事情で ee prom—settings. txt を失ってしまう ことも起こり得ます。そこで、本当 に書き込まれているのかをチェック する意味も含めて、シリアル EEPR OM の中身を読み出し、 eeprom_se ttings. txt に戻す方法も紹介します。 読み出しにも eepflash. sh を使い ます。図 10 のように読み出してくだ さい。これでカレントディレクトリ ーに「 image. eep 」というイメージ ファイルが作成されます。ここで使 用しているのは 64K ビットのシリア ル EEPROM なので、 image. eep の サイズは 8K バイト ( = 64K ビット ) になります。 このイメージファイルから、設定 のテキストファイルを復元します。 次のように「 eepdump 」コマンドを 実行してください。 image. eep から「 image. txt 」カゞ 作成されます。 image. txt の中をの ぞいて、先に作成した eeprom_sett ⅲ gs. txt と同じ内容になっているこ とを確かめましよう。これで確実に HAT 用のシリアル EEPROM が作成 されていることが確認できます。 シリアル EEP 日 OM の機能を確認 では、ラズバイを再起動してくだ さい。再起動後に、 HAT 用シリア ル EEPROM の設定通りに各 GPIO ピンが動作していることを確認して いきます。 まず、 GP1014 および GP1015 が 出力モードになっていることを確認 します。確認の方法はいくつかあり ますが、簡単なのは「 sysfs 」を使 う方法です。カレントディレクトリ ーを「 /sys/class/gpio 」に切り替え ましよう。 ます、 GP1014 をェクスポートし て現在のモードがどうなっているか を調べます。図 11 のように「 gpi014 / . /eepdump image . eep image . tx t ロ $ c d / sy s / c 1 a s s / g p i 0 ロ $ echo 14 〉 export ロ $ cat gpi014/direction ロ 0 u t 図 11 G 曰 014 のモード確認 direction 」の中がデフォルトのⅲか ら out に変わっているはずです。 GP 1015 も同じように「 gpi015/direct ion 」が out になっていることを確認 します。このように、 HAT 用のシ リアル EEPROM によって起動時設 定が変わったことが確認できます。 一方、 GP105 が汎用クロック出力 になっているかどうかは、オシロス コープやロジックアナライザーがな いと確認は困難です。例として GP 105 をオシロスコープで観測した様 子を画面で示しておきます。デフォ ルトでは、図 1 2 のように 800HZ の クロックが、 GP105 から出力されて いました。 Device Tree Overlay を含める 以上のように、 GPIO 端子のモー ドや Alternative Function を、シ リアル EEPROM の設定に従って起 動時に変更できることが分かりまし た。ですが、 GPIO 端子のモードだけ であれば、スクリプトなどから簡単 に設定できるので、わざわざ HAT の * 4 「 https://www.raspberrypi.org/wp- content/uploads/2012 / 02 / BCM2835- ARM-PeripheraIs. pdf 」の 1 02 ページを参 照してくださし、。「 http://elinux.org/RPi_ BCM2835 ー G 曰 0 」にもあります。 ラスパイマガジン 2011.10

10. ラズパイマガジン = Raspberry Pi Magazine 2017年10月号

サイコロの目 1 : 1637 : 00000000 : 174 : 728 : 1013d2a : 2400 : 0000 : 0000 : 1128 : 0559 : X : 0082 : - 008 : - 068 : : 1642 : 00000000 : 174 : 729 ; 1013d2a : 2400 : 0000 : 0000 : 1138 : 0562 : X : 0082 : - 008 : - 068 : : 1647 : 00000000 : 174 : 730 ; 1013d2a : 2395 : 0000 : 0000 : 1138 : 0562 : X ; 0083 ぃ 008 ぃ 069 : サイコロの目 2 : 1690 : 00000000 : 183 : 738 : 1013d2a : 2400 : 0000 : 0000 ; 1111 ; 0554 ; X : 0073 ; 0003 : 0075 ; : 1695 : 00000000 : 183 : 739 : 1013d2a ; 2385 ; 0000 : 0000 : 1138 : 0562 ; X : 0074 : 0004 : 0074 : : 1700 : 00000000 : 183 : 740 ; 1013d2a : 2395 : 0000 : 0000 : 1138 : 0562 : X : 0074 : 0003 : 0074 : 図 14 各出目の加速度センサー情報 PI -7 図 13 サイコロキャラメルの箱に 2525A を入れたところ ■サイコロの目「 1 」の場合 X Y 情報収集 1 回目 ; 0082 ; -008 情報収集 2 回目 ; 0082 ; -008 情報収集 3 回目 ; -008 ; 0083 平均値は -008 平均値は -068.3 ・・ 平均値は 0082.3 ・・ 基準値は 0080 基準値は -010 基準値は -070 基準値をベースに前後 50 の幅を有効範囲値とする 表 2 部品表 よって、サイコロの目「 1 」の場合の有効範囲値はそれぞれ ブレッドボード 秋月電子通商 130 円 1 P95155 X の有効範囲値 : 0030 から 0130 ( 基準値 : 0080 ) 抵抗 680C から 1.2kQ 秋月電子通商 100 本 100 円 7 日 -25681 Y の有効範囲値 : 0040 から一 060 ( 基準値 ー 010 ) LED ( 緑 ) 秋月電子通商 Z の有効範囲値 : ー 020 から一 120 ( 基準値 . ー 070 ) 120 円 6 ト 11656 LED ( 赤 ) 秋月電子通商 20 円 1 い 1655 ブレッドボード用 図 15 有効範囲値の決定方法 秋月電子通商 10 本 8 P93471 330 円 ーケーカレ ( オス - メス ) ブレッドボード用 350 円 秋月電子通商 10 本 1 P92935 ケーカレ ( オス - オス ) きますが、万人向けではないでしょ 報から読み取 を合計 1050 円 う。 2525A は電池ホルダーの金属が ります。その情 むき出しなので、そのまま何かに取 報を基に、 Raspberry Pi の GPIO を 値がすべてばらけるはずです。 り付けるとショートする危険性があ 利用してサイコロの目を LED で点 収集した情報から各目が出たと ります。電気を通さない素材を利用 灯させます。 きの有効範囲値の幅を決めます。サ するなど、ショートしないように細 イコロの目「 1 」は図 1 5 のようにし サイコロの目の情報を収集 心の注意が必要です。 ます。 1 ~ 6 のそれぞれの値を算出 各サイコロの目が出たときのセン そこで手軽なケースがないか考え してください。これらの値を後ほど てたどり着いたのが、前ページの図 サー情報をあらかじめ収集する必 Python スクリプトに設定します。 12 のサイコロキャラメルの箱です。 要があります。 1 から 6 の面を上に 2525A がピッタリ入るサイズで、 して順番に出力結果を収集します。 2525A とラズバイを連携させる れを利用しない手はないでしよう。 2525A は定期送信をするモード 0 ニコニコサイコロのプログラムを 2525A は箱の中に斜めに入れ、な にしておきます。親機では cu コマ 実際に動かしてみましよう。まず るべく重さの偏りが出ないように収 ンドを実行し、 2 ~ 3 回情報が表示 2525A のモードは Active/Inactive めました。隙間はティッシュなどで されるのを待ちます。 の 8 に変更します。サイコロを振り、 埋めて、 2525A が箱の中で暴れない 1 から 6 までの情報を収集すると 目が出たらセンサーデータが lnac ⅱ ようにします。これで「ニコニコサ 図 14 のようになります。必要な情 ve ( 非活動 ) の ID 付きで送信され イコロ」の完成です ( 図 13 ) 。 報は X ; 以降の三つの数字で、それぞ てきますので、先ほど決めた有効範 出来上がったニコニコサイコロを れ X 、 Y 、 Z 軸方向の値です。箱の 囲値から出目を計算します。 振り、出た目を加速度センサーの情 中へ斜めに入れていれば、三つの数 筆者が作成した Python スクリプ 7 本の GP ℃と GND につなぐ PI -11 Z ; -068 ; ; -068 ; ; -069 ; 3 回の平均値を一の位で 四捨五入し基準値とする PI -12 ー P 1 -18 図 17 ニコ ニコサイコ ロの回路図 ー PI -20 GND 備考 ラスパイマカシン 2017.10 特別付録