ラズバイ電子工作 - 基礎からレ ( り学 0.5m ~ 2.4ms テユーティー比 4.8V 表 3 サーポモーター制御の PWM 信号の設定値 指定可能な最小値 分周値 2 0.02 x 19200000 / 2 192000 範囲 設定値 ( -90 度 ) 192000 x 0.5 / 20 4800 192000 x 2.4 / 20 設定値 ( 90 度 ) 23040 数と pwmSetMode 関数で次のよう に初期化します。 補足説明 項目 20ms (50Hz) PWM 周期 図 8 サーポモーター SG -90 の回転角度指示 データシートより引用。 ューティー比を変更するには softP wmwrite 関数を呼びます引数は softPwmWrite 関数の引数をいろ ピン番号、設定値です。設定値は いろ変えて、 LED の明るさが変化す $ sudO python3 (softPwmCreate 関数の初期値と同 > > > import wiringpi as pi ロ ることを確認してください。 じ ) 範囲にデューティー比を掛けた > 〉〉 p i . w i r i n g P i S e t u p G p i 0 ( ) ロ 値です。 pinMode 関数の引数はピン番号、 ハードウェア PWM で LED を点灯 デューティー比を 3 % から 10 % に 入出力モードで、第 2 引数に PWM ー 次はハードウェア PWM を使って 変更するときは 200X0.1 = 20 を指定 OUTPUT を指定してハードウェア みましよう。 します。以下のように実行してみて PWM を有効にします。 pwmSetMo ハードウェア PWM を pinMode 関 ください。 de 関数でハードウェア PWM の 2 種 類のモード ( バランスモードとマー クスペースモード ) を選択します。 周期とデューティー比を指定した 使い方をするときは PWM-MODE_ MS を指定します ( バランスモード はデューティー比のみで動作させ るモードで、アナログ出力を模擬す 回路図 るときに使います ) 。 サーポモーター SG-90 0 20 ) ロ > > > pi . softPwmWrite(18, 0 一三 配線図 5 [ 此 !d ん qd528 Z ・い田叩 E !d S B 2 x 0 旧 9 0 0 Raspberry Pi 3 三 E 0 5V GP ℃ 18 GND > > > pi . pinMode(18, pi . PWM_OUTP UT ) ロ > 〉 > pi . pwmSetMode()i . PWM_MODE MS ) ロ Vcc PWM GND 出力 次に周期を pwmSetClock 関数と 図 9 ラズバイとサーポモーターの配線図と回路図 import wiringpi as pi pi . wiringPiSetupGpi0() 、一ハードウェア PWM を有効化 pi . pinMode(18, pi . PWM—OUTPUT) ーマークスペースモードに設定 pi . pwmSetMode()i . PWM—MODE—MS) «- 一分周値を 2 に設定 pi . pwmSetCIock(2) ー範囲を 192000 に設定 pi . pwmSetRange(192000) ヤ -90 90 , 90 -90 を繰り返す w h ⅱ e T r u e : fo r i i n 1 i s t ( ra n g e ( ー 90 , 9 0 , 10 ) ) + 1 i s t ( ra n ge ( 90 , ヤ角度に応じたデューティー比に変更 p i . pwmW r i te ( 18 , i n t ( ( ( i + 9 0 ) / 180 ☆ ( 2 . 4 、一 0.2 秒待機 pi . de1ay(200) 図 10 サーポモーターを制御するプログラム ( se Ⅳ 0. py ) - 10 ) ) : - 9 0 , - 0 . 5 ) + 0 . 5 ) / 20 ☆ 192 00 0 ) ) ラスパイマガシン 2011.10 106
case 3 ー G P 1 0 C LR = 0x 1 F くくた 明していきます。 くく 2 2 : GPIO_CLR = u s 1 ee p ( 1 ) : G P I O_S E T u s 1 e e p ( 1 ) ; G P 1 0 S E T 1 3 1 くく くく くく 22 : 7 : 2 2 : u s 1 e e p ( 2 0 ) : G P I O_C L R = 1 た 10 ( D B4 - 7 ) と GP 10 11 ( (S) をクリア 2 2 ( E : イネーブル信号 ) = 0 7 ー 10 ( DB4 - 7 ) に 8 ビット接続設定出力 11 ( RS ) 0 / / イネーブル信号 = 1 G P 1 0 G P 1 0 G P 10 G P 1 0 イネーブル信号 = 0 / / 十分なウェイト ( 20 s ) LCD の接続モードは、 LCD 内部 ファンクションレジスタに値をセッ トして設定しますが、 SC1602 では 起動時に 3 回、ある程度のウェイト を置いて 8 ビット接続モードに設定 後、改めて 4 ビット接続モードに設 定するという手続きが必要になりま す。この手続きは無駄なようです が、 LCD 内部のコントローラーを初 期化する意味があり、欠かすことが できません。 8 ビット接続モードに設定するに はファンクションレジスタに 0X30 を書き込みます。ただし、本稿の例 ではデータバス下位 4 ビットは GND に接続しています。このため下位 4 ビットは 0 で固定なので 3 を書き込 めばよいわけです。実際の設定は図 1 0 のような手順になります。 まず、 GPIO 7 ~ 10 (DB4—DB7) と GPIO 11 (RS) をクリアします。 GPIO 22 (E) もクリアしておきま す。その後、 GPIO 7 ~ 10 (DB4— DB7) に 3 を出力し、 GPIO 11 (RS) はクリアのまま維持します。 RS が 0 ならばファンクションレジスタへの 書き込みになります。 その状態で、イネープル信号 (GP IO 22 ) を 1 にし十分なウェイトを 入れた後、イネープル信号 (GPIO 22 ) を 0 に戻します。これでファン クションレジスタに 0X30 が書き込 まれ、 8 ビット接続モードに設定さ れます。 この操作を都合 3 回行い、その上 でファンクションレジスタに 0X20 図 10 8 ビット接続モードへの設定 # i n c 1 u d e く s t d i 0 . h > LC D_I n i t ( ) : i nt ma i n ( VO i d ) #include "lcd—util . h" r e t u r n 0 : LCD_PutString("He110, Raspberry" ) : LCD_SetCursorPos(I,0); LCD_PutString("He110, Wor1d" ) : 図 11 LCD にサンプル文字を表示するプログラム日 cdtest. c 」 を書き込めば 4 ビット接続モードに 切り替わります。 4 ビット接続モードに切り替えた 後は、ファンクションレジスタへの 書き込みや、キャラクターレジスタ への書き込みは上位 4 ビット、下位 4 ビットの順で書き込みます。実際 に文字を表示する前に、カーソルの 設定などをする必要があります。 れらについては付属マニュアルを見 てください。 LCD を初期化するコードは 、ⅱ冗 者限定サイトに用意した「 lcd-util. h 」の LCD-Init() 関数を見てくださ い。前述の手順で 4 ビット接続モー ドに設定した後、カーソルなどを設 定しています。 ファンクションレジスタを設定す る際には、それぞれの設定の間に us leep() 関数を使って適当なウェイト を挿入しています。設定する内容に よってウェイトの下限値がマニュア ルに指定されていますが、本稿では かなりの余裕を持ったウェイトを入 れるようにしています。 最も大きなウェイトが必要なのは LCD 表示クリアのコマンドで、 1.5 ミリ秒以上のウェイトを入れるよう に指定されています。 lcd_util.h で定義した LCD-Wri te() 関数は、 4 ビット接続モードに切 り替えた後に使う関数で、 LCD に対 して 4 ビットモードで書き込みをし ます。上位ビット、下位ビットの順 で書き込んでいることが分かると思 います。 LCD_PutChar() 、 LCD—PutStri ng() はそれぞれ LCD に文字を表示 する関数です。 LCD_Write() に対し て RS ビットを 1 にして書き込むとキ ャラクターレジスタにデータが書き 込まれ、 LCD に文字を表示できます。 それでは、この lcd ー ut ⅱ . h を使っ て文字を表示するサンプルを図 1 1 に示します。次のようにしてコンパ イルし実行してみてください。 ラスパイマガジン 2017.10 特別付録
" ラズバイ風 " ポを大検証 特集 2 CPU 性能で PINE A64 が上 図 7 は、 UnixBench の中から CPU 性能を見る「 Dhrystone 2 」と「 Wh etstone 」の lndex をグラフにしたも のです。 Dhrystone 2 が整数演算、 Whetstone が浮動小数点演算です。 ここでも最下位は Raspberry Pi Zero W ですが、これは特筆すべき ことでもないでしよう。 Raspberry Pi 3 、 PINE A64 、 Orange Pi PC 2 の CPU コアは同一でクロックが異 0 200 400 600 800 1000 なるのみですが、 Raspberry Pi 3 と ・ Raspberry Pi Zero W ■ Raspberry Pi Zero ・ Tinker Board ■ PINE A64 2G バイト ・ PINE A64 IG バイト■ Orange Pi pc 2 ■ Raspberry Pi 3 ほか 64 ビットの 3 プラットフォーム 図 8 Un ⅸ bench で見たファイルシステムの性能 との間には 2 倍以上の大差がついて しまいました。これも Raspberry Pi 3 のシステムが 32 ビットであること が大きな原因になっています。 方、 Orange Pi PC 2 は PINE A64 に比べて 100MHz ほど CPU クロ ックが低いですが、 Dhrystone 2 と Whetstone のスコアは PINE A64 に 対して健闘しているようです。 CPU コアは同一なのでスコアの原因はな んともいえませんが、 Orange Pi PC 2 の CPU 性能は PINE A64 に引けを 取らないといえそうです。 Tinker Board は Raspberry Pi 3 0 200 400 600 と同じ 32 ビット OS ですが、 Raspber 800 1000 1200 1400 1600 1800 ■ Raspberry Pi Zero W ■ Raspberry Pi zero ■ Tinker Board ・ PINE A64 2G バイト ry Pi 3 と比べて Dhrystone 2 で約 1.2 ■ P 爪 EA64 IG バイト•Orange Pi PC2 ■ Raspberry Pi 3 倍、 Whetstone で 123 倍です。 CPU 図 9 そのほかの Un ⅸ Bench の結果 性能が高いことがうかがえます。 テストしています。 よう。 Orange Pi PC 2 と PINE A64 ファイル処理でも大差 結果の傾向は 4 種類のテストとも は前者の方がクロックが低いことが 図 8 は Byte UnixBench からファ に似通っており、おおむね Raspbe スコアに現れ、 PINE A64 の IG バ イルシステムの性能に関わるファイ rry Pi Zero W 、同 Zero 、 Raspber イトと 2G バイトの違いは確保でき ルコピー 3 種と Excel Throughput ry Pi 3 、 Tinker Board 、 Orange Pi るバッファーサイズで違いが出たの ( ファイル実行のスルーブット ) の PC 2 、 PINE A64 / IG バイト、同 2G かもしれません。 lndex 値をグラフにしたものです。 バイトの順で性能が高い結果になり 図 9 は残る Byte UnixBench のテ すべてのプラットフォームはストレ ました。 スト項目をまとめたものです。おお ージとして microSD カードを使用 Raspberry Pi 3 や Tinker Board よその傾向としては RaspberryPi しており、今回は条件をそろえるた は OS が 32 ビット環境であること Zero W 、同 Zero 、 Raspberry Pi 3 、 めに同じ microSD カードを使って が、ここでも足を引っ張ったのでし Tinker Board 、 Orange Pi PC 2 、 PI FiIe Copy 4096 bufsize 8000 maxblocks File Copy 256 bufsize 500 maxblocks FiIe Copy 1024 bufsize 2000 maxblocks Execl Throughput 1200 System CaII Overhead ロロロ口ロ己 、ロゴロロロ ロロ Shell Scripts ( 8 concurrent) Shell Scripts ( 1 concurrent) Process Creation Pipe-based Context Switching Pipe Throughput ラスパイカジン 2011.10 49
電子み、一 25 種必す動くつな 12 サーポモーター xl 個 特集 1 利用部品 3 ー手デ . ー 特の角度をで動かす。 サーボモーターは、特定の角度ま 活用します。ロポットのアームを動 意しました。 degree に目的の角度 で回転し停止させられる電子バーツ かす、船や飛行機のモデルで舵を切 を指定することでサーポモーターが です ( 図 1 ) 。上にある回転軸が指定 る、ドアや蓋を開閉するといった制 その角度まで動きます ( 図 4 ) 。 した角度まで回転します。この回転 御に活用できます。 サーポモーターには、 p. 17 で説 軸に付属するホーンを差し込み、作 今回利用する SG92R は端子が 3 本 明した PWM を使って信号を送り 品にホーンをねじ止めするなどして あり、赤が電源、茶色が GND 、オ ます。ただし LED の点灯で使った 0 レンジが制御用の線です。 Raspbe PWM は「ソフトウェア PWM 」と 0 同こんの任 rryPi に接続する場合、図 2 のよう 呼ばれるプログラムで作り上げた信 意のホーン に、赤線を 5V 、茶色線を GND 、オ 号になっています。ソフトで作るた 黒い回転軸が所定の を回転軸に 角度まで回転する 差し込む レンジ線を GPIO にそれぞれ接続し め、ほかの処理の影響を受けるな ます。接続には、オス - メス型ジャ どして信号に微妙なぶれが生じてし ンパー線を使って、直接 Raspberry まいます。サーポモーターは 0.5 ミ ◆ Pi とサーボモーターを接続するとよ リ ~ 2.4 ミリ秒と非常に小さな時間 ◆ いでしよう。 で動作が決まるため、ソフトウェア ◆ サーポモーターは、図 3 のような PWM の微妙なぶれがサーボモータ 茶線 :GND ◆ 信号 (PWM) の High になってい ーを震わせてしまい、一定の角度で 赤線 : 電源 オレンジ線・ (5V) 制御端子 ◆ る時間によって動く角度が決まりま 静止しなくなります。そこで、 Ras 図 1 特定の角度まで動かす「サーポモー ◆ す。 SG92R は、サーポモーターの動 pberry Pi が内蔵する「ハードウェ ◆ 作波形について公式の情報があり ア PWM 」の回路を利用します。プ ◆ ませんが、同じメーカーが販売する ログラムの実行に影響が及ばないハ SG-90 と同様の波形で動かせます。 ードウェア上で生成するため、安定 ◆ SG-90 は波形の周期が 20 ミリ秒、波 した PWM 信号が利用できます。 ◆ 形が High の時間が 0 度にしたいとき ハードウェア PWM は、 GP1012 、 ◆ 0.5 ミリ秒、 180 度にしたいとき 2.4 13 、 18 、 19 に出力できます。対応し ◆ ミリ秒にします。 SG92R も同様で、 ていない GPIO に接続しても PWM 例えば 90 度まで動かしたい場合は、 信号が出力されないので注意しまし 0.5 ミリ秒と 2.4 ミリ秒の中間となる よう。動作が不安定な場合はオーデ 1.45 ミリ秒間 High となる信号を送 イオ出力機能を無効化すると安定 るようにします。 します。設定方法は p. 140 下で紹介 プログラムは読者限定サイトに用 しています。 0 坑 0 ( 0 赤茶 オレンシ 図 2 接続図 High になっている時間で角度が決まる High Low 0 度 目的の角度を指定する 信号の周期を設定する 最小と最大のバルス幅を設定する 2 . 4 degree 0.5 ミリ秒 CYCLE 20 S E RV 0 M I N SERVO_MAX RANGE 2000 図 4 サーポモーターの設定と目的の角度の指定 ( 「 se Ⅳ 0. py 」の一部を抜粋 ) High Low 180 度 2.4 ミリ秒 信号の周期 : 20 ミリ秒 図 3 サーポモーターを制御する信号 ラスパイマガジン 2017.10 27
01 一ーい」 " ラズバイ風 " ボデド種を大検 特集 2 i mp 0 rt RP 1 . G P 10 a s G P 1 0 import time 0 ] ー G P 1 0 . s e t m 0 d e ( G P 10 . B 0 A R D ) ↑ここが問題 G P 1 0 . s et u p ( 13 , G P 1 0 . 0 U T ) と っ を チ ッ イ ス ン 番 1 w h i 1 e T r u e : G P 1 0 . 0 u t p u t ( 13 , f 1 a g ) ← ag を反転 flag flag ← 1 秒待つ t i me . s 1 e e p ( 1 ) 図 11 led. py de() に次の指定が可能です。 # ボード上のピン番号を使う G P 1 0 . s e tmo d e ( G P 1 0 . B OA RD ) # S o C の G P 1 0 番号を使う GP 1 0 . s etmod e ( G P 1 0 . BCM ) 1 図 12 L チカを試したところ す。また、実行時には必す次のよう に警告が表示されます。 i mp 0 r t R P i . G P 1 0 a s G P 1 0 import time def pushdown(channel): p r i n t ( " P u s h " ) r e t u r n $ sudO python . / ] ed . py ロ . / ] ed . py : 5 : Run t i meWa rn i n g : Th iS channel iS already in use, c 0 n t i n u i n g a nyway . U s e G P 1 0 . s e twa r n i n g s ( F a ] s e ) t 0 d i s a b ] e w a r n 1 n g S . GP 1 0 . s et u p ( 13 , GP 1 0 . OUT ) GPIO . setmode(GP10. BOARD) GPIO . setup(13, GPIO. IN, pull_u p—down=GP10. PUD_UP) GPIO . add_event_detect(13, GPIO . FA L L I N G ) GPIO . add_event_caIIback(13, pu shdown) PINE A64 は Allwinner 製の SoC を使っているので GPIO. BCM の指 定ができない、と思われるかもしれ ません。しかし RPi. GPIO との互換 これは、すでにそのピンが使用さ 性を取るために GPIO. BCM の指定 れているという警告ですが、起動時 もサポートされています。 の初期化に対しての警告なので、無 t i me . s 1 eep ( 60 ) ただし、 RaspberryPi と異なり各 視して構いません。 13 番ピンに 100 図 14 switch. py ピンのモード切り替えがうまくいか Q 前後の抵抗と LED を接続すると、 ないことがあるようで、例えば 12C 1 秒おきに点灯することが確認でき るはすです。 の 3 番ピンを使おうとするとエラー るでしよう ( 図 12 ) 。 になったりします。 Raspberry Pi 向けに作られた pyt hon スクリプトを、 PINE A64 で実 続いて定番のスイッチ入力を試 スクリプトでは GPIO. add eve 行させる場合、 GPIO. BCM が指定さ してみましよう。ネット上には RPi. nt-detect() で GPIO が Low に落ちた れていても動く可能性はあります GPIO-PineA64 で GPIO 割り込みが ときのイベントを登録し、イベント が、問題が起きる可能性があるこ 使えないという書き込みが散見され に対するコールバック関数 pushdo とも把握しておいた方がよいでしょ ますが、最新の RPi. GPIO-PineA64 wn() を GPIO. add_event_callback() ならば Raspberry Pi と同じように で登録しています。スクリプトは 60 つ。 PINEA64 向けにスクリプトを作 GPIO 割り込みを使ったコールバッ 秒間スリープしますが、その間でも 成する際には、 GPIO. BOARD を指 クが利用できます。 スイッチが押されればコールバック 定するのが無難です。 led. py では 13 先ほど同じように 13 番ピンを使 関数 pushdown() が呼び出される仕 番ピン (Raspberry Pi で GP1027) い、 13 番ピンと GND の間にスイツ 組みです。 を出力に設定しています。そのほか チを入れ ( 図 13 ) 、図 14 の switch. は、 Raspberry Pi と同じです。 py を実行してください。スイッチを * 7 https://github.com/swkimOI /RPi. GPlO-PineA64 実行には root 権限が必要になりま 押すと画面に「 Push 」と表示され $ sudO python . /switch . py ロ GP 旧でスイッチ入力 ラスパマガジン 2011 刈
第盟当間新朝いユ 1 #!/usr/bin/env python3 2 # - ☆ - coding: utf-8 - ☆ - 3 import time # sleep のためのモジュールをインポート 4 5 # デバイスファイルからセンサー値を取得する関数を用意 6 def get-line-sensor-data(): with 叩 en( ・ /dev/rt1ightsensor0','r') as f: 7 return map(int, f. readline(). split()) # 図 5 で 3 行だったものを 1 行にまとめた 8 9 10 # テパイスファイルを通してモーターの回転速度を指定する関数を用意 11 def set_motor—speed(left, right): with 叩 en('/dev/rtmotor_raw_. 回,, ・ (') as lf, open('/dev/rtmotor-raw-r0', ・ w ・ ) as rf: 1 f. wr i t e ( s t r ( i n t ( 1 eft ) ) ) 10 ( イチ十ゼロ ) ではなく rf. write(str(int(right))) ( 小文字のエル十ゼロ ) 16 # デバイスファイルからモーターの電源を 0N / OFF する関数を用意 17 def set_motor_power(mode): with open('/dev/rtmotoren0','w') as f: f. w r i te (' I' i f d e e 1 s e '0 つ 21 i f mal n name set_motor_power(True) for i in range(10): left_end, left, right, right-end = get-line-sensor-data() print(left, right) # 変数に代入された値を確認 set-m0tor-speed(100, 100 ) # ステッヒ。ングモーターを回転 time. sleep(0.1) # 0.1 秒ごとにセンサー値とモータの回転速度を更新 set_m0tor-power(FaIse) # ステッピングモーターの電源をオフに 28 図 6 raspimouse Iinefollower2. py 図 7 車輪を浮かせたラズバイマウス 度の厚みがあるものならば、ほかの ものでも構いません。ラズバイマウ スが不安定にならないものを用意し ましよう。 ラズバイマウスの車輪が浮いてい ることを確認して二つスイッチがあ るうちの「 MOTORSW 」をオンに 倒します。先ほどと同様に次のよう に raspimouse linefollower2. PY の 権限を変更した後、実行します。 実行権限を付与 $ chmod + x raspimouse—linefoll ower2 . py ロ Python のコードを実行 . /raspimouse 1inef0110wer2. p フを切り替えるための関数です。 12 行目ではステッピングモーター の回転速度指定のためのデバイス 2 秒程度ステッピングモーターが ファイルを開き、 13 ~ 14 行目で回転 回転した後、車輪が停止し、手で自 速度を書き込んでいます。デバイス 由に回せる状態になっていることを ファイル「 rtmotor_raw IO 」の最後 モーターを制御しよう 確認しましよう。ステッピングモー の 2 文字は、イチ + ゼロの「 10 」で 次にモーターを操作するコードを ターは回転していない状態でも電流 はなく、小文字のエル + ゼロの「 10 」 書きます。 が流れて ( 電源がオンになって ) い なので注意しましよう。 18 行目では 先ほどと同様にテキストエデイタ るとトルクがかかり、車輪が固定さ ステッピングモーターの電源をオン を使って図 6 のコードを書き、「 ras れます。電流が流れている状態が長 オフするためのデバイスファイルを pimouse—linef0110wer2. PY 」として く続くと、ステッピングモーターは 開き、 19 行目でオンオフを書き込ん 保存します。保存場所はどこでも構 大変熱くなります。使わないときは でいます。 いません。 こまめに MOTOR SW をオフにして このコードを実行する前に、図 7 raspimouse_linefollower2. PY で ください。起動時に「ステッピング のようにラズバイマウスの下に台を は「 set motor—speed 」と「 set—mo モーターをオフにする作業」が必要 置いてラズバイマウスの車輪を浮か tor-power 」という二つ関数を新た なのもこのためです。 せた状態にしてください。ラズバイ に用意します。 11 ~ 14 行目の set_ マウスが急に動くと、机から落下す motor—speed はステッピングモータ る危険性があるからです。今回は mi ライントレースをさせてみる ーの回転速度を指定するため、 17 ~ コースを用意して、実際に走らせ croSD カードのケースを台として使 19 行目の set_motor_power はステ てみましよう。図 1 で紹介したコー 用しました。平らで数 mm ~ lcm 程 ッピングモーターの電源のオンとオ 7 4 9 1299 12 7 3 12 9 6 7 4 6 12 9 6 12 9 4 1310 737 1284 1288 1299 746 1283 1289 1304 ↑ Ctr ] + C で止める 7 ラスパイマガジン 20 10
Tinker Board PINE A64 2G バイト☆ PINE A64 2G バイト PINE A64 IG バイト Orange Pi PC 2 Raspberry Pi 3 0 600 400 200 図 10 ネットワーク性能の ipe 「 f の結果 ( M ビット / 秒 ) P 爪 E A64 / 2 G B * はネットワーク性能に特化したスクリプト実行後のスコア。 0 1 0 20 30 図 11 グラフィックス性能の g a 「 k2 の結果 NEA64 / IG バイト、同 2G バイトの 順です。 ラズバイは 32 ビット OS がネック 以上を概観すると、 Raspberry Pi 3 の性能がやや残念といえそうです。 CPU コアの性能自体はクロックの 差から Orange Pi PC 2 や PINE A64 よりやや上であるにも関わらす、 32 ビット環境であることが性能面での ネックになっていることがうかがえ ます。 Raspberry Pi 3 向けには Su SE Linux が 64 ビット環境をリリー スするなどの動きがあるので、 Ras pbian の正式な 64 ビット版の登場が 待たれるところです。 同じ 32 ビットの Tinker Board は、 Raspberry Pi 3 よりやや高性能とい Tinker Board PINE A64 2G バイト PINE A64 1 G バイト Orange Pi PC 2 Raspberry Pi 3 ラスパイマカジン 2017.10 40 50 60 70 800 80 1000 90 えます。 32 ビット前提なら Tinker Board のほうが快適ですが、 CPU が 32 ビットの Cortex-A17 なので Ras pberry Pi 3 のように 64 ビット化が 期待できないのが欠点です。 現時点で Linux 機として使うので あれば、 PINE A64 シリーズと Ora nge Pi PC 2 は Raspberry Pi 3 より コストパフォーマンスカゞ高いといえ ます。特に PINE A64 の IG バイト モデルは 2000 円台で国内でも購入 ができるので、導入のハードルが低 い選択肢になりそうです。 ネット性能は Tinke 「 Board が圧勝 続いてネットワーク性能の iperf の成績を見ていきましよう。 現状では Allwinner A64 のギガビ ットイーサネットは SoC の若干の問 題により十分な性能が出ないことが 知られています。そのため、 PINE A64 では、ギガビットイーサネット をテストするためにパフォーマンス を上げるシステムの設定をするスク リプトが公開されています * 3 。 このスクリプトではイーサネット の割り込みを受ける CPU を固定す るなど特殊な設定をしているので常 用には向きません。べンチマークテ ストのためだけに設定することに 900M ビット / 秒を超え、 64 ビット 出したのは TinkerBoard でした。 ネットワークで高い性能を叩き マンスは高いといえるでしよう。 Orange Pi PC 2 のコストパフォー パフォーマンスが欲しい用途ならば とますます良好です。ネットワーク Pi PC 2 の性能は 400M ビット / 秒台 AIIwinner H5 を採用する Orange が残念なところでしよう。 べた通り常用できる設定ではないの にふさわしい成績ですが、先ほど述 ギガビットイーサネットのスペック 800M ビット / 秒に跳ね上がります。 一方、前出の特殊な設定をすると いえません。 トという名称にふさわしい性能とは 高速ですが、ギガビットイーサネッ 秒台でした。 Raspberry Pi 3 よりは 芳しいものではなく 100M ビット / A64 シリーズのネットワーク性能は 特殊な設定をしない標準の PINE れています。 ック通り 100M ビット / 秒弱が得ら 秒のファストイーサネットで、スペ Raspberry Pi 3 は 100M ビット / 10 に掲載しておきます。 リプトを実行して測定した結果も図 までに PINE A64 / 2G バイトでスク 意味があるのかは微妙ですが、参考
0 続き番号 0 送信機の 電源電圧 [mV] 3L6 : 5 : 0 0 0 0 0 0 0 0 : 1 5 6 : 0 0 1 : 1 0 0 8 f 0 3 : 3 1 0 0 : 2 4 6 0 ; 7 9 2 6 : 1 3 2 1 : 0 8 4 6 : L : ②未使用 3 送信機の D (MAC 0 未使用⑩ A 旧の電圧 [mv] アドレスの下 7 桁 ) LQI: 0 ~ 255 、電波通信品質を表す尺度で 数値が大きいほど品質が高い 図 9 温度センサーからのデータを読み取ったところ す。ま v$TWELITE DIP のモード センサ三を 設定ビット 2 (M2) を GND につな 子機につなごう ぎます。その状態で TWELITE R に セットし、 TWELITE R を Raspbe 続いてセンサーを子機に接続しま rry Pi の USB ポートに接続します。 しよう。 $ miniterm. py /dev/ttyUSB0 115 温度センサーをつなぐ 2 0 0 ロ まずは温度センサーです。プレッ ドボードなどを使って図 8 のように を実行して TWELITE R の RST>F タ 配線してください。今回のファーム DIP にファームウェアを書き込むた ンを押すとインタラクテイプモードに ウェアではアナログセンサーを AI トワイライタ ーでは TWELITE R をライ 入ります。次のように表示されます。 (Analog lnput) の 1 、 3 番のどちら ターとして使用します ( 写真 2 ) 。 かにつなぎます。 LM61 は 3 番につ まず TWELITE R に TWELITE なぐことで温度計算までできます。 d : S1eep Dur ( 5000 ) set DIP を差し、 TWELITE R と Raspb 電源には単三電池を 2 個使います。 S e n s 0 r M 0 d e ( 0 x 1 0 ) m : set erry Pi を USB ケープルで接続しま DO (DigitaI Output) の 3 番には す ( この状態で Raspberry Pi と TW 動作確認用の LED をつなぎます。電 S : save Configuration ELITE DIP 間でシリアル通信する 源を入れて 5 秒に 1 回点灯すれば OK R : r e s e t t 0 D e f a u 1 t s こともできます ) 。 Raspberry Pi の です。 Raspberry Pi に MONOSTICK コンソールで次を実行します。 を接続して起動し、温度センサーの アナログセンサーをつないで通 値を読み取れるか確認します。 . /firm_write -t /dev/ttyUSB0 信頻度を変える場合、 d を入力し /opt/MW—App—Tag/App—Tag/App_T ます。通信する時間の間隔はミリ a g - E n d D e v i c e - B LU E . b i n ロ $ miniterm. py /dev/ttyUSB0 115 2 0 0 秒で指定します。デフォルトの 5 秒 MONOSTICK と同様に「 OK 」な ( 5000mS ) から 1 分 ( 60000mS ) に どと出力されれば成功です。 変える場合、 60000 と [Enter] キ を実行すると 5 秒以内に図 9 のよう 子機のファームウェアはデフォル ーを入力します。 に出力されるはずです。 トでアナログセンサー用になってい 使用するセンサーを指定する際に ⑦の温度が、 A13 につないだ温度 ます。温度センサーや磁気スイッチ m を入力し、温度センサーを用いる センサー LM61 の出力電圧から温度 を用いる場合、インタラクテイプモ 場合はセンサーモードとして 11 と を計算したものです。これを 100 で ードでセンサーモードを変更する必 [Enter] キーを、磁気スイッチの場 割って、手元の温度計と同等なら子 要があります。また、親機との通信 合は 51 と [Enter] キーを入力しま 機と正常に通信できています。 0 と 頻度を変更することもできます。 す。どちらも最後に S を入力して設 ⑩で AII と A13 の電圧を読み取れま 定を保存すると、設定した値を確認 TWELITE DIP ではインタラク す。ほかのセンサーの場合はこの値 テイプモードへの入り方が違いま できます。 を利用します。 ①親機起動後の タイムスタンプ [s] ⑦温度 [ ℃ ] OAII の電圧 [mv] X 100 0 0 TWE-Lite-R 写真 2 ライターの「 TWELITE R 」 丸ピンヘッダーを取り付けた例。 0 3V TWELITE DIP 0 VOUT LM61 GND 十 Vs 680C LED Vcc GND Vcc 図 8 子機に温度センサーをつなぐ回路図 40
、ノノツー」」、ンノコル、」工ノ ソレノイド 物を押す動作を実現する 14 ソレノイド x 1 個 29 ハワー MOSFET x 1 個 34 ダイオード x 1 個 利用部品 99 抵抗 1kQ 、 20kQ x 各 1 個 100 AD アダブター x 1 個 キット x 1 個 100 DC ジャック DIP 化 動作する電子バーツとして「ソレ ノイド」があります ( 図 1 ) 。ソレノ イドは中にコイルが巻いてあり、電 気を流すと中央にある棒状の「プラ ンジャー」が動きます。ソレノイド の主な種類としてプル型とブッシュ 型があります。プル型は引っ張る効 果を得られ、プル型は押し出す効果 を得られます。 ソレノイドはさまざまな場所で利 用されています。身近なところでは、 AT 車のシフトレバーでエンジンを 動作させていないとき、パーキング にロックする仕組みに使われていま す。工ンジンをかけてプレーキを踏 むとソレノイドに電気が流れロック が外れます。 今回利用する ZHO -0420S は、プ ッシュ型のソレノイドです。電気を 流すとピンが飛び出します。電気を 流すのをやめると、バネのカでピン が引っ込むようになっています。 ソレノイドは図 2 のように接続し ます。 DC モーターと同様に、ソレ ノイドも大電流が流れるため MOS FET を介して制御します。ソレノ イドについても逆起電力が発生す る恐れがあるため、ダイオードを並 列につないで逆起電力が MOSFET に流れ込まないようにします。電源 は AC アダブターから別途取り込み ます。 ソレノイドを動作させるには図 3 のプログラムを実行します。ソレノ イドは電気を通すか通さないかの 2 通りで動作するので、デジタル出力 4017 2SK 6 0 で制御することとなります。 pi. digi taIWrite() で High にすればソレノイ ドが動き、 Low にすれば元の状態に 戻ります。 ソレノイドを動作させる場合は、 長時間電気を通さないようにしま す。長時間電気を流し続けてしまう と、加熱して壊れてしまう恐れがあ ります。 ZHO -0420S の場合、 10 秒 程度にとどめておきます。 AC. 乃タブターへつなぐ 0 0 0 ◆、 ◆、 ◆、 ◆、 ◆ ◆、 ◆・ ◆ - ◆イ ◆、 ◆ ◆イ 電気を流さ なくなると バネのカで 元に戻る 電気を流す と磁気が発 生しピンが 飛び出る 図 2 接続図 import wiringpi as pi import time S 0 L E N 0 1 D P I N = 2 3 ソレノイドを接続した G 曰 0 の番号を指定する pi . wiringPiSetupGpio() pi . pinMode( SOLENOID_PIN, pi . OUTPUT ) p i . d i g i t a 1 W r i t e ( SO L E N O I D_P I N , p i . LOW whi 1 e ( True ) : 0 電磁石のようにコイル が巻かれている p i . d i g i t a 1 W r i te ( t i me . s 1 eep ( 1 ) p i . d i g i t a 1 W r i t e ( t i me. s 1 eep ( 5 ) SO L E N 0 1 D P I N , S 0 L E N 0 1 D P I N , p 1 . H I GH ) pi . LOW ) テジタル出力する よう設定する ノイドを元に戻す Low を出力してソレ ノイドを動かす High を出力してソレ 図 1 押し出す動作が可能な「ソレノイド」 の外見 図 3 ソレノイドを定期的に動作させるプログラム「 so 厄 noid. py 」 ラスパイマガジン 201 ⅱ 0
継 初めて買うなら Raspberry Pi 3 がお薦め バーや電子部品の制御を、低コスト います。 100M ビット / 秒の有線 LAN 現在入手可能な Raspberry Pi は、 に実現したいときに選びます。 だけでなく、最大 150M ビット / 秒の 大きく 6 モデルあります。クレジッ IEEE 802.11n 無線 LAN (2.4GHz) Pi 1 A + と Pi Zero 、 Pi Zero W トカード大のモデルが「 Pi 3 Model は安価なモデルで、特に Pi Zero は を搭載。マウスやキーポードの接続 B 」「 Pi 2 ModeI B 」「 Pi 1 Model B 648 円と格安です。外部インタフェ に使える無線インタフェースの Blue + 」の 3 種類、それより小さい「 Pi ースを省いて小型化しているので、 tooth 4.1 も内蔵しています。 1 Model A + 」、さらに 2 分の 1 に小 組み込み用途に向いています。処理 Pi 3 よりも実売価格が少し安い、 型化した「 Pi Zero 」、無線 LAN/BI 性能は Pi 1 B + と同様に、電子工作 前モデルの Pi 2 も併売されていま uetooth を搭載した新モデル「 Pi Ze であれば問題なく活用できる程度で す。性能面では Pi3 に一歩譲りま row 」の 3 種類です ( 図 1 ) 。 す。一方、 GUI を快適に利用するに すが、複数台が必要な用途では選 は荷が重すぎます。 択肢に上ります。例えば電子工作 GU 快適に使いたいなら Pi 3 Pi zero と Pi zero W を電子工作 で、部品を配線して組み付けてしま 用途次第で Pi 2 を選ぶ手も に使うには、ピンヘッダーのピンを い、専用機として使うようなとき 1 台目に買うなら、 2016 年 3 月に登 別途入手した上で、はんだ付けまた です。 CPU の標準の動作周波数が 場した Pi3ModeIB がお薦めです。 はハンマーで固定する必要がありま 900MHz と Pi 3 より低いため発熱量 クアッドコアの CPU で動作周波数は す ( p. 131 を参照 ) 。電子工作の初心 が少なく、外部気温が高くなるよう 1.2G Ⅱ z 、メモリー容量は IG バイト 者は注意が必要です。 な環境に設置するサーバーにも向く と、一昔前のパソコンに匹敵する性 でしよう * 1 。 能です。それでいて消費電力は数 W Pi 1 B + は、 Pi 2 よりもさらに性 と、電気代を気にすることなく使え * 1 動作周波数を IGHz にオーバークロックし 能が低いモデルです。単機能のサー ます。ネットワーク機能も充実して たときは、放熱に気を使う必要があります。 Raspberry Pi 1 ModeI B 十 単機能のサ ーバーや電 子工作を試 Raspberry Pi 2 Model B Raspberry Pi 3 Model B デスクトップ PC からサーバ 、電子工作 まで全部 ! CPU : Cortex-A53 (1.2GHzX4) メモリー : 1 G バイト N ℃ : 有線 LAN 、 802.1 ln 、 BIuetooth 4.1 外部端子 : USBX4 、 HDMIXI 4860 円 Raspberry Pi 1 M0del A 十 手軽に小さい工作 物を作りたい ! 多機能なサ ーバーや電 子工作を試 CPU : ARMII (700MHzX1) メモリー : 512M バイト N ℃ : 有線 LAN 外部端子 : USBX4 、 HDMIXI 3510 円 CPU : Cortex-A7 (900MHzX4) メモリー : 1 G バイト N ℃ : 有線 LAN 外部端子 : USBX4 、 HDMIXI 4752 円 Raspberry Pi Zero Raspberry Pi Zero W ス寸め コて収 低しく くそさ か にでを、 とト法た 小型・安価でネ ットにもつなげ い . CPU : ARMII (1GHzX1) CPU : ARMII (1GHzX1) CPU : ARMII (700MHzXI) メモリー : 512M バイト メモリー : 512M バイト メモリー : 256M バイト N ℃ : なし N ℃ : 802.11 n 、 Bluetooth 4.1 N ℃ : なし 外部端子 : Micro USBXI 、 miniHDMIXI 外部端子 : Micro USBX 1 、 mini-HDMI X 1 外部端子 : USBXI 、 HDMIXI 1296 円 648 円 2970 円 図 1 Raspberry Pi シリーズの主な仕様 必要な基本性能とサイズで選ぶべき Raspberry Pi が決まる。価格は、国内代理店のケイエスワイの直販サイト「 Raspberry Pi Sh0PbY KSY 」を参考にした。 イマガジ - 128 県