ラズパイのユーザ名/パスワード変更

手順をメモする。

(1) piユーザでログイン

仮ユーザ(tmp)を作成し、sudoグループに追加し、パスワードを設定する。

sudo useradd -M tmp
sudo gpasswd -a tmp sudo
sudo passwd tmp
exit

(2) tmpユーザでログイン

piユーザのユーザ名(ここではnewnameとする)に変更し、ホームディレクトリを変更し、グループ名(ここではnewnameとする)も変更する。

sudo usermod -l newname pi
sudo usermod -d /home/newname -m newname
sudo groupmod -n newname pi
exit

(3) 新ユーザ名でログイン(パスワードはraspberryのまま)

仮ユーザ(tmp)を削除し、新ユーザのパスワードを変更する。

sudo userdel tmp
sudo passwd newname
exit

参考にした記事

jyn.jp

ArduinoやラズパイでEtherCAT

ArduinoやラズパイでカジュアルにEtherCATを組むまとめ。

EtherCATマスターとEtherCATスレーブ

まず前提として、

  • EtherCATマスターはふつうのEthernetのハードウェアでOK。ただし、Ethernetの生パケットを操作できる必要がある。(TCP/IPUDP/IPしか扱えないモジュールやライブラリは不可)
  • EtherCATスレーブは専用ハードウェアが必要。また、当然ながらEhernetコネクタはINとOUTの2口が必要。

f:id:licheng:20190811163758p:plain:w600

EtherCATスレーブ : EasyCAT + Arduino Uno

EtherCATスレーブは専用ハードを必要とするので、選択肢が限られる。カジュアルに使えて、比較的入手しやすく、1万円以下で買えるものというと、今のところEasyCATくらいしかないと思われる。(※ArtifactNoiseさんのこちらにも期待!)

EasyCATはイタリアのAB&T社の製品群で、以下がラインナップされている。

今回は、EasyCAT Shield for Arduinoを使用し、Arduino Unoと組み合わせる。購入は、今のところAB&T社の直販サイトから買うしかない。支払いはPayPalで可能。1個50ユーロで、送料が42ユーロするので、2個買うと142ユーロ。

f:id:licheng:20190811194257j:plain:w500

実験用プログラム

この実験用プログラムは、AB&T社のEasyCATライブラリに依存している。EasyCATライブラリは製品ページからダウンロードできる。このプログラムを書き込んだArduino UnoにEasyCATを取り付け、下記のように実験用のサーボとボリュームを接続する。

  • ポート3にサーボを接続
  • ポートA0にボリュームを接続

EtherCATマスター(1) : Rasoberry Pi

もっとも気軽に試せるEtherCATマスターはSOEMだろう。SOEMはオープンソースのEtherCATマスターで、WindowsMac OSLinux上で動作できる。もちろん、Rasoberry Piでも動作する。今回はRasoberry Pi 3Bを使用したが、もっと古い世代のRasoberry Piでもたぶん動作するだろう。Linuxカーネルをリアルタイム化しなければEtherCAT本来のご利益であるリアルタイム性は期待できないが、まあ素の(非リアルタイムカーネルの)Raspbianでも学習用途、実験用途には使えるし、割り切って使う分には使い道はあるだろう。

f:id:licheng:20190811174117j:plain:w500

実験用プログラム

【ソース】

【手順】

  • ラズパイの任意のディレクトリ(ここでは~/とする)に上記のSOEMをクローンまたはダウンロードする。
  • ~/SOEM/test/linux/の下に上記のeasycat_test.zipを展開する。
  • ~/SOEM/CMakeLists.txt の最後を下記のように編集する。
if(BUILD_TESTS) 
  add_subdirectory(test/linux/slaveinfo)
  add_subdirectory(test/linux/eepromtool)
  add_subdirectory(test/linux/simple_test)
  add_subdirectory(test/linux/easycat_test)  # ←この行を追加
endif()
  • 以下のコマンドを実行してテストプログラムをビルドする。
cd ~/SOEM
mkdir build
cd build
cmake ..
make
  • 前述のEtherCATスレーブ(EasyCAT + Arduino Uno)2台をラズパイに数珠つなぎに接続する。
  • ラズパイ側から見て1台目のスレーブにボリューム、2台目のスレーブにサーボを取り付ける。
  • 以下のコマンドを実行してテストプログラムを実行する。
cd ~/SOEM/build/test/linux/easycat_test
sudo ./easycat_test eth0
  • 1台目のスレーブのボリュームを回すと、2台目のスレーブのサーボがそれに応じて動く。


