2018年6月15日金曜日

pi-top v2を購入してStretch系列のpi-topOSで使ってみた

0. はじめに

Raspberry Piを組み込んだノートPCであるpi-topの新しいバージョンが2017年10月に発売されたのですが、なかなか買う気になれずにスルーしてきました。

pi-topに関しては2015年10月頃に発売された旧バージョンを入手し、いくつかブログ記事を書いてきました。
この旧バージョンを使った上で、ちょっとひどいなと思ったのは下記の二点です。
  • とにかくキーボードのクオリティが低すぎる。なかなか反応しないキーがありノートPCとしては使い物にならない。外付けでUSBキーボードをつなぎたくなるレベル
  • なんらかの原因でバッテリーが突然使用不能になる。私の場合、使用時にはACアダプタの接続が必須となってしまいました
キーボードのクオリティの低さについては過去にブログに記しました。バッテリーが使用不能になる件については今回初めて記しますが、ネットで検索すると、同じ問題に当たった人がかなりいらっしゃるようです。Li-Poバッテリーのように過放電すると以後バッテリーが使えなくなる、という症状に似ているように思えます。

旧バージョンでそんな体験をしていますので、決して安くはない価格でまた似たようなクオリティの製品だったら嫌だなあと思い、なかなか手を出しにくかったのです。

しかし、発売後しばらくたってもこの新バージョンが旧バージョンと比べて進化しているのかどうかなど、私が知りたい情報があまり入ってこないので、諦めて購入して自分で確かめてみることにしました。

1. 外観

そんなわけで購入したpi-top v2の外観です。

pi-top v2の外観

旧バージョンに比べると、マウスのタッチパッドの位置が一般的なノートPCと同じ位置になり、洗練された印象を与えます。サイズは一般的なノートPCと比べるとかなり大きく持ち運びには向かないのですが、これは旧バージョンからそうですので割り切るしかないでしょう(ちなみにサイズは34.5x22x4cm、重さは1.5kg)。

なお、OSは公式サイトからStretch系列のpi-topOSをダウンロードして用いました。付属のOSインストール済SDカードには、古いJessie 系列のpi-topOSが入っていたためです。

Stretch系列でもいつも通り、起動時にスプラッシュスクリーン動画が流れ、Dashboardというアプリケーションが自動起動するのですが、これを無効にするには、下記の2コマンドをターミナルで実行すればOKです。
sudo systemctl disable pt-splashscreen.service
sudo systemctl disable pt-os-dashboard.service
さらに、ターミナルソフトウェアが最大化して開くのを抑制したければ、「Raspberry PiをノートPC化するPi-Topにユーザーpiでログインしてみた」の設定を参考に.config/openbox/lxde-pi-rc.xmlを編集してください。

組み立て時の写真は撮っていませんが、基本的にはRaspberry Piを組み込むだけですので、旧バージョンより組み立ての難易度は低めです。ただし、はめ込みのかみ合わせが合いにくかったり、ねじ穴の位置が微妙にずれていてねじが締めにくかったりなどの問題があり、慎重な作業が必要になりますので、小さな子供に任せられる作業ではないと思います。

2. キーボード

さて、問題のキーボードですが、結論から言えば旧バージョンのpi-topのものに比べると、大幅にクオリティアップしています。

pi-top v2のキーボード

pi-top v2内蔵のキーボードとマウスだけで作業をしても、まったく苦にならないレベルです。
何を当たり前のことを、と思うかもしれませんが、旧バージョンは普通の作業を内蔵キーボードとマウスで行うだけでもストレスを感じる作業だったのです。

ただし気になる点もいくつかあり、例えば図からもわかるように、
  • 左Shiftキーが小さく、その右隣に<、>キーがある
  • Enterキーの右隣にHome、Endキーなどがある
などの問題が挙げられます。これらは慣れないと何度もミスタイプします。不満と言えば不満ですが、この程度の特殊な配置のキーボードはノートPCにはよくあるので、まあ許容範囲かな?

3. キーボードをスライドさせる

pi-top v2の目玉の一つはキーボードをスライドさせてGPIOにアクセスできることでしょう。

緑色のプラスチックに触って下図のようにスライドさせると、素材のおもちゃっぽさを感じずにはいられないものの、仕組み自体はなかなかよくできていることがわかります。

pi-top v2のキーボードをスライドさせた様子

スライドにより、図のようにRaspberry PiおよびHUB2.0というメイン基板が露出されます。その横にさらにブレッドボードが見えますが、これはpi-topPROTO+という電子工作用のモジュールで、今回これが標準搭載されています。

