Differences

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

Link to this comparison view

pm:prj2023:vstoica:marinela-cotoi [2023/05/28 19:17]
victorita.cotoi
pm:prj2023:vstoica:marinela-cotoi [2023/05/29 10:47] (current)
victorita.cotoi
Line 21: Line 21:
 {{:​pm:​prj2023:​vstoica:​86f708dc-0846-4423-9a68-00f770b18258.png?​500|}} {{:​pm:​prj2023:​vstoica:​86f708dc-0846-4423-9a68-00f770b18258.png?​500|}}
  
-==== Hardware design ====+===== Hardware design ​=====
  
 === Componente hardware === === Componente hardware ===
Line 36: Line 36:
  
 === Schema electrică === === Schema electrică ===
-{{:​pm:​prj2023:​vstoica:​schema-electrica.png?​550|}}+{{:​pm:​prj2023:​vstoica:​schema-electrica.png?​600|}}
  
-==== Software design ====+===== Software design ​=====
  
-Mediu de dezvoltare: **Arduino IDE**+Pentru a simula începerea jocului la apăsarea butonului, am configurat o intrerupere,​ ce va opri programul curent la sesizarea evenimentului. 
 +<code c> 
 +ISR(PCINT2_vect) { 
 +  /Pin change type of interrupt ​*
 +  if (!(PIND & (1 << PIND2))) { 
 +    buttonPressed = true; 
 +  } 
 +}
  
-Librării folosite: ​ +void setup() { 
-  * **LiquidCrystal_I2C**, pentru gestionarea ecranului LCD cu modul I2C și afișarea de mesaje ​ +  ​.... 
-  * **Servo**, pentru gestionarea mișcării servo-motorului+  /Configure interrupt using registers ​*
 +   
 +  /input */ 
 +  ​DDRD &= ~(1 << DDD2); 
 +  /input pullup ​*
 +  PORTD |= (1 << PORTD2); 
 +   
 +  /Enable the pin change interrupt*
 +  PCMSK2 |= (1 << PCINT18); 
 +  PCICR |= (1 << PCIE2); 
 +   
 +  /Enable interrupts */ 
 +  sei(); 
 +  .... 
 +}
  
-===== Rezultate Obţinute =====+</​code> ​
  
-<note tip> 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. 
-</​note>​ 
  
-===== Concluzii =====+Pentru display-ul de mesaje folosind afișajul LCD pe două rânduri, 
 +am folosit biblioteca **LiquidCrystal_I2C**,​ inițializând lcd-ul astfel: 
 +<code c>
  
-===== Download =====+void setup() { 
 +  ... 
 +  /* Initialize LCD screen */ 
 +  lcd.init();​ 
 +  /* Clear content on the screen */ 
 +  lcd.clear(); ​         
 +  /* Turn on backlight */ 
 +  lcd.backlight();​ 
 +   
 +  /* Setup initial message on lcd */ 
 +  lcd.setCursor(2,​0);​ 
 +  lcd.print("​Press the red"​);​ 
 +  lcd.setCursor(0,​1);​ 
 +  lcd.print("​button to start!"​);​ 
 +  ... 
 +}
  
-<note warning> +</code
-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**. +Ultima bibliotecă folosită este biblioteca ​**Servo**, cu ajutorul ​reia am gestionat miscările servomotorului. 
-</note>+<code c>  
 +void setup() { 
 +  /Initial servomotor configuration ​*
 +   
 +   /Attach the servomotor to the object ​*/   
 +  servo.attach(servoPin);​ 
 +  /Set the servomotor position to the unpressed angle value */  
 +  servo.write(unpress_angle);​ 
 +} 
 +</code
  
-===== Jurnal ​=====+Flow-ul programului final arată astfel: 
 +<code c>  
 +void loop() { 
 +  /* Print fotoresistor'​s value */ 
 +  Serial.println(analogRead(A0));​ 
 +  Serial.println("​\n"​);​ 
 + 
 +  /* Check if the pushbutton is pressed. If it is, set the game  
 +  as '​Playing'​ on the LCD screen*/ ​                                                                                                                          
 +  if (buttonPressed && !playing) { 
 +    playing ​true; 
 +    buttonPressed ​false; 
 + 
 +    /* Start the game */ 
 +    servo.write(press_angle);​ 
 +    delay(100);​ 
 + 
 +    /* Clear LCD and show text */ 
 +    lcd.clear();​ 
 +    lcd.setCursor(2,​0);​ 
 +    lcd.print("​Playing.. "); 
 +  } 
 + 
 +  /* If the game has started */ 
 +  if (playing ​== true) {    
 +    servo.write(unpress_angle);​ 
 +    delay(10);​ 
 +     
 +    /* If we catch an obstacle */ 
 +    if(analogRead(A0)<​ threshold) 
 +    { 
 +       ​servo.write(press_angle);​ 
 +       /* Waits 100ms for the servo to reach the position */ 
 +       ​delay(100); ​                   
 +    } 
 +  }                      
 +
 +</​code>​  
 + 
 +Fiecare apelare de funcție servo.write(),​ cu valoarea press_angle,​ este echivalentului apăsării fizice, în timp real, a butonului **Space** de pe tastatura laptopului, servo-motorul fiind lipit de acesta, declanșând astfel o săritură a dinozaurului în joc, după cum se poate vedea în video-ul atașat mai jos. 
 + 
 +===== Rezultate Obţinute ===== 
 +<​html><​iframe width="​600"​ height="​350"​ src="​https://​www.youtube.com/​embed/​Uztkw54-Vng"​ title="​YouTube video player"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture;​ web-share"​ allowfullscreen></​iframe></​html>​ 
 + 
 + 
 +===== Concluzii ===== 
 + 
 +Proiectul a reprezentat pentru mine o primă interacțiune independentă cu hardware-ul,​ cu piese fizice, în afara laboratorului și m-a ajutat să înțeleg cum să le configurez și cum interacționează unele cu altele, încorporând mai multe concepte învățate la PM în acest an. 
 +Mi s-a părut distractiv și nu foarte dificil să automatizez un joc real în această formă și datorită lui, am realizat câte lucruri faine putem face cu 2-3 componente și o placuță Arduino. 
 + 
 +===== Download ​=====
  
-<note tip> +{{:​pm:​prj2023:​vstoica:​proiectpm2023.zip|}}
-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>​ +  * https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab2-2023 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  * https://​docs.arduino.cc/​built-in-examples/​digital/​Button 
-</note>+  ​https://​docs.arduino.cc/​learn/​electronics/​servo-motors 
 +  * https://​www.instructables.com/​How-to-use-a-photoresistor-or-photocell-Arduino-Tu/
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2023/vstoica/marinela-cotoi.1685290666.txt.gz · Last modified: 2023/05/28 19:17 by victorita.cotoi
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