Differences

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

Link to this comparison view

pm:prj2022:agmocanu:distancegame [2022/05/25 21:46]
andrei.bolozan [Software Design]
pm:prj2022:agmocanu:distancegame [2022/05/27 22:47] (current)
andrei.bolozan [Software Design]
Line 7: Line 7:
 ===== Descriere generală ===== ===== Descriere generală =====
  
-{{mspaint_yYXcHJZ3qV.png?800}}+{{mspaint_aKfOL7oSMD.jpeg?700}}
  
 +Senzorul distanta trimite prin unul dintre cei 2 "​ochi"​ o raza. Pe celalalt ochi primeste acea raza trimisa mai devreme. Astfel Arduino-ul calculeaza timpul de propagare a razei. Si folosind timpul putem sa calculam distanta. Arduino-ul trimite un semnal la buzzer atunci cand este nevoie. Folosind pini definiti mai jos pentru LCD, Arduino-ul comunica cu acesta pentru a printa diferite mesaje.
 ===== Hardware Design ===== ===== Hardware Design =====
 * Lista cu componentele folosite: * Lista cu componentele folosite:
Line 32: Line 33:
 |LED Rosu|12| |LED Rosu|12|
 |LED Verde|13| |LED Verde|13|
 +
 +{{chrome_6GqHxz4T4S.jpeg?​800}}
 +
 +<note tip>
 +Deoarece in tinkerCAD nu exista Arduino Nano, Arduino-ul Uno prezentat in imaginea de mai sus este o reprezentare a Arduino-ului folosit de mine. Legaturile dintre pini sunt aceleasi.
 +</​note>​
 +
 ===== Software Design ===== ===== Software Design =====
  
Line 49: Line 57:
     * mainGame :Initial numarul de secunde alocate primului nivel sunt 15. Cu ajutorul unui for inceracm sa imitam trecerea celor 15 secunde(forul itereaza de la 0 pana la t*10 si de cate ori iterezeaza aplica un delay de 100 de secunde). In acest for citim distanta jucatorului fata de aparat si o afisam alaturi de distanta pe care trb sa o indeplineasca( aceasta este alesa la intamplare la inceputul jocului). Cand se iese din for inseamna ca s-a terminat jocu si verificam ce la ce distanta se afla jucatorul. Daca acesta a reusit sa se plaseze la distanta corecta(+- o variatie deltaDist) atunci afisam un mesaj “Good Job!” pornim buzzer ul si ledul verde pentru 1 secunda si trecem la urmatorul nivel(incrementam score si decrementam timpul de asteptare). Daca acesta nu a reusit atunci aratam pe LCD mesajul “Fail ☹” arata m scorul current pornim buzzerul si ledul rosu pentru 1 secunda si trecem la scena mainGame. In cazul in care jucatorul este bun si ajuns la un nivel in care timpul de reactie este mai mic fata de 7 atunci se afiseaza mesajul “ You win” si se aprind ledurile alternativ si se trece la scena cu mainMenu.\\     * mainGame :Initial numarul de secunde alocate primului nivel sunt 15. Cu ajutorul unui for inceracm sa imitam trecerea celor 15 secunde(forul itereaza de la 0 pana la t*10 si de cate ori iterezeaza aplica un delay de 100 de secunde). In acest for citim distanta jucatorului fata de aparat si o afisam alaturi de distanta pe care trb sa o indeplineasca( aceasta este alesa la intamplare la inceputul jocului). Cand se iese din for inseamna ca s-a terminat jocu si verificam ce la ce distanta se afla jucatorul. Daca acesta a reusit sa se plaseze la distanta corecta(+- o variatie deltaDist) atunci afisam un mesaj “Good Job!” pornim buzzer ul si ledul verde pentru 1 secunda si trecem la urmatorul nivel(incrementam score si decrementam timpul de asteptare). Daca acesta nu a reusit atunci aratam pe LCD mesajul “Fail ☹” arata m scorul current pornim buzzerul si ledul rosu pentru 1 secunda si trecem la scena mainGame. In cazul in care jucatorul este bun si ajuns la un nivel in care timpul de reactie este mai mic fata de 7 atunci se afiseaza mesajul “ You win” si se aprind ledurile alternativ si se trece la scena cu mainMenu.\\
  
