This shows you the differences between two versions of the page.
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> | ||