This shows you the differences between two versions of the page.
pm:prj2023:amocanu:cereal-sorter [2023/05/05 14:33] robert.pandele0112 |
pm:prj2023:amocanu:cereal-sorter [2023/05/26 13:24] (current) robert.pandele0112 [Jurnal] |
||
---|---|---|---|
Line 7: | Line 7: | ||
* care este scopul lui -> scenariu: pofticios amator de cereale cu lapte are un brand preferat de cereale care include două tipuri de cereale diferite, însă beneficiarul ipotetic are o preferință vis-a-vis de cele două tipuri diferite de cereale, iar producătorul de cereale nu are un sub-brand care să aibă doar cerealele de tipul preferat de beneficiar, astfel Cereal Sorter™ vine în sprijinul nostru pentru a ne bucura de tipul preferat de cereale "hassle-free" | * care este scopul lui -> scenariu: pofticios amator de cereale cu lapte are un brand preferat de cereale care include două tipuri de cereale diferite, însă beneficiarul ipotetic are o preferință vis-a-vis de cele două tipuri diferite de cereale, iar producătorul de cereale nu are un sub-brand care să aibă doar cerealele de tipul preferat de beneficiar, astfel Cereal Sorter™ vine în sprijinul nostru pentru a ne bucura de tipul preferat de cereale "hassle-free" | ||
* care a fost ideea de la care aţi pornit: https://experiments.withgoogle.com/tiny-sorter/view - voi încerca să recreez comportamentul proiectului de aici, bazându-mă pe rezultatul lor final | * care a fost ideea de la care aţi pornit: https://experiments.withgoogle.com/tiny-sorter/view - voi încerca să recreez comportamentul proiectului de aici, bazându-mă pe rezultatul lor final | ||
- | * de ce credeţi că este util pentru alţii şi pentru voi: utilitatea proiectului pentru consumatorii de cereale mofturosi este prezentată mai sus, iar în ceea ce mă privește pe mine, utilitatea proiectului va constă în faptul că mă va ajută să mă familiarizez cu programarea folosind un microcontroller, și, de asemenea, cu tehnica dezvoltării unui model de machine learning care va fi capabil să clasifice obiecte în două categorii | + | * de ce credeţi că este util pentru alţii şi pentru voi: utilitatea proiectului pentru consumatorii de cereale mofturoși este prezentată mai sus, iar în ceea ce mă privește pe mine, utilitatea proiectului va consta în faptul că mă va ajută să mă familiarizez cu programarea folosind un microcontroller, și, de asemenea, cu tehnica dezvoltării unui model de machine learning care va fi capabil să clasifice obiecte în două categorii |
</note> | </note> | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
Line 25: | Line 25: | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | <note tip> | + | Listă piese: |
- | Aici puneţi tot ce ţine de hardware design: | + | * Arduino Uno R3 ATmega328P |
- | * listă de piese | + | * Motor Servo SG90 9g |
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | * Ecran LCD 1602 IIC/I2C |
- | * diagrame de semnal | + | * Fire de legătură |
- | * rezultatele simulării | + | |
- | </note> | + | {{:pm:prj2023:amocanu:pandele_robert_schema_electrica.png?600|}} |
+ | Întrucât în momentul în care am încercat să testez simultan servomotorul și lcd-ul i2c (individual funcționa fiecare) arduino-ul uno a părut că și-a dat duhul pentru câteva ore, m-am speriat, așa că am ales să folosesc un alt laborator în loc de i2c pentru minimul de 3 laboratoare, și anume întreruperi. Astfel acum folosesc laboratorul de comunicare serială, laboratorul de pwm pentru control servomotor, și laboratorul de întreruperi. | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Descriere implementare cod arduino: | ||
+ | (https://github.com/robpan38/cereal-sorter/blob/main/arduino/CaineleManancaSalam/CaineleManancaSalam.ino) | ||
- | <note tip> | + | * folosesc 3 laboratoare: comunicare serială, pwm, întreruperi |
- | Descrierea codului aplicaţiei (firmware): | + | * în partea de setup: configurez comunicarea serială la 9600 baud rate, activez regiștrii necesari folosirii întreruperii pe pinul PCINT18, link-uiesc pinul 9 PWM de servomotor |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * in partea de loop: primesc un întreg prin comunicare serială de la modulul python care rulează modelul (salvat în variabilă globală cereal_type), scriu HIGH pe pin-ul responsabil de întreruperea PCINT, și apoi flow-ul execuției se mută în întrerupere unde se verifică ce valoare are cereal_type, mutându-se servomotorul în direcția corespunzătoare |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | Descriere implementare cod python: |
- | * (etapa 3) surse şi funcţii implementate | + | (https://github.com/robpan38/cereal-sorter/blob/main/model/cereal_app.py) |
- | </note> | + | |
+ | * stabilire comunicare cu arduino la baud rate 9600 | ||
+ | * încărcare a modelului generat folosind TeachableMachine de la google | ||
+ | * deschidere cameră pentru capturi de imagine | ||
+ | * inițializare un array de dimensiune 10 unde voi stoca 1 în urmă unui guess cu probabilitate mare pentru o cereală cu cacao, și 0 în urmă unui guess cu probabilitate mare pentru o cereală cu vanilie | ||
+ | * în momentul în care avem 10 1-uri consecutive (10 predicții consecutive pentru o cereală cu cacao) trimitem o rafală de 100 de 1-uri serial către arduino pentru a semnala direcția în care trebuie să se întoarcă servomotorul; similar pentru cazul cu 10 0-uri consecutive | ||
+ | * pentru fiecare imagine capturată de camera video, apelăm funcția de predicție a modelului care va încerca să clasifice cereală din dreptul camerei video a laptopului într-o categorie, odată terminată această operație punem în results un 1 sau un 0 în funcție de rezultatul predictiei | ||
+ | * când results ajunge să aibă 10 elemente, el este trunchiat din nou la 0 elemente | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Demo final: |
+ | https://drive.google.com/file/d/1BRRGrlAh6rWj1SXUH9P5lncnhTlw6VIb/view?usp=sharing | ||
</note> | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | Consider că proiectul a fost o experiență de învățare importantă pentru că mi-a dat ocazia să văd cum pot îmbină concret partea de hardware și partea de software. M-a scos cu siguranță din zona de confort, nu doar pentru că am folosit lucruri cu care nu am mai interacționat până acum, ci și din perspectiva deadline-urilor pe care a trebuit să le respect, fiind un bun exercițiu pentru viitoarea mea carieră de programator. |
- | + | ||
- | <note warning> | + | |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | + | ||
- | 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> | + | |
+ | Mențiune specială: mulțumesc mamei mele că m-a ajutat să lipesc cu scoci servomotorul de suportul lui de carton, mulțumesc arduino uno că nu a crăpat definitiv când credeam că l-am pierdut în cazul testului nereușit cu lcd-ul i2c, și mulțumesc și domnului Adrian Mocanu pentru instruirea pe care ne-a dat-o în cadrul laboratorului. | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | * 5/5/2023 - 2:46PM: realizare documentație inițială + comandă piese electronice |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 14/5/2023 - 6:08PM: lipit carton + atașare servomotor + testare servomotor + testare comunicare serială dintre un modul python și arduino (vezi secțiunea media pentru fotografii + video) |
- | </note> | + | * 14/5/2023 - 7:52PM: am folosit https://teachablemachine.withgoogle.com/ pentru a-mi crea un model preantrenat care să detecteze dacă zâmbesc sau dacă am gură deschisă fiindcă am vrut să testez cum se integrează rularea modelului cu comunicarea serială, astfel servomotorul merge către stânga când am gură deschisă, iar dacă zâmbesc acesta o ia către dreapta + demo în secțiunea media |
+ | * 15/5/2023 - 8:27pm: am actualizat codul de arduino că să handle-uiesc input-ul serial folosind întreruperi și acum am 3 laburi folosite în proiect; am adăugat un model preantrenat pe cereale cu lapte nesquick mix și am făcut un mic demo că să arăt cum se prezintă dansul (check github for the new commit, check media for the new demo) | ||
+ | * 26/5/2023 - 1:21pm: am adăugat o schemă hardware orientativă (nu reprezintă complet realitatea pentru că mai am suportul de carton diy), am adăugat link-uri specifice către modulele de cod folosite în rezolvarea proiectului și am documentat funcționalitatea generală a fiecăruia, am completat secțiunea de rezultate cu link către demo, am completat secțiunea de concluzii, și am adăugat pe drive-ul de media un remix al demo-ului care îmi va câștigă punctele pentru fun details de la pm fair; god bless jesus christ să iau nota mare | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | * media: https://drive.google.com/drive/folders/1XYHas2YILOZhZ9IY-aBplDBb3Iek7Eyg?usp=sharing |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * github: https://github.com/robpan38/cereal-sorter |
- | </note> | + | * inspirație: https://experiments.withgoogle.com/tiny-sorter/view |
<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> | ||