This is an old revision of the document!


Calculator de buzunar++

Nume: Negoiță Vlad-Andrei
Grupa: 331CA

Introducere

(acum mult, mult timp…) Eram la ora de fizică și, la o problemă destul de simplă, am ajuns la următoarea expresie de calculat:

$$ x = \frac{0.378 * 0.294 ^ 3 - \sqrt{0.764} * 0.245 ^ 2}{0.532 - 0.654}$$

După două încercări (evident nereușite) de a calcula, am tras concluzia că voi rămâne la calculul simbolic m(. Totuși, pentru când un rezultat numeric este important (de exemplu, poate fi interpretat mai departe), e nevoie de o metodă mai robustă decât a bate manual la calculator zeci de cifre. Pentru această situație am creat Calculatorul de buzunar++: un device simplu care, folosind PhotoMath, reduce semnificativ erorile umane în calculele numerice de rutină.

Descriere generală

Device-ul respectă următoarea secvență de pași:

  1. așteaptă primirea unui semnal pentru capturarea unei poze (ex. apăsarea unui buton)
  2. poza este împachetată și, folosing API-ul de la PhotoMath, este trimisă pentru a fi descifrată și, eventual, rezolvată
  3. rezultatul este primit și procesat, urmând afișarea pe display-ul LCD al device-ului

Hardware Design

Pentru realizarea acestui proiect, am achiziționat următoarele componente:

Schema electrică:

Software Design

Pentru acest proiect, am folosit Arduino IDE. Codul poate fi accesat la adresa https://github.com/VladNegoita/Calculator.

În continuare, va fi descrisă succint modul de funcționare al componentei software.

După realizarea conexiunilor fizice, display-ul funcționează aproape imediat întrucât am folosit o bibliotecă care ușurează semnificativ utilizarea acestuia: LiquidCrystal_I2C.

Pentru driverele camerei, am identificat o soluție implementata pe github: https://github.com/bitluni/ESP32CameraI2S (există și un videoclip explicativ pe youtube asociat).

Camera realizează poze de rezoluție destul de mică, nefiind tocmai satisfăcătoare în practică. Pentru a ajunge la această concluzie, am folosit un WebServer unde am încărcat pozele realizate de cameră periodic și am interogat folosind Postman.

Întrucât pozele sunt primite într-un format .bmp și .jpeg este necesar pentru utilizarea API-ului este nevoie de o conversie între aceste formate. Întrucât nu există suport oferit pentru o astfel de operație pentru microcontroller-ul ales, am decis ca un script de python să se ocupe de conversie și de apelul API-ului, întorcând rezultatul pe serială. Această pivotare nu deviază de la scopul inițial al proiectului, întrucât doar furnizează un intermediar (un potențial server pentru o aplicație reală a calculatorului).

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
  • librării şi surse 3rd-party (e.g. Procyon AVRlib)
  • algoritmi şi structuri pe care plănuiţi să le implementaţi
  • (etapa 3) surse şi funcţii implementate

Rezultate Obţinute

Proiectul e capabil sa recunoască cifre, iar în condiții ideale poate rezolva și ecuații foarte simple. Singura limitare este camera, ce poate face poze de o rezoluție și calitate îndoielnică.

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Proiectul este un PoC (proof of concept) și trebuie tratat ca atare. Am ajuns la concluzia că acest domeniu necesită multă răbdare și o planificare extrem de bună a resurselor. Pe lângă asta, documentația (incluzând datasheet-uri și resurse online) este extrem de limitată, asta fiind o problemă destul de mare în realizarea proiectului.

Jurnal

04.05 - Adăugarea introducerii, descrierii și a componentelor hardware ce vor fi utilizate

Bibliografie/Resurse

pm/prj2024/rrusu/vlad_andrei.negoita.1716794753.txt.gz · Last modified: 2024/05/27 10:25 by vlad_andrei.negoita
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