Rosu Andrei Cristian Pd 2017 [627537]

UNIVERSITATEA „DUN ĂREA DE JOS” DIN GALA ȚI
FACULTATEA DE AUTOMATIC Ă, CALCULATOARE, INGINERIE
ELECTRIC Ă ȘI ELECTRONIC Ă

Str. Științei Nr. 2, cod po ștal 800146, Gala ți, România, tel/fax: +0236 470 905, e-mail: [anonimizat], web:  www.aciee.ugal.ro
SPECIALIZAREA: AUTOMATICĂ ȘI INFORMATICĂ APLICATĂ

STUDIUL ȘI PROIECTAREA UNUI SISTEM DE
SCANERE 3D

Îndrumător proiect, Șl.Dr.Ing. Arthur‐Bogdan CODREȘ
A b s o l v e n t ,
Andrei‐Cristian ROȘU

Galați
2017

Rezumat
În această lucrare se va prezenta proiectarea unui sistem de sc anare 3D și studiul
acestuia. Un scaner 3D este un sistem ce analizează un obiect r eal sau adună informații
ce se pot folosi pentru a‐l digitaliza. Există mai multe tipuri de scanere tridimensionale
și diferite tehnologii pentru a l e proiecta, fiecare cu avantaj e și dezavantaje.
Această lucrarea cuprinde proiectarea acestui sistem, bazat pe un senzor de
distanță infraroșu ce măsoară di stanța dintre senzorul propriu‐ zis și obiectul dorit a fi
scanat și returnarea datelor pe un card de memorie. Aceste date vor fi procesate cu
ajutorul softului Matlab ce v‐a returna modelul 3D al obiectulu i.
Componentele electronice utilizate sunt: un microcontroler, dou ă motoare pas cu
pas, două drivere pentru a controla cele două motoare, un citit or de carduri de memorie
și un senzor de distanță infraroșu.
Unul din motoare este utilizat la rotirea obiectului 360 de gra de, iar al doilea este
folosit pentru a deplasa senzorul pe verticală. Principiul de f uncționare a scanerului
este: Senzorul începe să trimită valori către unitatea de stoca re, salvând‐ule într‐un
fișier text în timp ce obiectul se rotește. După ce acesta face o rotire completă, în fișier
se trece o valoare oarecare (e xemplu: 12345) Aceasta va fi util izată mai târziu la
procesarea modelului 3D) apoi senzorul se va deplasa pe vertica la cu 1mm, procesul
reluându‐se.
Pentru a procesa datele obținute se utilizează softul Matlab. D upă ce se impun
anumite restricții în programul de procesare, acesta preia date le din fișierul aflat în
unitatea de stocare, căutând valoarea “12345”. Această valoare marchează finalul unei
rotații complete a obiectului. Cu ajutorul acestei valori se va crea o matrice unde fiecare
rând este delimitată de această valoare. După ce matricea este generată, aceasta este
așezată 360 de grade în ju rul unui punct definit.
În primele teste rezultatul nu a fost conform așteptărilor, for ma modelului obținut
nu respecta în totalitate forma obiectului scanat. Astfel, prin calibrarea senzorului
infraroșu cu ajutorul unei regresii polinomiale de gradul 3 și făcând media a 100 de
citiri diferențele au fost notabile.

CUPRINS

INTRODUCERE ………………………………………………………………………………………………………………. … 1 
CAPITOLUL 1. STADIUL ACTUAL AL SISTEMELOR DE SCANARE 3D ………………………….. 2 
1.1. Tipuri de scanere și tehnologii de scanare 3D …………….. …………………………………………… 2  
1.1.1. Scanerele cu rază mică de acțiune ………………………………………………………………………….. 3 
1.1.2. Scanerele 3D pe bază de laser ………………………………………………………………………………….. 3 
1.1.3. Scanere 3D cu lumină proiectat ă …………………………………………………………………………….. 4 
1.1.4. Scanere 3D cu rază de acțiune medie sau mare . ………………………………………………….. 5 
1.1.5. Mașină de măsurare a coordonatelor (CMM) ……………………………………………………….. 6 
1.1.6. Sistem de scanare 3D bazat pe braț robotic și cap de măsurare (sondă) ………. 7 
CAPITOLUL 2. PREZENTAREA COMPONENTELOR HARDWARE UTILIZATE LA
CONSTRUC ȚIA SCANERULUI 3D …………………………………………………………………………………….. 9 
2.1. Oportunitatea alegerii temei proiectului de diplomă ……….. ……………………………………. 9  
2.2. Prezentarea platforma Arduino …………………………… ……………………………………………………… 9 
2.2.1. Arduino Pro Micro …………………………………………………………………………………………………….. 11 
2.2.2. Pinii de putere a microcontrolerului ……………………………………………………………………. 12 
2.2.3. Pinii de intrare/ie șire ………………………………………………………………………………………………. 12 
2.2.4. LED‐urile de pe Arduino Pro Micro ………………………………………………………………………. 12 
2.2.5. ATmega32U4 ……………………………………………………………………………………………………………… 12 
2.3. EasyDriver Stepper Motor Driver …………………………. ………………………………………………….. 14  
2.3.1. Descrierea pinilor Driver‐ului ………………………………………………………………………………… 15 
2.4. Micro SD Storage Board …………………………………. ……………………………………………………… ……. 17 
2.5. Sharp GP2Y0A51SK0F …………………………………….. ……………………………………………………… …… 18 
2.6. Sursa de alimentare ……………………………………. ……………………………………………………… ………… 19  
2.7. Placa cu circuitul printat ……………………………… ……………………………………………………… ……… 19 
2.8. Motorul pas cu pas …………………………………….. ……………………………………………………… …………. 20  
2.8.1. Motoare pas cu pas cu reluctanță variabilă ……………………………………………………….. 25 
2.8.2. Motoare pas cu pas cu magnet permanent …………………………………………………………. 25 
2.8.3. Motoare pas cu pas hibride …………………………………………………………………………………….. 26 
2.8.4. Alegerea motorului pas cu pas ………………………………………………………………………………. 27 
2.9. Rulmenții liniari și axele liniare ………………………. ……………………………………………………… … 29 
2.10. Tija filetată …………………………………………. ……………………………………………………… ………………. 29  
2.11. Alte piese ce ajută la asa mblarea Scanerului 3D …………… …………………………………… 30

2.12. Conectivitatea Componentelor har dware și asamblarea sistemului integrat al
scanerului 3D …………………………………………. ……………………………………………………… ………………………….. 30  
CAPITOLUL 3. PREZENTAREA MODULELOR SOFTWARE UTILIZATE ÎN CADRUL
SISTEMULUI DE SCANARE …………………………………………………………………………………………….. 33 
3.1. Implementarea software …………………………………. ……………………………………………………… ….. 33 
3.1.1. Prezentarea software‐ului Scanerului 3D ………………………………………………………………… 33 
3.1.2.Modelul matematic al senzorului ……………………………………………………………………………….. 37 
3.1.3.Prezentarea softului de procesare a datelor …………………………………………………………….. 40 
3.2. Rezultate …………………………………………….. ……………………………………………………… …………………… 41  
CAPITOLUL 4. CONCLUZII …………………………………………………………………………………………….. 44 
BIBLIOGRAFIE ………………………………………………………………………………………………………………. . 46 

LISTA FIGURILOR
Fig. 1. 1 Scaner 3D cu tehnologie laser …………………………………………………….. …………………………………. 4  
Fig. 1. 2 Scaner 3D cu lumina alba …………………………………………………….. …………………………………………. 5  
Fig. 1. 3 Scaner 3D cu rază mare de acțiune …………………………………………………….. ………………………… 6  
Fig. 1. 4 Mașină de măsurat coordonate …………………………………………………….. ………………………………. 7  
Fig. 1. 5 Scaner 3D bazat pe braț robotic …………………………………………………….. ……………………………… 8  
Fig. 2. 1 Tipuri de microcontrolere Arduino …………………………………………………….. ……………………….. 11  
Fig. 2. 2 Harta pinilor, și atribuțiile acestora …………………………………………………….. …………………….. 11  
Fig. 2. 3 Diagrama Block a unui ATmega32U4 …………………………………………………….. ………………….. 13  
Fig. 2. 4 Full Step (MS1=MS2 ‐LOW, DIR=HIGH) cdn.sparkfun.com ………………………………………. 16  
Fig. 2. 5 Half Step (MS1=HIGH, MS2=LOW, DIR=HIGH) ……………………………………………………… …… 16 
Fig. 2. 6 Diagrama Block a Driverului …………………………………………………….. …………………………………. 17  
Fig. 2. 7 Cititor de card Micro SD …………………………………………………….. ………………………………………….. 17  
Fig. 2. 8 Senzor de distanță Sharp GP2Y0A51SK0F …………………………………………………….. …………… 18  
Fig. 2. 9 Ciclul de măsurare …………………………………………………….. ……………………………………………………. 1 8 
Fig. 2. 10 Diagrama bloc a senzorului Sharp …………………………………………………….. ……………………… 19  
Fig. 2. 11 Circuit pentru conectarea componentelor electronice …………………………………………… 20  
Fig. 2. 12 Motor pas cu pas format dintr‐un disc din magnet permanent ……………………………. 21  
Fig. 2. 13 Reprezentarea tipurilor de erori …………………………………………………….. …………………………. 23  
Fig. 2. 14 Răspunsul unghiular la efectuarea unui pas …………………………………………………….. …….. 24 
Fig. 2. 15 Motor cu reluctanță variabilă …………………………………………………….. ……………………………… 25  
Fig. 2. 16 Statorul motorului …………………………………………………….. …………………………………………………. 26  
Fig. 2. 17 Motorul hibrid în secțiune și un detaliu al modului de amplasare a dinților …….. 27 
Fig. 2. 18 Secțiuni transversale prin motoare pas cu pas hibride ………………………………………….. 27  
Fig. 2. 19 Motor pas cu pas NEMA17 …………………………………………………….. …………………………………… 28  
Fig. 2. 20 Dimensiunile motorului pas cu pas NEMA 17 …………………………………………………….. …… 28 
Fig. 2. 21 Rulment liniar……………………………………………………… ……………………………………………………… … 29 
Fig. 2. 22 Axe liniare …………………………………………………….. ……………………………………………………… ……….. 29

Fig. 2. 23 Tijă filetată …………………………………………………….. ……………………………………………………… ……… 29 
Fig. 2. 24 Piesele în format digital …………………………………………………….. ………………………………………… 30  
Fig. 2. 25 Printarea componentelor și rezultatul final …………………………………………………….. ……… 30 
Fig. 2. 26 Conectivitatea componentelor hardware …………………………………………………….. ………….. 31  
Fig. 2. 27 Realizarea practică a conectivit ății componentelor hardware …………………………… 31  
Fig. 2. 28 Sistemul de scanare 3D …………………………………………………….. …………………………………………. 32  
Fig. 3. 1 Diagrama de funcționare a programului principal ….. …………………………………………….. 34  
Fig. 3. 2 Diagrama de funcționar e a funcției readAnalogSensor . ………………………………………… 35  
Fig. 3. 3 Relația dintre tensiune și distanță …………………………………………………….. ………………………… 36  
Fig. 3. 4 Regresia polinomiala de gradul 3 …………………………………………………….. …………………………. 39  
Fig. 3. 5 Principiul de funcționare a programului de procesare a datelor …………………………… 40  
Fig. 3. 6 Poziționarea corectă a obiectului față de senzor …………………………………………………….. .. 41 
Fig. 3. 7 Obiectul real …………………………………………………….. ……………………………………………………… ……… 42 
Fig. 3. 8 Rezultatul în urma rulării script‐ului …………………………………………………….. …………………… 42  
Fig. 3. 9 Rezultatul după finisare …………………………………………………….. ………………………………………….. 42  
Fig. 3. 10 Diferența dintre parametrii scanerului …………………………………………………….. ……………… 43  

LISTA TABELELOR
Tabel 2. 1 Specificații ATmega32u4 …………………………………………………….. …………………………………….. 13  
Tabel 2. 2 Tabelul de adevăr pentru EasyDriver …………………………………………………….. ……………….. 15  
Tabel 2. 3 Specificațiile sursei de alimentare …………………………………………………….. …………………….. 19  
Tabel 2. 4 Specificațiile motorului pas cu pas NEMA17 …………………………………………………….. …… 28 
Tabel 3. 1 Distanța în funcție de tensiune …………………………………………………….. …………………………… 37  
Tabel 3. 2 Timpul de scanare …………………………………………………….. ………………………………………………… 43

