Son 2 ildə robotexnikanın inkişafı ötən onilliyin bütün uğurlarını geridə qoymaqla bərabər önəmli məktəblərin də açılmasına zəmin yaratdı. Bunlardan ən populyarı isə Arduino-dur. Bu məqalədə də Arduinodan istifadə edərək maneədən qaçan bir robot maşın quracağıq.
Lazım olan materiallar:
1 əd Arduino UNO
1 əd 2 çəkən smart maşın şassi kiti
1 əd L298N motor sürücü kartı
1 əd Ultrasonik sensor
1 əd 3-lü 18650 yuvası
Eyni zamanda materialların şəkillərini də yeni başlayan dostlarımızın anlaması üçün təqdim edirik:
Bir çox saytlarda 9V-luq bir güc qaynağı ilə işə salınan bu robot 1 dəfəlik uğurdan həzz almaq üçün layihələndirilib. Lakin biz bu maşınımızı növbəti məqalələrdə də işlədəcəyimiz üçün daha dayanıqlı və güclü dizayn edəcəyik. Bu yolla həm digər layihələrdə yeni materiallar almaq yaxud sökmək məcburiyyətində qalmayacağıq.
İndi isə bağlantı sxeminə nəzər salaq.
Sxemi bir də yazı ilə yeni başlayan oxuyucularımıza başa salaq.
3-lü 18650 batareya yuvasından çıxan naqilləri(mənfi və müsbət) Arduino-muzun 12V girişinə bi başlıq yardımı ilə qoşuruq və ona paralel bir xətt motor sürücümüzün 12V girişinə də bağlantı veririk.
Motor sürücünün idarəetmə bağlantılarını isə şəkildə gördüyünüz kimi sıra ilə Arduino-nun rəqəmsal 3, 4, 5, 6, 7 və 9 pinlərinə qoşuruq. Sonra da motor sürücünün çıxışlarını təkərlərə vağlı olan motorlara bağlayırıq. Diqqıt edin ki motor bağlantılarının müsbət və mənfiləri bir-birinin əksi istiqamətində bağlanmışdır. Bununla da motor sürücü bağlantılarını bitiririk.
Ultrasonik modulun bağlantıları da motor sürücü bağlantılarına bənzər şəkildədir. Lakin bu dəfə müsvəti Arduinonun 5V çıxışından məndini isə Arduinonun GND portundan alırıq. Geri qalan iki pini isə şəkildə gördüyünüz ardıcıllıqla Arduinonun 12 və 13 pinlərinə bağlayın.
Bütün bağlantıları bitirdiyimizə görə artıq kodlamaya keçə bilərik. Arduinomuzu USB vasitəsi ilə kompüterimizə qoşuruq və proqram təminatını(Arduino IDE) açırıq. Aşağıdadı kodları analiz edərək Arduino IDE-nin yazı sətirinə kopyalayırıq.
Daha yaxşı başa düşmək üçün kod sətirlərini tək-tək araşdırın ki, nəyin hansı kodla işlədiyini anlayasınız. Həçça pin çıxışlarını belə dəyişib yoxlayın.
Kopyalayacağınız kodları sizə təqdim edirik:
#define echoPin 12 //Ultrasonik sensorun echo pini Arduino-nun 12-ci pininə #define trigPin 13 //Ultrasonik sensorun trig pini Arduino-nun 13-cü pininə tanıdılır. #define MotorR1 7 #define MotorR2 6 #define MotorRE 9 // Motor pinlərini tanıdırıq. Diqqət edin ki, motor pinlərini dəyişdiyiniz zaman burada da dəyişməyi unutmayasınız. #define MotorL1 5 #define MotorL2 4 #define MotorLE 3 long zaman, uzaqliq; //zaman ve uzaqlıq adı ilə iki dəyişən tərtib edirik. void setup() { // ultrasonik sensor Trig pininden səs dalğaları göndərdiği üçün OUTPUT (Çıxış), // bu dalğaları Echo pini ilə geri aldığı üçün INPUT (Giriş) olarak göstərilir. pinMode(echoPin, INPUT); pinMode(trigPin, OUTPUT); pinMode(MotorL1, OUTPUT); pinMode(MotorL2, OUTPUT); pinMode(MotorLE, OUTPUT); //Motorlarımızı çıxış olarak göstəririk. pinMode(MotorR1, OUTPUT); pinMode(MotorR2, OUTPUT); pinMode(MotorRE, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); //sensör deaktiv edildi delayMicroseconds(5); digitalWrite(trigPin, HIGH); //Sensora səs dalğası buraxması üçün əmr verildi delayMicroseconds(10); digitalWrite(trigPin, LOW); //Yeni dalğaların buraxılmaması üçün trig pini LOW vəziyyətinə gətirildi zaman = pulseIn(echoPin, HIGH); //ses dalğasının geri dönməsi üçün keçən zaman ölçülür uzaqliq = sure / 29.1 / 2; //ölçülen zaman uzaqlığa çevrilir Serial.println(uzaqliq); if (uzaqliq < 15) // Uzaqlıq 15-dən kiçikdirsə, { geri(); // 150 ms geri get delay(150); sag(); // 250 ms sağa dön delay(250); } else { // deyilsə, ireli(); // irəli get } } void ireli(){ // Robotun irəliyə doğru hərəkət etməsi üçün funksya yaradırıq. digitalWrite(MotorR1, HIGH); // Sağ motorun irəliyə doğru hərəkəti aktiv edilsin digitalWrite(MotorR2, LOW); // Sağ motorun geri hərəkəti deaktiv edilsin analogWrite(MotorRE, 150); // Sağ motorun sürəti 150 digitalWrite(MotorL1, HIGH); // Sol motorun irəli doğru hərəkəti aktiv edilsin digitalWrite(MotorL2, LOW); // Sol motorun geri hərəkəti deaktiv edilsin analogWrite(MotorLE, 150); // Sol motorun sürəti 150 } void sag(){ // Robotun sağa dönmesi üçün funksya yazırıq. digitalWrite(MotorR1, HIGH); // Sağ motorun irəliyə doğru hərəkəti aktiv edilsin digitalWrite(MotorR2, LOW); // Sağ motorun geri hərəkəti deaktiv edilsin analogWrite(MotorRE, 0); // Sağ motorun sürəti 0 (Motor dayandı) digitalWrite(MotorL1, HIGH); // Sol motorun irəli hərəkəti aktiv edilsin digitalWrite(MotorL2, LOW); // Sol motorun geri hərəkəti deaktiv edilsin analogWrite(MotorLE, 150); // Sol motorun sürəti 150 } void geri(){ // Robotun geriyə hərəkəti üçün funksya yazırıq. digitalWrite(MotorR1, LOW); // Sağ motorun irəli hərəkətetməsi deaktiv edilir digitalWrite(MotorR2, HIGH); // Sağ motorun geri hərəkətetməsi aktivləşdirilir analogWrite(MotorRE, 150); // Sağ motorun sürəti 150 digitalWrite(MotorL1, LOW); // Sol motorun irəli hərəkətetməsi deaktiv edilir digitalWrite(MotorL2, HIGH); // Sol motorun geri hərəkətetməsi aktivləşdirilir analogWrite(MotorLE, 150); // Sol motorun sürəti 150 }