ESP32ボードで制御されるラインフォロワーロボット
チュートリアルプラン
1- ラインフォロワーロボットとは何ですか?
2- ESP32カードで制御されるラインフォロワーロボットの操作
3- ロボットのコンポーネント
4- ロボットの取り付け
5- Micropython で ESP32 ボードをプログラミングする
ラインフォロワーロボットとは何ですか?
ラインフォロワー ロボットは、事前に定義されたパス (通常は表面に描かれた線) をたどるように設計された自律型ロボットです。線は通常、白い表面上の黒い線、または黒い表面上の白い線です。ロボットはセンサーを使用して線を検出し、パス上にとどまるように動きを調整します。
仕組み:
センサー:
線と表面のコントラストを検出するために、赤外線 (IR) センサーまたは光依存抵抗器 (LDR) が一般的に使用されます。
ロボットのベースにセンサーが配置されており、表面を継続的にスキャンします。
センサーが線(高コントラスト)を検出すると、コントローラーに信号を送ります。
コントローラ:
マイクロコントローラ (Arduino、Raspberry Pi、その他の組み込みシステムなど) がセンサー データを処理して決定を下します。
ロボットがラインに沿って移動し続けるためにどのように移動する必要があるかを計算します。
モーターとアクチュエータ:
ロボットは DC モーターまたはサーボ モーターを使用して車輪を駆動します。
コントローラーの指示に基づいて、モーターがロボットの方向を調整します。
アルゴリズム:
基本的なアルゴリズムでは、「左のセンサーが線を検出した場合は左に曲がり、右のセンサーが線を検出した場合は右に曲がる」などの条件を使用します。
高度なロボットでは、よりスムーズで正確なライン追従を実現するために、PID (比例・積分・微分) 制御が使用される場合があります。
ESP32カードで制御されるラインフォロワーロボットの操作
ESP32マイクロコントローラによって制御される 2 つの車輪を備えたライン フォロワー ロボットは、ライン検出用の2 つのKY-032 センサーとモーター制御用のL298N モーター ドライバー モジュールを使用して、表面上のラインの動きを継続的に感知して調整することで、ラインをたどります。以下は、動作の詳細な説明です。
1. センサーの動作:
各 KY-032 センサーは赤外線を放射し、反射光を測定します。
暗い線はIR光を吸収します (反射が低い、信号 = LOW)。
明るい表面はIR光を反射します (高反射、信号 = HIGH)。
2. ESP32による意思決定:
ESP32 はセンサーデータを読み取り、動きを決定します。
両方のセンサーがラインを検出(L=LOW、R=LOW):ロボットは前進します。
左センサーがラインを検出 (L=LOW、R=HIGH):ロボットは左に回転してラインに戻ります。
右センサーがラインを検出 (L=HIGH、R=LOW):ロボットは右に回転してラインに戻ります。
両方のセンサーがラインから外れている (L=HIGH、R=HIGH):ロボットは停止するか、わずかに回転してラインを検索します。
3. L298Nによるモーター制御:
L298N は ESP32 から信号を受信してモーターの方向と速度を調整します。
前進:両方のモーターが前進します。
左折: 右モーターを減速/停止し、左モーターを動かし続けます。
右折: 左のモーターを減速/停止し、右のモーターを動かし続けます。
停止:両方のモーターを停止します。
ロボット部品
ESP32 マイクロコントローラ:

ロボットの頭脳として機能します。
センサーからの入力を処理し、モーター制御信号を生成します。
KY-032 センサー(赤外線障害物センサー):

IR 反射に基づいて線と表面を区別して線を検出するために使用されます。
ロボットの前面に配置:
左センサー(L):ラインの左側を検出します。
右センサー(R):ラインの右側を検出します。
L298N モーター ドライバー モジュール:

ロボットの車輪に接続された 2 つの DC モーターを制御します。
モーターの双方向制御(前進、後進、左折/右折)を可能にします。
DCモーター:

ロボットに動きを与えます。
https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-
L298N モジュールからの信号に基づいて速度や方向を調整します。
電源:
バッテリーは ESP32、モーター ドライバー、およびモーターに電力を供給します。
ロボットの取り付け