1
INTRODUCERE
Un scaner 3D este un dispozitiv care analizează obiecte din lumea reală sau mediul
înconjurător și colectează datele în vederea construirii unor modele digitale
tridimensionale, într -un format compatibil cu diferite software -uri de modelare 3D.
Aceste dispozitive sunt de mai multe tipuri și sunt folosite tehnologii diferite pentru
a le construi. Fieca re tip de scaner vine cu propriile avantaje ș i dezavantaje. Există înc ă
multe limitări în genul de obiecte ce pot fi digitalizate, de exemplu, cele care folosesc
tehnolo giile optice întâmpină dificultă ți cu obiectele strălucitoare sau transparente.
Scaner ele 3D sunt utilizate într -o mare varietate de aplicații. Acestea sunt utilizate
pe scară largă de industria divertismentului, de exemplu, în producția de filme și jocuri
video. Alte aplicații ale acestui dispozitiv includ design -ul industrial, medicina, in gineria
inversă, co ntrolul calității și arheologie.
Scopul scaner ului 3D este acela de a crea un nor de puncte pe suprafața obiectului.
Aceste puncte pot fi apoi folosite pentru a determina forma obiectului (un proces numit
reconstrucție). În funcție de te hnologia utilizată, cum ar fi un scaner ce utilizează o
cameră de foto grafiat , scaner ul 3D poate determina și culoarea respectivului obiect.
În cadrul acestei lucrări se dorește proiectarea unui sistem de scanare 3D cu un
senzor de distanță infraroșu și studierea rezultatelor î n diferite condiții. Sistemul este
controlat cu ajutorul microcontrolerului Arduino Pro Micro, și a două drivere pentru
controlul motoarelor pas cu pas. Pentru stocarea informațiilor oferite de senzorul de
distanță s -a folosit un cit itor de carduri de memorie, datele fiind salvate într -un fișier de
tip text pe un card de stocare. Pentru controlul sistemului s -a folosit limbajul de
programare C++ pe platforma Arduino IDE.
Pentru procesarea datelor se utilizează softul Matlab R2016a . Programul încarcă
datele de pe cardul de stocare, le filtrează conform unor restricții impuse, formează o
matrice, pe care o aranjează în jurul unui punct predefinit rezultând astfel modelul 3D al
obiectului scanat. Convertirea obiectului într -un format pe care orice soft de modela re 3D
sa îl recunoască ș i anume î n format .stl se face tot cu ajutorul unui program Matlab. După
transformarea acestuia, se poate utiliza softul de modelare 3D numit Blender, unde se
poate finisa sau ajusta modelul 3D .
Majoritatea scanerelor folosesc și o cameră de luat vederi, pentru a prelua și
culoarea obiectului, nu doar forma. În această lucrare sistemul folosește doar un senzor
infraroșu pentru a nu fi influențat de gradul de luminozit ate din jur.

2
CAPITOLUL 1. STADIUL ACTUAL AL SISTEMELOR DE SCANARE 3D
1.1. Tipuri de scanere și tehnologii de scanare 3D
Există diferite tipuri de scanere 3D și de tehnologii de scanare 3D. Unele sunt bune
pentru scanerele cu rază mică de acțiune, pe câ nd al tele sunt potrivite pentru scană rile
cu rază de acțiune mijlocie sa u mare .
Aplicații ale scanerelor 3D :
Industria construcțiilor și ingineria civilă
▪ Controlul unui robot ( exemplu: Scanerul 3D poate funcționa ca “ochiul” robotului );
▪ Arheologie ( exemplu: scanarea 3D a artefactelor inc omplete, digitalizarea acestora
și remodelarea lor );
▪ Controlul calității ;
▪ Repararea autostrăzilor ;
▪ Stabilirea unui punct de referință al formei/stării pre -existente pentru a detecta
modificările structurale ce pot rezulta în urma expunerii la sarcini extreme, cum ar
fi cutremurul, impactul autovehiculelor sau incendiul ;
▪ Crearea SIG (sist em de informații geografice), hă rți și geomatică ;
▪ Scanarea laser în mine și goluri subterane .
Design ;
▪ Coordonarea designului unui produs folos ind componente din mai multe surse ;
▪ Înlocuirea parților vechi sau lipsă dintr -un obiect .
Divertisment
Scanerele 3D sunt utilizate de industria divertismentului pentru a crea modele 3D
digitale în special pentru filme și jocuri video. Ele sunt puternic uti lizate și în
cinematografia virtuală. În cazul în care există un echivalent în lumea reală a unui model,
este mult mai rapidă scanarea acestuia decât crearea lui manuală într -un software de
modelare 3D. Frecvent, artiștii sculptează modele fizice iar pentr u duplicarea lor folosesc
scanarea 3D pentru a le digitaliza.
Fotografiere 3D
Scanerele 3D evoluează pentru a fi utilizate în combinație cu camerele de
fotografiere pentru a reprezenta obiectele fotografiate în format tridimensional. După
2010 au apărut co mpanii ce cre ează portrete 3D sau figurine 3D persoan elor.
Autorități
Scanarea 3D cu laser est e folosită de autoritățile din î ntreaga lume. Modelele 3D
sunt utilizate la fața locului pentru:
▪ Crime ;
▪ Traiectoria gloanțelor ;
▪ Analiza petelor de sânge ;
▪ Reconstr ucția accidentelor ;

3
▪ Explozii ;
▪ Prăbușiri de avioane .
Inginerie inversă
Ingineria inversă a unei componente mecanice necesită un model digital precis al
obiectelor ce urmează a fi scanate. Mai bine decât un nor de puncte, un model digital
precis poate fi reprezentat de o plasă polig onală sau un set de suprafețe NURB ( Non –
uniform rational B-spline) plate sau curbe ori în mod ide al, pentru componente mecanice,
un model solid CAD.
Imobiliare
Terenurile sau clă dirile pot fi scanate într-un model 3D, lucru ce permite
cumpărătorilor să viziteze ș i să inspecteze proprietatea ori clădirea de la distanță,
oriunde, fără a fi nevoiți să s e deplas eze la respectivul teren sau clă dire. Clădirile pot fi
scanate 3D atât pe interior cât și pe exterior.
Medicină
Scanerele 3D sunt utilizate în medicină pentru a obține forma 3D a unui pacient care
are nevoie de proteze pentru diferite afecțiuni. Mo delul obținut se folosește apoi pentru
a produce proteze sau implanturi dentare.
Monumente
În 1999, două grupuri diferite de cercetare au început să scaneze statuile lui
Michelangelo. Universitatea Stanford, cu un grup condus de Marc Levoy, a folosit un
scaner 3D cu tehnologie ce folosea triangularea cu laser, construit de Cyberware, pentru
a scana statuile lui Michelangelo di n Florența și cele patru statui din Capela Medici.
Scanările aveau o precizie de până la 0,25 de milimetri, suficient pentru a vedea urmele
de daltă ale lui Michelangelo. Aceste scanări detaliate au produs o cantitate mare de date,
până la 32 de Giga octeți , iar prelucra rea datelor din scanări a durat aproximativ 5 luni.
Aproximativ în aceiași perioadă, u n grup de cercetători de la IBM a scanat Pieta din
Florența, obținând atât detalii geometrice cât și culori. Modelul digital obținut de
cercetătorii de la Stanford a fost folosit pentru o restaurare ulterioară a statuii în anul
2004
1.1.1. Scanerele cu raz ă mică de acțiune
Folosesc de obicei triangularea cu laser sau tehnologia luminoasă.
1.1.2. Scanerele 3D pe bază de laser
Folosesc un proces numit triangulare trigonometrică pentru a capta cu precizie o
formă 3D formată din milioane de puncte. Aceste scanere funcționează prin proiectarea
unei linii laser sau a mai multor linii pe un obiect și apoi captarea reflexiei sale cu unul
sau mai mulț i senzori. Senzorii sunt localizați la o distanță cunoscută d e sursa laserului,
astfel măsură torile pot fi realizate prin calcularea unghi ului de reflexie a lumi nii laserului.
Scanerele pe bază de laser sunt foarte populare și pot avea un design diferit. Ele pot fi
portabile sau fixe.

4
Avantajele Scanerului 3D cu laser
▪ Poate scana suprafețe dificile prec um suprafețe lucioase sau negre ;
▪ Mai puțin influențat de nivel ul de lumină, sau de schimbările bruște de lumină;
▪ Poate fi portabil ;
▪ Design simplist, ușor de utilizat și un preț scăzut.

Fig. 1. 1 Scaner 3D cu tehnologie laser
(www.ems -usa.com)
1.1.3. Scanere 3D cu lumină proiectată
Numite și Scanere 3D “White light”, a cestea folosesc un led cu lumină albă sau
albastr ă și sunt montate pe un trepied de unde generează lumi na ce poate avea diferite
forme. D e obicei lumina proiectată are forma unor bare. Scanerul 3D are unul sau mai
mulți senzori care extrag forma 3D a obiectului pe baza formei generate de lumina
scanerului. Folosind ace iași metodă precum scanerele cu laser și anume triangularea
trigonometric ă, distanța de la senzor la sursa de lumină este cunoscută. Scanerele cu
lumină albă sunt mai lente decât cele cu laser. Mai nou acestea sunt echipate cu o camera
de foto grafiat avansată, cu procesoare mai rapide și pot captura în mai puțin de o secundă
peste 1 milion de puncte. Acestea sunt folosite în special la scanarea oamenilor ce au
dificultăți în a sta nemișcați.
Beneficiile folosirii acestui tip de scaner 3D
▪ Scanări foarte rapide ;
▪ Supr afață de scanare mare ( aproximativ 1,2 m într -o singură scanare );
▪ Rezoluție foarte mare ( aproximativ 16 milioane de puncte într -o singură scanare );
▪ Acuratețe foarte mare ( până la 0.01 mm );
▪ Versatil (poate avea mai multe lentile pentru a scana obiecte de diferite dimensiuni,
fie mici, fie mari) ;
▪ Dato rită luminii generat e de senzor, ochiul uman sau animal nu este afectat ;
▪ Prețul, în funcție de rezoluție și acuratețe .

5

Fig. 1. 2 Scaner 3D cu lumina alba
(www.lmi3d.com)
1.1.4. Scanere 3D cu rază de acțiune medie sau mare .
Cele cu rază mare de acțiune sunt de două tipuri:
▪ bazate pe pulsuri
▪ Schimbare de fază.
Ambele sun t potrivite pentru obiecte mari cum ar fi, clădiri , structuri, avioane și
vehicule militare. Scanerele 3D cu schimbare de fază, pot si utilizate și pentru sc anări cu
rază medie de acțiune cum ar fi : automobile, pompe mari și echipamente industriale.
Aceste scanere captează milioane de puncte rotindu -se 360 de grade în timp ce pune în
mișcare o oglindă ce redirecționează laserul către obiectul sau zonele care urmează a fi
scanate 3D.
1.1.4.1. Scanere 3D bazate pe puls
Cunoscute și sub numele de Scanere 3D “time -of-flight” sunt bazate pe un concept
simplu: viteza luminii, pentru este cunoscută foarte precis. Astfel, dacă este cunoscută
durata de timp necesară pentru a ajunge la un obiect și pentru a reflecta înapoi la un
senzor, este cunoscută distanța de la senzor la obiect. Aceste sisteme utilizează circui te
cu o precizie de picosec unde pentru a măsura timpul necesar în c are lumina se reflectă
înapoi că tre senzor pentru milio ane de impulsuri ale laserului, a stfel determinând
distanța dintre obiect și senzor. Prin rotirea laserului și a s enzorului (de obicei cu ajutorul
unei oglinzi), scanerul poate capta informații de până la 360 de grade î n jurul său.
1.1.4.2. Scanere 3D cu schimbare de fază
Sunt o altă tehnologie “time -of-flight ” și au la bază același concept ca și scanerele
bazate pe puls. În plus față de cele cu puls, acest scaner 3D ajus tează puterea fasciculu lui
laser iar scanerul compară faza laserului trimis ă cu faza laserului returnat ă către senzor.
Măsurarea schimbărilor de fază este de obicei mai precisă și mai silențioasă, dar nu este
la fel de flexibilă pentru scanarea pe distanțe lungi, precum scanerele 3D pe bază de puls.

6
Scanerele bazate pe impulsuri laser pot scana obiecte de până la 1000 de metri, în timp
ce scanerele cu schimbare de fază sunt mai potrivite pentru scanarea obiectelor de până
la 300 de metri sau mai puțin.
Bene ficiile unui scaner 3D cu rază medie sau mare de acțiune
▪ Scanează 3D milioane d e puncte într -o singură scanare ( până la 1 milion de puncte
pe secundă );
▪ Suprafață mare de acoperire ( până la 1000 de metri );
▪ Acuratețe și rezoluție ridicată în funcție de m ărimea obiectului ;
▪ Portabil ;
▪ Scanează o arie vari ată de obiecte .

Fig. 1. 3 Scaner 3D cu rază mare de acțiune
(www.ems -usa.com)
1.1.5. Mașină de măsurare a coordonatelor (CMM)
Mașina de măsurare a coordonatelor (CMM) este utilizată în primul rând la
inspectarea diferitelor piese. Mașina poate fi controlată de un operator uman sau poate fi
controlată de un calculator. Măsurătorile sunt făcute de un cap de măsură (num it și
sondă) atașat la a treia axă de mișcare a acestei mașini. Aces te capuri de măsură pot avea
diferite tehnologii precum, mecanice, bazate pe laser, optic e sau cu lumină pr oiectată .
Aceasta are 6 grade de libertat e și afișează citirile sub formă matematică.
CMM -ul este compus din trei axe, X, Y și Z. Aceste axe sunt ortogonale între ele într –
un sistem tridimensional de coordonate. Fiecare axă are un sistem de scalare ce indică
locația acesteia . Mașina citește intrarea din senzor conform instrucțiunilor date de
oper atorul uman sau de calculator. Aparatul folosește coordonatele X, Y și Z pentru
fiecare dintre aceste puncte, pentru a determina dimensiunea și poziția cu precizie
micrometrică.
O mașină d e măsurare a coordonatelor este de asemenea un dispozitiv utilizat î n
procesul de fabricare și asamblare. Prin înregistrarea precisă a coordonatelor X,Y și Z ale
obiectului, se generează puncte ce pot fi apoi analizate prin algoritmi de regresie pentru
construcția 3D a modelului. Aceste puncte sunt obținute, cum este preci zat deja, cu

