Les 27/31: SunFounder Smart Car-5 volgt je hand met Arduino | Robojax
Introductie
Heb je ooit een robot willen bouwen die intuïtief reageert op jouw aanwezigheid? Dit project transformeert een standaard SunFounder Smart Car in een op gebaren bestuurd voertuig dat jouw hand volgt. In plaats van een afstandsbediening of een smartphone-app te gebruiken, maakt deze auto gebruik van een combinatie van ultrasone en infraroodsensoren om de positie en afstand van jouw hand te detecteren, zodat je hem met eenvoudige natuurlijke bewegingen naar links, rechts of vooruit kunt sturen.
Dit project maakt deel uit van de Robojax Arduino-cursus (Les 27/31) en is gebouwd met de SunFounder 3-in-1 Arduino-kit. Het is een uitstekende manier om te leren over sensorfusie, waarbij meerdere sensoren samenwerken om een complexer en responsiever gedrag te creëren. De praktische waarde hier ligt in het begrijpen hoe je verschillende soorten inputs combineert om beslissingen te nemen, een fundamenteel concept in robotica en automatisering.
Hier zijn een paar praktische ideeën die je op deze logica zou kunnen voortbouwen:
- Interactieve tentoonstellingen: Maak een kleine robotische display die bezoekers volgt om hun aandacht te trekken.
- Autonoom obstakelvermijdend platform: Pas de code aan zodat de auto een kamer navigeert door obstakels te vermijden in plaats van een hand te volgen.
- Educatieve roboticakit: Gebruik dit als een fundamenteel project om studenten te leren over sensorintegratie, logica en motorregeling.
- Slimme bezorgkar: In een gecontroleerde omgeving kan deze logica worden aangepast voor een kleine kar die een persoon volgt in een magazijn- of fabrieksomgeving.
Hardware & Componenten
Dit project gebruikt de componenten die zijn inbegrepen in de SunFounder 3-in-1 Arduino-kit. De kerncomponenten die je zult gebruiken zijn:
- SunFounder Smart Car-chassis: Het fysieke platform met wielen en motoren.
- Arduino-bord: Het "brein" van de auto dat de code uitvoert.
- Ultrasone sensor (HC-SR04): Wordt gebruikt om de afstand tot een object (jouw hand) voor de auto te meten.
- Twee IR (infrarood) obstakelvermijdingssensoren: Gemonteerd aan de linker- en rechterkant om de aanwezigheid van jouw hand aan die kanten te detecteren.
- Motordriver: Een module (vaak een L298N of vergelijkbaar) die wordt gebruikt om de snelheid en richting van de motoren van de auto te regelen op basis van signalen van de Arduino.
- Stroombron: Batterijen om de Arduino en motoren van stroom te voorzien.
Bekabelingsgids
Zoals vermeld in de video, is de bekabeling voor dit project identiek aan wat in eerdere lessen is uitgelegd voor de obstakelvermijdende auto. De sensoren en motoren zijn allemaal verbonden met de digitale en analoge pinnen van de Arduino. Voor een visuele referentie, raadpleeg het bedradingsschema voor de SunFounder Smart Car.
De code definieert de specifieke pinnen die voor elk onderdeel worden gebruikt, die in de volgende sectie worden gedetailleerd.
Code-uitleg
Deze sectie richt zich op de door de gebruiker configureerbare delen van de code die je mogelijk wilt aanpassen voor jouw eigen auto. Het volledige programma is beschikbaar om te downloaden op de Robojax-resourcepagina.
Helemaal bovenaan de schets vind je de pindefinities. Dit zijn de meest kritieke regels om te begrijpen als je jouw auto anders hebt bedraad dan de instructeur.
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR=7;
const int leftIR=8;
const int trigPin = 3;
const int echoPin = 4;
Hier is wat elke groep pinnen doet:
- Motorpinnen (A_1A, A_1B, B_1A, B_1B): Dit zijn de pinnen die zijn verbonden met de motordriver om de twee motoren te regelen. De labels "A" en "B" verwijzen doorgaans respectievelijk naar de linker- en rechtermotoren. Je moet deze wijzigen als jouw motordriver is verbonden met andere Arduino-pinnen.
- IR-sensorpinnen (rightIR, leftIR): Deze digitale ingangspinnen lezen het signaal van de linker- en rechter infrarood obstakelsensoren. Een waarde van
0betekent dat een obstakel (jouw hand) is gedetecteerd, terwijl1betekent dat het pad vrij is. - Ultrasone sensorpinnen (trigPin, echoPin): De
trigPinis een uitgang die een korte ultrasone puls verzendt, en deechoPinis een ingang die de duur van de gereflecteerde puls leest om de afstand te berekenen.
Binnen de loop()-functie vind je de belangrijkste gedragslogica. Er is één variabele die je mogelijk wilt aanpassen:
int speed = 150;
Deze speed-variabele regelt het vermogen dat naar de motoren wordt gestuurd tijdens beweging. Het kan variëren van 0 (gestopt) tot 255 (maximale snelheid). Je kunt deze waarde verhogen (bijv. naar 200) voor een snellere auto of verlagen (bijv. naar 100) voor meer gecontroleerde, langzamere bewegingen.
De code bevat ook functies zoals moveForward(), turnLeft() en turnRight(). Deze functies worden gebruikt om de beweging van de auto te regelen en worden aangeroepen op basis van de sensorwaarden. Je hoeft ze niet te wijzigen, maar je kunt ze gebruiken als bouwstenen om je eigen aangepaste gedragingen te creëren.
Hoe de "Volg Je Hand"-logica Werkt
De magie van dit project ligt in hoe de Arduino de gegevens van de drie sensoren interpreteert. De logica is eenvoudig en wordt continu uitgevoerd in de loop()-functie.
Eerst meet de auto de afstand tot een object direct voor zich met behulp van de ultrasone sensor. Vervolgens controleert het de twee infraroodsensoren om te zien of er een object aan de linker- of rechterkant is. Het besluitvormingsproces is als volgt:
- Vooruit rijden: Als de afstand gemeten door de ultrasone sensor groter is dan 5 cm maar kleiner dan 10 cm, rijdt de auto vooruit. Dit creëert een "sweet spot"-zone waarin de auto je hand volgt.
- Naar links draaien: Als de afstand niet in die zone ligt, controleert de auto de IR-sensoren. Als de linkersensor wordt geblokkeerd (je hand is aan de linkerkant) en de rechtersensor vrij is, draait de auto naar links.
- Naar rechts draaien: Omgekeerd, als de rechtersensor wordt geblokkeerd en de linkersensor vrij is, draait de auto naar rechts.
- Stoppen: Als geen van deze voorwaarden wordt vervuld—bijvoorbeeld als je hand te ver weg of te dichtbij is—stopt de auto.
Deze eenvoudige set regels stelt de auto in staat om dynamisch te reageren op de positie van je hand, wat een soepel en intuïtief volggedrag creëert.
Live projectdemonstratie
In de videodemonstratie laat de instructeur het gedrag van de auto in realtime zien. De seriële monitor wordt gebruikt om de afstand weer te geven die door de ultrasone sensor wordt gemeten. Wanneer de auto stilstaat en je hand ver weg is (bijv. 36 cm), blijft hij gestopt. Zodra je je hand binnen de 5-10 cm-zone voor de auto plaatst, begint hij vooruit te rijden.
De demonstratie benadrukt ook de draailogica. Wanneer je hand aan de linkerkant van de auto wordt geplaatst, wordt de linker IR-sensor geactiveerd en draait de auto naar links. Op dezelfde manier zorgt het plaatsen van je hand aan de rechterkant ervoor dat de auto naar rechts draait. De auto blijft je hand volgen terwijl je deze beweegt, en stopt alleen wanneer je hand uit het sensorbereik wordt verwijderd of te dichtbij is. Dit bevestigt dat de sensorfusie en logica werken zoals bedoeld, wat een responsief en leuk project oplevert.
Hoofdstukken
- [00:00] Introductie tot de handvolgende slimme auto
- [00:35] Over de Robojax Arduino-cursus en -kit
- [01:41] Projectoverzicht en code-instellingen
- [02:19] Uitleg van pin-definities en instellingen
- [03:19] Codelogica voor het volgen van je hand
- [05:48] Live demonstratie van de auto in actie
- [07:28] Einddemonstratie en prestatiebeoordeling
/*
Lesson 27/31: Car-5 SunFounder Smart Car Follows Your Hand
Get this code and watch video Download and resource page https://robojax.com/RJT610
YouTube video https://www.youtube.com/watch?v=mcbJlE7-8ro
*/
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR=7;
const int leftIR=8;
const int trigPin = 3;
const int echoPin = 4;
void setup() {
Serial.begin(9600);
//motor
pinMode(A_1B, OUTPUT);
pinMode(A_1A, OUTPUT);
pinMode(B_1B, OUTPUT);
pinMode(B_1A, OUTPUT);
//IR obstacle
pinMode(leftIR,INPUT);
pinMode(rightIR,INPUT);
//ultrasonic
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
float distance = readSensorData();
int left = digitalRead(leftIR); // 0: Obstructed 1: Empty
int right = digitalRead(rightIR);
int speed = 150;
if (distance>5 && distance<10){
moveForward(speed);
}else if(!left&&right){
turnLeft(speed);
}else if(left&&!right){
turnRight(speed);
}else{
stopMove();
}
}
float readSensorData() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
float distance = pulseIn(echoPin, HIGH) / 58.00; //Equivalent to (340m/s*1us)/2
return distance;
}
void moveForward(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void moveBackward(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
void turnRight(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void turnLeft(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
void stopMove() {
analogWrite(A_1B, 0);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, 0);
}
Common Course Links
Common Course Files
Dingen die je misschien nodig hebt
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Hulpmiddelen en referenties
-
DocumentatieDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ExternPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Bestanden📁
Arduino-bibliotheken (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB