まつたろうの歩み

PythonやCの勉強中に「指し示す」いう表現がありました。それを知りたくて今はコンピュータシステムを勉強しています。

M5Stack で NCIR と GPS V2 を使いました。

 NCIR は非接触温度センサーです。後で紹介する GPS も結構高かったのですが、当時は仕事をしていたので積極的に購入しました。今だったら、高いので買えません。これは、Arduino のスケッチ例のプログラムで動作しました。かなり接近させないと、体温は測定できないようでした。設定の数値を変更すれば、病院で検温したりするような距離感で測定できると思われます。下の画像が、NCIR です。

NCIR(非接触温度センサー)

 次にとても苦労した、 GPS V2 (u-block 社 NEO-M8N チップ)です。とりあえずいつものように、スイッチサイエンスのサイトからプログラムを探しました。簡単な raw ファイルで試してみました。Arduinoコンパイルしましたが、緯度経度の情報が取得できません。何分待っても、下のように表示されます。

GPS で受信する

 以前ラズベリーパイで GPS ロガーを作った時は、家の中でも緯度経度らしいデータが取得できていました。その思い込みが間違っていました。なんでか分からない沼にハマり込んでしまいました。その後はあれこれと Web サイトを探索し続けました。

 これでも使えると紹介してあったので、GPS 単体を USB-TTL シリアルで配線しました。下の画像です。

GPS モジュールを USB シリアルで接続する。

 そして、 u-center につないで使ってみました。下の画像です。NoFix です。

u-center を使う

 何も表示されません。TX(送信)と RX(受信)の接続間違いかも知れないと思い、入れ替えました。それでも何も表示されません。それからも高価な GPS ですから、あきらめきれずジタバタしてました。あきらめる前に、また Copilot に聞いてみることにしました。先の GPS raw のプログラムに戻して、動作の様子をコピーして聞いてみました。そうしたら、次のような回答が得られました。

 「取得できているNMEA文 $GNRMC,,V... や $GNGGA,,,,,,0,00... は「衛星をまだ捕捉していない」状態を示しています。つまりモジュール自体は動作しているが、位置情報が得られていないだけです。」そこで、緯度経度を表示するようなプログラムの作成を依頼しました。それが、下のプログラムです。

Copilot に教えてもらった GPS V2 のプログラム

 Copilot から必ず外で測定するように言われていたので、外で数分観測しました。そうしたら、緯度経度が表示されました。グーグルアースで表示される緯度経度とほぼ一致しました。下の画像です。

GPS V2 外で観測する

 以前から持っていた先入観が、なんでか分からない沼にハマる原因になっていました。外で観測する、という単純なことで解決しました。それではフルバージョンではどうかと思い、試してみました。これも数分待つと、今度はちゃんと緯度経度も表示されました。下が、フルバージョンのプログラムです。

github.com

 次の目標ですが、前にラズパイで GPS ロガーを作りました。今回も、M5Stack で GPS ロガーを作りたいと思っています。よりコンパクトになります。完成させることができたら、この NEO_M8N は QZSS 準天頂衛星も捕捉しますので精度も良くなると思います。次回の記事にできるように頑張りたいと思います。

M5Stack で PIR,RGB,ToF センサーを使いました。

 まずは、PIR センサーです。モーションセンサー(人感センサー)とも言われるようです。今回紹介するすべてのユニットは、スイッチサイエンスのサイトのユニットのページから、Arduino のプログラムの URL が紹介されています。PIR の URL です。

M5-ProductExampleCodes/Unit/PIR/Arduino/pir/pir.ino at master · m5stack/M5-ProductExampleCodes · GitHub

実行した様子です。

PIRセンサー

 動きを感知したら Sensing と 1 が表示されます。これだけでは面白くないので、LEDを点灯させるようにしました。プログラムは掲載しませんが、前回紹介したようなコードを追加しました。1と表示すると LED を点灯させるように書き加えました。

PIR で動きを感知する

 次は、RGB です。3つのフルカラーLED が次々に色を変化させながら、流れるように光ります。URLです。

M5Stack/examples/Unit/RGB_SK6812/RGB_SK6812.ino at master · m5stack/M5Stack · GitHub

実行した様子です。画像では、輝きすぎてハッキリしませんが、赤青緑の色が素早く動いています。

RGB を点灯させる。

 次に ToF (測距センサー)です。距離がmm単位で表示されます。URLです。

M5-ProductExampleCodes/Unit/TOF/Arduino/MeasureDistance/MeasureDistance.ino at master · m5stack/M5-ProductExampleCodes · GitHub

実行した様子です。

ToF(測距センサー)

 これも、100mmを越えたら LED を点灯させるようにしてみました。距離に変化が無いときは、20mmから測距を始めるようで点滅を繰り返しました。フルカラーLED で距離に応じて色を変えようかと考えていましたが、そういう理由でやめました。以上が今回の報告です。