旧バージョンのときはpi-topPROTOは別売りで、さらにpi-top本体の発売後しばらく入手可能にならないという問題がありましたので、今回これが標準搭載されたのは良い点だと思います。

旧バージョンのpi-topでのpi-topPROTO

なお、このpi-topPROTO+からRaspberry Piの全てのGPIOにアクセスできるのですが、今回そのピンがArduinoなどと同じメスピンになっているのですね。

個人的には、Raspberry Pi本体と同じくオスピンの方が混乱が少なくて良いと思うのですが、メスピンの方がショートのリスクが小さい、などと配慮した結果なのかもしれません。

ただまあ、そもそもHUB2.0のすぐ隣で電子工作をするというのはかなりリスクが高いですよね。手がすべってHUBを壊してしまったらそれでpi-topが使えなくなってしまいますから。

なお、キーボードをスライドさせると、Raspberry Pi本体に取り付けたSDカードが見えるようになりますが、これを手で取り外すのは困難です。

そのため、SDカード取り外し用の器具が添付されており、下図のようにSDカードをひっかけて引き抜けるようになっています。

SDカード取り外し用の器具の使い方

世の中には、Raspberry Pi本体からSDカードを取り出すことを全く考慮していない商品もありますので(例えば公式のディスプレイケース)、このような対処法が用意されているのは(必ずしもスマートな方法ではないとは言え)好ましいことだと思います。

4. 各種端子へのアクセス

USB端子2つ、LAN端子、およびイヤフォンジャックへは下図のように背面からアクセスできるようになっています。

USB端子2つ、LAN端子、およびイヤフォンジャック

旧バージョンでは、これらの端子へのアクセスが悪く、下記のようにUSBハブやヘッドフォン用の延長ケーブルを用いるなどの工夫が必要でした。LAN端子に至っては本体に固定するためのねじを取り外せばなんとか使えるかも?というレベルでした。

旧バージョンのpi-topでのUSB端子とイヤフォンジャックの利用

このように、これらの端子へのアクセスは旧バージョンから比べるとかなり進歩したところです。

ただし、残念な点もあります。下図のように公式カメラモジュールを接続する端子が銀色のカバーに塞がれており、実質公式カメラモジュールが使えなくなっているのです。銀色のカバーは、GPIOとHUB2.0との接続や、CPUのヒートシンクの役割をしているものです。

銀色のカバーを取り付ける前にあらかじめ公式カメラモジュールを取り付けておけば恐らく使えるでしょうが、銀色のカバーは頻繁に取り外すものではないので、公式カメラモジュールの使用を諦める方が多いのではないでしょうか。これは、非常に詰めが甘いと感じた点です。

公式カメラモジュールを接続する端子がふさがれている

5. バッテリー

バッテリーについては、今後使用していく上でどうなるか検証していきたいと思います(個人的にはあまり期待していませんが…)。

恐らく、「過充電、過放電しないよう気をつける」という方針で使うことになりますので、すぐ利用不能になることはないのではないでしょうか。

6. まとめ

そんなわけで、旧バージョンのpi-topを体験した方ならば、その欠点の多くがpi-top v2で解消されていることに驚くのではないかと思います。2015年当時からこのクオリティで出ていれば…と思いますが、ものづくりはそんなに甘くないということなのでしょう。

なお、この出来の良さだけに、公式カメラモジュールが使えないという詰めの甘さは残念なところです。

さて、ここまでpi-top v2について比較的高めの評価を与えてきましたが、これはあくまで旧バージョンのpi-topと比較してのことです。

Windows PCの代替にしようとか、子供にはじめて与えるPCにしようとか、という用途に用いるのは慎重になった方が良いと思います。大手メーカーの製品のように「正常動作し、なおかつ保証があって当然」というものではありませんので。
(そもそも英語キーボードの時点で、人を選ぶ商品ではあります)



「カラー図解 最新 Raspberry Piで学ぶ電子工作」、「実例で学ぶRaspberry Pi電子工作」、「Raspberry Piではじめる機械学習」を執筆しました。

2018年6月2日土曜日

2つのmicro:bitで無線コントロールカーを作ってみた

0. はじめに

小中学生へのプログラミング教育用教材について興味があり、これまで下記のエントリを書いてきました。


どちらも Raspberry Pi 上の Scratch 1.4 を用いて物の制御を行う、という内容になっています。

