参考URL:https://rt-net.jp/mobility/archives/12922
ラズパイマウスにデバイスドライバをインストールして、LEDを点灯させたりモータを回したりします。
前回はラズパイマウスに搭載したRaspberry Pi 4 Model BにUbuntu 18.04をインストールしました。
またネットワークを設定しWi-Fiに接続できるようになりました。IPアドレスも固定しています。 ubuntu@192.168.1.130
今回からSSHでログインして作業していきます。
【インストール前の準備】
$ sudo apt update
$ sudo apt upgrade
次にボーレートの設定を変更します。
次のコマンドを入力してファイルを開き、dtparam=i2c_baudrate=62500の1文を追記します。
$ sudo nano /boot/firmware/config.txt
下記の黄色い部分を追加「 dtparam=i2c_baudrate=62500 」

再起動後、SSHでログインします。
次のコマンドを入力して、ボーレートが 62500 になったことを確認します。
$ printf "%d\n" 0x$(xxd -ps /sys/class/i2c-adapter/i2c-1/of_node/clock-frequency)

成功です。
【 デバイスドライバをインストールする 】
$ cd ~
$ git clone https://github.com/rt-net/RaspberryPiMouse.git
RaspberryPiMouseというディレクトリが作成されます。そのディレクトリへ移動します。
$cd RaspberryPiMouse/

さて、今回使用しているのはRaspberry Pi 4です。
Raspberry Pi 4を使用する場合は、ソースファイルを少し編集します。
次のコマンドでソースファイルを編集します。
$ nano src/drivers/rtmouse.c
54行目辺りに#define RASPBERRYPI 2と書かれた行があるので、その数字を4に書き換えます。

保存終了後
$ cd utils
で「 utils 」ディレクトリ移動して
$ sudo apt install linux-headers-$(uname -r) build-essential
デバイスファイル生成に必要なパッケージをインストールします。
$ ./build_install.bash
を実行したらビルドとインストールが完了です。
完了後、ブザーがピとなります。
【 サンプルプログラムを実行する 】
デバイスドライバをインストールしたので、モーターやLEDを動かせるようになります。
サンプルプログラムを実行して確認します。
まず、サンプルプログラムのディレクトリに移動します。
$ cd ~/RaspberryPiMouse/SampleProgram
下記のようにプログラムを実行します。
【 LEDを点灯する 】
$ bash step1.sh
Mouseロボットの前方4個の赤LEDが点滅します。端末上では「1」、「0」が表示され同期してLEDが点灯、消灯します。
【 ブザーを鳴らす 】
キーボードの「0」で音が消え、その他英文字で少し音階が変わります。
$ bash step2.sh
【 スイッチを押す 】
$ bash step3.sh
【 モーターを回す 】
$ bash step4.sh
【 ライトセンサの値を読取る 】
$ bash step5.sh
【 パルスカウンタの値を読取る 】
$ bash step6.sh
/dev/ 内には、「rtconunter_*」は存在しない。モーターは回転するが数値表示せずにファイルが存在しないというエラーメッセージがでる。
次のようにstep6.shを編集することで、符号付きのカウント値を読み取ることができます。
MOTOR_R=/dev/rtmotor_raw_r0
MOTOR_L=/dev/rtmotor_raw_l0
COUNTER_R=/dev/rtcounter_r1 # r0からr1に書き換え
COUNTER_L=/dev/rtcounter_l1 # l0からl1に書き換え
/dev/ 内には、「rtconunter_*」は存在しない。モーターは回転するが数値表示せずにファイルが存在しないというエラーメッセージ
【 次回起動時も自動でデバイスドライバをインストールする 】
これまでの手順でデバイスドライバのインストールは完了しました。しかし再起動後はもう一度ドライバを読み込まないと動きません。
自動で読み込む方法はいくつかあると思いますが、今回は.bashrcを編集して、起動後(ログイン後)にデバイスドライバを読み込むようにします。
次のコマンドで.bashrcを開き、ファイル末尾に追記します。
$ nano ~/.bashrc
下記部分を最下段に追加します。

