Guide dyal montage · Mobtadi2 · men 9 snin

Rakkeb Mark I dyalek

Ghadi nrakbo Mark I m3a b3diyatna, khetwa b khetwa. F kol khetwa: kayna animation 3D li t9der tdowwarha b sb3ek wla b la souris bach tchoufha men kol jiha, w video b 7a9 li tweriik kifach ddir. Khod we9tek — melli tkoun wajed, dwwez l khetwa li mn b3d.

Jbed bach iddor · qebbet/zarbel bach tzoomi
Kaytcharja l modèle 3D…
Khatwa 1
L montage ghadi ibda…

Mazal ma 3andek Mark I dyalek? Sawweb wahed dyalek f 3D w khtar lwanek.

Personnaliser Mark I dyali ← Centre d'apprentissage
Dmagh dyal robot

Kifach khedem l code?

Daba men b3d ma rakkebti Mark I dyalek, khellina nkechfo l 3a9el dyalo: l code. Ma khessekch t3ref tbarmaj — ghadi n9raweh m3a b3diyatna, t9e9a t9e9a. L barnamaj, ghir la7i7a dyal les instructions sahliyin li kaytbe3hom l robot dghiya, w mrra mn b3d mrra.

#include <AFMotor_R4.h>

Ghadi n3tiw l robot ktab dyal recettes wajed bach ykommandi l moteurs dyalo. B7al hakka, ma khessna n3awdo nfesro kolchi: kan3awdo nsta3mlo recettes deja mketbin lina.

AF_DCMotor moteur1(1);
AF_DCMotor moteur2(2);

Ghadi n9addmo jouj l moteurs l robot w n3tiwhom smiya: moteur1 w moteur2. L (1) w l (2) kay9olo f ina prise dyal l carte mbranchiyin. Daba, melli n9olo « moteur1 », l robot ghadi y3ref 3la men kanhedro.

#define TRIG A0
#define ECHO A1

L robot 3ndo 3inin khassin: capteur li kaysift chi « bip » sghir w kaytsenna l echo li kayrje3, b7al be7al bif l wt'wat. TRIG, huwa l fil li kaysift l bip; ECHO, huwa l fil li kaytsenna l rj3a. Ghir kan9olo f ina prises mbranchiyin (A0 w A1).

const int SEUIL_CM = 20;
const int VITESSE  = 200;

Ghadi nweqqfo jouj r9am mrra l kolchi. SEUIL_CM = 20, hadi hiya l masafa dyal l aman: ila kan chi 3a9iba 9el men 20 centimètres, l robot ghadi y9ol « 3endek! ». VITESSE = 200, hadi hiya sor3a dyal l moteurs, 3la sellem men 0 (wa9ef) l 255 (l akher).

long lireDistanceCm() {
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  long duree = pulseIn(ECHO, HIGH, 30000UL);
  if (duree == 0) return 999;
  return duree * 0.034 / 2;
}

Hadi hiya recette « 9iss l masafa ». L robot kaysift bip sghir bezzaf (kaych3el TRIG l9iya 9sira), mn b3d kaychrono l we9t li kaykhdeh l echo bach yrje3 (ECHO). Kol ma kaykhdeh l echo we9t ktar, kol ma l 7it b3id ktar. Akher star kaybeddel had l we9t l centimètres. W ila ma sme3 7ta echo, kayjaweb 999 — l tari9a dyalo bach y9ol « ma kanchouf walo 9oddam, l tri9 fayda ».

void avancer() {
  moteur1.run(BACKWARD);
  moteur2.run(FORWARD);
}
void reculer() {
  moteur1.run(FORWARD);
  moteur2.run(BACKWARD);
}
void pivoter() {
  moteur1.run(FORWARD);
  moteur2.run(FORWARD);
}
void arret() {
  moteur1.run(RELEASE);
  moteur2.run(RELEASE);
}

Hahoma rjlin l robot: reb3a recettes sghar bach yt7errek. avancer = nichan, reculer = l lor, pivoter = ydour f blasto, w arret = ywe9ef (kanseyybo l moteurs). L klmat BACKWARD/FORWARD (l lor/l9oddam) twe9qaw 9sed bach ywatiw l tari9a li trakbat biha l moteurs 3la l robot DYALEK: l mohimm, huwa belli « avancer » ykhellih y mchi bse77 nichan.

