昨日は夕方からプラザで会計処理とExcel関数のテキスト印刷
帰ってから気が緩んで一杯・・・
久しぶりのメンバーとの会話で少し気持ちが高ぶってたんだろう、秋プラネタをマジで深夜までネット検索してしまった。
昨晩はよっぱモードだったが、今日はマジで再検索&読解
その結果のメモ書いておく
====メモ概要====
■目的
Scratchのプログラミング環境を使って外部機器を効率よく動かしたい。
具体的には、Scratch <-> Arduino <-> アクチュエータ制御による相互協働環境の構築
Akadakoなどが使えそうではあるものの、現時点Akadako内部でプログラムを動かすことが出来ないので
相互協働環境は構築できない。
■経過と新手法を探す理由
昨年作ったロボット戦車の問題点
・モーターによる走行距離制御は出来たが、キャタピラ摩擦係数誤差などを補正し切れなかった。
できればmicro:bit内蔵電子コンパスを使いたかったが値が飛びまくるなど何故かうまく値が取れなかった。
・micro:bitの割り込みインターバルはファームのせいか80ms程度が限度で、最終的にも20msで細かい制御が不可能
・micro:bitプログラミング環境を使ったため利用者に余計なブロックが見えるので環境的にはイマイチだった。
※micro:bitMoreを使えばもう少し違った結果になったかもしれないが・・
エディターとつなぐには、最初に 「micro:bit のプログラム」を micro:bit に入れる
Web Bluetooth が使えないブラウザは Scratch Link を PC に入れる。
https://microbit-more.github.io/index-ja.html
これらの反省から
・arduinoをスクラッチから制御したい
→ オブジェクトごとに独立したプログラムエリアを持つので、複雑な制御部分はラッピング可能
→ バギーの動作はarduino側で自律制御させ、命令側はパラメータ送信だけで済ませたい
Scratchを使うことでこれらを解決できないかを探ってみた。
■調査で判明したこと(結論)
Scratchと外部機器を接続するには大きく2種類の方法がある
【1】無線
Scratch1.4をM5Scratch+WiFi環境(持ち込んだWiFiルータ+PCで独自LANを組む)で使う。
多分、目標はカンペキに構築できるでしょう。
が、記事(610tさん)を読むと情報過多過ぎて・・・ビビります。
【2】シリアル通信
1 ブラウザ拡張機能を組み込む必要がある
2 拡張機能はJavaScriptで実装され、シリアル通信拡張APIなどをアタッチしている
3 このJavaScriptを自動的に動かすことで新機能ブロックを追加することができるが
4 そのために特定のサイトへ接続させ、JavaScriptを自動ロードさせている
なので必要な機能は自作JavaScriptで実装するしか手段がない。
次のサイトでテキストが有償販売されている
https://otona-scratch.champierre.com/books/1/posts
自習するならこのページ
https://p-school.tacoskingdom.com/blog/26
https://blog.champierre.com/1282
---以下は詳細メモ---
■手法
◎ M5Scratchを使う
基本はScratch 1.4でLAN(WiFi)環境が必要
UI-Flow / arduinoIDEで開発可能
一応何でも出来るようにになるはず。2021年
https://scrapbox.io/M5S/
https://elchika.com/article/29135dba-ac4d-4ed7-b6cb-e33750f52f6b/
◯ Scratch1.4の「遠隔センサー接続」をRubyで使う事例
デスクトップ版アプリケーションで稼働
相互にテキストデータ送受信が可能になる
下記に5回の連載で説明されている。
https://blog.champierre.com/1047
要約すると、
・Scratch1.4で
スクラッチの「調べる」カテゴリの「○○センサーの値」ブロックの上で右クリック
現れる「遠隔センサー接続を有効にする」を選ぶ。
・PCのLocalHostのポート(42001)へScratchからデータをブロードキャストする
・例ではRubyを使って42001ポートを監視しデータを読んだり更新している
・更にRubyからTwitterにメッセージを書き込んでいる。
このポートに現れるデータを何らかの方法で読み取れば良い、らしい。
△ ブラウザ・アドオンを自作しシリアル通信機能を実装する(タコキン)
④「Web Serial API」を利用してシリアル通信データを受け取るらしい。(上り)
https://p-school.tacoskingdom.com/blog/69
③その前に”Scratchに自作の拡張機能を作成する手法”を学ぶ必要がある
https://p-school.tacoskingdom.com/blog/26
②こちらではブラウザ(HTMLページ)に向けてarduinoからシリアルデータを送る実験(上り)
https://geek.tacoskingdom.com/blog/56
①Web-Serial仕様書(英語)
https://wicg.github.io/serial/
※ ①..④の順で学習しましょう。全部できればarduinoシリアル<=>Scratch(ブラウザ)が完成します。
X Scratino(スクラチーノ)を使う
結論:arduino上に保存した自分のプログラムを命令を送って制御できないので却下
”Scratch画面からarduinoロボットを動かす”といった使い方は可能です。
アームを操作する動画
https://www.youtube.com/watch?v=Q0xDXIQjXBM
https://www.youtube.com/watch?v=9VQsXQAisic
ファブボット https://www.youtube.com/watch?v=poxFw2xHnu0
https://fabble.cc/nkgw/fabbot
Scratino3がリリースされているが簡単なPinデータの読み取りとPWMやサーボが動かせる程度
デスクトップアプリケーションで、arduino側には専用ファーム書き込みが必要
Scrattino3は次の拡張ブロックを追加します。
アナログ入力
アナログピンA0-A5の値
ステージ上に値モニターを表示できる
デジタル入力
デジタルピンの値
デジタル入力モード
デジタルピンのモードをPull-Up/Pull-Downへ変更する
PWM出力
0-255のレベルで出力電圧を変化させる
サーボ出力
角度0-180度へサーボモーターを動かす
X 自作で外部インタフェースを作成する
音、光、画像を利用して外部へデータ転送する
速度が出ません。
X pythonベースのサーバーアプリを経由してPCとArduinoをシリアル通信させる
OneGPIOもプロジェクトの一つ、があるらしい
Pythonをインストールしたり、手動でサーバープログラムを立ち上げて、Arduinoとの接続を確認したりと、
シリアル通信を使う準備段階までが手間
X ScratchとTOIOを連携(Youさん)
JavaScriptの開発者コンソールなどをガシガシ使ってるしシリアルではない記事
https://qiita.com/youtoy/items/db6d34a9985eb182042f
X akadako
基本的にセンサー値を取得することしかできないようです。
要は”micro:bit連携”と同じで、micro:bit下位互換機能を持つ基盤を、安く・簡単接続で提供している。
■Scratchアドオン
検索する経過で「アドオン」と言われる機能を発見
https://scratchaddons.com/ja/addons/
閲覧するにエディタや開発環境の改善が中心のようです。
立て一覧表示に治すには「ListView」チェックを入れると見やすくなる。(あほか)