VScodeでソースを複数ファイルに分割時の留意点

IMUとservo機能を連携させようとしますが、ソースファイルを一個にするのは汚い管理なので、機能ごとに分割します。

この時にArduino IDEだとバックエンドで無意識に処理をしてくれますが、VScodeを使う時にはほぼcの作法に従う必要があります。つまり、

・他のソースを使う時には、xxx.hとしてインクルードする。

今回のケースではservo.cppからimu.hを呼び出しています。

しかし、imu.hの組み込みで”M5にIMUは見つからないよ”とコンパイルエラーになります。

で調べると、

トホホな疑問(31) M5Stack、IMUの種類と取り扱いに戸惑う

と、

https://github.com/m5stack/M5Stack/blob/master/src/M5Stack.h

にあるようにimu.hの先頭部分は、

#define M5STACK_MPU6886
#include <M5Stack.h>
ですが、ここで#defineの”M5STACK_MPU6886″がM5stack.h中で展開されてIMUオブジェクトが生成されるので、#include <M5Stack.h>文が後に来ないと機能しません。

従ってservo.cppからは、#include <M5Stack.h>を削除してimu.hの記述を使うようにするとうまくいきました。二重インクルードはこの場合にはエラーにならず、最初の#include <m5stack.h>が有効になるからでしょう。


== top of the servo.cpp ==
//#include <m5stack.h>    // M5stack needs this module
#include <imu.h>

== top of the imu.h ==
#define M5STACK_MPU6886
#include <m5stack.h>

ということなので、Arduino IDEと違ってVScodeは普通のc開発に近いよということでした。

 

admin

Qnap管理ソフト

どこかのバージョンアップで、ストレージの管理画面でディスクの位置が表示されるようになった模様。多分以前はこんなイメージは出なかったと思う。

割と地味ではありますが、特にファイル4台以上とかのNASメンテには役立ちそうです。

 

admin

 

サーボモーターの動作確認(M5stack gray)

サーボモーター(LFD-01M)到着したので早速動作確認。制御は標準的なPWM方式。PWMの周波数も標準的な50Hzです。

接続はモーターへの電源、そしてM5stackからのPWM制御信号です。GNDの共有を忘れずに。当然モーターの電源は大電流なので外部電源で5Vを使います。PWMは多くの他の信号がそうであるように3.3V振幅ですが、入力はどうせC-MOSだろうから問題なし。

https://coskxlabsite.stars.ne.jp/html/for_students/M5Stack/RCServo/RCServo.html

PWMピンは上記を参照してDIOの2ピン目を使用。

動作確認用のソースはHiwonderのwebページからですが、サーボモーター用のライブラリは使ってません。存在しないのかもしれませんが、直接コードを書く方が動作の理解には助けになります。

https://drive.google.com/drive/folders/1Bgf1HGrfhB8N8XIxlRpz-U9_2oxVurDv

Arduino用なので多少の修正が必要なのと、画面表示がないと電源オンもわからないのでメッセージを出すようにしてます。ライブラリを使わないと、動作時間制御もコードで指定(この場合には20ms*20 = 400ms)しています。試しに9行目の20を10にすると90度ぐらいしか回転しません。

/*******舵机测试程序*******
 * Arduino型号:Arduino UNO
 **************************/
#include <m5stack.h>    // M5stack needs this module
int servopin=2;
int pulsewidth;
void servo(int myangle)
{
 for (int i = 0; i < 20; i ++)  // i is used to make moving time, since this source does not use library.
 {
pulsewidth=map(myangle,0,180,500,2500);
digitalWrite(servopin,HIGH);
delayMicroseconds(pulsewidth);
digitalWrite(servopin,LOW);
delay(20-pulsewidth/1000);
 }
}
void setup()
{
 pinMode(servopin,OUTPUT);
 M5.begin();
 M5.Lcd.fillScreen(BLACK); //Set the screen background color to black. 
 M5.Lcd.setTextColor(GREEN , BLACK); //Sets the foreground color and background color of the displayed text.  
 M5.Lcd.setTextSize(2);  //Set the font size.  
}
void loop()
{
 M5.Lcd.setCursor(0, 70);
 M5.Lcd.printf("servo_motor drive");
 servo(0);
 delay(500);
 servo(180);
 delay(500);
}

