Code zoeken

Les 24/31: Slimme auto deel 2: Vooruit, achteruit, links en rechts rijden en de snelheid van de auto regelen

Les 24/31: Slimme auto deel 2: Vooruit, achteruit, links en rechts rijden en de snelheid van de auto regelen

24-SunFounder-Car-Speed op het trottoir

Deze les richt zich op de tweede fase van het bouwen van je slimme auto: het overnemen van de controle over de beweging met behulp van Arduino-code. Hoewel het eerste project de auto misschien op een basale manier liet bewegen, leert deze handleiding je hoe je de auto opdracht geeft om nauwkeurig vooruit, achteruit, naar links, naar rechts te rijden en te stoppen. Je leert ook hoe je de snelheid kunt regelen, wat zorgt voor vloeiend accelereren en decelereren. Dit is een fundamentele stap voor elk robotica-project, omdat het je de basislogica geeft om complexere autonome gedragingen te creëren.

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

Het beheersen van deze bewegingscontroles opent een wereld van mogelijkheden. Hier zijn een paar praktische toepassingen voor deze kennis:

  • Lijnvolgende robots: Gebruik de functies voor links en rechts afslaan om een robot op een baan te houden.
  • Obstakelvermijdende voertuigen: Programmeer de auto om vooruit te rijden, te stoppen en te draaien wanneer deze een object in zijn pad detecteert.
  • Op afstand bestuurde verkenning: Combineer deze opdrachten met een draadloze module om de auto door je huis of tuin te rijden.
  • Geautomatiseerde bezorgsystemen: Creëer een kleinschalige robot die tussen ingestelde punten kan bewegen, stoppend en startend wanneer nodig.

Hardware en componenten

Dit project bouwt voort op de SunFounder 3-in-1 Arduino-kit. Er zijn geen extra componenten nodig naast de basisset, maar je moet vier extra draden op de Arduino aansluiten om de motordriver te bedienen. De essentiële componenten zijn:

  • Arduino Uno (of compatibel bord)
  • SunFounder Smart Car-chassis met motoren
  • Motordriverbord (inbegrepen in de kit)
  • Jumperdraden
  • Batterijpakket voor de auto
  • USB-kabel voor het programmeren
smarcar_turning_right  boven
smartcar_turning_left boven

Bekabelingshandleiding

De bedrading voor dit project is cruciaal voor het regelen van de richting van elke motor. De video legt uit dat de vier motorregeldraden van het driverbord zijn verbonden met Arduino-pinnen 5, 6, 9 en 10. Deze pinnen zijn speciaal omdat ze Pulse Width Modulation (PWM) ondersteunen, wat essentieel is voor snelheidsregeling.

In de video verbindt de instructeur ze in een specifieke volgorde met gele en blauwe draden, zoals weergegeven in het onderstaande diagram.

Een belangrijke veiligheidsopmerking in de video is om de batterijvoeding van de auto (de rode draad naar 5V en zwarte draad naar GND) los te koppelen tijdens het programmeren van de Arduino via USB. Dit voorkomt dat de USB-poort overbelast raakt en mogelijk wordt uitgeschakeld.

Code-uitleg

De code voor deze les is gestructureerd om gemakkelijk te wijzigen en te begrijpen. De sleutel tot het besturen van de auto ligt in de pindefinities bovenaan de sketch. Je kunt deze wijzigen als je besluit andere pinnen op je Arduino te gebruiken.

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

Deze regels definiëren de Arduino-pinnen die zijn verbonden met de ingangen van de motordriver. in1 en in2 regelen één motor, terwijl in3 en in4 de andere regelen. Door deze pinnen HOOG of LAAG te zetten, regel je de draairichting van elke motor.

Om de snelheid van de auto te regelen, gebruikt de code twee aangepaste functies: moveForward(int speed) en moveBackwards(int speed). Deze functies nemen een geheel getal tussen 0 en 255 als argument. Een waarde van 0 stopt de motor, terwijl 255 de maximale snelheid is. Om de auto bijvoorbeeld op volle snelheid vooruit te laten rijden, zou je moveForward(255) aanroepen. Om hem langzaam achteruit te laten rijden, zou je moveBackwards(100) gebruiken.

De video demonstreert ook een "versnellen" en "vertragen" sequentie met behulp van for-lussen. Dit is een krachtige techniek voor vloeiende acceleratie.

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

Deze lus begint met i op 0 en verhoogt het met 5 bij elke doorgang totdat het 255 bereikt. Elke keer roept het moveForward(i) aan, waardoor de snelheid van de auto geleidelijk toeneemt. De delay(100) zorgt voor een pauze van 100 milliseconden bij elke snelheidsstap, waardoor de acceleratie zichtbaar wordt. Een vergelijkbare lus met een dalende waarde van i wordt gebruikt om de auto te vertragen.

Live projectdemonstratie

In de video demonstreert de instructeur het project in twee hoofdfasen. Eerst toont hij de basale bewegingen van de auto. Door de "move"-code te laden, voert de auto een voorgeprogrammeerde sequentie uit: twee seconden vooruit rijden, stoppen, twee seconden achteruit rijden, stoppen, naar links draaien en vervolgens naar rechts draaien. Dit bevestigt visueel dat de bedrading en logica correct zijn.

De tweede demonstratie richt zich op snelheidsregeling. De instructeur laadt de "versnellen"-code, die de auto geleidelijk versnelt totdat deze de maximale snelheid bereikt en vervolgens soepel vertraagt tot stilstand. Vervolgens toont hij een versie met een vaste snelheid, waarbij de auto vooruit rijdt op 255, stopt en daarna achteruit rijdt met een lagere snelheid van 100, waarbij de waarden naar de seriële monitor worden geprint ter verificatie.

Hoofdstukken

  • [00:00] Inleiding tot autobewegingsbesturing
  • [01:44] Bedrading instellen voor codebesturing
  • [02:07] Demonstratie van vooruit- en achteruitbeweging
  • [03:18] Demonstratie van linker- en rechterbochten
  • [05:05] Draden aansluiten op Arduino-pinnen
  • [07:00] Uitleg van code voor richtingsbesturing
  • [11:44] Inleiding tot snelheidsregeling
  • [12:16] Uitleg van code voor snelheidsopbouw
  • [14:45] Gebruik van de seriële monitor voor foutopsporing
  • [17:10] Live demonstratie van snelheidsregeling
  • [19:45] Laatste buitentest en conclusie

Afbeeldingen

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);
}

Hulpmiddelen en referenties

Bestanden📁

Arduino-bibliotheken (zip)