Luka Code

Malasi ya 25/31: Motuka-3 Motuka ya mayele ekimaka ebele ya nzela na kosalela ba senseur ya infrarouge | SunFounder Robojax

Malasi ya 25/31: Motuka-3 Motuka ya mayele ekimaka ebele ya nzela na kosalela ba senseur ya infrarouge | SunFounder Robojax

Projet oyo ekokamboli SunFounder 3-in-1 Arduino smart car na yo ekomi motuka oyo ekokima ba obstacles na ndenge ya autonome. Na kotia ba senseur mibale ya infrarouge (IR)—moko na loboko ya gauche mpe moko na loboko ya droite—moto ya motuka akoki koyeba biloko oyo ezali na nzela na yango mpe kozwa bikateli na lombangu mpo na kopengola yango. Oyo ezali etape ya libota na robotique, oyo ezali koteya yo ndenge ya kosangisa ba entrées ya senseur na logique ya contrôle ya moteur mpo na kosala masini oyo ezali na réaction mpe oyo ekokende na ndenge na yango. Baprensipes oyo okoyekola awa ekosalisa na bisika mingi ya application réelle, na ndenge oyo:

  • Kotonga robot ya kopetola oyo ekokende na chambre mobimba na kobuka ba meuble te.
  • Kokela robot oyo elandaka nzela to oyo esengeli kosala labyrinthe mpo na ba compétitions to ba projets ya éducation.
  • Kokola robot ya sécurité oyo ezali na automatique oyo ekokende na périmètre mpe ekokima ba murs.
  • Kobongisa motuka ya lisano ya intelligent oyo ekoki kosakana na ndenge na yango na kokangama te.

Mokambi oyo etongami na ba leçons oyo eleki oyo oyekolaki kotonga ba moteurs ya motuka mpe kososola ndenge ba senseur IR esalaka. Awa, tokosangisa ba compétences wana mpo na kosala algorithme ya koboya obstacles oyo ezali pete kasi efficace.

Ndenge Logique ya Koboya Obstacles Esalaka

Mokano ya libota ezali pete: motuka esalelaka ba senseur IR mibale mpo na kotala ba obstacles na loboko ya gauche mpe ya droite. Senseur moko na moko ebimisaka signal ya digitale: LOW (0) ntango emonaka objet na kati ya esika na yango (pene na 20 cm) mpe HIGH (1) ntango nzela ezali polele. Logique yango ekotonga mokano ya motuka kolanda état ya ba senseur (na vidéo na 02:35):

  • Obstacle na gauche, droite polele: Motuka ekomipesa na droite mpo na kokima yango.
  • Obstacle na droite, gauche polele: Motuka ekomipesa na gauche.
  • Ba obstacles na bangambo nyonso mibale: Motuka ekokende na sima mpo na kokima esika oyo ekoki kokoma na suka.
  • Ba obstacles te: Motuka ekokende na liboso.

Mokano oyo ya réaction ezali ndakisa ya classique ya machine ya état fini, epai motuka ezali kosala kolanda ba entrées ya senseur na yango ya ntango wana.

Sunfounder-Smartcar-Obstacle-avoideance-1

Ba Composants ya Matériel

Mpo na kosukisa projet oyo, okolinga ba composants oyo, oyo nyonso ezali na kati ya kit ya SunFounder 3-in-1 Arduino:

  • 1x Kit ya SunFounder 3-in-1 Arduino Smart Car (to ba parties oyo ekokani)
  • 2x Ba senseur ya Koboya Obstacles ya Infrarouge
  • 1x Arduino Uno (to carte oyo ekokani)
  • 1x Bouclier/Carte ya Contrôle ya Moteur
  • Ba fils ya Jumper

Mokambi ya Câblage

Kokengela malamu ya ba senseur ezali na tina mingi mpo projet oyo esala. Ba senseur IR esengeli kokengama na liboso mpe na libanda moke, pamba te ekotala ba obstacles na bangambo ya motuka (na vidéo na 02:07). Diagramme ya câblage oyo elakisi ndenge ya kokangisa ba senseur na Arduino. Tosengeli koyeba ete molakisi asalelaki esika ya distribution ya courant na breadboard ya motuka, kasi ba connexions na Arduino nde ezali na tina.

Sunfounder-Smartcar-Obstacle-avoideance-wiring

Ba connexions ya câblage ezali na ndenge oyo (na vidéo na 03:47):

  • Puissance (VCC): Kanga pin ya VCC ya ba senseur IR nyonso mibale na sortie ya 5V na Arduino to na rail ya puissance ya motuka.
  • Terre (GND): Kanga pin ya GND ya ba senseur IR nyonso mibale na terre commune na Arduino to na rail ya terre ya motuka.
  • Sortie ya Senseur ya Droite (OUT): Kanga pin ya sortie digitale ya senseur IR ya droite na pin digitale 7 na Arduino.
  • Sortie ya Senseur ya Gauche (OUT): Kanga pin ya sortie digitale ya senseur IR ya gauche na pin digitale 8 na Arduino.