EtherCATマスター(2) : Ethernet Shield 2 + Arduino DUE

前述のSOEMをArduinoで使えるようにC++クラスにラップしたライブラリ SOEM4Arduino を作成した。

github.com

SOEMはスレーブを管理するためにメモリを大量に使うのでArduino UnoやArduino Megaでは動作させるのは現実的でない。いまのところ、Arduino Dueで動作確認できている。それでもオリジナルのSOEMに比べると管理テーブルのサイズを大幅にシュリンクしている。

EthernetコントローラにはWIZnet社製W5500を搭載したEthernet Shield 2を使用する。

f:id:licheng:20190811173944j:plain:w500

実験用プログラム

【ソース】

【手順】

  • Ethernet Shield 2を取り付けたArduino DUEに上記のプログラムを書き込み、マスターとする。
  • EtherCATスレーブ(EasyCAT + Arduino Uno)2台を数珠つなぎにマスターに接続する。
  • マスター側から見て1台目のスレーブにボリューム、2台目のスレーブにサーボを取り付ける。
  • スレーブ2台およびマスターに電源を投入する。
  • 2秒ほど待つとスレーブのLANコネクタのLEDが点滅しはじめる。
  • 1台目のスレーブのボリュームを回すと、2台目のスレーブのサーボがそれに応じて動く。


EtherCATマスター(3) : GR-SAKURA

前述のSOEM4ArduinoはGR-SAKURAでも動作する。GR-SAKURAはルネサスRX63Nマイコンを搭載したArduino Unoフォームファクタマイコンボードであり、Arduino IDEから派生したIDE for GRで開発できる。また、RX63NマイコンEthernetコントローラを内蔵しており、GR-SAKURAはEthernetコネクタを搭載している。つまりシールド基板なしでEtherCATマスターになれる。

ただし、SOEM4ArduinoをGR-SAKURAで動作させる場合には既知の不具合があり、受信の応答性が悪い。パケットを受信するのに8msecもかかってしまう。また、起動後3秒以上待ってからSOEMの初期化をする必要がある。これらについては現在調査中である。

f:id:licheng:20190811174033j:plain:w500

実験用プログラム

前述のEthernet Shield 2 + Arduino DUEの場合と同じプログラムが動作する。ただし、上記の不具合により、電源投入後10秒ほど待たないと、サーボの追従動作が始まらない。

NeoPixel Ringでイヤリング

NeoPixel Ring (12連フルカラーシリアルLED)でイヤリングを作ってみました。点灯パターンは青と白を基調として「ゆらゆら」「ぐるぐる」「ちかちか」の3パターンを繰り返します。

f:id:licheng:20190810152859j:plain:w500

かなり重いので耳掛け式(イヤーフック)です。ピアスではありません。

f:id:licheng:20190608172150j:plain:w500

マイコンと電池はフェルトのふさふさの中に仕込んでます。

f:id:licheng:20190608122308j:plain:w500

材料

作り方

イヤーフックの作り方

ホームセンターで売ってる直径2mm真鍮の棒を曲げて作ります。といっても、真鍮は固いので簡単には曲がりません。そこで焼きなましをします。ガスバーナー(イワタニのクッキングバーナーなどでOK)で真鍮の棒を赤くなるまで熱してから水につけて冷します。すると軟らかくなります。表面が変色するので目の細かい紙やすりや研磨剤で磨きます。あとは適当に耳の形に合わせて曲げ、紐を通すための丸いカンを作ります。

f:id:licheng:20190602153757j:plain:w500

フェルトのふさふさ(タッセル)の作り方

「フェルト タッセル 作り方」でググってください。ただし、3線のケーブルを芯として、ふさふさの中にマイコンと電池を仕込めるように少し工夫します。また、ケーブルはループエンドを通してからNeoPixel Ringに接続します。

f:id:licheng:20190810005100j:plain:w600

NeoPixel Ringをレジンでドーナツ状に

NeoPixel Ringに少しずつビーズをまぶしながらUVレジンで固め、ドーナツ状にしていきます。UVレジンは高価なのでかさ増しのためグルーガンを併用しました。3Dプリンタでドーナツ状の型を作って型取りすればもっときれいにできるかも。

配線

f:id:licheng:20190810005134j:plain:w600

ソフト

Arduinoのスケッチ一式を下記にアップしました。

このスケッチはAdafruit社のNeoPixelライブラリに依存しています。
github.com

MbedからLPCXpressoへのエクスポート

やりたいこと