KY-032 センサーを ESP32 に接続:
VCC → ESP32から3.3V。
GND → ESP32のGND。
OUT(左センサー) →GPIOピンD25。
OUT(右センサー) →GPIOピンD26。
ESP32からL298Nへ:
IN1(L298N) →GPIOピンD4(左モーター方向制御)。
IN2(L298N) →GPIOピンD5(左モーター方向制御)。
IN3 (L298N) → GPIO ピン D18 (右モーター方向制御)。
IN4 (L298N) → GPIO ピン D19 (右モーター方向制御)。
ENA (L298N) → PWM対応ピンD32 (左モーター速度制御)。
ENB (L298N) → PWM対応ピンD33 (右モーター速度制御)。
L298Nのモーター:
OUT1、OUT2 → 左モーター端子。
OUT3、OUT4 → 右モーター端子。
電源:
ESP32 : USB またはバッテリー (例: 3.7V LiPo) から電源を供給します。
L298N : 6~12V の外部バッテリーから電力を供給され、モーターを駆動します (L298N の VIN 端子と GND 端子に接続します)。
Micropython で ESP32 ボードをプログラミングする
ESP32 はセンサー データを処理し、モーターを制御するプログラムを実行します。サンプル コードは次のとおりです。
2 つのモーターを制御するには、 DCMotor.pyライブラリをインポートする必要があります。
from machine import Pin, ADC , PWMfrom time
import sleepfrom DCMotor
import DCMotor
line1 = ADC(Pin(34))line2 = ADC(Pin(35))frequency = 15000
pin1 = Pin(22, Pin.OUT)
pin2 = Pin(21, Pin.OUT)
pin3 = Pin(19, Pin.OUT)
pin4 = Pin(18, Pin.OUT)
enable = PWM(Pin(23), frequency)
enable1 = PWM(Pin(5), frequency)
dc_motor = DCMotor(pin1, pin2, enable)
dc_motor = DCMotor(pin1, pin2, enable, 350, 1023)
dc_motor1 = DCMotor(pin3, pin4, enable1)
dc_motor1 = DCMotor(pin3, pin4, enable1, 350, 1023)
while True: line1_value = line1.read()
line2_value = line2.read()
print('motor1=',line1_value)
print('motor2=',line2_value) if (line1_value < 1000) : dc_motor.forward(10) # Turn <strong>right</strong> dc_motor1.forward(90) if (line2_value < 1000) : dc_motor1.forward(10) # Turn <strong>left</strong> dc_motor.forward(90) if (line1_value > 1000) and (line2_value > 1000) : dc_motor.forward(75) # Move <strong>forward</strong> dc_motor1.forward(75) sleep(0.1) dc_motor.forward(10) dc_motor1.forward(10) sleep(0.2) if (line1_value < 1000) and (line2_value < 1000) :
dc_motor.stop()
dc_motor1.stop()
1. センサーロジック:
運営原則
2 つの KY-032 センサーは、ロボットの前部、地面近くに配置されています。
それらの出力は ESP32 によって読み取られます。
左センサー(L)はラインの左側を監視します。
右センサー(R)はラインの右側を監視します。
センサー値は、次の条件に基づいてロボットの動きをガイドします。
(line1_value > 1000) かつ (line2_value > 1000): 両方のセンサーがライン上にある →前進します。
(line2_value < 1000): 左センサーがライン上、右センサーがオフ →左に曲がります。
(line1_value < 1000): 右センサーがライン上、左センサーがオフ →右に曲がります。
(line1_value > 1000) かつ (line2_value > 1000): 両方のセンサーがラインから外れています →停止します。
2. L298Nによるモーター制御:
ESP32 は L298N に制御信号を送信して、モーターの方向と速度を調整します。
前進:両方のモーターが前方に回転します。
左に曲がる: 左のモーターは減速または停止し、右のモーターは前進し続けます。
右に曲がる: 右側のモーターは減速または停止し、左側のモーターは前進し続けます。
停止:両方のモーターが停止します。