ーーー じいじと孫のお遊び ーーー

 久しぶりに孫がきたので、M5StickC で Bala.C を使ってみました。まず、箱に貼ってあったシール通りに入力させ、スイッチサイエンスのサイトを検索させました。次にBalac.C のページを検索し、Arduinoのプログラムをコピーさせ入手しました。Arduinoに貼り付けして実行させたら、エラーが出ました。じいじがボードを変えることを忘れていました。M5Stack のボードを M5StickC に変え、COMポートを変更しました。Arduinoコンパイルしました。それから、車輪や本体への取り付けなどをしました。スイッチを入れても中々バランスを取ってくれません。何年も放っていたので、ダメなのかなとあきらめかけました。でも何回もやって、ようやくバランスを取ってくれました。下の画像です。

Balac.C バランスをとる

URLです。

M5-ProductExampleCodes/App/BalaC/Arduino/Balac/Balac.ino at master · m5stack/M5-ProductExampleCodes · GitHub

M5Stack の ENVⅡ(SHT30&BMP280) を Arduino で操作しました。

 前回はENVⅡをマイクロパイソンで操作しました。今回はそのまま、Arduinoで操作してみました。ファイルは4つ使います。ENVii.ino, Adafruit_Sensor.h, SHT3X.h, SHT3X.cpp です。適切なファイルを探すと、やはり Git-Hub にありました。

M5-ProductExampleCodes/Unit/ENVII/Arduino/ENVII at master · m5stack/M5-ProductExampleCodes · GitHub

 まず、ENVii で ino ファイルを作ります。そして、同じフォルダーに残りの3つのファイルを保存します。下がその操作の様子です。新規タブを作成します。

ファイルを取り込む

ファイル名通りに入力またはコピペする

 いつも通り動作を確認して、自分で入力して完成させます。SHT30 は SHT3X となっていました。そのまま使っても動作しました。

 次は、ユニットの LIGHT を使います。始めは Grove ポートでつないでましたが、どうも動作がおかしいです。スイッチサイエンスのサイトで調べるとポート B を使うようになってました。cdsセルで光を感知して、暗くなったらライトを点ける回路などに使われます。プログラム例では、アナログ値とデジタル値が表示させます。明るいと0,暗くなると1が出力されます。プログラム例のURLです。

M5-ProductExampleCodes/Unit/LIGHT/Arduino/Light/Light.ino at master · m5stack/M5-ProductExampleCodes · GitHub

LIGHT を使う

 コードも短いので、すぐに終わりました。これでは面白くないので、暗くなったらLED を点けるように改良しました。LED のコードは「みんなのM5Stack入門」にあったものを使わせていただきました。下の画像です。下の数値が1で LED が点灯してます。

LIGHT のセンサーで LED を点灯させる。

 そのコードを、アップします。

暗くなったら、LED を点灯させる

 ユニットが、まだたくさんあります。何種類も一度に紹介したら、前の作業を忘れてしまいます。これからも、少しずつ紹介したいと思います。

M5StackのENVⅡをThonnyのマイクロパイソンで操作しました。

 M5Stack の ENVⅡを Thonny のマイクロパイソンで操作しました。使えることは実証しましたが、正直言うとあまりお薦めできません。その理由は、標準のマイクロパイソンでのプログラム例がほとんどないからです。
 ほとんどのマイクロパイソンの使い方は、まず UIFlow でプログラムを作成します。そのプログラムをマイクロパイソンに変換するような方法です。考えていた方法ではないので、次は Arduino で持ってるユニットを使っていこうと思います。では、今回の手順を説明します。

準備:上野先生のコンピュータ講座「M5Stack マイコンに MicroPython をインストールする」

https://www.youtube.com/watch?v=vqriXFYb5x8

 準備ができたら、始めの一歩 HelloWorld 、を ZEPエンジニアリングさんの Web サイトを見ながら進めます。下のサイトは、準備についても説明があります。

IoT開発向けPythonマイコン M5Stack実験室[M5Stack親切マニュアル]

HelloWorldが表示

 次は同じサイトで説明してある、カウントダウンです。

10からカウントダウンして0まで

 一通りやってみて、他のプログラム例を探しました。今度は ENVⅡ ユニットを使った例を探しましたが、ありません。UIFlow を使った手法しかでてきません。どうしても一つだけでもやり遂げたかったので、Copilot に聞きながら進めることにしました。ENVⅡ は BMP280 と SHT30 を内蔵しています。それぞれのプログラムを書いてもらい、それを実行して確かめる作業を何回かやりました。BMP280 と SHT30 両方のプログラムが動作して Thonny の Shell に気温・湿度・気圧が表示されるようになりました。M5Stack の LCD に表示させるようにしたいのですが、コードが違って表示できませんでした。そのプログラムをもとに、上の HelloWorld の表示プログラムを参考にして書き変えたら、表示できるようになりました。