Mbedのオンラインコンパイラで作成したLPCマイコンのプロジェクトをエクスポートしてLPCXpressoにインポートしたい。

以前はエクスポート時の選択肢にLPCXpressoがあったのだけど、今はなくなっている。代替手段を見つけるのに手間取ったのでメモする。結論だけ知りたい方はこちら

失敗その1:MCUXpresso向けにエクスポートする

現在は、エクスポート時の選択肢の中にLPCXpressoの代わりにMCUXpressoがある。MCUXpressoはLPCXpressoの後継となるIDEである。なのでMCUXpresso向けにエクスポートして、MCUXpressoにインポートするのが正解のはずである。しかしこれはうまくいかない。

MCUXpressoを選んでエクスポートを実行すると、「少しお待ちください…」のままいつまでたってもエクスポートが完了できないのである。これはまあ、失敗というより不具合だろう。

f:id:licheng:20190808213050p:plain

f:id:licheng:20190808213105p:plain

失敗その2:Make-GCC-ARM向けにエクスポートする

エクスポート時の選択肢で「Make-GCC-ARM」を選んでMakefileプロジェクトとしてエクスポートし、LPCXpressoにMakefileプロジェクトとしてインポートすることを試みた。インポートじたいは成功した。しかしLPCXpressoでビルドしようとすると「Program "make" not found」というエラーになる。Windows環境ではmakeがないためだ。そこでWindows版のGNU Makeをインストールしてみたが、こんどはビルド途中でなんか「No such file or directory」でエラーになる。どうもこの方法はスジが悪そうなのでここで断念。

失敗その3:Mbed CLIを使う

別のアプローチとして、Mbed CLIを試してみた。Mbed CLIとはMbedのオフライン開発のためのコマンドラインツールである。まずはこれをインストールした。Mbed CLIを使ってMbedのプロジェクトをローカルにダウンロードするには、プロジェクトをパブリッシュし、Mbed CLIの mbed import コマンドでそのURLを指定する。

しかし、これがやたら時間がかかる。ただのLチカのプロジェクトをダウンロードしたら2ギガバイト以上もあった。フォルダの中身を見てみたら、ありとあらゆるターゲットのためのありとあらゆるファイルが含まれていた。もうね、アホかと。

しかもその挙句、mbed compileコマンドでビルドを試みると、「mbed.h が見つからない」などというエラーが発生するのである。mbed exportコマンドでMCUXpresso向けにエクスポートし、MCUXpressoにインポートすることも試してみた。インポートじたいは成功したが、やはりビルドは失敗。心が折れたのでここで断念。

結論:GNU ARM Eclipse向けにエクスポートする

LPCXpressoにGNU ARM Eclipseプラグインをインストールし、MbedからGNU ARM Eclipse向けにエクスポートしたプロジェクトをLPCXpressoにインポートする。このやり方で成功した。おそらく、MCUXpressoなど他のEclipseIDEでも同じやり方ができると思われる。

手順(1) GNU ARM Eclipseプラグインのインストール

まず、LPCXpressoにGNU ARM Eclipseプラグインをインストールしておく。メニューの 「Help」>「Install New Software」で「Add」をクリックして、下記のように入力する。

f:id:licheng:20190809092957p:plain:w500

すると、「GNU ARM C/C++ Cross Development Tools」という項目が表示されるので、これを選択してインストールする。

f:id:licheng:20190809094919p:plain:w600

手順(2) GNU ARM Eclipse向けにエクスポート

Mbedのオンラインコンパイラでプロジェクトを選択して、右クリックメニューから「プログラムのエクスポート」を選択する。するとターゲットとツールチェインを選択するダイアログが出るので、ツールチェインの選択肢から「GNU ARM Eclipse」を選択して、エクスポートする。するとローカルにzipファイルがダウンロードされる。

f:id:licheng:20190809104425p:plain

手順(3) LPCXpressoにインポート

LPCXpressoのQuickstart Panelで「Import project(s)」を選択する。「Project Archive(zip)」の欄で、手順(2)でダウンロードしたzipファイルを選択し、インポートする。

手順(4) ビルドとデバッグ

プロジェクトの「Properties」の「C/C++ Build」の「MCU settings」で、ターゲットのMCUを選択しておく。この設定をしないと、デバッグ時に「No MCU associated with this project.」というエラーが出る。あとはLPCXpressoの通常どおりの操作でビルドとデバッグができる。

f:id:licheng:20190809113949p:plain:w600

6軸IMUセンサBMI160

