This is an old revision of the document!
Functionalitatea de baza a proiectului este detectia de obstacole in spatele, cat si in partile laterale ale masinutei. Aceasta va fi dotata cu un senzor cu ultrasunete, montat pe un suport, pentru a determina distanta fata de obiecte. Sasiul se poate controla printr-un senzor de captare a luminii infrarosii de la o telecomanda comuna (de televizor) si un motor driver L298N folosit pentru a pune in miscare cele 2 roti. Datorita rotii ajutatoare din fata (cea de a treia roata), masinuta se va putea si rotii. De asemenea, apasand un buton ales arbitrar de pe telecomanda, masinuta va intra in modul de parcare automata si se va deplasa cu spatele pana cand va detecta o coliziune, caz in care placuta Arduino va solicita oprirea motoarelor.
Odata ce circuitul masinutei este alimentat de la baterie, in setup() se vor initializa senzorul ultrasonic si de captare a luminii infrarosii, precum si pinii motoarelor DC care asteapta semnale de la telecomanda.
Pentru o organizare mai buna a logicii programului, am creat cateva functii ajutatoare:
bool detectCollision(); void controlMotors(int IN1_val, int IN2_val, int IN3_val, int IN4_val); void stopMotors();
bool detectCollision() { if (isRunning && (distance > 0 && distance <= 10) && !goFront) return true; return false; }
void controlMotors(int IN1_val, int IN2_val, int IN3_val, int IN4_val) { if (distance == 0 || distance > 10 || goFront) { digitalWrite(IN1, IN1_val); digitalWrite(IN2, IN2_val); digitalWrite(IN3, IN3_val); digitalWrite(IN4, IN4_val); isRunning = true; } }
void stopMotors() { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); }
► loop() ⇒ aici se verifica daca se detecteaza vreo coliziune si se trateaza semnalele de la telecomanda.
if (detectCollision()) { stopMotors(); isRunning = false; }
if (IrReceiver.decode()) { switch (IrReceiver.decodedIRData.decodedRawData) { case 3810328320: // Backwards ==> 'OK' BUTTON controlMotors(HIGH, LOW, LOW, HIGH); goFront = false; break; case 3877175040: // Go in front ==> '^' BUTTON controlMotors(LOW, HIGH, HIGH, LOW); goFront = true; break; case 4144561920: // Left ==> '<' BUTTON controlMotors(HIGH, LOW, HIGH, LOW); goFront = false; break; case 2774204160: // Right ==> '>' BUTTON controlMotors(LOW, HIGH, LOW, HIGH); goFront = false; break; case 3860463360: // STOP ==> '0' BUTTON stopMotors(); goFront = false; isRunning = false; } IrReceiver.resume(); // Enable receiving of the next value }
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.