気温・湿度・気圧がLCDに表示された

 色の表示があっていないようですが、これで良しとしました。次に、上部に日付を入れるように教えてもらいました。何度かやり取りして、思うような表示ができました。

日付が入った

 ENVⅡ の MicroPython の取り組みは、これで終わります。プログラム例が少ないので、参考になればと思いコードをアップします。

1枚目

2枚目

3枚目

ーーー 今日の一言 ーーー

 高市総理支持率は良いようですが、大丈夫かな?と思います。有事についての発言、これは中国怒るぞと思っていたらその通りになりました。撤回するべきです。せっかく日中関係が良くなってきていたのに、あの一言で、関係悪化。それ以後、聞きたくないような日本と中国のやり取りが続いています。前から個人的に、考えていたことだと思います。しかし一国の代表は世界を相手にしなければいけないので、個人的な発言は控えるべきです。世界全体を見て判断し、発言は慎重にすべきだと思いました。

M5Stack Faces(初代) の GameBoy(Board) と JoyStick を使う

 前の記事で Gameboy で M5Snake を作りました。そのプログラムを利用して、四角の図形を動かすプログラムを作りました。何とか、自力でできました。下の画像です。矢印キーで動かすことができました。

MovingBall

 次は JoyStick を使います。 JoyStick のスケッチ例は、Arduino の M5Stack の faces にありました。プログラムを探すのが、faces は大変です。下の画像が動作の様子です。

スケッチ例の JoyStick

 xとyの座標が0から1023のアナログ数値で表示されます。このコードを元にして、四角を JoyStick で動かすプログラムを書くことにしました。前回の GameBoy のプログラムから拾ってきながら書きました。しかし、うまくいきません。左上隅に片寄って図形が表示されます。

JoyStick で四角を動かす

 その後も色々と変更を重ね試しました。しかし、レバーの動きに合わず上部と下部にばかり表示されたりして、うまく動作しません。かなり粘り強く修正を重ねましたが、あきらめました。今回も、AI の Copilot に聞くことにしました。趣旨とコードを送ったら、瞬時に回答が帰ってきました。みごと!レバーの動きに合わせ,四角が動きました。

Copilotの回答で動作した。

 アルゴリズムとか何も考えず、このコードを使ってみようとか行き当たりばったりのプログラミングです。素人だし、これで遊べているので良いです。Copilot が教えてくれた、 JoyStick 用のプログラムです。

1枚目

2枚目

3枚目

ーーー じいじと孫の遊び ーーー

 

分解

  孫との遊び。分解!です。
先日は、100円ショップで買った招き猫を分解しました。太陽電池とコイルと磁石、電解コンデンサで動いていました。時間があったので、ICレコーダーも分解しました。これまで、マウス、ヘッドホン、USBメモリ、体脂肪計など分解しました。その後、スクラッチでプログラミング。じいじが、混乱したので、途中で保存して終了。後は一人で、JAXAの2つのゲーム MMX / SLIMをやってました。

名古屋に行きました。 <旅編>

 19日から2泊3日で、名古屋に行きました。ちょうど1年ほど前に松本から名古屋まで、友人に送ってもらって以来です。6時半頃自宅を出発し、福岡空港に7時頃到着。定刻の7時55分に少し遅れて出発です。名古屋駅11時集合には、十分余裕があるはずでした。中部国際空港に到着。格安の飛行機を使ったため、第2ターミナルの端に着きました。膝の靱帯を痛めていたので、歩くことが大変でした。後でグーグルアースで計測したら、名鉄乗り場まで1.5km弱ありました。名古屋駅の金時計に着いたのは、11時ギリギリでした。

 揃ったので、事前に幹事2人で決めてくれた鰻屋(なかなか、予約は取れないそうです。)へ、名物のひつまぶしを食べました。鰻を食べて満足し名古屋城に向かいますが、ちょうど名古屋まつりがあっていて、動きがとれません。道すがら、名古屋まつりを見ることになりました。信長公、秀吉公、家康公の3傑をメインに行列がされます。下の画像は信長公です。

名古屋まつり 信長公

 この後、車から降り、能を舞いました。行列はまだ続きますが、切り上げて名古屋城に地下鉄で行きました。

名古屋城

 近くは何回も通っていますが、中に入るのは初めてです。城内部には入れませんでした。本丸御殿は内部を見ました。その後、ホテルに行きました。元中日ビルのところのホテルです。市内の夜景が広がって見えますが、中は暗かったです。手羽先の店で食事して、カラオケに行きました。

 朝食後、いよいよ、国宝犬山城です。

