Soek Kode

Les 24/31: Slimme Motor Deel 2: Vorentoe, Agteruit, links en regs en die Beheer van die Spoed van die Motor

Les 24/31: Slimme Motor Deel 2: Vorentoe, Agteruit, links en regs en die Beheer van die Spoed van die Motor

24-SunFounder-Car-Speed op die sypaadjie

Hierdie les fokus op die tweede fase van die bou van jou slimkar: beheer oor sy beweging met Arduino-kode. Terwyl die eerste projek die kar dalk op 'n basiese manier laat beweeg het, leer hierdie gids jou hoe om die kar te beveel om vorentoe, agtertoe, links, regs te beweeg en met presisie te stop. Jy sal ook leer hoe om sy spoed te beheer, wat gladde versnelling en vertraging moontlik maak. Dit is 'n fundamentele stap vir enige robotika-projek, aangesien dit jou die grondliggende logika gee om meer komplekse outonome gedrag te skep.

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

Die bemeestering van hierdie bewegingsbeheer open 'n wêreld van moontlikhede. Hier is 'n paar praktiese toepassings vir hierdie kennis:

  • Lynvolgraders: Gebruik die links- en regsdraaifunksies om 'n robot op 'n baan te hou.
  • Obstruksie-vermydingsvoertuie: Programmeer die kar om vorentoe te beweeg, te stop en te draai wanneer dit 'n voorwerp in sy pad bespeur.
  • Afstandbeheerde verkenning: Kombineer hierdie opdragte met 'n draadlose module om die kar rondom jou huis of tuin te bestuur.
  • Outomatiese afleweringsisteme: Skep 'n kleinskaalse robot wat tussen vasgestelde punte kan beweeg, en stop en begin soos nodig.

Hardeware en Komponente

Hierdie projek bou voort op die SunFounder 3-in-1 Arduino-stel. Geen bykomende komponente word benodig buiten die basiese stel nie, maar jy sal vier ekstra drade aan die Arduino moet koppel om die motorbestuurder te beheer. Die noodsaaklike komponente is:

  • Arduino Uno (of versoenbare bord)
  • SunFounder Smart Car-onderstel met motors
  • Motorbestuurderbord (ingesluit in die stel)
  • Springdrade
  • Batterypak vir die kar
  • USB-kabel vir programmering
smarcar_turning_right  bo
smartcar_turning_left bo

Bedradingsgids

Die bedrading vir hierdie projek is noodsaaklik vir die beheer van die rigting van elke motor. Die video verduidelik dat die vier motorbestuurdrade van die bestuurderbord aan Arduino-penne 5, 6, 9 en 10 gekoppel word. Hierdie penne is spesiaal omdat hulle Pulse Width Modulation (PWM) ondersteun, wat noodsaaklik is vir spoedbeheer.

In die video koppel die instrukteur hulle in 'n spesifieke volgorde met geel en blou drade, soos in die diagram hieronder getoon.

'n Kritieke veiligheidsnota wat in die video genoem word, is om die kar se batterykrag (die rooi draad na 5V en swart draad na GND) te ontkoppel terwyl jy die Arduino via USB programmeer. Dit voorkom dat die USB-poort oorlaai word en moontlik afskakel.

Kodeverduideliking

Die kode vir hierdie les is gestruktureer om maklik te verander en te verstaan. Die sleutel tot die beheer van die kar lê in die pen-definisies aan die bokant van die skets. Jy kan dit verander as jy besluit om verskillende penne op jou Arduino te gebruik.

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

Hierdie lyne definieer die Arduino-penne wat aan die motorbestuurder se insette gekoppel is. in1 en in2 beheer een motor, terwyl in3 en in4 die ander beheer. Deur hierdie penne HOOG of LAAG te stel, beheer jy die rigting van elke motor se rotasie.

Om die kar se spoed te beheer, gebruik die kode twee pasgemaakte funksies: moveForward(int speed) en moveBackwards(int speed). Hierdie funksies neem 'n heelgetalwaarde tussen 0 en 255 as 'n argument. 'n Waarde van 0 stop die motor, terwyl 255 die maksimum spoed is. Byvoorbeeld, om die kar vorentoe teen volle spoed te laat beweeg, sal jy moveForward(255) noem. Om dit stadig agtertoe te laat beweeg, sal jy moveBackwards(100) gebruik.

Die video demonstreer ook 'n "versnel" en "vertraag" volgorde met for-lusse. Dit is 'n kragtige tegniek vir gladde versnelling.

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

Hierdie lus begin met i op 0 en verhoog dit met 5 op elke deurgang totdat dit 255 bereik. Elke keer noem dit moveForward(i), wat die kar se spoed geleidelik verhoog. Die delay(100) verskaf 'n 100-millisekonde pouse by elke spoedstap, wat die versnelling sigbaar maak. 'n Soortgelyke lus met 'n dalende waarde van i word gebruik om die kar te vertraag.

Lewende Projekdemonstrasie

In die video demonstreer die instrukteur die projek in twee hoofstadia. Eerstens wys hy die kar se basiese bewegings. Deur die "move"-kode te laai, voer die kar 'n voorgeprogrammeerde volgorde uit: vorentoe beweeg vir twee sekondes, stop, agtertoe vir twee sekondes, stop, links draai, en dan regs draai. Dit bevestig visueel dat die bedrading en logika korrek is.

Die tweede demonstrasie fokus op spoedbeheer. Die instrukteur laai die "versnel" kode, wat die motor geleidelik vorentoe versnel totdat dit maksimum spoed bereik en dan glad vertraag tot stilstand. Hy wys dan 'n weergawe met 'n vaste spoed, waar die motor vorentoe beweeg teen 255, stop, en dan agteruit beweeg teen 'n stadiger spoed van 100, met die waardes wat na die Serial Monitor gedruk word vir verifikasie.

Hoofstukke

  • [00:00] Inleiding tot Motorbewegingsbeheer
  • [01:44] Opstel van die Bedrading vir Kodebeheer
  • [02:07] Demonstrasie van Voor- en Agteruitbeweging
  • [03:18] Demonstrasie van Links- en Regsdraaie
  • [05:05] Verbindings van Drade aan Arduino-penne
  • [07:00] Kodeverduideliking vir Rigtingbeheer
  • [11:44] Inleiding tot Spoedbeheer
  • [12:16] Kodeverduideliking vir Spoedverhoging
  • [14:45] Gebruik van die Serial Monitor vir Ontfouting
  • [17:10] Lewendige Demonstrasie van Spoedbeheer
  • [19:45] Finale Buitelugtoets en Gevolgtrekking

Beelde

26 SunFounder Car 4 ultrasonic video snapshot 00.00.000
26 SunFounder Car 4 ultrasonic video snapshot 00.00.000
Smartcar turning left
Smartcar turning left
Smartcar turning right
Smartcar turning right
24 SunFounder Car speed on the pavement
24 SunFounder Car speed on the pavement
900-Lesson 24/31: Smart code speeds up
Taal: 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)
Taal: 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);
}

Hulpbronne en verwysings

Lêers📁

Arduino Biblioteke (zip)