Ba connexions ya contrôle ya moteur mpo na ba moteurs ya gauche mpe ya droite ezali ndenge moko na oyo etiamaki na leçon ya liboso na ntina ya contrôle ya moteur.

Explication ya Code

Code ya projet oyo ezali pete. Programme principal ezali ya télécharger na nse ya article. Awa, tokotalela ba parties oyo utilisateur akoki kobongola mpo na motuka na yo moko.

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;

Ba lignes oyo efinir ba pins oyo basalelaka mpo na contrôle ya moteur mpe ba senseur IR. Ba pins ya moteur (A_1B, A_1A, B_1B, B_1A) ekolakisa vitesse mpe direction ya ba moteurs mibale. Ba pins rightIR mpe leftIR ezali esika okokangisa ba fils ya signal ya ba senseur na yo. Soki osalelaki ba pins mosusu, okobongola ba valeurs oyo awa.

int speed = 150;

Variable oyo etyaka vitesse ya libota ya motuka. Valeur ekoki kozala na kati ya 0 mpe 255, epai 255 ezali vitesse ya maximum. Valeur ya 150 ezali esika ya malamu ya kobanda mpo na koyekola, pamba te ezali mbangu mpo na kozala na intérêt kasi ezali malembe mpo na kopesa ntango ya réaction (na vidéo na 07:10). Okoki kobongola yango mpo na kokomisa motuka na yo mbangu to malembe.

Buku mosusu ya code ezali kolakisa logique na fonction loop(). Ezali kotanga état ya ba senseurs ya gauche mpe ya droite, na sima ezali kobenga fonction ya mouvement oyo esengeli (moveForward(), moveBackward(), backLeft(), backRight()). Ba fonctions oyo ezwami liboso mpe ezali kokamba moteur driver mpo na kosala mouvement oyo elingami. Mokambi atiaki mpe fonction stop() na mbonguani ya sima mpo na kotelema mwa ngonga moke nsima ya kosala mouvement ya kokima obstacle, mpo ete mouvement na yango ezala ya mayele mingi (na vidéo na 10:29).

Démonstration ya Projet na Bomoi

Na vidéo, mokambi abandimaki kolakisa logique na esaleli ya Serial Monitor. Na kotia kisi pembeni ya ba senseurs, okoki komona ba messages oyo ekokani lokola "Go Left", "Go Right", to "Go Backward" ezali komonana na écran, oyo ezali kolakisa ete ba senseurs mpe logique ezali malamu (na vidéo na 09:11).

Nsima ya komeka logique, mokambi abakisi mbonguani ya ntina: fonction stop(). Fonction oyo ezali kotelema mobimba mwa ngonga moko (ndakisa, 1 seconde) nsima ya kopesa mouvement ya kobongola to ya kozonga, mpo na kopekisa ba mouvements ya mbalakaka mpe kopesa nzela na motuka ete etala lisusu zingazinga na yango (na vidéo na 10:29).

Na suka, motuka emekami na mabele elongo na ba obstacles ebele. Vidéo elakisi motuka ezali koleka malamu pembeni ya ba kisi, kobongola na gauche, na droite, mpe kozonga soki esengeli mpo na koluka nzela ya polele, oyo ezali kolakisa application ya solo ya algorithme oyo ya kokima obstacle (na vidéo na 12:13).

Bipayi

  • [00:00] Introduction na Kokima Obstacle na Ba Senseurs IR
  • [01:24] Ba Prérequis mpe Bongo ya Projet
  • [02:35] Ndenge Logique ya Kokima Obstacle Ezali Kosala
  • [03:47] Kokangisa Ba Senseurs IR mpe Ba Moteurs
  • [05:40] Kofungola mpe Kolimbola Code
  • [09:11] Komeka Logique na Serial Monitor
  • [10:29] Kobakisa Fonction Stop mpo na Navigation ya Malamu
  • [11:42] Komeka Fonction Stop
  • [12:13] Momekano ya Suka na Mabele

Images

Sunfounder smartcar obstacle avoidance 1
Sunfounder smartcar obstacle avoidance 1
Sunfounder smartcar obstacle avoidance wiring
Sunfounder smartcar obstacle avoidance wiring
894-Lesson 25: SunFounder's 3-in-1 Arduino kit Car-3 Smart Car Avoids Obstacle Using Infrared Sensors
Langue: C++
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;

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

}

void loop() {

  int left = digitalRead(leftIR);  // 0: Obstructed   1: Empty
  int right = digitalRead(rightIR);
  int speed = 150;

  if (!left && right) {
    backLeft(speed);
  } else if (left && !right) {
    backRight(speed);
  } else if (!left && !right) {
    moveBackward(speed);
  } else {
    moveForward(speed);
  }
}

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 backLeft(int speed) {
  analogWrite(A_1B, speed);
  analogWrite(A_1A, 0);
  analogWrite(B_1B, 0);
  analogWrite(B_1A, 0);
}

void backRight(int speed) {
  analogWrite(A_1B, 0);
  analogWrite(A_1A, 0);
  analogWrite(B_1B, 0);
  analogWrite(B_1A, speed);
}

Mokili na bisika

Fichiers📁

Maktabat ya Arduino (zip)