Search Code

Лекција 24/31: Паметен автомобил Дел 2: Движење напред, назад, лево и десно и контролирање на брзината на автомобилот

Лекција 24/31: Паметен автомобил Дел 2: Движење напред, назад, лево и десно и контролирање на брзината на автомобилот

24-SunFounder-Car-Speed на тротоар

Оваа лекција се фокусира на втората фаза од изградбата на вашиот паметен автомобил: преземање контрола над неговото движење користејќи Arduino код. Додека првиот проект можеби го направи автомобилот да се движи на основен начин, ова упатство ве учи како да му наредите на автомобилот да се движи напред, назад, да сврти лево, да сврти десно и да запре со прецизност. Исто така ќе научите како да ја контролирате неговата брзина, овозможувајќи мазно забрзување и успорување. Ова е основен чекор за секој роботика проект, бидејќи ви дава основна логика за создавање посложени автономни однесувања.

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000

Совладувањето на овие контроли за движење отвора свет на можности. Еве неколку практични примени за ова знаење:

  • Роботи што следат линија: Користете ги функциите за лево и десно свртување за да го задржите роботот на патека.
  • Возила за избегнување пречки: Програмирајте го автомобилот да се движи напред, да запре и да сврти кога ќе открие објект на неговиот пат.
  • Истражување со далечинско управување: Комбинирајте ги овие команди со безжичен модул за да го возите автомобилот низ вашата куќа или двор.
  • Автоматизирани системи за достава: Создадете робот во мал размер што може да се движи помеѓу поставени точки, запирајќи и стартувајќи по потреба.

Хардвер и компоненти

Овој проект се надоврзува на SunFounder 3-во-1 Arduino комплетот. Не се потребни дополнителни компоненти освен основниот комплет, но ќе треба да поврзете четири дополнителни жици на Arduino за да го контролирате моторниот драјвер. Суштинските компоненти се:

  • Arduino Uno (или компатибилна плоча)
  • SunFounder Smart Car шасија со мотори
  • Плоча за моторен драјвер (вклучена во комплетот)
  • Жици за поврзување
  • Батериски пакет за автомобилот
  • USB кабел за програмирање
smarcar_turning_right  горе
smartcar_turning_left горе

Водич за поврзување

Поврзувањето за овој проект е клучно за контролирање на насоката на секој мотор. Видеото објаснува дека четирите жици за контрола на моторот од плочата на драјверот се поврзани со пиновите 5, 6, 9 и 10 на Arduino. Овие пинови се специјални бидејќи поддржуваат модулација на ширина на импулси (PWM), што е суштинско за контрола на брзината.

Во видеото, инструкторот ги поврзува по специфичен редослед користејќи жолти и сини жици, како што е прикажано на дијаграмот подолу.

Клучна безбедносна напомена спомната во видеото е да се исклучи напојувањето на батеријата на автомобилот (црвената жица на 5V и црната жица на GND) додека го програмирате Arduino преку USB. Ова го спречува USB портот да биде преоптоварен и потенцијално да се исклучи.

Објаснување на кодот

Кодот за оваа лекција е структуриран да биде лесен за менување и разбирање. Клучот за контролирање на автомобилот лежи во дефинициите на пиновите на врвот на скицата. Можете да ги промените овие ако одлучите да користите различни пинови на вашиот Arduino.

const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

Овие линии ги дефинираат Arduino пиновите поврзани со влезовите на моторниот драјвер. in1 и in2 контролираат еден мотор, додека in3 и in4 го контролираат другиот. Со поставување на овие пинови на HIGH или LOW, ја контролирате насоката на ротација на секој мотор.

За да ја контролирате брзината на автомобилот, кодот користи две сопствени функции: moveForward(int speed) и moveBackwards(int speed). Овие функции примаат целобројна вредност помеѓу 0 и 255 како аргумент. Вредноста 0 го запира моторот, додека 255 е максималната брзина. На пример, за да го движите автомобилот напред со полна брзина, би ја повикале moveForward(255). За да го движите назад полека, би користеле moveBackwards(100).

Видеото исто така демонстрира секвенца на „забрзување“ и „успорување“ користејќи for јамки. Ова е моќна техника за мазно забрзување.

for(int i=0;i<=255;i+=5){
  moveForward(i);
  delay(100);
}

