Differences

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

Link to this comparison view

pm:prj2023:drtranca:vending.machine [2023/05/25 23:42]
mdumitrascu1902 [Download]
pm:prj2023:drtranca:vending.machine [2023/05/26 13:51] (current)
mdumitrascu1902 [Software Design]
Line 33: Line 33:
  
 Listă de componente: Listă de componente:
-  * 4 motoare de curent continuu, cu reductor 1:70 care pun în mişcare 4 spirale ce au rolul de a împinge dozele de suc spre tava de unde clientul le poate ridica; de asemenea, când sensul de rotaţie al motoarelor se schimbă, acestea faciltează aprovizionarea ​tonomatului+  * 4 motoare de curent continuu, cu reductor 1:70 care pun în mişcare 4 spirale ce au rolul de a împinge dozele de suc spre tava de unde clientul le poate ridica; de asemenea, când sensul de rotaţie al motoarelor se schimbă, acestea faciltează aprovizionarea ​automatului
   * o tastatură 4x4 pentru selectarea uneia din cele 4 băuturi, dar şi pentru activarea opţiunii de aprovizionare   * o tastatură 4x4 pentru selectarea uneia din cele 4 băuturi, dar şi pentru activarea opţiunii de aprovizionare
   * un LCD pe care sunt afişate opţiunile alături de numerele corespunzătoare (voi utiliza protocolul I2C pentru a limita numărul de pini utilizați)   * un LCD pe care sunt afişate opţiunile alături de numerele corespunzătoare (voi utiliza protocolul I2C pentru a limita numărul de pini utilizați)
Line 65: Line 65:
 Surse şi funcţii implementate:​\\ ​ Surse şi funcţii implementate:​\\ ​
 La unul dintre microcontrollere sunt conectate LCD-ul, RFID Reader-ul și tastatura. Logica este implementată într-un switch case în funcție de tasta apăsată, deoarece fiecare determină altă acțiune în continuare.\\ ​ La unul dintre microcontrollere sunt conectate LCD-ul, RFID Reader-ul și tastatura. Logica este implementată într-un switch case în funcție de tasta apăsată, deoarece fiecare determină altă acțiune în continuare.\\ ​
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​switch_case_uc1.png?​nolink&​800x400 |}}
  * Mesajele ce sunt afișate pe LCD sunt structurate în funcții, apelându-se cea potrivită pentru fiecare scenariu de funcționare în parte (void LCDPrintChoices(),​ void LCDPrintChoiceError(),​ void LCDReset(), void LCDPrintNotEnoughMoney()).\\ ​  * Mesajele ce sunt afișate pe LCD sunt structurate în funcții, apelându-se cea potrivită pentru fiecare scenariu de funcționare în parte (void LCDPrintChoices(),​ void LCDPrintChoiceError(),​ void LCDReset(), void LCDPrintNotEnoughMoney()).\\ ​
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_functie_afisare.png?​nolink&​600x300 |}}\\ 
 +Instrucțiunile afișate sunt diferite în funcție de scenariul de funcționare (de exemplu, refill activat sau nu ^)
  * Citirea și verificarea cardului prin modulul RFID se fac într-o funcție separată (bool validateCard()).\\ ​  * Citirea și verificarea cardului prin modulul RFID se fac într-o funcție separată (bool validateCard()).\\ ​
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_citire_card.png?​nolink&​700x300 |}}\\ 
 +Pentru validarea cardului ^ se verifică dacă a fost apropiat în maxim 10 secunde, dacă se poate citi. \\ 
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_validare_card.png?​nolink&​400x100 |}} \\ 
 +Dacă verificările menționate anterior sunt trecute se citește ID-ul și se compară cu singurul ID care permite continuarea funcționării ^.
  * Trimiterea informațiilor despre motorul care trebuie să fie pus în mișcare și sensul lui de rotație, cât și actualizarea datelor precum stocul sau soldul de pe card se realizează printr-o funcție dedicată (void chooseAction(byte messageVend,​ byte messageRefill,​ int s, int p)) \\   * Trimiterea informațiilor despre motorul care trebuie să fie pus în mișcare și sensul lui de rotație, cât și actualizarea datelor precum stocul sau soldul de pe card se realizează printr-o funcție dedicată (void chooseAction(byte messageVend,​ byte messageRefill,​ int s, int p)) \\ 
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_trimitere_mesaj_seriala.png?​nolink&​700x300 |}} \\ 
 +În funcție de scenariul de funcționare,​ selectat anterior prin apăsarea sau nu a tastei 0, fie se transmite mesaj de refill, fie de vend către celălalt microcontroller,​ actualizându-se stocul de fiecare dată. ​
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_validare_plata.png?​nolink&​500x300 |}}\\ 
 +Dacă se livrează băutura se verifică soldul și dacă plata a putut fi efectuată ^.
 \\  \\ 
 Pentru microcontroller-ul ce controlează motoarele, întreaga logică este bazată pe un switch case în funcție de mesajul primit prin UART de la celălalt microcontroller (prin funcția chooseAction menționată mai sus). \\  Pentru microcontroller-ul ce controlează motoarele, întreaga logică este bazată pe un switch case în funcție de mesajul primit prin UART de la celălalt microcontroller (prin funcția chooseAction menționată mai sus). \\ 
- * Sensul de rotație este determinat de polarizarea bornelor motoarelor printr-funcție ​dedicată (void defineRotation(byte highTerminal,​ byte lowTerminal)).+{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​switch_case_uc2.png?​nolink&​800x400 |}} 
 +Se verifică dacă pe serială s-a primit un mesaj, iar dacă da, în funcție ​de acesta este apelată funcția ​void defineRotation(byte highTerminal,​ byte lowTerminal) ​cu anumiți parametri astfel încât să se activeze motorul potrivit în sensul de rotație corespunzător. 
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_activare_rotatie.png?​nolink&​700x100 |}}
  * Tot aici am implementat rutinele de tratare ale întreruperilor provenite de la buton și de la senzorul (fotorezistența) care semnalează căderea dozei.  * Tot aici am implementat rutinele de tratare ale întreruperilor provenite de la buton și de la senzorul (fotorezistența) care semnalează căderea dozei.
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_rutina_intrerupere.png?​nolink&​600x200 |}}
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
-Rezultatele obținute sunt satisfăcătoare, întrucât am reușit să implementez toate funcționalitățile enunțate inițial și, în urma testelor făcute, pot spune că cea mai mare provocare, anume să nu se mai blocheze produsele în interior mai ales după ce plata a fost făcută, a fost depășită.+Rezultatele obținute sunt foarte bune, întrucât am reușit să implementez toate funcționalitățile enunțate inițial și, în urma testelor făcute, pot spune că cea mai mare provocare, anume să nu se mai blocheze produsele în interior mai ales după ce plata a fost făcută, a fost depășită.
 ===== Concluzii ===== ===== Concluzii =====
 Automatul funcționează conform target-urilor setate inițial. Totuși, există și câteva îmbunătățiri ulterioare pe care le-aș putea aduce, precum:​\\ ​ Automatul funcționează conform target-urilor setate inițial. Totuși, există și câteva îmbunătățiri ulterioare pe care le-aș putea aduce, precum:​\\ ​
pm/prj2023/drtranca/vending.machine.1685047343.txt.gz · Last modified: 2023/05/25 23:42 by mdumitrascu1902
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