montessori method

理解のためにarduinoを使って何か作ってみます。やはり動く物がいいだろうから、障害物を回避して動くような自動車を作ってみます。

いきなりですが、ほぼ完成形は以下の写真になります。arduinoと超音波センサーはいずれ他に流用したいのでソケット実装です。電池パック(単三NiHの5直)は4+1の変速形で親ガメの上に1セル乗せてます。

フロント超音波センサーで障害物との距離を測定して、回避動作をしながら走行します。車の起動と停止は、ArduinoでWiーFiアクセスポイントに接続して、割り当てられたIPアドレス経由ブラウザで行います。

P.S. 2022/3

Wi-Fi接続環境がないとブラウザから使えないのは不便なので、APモードで動作するように変更しました。

APに接続後のIPアドレスは192.168.4.1のデフォルトアドレスを使っています。

実施内容から、シングルタスクでは実現できないのでマルチタスク前提でFreeRTOSを使います。RTOSと言っても、arduinoの場合には拡張モジュールの一つに過ぎないので、個別に作成した機能をタスク化するだけで実現できます。タスク間通信はqueueを使います。タスクの関連図は以下に示す通りです。

制作で一番時間を要したのは3Dプリンタでの造形のための図面作成でしょう。なぜなら大半のパーツには寸法図面が存在しなかったから。

<主な使用部品>

・Arduino :MKR WiFi 1010

https://www.switch-science.com/catalog/7384/

・DCモーター:6V定格

同じ電圧を指定しても2個のモーターの回転数は同じにはならないので、必要ならチューニング。デフォルト円運動で便利といえば便利ですが。

・モータードライバー:L298Nモータードライバモジュール

ヒートシンク見ると、もっと大きなモーターも駆動できそうです。

モーターの速度を可変するためには、PWMで実質的に駆動電圧を可変しますが、PWMが使えるピンには制限があります。

  • PWMに使えるピン 11(D0~D8、D10、A3、A4)
  • 1周期 732Hz

・超音波距離センサー:URM37 V4.0

定番が生産終息なので代替えと言ってはなんですが。機能的には距離センサー以外の機能もあるようです。

https://akizukidenshi.com/catalog/g/gM-12450/

・ステッピングモーター

3個セットの残りがあったのでサーボモーターの代わりに使用。

・タミヤボールキャスター

リアの追従用です。形式としては三輪車です。

https://www.tamiya.com/japan/products/70144/index.html

<ライブラリサポート>

・WiFiNINA.h:webサーバー用

・Stepper.h:ステッピングモーター用

・FreeRTOS_SAMD21.h:FreeRTOS

<ソースコード>

以下のGitHubにあります。ほとんど流用のコードなので、クレジットとかあってもそのままです。

3Dプリンタ用のstlファイルも同じ場所にアップされてます。

@2022/3/16 : wifi接続モード以外に、Access Pointモードも用意しました。wi-fi環境がない場所でも使えるように。

以下のファイルでwifi_ap.inoが該当ファイルになります。

https://github.com/chateight/arduino/tree/master/smart_car_RTOS

<3Dプリンタで作成したパーツ>

  1. 一番下段のシャーシー、モーターは枠の中に格納します。

2. 上下のブリッジ(その一)

パーツ4に2と3を差し込んで接着しています。

3. 上下のブリッジ(その二)

4. arduinoドライバ基板とステッピングモーター搭載用

基板の配線およびリード飛び出し分浮かせて装着します。

5. 超音波センサーの搭載用

ステッピングモーターの軸に差し込んで固定します。

P.S. 2022/5/19

圧電スピーカー使ってサウンド機能(立ち上げ完了とバック時に音を出す)とスピーカーのマウンタ作成しました。

コードやstlファイルのリンクは以下から、

https://github.com/chateight/arduino/tree/master/smart_car_RTOS

バックするときにブザーを鳴らすために、タスクを一個追加していますが、標準のtone()関数ではうまく動かない(なぜか一度バックすると次以降の前進モードで左側のモーターが回らない)ので、時間を外部で決めて音の周波数を設定しています。標準関数はスレッドセーフではないということなのでしょう。

外見はこんな感じになりました。『傘』で中の基盤が直接見えないようにしています。