) リードスイツ 磁石でスイッチを切り替えを 抵抗を介して電源または GND に接 リティシステムでも侵入検知のため リードスイッチは、磁石でスイ 続しておくことです ( 図 3 ) 。電源に に利用されています。 ッチを切り替えられる電子バーツで 接続する場合をプルアップ、 GND に リードスイッチは図 2 のように接 す。非接触でスイッチを切り替えら 接続する場合はプルダウンといいま 続します。リードスイッチの線はプ れる特徴があります。このため、自 す。これでスイッチがオフになって レッドボードに直接差し込みづらい 転車の車輪の回転をカウントして走 も抵抗を介して電源または GND に ので、みの虫ジャンパー線を利用し 行距離を計測したり、液体が一定の 接続されている状態になり、 GPIO てリードスイッチの線を挟むと配線 かさに達したことを調べたりするの の状態が安定します。 しやすくなります。 に利用されています。 ◆ Raspberry Pi の GPIO は標準で リードスイッチのように二つの端 今回利用するリードスイッチは、 ◆ プルアップまたはプルダウン抵抗を 子しかないスイッチを GPIO につな ケースに入っています ( 図 1 ) 。も ◆ 内蔵しており、プログラムから利用 ぐ場合、スイッチがオフのときに うーっのケースには磁石が入ってい ◆ ' する / 利用しないを設定できます。 GPIO が何もつながっていない状態 て、互いを近づけるとリードスイツ ◆ WiringPi では、 GPIO のモードを入 になり、 GPIO 入力が不安定になり チが導通状態になります。ケースに ◆、 力に切り替えた後、「 pi. pullUpDnC ます。手で触るなどすると意図せず はネジ穴が付いていて、窓や扉など ◆ = ・ ontrol() 」で設定します ( 図 4 ) 。「 pi. にオンの状態に切り替わってしまう に取り付けられます。窓や扉の開閉 ◆。・ PUD_UP 」と指定するとプルアップ 場合があります。 状態を確認して、不在時の不正侵入 ◆ に、「 pi. PUD_DOWN 」でプルダウン そこで、入力を安定させるために の検知にも使えます。実際のセキュ になります。また、プルアップ、プ 「プルアップ」または「プルダウン」 ルダウンを無効にしたい場合は「 pi. 抵抗を利用します。プルアップ、プ 中に磁石が 入っている PUD_OFF 」と指定します。 ルダウン抵抗とは、 GPIO の端子に プルダウンを有効にした場合 利用部品 5 リードスイッチ x 1 個 中にリードスイッチが 入っている プルアップを有効にした場合 リードスイッチが OFF だと、 3.3V に接 続した状態になる 3.3V 0 p u Ⅱ U p D n C ont 「を「 pi. PUD_UP 」に 設定すると、 抵抗で 3.3V に 接続した状態 となる G 曰 0 磁石をリードスイッチに近づけると リードスイッチが導通状態になる 磁石でスイッチを切り替えられる 図 1 「リードスイッチ」 リードスイツ チが ON にな ると 3.3V につ ながった状態 となる 3.3V 50k ~ 65k Q スイッチ スイッチ : G 曰 0 50k ~ 65kQ' GND pullUpDnControI を「 pi. ドスイツ PUD_DOWN 」に設定す チが 0 FF だと、 ると、抵抗で GND に接 GND に接続し 続した状態となる た状態になる 図 3 入力を安定化させるプルアップとプルダウン pi . pu11UpDnContr01( SW—PIN, pi . PUD—DOWN ) 図 4 磁石の接近を調べるプログラム「「 eedsw. py 」で G 曰 0 をプルダウンに設定したところ 接続図 ( プルダウンで接続する場合 ) 図 2 GND リードスイッチが 0 N になると G N D につながった状態 となる く◆く◆ - 、◆ ラスパイマガジン 2017.10
・ = 、 , = ー一一を可ユンで電テ・サイ旦ー目て暉の切て表 2525A を L 型ピンヘッダーに差す 丸ピン℃ソケットをはんだ付け L 字型のピンヘッダーをハンダ付け ーに 当・砂 1 ヨ ^ 、 1 を一自。物の編・ま第物朝・金物・ 図 5 TWELITE R に 5 ピンヘッダー を / 、ン ダ付け Raspberry Pi へ 接続 クリップ線で接続 クリップ線の色 2525A の接点 TWELITE R の接点 Vcc S ET 図 6 2525A と TWELITE R をクリップ赤色 緑色 線などで接続 というデバイス名で認識されます。 公開されています。この「親機・子 次に子機となる 2525A を Raspbe rry Pi に認識させます。 2525A もシ 機・中継機ファームウェア」などと 書いてあるリンクをクリックして、 リアルデバイスとして認識させるの ですが、 TWELITE にファームウ ホームディレクトリーにダウンロー ドします ( ここでは 2.0.2 を利用 ) 。 工アなどを書き込むためのライター どちらも「 OK: firmware is succes これを次のように展開します。 「 TWELITER 」を経由してつなぎ sfully programmed. 」というメッセ ます。ライターにつなぐときは、必 ージが出れば成功です。ファームウ す 2525A から電池を外しておいてく 工アは前バージョンの確認などもな く書き換わってしまいます。適用す ださい。 ま $TWELITER の先端にある るファームウェアのバージョンはよ 五つのスルーホールに、裏側から L く確認するようにしてください。 字型の 5 ピンヘッダー ( 秋月電子通 これで親機と子機のファームウェ 商の通販コード C -05336 、 10 円など ) アがそれぞれ「 App_Tag-Parent- 親機の設定を変える をハンダ付けします ( 図 5 ) 。さらに BLUE. bin 」「 App_Tag-EndDevice- それでは親機と子機の設定を変 図 6 のように、 TWELITER に丸ピ BLUE-LITE2525A. bin 」といったフ 更しましよう。設定変更には cu コ ン IC ソケット ( 秋月電子通商の通 ァイル名で得られるはすです。 マンドを利用するので、次のコマン 販コード P -01591 、 120 円など ) を ドで導入します。 続いてツールを利用してデバイス ハンダ付けします。 の接続を確認します。 そして 2525A を L 型ピンヘッダー に接続し、クリップ線で Vcc などを 接続します。隣のピン同士が接触し ないよう細心の注意を払います。 この状態で TWELITE R と Rasp berryPi の USB ポート間を USB ケ ープルで接続すると MONOSTICK USBO と USBI にある二つのデ MONOSTICK にアクセスし、初 バイス (MONOSTICK と TWE- のときと同様に次ページの図 7 のよ 期設定のための「インタラクテイプ Lite-R) がリストされていれば OK で うに「 /dev/ttyUSB1 」として認識 モード」でメニューを表示させた場 す。確認できたら次のコマンドを実 されるはすです。なお、ここで認識 合が次ページの図 8 、 TWELITE R 行して親機と子機のファームウェア されているのは 2525A ではなく TW 経由で 2525A にアクセスした場合が を更新します。 ELITE R です。 次ページの図 9 になります。 インタラクテイプモードにするた ファームウェアを更新 め、 Connected の表示後に「 + + + 」 . /jenprog -p /dev/ttyUSB0 Ap 最新のファームウェアは公式サ と + を 3 回入力します。 MONOSTI p_Tag-Parent-BLUE . bin ロ イト「 http: 〃 g00. g レ QSmtYR 」で CK の場合は + + + の後にすぐにメ Vcc GND . /jenprog -p /dev/ttyUSB1 Ap p_Tag-EndDevice-BLUE-LITE2525A . b i n ロ $ cd /opt/TWELITE/jenprog ロ $ s udO u n z i p ~ / ダウンロードしたフ ァイル名口 $ s u d 0 a pt - g e t i n s t a 1 1 c u ロ . /jenprog - 1 ロ # TW E U S B d e ⅵ c e 1 i s t ( n u m= 2 ) I D , S / N , De s c 0 , A H X M Z Y 18 , M 0 N 0 S T I C K 1 , A H X W I Y 3 L , TW E - L i t e ー R cu コマンドは次のように使います。 ー 1 デバイス名 - s 115 200 ロ 親機のファームウェア更新 子機のファームウェア更新 時 , , 。、ラスパイマガジン 2 引に 45
ステ飛ンク & DC モ - タ - ドラ引モカ - ニつのモタを同時に制御する い場合には「モータードライバー」 した場合はプレーキがかかります。 前ページで説明した FET を利用 二つのモーターを独立に制御でき を使うのが便利です。モータードラ したモーターの制御では、一方向に ると、二つの車輪を自由に制御でき イバーでは、一般的に二つの入力が しか回転を制御できません。どちら る車が作れます。二つのモーターを 用意されており、入力の仕方によっ の方向にも自由に回転を制御した 同時に回転させれば前進し、逆向き て回転方向や停止動作などを制御 入力 B 入力 A に回転させればその場で回転、どち できます。また、多くのノイズが発 ーっ目のモーターニつ目のモー らも逆方向に回転させれば後退で 生するモーター駆動用回路から、制 を制御する端子ターを制御す る端子 きます。この方法を覚えておくと作 御回路を守るような仕組みになって 品を自由に動かせるようになって応 います。 用の範囲が広がります。 ステッピング &DC モータードラ イバーモジュールの「 DRV8835 」は、 モータードライバーで二つの DC モーターを動作させる場合は、図 2 2 系統のモーター制御機構を搭載し のように接続します。車の左右の車 ています ( 図 1 ) 。これで同時に二つ 輪へ差すようにモーターを付ける場 の DC モーターを制御できます。 合、一方のモーターは逆向きに動 つめのモーターは AOUTI 、 AOUT2 かさないと前進しません。そこで、 に、二つめのモーターは BOUTI と BOUT に接続するモーターはくば BOUT2 に接続します。ーっめのモ みのある端子を BOUT2 に接続する ーターの制御は AINI 、 AIN2 を、 ようにします。モータードライバー つめのモーターは BINI 、 BIN2 を利 では入力側と出力側で利用する電 用します。 源を分けます。入力側の電源となる モータードライバーは、表 1 のよ 「 Vcc 」には Raspberry Pi から 3.3V うな入力をすることでモーターの動 を、モーター制御用電源の「 VM 」 作を制御できます。正転させたい場 は乾電池の + 側に接続します。 合は INI を High 、 IN2 を Low にしま プログラムは読者限定サイトに用 す。逆にすれば反転します。どちら も Low に 意しました。モータードライバーは、 した場合 デジタル入出力で High 、 L 。 w を切り 替えて制御します。両方のモーター は惰性で 止まり、 の INI を High 、 IN2 を Low にすれば どちらも 前進、 BINI を Low 、 BIN2 を High に切り替えれば回転します ( 図 3 ) 。 H i g h に 利用部品 10 DC モーター x2 個 11 ステッビング & DC モータードライバーモ ジュール xl 個 100 電池ポックス xl 個 制御側電源 ( 3.3V ) につなぐ ) ン タ便モ 正 z モるのイ っ のするラ 使 cn 目続せド を カっ接さタ 動モ イ モ接を O のに乍 一フ < 目一る外 カっタす 出一一続 タ 一電ぐモテ タ用な b0 b0 一作 ( っ モ動源に図なユ表反 っ 08 INIV 300 工 一←っ 0 、 動作 爪 2 停止 ( 惰性 ) 正転 反転 停止 ( ブレーキ ) LOW Low High 1 2 6 22 右車輪 くぼみ AA Battery 左回転する pi. digitalWrite( lT10torÅI_pin, pi. HIGH ) pi. digitaIWrite( motorA2_pin, pi. LOW ) pi. digitalWrite( m0torBI_pin, pi. LOW モーター 2 を 反転させる i . di italWrite motorB2 in i,HIGH 図 3 左回転させる場合の出力方法 ( 「 moto 「一 d 「 ive 「 . py 」の 一部を抜粋 ) くぼみ 左車輪 図 2 接続図 ラスパイマガジン 2017.10
表 2 スマート時計を実現するに利用した部品 表 1 に示した抵抗 ( 24C ) 、ピンヘッダー、ジュンフロン線、ユニバーサル基板も使います。 LCD ディスプレイ 前者がバックライト付き、後者がバックライト無しで、どちらでも構いません。バッ 700 円 / 500 円 SCI 602BSLB/ クライト付きモデルでバックライトを点灯させるには SC1602 基板上にバッケージ付 SC1602BS-B 属の抵抗をハンダ付けする必要があります 半固定抵抗 (10kQ) 200 円 ( 10 個 ) LCD のコントラスト調節用です KVSF637AC103 1 10 円 ( 1 個 ) 安価なので複数個、手に入れておくと後で役立つかもしれません。秋月電子通商の スイッチ タクトスイッチ 1 P -03647 など 数量価格 説明 型番など 部品 1 表 3 SC1602 のピン配置 RS 、 E 、 DBn を図 7 のようなタイミ ングで変化させます。 電源 ()V VCC) GND ( グラウンド ) 図 7 には目安となる信号のタイミン コントラストアジャスト入力 0 ~ 5V の電圧を与えてコントラストを調節します グを記していますが、実際にはタイミ レジスタセレクト (RS) LCD の内部には LCD を設定するファンクションレジス タと、表示する文字を書き込むキャラクターレジスタ ングを長くする分には問題ありませ というニつの内部レジスタがあります。 RS が 0 のとき、 ファンクションレジスタの選択、 RS が 1 のときにはキ ん。逆にタイミングを短くするとトラ ャラクターレジスタの選択になります プルの発生の元になります。実際の 内部レジスタに書き込むとき O 、読み出すとき 1 にセ ットします。表示するだけなら読み出しの必要はなく、 コードではマイクロ秒単位で信号に このピンは GND に接続 ( = 常に 0 ) してしまって構い ません 余裕を持たせるのが楽で確実です。 本信号が 1 のとき、データバス上の信号が有効と見な され、リード / ライトが行われます。内部レジスタに 書き込む場合、 40ns 以上の長さでイネーブルが 1 にな っていなければなりません LCD を G 曰 O に接続する 内部レジスタへのリードライトをするデータバスです。 ァータバス 0 (DBO) それでは、 LCD の SC1602 を Ra データの保持期間には 100nS 以上が必要です。 8 本 ( 8 (DBI) ァータバス 1 ビット ) のバスですが、後述するようにファンクション ァータバス 2 (DB2) spberryPi に接続してみましよう。 レジスタへの設定によって 4 ビットのバスとしても利用 ァータバス 3 (DB3) でき、接続する本数を節約することもできます SC1602 は 14 ピンのピンヘッダーで入 ( D B4) 丁ータバス 4 ァータバス 5 (DB5) 出力をしますが、 14 本すべてを GPIO ァータバス 6 (DB6) に接続する必要はありません。レジ ( D B7) ァータバス 7 スタセレクト (RS) 、イネープル信 3.3V でもギリギリですが問題なく動 号 (E) 、データバス 4 ~ 7 (DB4— に説明しておきます。 SC1602 は 14 ピンのピンヘッダー ( 付属のピンへ 作します。本来ならロジック IC を DB7) の 6 本の信号をつなぐだけで ッダーをハンダ付けして使います ) 使って 5V に変換したほうが望まし 機能します。 を用いて Raspberry Pi の GPIO と接 いのですが、本稿では Raspberry Pi 8 本のデータバスは、設定によっ 続して利用します。 14 ピンの機能は と SC1605 を直結することにします。 て 4 ビットでも利用できます。その 4 番ピン以降は、 LCD とデータを 表 3 の通りです。 場合、 DB4 ~ DB7 の 4 本のみを GPIO 電源端子は 1 番ピンと 2 番ピンで、 やり取りするための信号で、表 3 で に接続するだけですみます。 5V を与えることで動作します。 3 番 概要を説明しました。 4 番ピンのレ 1 番ピン (VCC) は 5V に、また ピンは 0 ~ 5V の電圧を与えてコン ジスタセレクトで内部レジスタを選 コントラストアジャスト入力には半 択し、 6 番ピンのイネープル信号 ( E ) トラストを調節します。この電圧を 固定抵抗を介して 0 ~ 5V の電圧を調 作るために適当な半固定抵抗 ( 10k で「データバス」を有効にして、 7 節できるように配線します。それ以 Q 程度 ) が必要になるので LCD と ~ 14 番のデータバス (DB0—7) で 外のピンはすべて GND に接続して 合わせて入手しておいてください。 データを書き込むといった流れにな ください。配線図を図 8 、 LED はそ なお SC1602 は、ロジックレベル ります。 のままにして LCD を追加で配線し が 5V で動作する部品ですが、デー LCD に文字を表示する場合は、 Ra た様子を写真 7 に示します (LED は タバスなど信号線のしきい値 ( その spberryPi から一方的に LCD に書 この後もテストで使います ) 。 GPIO ピンが 1 と判定する電圧 ) は 2.75V き込むだけでよく、読み出す必要は はどれを利用しても構わないのです 程度です。このため Raspberry Pi の ありません。 LCD へ書き込むには が、 DB4 ~ DB7 については連続し 説明 リード / ライト ( 0 = ライト、 1 = リード ) 5 イネーカレ信号 (E) 6 「 / 8 9 -1 1 -1 -1 -1 一 ラスパイマガジン 2017.10 特別付録
電子み、一 25 種必す動くつなぎ 4 トグルスイッチ xl 個 特集 1 利用部品 笋 - ) トグルスイツデ スすチの状態を調べる Raspberry Pi の GPIO は、デジタ を一時的に停止する、次のメッセー ん。そこで、端子の中央を GPIO に ル入力にも対応しています。電子回 ジの表示に切り替えるなど、さまざ 接続し、左右の端子の片方に電源 路に接続すれば、接続した位置の電 まな用途に利用可能です。 ( 3.3V ) 、もう片方に GND (ov) を 圧を感知し、電圧が高い状態である スイッチの 1 種としてトグルスイ 接続します。こうしてトグルスイツ と High 、低い状態だと Low と判断 ッチがあります ( 図 1 ) 。トグルス チを切り替えると、 GPIO が電源ま できます。デジタル入力の機能を利 イッチは、上部に棒のような切り替 たは GND のいずれかに接続した状 0 用して、スイッチの状態を調べてみ えスイッチカ咐いています。端子は 態になります。電源に接続されてい 0 ましよう。スイッチの状態が分かれ 三つ付いていて、中央の端子が右ま れば High と判断され、 GND に接続 ば、 LED の点滅を開始する、機能 たは左のどちらかの端子につながる されていれば Low と判断されます。 ようになっています。棒を右に倒す プログラムを図 3 のように作成し と、左と中央の端子が接続し、左に ます。トグルスイッチを接続した 倒すと右と中央の端子がつながりま GPIO は、「 pi. pinMode() 」で「 pi. IN す。棒の倒した方向と逆の端子がつ PUT 」と指定して入力モードに切り ながるので注意しましよう。 替えます。スイッチの状態を確認す Raspberry Pi でスイッチの状態 ◆ るには「 pi. digitalRead() 」を使いま を読み取るには、図 2 のように接続 ◆ す。読み取りたい GPIO を指定する します。秋月電子通商で販売するプ と、 GPIO の電圧の状態を確認し、 ◆ レッドボード用トグルスイッチ DIP 高い状態であれは「 1 」、低い状態で 化キットを使えば、直接プレッドボ ◆ あれば「 0 」を返します。また、分 ードに差し込めるため配線が楽にな かりやすいよう「 1 」の場合は「 pi. ◆・ ります。 HIGH 」、「 0 」の場合は「 pi. LOW 」 ◆・ Raspberry Pi の GPIO では、電 と記述できます。 if 文を使って条件 ◆・ 圧が高いか、低いかで High 、 Low 分岐し、 High の場合は「 switch Ri ◆、 の状態を判断しています。しかし、 ght Side 」、 Low の場合は「 Switch ◆、 スイッチ単体では電圧が発生しませ Left Side 」と表示しています。 基板とピンヘッダーが付属しており、は んだ付けすると直接ブレッドボードの 差し込んで使えるようになる 1 スイッチ スイッチ を右に倒 を左に倒 すと中央 すと中央 の端子と の端子と 導通する 導通する 中央の端子はスイッチの状態で右また は左の端子と接続が切り替わる 図 1 ニつの状態を切り替えられる「トグ ルスイッチ」 左に倒す 右に倒す 右と中央 の端子が 導通する 左と中央 の端子が import wiringpi as pi import time スイッチを接続した G 曰 0 番号を指定する スイッチを接続した G 曰 0 を入力モードに設定する スイッチの状態を読み込む pi . H I GH ) : SW_PIN 15 pi . wiringPiSetupGpio() p i . p i n MOd e ( SW_P I N , p i . I N P UT ) w h i 1 e T r u e : i f ( p i . d i g 1 t a 1 Re a d ( S W_P I N ) print ("Switch Right Side") G N D とつなが 3.3V とつなが った状態になる った状態になる 図 2 接続図と動作の仕組み e 1 S e : スイッチの状態が High で あるか、 Low であるかで処 理を分ける print ("Switch Left Side") t i me . s 1 e e p ( 1 ) 図 3 スイッチの状態を読み取るプログラム「 switch. py 」 ラスパイマカシン川 1.10 19
電子がト 25 画すくつな 10 DC モーター xl 個 99 抵抗 1kQ 、 20kQ x 各 1 個 29 パワー MOSFET x 1 個 100 電池ポックス xl 個 34 ダイオード x 1 個 特集 1 利用部品 手デ名を回す・、 DC モーターは回転する電子バー すなど、さまざまな動作機構に接続 止してしまいます。そこでモーター ツです。車輪を回す、ベルトを動か して物を動かせます。 専用に大電流を流せる回路を作り、 DC モーターは二つの端子を備え パワー MOSFET でその回路を制御 ています ( 図 1 ) 。どちらかの端子に します ( 図 3 ) 。 MOSFET はスイツ 端子に電圧をかけると モーターが回転する 電源、もう一方を GND に接続する チのような機能を実現できます。 DC と DC モーターが回転します。反対 モーター側をドレイン、制御側とな 0 方向に回転させることもでき、その る Raspberry Pi の GPIO をゲート、 0 ときは接続を逆にします。 GND をソースにつないで使います。 RE -280RA では、一方の端子の横 ゲートを High にすると、ドレイン に丸いくばみがあります。この端子 とソース間で電気力流れるようにな を電源の + 側に接続すると向かって り、モーターが回転します。 回転軸を見た場合に、回転軸が右回 DC モーターは指で回すなどする 転 ( 正転 ) します。また、 DC モー と電気を発生して、 FET を故障さ ◆ ターは動作電圧が決まっています。 せることがあります。そこで、起電 ◆ 今回利用する「 RE -280RA 」では、 力が発生した場合に FET に流れ込 ◆ 3V が推奨電圧です。 まないようダイオードを介して電気 ◆ DC モーターを回転させるには図 を逃がすようにします。 ◆ 2 のように接続します。 DC モーター DC モーターを回転するプログラ ◆ のくばみがある方を図 2 の赤線とな ムは図 4 のようになります。回転、 ◆ るように接続します。 停止を切り替えるには、 LED と同様 DC モーターは、回転させる際に に GPIO の出力を High 、 Low に切り 大電流が流れます。 RE -280RA の場 替えます。 PWM 出力を使うと、モ ◆ 合は最大 1.13A 流れることがありま ーターの速度も変えられます。サン ◆ す。このような大電流の流れる電子 プルプログラムの motor_pwm. py を ◆ パーツを GPIO に直接接続すると、 実行するとモーターの速度が次第に 過電流が流れて Raspberry Pi が停 速くなります。 回転軸 かけられる くぼみが横にある端子電圧と回転 を電源の十側につなぐ数が記載さ と正転 ( 右回転 ) するれている 図 1 回転軸を回せる「 DC モーター」 ゞ一 KJaue8 Batteryw みの虫ジャン バー線を利用 くぼみ の 4-- 。 1kQ 2SK 4017 6 1 6 図 2 接続図 import time, wiringpi as pi モーターを接続した GP ℃の番号を指定する 23 pi . wiringPiSetupGpi0() pi . pinM0de( motor—pin, pi . OUTPUT ) motor_pin 続 接 一 z る ソ 0 す Raspberry Pi の GPIO に 接続する High を出力するとモ ーターが動く Low を出力するとモ ーターが止まる w h i 1 e T r u e : p i . d i g i ta ] W r i t e ( mo tO r—p i n , p i . H I GH ) t i me . s 1 ee p ( 1 ) ドレイン DC モーターを接続 する側に接続する 図 3 大電流が流れる回路を制御できる 「パワー MOSFET 」 Pi . digita1Write( motor—pin, pi . LOW ) t i me . s 1 ee p ( 3 ) DC モーターを回転、停止するプログラム「 moto 印 y 」 図 4 ラスパイマカジン 2017.10
利用部品 掣 : マトソグス 4 旦で画像を第する マトリクス LED を動作するには、 増やせば、テレビのように写真や動 LED を網目状に配置したマトリ 設定やライプラリの導入が必要で 画も表示できるようになります。ス クス LED では簡単な記号や文字を す。以下のように実行します。 タジアムなどのビジョンでは、多数 表示できます。 LED の数をどんどん の LED が配置されたものが利用さ $ e c h 0 " b 1 a c k ] i s t s n d_b c m 2 8 3 5 " れています。 > blacklist-rgb-matrix . conf ロ 手頃に入手可能なマトリクス $ sud0 mv blacklist-rgb-matrix LED として米 Adafruit 製の「 32X16 . conf /etc/modprobe . d ロ $ s u d 0 u p d a t e ー i n i t r a mf s - u ロ RGB LED Matrix 」があります、横 $ git clone https://github . com /hzeller/rpi-rgb-led-matrix 32 個、縦 16 個のフルカラー LED が / ロ 搭載されており、簡単なメッセージ $ cd rpi-rgb-led-matrix/python ◆ 図 1 32X16 個の LED で画像などを表示で や画像を表示できます ( 図 1 ) 。この きる「フルカラードットマトリクス LED 」 $ make build-python PYTHON=/us 製品は複数接続することも可能で、 r/bin/python3 ロ ◆ $ sudO make install-python PYT さらに大きなディスプレイとして使 INPUT 側にフラット HON=/usr/bin/python3 ケーブルを差し込む えます。 このマトリクス LED を利用する ケーブルの一方が赤 Raspberry Pi を再起動すると準 には、背面左側の「 INPUT 」と Ra い線になっている spberry Pi を接続します ( 図 2 ) 。付 備完了です。 試しに画像ファイルをマトリクス 属のフラットケープルを利用すれ LED に表示してみましよう。あら ば、オス - メスジャンパー線を利用 して接続できます。図 3 のように配 かじめ 32 x 16 の画像ファイルを準 備し、 PNG 形式で保存しておきま 線します。フラットケープルの一方 オス - メス型ジャンバー線 を利用して、 Raspberry Pi す。プログラムは読者限定サイトに に赤い線があるので、それを接続図 と接続する 用意しました。「 image_file 」に表示 の左側にして接続します。 、イ 図 2 付属のフラットケーブルを使って する画像のファイル名を指定して実 背面の中央に付属の電源ケープ Raspberry Pi と接続する 行すると、マトリクス LED に画像 ルを差し込みます。電 が表示されます。 源は 5V の AC アダブタ ーに接続して供給しま す。 DC ジャック DIP 化キットをプレッドボ ードに差し込み、そこ からみの虫ジャンパー 線を使って図 4 のよう に挟みます。なお、電 源端子の形状が異なる 場合があります。場合 によっては別途コネク タなどを購入する必要 があります。 9 フルカラーマトリクス LEDXI 個 100 AC アダブター x 1 個 伽 DC ジャック DIP 化 キット x 1 個 フルカラ . ヂマトリクス号 を三 赤線側 プラスとマイナスの端子がシ ョートしないよう注意する 0 ブレッド ポード側 23 7 マトリクス LED 側 みの虫クリップで 端子を挟む 図 4 電源の接続 図 3 接続図 ラスパイマカジン 2017.10
利用部品 1 赤色 LEDXI 個 26 黄緑色 LEDx 1 個 27 黄色 LEDXI 個 99 抵抗 100 Q x 1 個 さままな色し ED を点灯する わせて、暗くなったら LED を点灯 圧に当たる Raspberry Pi の GPIO は LED は光を発する電子バーツで 3.3V なので、計算すると 65 Q にな する、温度が上昇したら点灯して警 す。最近では照明や信号、電光掲示 ります。ただし、ちょうどの値の抵 告するといった活用もできます。 板などさまざまな場所で活用されて 抗が売っていない場合は求めた値よ LED は図 1 のような形状をしてい います。 Raspberry Pi に LED をつ り大きく、近い抵抗を使います。 ます。「アノード」と呼ばれる長い なげば、点灯と消灯を自由に制御で こでは 100Q を利用しています。 端子を電源の + 側に接続し、「カソ きます。ほかの電子バーツと組み合 また、黄色の「 OSYL5113A 」や ード」と呼ばれる短い端子を一側に 黄緑色の「 OSNG5113A 」でも Vf と 接続すると点灯します。逆に接続す If は同じなため、赤色 LED と差し替 ると点灯せす、壊れることもあるの えて点灯を制御できます。 で注意しましよう。 LED を制御するには、図 2 のよう 電子回路が出来上がったら、図 4 のプログラムを実行します。 LED を に接続します。アノードを Raspbe 接続した GPIO 番号を「 LED-PIN 」 rry Pi のデジタル入出力端子である という変数に入れておきます。こう 「 GPIO 」に接続し、カソードは電流 することで GPIO の接続先を変えた 制限用の抵抗を介して「 GND 」 ( グ とき、この 1 カ所の値を変更するだ ランド ) に接続します。 GND は電 けで済みます。「 pi. wiringPiSetupG 源の一側に当たる端子です。 pio() 」は GPIO の入出力のため、初め 電流制限用の抵抗を入れるのは、 LED に大電流が流れないようにす に一度実行しておきます。 GPIO の各端子は入力と出力の機 るためです。 LED に大電流が流れる 能を備えています。「 pi. pinMode( と、耐えられなくなり壊れて点灯し LED_PIN, pi. OUTPUT ) 」とする なくなります。接続する抵抗は図 3 と、指定した GPIO の端子が出力モ のように求めます。 Vf ( 順電圧 ) と If 、イ ードに切り替わります。「 pi. digital ( 順電流 ) は、 LED を点灯するのに Write( LED_PIN, pi. HIGH ) 」では、 推奨される電圧と電流で、 LED のデ ータシートや、パーッショップ ( 秋 指定した GPIO の出力のオンオフを 選択します。 pi. Ⅲ GH と指定すると、 月電子通商など ) の販売ページに記 GIPO が 3.3V の状態になり、 LED が 載されています。ここで使う「 OSD 占灯します。「 pi. LOW 」に変更する R5113A 」の場合は Vf が 2. OV 、 If が 電流制限用抵抗 と、 OV になり LED が消灯します。 20mA と記載されています。電源電 ド子続 一端接 カ短側 る き 電接丁 点 ド子側 を ノい 3 ア長 図 LED 十・ ・・抵抗・ 100C 8 6 0 0 図 2 接続図 電圧 : Vf 電流 :lf import wiringpi as pi L E D P I N 14 pi . wiringPiSetupGpi0() pi . pinM0de( LED—PIN, pi . OUTPUT ) p i . d i g i t a 1 W r i t e ( L E D—P I N , p i . H I GH ) 制御対象の G 曰 0 端子 High ( 3.3V ) を出力する 図 4 LED を点灯するプログラム日 ed ー on. py 」 d ー off. py を実行すると LED が消灯する。 LED を接続した G 曰 0 の番号を指定 出力モードに設定する G 曰 0 の出力を変更して LED の点灯制御する Battery 電源電圧 ( G 曰 0 では 3.3V ) 電源電圧ー Vf 電流制限用抵抗 = 図 3 電流を制限する抵抗値の求め方 ラスパイマガジン 2017
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 特別付録
利用部品 笋照度ンー 15 フォトトランジスタ x 1 個 31 AD コンバーター x 1 個 99 抵抗 1 kQ x 1 個 さを検すを ほど明るく、小さいほど暗いと分か 「コレクター」と呼び電源の + 側に 照度センサーは、周囲の明るさを ります。取得した値が特定の値より 短い端子は「エミッター」と呼びー 計測できるセンサーです。暗くなっ 大きいか小さいかで条件分岐して、 側に接続します。逆に接続すると動 たら照明を消す、あるいは、昼は動 明るい (Bright) 、暗い (Dark) を 作しないので注意しましよう。 画を撮影して夜になったら撮影をや 表示しています。明るさの判断する フォトトランジスタの変化は、抵 めるといった応用に使えます。 値は実際の計測結果に応じて変更 抗を接続した分圧回路を作ること 照度センサーには、フォトトラン しましよう。例えば、明るいのに で読み取ることができます ( 分圧 ジスタが利用できます。フォトトラ 「 Dark 」と表示される場合は、「 bri 回路については P22 を参照 ) 。フォ ンジスタとは、素子に光を当てると ◆ ght-th 」の値を小さくします。 トトランジスタと抵抗の間の電圧を 電気が流れやすくなる仕組みを使っ ◆ なお室内の照明程度の明るさを AD コンバーターを介して Raspber て明るさを計測しています。明るい ◆ 計測する場合、接続した抵抗 lkQ ryPi につなぐことで、変化を読み と電気が流れやすく、暗いと電気が では、出力電圧の変化がほとんどあ 取れます。 流れにくくなります。 ' ◆ りません。太陽光よりも暗い電灯な 接続図は図 2 の通りです。フォト 図 1 のように、外見は LED と同じ 、◆ どの明るさを計測する場合は、抵抗 トランジスタの端子の長さの違いに です。端子は長さが異なり接続する 値を大きくします。例えば接続する 注意してください。 際には注意が必要です。長い端子を 抵抗を 10kQ に変更すると、携帯電 明るさを計測するには、図 3 のプ 話の撮影用ライトを当てる程度で変 ログラムを実行します。フォトトラ 光を受けると電気が 化するようになります。使いたい環 ンジスタの状態は AD コンバーター 流れやすくなる 境に合わせた適度な抵抗を見つけ出 の計測値を取得することで知ること しましよう。 ができます。取得した値が、大きい import wiringpi as pi : ◆ import time 工ミッター ( 短 コレクター ( 長 端子 ) 電源の - 端子 ) 電源の + 側に接続 側に接続 図 1 明るさセンサー「フォトトランジス タ」の外見 ◆◆◆◆・・◆ ? ◆ 明るいか暗いかの判断する値 実際の明るさと表示メッセージが異なる場合は調節する 500 bright_th S P I C H READ CH AD コンバーターから 計測値を取得する pi . wiringPiSPISetup(SPI_CH, 1000000 ) w h ⅱ e T r u e : buffer buffer 0X6800 ー ( 0X1800 ☆ REÅD_CH ) buffer . to_bytes( 2 , byteorder='big' ) pi . wiringPiSPIDataRW( SPI—CH, buffer ) ( b u f fe r [ 0 ] ☆ 2 5 6 + b u ffe r [ 1 ] ) & 0x3ff V a 1 u e 3002 長端子・ 1 k Q ・ i f ( v a 1 u e 〉 b r i g h t_t h ) : print ("Bright") 計測値から明るいか暗いかを判断し、 メッセージを表示する e 1 S e : print ("Dark") 24 6 t i me . s ] e e p ( 1 ) 図 3 明るさを判断するプログラム「 photo ー t 「 . py 」 図 2 接続図 ラスパイマガジン 2017.10