7
ajutorul unui cap de măsură . Astfel putem spune că CMM -ul este o formă specializată de
robot industrial.
Pentru ca măsurarea sa fie foarte precisă, undeva la câțiva microni, CMM -urile sunt
montate într -o cameră izolată, cu podea armată, pentru a minimiza pe cât posibil
vibrațiile și alte forțe c e ar putea interveni în proces. D e asemenea umiditatea și
temperatura sunt controlate. Cele mai multe CMM -uri au o suprafață netedă făcută din
granit. Obiectele sunt fixate pe masa din granit astfel încâ t să nu existe nici -o mișcare în
timpul procesului de scanare.
Beneficiile Mașinilor de măsurat coordonate
▪ Una dintre cele mai precise căi de a măsura un obiect ;
▪ Obiecte mici sau mari pot fi măsurate de mașina corespunzătoare ;
▪ Există c ertificările, stan dardele industriale ș i software -ul pentru măsurători ;
▪ Există multe mașini de diferite stiluri și mărimi de la mai mulți producători .

Fig. 1. 4 Mașină de măsurat coordonate
(www.ems -usa.com)
1.1.6. Sistem de scanare 3D bazat pe braț robotic și cap de măsurare (sondă)
Un sistem de scanare 3D sau de scanare bazat pe braț robotic este similar cu o
mașină de măsurare a coordonatelor (CMM) deoarece utilizează un cap de măsură pentru
a determina coordonatele unui obiect. În plus față de son de, multe sisteme bazate pe braț
robotic au de asemenea un scaner 3D cu tehnologie laser, atașabil , pentru colectarea unui
număr mare de puncte. Software -ul ține evidența mișcărilor brațului robotic pentru a ști
unde se află în spațiu în orice moment.
Sistemele bazate pe braț robotic funcționează atașând brațul articulat fie pe o masă,
fie pe o bază robustă . Brațul este ținut de un mâner de operatorul uman ce se deplasează
în jurul obiectului pentru a -l măsura sau scana. Principalul avantaj a l acestor siste me este
că aceste a sunt mult mai portabile decât un CMM și pot fi utilizate într-un mediu de
producție.
Beneficiile utilizării unui sistem de scanare 3D bazat pe braț robotic și sondă
▪ Scanare 3D și măsurare în același sistem ;
▪ Libertate de mișcare ;
▪ Volum mare de scanare 3D ;

8
▪ Abilitatea de a măsura și a scana chiar și în timp ce pies ă sau obiect ul se află în
mișcare, fără pierderi de precizie ;
▪ Portabile .

Fig. 1. 5 Scaner 3D bazat pe braț robotic
(www.ems -usa.com)

9
CAPITOLUL 2. PREZENTAREA COMPONENTELOR HARDWARE UTILIZATE LA
CONSTRUCȚIA SCANERULUI 3D
2.1. Oportunitatea alegerii temei proiectului de diplomă
În vederea proiectării sistemului de scanare 3D s -a plecat de la premisa realizării
unui prototip de sistem de scanare 3D care prezintă următoarele avantaje majore :
1. Din punct de vedere economic , sistemul fiind proiectat și realizat utilizând
produse h ardware ieftine iar software -ul proiectat și realiza t printr -un proiect
educațional
2. Din punct de vedere tehnic , res pectiv faptul că sistemul de scanare 3D, în
momentul funcționării , nu este influențat de lumina ambientală.
Proiectarea hardware s -a realizat luând în considerare aspectele economice
prezentate mai sus și a constat în alegerea potrivită a sistemelor și echipamentelor care
vor intra în componenta sistemului de scanare 3D. În continuare vor fi prezentate
sistemele și echipamentele alese și modalitatea de interconectare în vederea realizării
sistemului integrat. Astfel, componentele utilizate în proiectarea și construcția scanerului
3D sunt:
▪ 1 x placă de de zvoltare tip Arduino Pro Micro;
▪ 2x EasyD river Stepper Motor Driver;
▪ 1x Micro SD Storage Board;
▪ 1x senzor de distanță și măsurare în Infraroșu (2 -15cm) – Sharp GP2Y0A51SK0F;
▪ 1x sursă de alimentare de curent continuu 12V;
▪ 1x placă cu circuitul printat;
▪ 2x Motoare pas cu pas NEMA 17;
▪ 2x rulmenți liniari;
▪ 1x tijă filetată;
▪ 2x axe liniare;
▪ Alte piese ce ajută la asamblarea Scanerului 3D.
2.2. Prezentarea platforma Arduino
Arduino este o placă de dezvoltare cu u n singur microcontroler ce este utilizat în
dezvoltarea unor proiecte multidisciplinare.
Hardware -ul este construit dintr -o placă open -source concepută în jurul unui
microcontroler Atmel AVR pe 8 biți sau un ARM Atmel pe 32 de biți.
Software -ul este consti tuit dintr -un compilator cu limbaj propriu de programare și
un bootloader ce este executat pe microcontroler.
Plăcile Arduino pot fi achiziționate pre -asamblate sau kit -uri „do -it-yourself”. De
asemenea pe internet se găsesc, fiind un proiect open -source, o serie de informații utile
legate de design -ul hardware ale plăcilor Arduino, lucru ce permite pasionaților să își
producă atât propriile microcontrolere cât și asamblarea manuală a componentelor
necesare.

10
O placă Arduino constă într -un microcontroler pe 8 sau 16 biți și o serie de
componente complementare pentru a facilita programarea și încorporarea în alte
circuite. Un aspect important al plăcilor de dezvoltare Arduino este modul standard în
care sunt expuși conectorii plăcii( la vedere), acest lucru pe rmițând ca placa de dezvoltare
să fie conectată la o varietate de module add -on interschimbabile, cunoscute sub numele
de Arduino Shie lds (scuturi Arduino). Unele shie ld-uri comunică cu placa Arduino direct
pe anumiți pini ai acesteia, însă cele mai multe shield -uri sunt adresabile individual prin
Bus-ul serial I²C, care permite ca mai multe shield -uri să fie stivuite și utilizate în paralel.
Plăcile de dezvoltare oficial e Arduino au folosit chip -uri din seria ATmega AVR, in special
Atmega8, ATmega168, ATm ega328, ATmega1280 și ATmega2560. O serie de alte
procesoare au fost folosite de către plăcile compatibile Arduino. Cele mai multe plăci
includ un regulator liniar de 5V și un oscilator de 16MHz (cristal de Quartz sau rezonator
ceramic). Alte modele folose sc un oscilator de 8MHz și nu au regulator liniar de 5V ca
urmare a restricțiilor specifice formei acestora. Microcontrolerul Arduino este de
asemenea pre-programat cu un bootloader care simplifică încărcarea de programe în
memoria flash a acestuia, comparativ cu alte dispozitive, care de obicei au nevoie de un
programator extern.
La un nivel conceptual, toate plăcile Arduino sun t programate printr -o co nexiune
serială RS – 232, dar modul în care aceasta este pusă în aplicare variază în funcție de
versiunea hardware. Plăcile seriale Arduino conțin un circuit schimbător de nivel logic,
pentru a converti între RS – 232 și nivelul de semnale TTL (în general chip -uri din seria
MAX232). Plăcile Arduino curente sunt programate prin USB, folosind chip -uri adaptoare
USB – serial , cum ar fi FTDI FT232. Unele variante, cum ar fi Arduino Mini și plăcile
neoficiale Boarduino, folosesc o pl acă detașabilă cu adaptor USB – serial, cablu, Bluetooth
sau alte metode.
Plăcile Arduino expun cei mai mulți pini I/O ai microcontrolerului pentru a fi
utilizați în alte circuite. În acest moment plăcile Diecimila, Duemilanove și Uno oferă 14
pini digitali I/O, dintre care șase pot p roduce semnale d e puls cu lățime modulată (PWM)
și șase intrări analogice. Acești pini se află pe parte a superioară a plăcii Arduino, grupați
în mufe mama de 2,5 milimetri. Arduino Pro Micro și alte câteva modele pot avea pinii pe
partea inferioară a plăci i. Acestea conțin p ini de tip tată ce permit conectarea
microcontrolerului pe plăci fără lipire tip Breadbord.
Există p e piață mai multe tipur i de plăci : Arduino -compatibile și Arduino -derivate.
Unele sunt funcțional echivalente cu plăcile Arduino și pot fi utilizate alternativ. Multe
dintre acest ea au la bază platforma Arduino cu adaos de drivere de ieșire, de cele mai
multe ori pentru a fi utilizate în domeniul educației, sau pentru a simplifica construirea
de roboți mici. Altele sunt echivalente din punct de vedere electric, dar este modificată
forma, lucru care permite uneori utilizarea în continuare a Shield -urilor, alteori nu. Unele
variante folosesc procesoare complet diferite, cu diferite niveluri de comptabilitate . Până
în prezent au fost produse 16 versiuni oficiale Arduino.

11

Fig. 2. 1 Tipuri de microcontrolere Arduino
www.karma -laboratory.com
2.2.1. Arduino Pro Micro
Toate intrările/ieșirile și pinii de putere de pe Pro Micro sunt distribuite simetric de -a
lungul microcontrolerului. Unii pini po t avea și alte atribuții precum: intrări analogice. În
figura 2.2 este realizată o hartă cu pinii plăcii și atribuțiile lor.
Acest microcontroler are în componență 9 canale de 10 biți ADC, 5 pini PWM, 12 intrări
digitale, și 2 pini pentru conexiuni seriale RX și TX. Placa rulează la 16MHz si 5V.

Fig. 2. 2 Harta pinilor, și atribuțiile acestora
www.lear.sparkfun.com

12
2.2.2. Pinii de putere a microcontrolerului
▪ RAW este tensiunea de intrare neregulată pentru Pro Micro. În cazul în care este
alimentat prin USB, tensiunea la a cest pin este de aproximativ 4.8V (5V USB minus
o scădere datorată diodei). Pe de altă parte, daca placă este alimentă extern prin
acest pin, se poate aplica o tensiune de până la 12V.
▪ VCC este tensiunea de ieșire din placa Arduino. Această tensiune va dep inde dacă
placa este o versiune de 3,3V / 8MHz sau o versiune de 5V / 16MHz. Dacă este o
versiune de 5V / 16 MHz, și placa este alimentată prin pinul RAW cu 12V, ieșirea din
VCC este de 5V datorită regulatorului de tensiune. Acest pin poate fi utilizat ca
alimentare pentru alte dispozitive auxiliare.
▪ RST este folosit pentru a restarta microcontrolerul.
▪ GND este tensiunea la pământ (0V referință ) pentru sistem.
2.2.3. Pinii de intrare/ieșire
Pinii de intrare/ieșire, 18 în total, pot avea mai multe atribuții. Fiecare pin poate fi
utilizat ca intrare sau ieșire digitală, pentru clipirea LED -urilor sau a altor procese. Acești
pini sunt numerotați de la 0 la 21 in ID -ul plăcii Arduino. Pinii A0 – A3 pot fi apelați
folosind numărul lor digital.
Nouă pini au convert oare analog/digitale (ADC) și pot fi utilizați ca intrări analogice.
Aceștia sunt utili pentru citirea potențiometrelor sau a altor dispozitive analogice,
utilizând funcția “analogRead([pin])”.
Există cinci pin cu funcționalitate PWM, care permite o formă de ieșire analogică
utilizând funcția “analogWrite([pin][value])”. Acești pini sunt indicați pe placă cu ajutorul
unui cerc alb ce înconjoară pinii respectivi.
Arduino Pro Micro are cinci întreruperi ce permit apelarea instantanee a unei f uncții
când un pi n este HIGH, LOW sau ambele.
2.2.4. LED -urile de pe Arduino Pro Micro
Sunt trei LED -uri pe placa Arduino Pro Micro. LED -ul roșu indică faptul că placa
este alimentată cu tensiune. Celelalte două indică transferul datelor prin USB. LED -ul
galben indică datele car e intră în RX iar cel verde indica datele care ies din TX.
2.2.5. ATmega32U4
ATmega32U4 este un cip microcontroler creat de către Atmel și face parte din seria
de mega AVR.
ATmega32U4 AVR 8 -bit este un circuit integrat de înaltă performanță ce se bazează
pe un mi crocontroler RISC, cu 32 KB de memorie fla sh, capacitate de auto -programare,
2,5KB SRAM, 1KB EEPROM și viteză mare/mică c ătre dispozitive prin USB 2.0. N ouă
canale au convertoare analog/digitale și interfață JTAG pentru depanare pe chip.
Dispozitivul ating e până la 16 MIPS la 16MHz. Dispozitivul funcționează la tensiuni
cuprinse între 2,7 și 5,5 volți. Prin executarea unor instrucțiuni puternice într -un singur
ciclu de ceas, dispozitivul realizează transferuri apropiate de 1 MIPS/MHz, permițând
optimizarea consumului de energie față de viteza de procesare.

