Differences

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

Link to this comparison view

pm:prj2021:alazar:chug [2021/05/31 13:12]
stefan.nedelcu1712
pm:prj2021:alazar:chug [2021/05/31 14:59] (current)
stefan.nedelcu1712
Line 20: Line 20:
 | Afisaj 4 digits - 7 segmente |  1  | | Afisaj 4 digits - 7 segmente |  1  |
 | Senzor greutate ​  ​| ​ 1  | | Senzor greutate ​  ​| ​ 1  |
-| Breadboard ​       |  1  |+| Breadboard ​mini   ​| ​ 1  | 
 +| Baterie 9V        ​| ​ 1  |
 | Rezistente ​       |     | | Rezistente ​       |     |
 | Fire              |     | | Fire              |     |
  
 +{{ :​pm:​prj2021:​alazar:​chug_schema_electrica.png?​300 |}}
  
-Device-ul se folosește de un afișaj led de 4 caractere pe 7 segmente și anod comun (nu l-am găsit în Tinkercad pt. a fi reprezentat pe schemă). Acesta ​foloseste ​13 pini: 7 pentru cele 7 segmente, 4 pentru a selecta pe care cifra se efectueaza ​scrierea ​si unul pentru alimentare.  +Device-ul se folosește de un afișaj led de 4 caractere pe 7 segmente și anod comun (nu l-am găsit în Tinkercad pt. a fi reprezentat pe schemă). ​ 
- Acesta ​este alimentat folosind o baterie de 9V prin pinul Arduino Vin (pentru o mobilitate mai mare-nu trebuie conectat în permanență la un PC). +   
 + Acesta ​folosește ​13 pini: 7 pentru cele 7 segmente, unul pentru punctul de dupa cifră, 4 pentru a selecta pe care cifră ​se efectuează ​scrierea ​și unul pentru alimentare. ​  
 +   
 + ​Proiectul ​este alimentat folosind o baterie de 9V prin pinul Arduino Vin (pentru o mobilitate mai mare-nu trebuie conectat în permanentă la un PC). 
 === Software Design=== === Software Design===