Оваа јамка започнува со i на 0 и ја зголемува за 5 при секое поминување додека не достигне 255. Секој пат, таа го повикува moveForward(i), постепено зголемувајќи ја брзината на автомобилот. delay(100) обезбедува пауза од 100 милисекунди на секој чекор на брзина, правејќи го забрзувањето видливо. Слична јамка со намалувачка вредност на i се користи за успорување на автомобилот.

Демонстрација на живиот проект

Во видеото, инструкторот го демонстрира проектот во две главни фази. Прво, ги покажува основните движења на автомобилот. Со вчитување на кодот „move“, автомобилот извршува претходно програмирана секвенца: движење напред две секунди, запирање, движење наназад две секунди, запирање, свртување лево, а потоа свртување десно. Ова визуелно потврдува дека поврзувањето и логиката се точни.

Втората демонстрација се фокусира на контрола на брзината. Инструкторот ја вчитува шифрата за „забрзување“, која постепено го забрзува автомобилот напред додека не достигне максимална брзина, а потоа непречено успорува до запирање. Потоа покажува верзија со фиксна брзина, каде автомобилот се движи напред со 255, запира, а потоа се движи наназад со побавна брзина од 100, при што вредностите се печатат на серискиот монитор за проверка.

Поглавја

  • [00:00] Вовед во контрола на движењето на автомобилот
  • [01:44] Поставување на жиците за контрола преку код
  • [02:07] Демонстрација на движење напред и назад
  • [03:18] Демонстрација на вртење лево и десно
  • [05:05] Поврзување на жици со Arduino пиновите
  • [07:00] Објаснување на кодот за контрола на насоката
  • [11:44] Вовед во контрола на брзината
  • [12:16] Објаснување на кодот за постепено зголемување на брзината
  • [14:45] Користење на серискиот монитор за дебагирање
  • [17:10] Жива демонстрација на контролата на брзината
  • [19:45] Финален тест на отворено и заклучок

Images

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000
26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000
smartcar_turning_left
smartcar_turning_left
smarcar_turning_right
smarcar_turning_right
24-SunFounder-Car-Speed on the pavement
24-SunFounder-Car-Speed on the pavement
900-Lesson 24/31: Smart code speeds up
Language: C++
/*
Lesson 24/31: Smart code speeds up
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM

*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  Serial.begin(9600);
  Serial.println("SunFounder Arduino Course");
  Serial.println("Lesson 3: Speed up");
  Serial.println("www.Robojax.com");
  
}

void loop() {
    
    moveForward(255);
    Serial.print("Forward at: ");
    Serial.println(255);
    delay(5000);//for 5 seconds

    Serial.println("Stopped ");
    moveForward(0);//stop the car
    delay(2000);//for 2 seconds
    
    moveBackwards(100);
    Serial.print("Reverse at: ");    
    Serial.println(100);    
    delay(5000);//for 5 seconds

    Serial.println("Stopped ");
    moveForward(0);//stop the car
    delay(2000);//for 2 seconds   
 
}

void moveForward(int speed) {
  analogWrite(in1, 0);
  analogWrite(in2, speed);
  
  analogWrite(in3, speed);
  analogWrite(in4, 0);
}

void moveBackwards(int speed) {
  analogWrite(in1, speed);
  analogWrite(in2, 0);
  
  analogWrite(in3, 0);
  analogWrite(in4, speed);
}
901-Lesson 24/31: Smart code speeds up (Custome code)
Language: C++
/*
Lesson 24/31: Smart code speeds up (custom code)
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM

*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  Serial.begin(9600);
  Serial.println("SunFounder Arduino Course");
  Serial.println("Lesson 3: Speed up");
  Serial.println("www.Robojax.com");
  
}

void loop() {
  Serial.println("Loop 1: Speeding Up"); 
  for(int i=0;i<=255;i+=5){
    moveForward(i);
    Serial.print("i= ");
    Serial.println(i);
    delay(100);
  }
    Serial.println("Loop 2: Slowing down "); 
  for(int i=255;i>=0;i-=5){
    moveForward(i);
    Serial.print("i= ");
    Serial.println(i);    
    delay(100);
  }
 
}

void moveForward(int speed) {
  analogWrite(in1, 0);
  analogWrite(in2, speed);
  
  analogWrite(in3, speed);
  analogWrite(in4, 0);
}

Resources & references

Files📁

Arduino Libraries (zip)