マイコンで重さ(力?)を測る電子工作例はたくさんあり,私もやってみたいと思って必要なブツは買っていました (^^)。
「電子はかり」が普及しているからでしょう,重さを測るセンサー周りも随分と安価に手に入ります。
多くみられるのはArduinoとロードセル用ADコンバータの組み合わせでライブラリもありますが,ここはオヤジの脳の老化防止策としてPICAXEで車輪の発明をやってみようという事です。
1.今回組んでみた構成
1) PICAXE-20M2
2) HX711使用ロードセル用ADコンバータ モジュール
3) ロードセル(10Kg)
パルスを見ようとロジアナにつないでいるのでごちゃごちゃしていますが,配線は簡単です。
忘れやすいので自分用手書きメモ (^^;;;;;;
4線式のロードセルの出力(白,緑)のネガポジが分かりません。ひずみゲージの解説を見るとどちらでも良さそうで,出力値を見てから接続を変えるのでしょうね。
→ 共和電業 ひずみゲージ入門
2.HX711からデータを読んでみる
1) データを受信するタイミングチャートと疑問
HX711のDOUTがLowになったのを見てホストからクロックを送り,24bitのデータを順次受け取り,最後に25個目のパルスを送って1データの受信が完了します。
(HX711仕様書より転載,一部改変)
このチャートから考えた事は
・クロックは50usを越えないようにする
Low B.1 -> High B.1 -> Low B.1 はPICAXEでは間に合わない
pulseout B.1, 1 にすると10usのパルスは出せる
・秋月のモジュールは10Hzでデータ更新に固定されているので100ms間隔で1データを受信することになる
・24bit受信+1pulseまでの一連の動作を何msまでの間にすれば良いのか? ホスト側からbusyを上げさせるのだから100msまでにか,,はたまた,,,
・できるだけ速いほうが良さそうなのでPICAXEのシステムクロックを8MHz(デフォルトは4MHz)にする
2) For〜Next ループを使った受信
これはだめでした。PICAXEのシステムクロックを最高速にしたのに受信に失敗します。ちなみにFor〜Next ループを使うと1回のデータ受信に40ms前後の時間がかかります。
ループ部のプログラムと暴走中のロジアナ画面です(^^;;;;。
どうも読み込みが間に合ってないというか,40msより余裕をみて30ms未満ぐらいに読み込みを終わらせないといけないようです。
それならそうと言ってくれれば,,,,ま,こんなに遅いホストが来るのは想定外ですかね(^^;;;;;;;;;;
3) bit変数入力をベタに並べて受信
これで無事読めました。For〜Nextループを使うとタイミング的には遅くなるので,PICAXEのbit変数にダイレクトに書き込んでみました。
8bit連続読み込み部とロジアナ画面です。
なりふり構わず伝家の宝刀を泥臭く抜いた感じですが(^^;;;;;,,安定してデータが受信できているようですので良しとします。
なお,PICAXE BASICの一般的な変数は名前と記憶場所が固定されています。
また例えば次の3つの種類の変数は場所は同じで,その土地の分割方法を変えて管理する名前をつけただけです。
・w0 (word変数,16bit)
・b0とb1(2個のbyte変数,8bit+8bit)
・bit0,bit1,bit2,---- bit7,bit8,bit9-,--,bit15(16個のbit変数)
便利な時は便利ですが,気をつけないと知らないうちに相手を壊してしまう事もあります(^^;;;。bit15を0にするとb1とw0の頭のbitを0にします。
さて,データは読めるようになり,このままでもPCにシリアルデータを送るインターフィスとしては簡単に使えますが,後どうするかです。
PICAXE単独で動かすには24bitデータの扱いを考えないといけないので頭が痛いです(^^;;;;;;。なにしろ符号も小数点もつく大きな数字の計算はPICAXE BASIC の苦手なところですからね,,,。。
例えば,24bit中の16bitを活用するのも良いですね。計測対象にもよりますけど10Kgを測るのに1gの単位の精度がまぁまぁ出るぐらいなら私は良いですから(^^)
ま,でもせっかくいろいろ使えそうなのでゆっくり考えていきましょう。
・PICAXEを使って重さを測ってみる 2.ロードセル用HX711のデータ処理を考える
「電子はかり」が普及しているからでしょう,重さを測るセンサー周りも随分と安価に手に入ります。
多くみられるのはArduinoとロードセル用ADコンバータの組み合わせでライブラリもありますが,ここはオヤジの脳の老化防止策としてPICAXEで車輪の発明をやってみようという事です。
1.今回組んでみた構成
1) PICAXE-20M2
2) HX711使用ロードセル用ADコンバータ モジュール
3) ロードセル(10Kg)
パルスを見ようとロジアナにつないでいるのでごちゃごちゃしていますが,配線は簡単です。
忘れやすいので自分用手書きメモ (^^;;;;;;
4線式のロードセルの出力(白,緑)のネガポジが分かりません。ひずみゲージの解説を見るとどちらでも良さそうで,出力値を見てから接続を変えるのでしょうね。
→ 共和電業 ひずみゲージ入門
2.HX711からデータを読んでみる
1) データを受信するタイミングチャートと疑問
HX711のDOUTがLowになったのを見てホストからクロックを送り,24bitのデータを順次受け取り,最後に25個目のパルスを送って1データの受信が完了します。
(HX711仕様書より転載,一部改変)
このチャートから考えた事は
・クロックは50usを越えないようにする
Low B.1 -> High B.1 -> Low B.1 はPICAXEでは間に合わない
pulseout B.1, 1 にすると10usのパルスは出せる
・秋月のモジュールは10Hzでデータ更新に固定されているので100ms間隔で1データを受信することになる
・24bit受信+1pulseまでの一連の動作を何msまでの間にすれば良いのか? ホスト側からbusyを上げさせるのだから100msまでにか,,はたまた,,,
・できるだけ速いほうが良さそうなのでPICAXEのシステムクロックを8MHz(デフォルトは4MHz)にする
2) For〜Next ループを使った受信
これはだめでした。PICAXEのシステムクロックを最高速にしたのに受信に失敗します。ちなみにFor〜Next ループを使うと1回のデータ受信に40ms前後の時間がかかります。
ループ部のプログラムと暴走中のロジアナ画面です(^^;;;;。
どうも読み込みが間に合ってないというか,40msより余裕をみて30ms未満ぐらいに読み込みを終わらせないといけないようです。
それならそうと言ってくれれば,,,,ま,こんなに遅いホストが来るのは想定外ですかね(^^;;;;;;;;;;
3) bit変数入力をベタに並べて受信
これで無事読めました。For〜Nextループを使うとタイミング的には遅くなるので,PICAXEのbit変数にダイレクトに書き込んでみました。
8bit連続読み込み部とロジアナ画面です。
なりふり構わず伝家の宝刀を泥臭く抜いた感じですが(^^;;;;;,,安定してデータが受信できているようですので良しとします。
なお,PICAXE BASICの一般的な変数は名前と記憶場所が固定されています。
また例えば次の3つの種類の変数は場所は同じで,その土地の分割方法を変えて管理する名前をつけただけです。
・w0 (word変数,16bit)
・b0とb1(2個のbyte変数,8bit+8bit)
・bit0,bit1,bit2,---- bit7,bit8,bit9-,--,bit15(16個のbit変数)
便利な時は便利ですが,気をつけないと知らないうちに相手を壊してしまう事もあります(^^;;;。bit15を0にするとb1とw0の頭のbitを0にします。
さて,データは読めるようになり,このままでもPCにシリアルデータを送るインターフィスとしては簡単に使えますが,後どうするかです。
PICAXE単独で動かすには24bitデータの扱いを考えないといけないので頭が痛いです(^^;;;;;;。なにしろ符号も小数点もつく大きな数字の計算はPICAXE BASIC の苦手なところですからね,,,。。
例えば,24bit中の16bitを活用するのも良いですね。計測対象にもよりますけど10Kgを測るのに1gの単位の精度がまぁまぁ出るぐらいなら私は良いですから(^^)
ま,でもせっかくいろいろ使えそうなのでゆっくり考えていきましょう。
・PICAXEを使って重さを測ってみる 2.ロードセル用HX711のデータ処理を考える