-* Codul: +*Codul: 
- +    *Se afla in sectiunea de Download a paginii.
-<file cpp DistanceGame.ino>​ +
-#include <​LiquidCrystal.h>​ +
- +
-// initialize the library by associating any needed LCD interface pin +
-// with the arduino pin number it is connected to +
-const int rs = 11, en = 10, d4 = 5, d5 = 4, d6 = 3, d7 = 2; +
-const int echo = 8, trig = 7, but = 6; +
-const int buz = 9; +
-const int rLED = 12, gLED = 13; +
-LiquidCrystal lcd(rs, en, d4, d5, d6, d7); +
- +
-int sceneManager = 0; +
-int t = 15; +
-long lowDist = 20, highDist = 40; +
-long deltaDist = 3; +
-int score = 0; +
- +
-void setup() { +
-  Serial.begin(9600);​ +
-  lcd.begin(16,​ 2); +
-   +
-  pinMode(but,​ INPUT); +
-  pinMode(buz,​ OUTPUT); +
-  pinMode(rLED,​ OUTPUT); +
-  pinMode(gLED,​ OUTPUT); +
- +
-  digitalWrite(rLED,​ LOW); +
-  digitalWrite(gLED,​ LOW); +
-+
- +
-void loop(){ +
-   ​switchScene();​ +
-+
- +
-void switchScene(){ +
-  switch(sceneManager){ +
-    ​case 0: +
-      openingFrame();​ +
-      break; +
-    case 1: +
-      mainMenu();​ +
-      break; +
-    case 2: +
-      mainGame();​ +
-      break; +
-    default: +
-      lcd.clear();​ +
-      break; +
-  } +
-+
- +
-void openingFrame(){ +
-  lcd.clear();​ +
-  lcd.setCursor(0,​ 0); +
-  lcd.print("​Distance game!"​);​ +
-  delay(2000);​ +
-  sceneManager = 1; +
-+
- +
-void mainMenu(){ +
-  lcd.clear();​ +
-  lcd.setCursor(0,​ 0); +
-  lcd.print("​Match the dist!"​);​ +
-  lcd.setCursor(0,​ 1); +
-  lcd.print("​But to start"​);​ +
-  Serial.println(digitalRead(but));​ +
-  if(digitalRead(but)){ +
-    sceneManager = 2; +
-    delay(200);​ +
-  } +
-  delay(500);​ +
-+
- +
-void mainGame(){ +
-  int localT = t; +
-  score = 0; +
-  while(1){ +
-    long trigDist = newrandom(lowDist,​ highDist);​ +
-    long dist = -1; +
-   ​for(int i = 0;i <= localT ​10;i++){ +
-     ​delay(100);​ +
-     lcd.clear(); +
-     ​dist ​ = readDistanceSenzorData(trig,​ echo); +
-     ​lcd.setCursor(0,​ 0); +
-     ​lcd.print("​Your dist:"​);​lcd.print(dist);​lcd.print("​ cm"​);​ +
-     ​lcd.setCursor(0,​ 1); +
-     ​lcd.print("​Thr dist:"​);​lcd.print(trigDist);​lcd.print("​ cm"​);​ +
-     ​Serial.println(digitalRead(but));​ +
-      +
-   } +
-   ​if((trigDist - deltaDist <= dist) && (dist < trigDist + deltaDist)){ +
-    lcd.clear();​ +
-    lcd.setCursor(0,​ 0); +
-    lcd.print("​Good job!"​);​ +
-    tone(buz, 1000); +
-    digitalWrite(gLED,​ HIGH); +
-    score++; +
-    localT -= 2; +
-    delay(1000);​ +
-    noTone(buz);​ +
-    digitalWrite(gLED,​ LOW); +
-    if(t <= 7){ +
-      lcd.clear();​ +
-      lcd.setCursor(0,​ 0); +
-      lcd.print("​You win"​);​ +
-      lcd.setCursor(0,​ 1); +
-      lcd.print("​Score:​ "); lcd.print(score);​ +
-      for(int i = 0;i < 3;i++){ +
-        digitalWrite(rLED,​ HIGH); +
-        digitalWrite(gLED,​ LOW); +
-        delay(250);​ +
-        digitalWrite(rLED,​ LOW); +
-        digitalWrite(gLED,​ HIGH); +
-        delay(250);​ +
-      } +
-      digitalWrite(rLED,​ LOW); +
-      digitalWrite(gLED,​ LOW); +
-      sceneManager = 1; +
-      break; +
-    } +
-   } else { +
-    lcd.clear();​ +
-    lcd.setCursor(0,​ 0); +
-    lcd.print("​Fail :​("​);​ +
-    lcd.setCursor(0,​ 1); +
-    lcd.print("​Score:​ "); lcd.print(score);​ +
-    sceneManager = 1; +
-    digitalWrite(rLED,​ HIGH); +
-    tone(buz, 500); +
-    delay(1000);​ +
-    noTone(buz);​ +
-    digitalWrite(rLED,​ LOW); +
-    break; +
-   } +
-  } +
-+
- +
-long readDistanceSenzorData(int ping, int echo){ +
-   long duration, inches, cm, distance; +
-   ​pinMode(ping,​ OUTPUT); +
-   ​digitalWrite(ping,​ LOW); +
-   ​delayMicroseconds(2);​ +
-   ​digitalWrite(ping,​ HIGH); +
-   ​delayMicroseconds(10);​ +
-   ​digitalWrite(ping,​ LOW); +
-   ​pinMode(echo,​ INPUT); +
-   ​duration = pulseIn(echo,​ HIGH); +
-   ​return duration / 29 / 2; +
-+
- +
-unsigned long newrandom(unsigned long howsmall, unsigned long howbig) +
-+
-  return howsmall + random() % (howbig - howsmall);​ +
-+
- +
-</​file>​+
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
Line 212: Line 64:
 In urma acestui proiect am obtinut un joc competitiv care se poate juca singur sau cu mai multi. Am invatat cum sa lipesc diferite fire cu ciocanul de lipit. In urma acestui proiect am obtinut un joc competitiv care se poate juca singur sau cu mai multi. Am invatat cum sa lipesc diferite fire cu ciocanul de lipit.
  
-===== Concluzii =====+{{Distance_Game_poza1.jpeg?​350}} 
 +{{Distance_Game_poza2.jpeg?​350}}
  
 ===== Download ===== ===== Download =====
  
-<note warning> +Repo github: 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+https://github.com/​AndreiSlaShh/​Distance_Game_v2
  
-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> 
-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
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**+ - Senzor distanta : https://​create.arduino.cc/​projecthub/​abdularbi17/​ultrasonic-sensor-hc-sr04-with-arduino-tutorial-327ff6 
-</note>+ - Buzzer : https://​www.ardumotive.com/​how-to-use-a-buzzer-en.html 
 + - LCD:​https://​core-electronics.com.au/​guides/​use-lcd-arduino-uno/#:​~:​text=Insert%20your%20LCD%20screen%20into,ground%20your%20Backlight%20and%20LCD
 + - Buton:​https:​//​create.arduino.cc/​projecthub/​muhammad-aqib/​arduino-button-tutorial-using-arduino-digitalread-function-08adb5
  
 <​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/prj2022/agmocanu/distancegame.1653504404.txt.gz · Last modified: 2022/05/25 21:46 by andrei.bolozan
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