駆動波形はこんな感じ。

動作時の動画は、

となります。180度以上振れてるようなので、キャリブレーションは必要そうです。

 

admin

 

部材調達

M5stack gray用の調達した部材。

サーボモーターとケーブル類、サーボモーターはM5stackで駆動できないからどうしても途中で中継が必要。

どうやて可動部取り付けるのかと思ってましたが、こんな感じで取り付けます。アタッチメントは三種類添付されてます。

10φ, t = 1mm, lenght = 1mのアルミパイプ。どう使うかはそのうち見えてきます。

 

admin

M5stack grayのボディ固定ネジ

M5stackはコネクタで接続されているだけの状態ですが、写真のボトムに2個のネジ穴見えるようにねじ止めができます。

ネジ径は3mm、ネジの長さは12mmのようですが、手元にはM3のトラス頭の15mmしかありませんでしたが、トラスの頭はリセス部分に入り込まないので15mmが丁度ぐらいだから、なべ小ならやはり12mm長がちょうどのようです。

他の拡張モジュールを使わない限り、信頼度の上からもここはねじ止めしとくのが良いでしょう。

 

admin

DuckDuckGo

Safariの検索エンジンで選択可能となってます。

Googleと違って個人情報の収集をしない、つまり不要な広告が少なくなるだろうと予測、と言っているからしばらく使ってみようかと思う。

おそらく検索エンジンそのものは枯れた技術になってきているんだろうと思う。

 

admin

SMR方式のHDD

SMR方式の解説読んでも本質的なところが不明でなぜ、shingle(瓦)方式ができるのか理解できなかったけれども、seagateのページ見てようやく理解。

https://www.seagate.com/jp/ja/tech-insights/breaking-areal-density-barriers-with-seagate-smr-master-ti/

一番のポイントは以下の通り、書き込みヘッドが密度向上のネックだから。

”現在の技術では、データを読み取れる面積と、書き込める面積を比較すると、前者のほうが狭く、書き込み用ヘッドの精度がHDD記録密度のボトルネックとなっています。”

以下の説明図からそれが汲み取れます。書き込みヘッドに比べて読み取りヘッドがトラック間隔を狭くできるから、というのがSMR方式が成り立つわけです。書き換えはSSDと似たようなことをやる必要があるから、インテリジェンスが必要なファイルです。

この先は垂直記録方式でさらに容量拡大していくだろうというのもFlashメモリと同じかもしれない。

 

admin

safariのユーザーエージェントを書き換える

毎年恒例の確定(還付)申告、大概環境問題発生するので早めに環境確認。予想通りなんかあって、safariの版数が15.1じゃないとダメと言われる。

解決方法はwebにあって、safariの開発-ユーザーエージェント-その他で一時的に版数を偽装(15.2 -> 15.1)すればなんとかなりそう。ブラウザ閉じるとリセットされますが。

公のシステムは対応が遅いのは常、確定申告サイトは相対的にまだマシですが。

 

admin

M5stack grayのIMUの違い

M5stackにはセンサーが二種類あるらしいので、手順前後ですが調べてみました。

最近のM5Stack GrayにはMPU6886:6軸センサー + BMM150:磁気センサーを搭載。その前はMPU9250:9軸センサーが搭載(実は6軸センサMPU6500と3軸コンパスAK8963のハイブリッドであることは同じ)されています。AK8963がEOLになったのでMPU6886+BMM150に切り替えているようです。

昨日の記事のソースはコメントにMPU6886とあるので現物とマッチングしているようです。

内蔵IMUの種類を判定できるプログラムがambientのサイトにあるので、調べてみました。

パソコン上のM5Stackの3Dモデルを、M5Stackの動きに合わせて動かす

 

確かに購入したM5stackはMPU6886になっているようです。webの記事を見る限りは6軸で使う場合にはMPU6886とMPU9250でライブラリも互換があるようですが。

 

admin