13

Fig. 2. 3 Diagrama Block a unui ATmega32U4
ww1.microchip.com
Tabel 2. 1 Specificații ATmega32u4
Caracteristică Valoare/Tip
Microcontroler ATmega 32u4
Tensiune de funcționare 5V
Tensiune de intrare (recomandată) 2 – 12 V

14
Caracteristică Valoare/Tip
Tensiune de intrare ( limite) 6 – 20 V
Intrări/Ieșiri digitale 18
Canale PWM 5
Intrări analogice 8
Curent Continuu per I/O pin 40 mA
Curent Continuu pentru pinul de 3.3V 50 mA
Memorie Flash 32 KB (4 KB sunt utilizați de bootloader)
SRAM 2,5 KB
EEPROM 1 KB
Clock Speed 16 MHz
Lungime 68,6 mm
Lățime 53,3 mm
Greutate 20 g

2.3. EasyDriver Stepper Motor Driver
EasyDriver este un driver pentru motoarele pas cu pas bazat pe chipul A3967, cu
translator încorporat. Este proiectat pentru a controla motoarele pas cu pas bipolare în
full-step, half -step, quarter -step și eighth -step, cu o capacitate de ieșire de 30V și 750mA.
A3967 include un regulator de curent fix off -time ce ar e abilitatea de a opera în diferite
moduri: încet, repede sau mixt. Aceste moduri de funcționare duce la reducerea
zgomotului produs de motor, crește acuratețea pașilor și reduce puterea disipată.
Translatorul este cheia unei ușoare implementări a cipului A3967. Prin simpla
introducere a unui impuls pe intrarea STEP, motorul va face un pas (full, half, quarter sau
eighth, depinde de cele două intrări logice). Nu există tabele de secvențe de faze, linii de
control de înaltă frecvență sau interfețe complexe p entru programare. Interfața A3967
este ideală pentru aplicațiile unde un CPU complex nu este disponibil sau este
suprasolicitat .
Protecția circuitului intern include protecția termică cu histerezis , blocarea
subtensiunii (Under -voltage lockout) și protecți a la suprasarcină. Nu este necesară o
secvențiere specială de pornire.

15

Fig. 2.4 EasyDriver Stepper Motor Driver
sunzhongkui.files.wordpress.com
2.3.1 Descrierea pinilor Driver -ului
▪ GND este tensiunea la pământ . Există trei pini GND pe EasyDriver și toți sunt
conectați între ei;
▪ M+ este borna pozitivă de intrare a tensiunii. Eas yDriver suportă între 6 și 30 V și
2A(sau mai mult);
▪ A și B cei patru pini sunt conexiunile cu motorul. A și B sunt două bobine ale
motorului pa s cu pas. Inversarea conexiunilor celor două bobine duce la schimbarea
de sens a motorului;
▪ STEP în acest pin intră între 0 și 5V semnal digital. Fiecare creștere a semnal ului va
cauza facerea unui pas sau micro pas ;
▪ DIR în acest pin intră între 0 și 5V se mnal digital. Dacă semnalul (HIGH/LOW) este
eșantionat pe fiecare margine de creștere a STEP -ului se determină direcția pasului.
Este absolută necesară conectarea acestor pini pentru funcționarea corectă a
sistemulu i. Următorii pini prezentați sunt opționa li.
▪ MS1/MS2 Acești pini digitali controlează modul de păsuire;
▪ RST Acest semnal de intrare, în mod norm al va reinițializa traductorul intern și va
dezactiva toate driverele de ieșire atunci când este activat ;
▪ SLP Acest semnal de intrare în mod normal va r educe la minimum consumul de
energie prin dezactivarea circuitelor interne și a driver -elor de ieșire atunci când
sistemul este pe repaus;
▪ ENABLE acesta dezactivează toate ieșirile când este activ
▪ 5V Acesta este un pin de ieșire ce poate genera 3,3 sau 5V, Prin acest pin se pot
alimenta alte circuite externe.
Tabel 2. 2 Tabelul de adevăr pentru EasyDriver
MS1 MS2 Ieșire
LOW LOW Full Step (2 faze)
HIGH LOW Half Step

16
LOW HIGH Quarter Step
HIGH HIGH Eight Step

În cazul scanerului 3D proiectat în acesta lucrare se va folosi: Full Step sau Half
Step. Acest aspect depinzând de programul încărcat pe microcontrolerul Arduino Pro
Micro. Cu cât se va folosi mai mulți pași, cu atât acuratețea scanării va fi mai mare. În cazul
în care se alege Full Step, senzorul va colecta 200 de puncte în jurul obiectului. Dacă se va
opta pentru Half Step, senzorul va colecta 400 de puncte. Trebuie ținut cont de forma
obiectului și de faptul că timpul scanării se va dubla. Dacă obiectul este de dimensiuni
reduse și cu forme mai complicate, desigur se va opta pentru Half Step, însă dacă obiectul
este de dimensiuni mai mari cu forme relativ simple, se va opta pentru Full Step.

Fig. 2. 4 Full Step (MS1=MS2 -LOW,
DIR=HIGH) cdn.sparkfun.com
Fig. 2. 5 Half Step (MS1=HIGH, MS2=LOW,
DIR=HIGH)
cdn.sparkfun.com

17

Fig. 2. 6 Diagrama Block a Driverului
cdn.sparkfun.com
2.4. Micro SD Storage Board
Acest cititor de card -uri de memorie s uportă card -uri de tip Micro SD și Micro
SDHC(de viteză mare). Tensiunea de operare a acestui dispozitiv este între 3,3V și 5V.
Interfața de comunicare este SPI ( Serial Peripheral Interface Bus ). Dispozitivul prezintă
un total de șase pini (GND, VCC, MISO, MOSI, SCLK, SC).
▪ VCC – intrarea tensiunii de alimentare;
▪ MISO, MOSI, SCLK – magistrala SPI;
▪ CS – Selecția de cip (CS) sau selectarea slave (SS).

Fig. 2. 7 Cititor de card Micro SD
www.tindie.com

18
2.5. Sharp GP2Y0A51SK0F
Senzorul de distanță și măsurare în Infraroșu (2 -15cm) tip Sharp GP2Y0A51SK0F
folosește o combinație integrată a unui PSD (detec tor sensibil pozițional) cu o dioda ce
transmite în infraroșu și cu un circui t de procesare a semnalului. Acest dispozitiv
folosește metoda trian gulației. I eșirea din sistem este o tensiune ce corespunde distanței
față de obiect, astfel acest senzor putând fi utilizat și ca senzor de proximitate.

Fig. 2. 8 Senzor de distanță Sharp GP2Y0A51SK0F
www.sharp -world.com
Senzorul de distanță și măsurare în Infraroșu este format dintr -un PSD (detector
sensibil pozițional), o diodă ce transmite infraroșu și un circuit de procesare a semnalului.
Caracteristicile pr incipale ale senzorului sunt:
▪ Ciclu scurt de măsurare (16,5 ms);
▪ Distanța de măsurare ( între 2 și 15 cm);
▪ Dimensiune compactă (27,0 x 10,8 x 12,00 mm);
▪ Tip de ieșire analogic.
În figura 2.9 se prezintă ciclul de măsurare al senzorului de distanță și măsurare în
infraroșu iar în figura 2.10 diagrama bloc a senzorului de distanță SHARP.

Fig. 2. 9 Ciclul de măsurare
www.sharp -world.com

19

Fig. 2. 10 Diagrama bloc a senzorului Sharp
www.sharp -world.co m
2.6. Sursa de alimentare
Sursa aleasă pentru alimentarea pentru sistemul de scanare are următoarele
specificații:
Tabel 2. 3 Specificațiile sursei de alimentare
Caracteristică Valoare
Model DLL015122000D
Intrare 100 – 240V ~ 50/60Hz 0.55A
Ieșire +12V – 2A

2.7. Placa cu circuitul printat
Pentru o mai bună fiabilitate s -a ales realizarea unui circuit pri n care piesele să se
conecteze astfel încât să fie accesibilă o eventuală înlocuire a uneia sau mai multor piese.

20

Fig. 2. 11 Circuit pentru conectarea componentelor electronice
Pașii pentru realizarea acestui circuit sunt următorii:
▪ Trasarea circuitului dorit cu un marker permanent;
▪ Introducerea plăcii într -un vas ce conține Clorură Feerică timp de 15 minute;
Datorită proprietăților clorurii feerice, materialul din cupru care nu este acoperit
de marker -ul permanent este dizolvat , rezultând astfel circuitul din figura 2.11.
2.8. Motorul pas cu pas
Motorul pas cu pas poate fi definit ca „un dispozitiv elect romecanic care convertește
impulsurile electrice în mișcări mecanice discrete”.
Axul motorului pas cu pas execută o mișcare de rotație în pași incrementali discreți
când este aplicată în secvența corectă o comandă electrică în pulsuri. Rotația motorului
este strâns legată de caracteristicile acestor impulsuri electrice. Astfel direcția de rotație
a motorului este direct dependentă de frecvența impulsurilor electrice iar deplasarea
unghiulară este direct dependentă de numărul de pulsuri electrice aplicate.
În comparație cu motoarele de curent continuu sau de curent alternativ, atât
sincrone cât și asincrone, motorul pas cu pas prezintă o serie de avantaje :
▪ Rotația unghiulară a motorului este proporțională cu pulsul electric aplicat;
▪ Motorul are moment maxim î n poziția oprit dacă bobinele sunt alimentate;
▪ Poziționare precisă, cu o eroare de 3 – 5 % la un pas, care nu se cumulează de la un
pas la altul;
▪ Răspunsuri foarte bune la pornit/oprit/ și la schimbarea direcției de rotație;
▪ Fiabilitate foarte bună deoarec e nu există perii de contact la motor, deci se poate
spune că durata de funcționare depinde de rulment;
▪ Posibilitatea de a obține viteze foarte mici cu o sarcină legată direct pe axul
motorului;
▪ gamă largă de viteze de rotație,
dar și dezavantaje :

21
▪ Rezonanța poate apărea în cazul unui control deficitar;
▪ Controlul greoi la viteze foarte mari.
Fiecare revoluție a axului motorului este alcătuită dintr -o serie de pași discreți. Un
pas este definit ca fiind rotația unghiulară a axului motorului la aplicar ea unui impuls de
comandă. Fiecare impuls face ca axul să se rotească cu un anumit număr de grade
caracteristic fiecărui tip de motor. Un „pas unghiular” reprezintă rotația axului motorului
la fiecare pas, și se măsoară în grade. În funcție de acest pas un ghiular se poate face o
clasificare a motoarelor pas cu pas.
Există trei tipuri de motoare pas cu pas din punct de vedere al configurație i
electrice. Acestea sunt:
▪ Cu reluctanță variabilă;
▪ Cu magnet permanent;
▪ Hibride.
Pe lângă aceste trei tipuri „clasice” de motoare pas cu pas există un tip de motor cu
design special. Acesta este motorul cu rotorul format dintr -un disc din magnet
permanent.

Fig. 2. 12 Motor pas cu pas format dintr -un disc din magnet permanent
web.ulbsibiu.ro (L aurean Bogdan)
Acest tip de motor oferă avantajul unei inerții foarte mici, precum și un flux
magnetic optim deoarece nu există nici o legătură între cele două bobine ale statorului.
O altă caracteristică importantă a motoarelor, după care ele sunt și clas ificate, este
mărimea lor. Clasificarea după mărime se face în funcție de diametrul corpului motorului,
în timp ce lungimea motorului poate varia în interiorul aceleiași clase de mărime.
Nivelul de putere al motoarelor pas cu pas variază, de la motoarele f oarte mici cu
un consum de ordinul mW, la motoarele mai mari cu un consum de ordinul zecilor de
Watti.
Modul de funcționare al motorului pas cu pas este simplu. În momentul când o
bobină este alimentată apare un flux magnetic în stator. Direcția fluxului poate fi
determinată folosind „regula mâinii drepte”. Prin „energizarea” în secvența corectă a
bobinelor statorului, motorul va efectua rotația dorită.