しかし、この方法では以下の問題があり、やや敷居が高いのが難点です。

  • Raspberry Pi を初めて触る方にとっては物品の準備やOSのインストールから始めなければならないこと
  • Raspberry Pi 上ではScratch の新しいバージョン2が動作するものの、Flashベースのため動作が遅く、さらに電子工作に必ずしも適していないという点から、古いバージョン1.4を使わざるを得ない場面が多いこと

そこで、今回は目先を変えてBBC micro:bit をプログラミング教材として用いた場合に何が可能かを試してみました。BBC micro:bit とは、イギリスの英国放送協会 (BBC) が小学生の教育用に開発したマイコンボードです。

用いたのは以下のものです。


下図が完成状態です。
micro:bitを2つ持っていなかったので、コントローラー用の1台は、スイッチサイエンスにより開発されたmicro:bitの互換機であるchibi:bitを用いました。もちろん、chibi:bitでなくmicro:bitを用いても同じです。

chibi:bitには、スマートフォン用のモバイルバッテリーを電源として用いてます。


今回作成したのはタイトルにもあるように無線コントロールカーです。完成品の動画が下記になります。

2台のmicro:bitがBLEで通信して、バギーカー上のmicro:bitが車体を動かしています。


1. プログラム

プログラムはmicro:bitの公式サイトでプログラミング用のブロックを組み合わせることで作成します。

まず、受信側(機体側)のプログラムです。


送信機から 0 (静止)、1(前進)、2(左折)、3(右折)に対応する数値が送られてきますので、それに応じて2つの連続回転サーボを動かしています。

(P1, P2)のピンに対し、(90, 90)を出力すると静止です。
(0, 180)は全速で前進、(180, 0)は全速で後退、
(0, 0)は全速で左回転、(180, 180)は全速で右回転です。

上記のプログラムでは後退を用いず、左回転と右回転は速度を遅めにするためそれぞれ(80, 80)、(95, 95)と設定しています。これらは好みやモーターの特性によると思いますので、お好みで調整します。

次に、送信側のプログラムです。


こちらはあまり美しいプログラムにはなっていません。

micro:bitには「ボタンが押されたら」というイベントハンドラはあるのですが、「ボタンから指を離したら」というイベントハンドラがありません。

そのため、そのままでは「ボタンAを押したら」、「ボタンBを押したら」、「ボタンAとBを同時押したら」という3パターンしか動作を作れません。

このプログラムでは前進、左回転、右回転、静止、の4つの動作を作りたかったので、上記のプログラムではイベントハンドラを用いず、200msごとにボタンの状態をチェックすることにしています。

さらに、そのままでは最悪200msごとに通信が行われてしまいます。それを避けるために、現在のボタンの状態を表すstateという変数を導入し、stateの値が変化した場合のみ通信を行う、ということをしています。

上記を実現するため、「もし~なら~でなければ」の分岐命令を4重に組み合わせることになり、プログラミングの講義ではあまり教えたくないようなプログラムになってしましました。

2. まとめ

最後に、この題材の良いところと悪いところを列挙します。

良いところ
  • 普段使っているPC(Windowsなど)でブロックによるプログラミングができる
  • BLEによる通信が簡単
  • PCから切り離してもスタンドアロンで動作するプログラムが簡単に書ける(Raspberry Piでそれをやろうとするとそれなりに大変)
  • 連続回転サーボは標準のブロックだけで制御できるのでmicro:bitと相性が良い
悪いところ
  • 作ってみればわかりますが、:MOVE miniの機体の組み立てが、見た目ほどフレンドリーではない
  • 「ボタンを離したら」というイベントハンドラがないので表現できる状態が少ない
そんなところでしょうか。

どんな環境を用いる場合も当てはまりますが、後は用意する題材の工夫次第で十分面白い講義ができるのではないかと思いました。



「カラー図解 最新 Raspberry Piで学ぶ電子工作」、「実例で学ぶRaspberry Pi電子工作」、「Raspberry Piではじめる機械学習」を執筆しました。

2017年12月13日水曜日

Raspberry PiのGPIOが引き出せる小型タッチスクリーンが届いたので電子工作に使ってみた

0. はじめに

2017年12月10日頃、Raspberry Pi用の小型タッチスクリーンでGPIOを引き出せるものが、amazonでセールされているというので話題になっていました。こちらです。
セール中は2656円でしたが、通常時でも十分安いですね。

この手の小型液晶はGPIOが塞がれてしまうものが多いのですが、それが利用可能なものは珍しいと思い、入手して利用してみました。

利用イメージはこちらです。ターミナルソフトウェアのLXTerminalが映った画面がこのタッチスクリーンです。そこから下方向に横向きにGPIOのピンが出ており、電子工作などに利用可能になっています。


