ENA
|
IN1
|
IN2
|
DC MOTOR STATUS
|
O
|
X
|
X
|
TO'XTA
|
1
|
0
|
O
|
Tormozlash
|
1
|
0
|
1
|
Oldinga
|
1
|
1
|
0
|
Orqaga
|
1
|
1
|
1
|
BARKING
|
Ⅳ. Avtomobilni harakatga keltiring
Birinchi qadam: Dvigatelni boshqaring
Biz motorni tezlikni boshqarmasdan harakatlantirishga harakat qilamiz. Tezlikni boshqarmasdan dasturni yozish oson.
Avvalo, L298N dvigatelining ulanishini ko'rib chiqaylik, biz mashinani boshqarish uchun Arduino 5, 6, 7, 8, 9, 10 pinlarini ishlatamiz. 6 va 7 pin o'ng g'ildirakni boshqaradi. 8 va 9 pinlar chap g'ildirakni boshqaradi. 5 va 10 pinalar ENA va ENB-ni boshqaradi.
Shunday qilib, ulanish quyidagicha:
L298N
|
V5 kengaytirish kartasi
|
ENA
|
5
|
IN1
|
6
|
IN2
|
7
|
IN3
|
8
|
IN4
|
9
|
ENB
|
11
|
Yuqorida keltirilgan varaqqa asoslanib, avval biz o'ng g'ildirakni ijobiy tomonga 0,5s burish, 0,5s to'xtash, salbiy tomonga 0,5s burilish va 0,5s to'xtatish uchun oddiy dastur tuzamiz. Va g'ildirak reaktsiyani takrorlaydi.
UNO boshqaruv panelini kompyuterga ulang, right_wheel_rotation \ right_wheel_rotation.ino faylini oching
Kod quyidagicha:
/*In1 connected to the 9 pin,
In2 connected to the 8 pin, ENA pin 10,*/ int ENA=5;
int IN1=6; int IN2=7; void setup()
{
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(ENA,OUTPUT);
digitalWrite(ENA,HIGH);
}
void loop()
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW); //Right wheel forward
delay(500);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW); //Right wheel stop
delay(500);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH); //Right wheel back
delay(500);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW); //Right wheel stop
delay(500);
}
Dasturni UNO platasiga yuklang, uni kompyuterdan uzing va keyin avtomobilning elektr ta'minotini yoqing. Siz o'ng g'ildirak siz kutganingizdek harakatlanishini ko'rasiz.
Agar mashina harakatlanmasa, UNO bortidagi reset tugmasini bosing.
Agar dvigatelning harakatlanish yo'nalishi siz o'rnatgan yo'nalishdan farq qiladigan bo'lsa, siz dvigateldan L298N platasiga qora va qizil chiziqlarning ulanishini o'zgartirishingiz mumkin.
Keyin chap g'ildirakni xuddi shu tarzda aylantiramiz.
UNO boshqaruv panelini kompyuterga ulang, Left_wheel_rotation \ Left_wheel_rotation.ino faylini oching
Kod quyidagicha:
/*In3 connected to the 7 pin,
In4 connected to the 6 pin, ENB pin 5,*/ int ENB=11;
int IN3=8; int IN4=9; void setup()
{
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(ENB,OUTPUT);
digitalWrite(ENB,HIGH);
}
void loop()
{
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH); //Left wheel forward
delay(500);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW); //Left wheel stop
delay(500);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW); //Left wheel back
delay(500);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW); //Left wheel stop
delay(500);
}
Dasturni UNO platasiga yuklang, uni kompyuterdan uzing va keyin avtomobilning elektr ta'minotini yoqing. Siz o'ng g'ildirak siz kutganingizdek harakatlanishini ko'rasiz.
Ikkinchi qadam: oldinga va orqaga harakat qilish
Avtomobilni disk raskadrovka qilishni tugatgandan so'ng, siz mashinani harakatga keltirish uchun dasturlarni yozishingiz mumkin. Quyida avtoulovning qanday harakatlanish usuli keltirilgan:
Avtomashina oldinga
|
|
orqaga
|
to'xtash
|
Chap g'ildirak Oldinga
|
|
orqaga
|
to'xtash
|
O'ng g'ildirak Oldinga
|
|
orqaga
|
to'xtash
|
CAR chapga buriling
|
|
o'ngga
|
to'xtash
|
Chap g'ildirak orqaga
|
|
Oldinga
|
to'xtatish
|
Orqa g'ildirak
|
|
orqaga qarab
|
to'xtaydi
|
Keyinchalik, biz mashinani 0,5 soniya oldinga siljitish uchun oddiy dastur yozamiz, so'ngra 0,5 soniyani to'xtatib, keyin 0,5 soniyani zaxiralaymiz va keyin 0,5 soniyani to'xtatamiz.
UNO boshqaruv panelini kompyuterga ulang, forward_back \ forward_back.ino faylini ochin
Kod quyidagicha:
int ENA=5; int IN1=6; int IN2=7; int ENB=11; int IN3=8; int IN4=9; void setup()
{
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(ENA,OUTPUT);
pinMode(ENB,OUTPUT);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
}
void loop()
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW); // left wheel goes forward
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH); // right wheel goes forward
delay(500);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW); //left wheel holds still
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW); // right wheel holds still
delay(500);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH); //left wheel is back up
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW); // right wheel is back up
delay(500);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW); // left wheel holds still
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW); // right wheel holds still
delay(500);
}
Dasturni UNO platasiga yuklang, uni kompyuterdan uzing va keyin avtomobilning elektr ta'minotini yoqing. Siz o'ng g'ildirak siz kutganingizdek harakatlanishini ko'rasiz.
Uchinchi qadam: Dasturni yozing
Avtomobilni avtomatik ravishda harakatga keltirish uchun sizga butun dasturni yozish qiyin bo'lishi mumkin. Shunday qilib, biz harakatlarni turli funktsiyalarga ajratamiz, masalan oldinga siljish va chapga burilish. Va oxirgi bosqichda dasturni yozganimizda, funktsiyani chaqirishimiz mumkin.
Keyinchalik, biz har bir harakat uchun dasturlar yozishni boshlaymiz:
Kod quyidagicha:
/**********************************************
**** Forward sub function functions:Move forward
***********************************************
***/ void forward( )
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW); //Left wheel forward
digitalWrite(IN3,LOW);
d igita lWrite(IN4,HIGH); / / Right wheel forward
}
/**********************************************
**** Forward sub function functions:Move backward
***********************************************
***/ void back( )
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH); //Left wheel back
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW); //Right wheel back
}
/**********************************************
**** turnLeftsub function functions:Turn left
***********************************************
***/ void turnLeft( )
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW); //Left wheel back
digitalWrite(IN3,HIGH);
d igita lWrite(IN4,LOW); / / Right wheel forward
}
/**********************************************
**** turn Right sub function functions:Turn right
***********************************************
***/ void turnRight( )
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH); //Left wheel forward
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH); //Right wheel back
}
/**********************************************
**** stop sub function functions:Stop
***********************************************
***/ void _stop()
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW); //Left wheel stop
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW); //Right wheel stop
}
To'rtinchi qadam: Avtomatik ravishda harakat qilish
Va nihoyat, biz mashinani avtomatik ravishda harakatga keltirish uchun dastur yozishni boshlaymiz: oldinga siljish - 0.4s - zaxira 0.4s - chapga burilish 0.4s - o'ngga 0.4s.
UNO boshqaruv panelini kompyuterga ulang, AUTO_GO_ \ AUTO_GO_.ino faylini oching
Kod quyidagicha:
/*define logic control output pin*/
int in1=6;
int in2=7;
int in3=8;
int in4=9;
/*define channel enable output pins*/
int ENA=5;
int ENB=11;
/*define forward function*/
void _mForward()
{
digitalWrite(ENA,HIGH);
|
|
digitalWrite(ENB,HIGH);
|
digitalWrite(in1,HIGH);//digital output
|
digitalWrite(in2,LOW);
|
|
digitalWrite(in3,LOW);
|
digitalWrite(in4,HIGH);
|
Serial.println("Forward");
|
|
/*define back function*/
}
void _mBack()
{
digitalWrite(ENA,HIGH);
|
digitalWrite(ENB,HIGH);
|
digitalWrite(in1,LOW);
|
|
digitalWrite(in2,HIGH)
|
;
|
digitalWrite(in3,HIGH)
|
;
|
digitalWrite(in4,LOW);
|
|
Serial.println("Back");
|
|
/*define left function*/
}
void _mleft()
{
digitalWrite(ENA,HIGH);
|
digitalWrite(ENB,HIGH);
|
digitalWrite(in1,HIGH)
|
;
|
digitalWrite(in2,LOW);
|
|
digitalWrite(in3,HIGH)
|
;
|
digitalWrite(in4,LOW);
|
|
Serial.println("Left");
|
|
/*define right function*/
}
void _mright()
{
digitalWrite(ENA,HIGH);
|
digitalWrite(ENB,HIGH);
|
digitalWrite(in1,LOW);
|
|
digitalWrite(in2,HIGH)
|
;
|
digitalWrite(in3,LOW);
|
|
digitalWrite(in4,HIGH)
|
;
|
Serial.println("Right");
|
|
/*put your setup code here, to run once*/
}
void setup() {
Serial.begin(9600); //Open the serial port and set the baud rate to 9600
/*Set the defined pins to the output*/
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(ENA,OUTPUT);
pinMode(ENB,OUTPUT);
/*put your main code here, to run repeatedly*/
}
v
delay(1000);
mBack();
mForward();
oid loop() {
_
_
delay(1000);
delay(1000);
mright();
mleft();
_
_
delay(1000);
}
Dasturni UNO platasiga yuklang, uni kompyuterdan uzing va keyin avtomobilning elektr ta'minotini yoqing. Siz o'ng g'ildirak siz kutganingizdek harakatlanishini ko'rasiz.
Do'stlaringiz bilan baham: |