22
De obicei motoarele pas cu pas au două faze, dar există și motoare cu trei sau cinci
faze. Un motor bipolar cu două faze are o bobină/fază iar un motor unipolar are o bobină
cu priză centrală/fază. De multe ori motorul unipolar este catalogat ca fiind un motor cu
patru faze deși el are numai două faze. Există și motoare care au două bobine
separate /fază – acestea pot fi conduse fie ca un motor bipolar sau ca un motor unipolar.
Pentru a putea înțelege mai bine structura unui motor pas cu pas trebuie menționat faptul
că un pol este considerat acea regiune din corpul magnetizat în care densitatea de flux
magnetic este concentrată. Atât statorul cât și rotorul unui motor pas cu pas au poli. Cel
mai simplu motor poate avea doi poli (o pereche de poli) pentru fiecare din cele două faze
pe stator și 2 poli (o pereche) pe rotor. În realitate sunt prezente mai multe perechi de
poli atât pe stator cât și pe rotor, acest lucru ducând la creșterea numărului de pași la o
rotație completă a motorului. Motorul pas cu pas cu magnet permanent are un număr egal
de poli pe rotor și stator. Cele mai întâlnite tipuri de motoare pas cu pas cu magnet
permanent c u 12 perechi de poli. Statorul are 12 poli/fază. Motorul pas cu pas hibrid are
rotorul prevăzut cu dinți , acesta fiind împărțit în două părți de un magnet permanent –
rezultă că jumătate din dinți sunt poli sud iar cealaltă jumătate poli nord. De asemenea și
statorul este prevăzut cu dinți .
Rezoluția unghiulară sau pasul unghiular al unui motor pas cu pas este dat de relația
dintre numărul de poli pe rotor, numărul de poli pe stator și numărul de faze.
𝑃𝑢=360
𝑁𝑝ℎ 𝑥 𝑃ℎ=360
𝑁 (2.1)
În care:
Pu – este pasul unghiular,
Nph – numărul de poli echivalenți/fază = numărul de poli pe rotor,
Ph – numărul de faze,
N – numărul total de poli pentru toate fazele.

În cazul motorului pas cu pas ales pentru această lucrare pasul unghiular este:
𝑃𝑢=360
100 𝑥 2= 1,8 (grade )
(2.2)
În funcție de modul de alimentare a fazelor există mai multe tipuri de conducere a
motoarelor pas cu pas. Cele mai comune moduri sunt:
▪ Pas întreg,
▪ Jumătate de pas,
▪ Micro pas .
Motivele pentru care motorul pas cu pas a ajuns să fie folosit într -o gamă mare de
aplicații este acuratețea și repetabilitatea. În mod normal eroarea este cuprinsă între 3 –
5%/pas. Acuratețea unui motor pas cu pas depinde în mare parte de părțile sale mecanice
și nu de părțile electrice. Există mai multe tipuri de erori prin care se exprimă diferența
dintre poziția reală și poziția teoretică a motorului (figura 2.13). Astfel:

23
▪ Eroarea de po ziționare la sfârșitul unui pas: e ste eroarea pozitivă sau negativă de
poziție care apare când motorul a efectuat un pas, adică s -a rotit cu un pas unghiular
de la poziția anterioară.
▪ Eroarea de poziție : dacă motorul a efectuat N pași față de p oziția inițială ( N =
360/P u)iar unghiul fată de poziția inițială este măsurat după fiecare pas, astfel după
N pași o să avem un unghi Ɵ n .
𝛥Ɵ𝑁=Ɵ𝑁−𝑃𝑢 𝑥 𝑁 (2.3)
▪ Histerezis de poziție : este valoarea obținută prin măsurarea erorii de poziție în
ambele direcții

Fig. 2. 13 Reprezentarea tipurilor de erori
web.ulbsibiu.ro (Laurean Bogdan)
După cum am menționat mai sus, foarte important într -un motor pas cu pas este
partea mecanică. Astfel pentru a putea exprim a performanț a unui motor pas cu pas
trebuie să se țină cont și de parametri mecanici: sarcină, frecare și inerție .
Performanța unui motor pas cu pas depinde foarte mult de parametrii mecanici ai
sarcinii. Sarcina este definită ca acel lucru pe care motorul trebuie să -l acționeze . Sarcina
(sau încărcarea) motorului apare de obicei datorită frecării sau inerției precum și o
combinație a celor două.
Frecarea este rezistența opusă mișcării datorată asperității suprafețelor care se
ating una de alta. Frecarea este proporțională cu viteza. Pentru a efectua un pas este
nevoie de un moment cel puțin egal cu frecarea. Odată cu creșterea sarcinii crește și
frecarea, astfel viteza scade, accelerația crește și totodată crește și eroarea de poziție .
Astfel trebuie să se țină cont în alegerea motorului pas cu pas de sarcina pe care trebuie
să o acționeze și de condițiile tehnologice care trebuie îndeplinite (viteză, accelerație ,
poziționare cu eroare cât mai mică etc.).

24
Inerția poate fi definită ca fiind opoziția la schimbările de viteză. O sarcină cu inerție
mare are nevoie de un moment inerțial mare la pornire dar și la oprire. O sarcină inerțială
mare va crește stabilitatea vitezei, dar va crește și timpul necesar ajungerii la vite za dorită
și va scădea rata de porniri/opriri pe unitatea de timp.
Rotorul va oscila odată cu creșterea /scăderea sarcinii inerțiale și/sau frecării.
Această relație nedorită între oscilația rotorului, inerție și frecare poate fi redusă prin
amortizare meca nică dar mai simplu este eliminarea (sau mai bine zis amortizarea, căci
aceste oscilații nu pot fi eliminate complet) acestor oscilații nedorite pe cale electrică prin
schimbarea din modul de pășire întreg în modul de pășire jumătate de pas.
O caracterist ică importantă a unui motor pas cu pas este răspunsul unghiular la
efectuarea unui pas.

Fig. 2. 14 Răspunsul unghiular la efectuarea unui pas
web.ulbsibiu.ro (Laurean Bogdan)
Când este aplicat un impuls electric motorului pas cu pas, rotorul are o mișcare
unghiulară cum se vede în figura 2.14. Timpul t este timpul necesar rotorului să se
rotească cu un pas odată ce un impuls electric a fost aplicat. Acest timp este dependent
de raportul dintre moment și sarcină. Din moment ce cuplul este o funcție de deplasare
rezultă că accelerația va fi și ea dependentă de deplasare. De aceea, când un motor
efectuează pași mari (adică pășire întreagă, nu jumătate de pas sau micro -pășire ) o da tă
cu un moment mare , apare și o accelerație mare. Acest lucru poate cauza răspunsul din
figura 2.14. Timpul T este timpul necesar acestor oscilații pentru a se amortiza. În unele
aplicații care necesită o mare precizie și un răspuns cât mai rapid aceste oscilații nu sunt
dorite. Este posibil să se reducă și chiar să fie eliminate prin micro -pășire .
Fenomenul de rezonanță poate apărea la anumite viteze de pășire . El se manifestă
prin pierderi de cuplu care au ca urmare faptul că motorul poate „sări” (sunt pierduți )
pași și automat apare o desincronizare. Acest fenomen apare când impulsurile de intrare
au aceiași frecvență cu frecvența naturală de oscilație a motorului ( frecvența de
rezonanță ). Acest fenomen de rezonanță apare datorită construcției de bază a motoarelor

25
pas cu pas și nu poate fi eliminat complet, doar redus prin micro -pășire și de asemenea
este dependent de sarcina pe care o acționează
Dacă ar fi să facem o clasificare a motoarelor pas cu pas cea mai edificatoare ar fi
clasificarea l or în :
▪ Motoare pas cu pas cu reluctanță variabilă,
▪ Motoare pas cu pas cu magnet permanent,
▪ Motoare pas cu pas hibride.
2.8.1. Motoare pas cu pas cu reluctanță variabilă
Acest tip de motor este cunoscut de foarte mult timp. În figura 2.15 este prezentată
o secțiune printr -un motor pas cu p as cu reluctanță variabilă . Motorul este alcătuit dintr –
un rotor și un stator, fiecare cu număr diferit de dinți . Poate fi diferențiat ușor de un motor
cu magnet permanent deoarece „se învârte ușor ”, fără nici o reținere , în momentul rotirii
rotorului cu mâna.

Fig. 2. 15 Motor cu reluctanță variabilă
web.ulbsibiu.ro (Laurean Bogdan)
Statorul motorului este alcătuit dintr -un miez ma gnetic construit din lamele de oțel.
Rotorul este construit din fier moale nemagnetizat cu dinți și șanțuri .
Relația dintre unghiul de pășire , dinții rotorului și dinții statorului este următoarea:
𝜓=(𝑁𝑠−𝑁𝑟
𝑁𝑠 𝑥 𝑁𝑟)𝑥360 (2.4)
În care:
▪ Ψ – pas unghiular,
▪ Ns – numărul de dinți pe stator,
▪ Nr – numărul de dinți pe rotor.
2.8.2. Motoare pas cu pas cu magnet permanent
Principiul de funcționare al motorului pas cu pas cu magnet permanent este foarte
simplu și constă în reacția dintre rotorul din magnet permanent și un câmp magnetic
creat de stator.

26
În figura 2.16 este prezentat statorul motorului cu bobinele și polii acestuia precum
și statorul din magnet permanent.

Fig. 2. 16 Statorul motorului
web.ulbsibiu.ro (Laurean Bogdan)
Acest tip de motoare pas cu pas se poate împărți la rândul său, în mai multe
categorii în funcție de modul de conectare al bobinelor:
▪ Motoare pas cu pas cu magnet permanent unipolare,
▪ Motoare pas cu pas cu magnet permanent bipolare,
▪ Motoare pas cu pas cu magnet permanent multifază (sunt mai rar întâlnite).
De menționat ar fi că motoarele pas cu pas cu reluctanță variabilă sunt de tip
unipolar și bipolar, iar construcția lor este exact ca cea a motoarelor pas cu pas cu magnet
permanent. Aceste tipuri de motoare în clasificarea motoarelor pas cu pas cu magnet
permanent sunt mai des întâlnite.
2.8.3. Motoare pas cu pas hibride
Motoarele pas cu pas probabil sunt cele mai des utilizate și răspândite tipuri de
motoare. La început au fost create ca motoare sincrone cu magnet pe rmanent de viteză
mică. Ele sunt o combinație dintre un motor cu reluctanță variabilă și un motor cu magnet
permanent, de unde și denumirea de motoare hibride.
Motorul hibrid este alcătuit dintr -un rotor format din doi poli separați de un magnet
permanent axial, cu dintele opus deplasat față de dintele corespunzător , cu o distanță
egală cu jumătate din înălțimea unui dinte pentru a permite o rezoluție mai mare la pășire
(figura 2.17).

27

Fig. 2. 17 Motorul hibrid în secțiune și un detaliu al modului de amplasare a dinților
web.ulbsibiu.ro (Laurean Bogdan)
Cererea tot mai mare de motoare pas cu pas cu performanțe remarcabile și un
zgomot redus a dus la apariția a două tipuri de motoare hibride:
▪ Moto arele hibride cu 2 (4) faze – folosit în aplicații obișnuite ;
▪ Motoarele hibride cu 5 faze – folosite în aplicații speciale deoarece oferă
următoarele avantaje față de alte tipuri de motoare: rezoluție mare, zg omot mic în
timpul funcționării și moment de reținere mic.
Deși toate aceste avantaje fac din el un motor foarte performant, acest lucru atrage
după sine și un cost semnificativ mai mare al driver -elor. Deci în alegerea unui motor pas
cu pas, de orice tip ar fi el, trebuie să se țină cont în primul rând de cerințele aplicației în
care va fi folosit și în al doilea rând, de prețul motorului.
În figura 2.18 sunt prezentate secțiuni transversale prin motoare hibride cu 2, 3 și
5 faze.

Fig. 2. 18 Secțiuni trans versale prin motoare pas cu pas hibride
web.ulbsibiu.ro (Laurean Bogdan)
În cazul motoarelor pas cu pas hibride un număr de faze mai mare însemna un cost
mai mare. Odată cu implementarea tehnologiei de conducere sinusoidală în 3 faze a fost
posibilă scăde rea numărului de faze ale motorul ui, deci și costul de producție . Rezoluția
motorului (numărul de pași /rotație ) fiind determinată de numărul de perechi de poli în
rotor.
2.8.4. Alegerea motorului pas cu pas
Pentru această lucrare s -a ales un motor hibrid, bipolar , capabil să facă 200 de pași
pe revoluție (Full Step), respectiv 400 de pași (Half Step).

28

Fig. 2. 19 Motor pas cu pas NEMA17

Fig. 2. 20 Dimensiunile motor ului pas cu pas NEMA 17
Tabel 2. 4 Specificațiile motorului pas cu pas NEMA17
Caracteristică Valoare
Pas unghiular 1,8o
Număr de faze 2
Rezistența izolării 100MΩmin/(500V DC)
Clasa de izolație B
Inerția rotorului 38g/ 𝑐𝑚2
Greutate netă 0,2 Kg
Tensiune nominală 12V
Curent nominal 0,4A
Rezistența pe fază 30Ω±10%
Inductanța pe fază 37mH ±20%
Cuplul la pornire 260mN/m

29
Cuplul de blocare 12mN/m
2.9. Rulmenți i liniari și axele liniare
Rulmenți i împreună cu axele liniare ajută la menținerea stabilității senzorului în
timpul deplasării pe verticală.

Fig. 2. 21 Rulment liniar
Fig. 2. 22 Axe liniare

Caracteristicile rulmenților liniari sunt:
▪ Diametru interior: 8mm
▪ Diametru exterior: 15mm
▪ Înălțime: 45mm. Caracteristicile axelor liniare sunt:
▪ Diametru: 8mm
▪ Înălțime: 200mm.

