RumiCar-C3の製作 プログラミング編 その1(Arduino IDE)
はじめに
RumiCar-C3について、これまで回路設計編、車体設計編を書きましたが、今回はプログラミング編です。
自動運転車のコミュニティ向けに設計してきましたが、プログラムはまだ自動運転には対応していません。とりあえずWiFiでラジコン操作できるようにしています。
これまでの設計でちゃんと走ることができるのかを確認するためのプログラミングです。
▼ソースコードについては、GitHubのリポジトリをご覧ください。最新のプログラムが入っています。
https://github.com/404background/RumiCar-C3
▼ProtoPediaにも書いています。
https://protopedia.net/prototype/5030
▼以前の記事はこちら
Arduino IDEでプログラミング
主な単体試験でのプログラム
マイコンはSeeed Studio XIAO ESP32C3を使っています。千円ぐらいで、WiFiやBLEも使えて小型です。個人的にお気入りのマイコンです。
モジュール単体のプログラムについては、それぞれ記事にまとめています。
▼モータードライバーはこちら。TAMIYAのギヤボックスを制御します。
▼サーボモーターはこちら。ステアリングを操作しています。
▼距離センサーはこちら。これを使った衝突回避のプログラムは書いていませんが、動作は確認できました。
距離センサーは上記の記事では1つしか使っていないのですが、複数の距離センサーを使い分けることもできました。一つずつ順番にXSHUTピンで起動し、アドレスを書き換えました。
スマートフォンで操作してみる
先程までのプログラムと、さらにWiFiのAccessPointにするプログラムを組み合わせました。
これでスマートフォンに接続して、ブラウザで特定のIPアドレスにアクセスすると操作できるようにしてみました。
▼WiFiのAccessPointについてはこちら。
初期の頃は、操作画面といっても文字を選択してURLにアクセスし、そのURLによって操作を切り替えていました。
▼押す部分が小さいので操作しにくい...
その後操作画面のようなものにしました。C/C++系のArduino言語で、HTMLを文字列として渡す都合上、かなり書きにくかったです。
▼見た目はこんな感じ。デザインはできないです...
右側の三角を押すと、右にステアリングを切る、右斜め前に前進または後進するといった感じです。
▼ステアリングを操作するとこんな感じ。
実際に走らせてみました。モーターの回転速度は、analogWrite関数を使っているので0~255で調整します。
▼速度が80だとこんな感じ。このくらいが操作しやすいです。
▼最高速度にするとこんな感じ。コントロールが難しいです...
ちなみに、コントローラの画面にはCSS Gridを使っています。HTMLを文字列として渡すということは、ダブルクォーテーションをエスケープしたりする必要があって不便です。そこでHTMLを文字列に変換する、ちょっとしたプログラムを用意しました。
▼詳細はGitHubのリポジトリをご覧ください。
距離センサーの動作確認
どのくらいの距離を測定できるのか、検証してみました。2mぐらいまで測定できるようですが、位置が低くて床に反応するので、だいたい1mぐらいまで測定できました。
もし距離が必要なら、より高い位置に設置することが必要です。
▼定規で測っている位置ぐらいの数値になっています。そんなに厳密な数字が必要なわけではないので、いい感じです。
▼外装を取り付けると距離センサーが反応しなくなる可能性を気にしていたのですが、ちゃんと反応していました。
▼ちなみに、RumiCarコミュニティでVL53L0Xの後継品である、VL53L1Xがあることを教えてもらいました。こちらは4mまで測定できるようです。
https://www.st.com/ja/imaging-and-photonics-solutions/vl53l1x.html
最後に
走行するためのプログラムはできたので、自動運転のプログラムを作成したいところなのですが、他のマイコンを載せたくなったりして停滞気味です。3Dプリンターで誰でも作れるように設計しているので、もしよければプログラムを書いてもらえたらと思います。
距離センサーの位置は高くした方が良さそうなのですが、外装のデザインが難しくなるので悩みどころです...