農業用ローイングロボット(Agriculture Row Robot)
概要
このリポジトリは「Agriculture Row Robot(ESP32版)」という、農作業支援を想定した簡易的な自律ロボットのサンプルコードを含みます。コードはESP32上で動作することを前提に、左右のIRセンサで作物の列を検出し超音波センサで前方の障害物を感知して停止・回避する基本的なロジックを提供します。駆動は左右それぞれ2ピンずつ(Hブリッジ制御)で行い、ツール用のリレーピンで除草などのアクチュエータを制御できます。構成は極めてシンプルで、プロトタイプや教育用途に適しています。(約300字)
リポジトリの統計情報
- スター数: 7
- フォーク数: 0
- ウォッチャー数: 7
- コミット数: 2
- ファイル数: 1
- メインの言語: 未指定
主な特徴
- ESP32ベースの小型自律ロボット向けのサンプルコード
- IRセンサによる行(row)検出、超音波センサによる障害物検知を実装
- Hブリッジ駆動を想定したモータ制御(前進/後退/停止)
- ツール用リレー出力を用いた除草等のアクチュエータ制御
技術的なポイント
このプロジェクトはハードウェアピン割当と基本的な制御関数に重点を置いた短いソースが中心です。ピン定義を見ると、LM1/LM2(25,26)とRM1/RM2(27,14)で左右モータをHブリッジで制御する設計になっており、アナログ的な速度制御はSPEED定数(180)を用いたPWM出力(コード上はanalogWriteなど)で実現しています。走行制御は単純な前進/後退/停止の関数で構成され、左右のIRセンサ(ピン34,35)で列の存在を判断、超音波センサ(TRIG=5,ECHO=18)で前方距離を計測しDIST_LIMIT(25cm)を下回れば停止や回避につなげる設計です。TOOL_PIN(23)はリレーや除草モータ用で、移動中にツールをON/OFFする想定です。
注目点としては、ESP32の能力を活かしつつも実装が単純で拡張しやすい点です。一方で現状はオープンループ(エンコーダ不使用)でPID制御やモータのフィードバックがなく、アナログ出力処理はESP32固有のPWM(LEDC)APIを使った方が安定します。障害検知や列追従のアルゴリズムも単純な閾値ベースのため、現場の振動や土壌の反射で誤動作しやすい点に注意が必要です。実用化には電源・駆動系の保護、デバウンスやノイズ対策、エンコーダによる速度・位置制御、センサ融合(IR+カメラやIMU)やRTOSタスク分割、Wi‑Fi経由の遠隔監視やOTA更新などの拡張が考えられます。ソフト面ではファイル分割やクラス化、設定の外部化(JSON/Preferences)を行うと保守性が向上します。(約700字)
プロジェクトの構成
主要なファイルとディレクトリ:
- README.md: file
このリポジトリは1ファイル構成の簡潔なサンプルです。実機接続や拡張を行う場合は、ハードウェア接続図、回路図(モータドライバ/Hブリッジ、電源、センサ配線)、および別ファイルでのモジュール分割を推奨します。
まとめ
学習や試作に適したシンプルなESP32ベースの農業ロボット出発点です。(約50字)
リポジトリ情報:
- 名前: Agriculture-rower-
- 説明: 説明なし
- スター数: 7
- 言語: null
- URL: https://github.com/Bhuvanesh119/Agriculture-rower-
- オーナー: Bhuvanesh119
- アバター: https://avatars.githubusercontent.com/u/178178307?v=4
READMEの抜粋: // ============================ // Agriculture Row Robot // ESP32 Version // ============================
#define LM1 25 #define LM2 26 #define RM1 27 #define RM2 14
#define IR_LEFT 34 #define IR_RIGHT 35
#define TRIG 5 #define ECHO 18
#define TOOL_PIN 23 // relay or weeding motor
#define SPEED 180 #define DIST_LIMIT 25 // cm
// ---------- Motor Control ---------- void forward() { analogWrite(LM1, SPEED); analogWrite(LM2, 0); analogWrite(RM1, SPEED); analogWrite(RM2, 0); }
void…