2.10. Tija filetată
Tija filetată utilizată la construcția scanerului este prezentată în figura 2.23. Aceasta
a fost aleasă în funcție de pasul filetului și diametrul acesteia. Adițional , tija este
prevăzută și cu un sistem de poziționare , în vederea deplasării convenabile pe verticală.
Caracteristicile principa le ale tijei sunt:
▪ pasul filetului – 2mm,
▪ diametrul tijei de 8 mm,
▪ lungimea tijei – 215mm.

Fig. 2. 23 Tijă filetată

30
2.11. Alte piese ce ajută la asamblarea Scanerului 3D
Pentru asamblarea componentelor din structura scanerului 3D s -au proiectat o
serie de piese cu ajutorul soft -ului Autocad.

Fig. 2. 24 Piesele în format digital
După proiectarea lor în formă digitală acestea au fost realizate practic cu ajutorul
unei imprimante 3D.

Fig. 2. 25 Printarea componentelor și rezultatul final
2.12. Conectivitatea Componentelor hardware și asamblarea sistemului integrat
al scanerului 3D
În fi gura 2.26 și 2.27 sunt prezentate conectivitatea componentelor și realizarea
practică a conectării componentelor pe ci rcuitul imprimat. In figura 2.26 este prezentată
conectica scanerului 3d în varian tă proiectată iar în figura 2.27 în variantă reală.

31

Fig. 2. 26 Conectivitatea componentelor hardware

Fig. 2. 27 Realizarea practică a conectivității componentelor hardware
Datorită încălzirii driverelor s -a adăugat și un sistem de răcire ale acestora.
Sistemul de răcire constă dintr -un ventilator care este conectat la sursa de alimentare a
scanerului 3D. Întregul sistem de comandă proiectat și realizat a fost introdus într -o
carcasă confecționată din plexiglas transparent. În figura 2.28 este prezentată varianta
integrată scanerului 3D.

32

Fig. 2. 28 Sistemul de scanare 3D

33
CAPITOLUL 3. PREZENTAREA MODULELOR SOFTWARE UTILIZATE ÎN CADRUL
SISTEMULUI DE SCANARE
3.1. Implementarea software
Programele Arduino se pot scrie în orice limbaj de programare. Atmel oferă un
mediu de dezvoltare pentru microcontrolerele sale, AVR Studio și mai nou, Atmel Studio.
Proiectul Arduino oferă un mediu integrat de dezvoltare (IDE), care este o aplicație
cross -platform, scrisă în Java. Originile sale se regăsesc în mediul de dezvoltare pentru
limbajul de programare Processing și în proiectul Wiring. Este proiectat pentru a
introduce programarea în lumea tuturor celor nefamiliarizați cu dezvoltarea software.
Include un editor de cod cu funcții ca : evidențierea sintaxelor, potrivirea acoladelor și
spațierea automată . Oferă meca nisme simple cu un singur click pentru a compila și a
încărca programele în microcontrolerul Arduino. Un program scris în IDE pentru Arduino
se numește sketch.
Arduino IDE suportă limbajele de programare C și C++ folosind reguli speciale de
organizare a codului. Arduino IDE oferă o librărie software numită Wiring, care oferă
multe proceduri comune. Un sketch tipic Arduino scris în C/C++ este compus din două
funcții care sunt compilate și într -un program executabil cu o execuție ciclică:
▪ setup(): o funcție care este rulată o singură dată la începutul programului, când se
inițializează setările.
▪ loop(): o funcție apelată în mod repetat până la oprirea alimentării cu energie a
plăcuței.
3.1.1. Prezentarea software -ului Scanerului 3D
În ca drul acestei lucrări limbajul de programare folosit pent ru a programa
microcontrolerul este C++. Codul conține următoarele funcții:
▪ void setup() – inițializează portul Serial (card -ul SD)
▪ void loop() – repetarea algoritmului principal
▪ double readAnalogSensor() – transforma semnalul din analog în distanță [cm] .
Distanța finala fiind media a 100 de citiri ale senzorului
▪ void writeToSD() – Scrie distanța [cm] pe card -ul de memorie într -un fișier text

34

void loop()

1 2
writeToSD()

3

În figura 3.1 este prezentat principiul de funcționare a programului principal. Adică,
după ce motorul pas cu pas (motorul care rotește obiectul) face 1 pas, senzorul de
distanță începe sa citească valori cat timp condiția din chenarul 3 este îndeplinită. După
fiecare ciclu (pas), valoarea rezultată din funcția readAnalogSensor() este stocată într -un
fișier de tip text.
Condiția din c henarul 3 poate fi modificată î n funcția void s etup(). Putem seta
driver -ul motorului astfel încât acesta să facă într -o revoluție 200 sau 400 de pași. Pentru
a putea face asta , trebuie apelată funcția digitalWrite() din librăria Arduino IDE.
Pentru 200 de pași:
digitalWrite(Motor_Sup_MS1,LOW);
digitalWrite(Motor_Sup_MS2,LOW);
Pentru 400 de pași:
digitalWrite(Motor_Sup_MS1,HIGH);
digitalWrite(Motor_Sup_MS2,LOW);
Aceste condiții determină numărul de pași pe care motorul îi face într -o rotație
completă, implicit numărul de puncte de citir e al senzo rului infraroșu. Cu câ t senzorul
citește mai multe puncte cu atât rezoluția obiectului scanat va fi mai mare. Trebuie ținut
cont de faptul că timpul de scanare va dura de două ori mai mult în cazul în care motorul
Stocarea
distanței pe
Cardul SD
Condiție
Nr. pașilor ≤ 200 sau
400
1 pas (MPP suport)
readAnalogSensor()

Fig. 3. 1 Diagrama de funcționare a programului principal

35
va face 400 de pași în loc de 200. După fi ecare revoluție, în fișierul text se va scrie o
valoarea aleatoare.
În cazul programului folosit în această lucrare, valoarea este 12345 . Aceasta valoare
se folosește în programul de procesare a datelor pentru a delimita citirile.

În figura 3.2 este prezentat principiul de funcționare a funcției readAnalogSensor() .
Inițial se declară a cate valori citite să se facă media ( în cazul acesta 100). Valoarea finală
este transformată în tensiune. Având în vedere ca microcontrolerul folosit are în
componența sa 9 canale de 10 biți ADC (Analog digital convertor), valorile citite sunt
cuprinse în inte rvalul 0 – 1023 (1024 sau 210 valori ).
Pentru a converti aceste valori în tensiune se va folosi funcția map() . Deoarece
precizia este un factor important se va utiliza mapDouble().
Distanta=mapDouble(Distanta,0.0,1023.0,0.0,5.0);
double mapDouble(double x, double in_min, double in_max , double out_min, double
out_max){
return (x – in_min) * (out_max – out_min) / (in_max – in_min) + out_min;}

Citire valor i de la
senzor
(analog)
Calculează media a
100 de valori
Conversie din
analog în tensiune
[V]
Converise din
tensiune [V] în
distanță [cm]
Distanța
[cm]
Fig. 3. 2 Diagrama de funcționare a funcției readAnalogSensor

36
(Distanta,0.0,1023.0,0.0,5.0)
În care:
▪ Distanța – Valoarea pe care o vrem scalată
▪ 0.0 – Limita inferioară a intervalului curent în care se află va loarea citită
▪ 1023 – Limita superioară a intervalului curent în care se află valoarea citită
▪ 0.0 – Limita inferioară a intervalului țintă al valorii
▪ 5.0 – Limita superioara a intervalului țintă al valorii.
Tensiunea pe care senzorul o poate returna este cu prinsă între 0 și 5V.
Tensiunea rezultată în urma citirilor senzorului este transformată la rândul ei intr –
o distanță in centimetri. Pentru a face asta producătorul senzorului ne pune la dispoziție
următorul grafic.

Fig. 3. 3 Relația dintre tensiune și distanță
sharp -world.com

Pentru că acest grafic nu prezintă o acuratețe foarte mare s -a ales calibrarea
manuală a senzorului, măsurând cu rigla distanța de la senzor la un obiect oarecare și
observarea tensiunii returnate. În urma măsurătorilor la un interval de 0,5 centimetri au
rezultat valorile prezentate în tabelul 3.1.

37
Tabel 3. 1 Distanța în funcție de tensiune
Tensiune [V] Distanța [cm]
1,48 3,5
1,30 4
1,19 4,5
1,08 5
1,00 5,5
0,92 6
0,87 6,5
0,80 7
0,74 7,5
0,70 8
0,66 8,5
0,65 9
0,61 9,5
0,59 10
0,55 10,5
0,53 11
0,51 11,5
0,50 12
0,48 12,5
0,46 13
0,44 13,5
0,43 14
0,42 14,5
0,41 15

3.1.2. Modelul matematic al senzorului
Pentru realizarea modelului matematic care descrie funcționarea senzorului se
alege o funcție de aproximare F(x) de forma:

38

1
11
1 2 1
1… …p
j p p
j p p
jF x a x a x a x a x a


          (3.1)

Pentru funcția tabelară considerată, regresia polinomială folosește o funcție de
aproximare de forma unui polinom de grad p . Pentru o precizie mai bună s -a ales o
regresie polinomială de gradul 3. Forma acestei ecuații este:

32
1 2 3 4 y a x a x a x a       (3.2)
În care:
▪ y – va fi valoarea distanței finale [cm],
▪ a1 , a2, a3, a4, – coeficienții funcției de regresie,
▪ x – valoarea tensiunii în [V].
Determinarea funcției de regresie polinomială presupune calculul celor p+1
coeficienți a1, a2, … , a (p+1) folosind cele n perechi (x k, yk) asociate punctelor în care este
definită funcția F(x), astfel încât să se asig ure valoarea minimă a abaterii . Acest calcul se
realizează prin determinarea derivatelor parțiale în raport cu fiecare dintre coeficienți și
terminând cu rezolvarea sistemelor de ecuații care se formează. La o regresie polinomială
de gradul 3 sistemul va avea patru ecuații cu patru necunoscute. Acestea se pot determina
utilizând rezolvarea calculului matriceal din relația 3.3.

23
1 1 1 1
1 234
1 1 1 1 1 2
2 3 4 5 2 3
1 1 1 1 1 4
3 4 5 6 3
1 1 1 1 1n n n n
k k k k
n n n n n
k n n k k
n n n n n
k n n n k
n n n n n
k k k k kn x x x y
ax x x x x ya
ax x x x x y
a
x x x x x y   
    
    
       
   
   
         
              
           
    
    
    




 (3.3)

În general, sistemul liniar astfel obținut este rău condiționat, astfel încât erorile de
rotunjire care apar in cursul calculelor conduc la obținerea unor rezultate mult diferite
de cele reale. Acest lucru se întâmplă cu a tât mai probabil cu cât gradul polinomului de
aproximare F(x) este mai mare. În practică, atunci când se lucrează în simplă precizie, un
grad p>7 conduce, de regulă, la rezultate fără semnificație reală. Din acest motiv, precum
și în scopul reducerii timpu lui de calcul, în practica se utilizează polinoame de regresie cu
grad cât mai redus.
Pentru a determina coeficienții funcției de regresie care ap roximează modelul
matematic ce descrie funcționarea senzorului s -a folosit softul Matlab. În cadrul
programulu i s-au folosit următoarele funcții:
▪ polyfit,

39
p = polyfit(Tensiune,Distanta, 3);
▪ polyval,
pp = polyval(p, Tensiune);

În urma rulării programului Calibrare_senzor.m se obține graficul prezentat în
figura 3.4. Astfel, coeficienții funcției de regresie polinomială de gradul 3 au valorile: a 1 =-
16,2948, a 2 =57,6199 , a 3 =-71,1292, a 4 = 35,1927.

Fig. 3. 4 Regresia polinomiala de gradul 3
Și următoarea ecuație:
𝑦=−16,2948 𝑥3+57,6199 𝑥2−71,1292 𝑥+35,1927 (3.3)
Unde, y reprezintă distanța finală stocată pe cardul de memorie.
Stocarea pe card -ul de memorie micro SD se face apelând funcția writeToSD() . În
cadrul acestei funcții s -au folosit următoarele sintaxe:
Pentru deschiderea fișierului:
ValScan = SD.open( filename, FILE_WRITE);
Pentru scrierea valorii distanței în fișier:
ValScan.print(Distanta);

40
Pentru închiderea fișierului:
ValScan.close();
3.1.3. Prezentarea softului de procesare a datelor
Pentru a procesa datele aflate pe card -ul de memorie se va folosi Matlab. Scopul
scriptului este de a prelua datele de pe fișierul te xt, aflat pe card -ul de memorie și de a le
prelucra astfel încât la final sa rezulte forma 3D a obiectului scanat.

