酒と薔薇の日々(その2)

好きなことだけ求めて生きるアスペ気味のINTJ人

秋プラネタを考える(Scratchからarduino制御するには)

2023年07月05日 16時05分01秒 | マイコン(ESP32・Arduino等)

昨日は夕方からプラザで会計処理と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」チェックを入れると見やすくなる。(あほか)

 


LEDランタン乗せるコーナー棚を固定

2023年07月05日 10時15分49秒 | ちょっとした工作とか

桐の板で棚は作ったが固定方法は真面目に考えてなかった。
3Dプリンタでコーナー支持材を創ることも考えたが・・・安易に流れるのは人の常
講座テキスト印刷に出かける前、午前中にやっつけた。

ダンボールで作りましたw
直角三角形を3個連結して角を接着

2面を両面テープで棚に接着
万一の剥がすことを考えて性能の悪い100均のテープは使いません。(高価なやつ!)

残る一面をピンで壁に刺す作戦
ランタンが軽いのでこれで無問題

調整の結果、椅子に座った目線より20cm上にセット

あるべき場所に収まりました。
これで夜安心して眠れまする。