📌 بخش ۱/۲: مکانیک و شاسی ✅ | بخش ۲/۲ (همین): الکترونیک، کد و کنترل RC
L298N چطور کار میکند؟
L298N یک تراشه H-Bridge دوتایی است — میتواند دو موتور DC را به طور مستقل در دو جهت کنترل کند. برای هر موتور دو پایه جهت (IN1/IN2 و IN3/IN4) و یک پایه PWM سرعت (ENA/ENB) دارد. با یک آردوینو Uno میتوان هر دو موتور را با ۵ پایه کنترل کرد.
سیمکشی L298N به Arduino Uno
| L298N | Arduino | توضیح |
|---|---|---|
| IN1 | D7 | جهت موتور چپ A |
| IN2 | D8 | جهت موتور چپ B |
| ENA | D9 (PWM) | سرعت موتور چپ |
| IN3 | D5 | جهت موتور راست A |
| IN4 | D6 | جهت موتور راست B |
| ENB | D10 (PWM) | سرعت موتور راست |
| 12V | باتری + | برق موتور |
| 5V out | Arduino 5V | برق آردوینو از L298N |
| GND | GND + باتری – | زمین مشترک |
کد کامل Differential Drive
// ===== تعریف پینها =====
#define IN1 7
#define IN2 8
#define ENA 9
#define IN3 5
#define IN4 6
#define ENB 10
void setup(){
pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(ENA,OUTPUT);
pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); pinMode(ENB,OUTPUT);
Serial.begin(9600);
}
// تابع حرکت: leftSpeed و rightSpeed از -255 تا 255
void drive(int L, int R){
digitalWrite(IN1, L>=0 ? HIGH:LOW);
digitalWrite(IN2, L>=0 ? LOW:HIGH);
analogWrite(ENA, abs(constrain(L,-255,255)));
digitalWrite(IN3, R>=0 ? HIGH:LOW);
digitalWrite(IN4, R>=0 ? LOW:HIGH);
analogWrite(ENB, abs(constrain(R,-255,255)));
}
void loop(){
if(Serial.available()){
char cmd = Serial.read();
if(cmd=='F') drive(200,200); // جلو
else if(cmd=='B') drive(-200,-200); // عقب
else if(cmd=='L') drive(-150,150); // چرخش چپ
else if(cmd=='R') drive(150,-150); // چرخش راست
else if(cmd=='S') drive(0,0); // توقف
}
}
افزودن کنترل NRF24L01
// کتابخانه: RF24 by TMRh20
#include <SPI.h>
#include <RF24.h>
RF24 radio(7, 8); // CE=7, CSN=8
const byte addr[6] = "00001";
struct Ctrl { int throttle; int steer; };
void setup(){
radio.begin();
radio.openReadingPipe(0, addr);
radio.startListening();
}
void loop(){
if(radio.available()){
Ctrl c;
radio.read(&c, sizeof(c));
// c.throttle: -100 تا 100، c.steer: -100 تا 100
int L = c.throttle + c.steer;
int R = c.throttle - c.steer;
drive(map(L,-200,200,-255,255), map(R,-200,200,-255,255));
}
}
چکلیست
| تست | نتیجه | ✓ |
|---|---|---|
| Serial ‘F’ → هر دو چرخ جلو میروند | اگر یکی برعکس بود IN1/IN2 را جابهجا کن | ⬜ |
| Serial ‘L’ → UGV به چپ میچرخد | چرخش صحیح | ⬜ |
| PWM سرعت کار میکند | عدد کم = کند، زیاد = سریع | ⬜ |