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.
Mazal ma 3andek Mark I dyalek? Sawweb wahed dyalek f 3D w khtar lwanek.
Personnaliser Mark I dyali ← Centre d'apprentissageKifach 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();
}
}