Fig. 3. 5 Principiul de funcționare a programului de procesare a datelor
În cadrul acestui program procesarea datelor se face utilizând diferite funcții ale
librăriilor Matlab.
Pentru a șterge datele eronate citite de senzor, cum ar fi cele negative sau cele mai
mari decât limita acestuia de citire, se impun următoarele restricții:
▪ Valoarea maximă din fișierul text sa nu depășească valoarea 15. Toate valorile mai
mari decât valoarea 15 vor fi șterse.
▪ Valoarea minimă să nu fie mai mică decât 0. Toate valorile negative vor fi șterse .
Se dorește să se creeze o matrice “r”, unde fiecare rând corespunde înălțimii pe Z.
Pentru crea matricea se folosește următoarea metodă:
r(1,:) = date(1:delimitator(1));
for i=2:1:size(delimitator,1)
r(i,:) = date(delimitator(i -1)+1:delimitator(i));
end
Pentru a delimita rândurile ce corespund înălțimii, se atribuie variabilei delimitator
valoarea 12345. Această valoare a fost scrisă în fișierul text după fiecare rotație completă,
conform programului C++.
Se va crea și o matrice “teta” cu aceiași mărime ca matricea “r”, unde fiecare coloană
din “r” corespunde unei orientări.
teta=360: -360/size(r,2):0
teta(end) = [];
teta = repmat(teta,[size(r,1) 1]);
teta= teta*pi/180;

Încărcarea
datelor
Procesarea
datelor
Form a 3D a
obiectului

41
Se va mai crea și matricea “z’ ”, unde fiecare rând corespunde unei înălțimi Z.
z=0:zDelta:size(r,1)*zDelta;
z(end)=[];
z=z';
z=repmat(z,[1,size(r,2)]);
[x,y,z] = pol2cart(teta,r,z);

Funcția repmat creează o matrice B, de dimensiune MN, unde toate variabilele sunt
copii ale lui A. Dacă A este o matrice, atunci dimensiunea lui B este [size(A,1)*M,
size(A,2)*N].
Funcția pol2cart transformă elementele corespunzătoare ale datelor stocate în
coordonate polare (unghi Teta, raza R) în coordonate carteziene X, Y. Matricele TH și R
trebuie sa aibă aceeași mărime (sau oricare poate fi scalar). TH trebuie să fie în radiani .
După ce se obțin coordonatele carteziene, acestea se interpolează cu ajutorul
funcției interp , apoi se obține modelul 3D a obiec tului cu ajutorul funcției
plot3(xInterpolat, yInterpolat, zInterpolat);.
Datorită scriptului dezvoltat de Bill McDonald, putem converti suprafața 3D
obținută din programul PROCESARE_DATE.m într-un format .STL. Acest format este
recunoscut de majoritatea s oft-urilor de modelare 3D. De asemenea acest format este
cunoscut și de majoritatea imprimatelor 3D.
3.2. Rezultate
Pentru testarea scanerului s -a ales un obiect oarecare. Acesta este fabricat dintr -un
plastic alb și are o textura mată. Înainte de a începe scan area s -a ținut cont și de
recomandările producătorului senzorului IR și anume poziționarea obiectului față de
senzor.

Fig. 3. 6 Poziționarea corectă a obiectului față de senzor
www.polulu.com

42

Fig. 3. 7 Obiectul real
Pentru această scanare s -au utilizat următorii parametri
▪ Pasul unghiular = 1.8o (200 de pași ai motorului)
▪ Distanța rezultată din media a 10 citiri.
După terminarea scanării obiectului s -a rulat script -ul de procesare a datelor. În urma
rulării script -ului s -au obț inut rezultatele din figura 3.8 și figura 3.9 .

Fig. 3. 8 Rezultatul în urma rulării script -ului
Fig. 3. 9 Rezultatul după finisare
Se poate observa că folosind acești parametri scanerul poate determina forma 3D
aproximativă a obiectului. În figura 3.8 se pot vedea mici “denivelări” pe suprafața
modelului 3D datorate rezoluției senzorului IR.
În figura 3.9 este prezentat rezultatul final. Modelul 3D a fost retușat cu ajutorul
softului Blender.
Pentru a putea face o comparație s -au modificat parametrii scanerului și s -a scanat
același obiect.
Pentru această scanare s -au utilizat următorii parametri
▪ Pasul ung hiular = 0,9o (400 de pași ai motorului)
▪ Distanța rezultată din media a 100 citiri.

43
a. b.
Fig. 3. 10 Diferența dintre parametrii scanerului
În figura 3.10 (a) este modelul scanat anterior iar în figura 3.10(b) este modelul
scanat utilizând parametrii de mai sus. Se poate observa că “denivelările” de pe suprafața
modelului sunt reduse semnificativ față de prima scanare.
Obiectul a fost scanat atât într -un mediu cu grad de lumină normală cât și cu lumină
scăzută (aproape inexistentă) , rezultatul fiind același.

Durata scanarilor este:
Tabel 3. 2 Timpul de scanare
Parametrii Pas unghiular [xo] Media
cu Timp (t)
[s/rotație]
a 1,8 10 50
b 0,9 100 180

Astfel putem calcula timpul total cu următoarea relație:
𝑇𝑡=𝑡 𝑥 𝛥𝑧+ 𝛥𝑧 (3.4)

În care:
▪ Tt – este timpul total al scanării;
▪ t – este timpul definit în tabelul 3.2;
▪ Δz – reprezintă numărul total de urcări pe axa Z
Desigur se pot aduce îmbunătățiri precum un senzor cu o rezoluție mai mare pentru
a facilita calibrarea acestuia sau o multitudine de senzori pentru a diminua timpul de
scanare.
În concluzie putem spune că obi ectivele acestei lucrări atât din punct de vedere
economic cât și tehnic au fost îndeplinite.

44
CAPITOLUL 4. CONCLUZII
Un scanner 3D este un dispozitiv care analizează obiecte din lumea reală sau
mediul în conjurător și colectează datele în vederea construirii unor modele digitale
tridimensionale, într -un format compatibil cu diferite software -uri de modelare 3D . La
ora actuală sunt utilizate o multitudine de tehnologii pentru a construi dispozitive 3D de
scanare, fiecare dintre acestea venind cu propriile limitări, avantaje, dezavantaje și/sau
costuri.
Eficiența dovedită în ultimii ani a sistemelor optice de scanare 3D a motivat marile
companii din sectorul industrial să își îndrepte atenția către acestea.
Prezentul proiect de diplomă a avut drept obiectiv proiectarea și realizarea
unui sistem de scanare 3D , utilizând un senzor de distanță în infrar oșu și testarea
rezu ltatelor în diferite condiții de funcționare . Sistemul proiectat a fost dezvoltat
utilizând microcontrolerul Arduino Pro Micro și a două drivere pentru controlul
motoarelor pas cu pas. Un motor folosit pentru dispozitivul de poziționare pe care se
află senzorul în IR și unul pentru dispozitivul de rotire a obiectului de scanat. Pentru
stocarea informațiilor oferite de senzorul de distanță s -a utilizat un cititor de card -uri
de memorie alături de un card Micro SD, datele fiind salvate într -un fișier de tip text.
Pentru procesarea datelor de tip text achiziționate cu senzorul IR s -a utilizat softul
Matlab R2016a , în vederea:
▪ declarării variabilelo r principale, respectiv limita maximă și minimă a domeniului
de sca nare ;
▪ procesării datelor introduse, respectiv de a elimina valorile dat elor care ies din
limita impusă;
▪ realizării unei matrice R în care rândurile matricei reprezintă un rând al înălțimii
obiectului de scanat ;
▪ realizării unei matrice TETA, de aceleași di mensiuni ale matricei R, în care se
atribui e o orientare a matricei î n jurul unui punct;
▪ realizării unei matrice Z, pentru aranjarea înălțimilor dintre rândurile de scanare;
▪ transformarea celor 3 matrice elab orate în coordonate carteziene;
▪ interpolarea dat elor în vederea pentru obținerii formei finale 3D a obiectului.
Dificultățile întâlnite în urma realizării acestui proi ect au fost datorate senzorului,
deoarece nu poate citi cu precizie distanța dintre acesta și obiectele fabricate dintr -un
material cu em isivitate mare sau de culori închise , care tind spre negru. De asemenea ,
senzorul are dificultăți în a citi distanța față de obiectele ascuțite.
În urma testelor făcute atât într -un mediu lipsit de lumină , cât și într-unul cu
lumin ă normală , rezultatul a f ost același.
Desigur se pot aduce îmbunătățiri sistemului de scanare 3D prin alegerea unui
senzor cu o rezoluție mai mare, în vederea facilit ării calibr ării acestuia sau alegerea unei
multitudin i de senzori , pentru a reduce timpul de scanare.

45
În concluzie , putem spune c ă obiectivul acestei lucr ări a fost îndeplinit atât din
punct de vedere tehnic (scanerul să nu fie afectat de lumina ambientală) cât și din punct
de vedere econo mic , prin identificarea unor componente hardware cu prețuri și mai
reduse.

46
BIBLIOGRAFIE
[1] http://lmi3d.com/company/digital -hub/blog/3d -scanners -laser -versus -white -light
[2] http://math.ubbcluj.ro/~tgrosan/2012CursAppAnNum05.pdf
[3] http://web.ulbsibiu.ro/laurean.bogdan/html/MPP_Constructie_Functionare.pdf
[4] http://ww1.microchip.com/dow nloads/en/DeviceDoc/Atmel -7766 -8-bit-AVR-ATmega16U4 –
32U4_Summary.pdf
[5] http://www.intmath.com/blog/mathematics/how -to-find-the-equati on-of-a-quadratic -function –
from -its-graph -6070
[6] http://www.rasfoiesc.com/educatie/informatica/matlab/Aproximarea -numerica -a-functii45.php
[7] http://www.sciencedirect.com/science/article/pii/0270025587906415
[8] http://www.sharp -world.com/products/device/lineup/data/pdf/datasheet/gp2y0a51sk_e.pdf
[9] https://acroname.com/articles/linearizing -sharp -ranger -data
[10] https://cdn.sparkfun.com/datasheets/Robotics/A3967 -Datasheet.pdf
[11] https://en.wikipedia.org/wiki/3D_scanner
[12] https://learn.sparkfun.com/tutorials/pro -micro –fio-v3-hookup -guide
[13] https://www.arduino.cc/en/Reference/DigitalWrite
[14] https://www.arduino.cc/en/Reference/Map
[15] https://www.arduino.cc/en/Tutorial/DumpFile
[16] https://www.ems -usa.com/tech -papers/3D%20Scanning%20Technologies%20.pdf
[17] https://www.mathworks.com/help/matlab/ref/interp1.html
[18] https://www.mathworks.com/help/matlab/ref/polyfit.html
[19] https://www.mathworks.com/help/matlab/ref/polyval.html
[20] https://www.mathworks.com/help/matlab/ref/repmat.html
[21] https://www.mathworks. com/matlabcentral/answers/309616 -how -to-turn -my-x-y-z-into-stl-
using -surf2stl
[22] https://www.mathworks.com/matlabcentral/newsreader/view_thread/44630

47 ANEXA 1
 
/*
* Conexiunea cititorului de card * ‐ MOSI ‐ pin 16
* ‐ MISO ‐ pin 14
* ‐ CLK ‐ pin 15 * ‐ CS ‐ pin 10
*
* ‐ Senzorul IR (SHARP GP2Y0A51SK0F: 2‐15cm, 5V):
* ‐ IR_pin ‐ A3
* * Motorul suportului:
* ‐ STEP ‐ pin 2
* ‐ DIR ‐ pin 3 * ‐ MS1 ‐ pin 4
* ‐ MS2 ‐ pin 5
* ‐ Enable ‐ pin 6 *
* Motorul Senzorulu IR (pe axa Z)
* ‐ STEP ‐ pin 7 * ‐ DIR ‐ pin 8
* ‐ MS1 ‐ pin 9
* ‐ MS2 ‐ pin 18 (A0 ‐ Arduino Pro Micro ) * ‐ ENABLE ‐ pin 19 (A1 ‐ Arduino Pro Micro )
*/

#include <SPI.h>
#include <SD.h>
File ValScan;
String filename="scan.txt"; int CS_pin=10;
int IR_pin=A3;
int Motor_Sup_Step=2;
int Motor_Sup_Dir=3;
int Motor_Sup_MS1=4; int Motor_Sup_MS2=5;
int Motor_Sup_Enable=6;

int Motor_IR_Step=7;
int Motor_IR_Dir=8;