6軸IMUセンサ(3軸加速度+3軸ジャイロセンサ)と言えば、InvenSense(現TDK)のMPU-6050やSTマイクロのLSM6DS3が電子工作界隈ではメジャーですが、BOSCHのBMI160もがなかなか良いです。BOSCHといえば気圧・温湿度センサBMP280/BME280がすごく流行りましたが、こちらも流行ってほしいです。

f:id:licheng:20190805200519j:plain

ブレークアウト基板

今のところブレークアウト基板はAmazonで売ってる紫色のやつがいちばん入手性がいいかな? 中華な怪しさが漂います。残念ながらこういうBMI160単品の汎用ブレークアウト基板はスイッチサイエンスとか秋月とかではまだ取り扱いがありません。SpurkfunかAdafruitあたりが基板出してスイッチサイエンスで買えるようになってほしい。せめてHiLetgoあたりが出してたら多少は安心感?があるのですが。

性能

BMI160もMPU-6050もLSM6DS3も似たり寄ったりの仕様ですが、BMI160は特にジャイロのオフセットが小さいのが好印象です。まあ、ガチで使うときはどのみちマイコンでキャリブしますけどね。

チップ ジャイロのオフセット[deg/sec]
BMI160 ±3
LSM6DS3 ±10
MPU-6050 ±20

Arduinoで使う

下記のライブラリを使うとよいでしょう。
github.com

チップ単価

基板をおこす場合、DigiKeyRSコンポーネンツでの単価の比較は下記のとおり。いずれも1個買いの場合の価格です。(2019/08/05現在)

チップ DigiKey価格[円] RSコンポーネンツ価格[円]
LSM6DS3 347 357
BMI160 624 取り扱いなし
MPU-6050 961 1074

PSoC注意点メモ

f:id:licheng:20190709143909j:plain:w500

PSoC 5LP Prototyping Kitの注意点

  • PSoC 5LP Prototyping KitのP0_2, P0_3, P0_4, P3_2にはでかいコンデンサ(1uF)がついてるので要注意。とくにOPアンプで使うときに不都合。(不都合なときはC12, C13, C9, C7をはずす。)
  • P1_0, P1_1もデバッガ用ピンなので使えない。
  • P2_1にLED、P2_2にSWが付いていることにも注意。
  • PSoC 5LP Prototyping Kitは5V動作である。PSoCじたいは3.3Vでも動作するが、デバッガ部から5Vが供給されてしまう。
  • デバッガ部を首ちょんぱして5Vは接続せず、GNDは接続、その他の信号は抵抗をはさんで接続し、ターゲット部のVDDに3.3Vを供給すれば3.3V動作でデバッグもいちおうできる。
  • ターゲット部のUSBコネクタを接続するとやはり5Vが給電されてしまう。R20をはずせばカットできるはず。
  • 首ちょんぱしたデバッガ部でもじゅうぶんPSoC用デバッガとして使えるが、あえてMiniProgを買うならMiniProg3かMiniProg4! (秋月にはMiniProg1があるけどPSoC1用なので不可)

PSoC Creatorの注意点

  • Vrefは精度重視でドライブ力は無い。配線の抵抗も無視できない。ボルテージフォロワなどで受けて使うのが基本。(と中の人が言ってた。)
  • Tools > Options > Design Entry > Component Catalog で 「Show Hidden Components」にチェックすると、コンポーネントカタログに隠しコンポーネント(笑)が表示される。PSoCのハードウェアを余さず活用できるが、ライブラリが整備されてないのですこぶる使いづらい。まあ通常は必要ないだろう。
  • 依存するライブラリ(たとえば自作コンポーネントのライブラリ)の指定は、Project > Properties > General > Dependencies をクリックして、さらに「...」をクリックすると設定画面が現れるので「User Dependencies」に追加する。(分かりにくい!)

BME280とBMP280の仕様の違い

f:id:licheng:20190618173924j:plain:w400

BOSCHの気圧・温度センサBME280とBMP280の差は、基本的には湿度センサの有無ですが、configレジスタのt_sbビットの解釈も一部異なっているので要注意。t_sbビットはセンサ測定値の更新周期に影響する tstandby を設定します。

tstandby[msec]の設定

t_sb[2:0] BME280 BMP280
000 0.5 0.5
001 62.5 62.5
010 125 125
011 250 250
100 500 500
101 1000 1000
110 10 2000
111 20 4000

例えば、BME280をBMP280に置き換えたら tstandby=10msecに設定したつもりが2000msecになってしまいます。これはセンサ測定値の更新周期が2秒以上になることを意味します。