void setup() {
  Serial.begin(9600);
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  moteur1.setSpeed(VITESSE);
  moteur2.setSpeed(VITESSE);

setup, hada huwa li kaydiro l robot mrra WE7DA melli kayfi9, melli kanch3lo. Kayfte7 ligne dyal l hadra m3a l ordinateur (bach y9der ykteb lina rasayel), kayfesser belli TRIG kaykhdem bach yhder w ECHO bach ytsenna, mn b3d kaywe9qed sor3a dyal jouj l moteurs.

  Serial.println(F("=== Demarrage ==="));
  long test = lireDistanceCm();
  if (test >= 999) {
    Serial.println(F("ATTENTION: capteur muet (AUCUN ECHO)."));
    Serial.println(F("-> corrige Trig/Echo / 5V / GND, le robot n'evitera RIEN."));
  } else {
    Serial.print(F("Capteur OK, distance initiale: "));
    Serial.print(test);
    Serial.println(F(" cm"));
  }
  delay(1500);
}

9bel ma yt7errek, l robot kaydir chi test sghir l 3inin dyalo: kay9iss l masafa mrra. Ila l capteur ma jaweb (999), kaykteb rissala dyal l alerte bach y3ellmek belli ma ghadi ytfada 7ta chi 7aja (khess t3awd tcheck: l fila w l branchement). Wila la kaykteb « Capteur OK » m3a l masafa. Mn b3d kaytsenna 1,5 t'ania, l we9t li t9ra l rissala w t7ett l robot f l ard.

void loop() {
  long distance = lireDistanceCm();
  Serial.println(distance);

loop, hada huwa li kay3awdo l robot f boucle, mrra mn b3d mrra, dghiya bezzaf, ma dam mch3oul — hadi hiya l tari9a dyalo bach yfekker f kol we9t. F kol dawra, kay9iss l masafa li 9oddamo w kayktebha (bach n9dro nchoufouha 3la l ordinateur).

  if (distance < SEUIL_CM) {
    arret();    delay(150);
    reculer();  delay(400);
    arret();    delay(150);

    pivoter();
    unsigned long debut = millis();
    while (lireDistanceCm() < SEUIL_CM && millis() - debut < 2000) {
      delay(50);
    }
    arret();    delay(150);
  } else {
    avancer();
  }
}

Mn b3d kaykhod 9rar. ILA kan chi 3a9iba 9rib bezzaf (9el men 20 cm): kaywe9ef, kayrje3 l lor chwiya, kaywe9ef tani, mn b3d kaypivoti (ydour f blasto) 7ta tweli l tri9 fayda — walakin 2 t'ani be7al be7al, bach ma ydourch bla 7add. WILA LA, l tri9 fayda, idan kaymchi nichan. W 7it had kolchi kayt3awd 3acharat dyal l mrrat f t'ania, l robot kayban b7al katyttsara be7do w kaytfada l 7yot!

W hahiya — hadak huwa l barmaja: t3ti l robot la7i7a dyal les instructions sahliyin, li kaytbe3hom dghiya. 9ariban, ghadi t9der tbeddel had r9am b ra'sek: jerreb chi VITESSE okhra, wla SEUIL_CM kbir ktar, w chouf kifach Mark I dyalek kaytsarraf!

Chouf l code kaml (bach t-copyih)
#include <AFMotor_R4.h>

AF_DCMotor moteur1(1);
AF_DCMotor moteur2(2);

#define TRIG A0
#define ECHO A1

const int SEUIL_CM = 20;
const int VITESSE  = 200;

long lireDistanceCm() {
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  long duree = pulseIn(ECHO, HIGH, 30000UL);
  if (duree == 0) return 999;
  return duree * 0.034 / 2;
}

void avancer() {
  moteur1.run(BACKWARD);
  moteur2.run(FORWARD);
}
void reculer() {
  moteur1.run(FORWARD);
  moteur2.run(BACKWARD);
}
void pivoter() {
  moteur1.run(FORWARD);
  moteur2.run(FORWARD);
}
void arret() {
  moteur1.run(RELEASE);
  moteur2.run(RELEASE);
}

void setup() {
  Serial.begin(9600);
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  moteur1.setSpeed(VITESSE);
  moteur2.setSpeed(VITESSE);

  Serial.println(F("=== Demarrage ==="));
  long test = lireDistanceCm();
  if (test >= 999) {
    Serial.println(F("ATTENTION: capteur muet (AUCUN ECHO)."));
    Serial.println(F("-> corrige Trig/Echo / 5V / GND, le robot n'evitera RIEN."));
  } else {
    Serial.print(F("Capteur OK, distance initiale: "));
    Serial.print(test);
    Serial.println(F(" cm"));
  }
  delay(1500);
}

void loop() {
  long distance = lireDistanceCm();
  Serial.println(distance);

  if (distance < SEUIL_CM) {
    arret();    delay(150);
    reculer();  delay(400);
    arret();    delay(150);

    pivoter();
    unsigned long debut = millis();
    while (lireDistanceCm() < SEUIL_CM && millis() - debut < 2000) {
      delay(50);
    }
    arret();    delay(150);
  } else {
    avancer();
  }
}