This shows you the differences between two versions of the page.
pm:prj2023:fstancu:roberttruta [2023/05/29 12:00] robert.truta [Software Design] |
pm:prj2023:fstancu:roberttruta [2023/05/29 13:07] (current) robert.truta [Resurse] |
||
---|---|---|---|
Line 4: | Line 4: | ||
Slot machine unde poti paria si castiga bile de sticla. Pentru a paria trebuie introdusa cel putin o bila si selectata una dintre cele 4 culori (rosu, verde, albastru sau mov). Una dintre culori va fi aleasa random si afisata pe un led ring. Daca culoarea aleasa este aceeasi cu cea pariata, sunt eliberate de 3 ori mai multe bile decat numarul introdus. Slot machine-ul emite si muzica cu ajutorul unui buzzer. | Slot machine unde poti paria si castiga bile de sticla. Pentru a paria trebuie introdusa cel putin o bila si selectata una dintre cele 4 culori (rosu, verde, albastru sau mov). Una dintre culori va fi aleasa random si afisata pe un led ring. Daca culoarea aleasa este aceeasi cu cea pariata, sunt eliberate de 3 ori mai multe bile decat numarul introdus. Slot machine-ul emite si muzica cu ajutorul unui buzzer. | ||
+ | |||
+ | Link demo: [[https://www.youtube.com/watch?v=2sDv7H4uAIs]] | ||
===== Componente ===== | ===== Componente ===== | ||
Line 78: | Line 80: | ||
Au fost atat de multe incat nici nu stiu de unde sa incep. | Au fost atat de multe incat nici nu stiu de unde sa incep. | ||
* Initial planul era sa folosesc poze cu fructe, in loc de culori, ca tematica a slot machine-ului. Ca atare am comandat un inel de leduri cu diametrul de 5.5 cm, insa din pacate am avut surpriza ca acesta sa nu aiba decat 3 cm. Drept urmare ledurile de pe inel sunt atat de mici si de apropiate incat nu s-ar fi inteles nimic daca as fi folosit poze cu fructe. | * Initial planul era sa folosesc poze cu fructe, in loc de culori, ca tematica a slot machine-ului. Ca atare am comandat un inel de leduri cu diametrul de 5.5 cm, insa din pacate am avut surpriza ca acesta sa nu aiba decat 3 cm. Drept urmare ledurile de pe inel sunt atat de mici si de apropiate incat nu s-ar fi inteles nimic daca as fi folosit poze cu fructe. | ||
- | * Primul servo motor comandat nu voia sa mearga decat intr-un singur sens. Dupa o ora de incercari la laborator alaturi de Florin, ne-am dat seama ca acesta tragea atat de mult curent din placuta incat aceasta se reseta. Am fost nevoie sa comand alt servo. | + | * Primul servo motor comandat nu voia sa mearga decat intr-un singur sens. Dupa o ora de incercari la laborator alaturi de Florin, ne-am dat seama ca acesta tragea atat de mult curent din placuta incat aceasta se reseta. Am fost nevoit sa comand alt servo. |
- | * Initial planul era ca melodia sa fie cantata non stop, indiferent daca sunt folosite delay-uri sau nu. Am incercat sa folosesc o intrerupere cu timer pentru a schimba nota muzicala o data la 200 ms, insa m-am lovit de eroare //multiple definition of _vector_11//. Dupa ceva cautari pe Google am aflat ca si biblioteca servo.h foloseste timerul 1, drept urmare existau 2 initializari in conflict. Un raspuns de pe stack overflow propune sa folosesti biblioteca PWMServo.h in loc de servo.h. Desi eroarea nu mai apare si programul ruleaza, rezultatul nu este unul satisfacator, servoul si buzzerul se influenteaza reciproc, ducand la un comportament nedefinit. Am zis, asta e, incerc cu timer 0. Surpriza! delay() si milis() folosesc timer 0. Poate timer 2? //multiple definition of _vector_7//, functia tune() foloseste timer 2. Dupa ore intregi de setat registrii am decis sa renunt la aceasta idee. In momentul actual melodia poate fi cantata cat timp nu se foloseste un delay. | + | * Initial planul era ca melodia sa fie cantata non stop, indiferent daca sunt folosite delay-uri sau nu. Am incercat sa folosesc o intrerupere cu timer pentru a schimba nota muzicala o data la 200 ms, insa m-am lovit de eroarea //multiple definition of _vector_11//. Dupa ceva cautari pe Google am aflat ca si biblioteca servo.h foloseste timerul 1, drept urmare existau 2 initializari in conflict. Un raspuns de pe StackOverflow propune sa folosesti biblioteca PWMServo.h in loc de servo.h. Desi eroarea nu mai apare si programul ruleaza, rezultatul nu este unul satisfacator, servo-ul si buzzer-ul se influenteaza reciproc, ducand la un comportament nedefinit. Am zis, asta e, incerc cu timer 0. Surpriza! delay() si millis() folosesc timer 0. Poate timer 2? //multiple definition of _vector_7//, functia tune() foloseste timer 2. Dupa ore intregi de setat registrii am decis sa renunt la aceasta idee. In momentul actual melodia poate fi cantata cat timp nu se foloseste un delay. |
- | * La propunerea lui Florin am vrut sa folosesc o melodie cu ritmuri orientale pentru slot machine. Buzzerul are nevoie de o frecventa ca input, iar dupa ceva cautari am gasit un script de python care converteste notele muzicale in frecvente. Pentru a obtine notele unei melodi am gasit un program [[https://www.lunaverus.com/]] care foloseste AI pentru a realiza acest lucru. Programul genereaza un fisier midi (.mid) si am folosit chatGPT pentru a extragele notele si durata lor. Desi parea ca detin toate piesele puzzel-ului rezultatul nu a fost unul de succes. Sunetul reprodus de buzzer era doar foarte vag asemanator cu originarul. Din ce am putut analiza, rezultatul prost se datoreaza faptului ca unele note sunt suprapuse in timp iar buzzerul poate reproduce doar una dintre ele. Dupa ce am renuntat si la aceasta tentativa, am folosit o melodie gata partitionata de pe github. | + | * La propunerea lui Florin am vrut sa folosesc o melodie cu ritmuri orientale pentru slot machine. Buzzerul are nevoie de o frecventa ca input, iar dupa ceva cautari am gasit un script de python care converteste notele muzicale in frecvente. Pentru a obtine notele unei melodii am gasit un program [[https://www.lunaverus.com/]] care foloseste AI pentru a realiza acest lucru. Programul genereaza un fisier midi (.mid) si am folosit chatGPT pentru a extragele notele si durata lor. Desi parea ca detin toate piesele puzzle-ului rezultatul nu a fost unul de succes. Sunetul reprodus de buzzer era doar foarte vag asemanator cu originalul. Din ce am putut analiza, rezultatul prost se datoreaza faptului ca unele note sunt suprapuse in timp iar buzzerul poate reproduce doar una dintre ele. Dupa ce am renuntat si la aceasta tentativa, am folosit o melodie gata partitionata de pe github. |
* La acestea se mai adauga si probleme de tensiuni parazite care insa au fost rezolvate usor cu tehnica de debounce si probleme de "infrastructura" cum ar fi: eu cu ce dau gauri? sau: de ce nu vrea sa se lipeasca superglue-ul? | * La acestea se mai adauga si probleme de tensiuni parazite care insa au fost rezolvate usor cu tehnica de debounce si probleme de "infrastructura" cum ar fi: eu cu ce dau gauri? sau: de ce nu vrea sa se lipeasca superglue-ul? | ||
Line 89: | Line 91: | ||
* Pot sa spun ca mi-a facut placere sa lucrez la acesta tema. Era si pacat ca dupa 4 ani de facultate sa nu raman macar cu un proiect palpabil, fizic. | * Pot sa spun ca mi-a facut placere sa lucrez la acesta tema. Era si pacat ca dupa 4 ani de facultate sa nu raman macar cu un proiect palpabil, fizic. | ||
* Materia de laborator am inteles-o cu adevarat doar dupa ce am inceput sa lucrez la proiect. | * Materia de laborator am inteles-o cu adevarat doar dupa ce am inceput sa lucrez la proiect. | ||
+ | * Arduino UNO este destul de limitat, doar 3 timere, doar 2 pini de intrerupere directa, memorie putina. | ||
* Volumul de munca a fost cu MULT peste cel estimat. | * Volumul de munca a fost cu MULT peste cel estimat. | ||
* Socoteala de acasa nu bate cu cea din targ | * Socoteala de acasa nu bate cu cea din targ | ||
Line 95: | Line 98: | ||
{{:pm:prj2023:fstancu:truta_robert_cod.zip|}} | {{:pm:prj2023:fstancu:truta_robert_cod.zip|}} | ||
+ | |||
+ | Link demo: [[https://www.youtube.com/watch?v=2sDv7H4uAIs]] | ||
Proiectul a fost inspirat dupa acest video [[https://www.youtube.com/watch?v=Gg9miQgFtiA]] | Proiectul a fost inspirat dupa acest video [[https://www.youtube.com/watch?v=Gg9miQgFtiA]] |