48 int Motor_IR_MS1=9;
int Motor_IR_MS2=18;
int Motor_IR_Enable=19;
void setup()
{
//Definirea pinilor driverelor motoareleor ca iesiri digitale
pinMode(Motor_Sup_Step,OUTPUT);
pinMode(Motor_Sup_Dir,OUTPUT);
pinMode(Motor_Sup_MS1,OUTPUT);
pinMode(Motor_Sup_MS2,OUTPUT);
pinMode(Motor_Sup_Enable,OUTPUT); pinMode(Motor_IR_Step,OUTPUT);
pinMode(Motor_IR_Dir,OUTPUT);
pinMode(Motor_IR_MS1,OUTPUT); pinMode(Motor_IR_MS2,OUTPUT);
pinMode(Motor_IR_Enable,OUTPUT);
// MOTOR SUPORT ‐ Activarea micropasilor: 1/2 pasi (MS1 High, MS2 Low) = 0.9
grade/pas (400 pasi/rot)
digitalWrite(Motor_Sup_MS1,HIGH); digitalWrite(Motor_Sup_MS2,LOW);
/*
// MOTOR SUPORT: Dezactivarea micropasilor (MS1 Low, MS2 Low) = 1.8 grade/pas
(200 pasi/rot)
digitalWrite(Motor_Sup_MS1,LOW); digitalWrite(Motor_Sup_MS2,LOW);
*/
// MOTOR SENZOR IR: fara micropasi (MS1 Low, MS2 Low) = 1.8 g rade/pas (200
pasi/rot) ‐‐> (200 pasi/10 //mm). Atunci la 20 pasi vom avea 1 mm deplasare pe axa Z
digitalWrite(Motor_IR_MS1,LOW);
digitalWrite(Motor_IR_MS2,LOW);
//Activare drivere motor
digitalWrite(Motor_Sup_Enable,LOW); digitalWrite(Motor_IR_Enable,LOW);

// Activare comunicatii seriale Serial.begin(9600);

//Afisare pe Serial Monitor
Serial.print("Initializing SD card… ");
if (!SD.begin(CS_pin))

49 {
Serial.println("initializare esuata!");
return;
} Serial.println("initializare cu success!");

} void loop()
{
int Distanta_pe_Z=1 2; //Total distantei pe care ne‐o dorim pe ntru senzorul IR pe axa Z
int nr_pasi_Motor_IR=20; //Numarul pasilor motorului IR dupa o rotire completa a
motorului suport: //Distance = nr_pasi_Motor_IR*0.05mm/pas int nr_rot_Motor_IR=(200/1*Distanta_pe_Z)/nr_pasi_Motor_IR; / /Numarul total al
rotatiilor //Motorului_IR, dupa c are se intoarce in punctul 0
int nr_pasi_Motor_Sup=400; // Ca nd sunt activati micropasii
//int nr_pasi_Motor_Sup=200; // Can d nu sunt activati micropa sii

// Scanarea obiectului digitalWrite(Motor_IR_Dir,LOW);
for (int j=0; j<nr_rot_Motor_ IR; j++) //Rotirea Motorului_IR ‐‐ repetitiva
{ for (int i=0; i<nr_pasi_Motor_Sup; i++) //Rotirea complet a a Motorului_Sup (400 sau
200 pasi), citirea //senzorului si incarcarea datelor pe Cardul de memorie
{
rotateMotor(Motor_Sup_Step, 1); // Rotirea Motorului_Sup 1 pas
delay(200); double Distanta=0; //R eseteaza Distanta;
Distanta=readAnalogSensor(); //citeste senzorul IR sensor , si calculeaza distanta
writeToSD(Distanta); // Scrier ea distantei pe cardul SD i n fisierul creat ("scan.txt")
}

rotateMotor(Motor_IR_Step, nr_pasi_Motor_IR); // Motorul_IR d a c e 2 0 d e p a s i
//(nr_pasi_Motor_IR=20). Senzorul se deplaseaza cu 1mm pe axa Z
delay(1000);
writeToSD(12345); //Scrierea un ei variabile aleatoare pentr u a ne ajuta sa delimitam
unde incepe //urmator ul rand de scanari.
}
// Daca Sensorul a atins distan ta impusa ( Distanta_pe_Z=12), motorul se roteste pana
cand senzorul //aju nge inapoi in 0
digitalWrite(Motor_IR_Dir,HIGH);
delay(10);
for (int j=0; j<nr_rot_Motor_IR; j++)

50 {
rotateMotor(Motor_IR_Step, nr_pasi_Motor_IR);
delay(10);
} for (int k=0; k<3600; k++) // Sca nerul trece in stand‐by pent ru 1 ora (3600 sec)
{
delay(1000); }
}
void rotateMotor(int pinNr, int pasi)
{
for (int i=0; i<pasi; i++) {
digitalWrite(pinNr, LOW); // Fluctuatiile de la LOW la HIGH spune driver‐ului cand sa
faca pasul delay(1);
digitalWrite(pinNr, HIGH); // ‐||‐
delay(1); }
}
double readAnalogSensor() {
int nr_Valori=10; // A cate valo ri citite sa se faca media
//int nr_Valori=100;
int Suma_Valori=0;
int Val_citite_de_IR=0; double Distanta=0;

for (int i=0; i<nr_Valori; i++) {
Val_citite_de_IR=analogRead(I R_pin); // se face citirea ana lg
delay(2); Suma_Valori=Suma_Valori+Val_c itite_de_IR; // Suma valorilor citite de senzor
}
Val_citite_de_IR=Suma_Valori/ nr_Valori; // Calculeaza media
Distanta=Val_citite_de_IR; // Converteste in "double"
Distanta=mapDouble(Distanta,0.0,1023.0,0.0,5.0); //Convertest e analogul ( 10 bit ADC
‐‐> 2^10= 1024 ‐//‐> 0:1023) intr‐o tensiune ( intre 0 si 5 V)
Distanta= ‐16.295*pow(Distanta,3 )+57.62*pow(Distanta,2)‐71.12 9*Distanta+35.193;
//( Transformarea //tensiunii intr‐o distanta in cm, printr‐o r egresie polinomiala de
gradul III)
Serial.print("Distance: "); // V izualizarea Distantei in Seri al Monitor
Serial.println(Distanta);

51 return Distanta;
}
void writeToSD(double Distanta)
{ // Deschide fisierul
ValScan = SD.open(filename, FILE_WRITE);
// Daca fisierul s‐a deschis atunci scrie:
if (ValScan)
{
ValScan.print(Distanta);
ValScan.println();
// Inchide fisierul:
ValScan.close(); }
else
{ // Daca fisierul nu se deschide apare mesajul:
Serial.print("eroare deschidere fisier ");
Serial.println(filename); }
}
double mapDouble(double x, doubl e in_min, double in_max, double out_min, double
out_max)
{ return (x ‐ in_min) * (out_ma x ‐ out_min) / (in_max ‐ in_min) + out_min;
}

52 ANEXA 2
clear all
%% Procesarea variabilelor.
DistMax = 20; %limita superioara a valorilor
DistMin = 0; %limita inferioara HSIZE = 4 % coeficientul de filtrare
InterpRez = 1 % Rezolutia interpolarii
DistCent = 12 %Distanta de la se nzor la centrul suportului pe c are se afla obiectul (cm)
zDelta = 0.1; %pas‐ul pe axa z (cm)

%%Citirea de pe cardul de memorie

date = load('scan.TXT') %Citeste fisierul text de pe cardul Mic roSD
date(date<0) = 0; %Sterge scanarile eronate
delimitator = find(date == 12345) ; % cauta valoarea 12345 in fi sierul text, Valoarea
indica %sfarsitul scanarii pe z
%Aranjarea intr‐o matrice "r" , unde fiecare rand corespunde în altimii z
r(1,:) = date(1:delimitator(1));
for i=2:1:size(delimitator,1)
r(i,:) = date(delimitator (i‐1)+1:delimitator(i));
end

r(:,end)=[]; % Sterge ulimul rând cu delimitatorul 12345
r=DistCent‐r;
r(r>DistMax)=NaN; %Sterge valori le scanate mai mari decat DistM ax
r(r<DistMin)=NaN; % Sterge valor ile scanate mai mici decat Dist Min

%Crearea unei matrici "teta" cu aceiasi marime ca "r". Fiecare coloana din
%"r" corespunde unei orientari

%teta=0:360/size(r,2 ):360; & Pentru aranjar ea obiectului in ogl inda
teta=360:‐360/size(r,2):0
teta(end) = [];
teta = repmat(teta,[size(r,1) 1]); teta=teta*pi/180; %Convertirea in coordonate carteziene

%Crearea unei matrici "z" pe înaltimea z, unde fiecare rând cor espunde unei
%inaltimi z

z=0:zDelta:size(r,1)*zDelta;

53 z(end)=[];
z=z';
z=repmat(z,[1,size(r,2)]); %repmat ‐ help repmat
[x,y,z] = pol2cart(teta,r,z); %C onvertirea la coordonate cartez iene

%Inlocuirea valorilor NaN în x, y cu cel mai apropriat vecin de la aceasi
%Inaltime
for i=1:1:size(x,1)
if sum(isnan(x(i,:)))==size(x,2)
x(i:end,:)=[];
y(i:end,:)=[]; z(i:end,:)=[];
break;
end end

for i=1:1:size(x,1) latestValueIdx=find(~is nan(x(i,:)),1,'first');
latestX=x(i,latestValueIdx);
latestY=y(i,latestValueIdx); for j=1:1:size(x,2)
if isnan(x(i,j))==0
latestX=x(i,j);
latestY=y(i,j);
else x(i,j)=latestX;
y(i,j)=latestY;
end
end
end

%Reesantionarea suprafetei bazata pe rezolutia retelei de polig oane dorita.

interpIdx = 1:InterpRez:size(x,1); %interp ‐ help interp
xInterp = x(interpIdx,:); yInterp = y(interpIdx,:);
zInterp = z(interpIdx,:);

%Finisarea datelor pentru a elimina mai mult zgomot
H = fspecial('average',HSIZE); % Definirea mediei filtrului ‐ h elp fspecial

54 xInterp = padarray(xInterp,[0,H SIZE],'symmetric'); %Adaugarea u nui strat simetric de‐
a &lungul rândurilor pentru a filtra corect suprafata marginilo r
yInterp = padarray(yInterp,[0, HSIZE],'symmetric');
xInterp=filter2(H,xInterp); %Filtrare x yInterp=filter2(H,yInterp); %Filtrare y
xInterp=xInterp(:,HSIZE:end‐ HSIZE‐1); %Stergere strat
yInterp=yInterp(:,HSIZE:end‐HSIZE‐1); %Stergere strat
%Fortarea scanarii sa se înfasoar e, prin duplicarea valorilor p rimei
%coloane la sfârsitul matricei

xInterp(:,end)=xInterp(:,1); yInterp(:,end)=yInterp(:,1);
zInterp(:,end)=zInterp(:,1);
%Adaugarea partii de sus pentru a inchide forma 3D a obiectului .

xTop=mean(xInterp(end,:)); yTop=mean(yInterp(end,:));
xInterp(end+1,:)=xTop;
yInterp(end+1,:)=yTop; zInterp(end+1,:)=zInterp(end,1)‐ zInterp(end‐1,1)+zInterp(end,1) ;

%Reprezentarea grafica a modelului 3D.

plot3(xInterp,yInterp,zInterp,'‐b'); rotate3d on; % Activarea functiei de rotire a obiectului cu aju torul curosrului.

surf2stl('scan.stl',xInterp,yInte rp,zInterp); %Exportarea rezul tatului in format STL

55 ANEXA 3
clear all
clc %%
% Incarcarea celor 2 coloane
load('Tabel_val_dist_tens.mat')
%Initializarea celor 2 coloane
Tensiune = DistTensCopy(:,1); Distanta = DistTensCopy(:,2);

%Afisarea punctelor specific e tensiunii si distantei
plot(Tensiune, Distanta, ':s', 'MarkerSize', 6, 'MarkerFaceColo r', 'b')
title('Distanta in f unctie de tensiune')
xlabel('Tensiune [cm]')
ylabel('Distanta [V]')
%Aflarea coficientilor polinomul ui, si trasarea unei linii poli nomiale
p = polyfit(Tensiune,Distanta, 3);
pp = polyval(p, Tensiune); hold on
plot(Tensiune, pp, '‐r')
grid
%Afisarea ecuatiei in plotul de mai sus
for i=1:100
[p]=polyfit(Tensiune, Distanta, 3);
a=p(1) b=p(2)
c=p(3)
d=p(4) ec = ['y =',num2str(a),'*x^3+',num2str(b),'*x^2',num2 str(c),'*x+',num2str(d)]
text(0.6,13,ec,'FontSize',12);
end
legend('Distanta in functie de t ensiune','Polinom de gr.3')

56 ANEXA 4
int IR_pin = A3;
void setup() {
Serial.begin(9600);
} void loop() {
//int nr_Valori=10; // A cate valo ri citite sa se facă media
int nr_Valori=100; int Suma_Valori=0;
int Val_citite_de_IR=0;
double Distanta=0;

for (int i=0; i<nr_Valori; i++) {
Val_citite_de_IR=analogRead(I R_pin); // se face citirea ana log
delay(2); Suma_Valori=Suma_Valori+Val_c itite_de_IR; // Suma valorilor citite de senzor
}
Val_citite_de_IR=Suma_Valori/ nr_Valori; // Calculează media
Distanta=Val_citite_de_IR; // Convertește in "double"
Distanta=mapDouble(Distanta,0.0,1023.0,0.0,5.0); //Converteșt e analogul ( 10 bit ADC
‐‐> 2^10= 1024 ‐‐> 0:1023) intr‐o te nsiune ( intre 0 si 5 V)
Serial.print("Tensiunea: ");
Distanta= ‐16.295*pow(Distanta ,3)+57.62*pow(Distanta,2)‐71.12 9*Distanta+35.193;
//( Transformarea tensiunii intr‐o distanta in cm, printr‐o reg resie polinomiala de
gradul //III) Serial.print("Distance: "); // V izualizarea Distantei in Seri al Monitor
Serial.println(Distanta);
return Distanta; }
double mapDouble(double x, doubl e in_min, double in_max, double out_min, double
out_max) {
return (x ‐ in_min) * (out_ma x ‐ out_min) / (in_max ‐ in_min) + out_min;
}

Similar Posts