-Pe parcursul ​dezvoltarii ​proiectului am folosit Arduino IDE. + Pe parcursul ​dezvoltării ​proiectului am folosit Arduino IDE.  
-Am folosit ​doua biblioteci auxiliare:​ + Am folosit ​două biblioteci auxiliare:  
-  - "​TimerOne.h"​ - folosit pentru a crea o intrerupere ​ce ajuta la implementarea timerului +  -"​TimerOne.h"​-folosit pentru a crea o întrerupere ​ce ajută ​la implementarea timerului  
-  - "​SevenSegmentDisplay.h"​ - folosit pentru facilitarea ​afisarii ​caracterelor pe afisajul ​cu 7 segmente +  -"​SevenSegmentDisplay.h"​-folosit pentru facilitarea ​afișării ​caracterelor pe afișajul ​cu 7 segmente  
- +   
-Implementarea se foloseste ​de 2 variabile cheie: + ​Implementarea se folosește ​de 2 variabile cheie:  
-  * timer: acesta este incrementat la fiecare apel al intreruperii +   ​* timer: acesta este incrementat la fiecare apel al întreruperii ​ 
-  * isTimerRunning: ​retine daca timerul ​ruleaza ​sau este oprit +   ​* isTimerRunning: ​reține dacă timerul ​rulează ​sau este oprit  
-Timerul este implementat cu ajutorul bibliotecii "​TimerOne.h", ​alegand sa creez o intrerupere ​care se va apela la fiecare 0.01s - in care, daca timerul ar trebui ​sa ruleze, ​il incrementez+ ​Timerul este implementat cu ajutorul bibliotecii "​TimerOne.h", ​alegând să creez o întrerupere ​care se va apela la fiecare 0.01s-în care, dacă timerul ar trebui ​să ruleze, ​se incrementează.  
-In functia ​//setup()// se initializeaza toti pinii (cei 12 ai displayului ​ca output iar cel corespunzator ​senzorului de greutate ca INPUT_PULLUP). +   
-In functia ​//loop()// se determina ​valoarea care trebuie ​afisata ​pe timer (fiecare ​cifra a lui time drept char) si se afiseaza ​folosind biblioteca "​SevenSegmentDisplay.h"​. Aceasta se ocupa doar de afisajul ​unui singur digit (folosind ​functia ​timerDisplay.displayCharacter(c) - din acest motiv fiind nevoie de urmatoarele functii ​auxiliare:​ + În funcția ​//setup()// se inițializează toți pinii (cei 12 ai displayului ​că output iar cel corespunzător ​senzorului de greutate ​și a butonului de reset ca INPUT_PULLUP). ​    
-  * pickDigit(x) -> selecteaza ​cifra care trebuie ​afisata ​la un moment dat, setand ​pinul corespunzator ​ei pe LOW iar pe ceilalti ​pe HIGH +   
-  * clearLEDs() -> stinge toate LEDurile ​cifrei selectate la momentul respectiv, pentru a ma asigura ​ca nu exista ​conflicte ​in afisaj+ În funcția ​//loop()// se determină ​valoarea care trebuie ​afișată ​pe timer (fiecare ​cifră ​a lui time drept char) și se afișează ​folosind biblioteca "​SevenSegmentDisplay.h"​. Aceasta se ocupă ​doar de afișajul ​unui singur digit (folosind ​funcția ​timerDisplay.displayCharacter(c)-din acest motiv fiind nevoie de următoarele funcții ​auxiliare:  
-De asemenea, ​in loop, in functie ​de valoarea ​citita ​de pe senzor se seteaza ​variabila isTimerRunning (daca senzorul este apasat ​timerul ​sta pe loc, iar daca nu este apasat ​atunci timerul curge.)+   ​* pickDigit(x) -> selectează ​cifra care trebuie ​afișată ​la un moment dat (x putând lua valori între 1 și 4 reprezentând cifra aleasă)setând ​pinul corespunzător ​ei pe LOW iar pe ceilalți ​pe HIGH  
 +   ​* clearLEDs() -> stinge toate Ledurile ​cifrei selectate la momentul respectiv, pentru a mă asigura ​că nu există ​conflicte ​în afișaj.  
 + De asemenea, ​în loop, în funcție ​de valoarea ​citită ​de pe senzor se setează ​variabila isTimerRunning (dacă senzorul este apăsat ​timerul ​stă pe loc, iar dacă nu este apăsat ​atunci timerul curge). Când este apăsat butonul reset, variabilei timer îi este atribuită valoarea 0. 
  
  
 === Rezultate obtinute=== === Rezultate obtinute===
 +[[https://​youtu.be/​o7Cvynv5tXk | Video demonstrativ]]
 +
 +{{ :​pm:​prj2021:​alazar:​chug_demo1.jpg?​300 |}}
 +
 +{{ :​pm:​prj2021:​alazar:​chug_demo2.jpg?​300 |}}
 === Concluzii=== === Concluzii===
 +Proiectul a fost o experienta hands-on foarte buna, din care am invatat mai multe despre placuta Arduino si modul de lucru cu ea. Am aflat cum functioneaza un afisaj cu 7 segmente, mai ales cu mai multe caractere, experimentand in acelasi timp cu diverse biblioteci care faciliteaza lucrul cu acesta. De asemenea, am exersat mai mult lucrul cu intreruperi si timere.
 === Download=== === Download===
 +{{:​pm:​prj2021:​alazar:​chug_sursa.zip| Cod sursa}}
 === Jurnal=== === Jurnal===
 //​25.04.2021//​ : Alegere tema, completare introducere si descriere generala. //​25.04.2021//​ : Alegere tema, completare introducere si descriere generala.
 +
 +//​15.06.2021//​ : Cumpararea tuturor pieselor necesare.
 +
 +//​22.06.2021//​ : Montarea afisajului pe 7 segmente si a senzorului
 +
 +//​27.06.2021//​ : Implementarea algoritmului pentru timer
 +
 +//​30.06.2021//​ : Atasarea butonului de reset si a bateriei de 9V
 === Bibliografie/​Resurse=== === Bibliografie/​Resurse===
-[[https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​alazar/​chug?​do=export_pdf|Chug.pdf]]+  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab1-2021 | Laboratorul de timere/​intreruperi]] 
 +  * [[https://​github.com/​alikabeel/​Letters-and-Numbers-Seven-Segment-Display-Library | SevenSegmentDisplay.h]] 
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​alazar/​chug?​do=export_pdf|Chug.pdf]]
pm/prj2021/alazar/chug.1622455942.txt.gz · Last modified: 2021/05/31 13:12 by stefan.nedelcu1712
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