This shows you the differences between two versions of the page.
pm:prj2021:alazar:chug [2021/05/31 01:39] 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:schema_electrica_chug.png?300|}} | + | {{ :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. | + | |
- | 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). | + | 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 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]] |