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 20:26]
victorita.cotoi
pm:prj2023:vstoica:marinela-cotoi [2023/05/29 10:47] (current)
victorita.cotoi
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 =====
  
-Pentru a simula începerea jocului la apăsarea butonului, am configurat o intrerupere,​ ce va întrerupe ​programul curent la sesizarea ​evenimentuluii.+Pentru a simula începerea jocului la apăsarea butonului, am configurat o intrerupere,​ ce va opri programul curent la sesizarea ​evenimentului.
 <code c> <code c>
 ISR(PCINT2_vect) { ISR(PCINT2_vect) {
 +  /* Pin change type of interrupt */
   if (!(PIND & (1 << PIND2))) {   if (!(PIND & (1 << PIND2))) {
     buttonPressed = true;     buttonPressed = true;
Line 49: Line 50:
  
 void setup() { void setup() {
-  /Configure interrupt using registers+  ​.... 
 +  ​/Configure interrupt using registers ​*/
   ​   ​
-  /input+  /input */
   DDRD &= ~(1 << DDD2);   DDRD &= ~(1 << DDD2);
-  /input pullup+  /input pullup ​*/
   PORTD |= (1 << PORTD2);   PORTD |= (1 << PORTD2);
   ​   ​
-  // +  /* Enable the pin change interrupt*/
   PCMSK2 |= (1 << PCINT18);   PCMSK2 |= (1 << PCINT18);
   PCICR |= (1 << PCIE2);   PCICR |= (1 << PCIE2);
   ​   ​
 +  /* Enable interrupts */
   sei();   sei();
 +  ....
 } }
  
Line 67: Line 71:
  
 Pentru display-ul de mesaje folosind afișajul LCD pe două rânduri, Pentru display-ul de mesaje folosind afișajul LCD pe două rânduri,
-am folosit biblioteca LiquidCrystal_I2C,​ inițializând lcd-ul astfel:+am folosit biblioteca ​**LiquidCrystal_I2C**, inițializând lcd-ul astfel:
 <code c> <code c>
  
 void setup() { void setup() {
 +  ...
   /* Initialize LCD screen */   /* Initialize LCD screen */
   lcd.init();   lcd.init();
Line 83: Line 88:
   lcd.setCursor(0,​1);​   lcd.setCursor(0,​1);​
   lcd.print("​button to start!"​);​   lcd.print("​button to start!"​);​
 +  ...
 } }
  
 </​code> ​ </​code> ​
 +
 +Ultima bibliotecă folosită este biblioteca **Servo**, cu ajutorul căreia am gestionat miscările servomotorului.
 +<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> ​
 +
 +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 ===== ===== Rezultate Obţinute =====
Line 93: Line 152:
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+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.
  
-<note warning>​ +===== Download ​=====
-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**. +
-</​note>​ +
- +
-===== Jurnal ​=====+
  
-<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.1685294791.txt.gz · Last modified: 2023/05/28 20:26 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