国宝犬山城

 急階段を手すりを両手で掴まえながら、登ります。よじ登る、感じです。でも、天守閣の回廊から見える木曽川はきれいでした。その後、城下町を散策しました。五平餅を初めて食べました。

 その後お薦めの田楽を食べ、明治村に行きました。入り口から順に見ていくと、時間がどんどん進みます。一番見たかった、旧帝国ホテルを見たのは3分くらいでした。

旧帝国ホテル

 中の様子です。栃木で見た、大谷石を使ってあります。細工を施してある柱もあります。

帝国ホテル 内部1

 素晴らしい!フランク・ロイド・ライトさん。

帝国ホテル 内部2

 

 明治村を出て、宿泊する犬山城そばのホテルに行きました。まもなく日が暮れます。夕景をバックに犬山城を撮りました。

夕日の犬山城

 夕食は木曽川を渡った、料理屋です。ライトアップされた犬山城が、広い木曽川に映りきれいでした。店では、昼からずっと飲み続けているので、途中横になって休みました。(飲み過ぎ注意です。)

 翌朝、ゆっくり朝風呂に入り、朝食をとりました。名古屋に戻り、幹事で選んでくれた、味噌煮込みうどんを食べました。その後、熱田神宮にお参りしました。きしめんの出汁の良い香りがしました。たくさんの日本刀と日本書紀の写本も見ました。それから、大須観音に行き、名古屋駅で解散しました。時間は十分あると思っていたのですが、お土産を買う時間しかありませんでした。きしめんは次回にお預けです。昔話や今の事など、道中での会話が楽しかったです。皆さん物知りでした。計画・運転してくれた、仲間の幹事に感謝します。

M5Stack Faces(初代) の CaluculatorとGameBoy(Board)を使う

  久しぶりの投稿です。キーボードの次は、Caluculatorです。いわゆる、電卓です。下が使わせてもらった、プログラムです。

github.com

 動作確認をしたら、そのまま使えました。その後プログラムを自分で書いて、実行しました。ところが、コンパイルができません。何回もプログラムを見直しましたが、誤り個所を見つけることができませんでした。そこで、またCopilotに聞きました。始めに動作するコードを送り、次に自分が書いたコードを送りました。下が、Copilotの回答です。

Copilotに聞く

 関数名の書き間違いを指摘してくれました。kとK の違いを見つけ切れませんでした。修正したら、動作しました。

計算機

 使ってみたら、+-*÷はそのまま使えました。キーにある、%とMは何も機能しません。不完全ですが、自分で%とMキーが使えるようにプログラムに追加しました。安物の電卓のプログラムでも、このプログラムの何倍もコードを記述してありそうです。先人のすごさを改めて感じました。

 次は、Gameboyです。

github.com

 GameboyのプログラムはギットハブのM5Stackのライブラリにあります。ところがコンパイルまではできますが、キーを押しても何も反応がありませんでした。そこで、たくさんのWebサイトを検索しました。良さそうなプログラムを使ってみますが、どれもうまくいきません。コンパイルまで進まないのです。色々なサイトを当たって、キーの割り付けやI2Cアドレスをメモしていました。メモは重要で大切な情報でした。コンパイルまで、進んだ Snake_Gameboy.ino のI2Cアドレスが違うのではないかと考え確認しました。ファイルが、Snake_Gameboy.ino, GameboyInput.h, GameboyInput.cpp, GameBoard.h, GameBoard.cpp, Power.h, Power.cpp と7つあります。その中の、GameboyInput.h にI2Cアドレスの記述がありました。i2c_address = 0x80 となっていました。使っていた初代GameboyのI2Cアドレスは 0x88 でした。これに変更したら、無事STARTキーや矢印キーが使えるようになりました。下が、その画像です。

Snake_Gameboy

 ゲームの動作は、始め真ん中に四角のボックスが表示されます。それを矢印キーで動かし、餌?のチェリーを捉えるとしっぽが長くなります。ヘビのような動きになります。これを元に、自分で簡単なゲームにチャレンジしてみようか?と考えています。

ーーー 今日の一言 ーーー

 来週、大学時代の下宿の同窓会が名古屋であります。麻雀ばかりやっていたメンバーです。麻雀の先生役が幹事です。初回は、九州で私が世話をしました。志賀島九州国立博物館兵馬俑展を見て、平戸と呼子にも行きました。前回はコロナ禍前、富士山周遊の旅で富士・富士宮に住んでる仲間が案内してくれました。三島大社、三島ウォーク、忍野八海、風穴、氷穴、ほうとうが美味しかった。今回は、鰻などグルメ旅になりそうです。カリッとした鰻の店に連れて行ってくれるはずです。楽しみにしています。