以下、利用時におこなった設定などをメモしていきます。

1. まずは起動してみる

2017/11/29にリリースされたNOOBS 2.4.5でRaspbianをインストール済のRaspberry Pi 3が手元にあったので、そのままタッチスクリーンを差して起動してみたのが次の写真です。

特に何の設定もすることなく画面が映りました。画面の解像度は1280x720でした。さすがにこの解像度では文字が小さすぎて全く読めず、解像度を変更する必要があります。また、この状態ではタッチには反応しません。

以下でそれらの設定を行っていきます。

2. 設定

設定方法は付属のDVDのドキュメントに書いてあります。DVDにある圧縮ファイル Driver/LCD-show.tar.gz を展開すると LCD-show というディレクトリが現れるのですが、その中のスクリプトファイル MPI3508_480_320-show を管理者権限で実行すると設定が完了するようです。

しかし、/boot/config.txtなどのファイルを丸ごと差し替えられるのが嫌なので、 MPI3508_480_320-show の中身を見ながら必要な設定を行っていくことにしました。

まず、/boot/config.txt に設定を記します。例えば、下記のように管理者権限のテキストエディタで/boot/config.txt を開きます。テキストエディタはviなどお好みのものをどうぞ。
sudo leafpad /boot/config.txt
開いたファイル末尾に下記の内容を追記し、保存してからファイルを閉じます。
hdmi_driver=2
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
#hdmi_cvt 480 320 60 6 0 0 0
hdmi_cvt 800 480 60 6 0 0 0
#hdmi_cvt 800 600 60 6 0 0 0

dtparam=spi=on
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
最後の2行がタッチの設定を行っており、それ以外は解像度の設定です。800x480のみを有効にしています。実用に耐える解像度は800x480か800x600ではないでしょうか。

なお、このままではタッチの位置が上下逆転してしまうので、キャリブレーションによりタッチの位置を正しく反映するようにします。

次に、まず、下記のコマンドを実行し、/etc/X11/xorg.conf.d/99-calibration.conf を管理者権限で開きます。テキストエディタはお好みで。
sudo mkdir -p /etc/X11/xorg.conf.d
sudo leafpad /etc/X11/xorg.conf.d/99-calibration.conf
空のファイルが開きますので、下記の内容を記して保存し、ファイルを閉じます。
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "3936 227 268 3880"
        Option  "SwapAxes"      "1"
EndSection
この内容は、LCD-show/usr/99-calibration.conf-3508 に書かれていた内容です。

なお、NOOBS 2.4.5 (Raspbian 2017-11-29) の頃は上記の設定で良かったと思うのですが、
2018年3月にリリースされた NOOBS 2.7.0 (Raspbian 2018-03-13) で試したところ、上記の「Option "SwapAxes" "1"」の次の行に下記の一行を追加しないと横方向の軸の向きが逆になる現象が見られました。同じ現象に遭遇した方は追加をお試しください。
        Option  "InvertY"      "1"

次に、以下のコマンドで xserver-xorg-input-evdev をインストールします。
sudo apt-get update
sudo apt-get install xserver-xorg-input-evdev
最後に、下記のコマンドを実行します。設定ファイルの優先順位を変更しているようです。
sudo cp -rf /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf
以上で再起動すると、/boot/config.txtで設定した解像度で、冒頭の写真のような画面の向きでタッチが効くようになっていると思います。

この解像度でもターミナルの文字を読むのはやや厳しいので、私の場合LXTerminalのメニューの「編集」→「設定」から、フォントサイズを14、ウインドウサイズを70x16(解像度800x480の場合)または70x22(解像度800x600の場合)に変更しました。この設定もお好みで。
LXTerminalの設定画面で「OK」ボタンが画面外にあるので苦労しますが、キーボードのTABキーで選択肢のフォーカスを画面範囲内の最下部のものに移動し、そこから「TABキー二回押してからEnter」で「OK」ボタンを押したことになります(この表現で伝わるか不安ですが)。

3. GPIOについて

GPIOはそのまま使えますが、下図のSPI関係のピンとGPIO 25はタッチスクリーンで使用済であるようなので使わないようにしましょう。


4. 終わりに

この手の小型タッチディスプレイは沢山出ていますが、GPIOが利用可能なものは貴重ですね。設定もそれほど難しくありませんし、3000円前後なら十分試す価値はあるのではないでしょうか。



「カラー図解 最新 Raspberry Piで学ぶ電子工作」、「実例で学ぶRaspberry Pi電子工作」、「Raspberry Piではじめる機械学習」を執筆しました。