Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:vstoica:alexandra.bogdan02 [2024/05/20 09:37]
alexandra.bogdan02
pm:prj2024:vstoica:alexandra.bogdan02 [2024/05/27 06:26] (current)
alexandra.bogdan02
Line 76: Line 76:
 ===== Software Design ===== ===== Software Design =====
  
 +Codul a fost scris în **Arduino IDE**.
 +
 +Am utilizat bibliotecile **"​Servo.h"​**,​ **"​Wire.h"​** și **"​LiquidCrystal_I2C.h"​** pentru controlul servomotorului,​ comunicație I2C și afișarea pe LCD.
 +
 +Am definit viteza motorului prin constanta //"​MOTOR_SPEED"//​.
 +
 +''#​define MOTOR_SPEED 250''​
 +
 +Următorul pas în dezvoltarea software a fost definirea pinilor pentru motoare (mot1, mot3, mot2, mot4), senzorii infraroșii (left, right) și pinul pentru senzorul de apă (waterSensorPin).
 +
 +Am inițializat obiectul Servo pentru controlul servomotorului și am afișat un mesaj de pornire pe LCD.
  
 <note tip> <note tip>
-Descrierea codului aplicaţiei ​(firmware): +void setup() { 
-  ​* mediu de dezvoltare ​(if any) (e.gAVR StudioCodeVisionAVR+  ​Serial.begin(9600)
-  ​* librării şsurse 3rd-party ​(e.gProcyon AVRlib+  myservo.attach(10); 
-  * algoritmi şstructuri ​pe care plănuiţi ​să le implementaţi +  delay(1000);​ 
-  * (etapa 3surse şi funcţii implementate+  myservo.write(90);​ 
 +  delay(1000);​ 
 +  myservo.write(0); 
 + 
 +  pinMode(waterSensorPinINPUT)
 + 
 +  ​pinMode(mot1,​ OUTPUT); 
 +  pinMode(mot3,​ OUTPUT); 
 +  pinMode(mot2,​ OUTPUT); 
 +  pinMode(mot4,​ OUTPUT); 
 + 
 +  pinMode(left,​ INPUT); 
 +  pinMode(right,​ INPUT); 
 + 
 +  // Initialize the LCD and print a welcome message 
 +  lcd.init();​ 
 +  lcd.backlight();​ 
 +  lcd.setCursor(0,​ 0); 
 +  lcd.print("​Hi! I'm Nelutu:​)"​);​ 
 +  delay(2000);​ 
 +  lcd.clear();​ 
 +
 +</​note>​ 
 + 
 +În bucla principală, am apelat ​ funcția //"​water()"//​ pentru a detecta apa șa afișa mesaje corespunzătoare pe LCD și se citesc datele de la senzorii infraroșii pentru a determina direcția de mers a robotului. 
 + 
 +<note tip> 
 +void loop() { 
 +  water(); 
 + 
 +  Left = digitalRead(left);​ 
 +  Right = digitalRead(right);​ 
 + 
 +  delay(20);​ 
 +  Serial.print("​Left:​ "); 
 +  Serial.print(Left); 
 +  ​delay(10);​ 
 +  Serial.print("​ Right: "); 
 +  Serial.println(Right);​ 
 + 
 +  if (Left == 0 && Right == 0)  
 +  { 
 +    Serial.println("​Chose front"​);​ 
 +    FRONT(); 
 +  } 
 + 
 +  else if (Left == 1 && Right == 1) { 
 +    Serial.println("​Chose stop"​);​ 
 +    STOP(); 
 +  } 
 + 
 +  else if (Left == 0 && Right == 1) { 
 +    Serial.println("​Chose left"​);​ 
 +    LEFT(); 
 +  } 
 + 
 +  else if (Right == 0 && Left == 1) { 
 +    Serial.println("​Chose right"​);​ 
 +    RIGHT(); 
 +  } 
 +
 +</​note>​ 
 + 
 +În funcția ​**"​water()"​** nu numai citesc valoarea senzorului de apă, dar și, dacă această valoare depășește un anumit prag, inițiez un set de acțiuni. Printre aceste acțiuni se numără afișarea unui mesaj pe ecranul LCD pentru a semnala începerea ploii (//"​Oh,​ no! Rain!"//​) și, de asemenea, ridicarea servomotorului ​care controlează umbrela, astfel încât robotul ​să fie protejat de ploaie. 
 + 
 +<note tip> 
 +void water() { 
 +  ​int sensorValue = analogRead(waterSensorPin);​ 
 +  delay(20);​ 
 +  Serial.print("​Water sensor :"); 
 +  Serial.println(sensorValue);​ 
 +  if (sensorValue > threshold) { 
 +    if (waterDetected == false) { 
 +      lcd.setCursor(0,​0);​ 
 +      lcd.print("​Oh,​ no! Rain!"​);​ 
 +      myservo.write(90);​ 
 +    } 
 +    waterDetected = true; 
 +  } else { 
 +    if (waterDetected == true) { 
 +      lcd.clear();​ 
 +      myservo.write(0);​ 
 +    } 
 +    waterDetected = false; 
 +  } 
 +
 + 
 +</​note>​ 
 + 
 +Funcțiile ​**"​FRONT()"**, **"​LEFT()"​**,​ **"​RIGHT()"​** ș**"​STOP()"​** sunt responsabile de controlul mișcării robotului. Ele primesc informații de la senzorii infraroșii pentru a determina dacă există obstacole în cale sau pentru a identifica direcția dorită de deplasare. În funcție de aceste informații, funcțiile controlează motoarele robotului pentru a-l face să meargă înainte, să vireze la stânga, să vireze la dreapta sau să oprească complet mișcarea. 
 + 
 +<note tip> 
 +void FRONT() { 
 +  analogWrite(mot1,​ MOTOR_SPEED);​ 
 +  analogWrite(mot3,​ MOTOR_SPEED);​ 
 +  analogWrite(mot2,​ MOTOR_SPEED);​ 
 +  analogWrite(mot4,​ MOTOR_SPEED);​ 
 +
 + 
 +void LEFT(void) { 
 + 
 +  analogWrite(mot1,​ MOTOR_SPEED);​ 
 +  analogWrite(mot3,​ MOTOR_SPEED);​ 
 +  analogWrite(mot2,​ 0); 
 +  analogWrite(mot4,​ 0); 
 +
 + 
 +void RIGHT(void) { 
 + 
 +  analogWrite(mot1,​ 0);  
 +  analogWrite(mot3,​ 0);  
 +  analogWrite(mot2,​ MOTOR_SPEED);​ 
 +  analogWrite(mot4,​ MOTOR_SPEED);​ 
 + 
 +
 + 
 +void STOP(void) { 
 + 
 +  analogWrite(mot1,​ 0); 
 +  analogWrite(mot3,​ 0); 
 +  analogWrite(mot2,​ 0); 
 +  analogWrite(mot4,​ 0); 
 +   
 +}
 </​note>​ </​note>​
  
Line 89: Line 223:
 La pornirea Gentleman Robo, pe ecran este afișat următorul mesaj: La pornirea Gentleman Robo, pe ecran este afișat următorul mesaj:
  
-{{robo_inceput.jpeg?​600x700}}+{{robo_inceput.jpeg?​500x700}}
  
 La detectarea apei, umbrela se ridică și pe ecran apare următorul mesaj: La detectarea apei, umbrela se ridică și pe ecran apare următorul mesaj:
Line 97: Line 231:
  
 ===== Concluzii ===== ===== Concluzii =====
 +
 +În concluzie, a fost o adevărată plăcere să lucrez la acest proiect, unde am avut oportunitatea de a combina cunoștințele de hardware cu cele de software și de a fi creativă în găsirea soluțiilor pentru controlul robotului. Integrarea senzorilor, a motorului și a servomotorului,​ împreună cu logica software pentru detectarea ploii și direcționarea mișcării, a fost o experiență minunată și edificatoare. Sper să mai am oportunitatea să lucrez la astfel de proiecte în viitor!
  
 ===== Download ===== ===== Download =====
  
-<note warning>​ +Arhiva conține schema electrică și codul scris în Arduino IDE.
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute ​în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+
  
-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**. +{{:pm:prj2024:vstoica:Bogdan_Alexandra_arhiva_pm.zip|}}
-</​note>​+
  
-===== Jurnal ===== 
  
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +**Link-uri utile** 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse ​Software** şi **Resurse Hardware**. + 
-</​note>​+[1] https://​www.youtube.com/​watch?​v=xVC0X_PE_XE 
 + 
 +[2] https://​www.youtube.com/​watch?​v=I7IFsQ4tQU8 
 + 
 +**Resurse** 
 + 
 +1. **Arduino Libraries** 
 + 
 +2**Servo Library Documentation** 
 + 
 +3. **LiquidCrystal_I2C Library Documentation** 
 + 
 +4. **Wire Library Documentation** 
 + 
 +5. **Datasheet L298N Motor Driver** 
 + 
 +6. **Datasheet senzor de apa** 
  
-<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ 
  
pm/prj2024/vstoica/alexandra.bogdan02.1716187024.txt.gz · Last modified: 2024/05/20 09:37 by alexandra.bogdan02
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0