再起動してSSHでログインすると、デバイスドライバがインストールされブザーが鳴ります。
/dev/ 内には、「rtconunter_*」は存在しない。ので一からデバイスドライバーのインストール
rm -rf RaspberryPiMouse でデイレクリごと削除
shred -u RaspberryPiMouse 完全削除
<Ubuntu用>
$ git clone https://github.com/rt-net/RaspberryPiMouse.git
$ cd RaspberryPiMouse / utils
$ sudo apt install linux-headers- $( uname -r ) build-essential
$ ./build_install.bash
<光センサー4個入力>
/dev/rtlightsensor0を読み取り、光センサで検出された物体の近接度(0:遠い〜4095:近い)を取得します。
# cat /dev/rtlightsensor0
# Return value: [front right] [right] [left] [front left]
$ cat /dev/rtlightsensor0
9 2 13 3
<SW入力3個のON/OFF状態読取り>
/dev/rtswitch0〜/dev/rtswitch2を読み取りスイッチのON / OFF状態を取得します。
# cat /dev/rtswitch[0,1,2]
# Return value: 1(Open), 0(Pressed)
$ cat /dev/rtswitch0
<ブザーを鳴らします。>
/dev/rtbuzzer0 に0 ~ 20000を書き込みブザーを鳴らします。
# echo 0 ~ 20000(Hz) > /dev/rtbuzzer0
$ echo 440 > /dev/rtbuzzer0
$ echo 0 > /dev/rtbuzzer0
<LED4個On/Off>
/dev/rtled0 ~ /dev/rtled3 に1/0を書き込みLEDを点灯/消灯します。
# echo 0(OFF) or 1(ON) > /dev/rtled[0,1,2,3]
$ echo 1 > /dev/rtled0
$ echo 0 > /dev/rtled1
<モーター制御>
/dev/rtmotoren0 に 1/0 を書き込みモータ操作を有効/無効にします。
# echo 0(disable) or 1(enable) > /dev/rtmotoren0
$ echo 1 > /dev/rtmotoren0
/dev/rtmotor_raw_l0 または /dev/rtmotor_raw_r0 に 0 ~ ±10000 を書き込み、モータドライバへのPWM周波数を設定します。
# echo 0 ~ 10000(Hz) > /dev/rtmotor_raw_[l0, r0]
$ echo 1 > /dev/rtmotoren0
$ echo 400 > /dev/rtmotor_raw_l0
/dev/rtmotor0に左右のPWM周波数と動作時間を書き込み、左右のモータを回します。
# echo [left_freq Hz] [right_freq Hz] [duration ms] > /dev/rtmotor0
$ echo 1 > /dev/rtmotoren0
$ echo 400 800 1000 > /dev/rtmotor0
<パルスカウンター読み込み・書込み>
/dev/rtcounter_*を読み取りモータドライバへのPWMパルス数を取得します。また、値を書き込みカウントをリセットします。
符号なしカウンター:/dev/rtcounter_l0、/dev/rtcounter_r0
符号付きカウンター:/dev/rtcounter_l1、/dev/rtcounter_r1
# cat /dev/rtcounter_[l0, r0]
# Return value: 0 ~ 65565 (counts of PWM pulse)
# cat /dev/rtcounter_[l1, r1]
# Return value: -32767 ~ 32767 (counts of PWM pulse)
$ cat /dev/rtcounter_l0
1104
$ echo 0 > /dev/rtcounter_l0
$ cat /dev/rtcounter_l0
0
やはり「rtcounter_**」ファイルが無い。
RaspberryPiMouse V2 -> V3 で拡張された機能でモーター駆動PWMをカウント出来る。(手持ちはV2の為、機能が無いことが解った。)
別途変換コネクター(¥5000-)を購入する必要あり、変換コネクターにICが2個搭載している。