Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Disseny i implementació d’un Projector Làser Alfanumèric
Rosell Civit, Pau
Curs 2014-2015
Director: Antoni Ivorra Cano
GRAU EN ENGINYERIA DE SISTEMES AUDIOVISUALS
Treball de Fi de Grau
GRAU EN ENGINYERIA EN xxxxxxxxxxxx
Disseny i implementació d’un Projector Làser Alfanumèric
Pau Rosell Civit
TREBALL FI DE GRAU
GRAU EN ENGINYERIA DE SISTEMES AUDIOVISUALS ESCOLA SUPERIOR POLITÈCNICA UPF
ANY 2015
DIRECTOR DEL TREBALL
Antoni Ivorra Cano
iii
Agraïments M’agradaria expressar el meu agraïment a tothom qui d’alguna manera m’ha ajudat o
m’ha donat suport durant el projecte.
Gràcies a la família i als amics per ser-hi sempre i donar-me el seu suport incondicional
amb especial menció al taller de Can Bell i la col·laboració del meu amic Joan amb la
construcció física del sistema.
Finalment també vull donar les gràcies al Toni Ivorra per la seva implicació, els seus
consells i el facilitar-me l’accés a la impressora 3D que ha estat essencial per la
consecució del projecte.
v
Resum L’objectiu d’aquest projecte és el disseny i la construcció d’un Projector Làser
Alfanumèric de baix cost i de petites dimensions.
Aquests projectors es caracteritzen per la representació de caràcters en forma de matriu
de bits mitjançant un làser, on els caràcters són representats a través d’un sistema
d’escaneig. La resolució vertical d’aquesta matriu acostuma a definir-se mitjançant
diferents miralls rotatoris amb inclinacions variables (que suposaran les files de la
matriu) i la resolució horitzontal utilitzant la modulació del làser (encesa i apagada).
L’adquisició de dades dels sensors i les diferents instruccions que regulen el sistema
s’han implementat amb el mòdul Arduino UNO, controlat per una interfície gràfica
desenvolupada en llenguatge Java.
El document explica detalladament els passos seguits pel desenvolupament del
Projector tant del hardware com del software. Una aplicació actual d’aquest projecte són
pico-projectors làser utilitzats en alguns dispositius mòbils.
Abstract The main goal of this project deals with the design and construction of a low size and
low cost Alphanumeric Laser Projector.
This kind of projectors can represent some characters using a bit matrix. The matrix is
build by using a specific scan mechanism, where the rows are displayed using a rotator
system of mirrors (with different inclination between them) and the columns through a
laser modulation (on/off switch).
Arduino UNO platform is used in order to implement the sensor of data acquisition and
user commands. In addition, an interface written with Java opens the communication to
Arduino and sends the user instructions.
This document explains in detail the steps to develop the Projector, both hardware and
software. A current application of this project is the laser pico-projectors used in some
mobile devices.
vii
Pròleg
Actualment l’electrònica està en constant evolució i les oportunitats que ofereix el
sector són pràcticament il·limitades. Gràcies a la difusió a través de les xarxes
existeixen nombrosos professionals i organitzacions del sector que exposen les seves
experiències i projectes diy (do it yourself) amb l’ànim de compartir coneixements.
En aquest treball he volgut portar a terme el desenvolupament d’un projecte pràctic
(hardware), fent servir eines que s’han obtingut al llarg del Grau. Per tant doncs la
intenció és orientar els conceptes de programació adquirits aplicant-lo a l’electrònica
bàsica per tal de donar forma a un producte físic, un Projector Làser Bitmap.
Una aplicació directa del projector de petites dimensions podria ser la senyalització
(esdeveniments musicals, grans superfícies...) mitjançant petits vehicles aeris no
tripulats (UAV1) típicament coneguts com a Drones.
Aquest projecte m’ha donat l’oportunitat de realitzar una recerca exhaustiva i aprofundir
en camps d’interès personal els quals no s’havien tractat de forma massa concreta
durant el Grau.
Els objectius del projecte s’estructuren en diverses etapes, les quals es poden definir
com:
Analitzar les diferents tecnologies i projectes existents per tal de dissenyar les línies de
desenvolupament pròpies. En aquest cas s’ha distingit entre els projectors de mapa de
bits i els projectors vectorials.
Realitzar els prototips físics adequant-se a les limitacions del sistema i als materials
disponibles.
Implementar el software de control del model físic a través de la plataforma Arduino
enllaçada amb la programació orientada a objectes (Java Netbeans).
1 UAV: Es refereix al concepte vehicle aèri no tripulat (Unmanned Aerial Vehicle).
ix
Índex
Pàg.
Agraïments.....................................................................
Resum.............................................................................
iii
v
Abstract..........................................................................
Pròleg.............................................................................
v
vii
1. DESCRIPCIÓ DE LES TECNOLOGIES ................ 1
1.1 Projector Làser Bitmap............................................ 1
1.1.1 Models de disseny................................................. 2
1.1.2 Estat de l’art.......................................................... 4
1.2 Pico-projectors......................................................... 5
1.3 Projector Làser Vectorial......................................... 7
1.3.1 Estat de l’art.......................................................... 8
2. DISSENY DE L’ENTORN FÍSIC ............................ 11
2.1 Làser......................................................................... 12
2.2 DC motor.................................................................. 17
2.3 Controlador del motor.............................................. 19
2.4 IR sensor.................................................................. 21
2.5 Arduino.................................................................... 23
2.6 Font d’alimentació................................................... 31
2.7 Capçal....................................................................... 32
3. DISSENY DE L’ENTORN DE PROGRAMACIÓ... 41
3.1 Arduino software...................................................... 41
3.1.1 Característiques..................................................... 41
3.1.2 Interrupts............................................................... 42
3.1.3 Teoria del control.................................................. 43
3.1.4 Software Arduino Projector Làser........................ 43
3.2 Interfície gràfica....................................................... 54
4. VALORACIÓ DE RESULTATS.............................. 63
4.1 Motor i controlador.................................................. 63
4.2 Característiques de la projecció............................... 64
4.2.1 Superfície d’escaneig............................................ 64
4.2.2 Característiques del capçal.................................... 66
4.2.3 Resultats de la projecció....................................... 67
4.3 Anàlisi de costos...................................................... 70
4.4 Conclusions i propostes de millora.......................... 71
Annex............................................................................. 73
Bibliografia.................................................................... 77
1
1. DESCRIPCIÓ DE LES TECNOLOGIES
Les tecnologies usades pels projectors làser poden tenir moltes variants depenent de la
seva implementació, però podem classificar-los en dos grups principals: els Projectors
de Mapa de Bits i els Projectors Vectorials.
La principal diferència consisteix en el resultat final esperat, on es pot presentar una
imatge generada a partir d’una matriu de punts o una imatge continua.
La tecnologia emprada per cada dispositiu conté variabilitats importants les quals s’han
estudiat de forma detallada per tal de justificar l’elecció del model.
1.1 Projector Làser Bitmap
L’objectiu d’aquesta variant de projector consisteix en crear un mapa de bits o una
matriu de punts a través de l’ús d’un o de varis làsers. En la fig 1.1 es pot observar un
esquema general del diagrama de blocs d’aquest tipus de projectors.
Inicialment el feix làser és reflectit per cada cara del capçal de miralls que rota a
velocitat constant controlat pel sensor de rotació. Així es crea una superfície d’escaneig
la longitud de la qual vindrà directament relacionada amb les dimensions dels miralls i
la distància de projecció. Aquesta superfície serà modulada encenent i apagant el làser
molt ràpidament per tal de donar forma als caràcters que seran representats.
A continuació s’exposa de forma general la funcionalitat de cada bloc per tal de
clarificar l’explicació.
Sensor de
velocitat de
rotació
Microcontrolador Díode
Làser
Figura 1.1 Diagrama de blocs
projector làser bitmap
Font
d’alimentació
DC Motor + Capçal amb
miralls
Interfície
d’usuari
2
Díode làser
Tot i existir diversos sistemes làser el més emprat en aquests projectors és el díode
làser. El controlador estableix les instruccions d’encesa i apagada que serviran per
representar els caràcters desitjats a través de la reflexió del làser al capçal de miralls
rotatori. Depenent del disseny es pot emprar un o varis làsers per la projecció.
DC Motor + Capçal amb Miralls
Peça essencial en el disseny de l’estructura física del projector, les característiques de la
qual determinaran la resolució de la pantalla de projecció. Els models poden variar en
funció del nombre de miralls utilitzats en la representació.
Sensor de velocitat de rotació
Obté la informació respecte la rotació del motor. El model més comú utilitzat consisteix
un receptor i un emissor de rajos infrarojos.
Microcontrolador
És essencial pel funcionament del projector làser, el qual s’encarrega de transmetre les
diferents instruccions del sistema. Per una banda estabilitza la velocitat del motor
mitjançant la informació del sensor de velocitat rotació i per l’altra gestiona la
modulació del díode làser. Aquesta modulació vindrà personalitzada pels caràcters que
l’usuari hagi introduït a través de la interfície.
Font d’alimentació
Proporciona la potència elèctrica necessària al sistema. Depenent del model de disseny
es poden utilitzar varies font pels diferents components però generalment s’encarrega
d’alimentar al controlador i al motor elèctric.
Interfície d’usuari
S’encarrega de transmetre al microcontrolador els paràmetres ajustables del sistema,
especialment el text a projectar. Es poden utilitzar diferents plataformes en funció del
disseny particular del sistema: PC, dispositiu mòbil, teclat...
1.1.1 Models de disseny En termes de disseny existeixen dues línies bàsiques d’implementació les quals poden
ser combinades entre si. Anteriorment s’ha destacat que la resolució horitzontal de la
pantalla vindrà determinada per la longitud del/s mirall/s. El terme de discussió en
aquest cas és la forma de representar la resolució vertical de la pantalla de projecció.
Únic Làser
3
La resolució vertical de la pantalla d’aquest tipus de projector làser ve determinada per
l’ús de diferents miralls amb inclinacions variables, de tal manera que cada mirall
representa una fila diferent de la matriu. D’aquesta manera el nombre de files vindrà
determinat pel nombre absolut de miralls. Més gràficament a la fig 1.2 el paràmetre i
correspondria al nombre de miralls utilitzats amb diferents inclinacions i la j seria
resultat de la modulació de làser.
Varis Làsers
En aquest cas es parteix del principi en que un únic mirall va oscil·lant de forma
contínua mitjançant un petit motor de tal manera que es realitza un escaneig horitzontal.
D’aquesta manera s’aconsegueix representar una línia per cada làser. Per tant doncs en
la fig 1.2 el paràmetre i vindria representat pel nombre de làsers utilitzat. Caldrà també
aplicar modulació a cada làser i es necessitarà una alimentació més potent que en el cas
anterior.
Model Híbrid
Consisteix en la combinació de varis miralls amb varis làsers. En aquest cas doncs
s’utilitza el disseny del capçal amb miralls amb inclinacions variables amb diferents
punters làsers. Permet la implementació d’un nombre major de línies però el disseny
físic és més complex que en els dos casos anteriors.
Figura 1.2 Matriu de projecció
4
En els tres casos és necessari el desenvolupament d’una estructura que contingui els
miralls i els faci oscil·lar o rotar de forma estable. La projecció per tant serà molt
sensible a la implementació del model físic i a les possibles variacions d’aquest sistema.
1.1.2 Estat de l’art
La gran majoria d’exemples o projectes centrats en la construcció de projectors làser
bitmap són amateurs i sense ànim de lucre.
S’ha trobat una aplicació comercial (actualment obsoleta) anomenada Skylinner que es
basa en principis semblants als dels projectors làsers de mapa de bits. Skylinner
consisteix en un objecte que representa una sèrie de missatges a través del moviment
manual del capçal. Utilitza una fila de 8 LEDS que s’encenen i s’apaguen
seqüencialment en funció de la velocitat de rotació de l’objecte
Figura 1.3 Esquema model amb un únic làser
i model amb diferents làsers
Figura 1.4 Skylinner
5
No obstant, els exemples de projectors actuals normalment tenen una aplicació
acadèmica i ofereixen detalls de la implementació i codi obert. A continuació s’ha
realitzat una selecció dels projectes més rellevants.
TinyProjector [1]
Exemple de projector realitzat utilitzant 8 làsers que representen la resolució vertical de
la projecció desenvolupat pel Media Lab de l’MIT entre l’any 2000 i 2002. Utilitza un
microcontrolador PIC16F877 per la comunicació i permet la representació de 8
caràcters mitjançant la transmissió Bluetooth d’un dispositiu mòbil.
Mechanically scanned laser display [2]
És un exemple de projecte individual caracteritzat per l’ús de 8 miralls i un
microcontrolador PIC16F877 que comunica l’ordinador amb el làser. És capaç de
representar 20 caràcters consecutius.
Laser projector [3]
Model híbrid que combina l’ús de quatre làsers i tres miralls utilitzant la comunicació
SMS d’un dispositiu mòbil com a interfície d’usuari. Té una resolució de pantalla de 10
caràcters.
Alpha-Numeric Laser Projector [4]
Es tracta d’un projecte amateur de codi obert desenvolupat durant el 2012 amb
l’objectiu de construir un projector transportable. Es caracteritza per l’ús d’un sistema
propi d’ajustament de la inclinació dels miralls i un model de fixació utilitzant imants.
Capaç de representar 20 caràcters consecutius mitjançant 12 miralls. Com a plataforma
de comunicació s’utilitza Arduino mini que conté un microcontrolador ATMega 328.
1.2 Pico-projectors
La variant dels pico-projectors es tracta d’una aplicació directa de les tecnologies i del
concepte teòric que caracteritza els projectors làsers de mapa de bits [5].
Els pico-projectors són un tipus de projectors adaptats per a dispositius mòbils capaços
de projectar grans imatges en qualsevol superfície basant-se en l’escanejat 2D.
L’arquitectura es caracteritza per la combinació de tres làsers (blau, verd i vermell)
cadascun amb una lent per obtenir un feix de llum (NA2) molt prim.
Com es pot observar en la fig 1.5 la llum dels tres làsers es combina formant un únic
feix de llum blanca que és dirigit en un mirall d’escaneig biaxial MEM sobre un patró
rasteritzat. Finalment la imatge projectada és creada a través del continu escaneig del
patró pel feix làser.
2 NA (Numerical Aperture): es refereix l’obertura numèrica d’un sistema òptic que caracteritza el rang d’angles que el sistema
accepta per emetre llum.
6
La implementació per blocs del comportament electrònic dels pico-projectors es pot
observar a la figura 1.5 on s’obté una visió més detallada dels diferents components. Al
tractar-se d’uns dispositius tant petits l’electrònica implicada és força complexa així
com la seva implementació.
Al tractar-se d’una tecnologia en alça gran part dels projectors que es fabriquen
actualment utilitzen aquest sistema de projecció. Un exemple comercial que aplica la
tecnologia dels pico-projectors integrada completament en un dispositiu mòbil el
trobem en el model Samsung I8530 Galaxy Beam.
Aquest model fou presentat el 2012 al mobile World Congres de Barcelona amb unes
característiques de projecció que van de 450 lux a una distància de 40 cm, fins a 20 lux
a una distància de 2m. La pantalla és ajustable fins als 128 cm de llarg.
Figura 1.5 Components i diagrama de blocs pico-projector làser
Figura 1.6 Model Samsung I8530 Galaxy beam
amb pico-projector incorporat
7
1.3 Projector Làser Vectorial
Els projectors làsers vectorials es caracteritzen per la projecció d’imatges continues i
tenen un funcionament diferenciat dels projectors de mapa de bits.
Tenen una estructura més complexa les principals parts de la qual es mostren a la fig
1.7.
Làser
Existeixen dues variants de làser típicament utilitzats en aquests dispositius: làsers
DPSS (Diode Pumped Solid State) o làsers de Ions (Gas). En contraposició als díodes
làsers utilitzats pel projector bitmap, ofereixen una potència lumínica i una qualitat del
feix molt superior.
Si el sistema ofereix control de color són necessaris dos làsers p.ex: un làser de Criptó
pel vermell (R) i un d’Argó pel blau i el verd (GB). Sobreposant els feixos
s’aconsegueix el blanc que posteriorment és filtrat per representar el color desitjat.
Làser
Electrònica i abastiment de
potència
Control
de color
Sistema
d’escaneig
Consola de
control
Font
d’alimentació
Sistema
gràfic
Figura 1.7 Diagrama de blocs d’un
projector làser vectorial
8
Sistema d’escaneig
És la principal diferència entre aquest model i el projector làser bitmap.
El sistema està compost per dos galvanòmetres3 que realitzen un escaneig X-Y del feix
làser. En aquest cas els galvanòmetres tenen un mirall adossat a l’eix rotatori i giren
canviant de sentit milers de vegades per segon per tal de representar la figura desitjada.
Existeixen dos tipus principals de sistemes d’escaneig open-loop i closed-loop, els quals
no es descriuran ja que es surt del propòsit de la memòria.
Electrònica i font d’alimentació
Conjunt de microcontroladors i sistemes electrònics encarregats de transmetre la
informació rebuda de la Consola de control als actuadors per projectar la seqüència
desitjada. Principalment regula les instruccions de rotació dels galvanòmetres i els
actuadors que controlen el color del feix.
Per abastir la potència al làser s’utilitza una font d’alimentació que converteix el corrent
altern de la xarxa en corrent continu amb les característiques que requereix el làser.
Control de color
Consta de varis actuadors que sobreposen diferents filtres sobre el feix de làser blanc
per tal d’aconseguir projectar els colors desitjats en el moment indicat. Els sistemes
principals de control de color són el Color Box (tres filtres que permeten la
representació de set colors diferents) o el PCAOM (Poly Chromatic Acousto Optic
Modulator) que permet la representació de més de 16,7 milions de colors.
Consola de control
Permet la interacció directa amb els controladors del projector làser. Acostuma a
permetre la modificació dels colors, la seqüència de projecció i la mida i la posició de la
imatge projectada.
Sistema gràfic
Normalment està basat en el processament per PC i permet l’emmagatzematge de
paraules, dibuixos i animacions que seran projectades pel sistema d’escaneig del làser.
1.3.1 Estat de l’art
Al tractar-se d’un tipus de projector d’implementació molt més complexa i costosa que
el model bitmap, la quantitat de projectes individuals no es tant variada tot i que
3 Galvanòmetre: actuador electromagnètic que produeix un moviment rotatori sobre un eix, proporcional
al camp elèctric aplicat. Internament utilitzen un imant mòbil al voltant d’un eix prim i dues bobines
enrotllen la part exterior dels pols (armadura). D’aquesta manera s’aconsegueix que el rotor de ferro giri
de forma molt precisa en funció del corrent aplicat a les bobines.
9
existeixen alguns exemples. En canvi la presència de models comercialitzats és més
comuna. A continuació s’ha fet ressò dels projectes més destacats
Home Build Laser Projector [6]
Projecte desenvolupat entre l’any 2004 i el 2006 que mostra la implementació de les
diferents parts del projector (galvanòmetres, unitat làser) a partir de l’obtenció dels
materials essencials. També inclou el disseny d’una interfície gràfica per la
representació de les imatges. No té control de color del làser.
RGB Laser Projector [7]
Projecte realitzat mitjançant tres mòduls làser que permeten la projecció combinant els
tres colors. També consisteix en un projecte individual.
LaserShark [8]
Projecte iniciat i desenvolupat per l’empresa Macpod LLC amb la col·laboració de
l’organització Baltimore hackerspace4, EEUU. Utilitza un disseny propi de plataforma
que conté un microcontrolador ARM Cortex-M3 LPC1343 de 32 bits. Aquesta
plataforma anomenada Lasershark es comercialitza per a projectes similars i es pot
obtenir per un preu de 80€. La resta de components (galvos, làsers...) poden ser escollits
pel desenvolupador.
4 Hackerspace: concepte també conegut com a hacklab o makerspace on s’ajunta gent amb interessos
comuns per tal de col·laborar en projectes relacionats amb ordinadors, electrònica, tecnologia...
Figura 1.8 Fotografia de la plataforma lasershark i exemple de projector làseer
vectorial desenvolupat pels seus creadors.
11
2. DISSENY DE L’ENTORN FÍSIC S’ha dut a terme un estudi dels diferents components necessaris per a la implementació
del projector, amb l’objectiu de valorar-ne les característiques per adequar-se als
objectius de disseny marcats.
En aquest capítol es pot trobar una explicació i justificació de l’elecció dels elements
que s’han adquirit en la construcció del projector. També ha sigut necessari el disseny a
personalitzat d’algunes peces el qual es troba detallat en el capítol.
L’estructura física implementada es pot observar a la fig 2.1 on trobem representades
les parts bàsiques pel funcionament del projector làser alfanumèric.
En aquest esquema podem veure les diferent línies de comunicació del projector així
com una representació gràfica dels components.
Com a comunicació bàsica entre el software (PC) i el hardware s’ha utilitzat com a
controlador la plataforma de software lliure Arduino, les característiques de la qual
seran exposades posteriorment.
Figura 2.1 Esquemàtica del hardware del projector làser
bitmap
Làser
IR Sensor
DC
Motor + -
PC Arduino board
Capçal amb
miralls
Controlador del
motor
Font
d’alimentació
12
2.1 Làser L’elecció del làser és una de les principals característiques del model físic del projector
alfanumèric. Existeixen varies tecnologies de les quals se’n destaquen: els làsers de Gas
i els làsers d’estat sòlid (Solid State) entre els quals trobem els díodes làsers i els làsers
DPSS [9].
Els dispositius làser5 es diferencien de les altres fonts de d’il·luminació principalment
pel tipus de llum que són capaços de generar. Típicament la llum d’una font (com
podria ser una bombeta) viatja de forma aleatòria en totes les direccions i per tant és
anomenada llum incoherent.
.
No obstant la llum d’un làser és direccional i temporalment i espacialment coherent, on
tots els fronts d’ona s’alineen tant en el temps com en l’espai.
La direccionalitat dels làsers és una de les característiques més importants d’aquests
dispositius. Una font de llum focalitzada pot arribar a aconseguir una dispersió de 2 a 5
graus a uns 5 metres de distancia. Si el làser té una divergència de 5 mrad significa que
la dispersió del feix serà només de 3/20 d’un grau a tres metres de distància.
Gas Làser
La llum dels làsers es genera aprofitant les característiques de la mescla dels gasos
(composició referenciada com a Plasma), la qual al aplicar-hi corrent elèctric genera
energia lumínica. A nivell atòmic els electrons del gas orbiten a una distància fixa al
5 Làser: prové del terme anglosaxó Light Amplification by Simpulated Emission of Radiation.
Figura 2.2 Ones de llum incoherents
Figura 2.3 Ones de llum coherents
13
voltant del nucli. Quant s’aplica un corrent elèctric aquest estimula els electrons del gas
que absorbeixen l’energia i es mouen cap a l’òrbita més pròxima (Excited Orbit). Per
tal de reestabilitzar-se els electrons retornen a l’òrbita d’origen (Ground State Orbit) i
l’energia que havia excitat els electrons passa a prendre la forma de fotons de llum
aleatoris. Aquest procés s’anomena emissió espontània i pot veure’s representada a la
fig 2.4.
Tot i això una funció indispensable en els làsers consisteix en l’amplificació de
l’emissió lumínica.
El disseny principal d’aquest tipus de làser (fig 2.5) està caracteritzat per una
configuració estreta (normalment cilíndrica) amb un forat interior i dos miralls als
extrems6.
Els fotons generats a partir de l’emissió espontània viatjaran de forma paral·lela al
capçal i seran reflectits pels miralls oscil·lant endavant i endarrere i per tant amplificant-
se.
Per tal de permetre que la llum s’emeti fora del capçal, s’utilitza un mirall amb un
coeficient de reflectivitat d’entre el 90 i 97% (que permetrà el pas d’una certa part de
l’energia lumínica).
6 En alguns models d’alta potència els miralls no són fixes i permeten l’ajustament del color utilitzant les
característiques òptiques de les lents per canviar la forma d’ona emesa.
Ground State Orbit
Excited Orbit
Nucli
-
- -
-
Fotó
emès
Figura 2.4 Diagrama de
l’emissió espontània
ànode càtode
+ - Tub de plasma Reflector total Refector parcial
Feix làser
Figura 2.5 Esquema bàsic
d’un Gas làser
14
Làser DPSS
Els làsers DPSS (Diode Pumped Solid State) són làsers construïts a partir d’un díode
làser i un medi sòlid de transmissió, com podria ser un cristall, que amplifica el feix del
làser. Acostumen a utilitzar díodes infrarojos (IR) que combinats amb els diferents
cristalls utilitzats permeten l’obtenció de làsers de diferents colors.
Aquest tipus de làsers són més petits i lleugers que els làsers GAS, utilitzen menys
components i necessiten menys energia elèctrica per funcionar.
Díode Làser
Contenen típicament dues regions construïdes amb materials diferents separades per una
fina capa. El principi és el mateix que en els Gas làsers: quant el díode és polaritzat els
electrons de la regió –n són ocupen els espais de la regió –p. En aquest moment el
sistema és inestable i per tal de recuperar la seva estabilitat inicial l’energia aplicada es
desprèn en forma de fotons. Els materials més comuns utilitzats per les regions són
GaAs (Arsenur de gal·li) i AlxGa1-xAs (Arsenur de gal·li-Alumini).
S’acostumen a utilitzar en sistemes de poca potència i es caracteritzen per una baixa
qualitat del feix. Tenen un funcionament similar als LED ja que son dispositius que
emeten llum en funció de la potència aplicada.
Cal destacar que existeixen diferents tipus de díodes làser en funció de la distribució
dels materials, però els models comercials segueixen l’esquema exposat.
Els làsers també es classifiquen en funció del risc tenint en compte aspectes com la
longitud d’ona, si permeten una exposició directa, el límit d’emissió accessible (AEL) i
l’exposició màxima permesa (MPE) [10]. En funció d’aquestes característiques
existeixen 4 classes i 7 nivells de risc diferents. En el cas dels punters làser pertanyen a
la Classe 2 (baixa potència) els quals presenten una potència màxima d’ 1 mW.
Per tal valorar l’ús de cadascun dels tres models de làser se n’han comparat les
característiques de cadascun
Figura 2.6 Esquema bàsic d’un díode Làser
15
Gas Làser Solid State Làsers
Làser DPSS Diòde Làser
Car, tot i que el preu no ve
necessàriament determinat
per la potència òptica.
Car Econòmic
Bona qualitat del feix làser i
poca divergència.
Bona qualitat del feix làser
amb poca divergència i
major direccionalitat
Baixa qualitat del feix làser,
major divergència i diàmetre.
Ofereixen una potència
òptica major que els altres
models.
Pot treballar a altes
potències, major potència
òptica que el díode làser.
Només treballa a baixes
potències
Baixa eficiència energètica. Menor eficiència a causa
de la conversió freqüencial
a través dels cristalls.
Major eficiència energètica
Admeten una freqüència de
modulació inferior que els
díodes.
Admeten una freqüència
de modulació inferior que
els díodes.
Pot ser modulat de forma
precisa a altes freqüències
Dimensions força majors
als altres tipus de làsers.
Major dimensió que els
díodes làsers.
Petites dimensions
Poden oferir longituds
d’ona (colors) difícils
d’aconseguir amb els altres
models.
Major dificultat per ajustar
el color desitjat el feix.
No permeten l’ajust de la
longitud d’ona
Per la implementació del projector s’ha escollit un díode extret d’un punter làser de baix
cost ja que compleix els objectius necessaris per la construcció del projector.
És un làser de petites dimensions, permet una alta freqüència de modulació i treballa a
baixes potències. Entre els diferents díodes làsers possibles s’ha escollit el model més
econòmic que com a contrapartida té poca potència òptica i una baixa qualitat del feix.
Per tant només ens servirà per a projectar en espais foscos
A continuació se n’han especificat algunes de les seves característiques:
Taula 2.1 Comparació dels tres tipus de làsers
16
La irradiància específica del làser fa referència a la quantitat de potència que és capaç
de generar per metre quadrat. Cal destacar que la irradiància disminueix de forma
substancial si el receptor és una superfície difusa degut a la divergència angular (θ) de
l’impacte del làser sobre la superfície. En el cas del díode làser utilitzat es pot
determinar:
Si tenim en compte que un díode làser d’alta potència (500 mW) pot arribar a tenir una
irradiància 1000 vegades superior, en el nostre cas s’ha optat pel model de baixa
irradiància ja que l’objectiu consistia en la construcció d’un projector làser el més
econòmic possible.
Per demostrar que el díode accepta una modulació prou ràpida s’ha projectat la llum del
làser sobre un fotodíode aplicant una ona quadrada de 50kHz i període de 10 us a través
d’un generador de funcions.
En la fig 2.7 s’observa que el temps de pujada i baixada és inferior als 2 ms.
Dimensions 30x8 mm
Pes 20 gr
Alimentació 4.5-5 V
Classe 2
Potència 1 mW
Feix Color Vermell
Longitud
d’ona
650 nm
Diàmetre 3 mm
Taula 2.2 Característiques del díode làser utilitzat
Eq 2.1
Figura 2.7 Esquema bàsic d’un díode Làser
17
2.2 DC Motor Els motors de DC (Direct Current) es caracteritzen per convertir el corrent elèctric
directe en potència mecànica. El corrent elèctric s’aplica sobre les bobines del motor
que generen un camp magnètic el qual provoca l’atracció i repulsió dels imants
permanents que l’envolten. D’aquesta manera s’aconsegueix la rotació de l’eix del
motor.
Brushed Motor
Les bobines es troben fixades a l’eix central de rotació i giren amb l’eix quant s’aplica
corrent elèctric. En canvi els imants es troben fixes al voltant de l’eix dins del cos del
motor. El corrent s’aplica a les bobines a través de dos “burshes” que fan pressió sobre
el commutador, la fricció dels quals fa perdre eficiencia a aquest tipus de motors.
Brushless Motor
No requereixen de cap commutador físic ni “brushes” i per tant el manteniment que
requereixen és molt inferior. Utilitzen imants permanents que roten amb l’eix al voltant
d’una “armadura” fixa que conté les diferents bobines del motor. Un commutador
electrònic realitza la funció dels “brushes” i commutadors en els brush dc motors.
Bateria
Brushes
Commutador
Eix
Figura 2.8 Esquema bàsic d’un motor brushed
Figura 2.9 Esquema bàsic d’un motor brushless
Imant permanent
Bobines
Bateria
18
Les principals característiques de les dues classes de motors es troben resumides en la
següent taula:
Brushed DC Motor Brushless DC Motor
Necessita manteniment Necessita menys manteniment
Menor eficiencia a causa de la fricció de
les escombretes amb el commutador.
Alta eficiència elèctrica
Rang de velocitats inferior a causa de les
limitacions mecàniques dels “brushes”
Major rang de velocitats
Més sorollosos. Generen soroll elèctric
que influeix al camp magnètic a causa de
la fricció.
Poc soroll
Econòmic , baix cost de construcció Car, major dificultat de construir
Commutador mecànic Commutador electrònic
No requereix controls electrònics per
velocitats fixes.
S’alimenta de forma simple a través de
dos cables.
Controls electrònics més complexos. És
necessari un controlador elèctric pel
funcionament del motor, que acostuma a
ser més car que el propi motor.
Un cop descrites les principals característiques dels motors s’ha escollit un brushed DC
motor extret d’un reproductor de CD pels motius següents:
Econòmic
Velocitat fixa molt estable
Es pot alimentar directament sense un commutador electrònic previ.
Petites dimensions
Incorpora una plataforma adossada a l’eix que permet la fixació sòlida del capçal
A continuació se n’han destacat algunes de les seves característiques:
Taula 2.3 Comparació entre les característiques dels principals DC Motors
19
Dimensions 30x10 mm
Dimensions de l’eix 18x3 mm
Pes 25 g
Voltatge d’alimentació 7.5 - 9 V
2.3 Controlador del motor Com s’ha exposat el motor escollit rota a una velocitat força constant que varia
depenent del corrent elèctric que s’aplica. A nivell de projecció serà molt important
tenir un control de la velocitat de rotació i per tant s’ha implementat un circuit per
controlar-ne la velocitat així com el sentit de la rotació.
L’element necessari per modular el corrent d’entrada en DC motors de baixes tensions
consisteix en el microcontrolador L293D. Es tracta d’un dual H-bridge motor driver7 de
16 pins que actua com a amplificador de corrent ja que rep un senyal de baixa intensitat
com a control i proveeix una senyal de major intensitat.
Les principals característiques d’alimentació del controlador L293D són les següents
[11]:
Dimensions 30x10 mm
Voltatge d’alimentació VCC1 4.5 – 7 V
VCC2 VCC1 – 36 V
Corrent d’alimentació ICC1 16 – 24 mA
ICC2 16 – 24 mA
Per tant doncs per les característiques del microcontrolador l’alimentació de control
(VCC1) es podrà realitzar directament des de qualsevol PIN de la plataforma Arduino
(que ofereix 5V i 20mA de màxim corrent). Pel que fa a l’alimentació del motor (VCC2),
ens farà falta una font d’alimentació que ofereixi el voltatge específic pel 9V DC Motor.
7 Driver: circuit electrònic que permet que el voltatge s’apliqui en les dues direccions permetent per
exemple, que el motor roti en les dues direccions.
Taula 2.4 Característiques del DC Motor utilitzat
Taula 2.5 Característiques del microcontrolador utilitzat
20
El microcontrolador està compost per una sèrie de L’esquemàtica de les connexions
realitzades es troba en les figures 2.10 i 2.11.
Figura 2.10 Vista detallada del circuit implementat
Figura 2.11 Esquemàtica del circuit d’alimentació
al sensor implementat
21
2.4 IR sensor
El sensor d’infrarojos tindrà la funció de determinar la velocitat de rotació del motor i
serà utilitzat per reajustar la velocitat mitjançant un controlador d’entrada. El sensor està
compost per un emissor d’infrarojos i un receptor encarats.
Quant hi ha una interferència entre els dos transistors (l’emissió de l’IR led és tapada) el
fototransistor actua com un interruptor obert i no deixa passar corrent. Quant en canvi
rep els rajos infrarojos el fototransistor deixa passar corrent i per tant envia una senyal
elèctrica.
S’ha adquirit un model amb una distància suficient entre els dos transistors i per tant
que permeti un major gruix de la peça del capçal.
Les característiques que se’n destaquen són les següents [12]:
Profunditat de la ranura 9.5 mm
Alçada de la ranura 10.9 mm
Pes 2 g
Led infraroig OP240
VF (Màxim Voltatge d’alimentació) 1.8 V
IF (Màxim corrent d’alimentació) 20 mA
Forma d’ona de l’emissió 890 nm
Fototransitor OP550
VBR(ECO) (Mínim Voltatge d’alimentació) 5 V
IBR(ECO) (Mínim corrent d’alimentació) 100 µA
Per tal d’aprofitar les característiques de sortida dels pins de la plataforma Arduino (5V
amb un corrent màxim de 20 mA) s’ha implementat un circuit senzill per alimentar de
forma adequada al sensor IR (veure fig 2.12).
Tenint en compte les característiques elèctriques dels components del sensor s’han
obtingut els valors necessaris per les resistències aplicant la llei d’Ohm:
Taula 2.6 Imatge i característiques de l’IR sensor utilitzat
22
Observant les especificacions de l’IR LED obtenim el voltatge i el corrent d’entrada
desitjats, per tant tenint en compte que l’alimentació serà de 5 V:
Com que no existeixen resistències amb aquest valor específic se n’ha utilitzat una de
150Ω que complirà els requisits d’alimentació necessaris per l’IR LED. Per tal
d’obtenir una tensió al fotodíode també s’ha afegit una resistència de 1000Ω.
Pel que fa a l’esquemàtica del circuit i a la implementació física detallada es troba en les
següents figures:
IR led
IR fototransistor
R1
150Ω R2
1000Ω
Eq 2.2
Figura 2.12 Esquemàtica i representació
del circuit d’alimentació al sensor
implementat
23
2.5 Arduino Arduino és una plataforma open-source
8 hardware de prototipatge electrònic. Per
comunicar-se amb el microcontrolador Arduino utilitza un llenguatge de programació
propi (basat en Wiring9) i l’entorn de desenvolupament (basat en Processing).
Existeixen molts altres microcontroladors i plataformes disponibles, però s’ha escollit
Arduino per les característiques següents [13]:
Econòmic: Tots els mòduls prefabricats d’Arduino costen menys de 60€
MultiPataforma: Arduino pot treballar en els sistemes operatius Windows, Macintosh OSX i Linux.
Entorn de programació clar: L’entorn de programació és fàcil d’utilitzar per a principiants i és suficientment flexible per a usuaris avançats.
Software ampliable i de codi obert: El software Arduino es publica sota
llicència lliure i pot ampliar-se a través del llenguatge de C++. Els usuaris
interessats en detalls més tècnics poden passar a programar en AVR C, del que
es basa el llenguatge Arduino.
Hardware ampliable i de codi obert: els plànols dels mòduls està publicat sota llicència Creative Commons, per tant dissenyadors de circuits experimentats
poden dissenyar les seves pròpies versions del mòdul.
D’entre els diferents mòduls disponibles s’ha escollit Arduino UNO que és el mòdul
més econòmic disponible.
Es caracteritza per utilitzar el microcontrolador ATmega328P amb 14 pins digitals
d’entrada/sortia (6 dels quals ofereixen sortides PWM), 6 entrades analògiques i
alimentació a través d’USB o Jack.
A continuació se n’especifiquen les característiques elèctriques més rellevants [14]:
8 Open-source hardware (OSH): es refereix a tots els dispositius dissenyats amb la mateixa filosofia que
el software FOSS(Free and Open Source Software). En aquest cas significa que la informació sobre
hardware està accessible fàcilment, especialment el disseny, però també en el sofware que el controla.
9 Wiring: Consisteix en un open-source framework específic per a microcontroladors.
24
Microcontrolador ATmega328P
Voltatge d’operació 5V
Voltatge d’entrada recomanat 7-12V
Voltatge d’entrada màxim 6-20V
Digital I/O Pins 14 (dels quals 6 proveeixen sortida
PWM)
PWM Digital I/O Pins 6
Analog Input Pins 6
DC Current per I/O Pin 20 mA
DC Current for 3.3V Pin 50 mA
Memòria Flash 32 KB (dels quals 0.5 KB s’usen per
bootloader)
SRAM 2 KB (ATmega328P)
EEPROM 1 KB (ATmega328P)
Velocitat del clock 16 MHz
Llargària 68.6 mm
Amplada 53.4 mm
Pes 25 g
Taula 2.7 Imatge i característiques de la plataforma Arduino
25
PWM
La modulació per ample de polsos (Pulse-Width Modulation) [16] consisteix en una
tècnica de modulació utilitzada per a codificar un missatge en un senyal de pols.
S’utilitza generalment per a aconseguir resultats analògics a través d’entrades digitals
tot i que també pot ser útil en la codificació d’informació durant la transmissió de dades.
El control digital s’utilitza per a crear una ona quadrada, senyal ON-OFF. Aquest patró
pot simular voltatges compresos entre el valor ON total (5V) i el valor OFF (0V) variant
el temps el qual el senyal es troba en la posició ON respecte el temps en que es troba en
OFF. Per tant doncs el valor mig del voltatge que alimentarà el dispositiu està controlat
per l’encesa i l’apagada de la connexió entre la font i el dispositiu a grans velocitats.
Una aplicació directa d’aquesta tècnica seria per exemple controlar la il·luminació d’un
LED a través d’un microcontrolador amb sortida digital.
El terme cicle de treball (duty cicle) d’una senyal periòdica, es refereix a l’ample
relatiu de la seva part positiva en relació amb el període total del cicle. La mesura
s’expressa en percentatge.
A la fig 2.13 es poden observar 5 senyals amb diferents cicles de treball. Si suposem
que el voltatge màxim és típicament 5V per cada cas tindríem els següents voltatges de
sortida: a) 0V, b) 5*0.25=1.25V, c) 5*0.5=2.5V, d)5*0.75=3.75V e)5V
Figura 2.13 Diferents configuracions de PWM
en un pin de sortida d’Arduino
26
Com major sigui la resolució del PWM majors nivells de voltatge de sortida podran ser
configurats. Aquesta resolució dependrà directament de la resolució del temporitzador
que controla el microcontrolador.
Típicament Arduino UNO té 6 pins que permeten PWM: 3,5,6,9,10 i 11
A continuació es detallen més característiques del microcontrolador que seran
necessàries per a la implementació del software.
Arquitectura AVR
L’arquitectura AVR10
del microcontrolador d’Arduino, ATMega328P, es caracteritza
per l’ús de tres memòries diferents:
- Flash: Memòria d’emmagatzematge electrònic que pot ser esborrat i
reprogramat elèctricament. És on es guarda el programa o sketch i té reservats
32 KBytes.
- SRAM (Static Random Acces Memory): Memòria estàtica d’accés aleatori on
el programa crea i manipula les diferents variables. Té una capacitat de 2048
bytes.
- EEPROM (Electrically Erasable Programmable Read-Only Memory):
Emmagatzematge electrònic només de lectura que pot ser esborrat i programat
elèctricament, utilitzada per guardar informació de llarga durada. Té una
capacitat de 1024 bytes.
Com la gran majoria de microcontroladors ATMega328P s’organitza en forma de
registres, és a dir petites ranures de memòria on AVR pot emmagatzemar i consultar
dades concretes. Cada registre té una longitud de 8 bits i per tant és capaç de guardar 8
zeros i uns, és a dir 28 = 256 valors decimals.
Cada pin de l’Arduino depèn de tres registres diferents: DDR (Data Direction Register),
Registre PORT i registre PIN. El registre DDR s’encarrega de determinar la
funcionalitat del pin (entrada o sortida), el registre PORT per enviar i rebre dades i el
registre PIN per llegir el valor específic del pin. Per tal de controlar els diferents pins
de l’Arduino AVR conté quatre configuracions de registres etiquetats de la ‘B’ fins la
‘D’: DDRB, PORTB, PINB, DDRD, PORTD, PIND... Els pins d’Arduino es troben
mapejats de la següent forma:
‘D’ pins digitals 0-7
‘B’ pins digitals 8-13
‘C’ pins analògics 0-5
Cada bit d’aquests registres es correspon a un únic pin; p.ex. la instrucció: DDRD =
B11111110 configura les els pins 1-7 com a sortides i el pin0 com a entrada: PD0 = 0,
PD1 = 1, PD2 = 1... PD7 = 1. Si observem la fig 2.14 observem les diferents sortides
del microcontrolador ATMega328P amb el mapeig dels diferents pins.
10
AVR: Consisteix en una arquitectura dissenyada per a microcontroladors de 8-bits RISC i
desenvolupada per Atmel el 1996.
27
Un cop clara l’estructura principal d’emmagatzematge i instrucció del microcontrolador
cal introduir el concepte de temporitzador (timer).
Un timer consisteix en tipus de rellotge especialitzat en mesurar intervals de temps. El
microcontrolador ATmega328P està format per 3 tipus de timers diferents [17]. Cada un
dels timers està format per un contador que s’incrementa en cada tic del rellotge del
timer. Les seves principals característiques són:
Timer0: Té una resolució de 8 bits (256 posicions). S’utilitza en funcions
temporals pròpies de software Arduino: delay(), millis() i micros().
Timer1: Té una resolució de 16 bits (65536 posicions). La llibreria Servo (per controlar servo-motors) utilitza aquest timer.
Timer2: Té una resolució de 8 bits (256 posicions). La funció tone() (per reproduir sons a partir d’Arduino) utilitza aquest timer.
Figura 2.14 Mapeig dels diferents pins del
microcontrolador ATMega328P
28
Els diferents timers depenen del rellotge general de la placa que té una freqüència de
16MHz que equivaldria a un tic cada 1/16000000 ~ 63 ns (1x10-9
s).
En casos particulars Arduino permet la configuració personalitzada dels diferents timers
que el caracteritzen. Cal destacar que els canvis en els timers influirà a les funcions que
depenen de cadascun.
Aquestes configuracions són modificades realitzant un preescalatge, que consisteix en
una forma simple de controlar la velocitat d’increment del contador del timer.
Per tal de modificar les característiques dels diferents timers existeixen diversos
registres especials. A continuació s’han descrits els que s’han utilitzat en el programa
pel projector làser desenvolupat a través d’Arduino:
TCCRx (Timer/Counter Control Register): permet la configuració del factor preescalar. Està format per 8 bits i existeixen dos principals registres per timer
TCCRxA i TCCRxB (on x fa referència al timer que es referencia).
Eq 2.3
Figura 2.15 Bits dels registres TCCR1A i TCCR1B
29
El significat dels bits per a l’ajust dels diferent modes de configuració del tipus de
forma d’ona:
Els bits restants de la configuració dels registres TCCRxA i TCCRxB ens serveixen per
personalitzar el factor preescalar.
OCRx (Output Compare Register): Registre que conté un valor fixat i es va
comparant amb els valors que pren el timer.
Taula 2.9 Descripció de bits per selecció de clock
Taula 2.8 Descripció de bits per la generació de la forma d’ona
30
TIMSKx (Timer/Counter Interrupt Mask Register):
A mode d’exemple s’ha introduït l’explicació dels dos casos que s’utilitzen en el
programa d’Arduino que controla el projector làser.
Cas 1: Increment de la resolució del PWM del motor [18]
Les instruccions que s’han utilitzat són les següents:
>>TCCR1A |= (1 << WGM11); >>TCCR1A |= (1 << WGM10); >>TCCR1B &= ~(1 << WGM13); >>TCCR1B |= (1 << WGM12);
Inicialment amb les instruccions referents al registre TCCR1A (del primer timer) estem
indicant que els bits WGM11 i WGM10 prenguin el valor 1. Per tant:
TCCR1A = B00000011
Posteriorment amb les instruccions del registre TCCR1B estem indicant que els bits
WGM12, CS11 i CS10 valguin 1. Per tant:
TCCR1B = B00001011
Si observem les taules 2.8 i 2.9 observem que les instruccions introduïdes es tradueixen
com:
S’està seleccionant el mode7 que fa referència a: Fast PWM 10-bit
S’està seleccionant el valor 64 de prescaler.
Contribucions:
En aquest cas estem modificant Timer1 (pins: 9,10 amb freqüència base de 31.25 kHz)
per aconseguir una major resolució en els valors de sortida analògics que actuaran en el
motor. La llibreria servo() no podrà ser utilitzada. En aquest cas aplicant l’eq. 2.3
tindrem una freqüència del timer de:
Per tant el timer1 passarà de la freqüència base de 31.25 kHz a 250 kHz.
Cas2: Increment de la resolució del timer2 i personalització de la interrupció
Aquest cas està dissenyat per tal de discretitzar l’encesa i apagada del làser en períodes
de temps regulars [17]. Les instruccions utilitzades per a iniciar la modulació làser són:
>>TCCR2B |= (1<<WGM22); >>TCCR2B |= (1<<CS21);
31
>>OCR2A = 25; >>TIMSK2 |= (1 << OCIE2A);
En primer lloc s’estableix el registre TCCR2B (del timer2) amb valor 1 als bits
WGM22 i CS21:
TCCR2B = B00001010
S’està seleccionant el mode4 CTC (Clear Timer on Compare match): Quant el contador del timer pren el valor assignat al registre OCRx, el timer es reseteja.
S’activa el flag del registre OCR2A.
S’està establint el valor 8 de preescalar
Posteriorment establim 25 com a valor l’OCR2A. Aquest valor s’ha trobat de forma
analítica. Si partim de l’equació següent:
On freq representa la freqüència de reseteig del contador desitjada. En el cas descrit
s’està utilitzant el valor 25 pel registre i per tant:
Si expressem el resultat en forma de segons:
Observem doncs, que s’està establint que el contador del timer es resetegi cada
12.5x10-6
segons. Aquesta serà la resolució de cada píxel de la projecció.
Finalment la última instrucció serveix per activar la interrupció temporal (els detalls del
software es troben en el següent capítol).
2.6 Font d’alimentació Per alimentar al motor s’ha optat per una font d’alimentació (conversor AC/DC)
universal amb tensió de sortida ajustable.
Eq 2.4
Eq 2.5
32
Voltatge d’operació 100 – 240 V
Voltatge de sortida 3/4.5/5/6/7.5/9/12 V
Màxim corrent de sortida 1.5 A
2.7 Capçal El disseny del capçal i el seu posterior ajustament ha estat una de les parts del Hardware
que més temps i dificultats ha suposat. Se n’han fet diversos models dels quals se’n
destacaran els tres més rellevants.
Els primers dissenys experimentals es val fabricar de forma totalment manual per
entendre les dificultats tècniques que presentava el mecanisme.
Fixació de la peça amb l’eix del motor
L’ajustament del forat central de la peça ha d’encaixar de forma mil·limètrica amb l’eix
del motor. En cas contrari la rotació no serà regular i afectarà a la detecció del sensor i
en el reflex del làser en els miralls.
Establiment d’un mètode d’ajust per aconseguir una inclinació
proporcional entre els diferents miralls
La inclinació entre els miralls determinarà la separació entre les línies de projecció i per
tant aquest és un punt molt important per a la representació final.
Cal destacar que la intenció inicial era d’aconseguir una projecció a una distància
superior a tres metres amb una separació entre línies molt petita (per facilitar la
comprensió dels caràcters). A causa de les dificultats d’ajust ha calgut una adequació
dels objectius a les possibilitats físiques de construcció.
Per la construcció de les diferents peces del capçal s’ha utilitzat impressió 3D.
La impressió 3D es refereix als processos utilitzats per a sintetitzar un objecte en tres
dimensions. La impressió es basa en el procés FDM (Fused Deposition Modeling) on un
capçal (nozzle) escalfa i diposita el material semi-sòlid en capes seqüencials resseguint
la forma desitjada. Quant el material es refreda, es compacta i es solidifica formant
l’objecte introduït a través del software. Existeixen moltes tecnologies i models
d’impressores 3D en funció dels materials i els mètodes empleats en la impressió.
Per la implementació de les peces s’ha utilitzat una impressora Ultimaker 2 disponible a
la universitat. El material que s’ha utilitzat és un termoplàstic PLA perfecte per
impressions complexes, rígid i resistent als impactes.
Les característiques més rellevants del model són [19]:
Taula 2.10 Imatge i característiques de la font d’alimentació utilitzada
33
Volum màxim d’impressió 223x223x205 mm
Superfície d’impressió Plataforma d’escalfament (50º-100º)
Resolució de capa Baixa: 0.2 mm
Normal: 0.1 mm
Alta: 0.06 mm
Diàmetre del filament 2.85 mm
Precisió 12.5/12.5/5 µm
Software suportat Cura
Pel disseny de les peces s’han utilitzat dos softwares de modelatge d’objectes 3D
diferents: Sketchup (gratuït) i Autodesk Inventor 2016 (s’ha utilitzat la versió de
prova).
Tot i que els dos programes permeten una personalització força precisa dels objectes,
Autodesk Inventor és més user-friendly i per tant permet el desenvolupament de
dissenys més complexos amb més facilitat.
Un cop dissenyats els objectes 3D en format .obj s’han introduït al programa
d’impressió típicament utilitzat per a la màquina: Cura.
Cura [20] consisteix en un software open-source, encarregat de crear les instruccions
per a la màquina (GCode) a partir d’un model 3D.
A continuació se n’especifiquen els detalls de disseny i construcció de tres models
diferenciats.
Taula 2.11 Imatge de l’impressora 3D Ultimaker 2, model de CPE i taula d’especificacions.
34
Primer prototip: model manual
S’ha realitzat un disseny octogonal de la peça, pensada per 8 miralls. Tenint en compte
les dimensions dels miralls utilitzats en aquest model (10x10 mm) s’ha buscat una
grandària de l’octògon que oferís un cert marge (15x15 mm).
Per determinar-ne el radi sabent els valors dels costats s’ha partit de l’angle interior del
polígon regular i per trigonometria:
A la figura 2.15 s’observa que les dimensions del radi de l’octògon són de 20mm.
Eq 2.6
Figura 2.16 Vista de l’alçat i el perfil del
prototip1 mitjançant el programa Sketchup
35
En aquest model s’ha deixat una distància de 17 mm perquè la projecció del làser no es
veiés interrompuda per l’IR sensor, cosa que s’ha descartat en els models futurs per
irrellevant. Pel que fa a l’ajustament de la peça amb l’eix del motor ha estat ben
aconseguit després de varies proves. L’ajustament dels miralls és totalment manual, no
preveu cap sistema d’ajust.
La dificultat d’ajust de la inclinació dels miralls és el principal problema d’aquest
disseny.
Segon prototip: model fix
L’objectiu d’aquest prototip ha estat la millora en la parametrització de la inclinació
dels miralls. En aquest model s’ha dissenyat una peça amb inclinacions variables fixes
de tal manera que els miralls puguin ser directament fixats sense tenir en compte les
seves inclinacions.
Al necessitar un disseny molt més complex de l’objecte 3D s’ha utilitzat el software
Autodesk Importer.
Per obtenir les inclinacions necessàries inicialment ha calgut un càlcul trigonomètric en
funció de la distància de projecció i la distància entre línies desitjada.
Dimensions 70x37 mm
Pes
Miralls Dimensions: 10x10 mm
Inclinació: Ajustats de forma manual
amb Superglue
Fixació amb l’eix del Motor Estable a altes revolucions del motor
Software de disseny Sketchup
Impressió Material: PLA
Taula 2.12 Imatge de la peça impresa i taula de
característiques
36
D’esquerra a dreta de la fig 2.16 tenim els dos miralls consecutius amb una inclinació α
entre ells i a l’altre extrem la pantalla de projecció. S’ha partit de l’objectiu
d’aconseguir projectar a una distància de 3 m amb una separació entre línies d’1 cm.
Per obtenir la distància x es parteix de la suposició que el feix làser és completament
perpendicular a la superfície dels miralls.
Per tant doncs la inclinació de cada cara consecutiva de l’octògon haurà de ser de
0.0033 mm. Pel que fa al disseny de la peça té les mateixes dimensions que el primer
prototip excepte l’altura, que s’ha reduït a 24 mm, eliminant així la part irrellevant per
evitar el solapament del sensor i del làser.
10 mm
10 mm α
α
x Figura 2.17 Representació de la inclinació entre
dos miralls i la seva projecció
Figura 2.18 Vista alçat del prototip 2 i les
inclinacions de les cares a través d’Autodesk
Inventor
37
Així doncs el model imprès té les següents característiques:
La separació entre línies no ha esta l’esperada possiblement pel marge d’error introduït
per la rugositat de les parets i la resolució pròpia de la màquina (que és 0.01 mm menor
a la distància calculada d’inclinació).
Al tractar-se de mesures tant petites (deu vegades inferiors al gruix d’un full de paper)
s’ha arribat a la conclusió que el millor mètode d’ajust amb els recursos disponibles ha
de ser manual però amb algun sistema d’ajut.
Tercer prototip: model mixt
Aquest model s’ha dissenyat pensant en aconseguir una rotació molt més estable i una
forma d’ajust manual de la inclinació dels miralls que faciliti els objectius desitjats.
Els miralls que s’han utilitzat són de dimensions majors als anteriors per tal de permetre
flexibilitat en l’enfocament del làser.
Per aconseguir l’estabilitat en la rotació s’ha utilitzat un motor amb les mateixes
característiques que en els models anteriors però amb una plataforma adossada a l’eix
(procedent d’un reproductor de CD). D’aquesta forma i fixant el capçal a la plataforma s’eliminen els problemes d’oscil·lació que es trobaven en anteriors provatures.
Pel que fa a l’ajust dels miralls s’han afegit unes cavitats a la part inferior per tal de
col·locar la cola de fixació i no afectar a la inclinació dels miralls. També s’ha introduït
un sortint a la part posterior dels miralls amb l’objectiu de facilitar l’ajust de la
variabilitat d’inclinació. El disseny de la peça s’ha realitzat mitjançant Sketchup.
Dimensions 70x24 mm
Pes 10 g
Miralls Dimensions: 10x10 mm
Inclinació: Intrínseca a la peça
Fixació amb l’eix del Motor Estable a altes revolucions del motor
Software de disseny Autodesk Inventor
Impressió Material: PLA
Taula 2.13 Imatge de la peça impresa i taula de característiques
38
Els resultats en aquest cas han estat més pròxims als esperats tot i que no s’ha
aconseguit la precisió desitjada en la inclinació dels miralls. A continuació
s’especifiquen les característiques d’impressió i també es presenta un exemple del
software Cura utilitzat en tots els models per imprimir.
Figura 2.19 Vista de l’alçat i el perfil del
prototip3 mitjançant el programa Sketchup
39
En aquest cas la peça impresa té les següents característiques:
Dimensions 70x39 mm
Pes 10 g
Miralls Dimensions: 10x20 mm
Inclinació: manual amb ajuts del
disseny
Fixació amb l’eix del Motor Estable a altes revolucions del motor
Software de disseny Sketchup
Impressió Material: PLA
Figura 2.20 Vista del programa Cura amb el protip 3
llest per imprimir
Taula 2.14 Imatge de la peça impresa i taula de característiques
40
Finalment tot i les dificultat tècniques s’ha aconseguit un model de capçal que permet
una projecció prou correcta tot i que si que és cert que hi ha força marge de millora. Tot
i això val a dir que s’ha aconseguit que el pes de la peça no fos rellevant en la totalitat
del projector gràcies als materials utilitzats. L’anàlisi dels resultats així com la proposta
de millores es pot trobar al quart capítol.
A nivell d’assemblatge i de posta apunt de les diferents parts del Hardware s’ha realitzat
a un taller equipat amb un soldador, serres de tall, torn, fresadora...
Algunes fotografies del procés de posta apunt es poden trobar a l’Annex.
41
3. DISSENY DE L’ENTORN DE PROGRAMACIÓ En aquest capítol es descriu el software utilitzat per la consecució dels resultats desitjats
en el projector làser. El software es pot dividir en dues parts diferenciades: el disseny de
les instruccions d’operació (implementat amb el software d’Arduino) i el disseny de la
interfície (a través de la plataforma Java Netbeans).
3.1 Arduino Software En el segon capítol s’ha parlat de la plataforma Arduino des d’un punt de vista físic i
d’especificacions tècniques. Cal destacar que el mòdul ve acompanyat d’un software:
Arduino Integrated Development Environment [21] - o Arduino Software (IDE) -
caracteritzat per ser open-source i encarregat d’enviar i traduir les instruccions de
l’usuari al microcontrolador. El software està disponible en les plataformes de
Windows, Mac OS X i Linux i consta d’un entorn desenvolupat en llenguatge Java i
basat en Processing11
.
3.1.1 Característiques
El medi de desenvolupament s’organitza en forma d’Sketch o programes que conté el
codi que posteriorment es carrega i s’executa a la placa. L’Sketch funciona de forma
similar a altres llenguatges caracteritzat per les variables (localitzacions per
emmagatzemar una única dada) i les funcions (procediments o subrutines del
programa). Cada sketch ha de contenir com a mínim dues funcions especials:
setup(): Es crida cada vegada que s’inicia l’sketch i per tant és un bon lloc per inicialitzar variables i llibreries o configurar el mode de treball dels pins que
s’utilitzaran.
loop(): És una funció que es de forma repetida al llarg de l’execució del programa. Acostuma a contenir la part més rellevant del codi.
Al basar-se en llenguatge open-source existeixen nombroses llibreries disponibles que
permeten diferents funcionalitats. Les funcions més bàsiques en
pinMode(): Permet la configuració de qualsevol pin d’Arduino com entrada o
sortida (INPUT o OUTPUT).
digitalRead()/digitalWrite(): Escriu o llegeix un valor digital al pin d’Arduino especificat. Accepta com a paràmetres d’entrada els valors HIGH o LOW. Així
doncs coneixent les especificacions dels pins, el valor HIGH generarà una
sortida de 5 V en el pin especificat i el valor LOW 0 V.
11
Processing consisteix en software flexible i un llenguatge que permet codificar en el context de les arts
visuals.
42
analogWrite(): Utilitza la PWM (descrita en el capítol anterior) per tal
d’alimentar la sortida d’un pin amb valors de voltatge variables. Accepta per
defecte valors compresos entre 0 i 255 a causa de les especificacions del
microcontrolador. Només alguns pins específics de la placa permeten PWM.
analogRead(): Llegeix els valors d’entrada analògica i els mapeja en valors enters entre 0 i 1024. Tenint en compte que la entrada màxima és de 5V la
resolució de la lectura és de 4.9 mV per unitat. Només alguns pins d’Arduino
permeten la lectura analògica, normalment etiquetats com a ANALOG IN.
Per comunicar-se amb l’ordinador totes les plaques Arduino tenen un port serial (UART
o USART) que utilitza els pins digitals 0 (Rx) i 1 (Tx) o el port USB per enviar i rebre
dades. Si es vol establir comunicació amb el port serial durant l’execució del programa
caldrà incloure les següents funcions:
Serial.begin(): Estableix la velocitat de dades en que es caracteritzarà la transmissió. Per la comunicació amb el PC existeixen 12 possibles velocitats:
300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, o
115200. Cada valor està expressat en bauds (Bits per segon).
Serial.read(): Llegeix el valor de les dades d’entrada del port serial.
Serial.print(): Escriu un valor al port serial en format de text ASCII
Aquestes són les característiques i funcionalitats bàsiques d’un Sketch d’Arduino, on
posteriorment és traduït a llenguatge màquina pel compilador.
En casos específics el desenvolupament temporal del programa serà de vital importància
(com en el cas del projector làser) i per tant existeixen tècniques per tal de reduir el
temps d’execució de certes funcions.
Una d’aquestes tècniques consisteix en la manipulació directa dels ports sense
realitzar les comprovacions de configuració del pin que inclouen moltes funcions p ex:
digitalWrite(). Posteriorment quant s’analitzi el codi implementat es farà referència als
detalls d'aquest tipus d’instruccions que vénen definides per l’arquitectura AVR del
microcontrolador.
3.1.2 Interrupts
El programa introduït en el controlador normalment s’executa de forma seqüencial
instrucció a instrucció. En certs programes però són necessàries les interrupcions, que
aturen l’execució normal de les instruccions quant es compleix una condició i executen
una sèrie d’ordres localitzades en unes funcions especials anomenades ISR (Interrupt
Service Routine). Un cop es finalitza la ISR el programa continua amb l’execució
seqüencial en el punt on s’havia aturat.
En el firmware d’Arduino les interrupcions estan activades per defecte en el registre de
màscara TIMSKx. La funció específica attatchInterrupt() permet la definició d’una
nova interrupció en cas de complir-se la condició indiciada i només pot ser utilitzada
43
pels pins configurats com a “utilitzables per interrupcions” (en cas d’Arduino UNO
aquests pins són el 2 i el 3).
3.1.3 Teoria del control Aquest concepte també s’introdueix ja que serà rellevant per a la comprensió del
software implementat. La teoria del control fa referència al comportament de sistemes
dinàmics que tenen unes entrades i com modifiquen el seu comportament a través d’un
feedback.
Un tipus de control és el closed-loop control o feedback control el qual es caracteritza
per buscar i mantenir un estat desitjat en un sistema comparant de forma continua
l’estat actual amb l’estat desitjat i ajustant l’estat actual per minimitzar-ne la diferència.
És un concepte molt aplicat en robòtica i existeixen diferents tipus de control de
feedback que no s’exposaran ja que es surt dels objectius del projecte.
3.1.4 Software Arduino Projector Làser Un cop introduïdes les principals característiques del software que han sigut utilitzades
és moment d’analitzar les diferents parts del programa. Cal destacar que el codi
implementat no s’ha desenvolupat des de zero, sinó que s’ha utilitzat com a referència
altres models presents en diferents projectes de projectors làsers de mapa de bits,
especialment el que es pot trobar a l’enllaç corresponent [22].
El programa conté unes 970 línies de codi i s’organitza en diferents funcions i variables.
En aquest punt s’intenta descriure la seva funcionalitat de mode seqüencial i per tant ha
estat dividit en diferents blocs.
setup()
Conté les instruccions d’inicialització del programa i l’assignació i configuració dels
diferents pins. Inicialment obrim la connexió amb el port serial i assignem un nom i
configuració a cada pin en funció dels diferents elements del hardware:
- Pins assignats al Motor
Figura 3.1 Esquema d’un sistema regulat per un
closed-loop control
44
Pins assignats al Làser
Pins assignats al Sensor
A part de l’assignació dels diferents pins en setup() també definim una interrupció:
>>attachInterrupt(0,motorSpeedDetector,FALLING);
Variable: MOTOR_R Digital Pin: 12
Estableix la direcció de rotació del motor a través
del microcontrolador L293D. Es configura com a
OUTPUT i amb valor HIGH.
Variable: MOTOR_L Digital Pin: 13
Estableix la direcció de rotació del motor a través
del microcontrolador L293D. Es configura com a
OUTPUT i amb valor LOW.
Variable: MOTOR_PORT Digital PWM Pin: 10
S’encarrega de configurar la velocitat de rotació del motor.
Per augmentar-ne la resolució (Timer1) s’executen les
comandes explicades en l’apartat 2.5 del capítol anterior. Es
configura com a OUTPUT.
Variable: LASER_PORT Digital PWM Pin: 3
S’encarrega d’encendre i apagar el làser durant la fracció de
temps determinada. Es configura com a OUTPUT.
Variable: SENSOR_IN Digital Pin: 7
Alimenta elèctricament el sensor làser. Es configura com a
OUTPUT i amb valor HIGH.
Variable: SENSOR_OUT Digital Pin: 2
S’encarrega de llegir la sortida digital del sensor. Es
configura com a INPUT.
45
Aquesta interrupció és la que fa referència al sensor: quant el pin caracteritzat per la
interrupció 0 (és a dir el pin 2) detecta que el valor d’entrada passa del valor més alt al
més baix (FALLING) executa la ISR motorSpeedDetector.
Si s’analitza la resposta del sensor es pot observar com el valor retornat en el pin2
quant hi ha un obstacle entre el LED i el fotodíode és 0 i sense obstacle és 1 (digital
input). Per tant amb aquesta instrucció, cada vegada que el forat del capçal passa pel
sensor, aquest emet uns i quant detecta el canvi d’uns a zeros (perquè el forat ja ha
passat) crida a la ISR. Un exemple gràfic d’aquest cas es presenta figura 3.2.
Interrupcions
L’execució del programa es troba organitzada en dues interrupcions diferents: la
interrupció del IR sensor per detectar cada volta i la interrupció del làser per
encendre’s o apagar-se en cada píxel de la matriu durant els mateixos intervals de
temps.
Figura 3.2 Lectura del pin 2 d’entrada del sensor a través del port serial depenent de
la posició del forat.
46
Les interrupcions es troben definides en dues funcions: motorSpeedDetector() i
ISR(TIMER2_COMPA_vect)
- motorSpeedDetector()
S’executa cada vegada que el sensor detecta una volta de rotació del motor.
Implementa un closed-loop control per tal de reajustar la velocitat del motor en
funció de la velocitat de cada revolució.
A través de la funció interna d’Arduino micros() s’obté el nombre de microsegons
des de que la placa ha començat a operar i es resta del període anterior per obtenir
els microsegons de la volta actual. Aquest valor es compara amb un setpoint
(configurable per l’usuari). En cas que la diferència entre els microsegons teòrics i
els calculats sigui major que 50 la velocitat del motor s’augmenta en una unitat. En
cas contrari es disminueix la velocitat del motor.
Com s’ha explicat prèviament la resolució de la PWM del pin 10 (Timer1) s’ha
augmentat a Fast PWM 10-bits. Això significa que passem a tenir més possibles
valors de voltatge de sortia, de 256 valors a 1024 (210
). Permet una velocitat del
motor d’entre
El diagrama de flux de la funció motorSpeedDetector es troba en la figura 3.3 on
time representa els µs de la revolució anterior, motor_rate_step la resolució
d’augment o disminució de la velocitat del motor (valor 1) i setpoint la velocitat
indicada per l’usuari en µs.
Figura 3.3 Esquema de la funcionalitat de la interrupció motorSpeedDetector()
47
- ISR(TIMER2_COMPA_vect)
Aquesta interrupció va lligada a la funció enableLaserModulation() la qual
s’encarrega d’activar la interrupció a través el flag TIMSKx i d’augmentar la
resolució i configurar la durada del contador del Timer2.
Les operacions específiques de enableLaserModulation() estan explicades
detalladament a l’apartat 2.5 de l’anterior capítol.
Un cop activada la interrupció, la ISR s’executa cada vegada que passin 12.5 µs
(quant el Registre OCR2A tingui el valor 25). Aquesta ISR llegirà de forma
seqüencial cada vegada que sigui cridada el valor corresponent del frameBuffer a
través de readFrameBufer() que retorna un 1 si el làser s’ha d’encendre o un 0 si el
làser s’ha d’apagar. Per tant en funció del valor del frameBuffer el làser estarà
apagat o encès durant 12.5 µs.
START
Setpoint
time
motor_rate_step
dTime = micros() -
time
Setpoint -
dTime >50
Output = Output +
motor_rate_step
analogWrite
(MOTOR_PORT,
Output)
Output = Output -
motor_rate_step
analogWrite
(MOTOR_PORT,
Output)
YES
NO
Figura 3.4 Diagrama de flux de motorSpeedDetector()
48
Al ser una interrupció que es crida amb una freqüència tant elevada les instruccions
que conté han de ser molt executades molt ràpidament. Per aquest motiu
s’implementa una manipulació directa dels ports.
Encendre el làser:
>>PORTD = PORTD | B00001000;
Apagar el làser:
>>PORTD = PORTD & B11110111;
A l’escriure directament el byte B00001000 al registre PORTD estem realitzant la
mateixa operació que digitalWrite(3,HIGH) però enlloc de tardar 56 cicles a
completar-se l’operació es completa només amb 2 cicles [23]. El mateix resultat es
dóna amb la instrucció d’apagar el làser.
loop()
Part central del programa que permet el processat de les diferents instruccions que
l’usuari pot enviar al sistema a través del port serial. Executa la funció
serialCommandHandler() que accepta les següents comandes:
Instrucció: MOTOR ON Comanda: fxxxxx|
En funció del paràmetre numèric comprès entre “f” i “|”
estableix el setpoint de motorSpeedDetector() i activa la
variable motorON com a true. S’accepten valors d’entrada
entre 10000 i 90000 µs.
Instrucció: MOTOR OFF Comanda: o|
Activa la variable motorON com a false i desactiva el motor:
analogWrite(MOTOR_PORT, 0).
Instrucció: LASER ON Comanda: l|
Desactiva la modulació làser a través de la funció
disableLaserModulation(). El que s’encarrega de fer
aquesta funció és resetejar els paràmetres per defecte del
Timer2 i desactivar el flag de TIMSKx que crida a la ISR
de la modulació. Posteriorment s’encén el làser activant la
sortida del pin 3 com a HIGH.
49
Aquestes són les comandes generals que l’usuari pot introduir al programa.
Primer cal destacar que els caràcters acceptats es troben definits a la variable BitMap
de forma fixa que té estructura de matriu de zeros i uns i cada un té unes dimensions de
8x6. En el cas del caràcter ‘A’ p ex:
>> PROGMEM const prog_uint8_t BitMap[8*41][6] = [...] 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, [...] Els caràcters es guarden a la memòria FLASH mitjançant la instrucció PROGMEM, de
tal manera que seran constants i no podran ser modificats un cop s’executi el programa.
Instrucció: LASER OFF Comanda: k|
Desactiva la modulació làser a través de la funció
disableLaserModulation().Posteriorment s’apaga el làser
activant la sortida del pin 3 com a LOW.
Instrucció: SAVE DETECTED RATE Comanda: s|
Activa el retorn de la velocitat calculada per cada volta a través del port serial.
Aquesta operació merament informativa produeix un retard en la representació
dels missatges i per tant al activar-se es desactiva la modulació làser.
Instrucció: FIXED MESSAGE Comanda: mfxxxxxxxx|
Llegeix el missatge introduït per l’usuari que ha de tenir una longitud d’entre
1 i 8 caràcters. Inicialment es crida la funció enableLaserModulation() que
activa la ISR i augmenta la resolució del Timer2. Posteriorment s’envia el
missatge en l’array d’enters messageBuff com a paràmetre de la funció
displayMessage() que s’encarrega d’omplir l’array frameBuffer amb els 0 i
1 necessaris per la projecció dels caràcters especificats.
Instrucció: SCROLLING MESSAGE
Comanda: msxxxxxxxx[...]|
Llegeix el missatge introduït per l’usuari que pot tenir una longitud màxima de
500 caràcters. Activa la modulació làser i també el flag ‘SCROLL’. La
representació dels caràcters serà igual que en FIXED MESSAGE però al activar
el flag anirà desplaçant la posició de cada caràcter des de l’esquerra de la
pantalla cap a la dreta permetent la representació de missatges llargs.
50
Per entrar més en detall de la comprensió del codi s’ha posat com a exemple la
representació del caràcter ‘A’ i les diferents funcionalitats involucrades.
Port Serial: mfA|
Al inciar-se el programa loop() crida a la funció serialCommandHandler() amb
l’entrada del missatge:
START
mfA|
command[]: Es reinicialitza i
emmagatzema el missatge fins
“|”
Analitza i reconeix la primera
lletra
p ex: ‘m’
displayMessage(messageBuffer,
mode, cont_mess)
mode: segon caràcter de la comanda
cont_mess: nombre de caràcters a
representar introduits
messageBuffer[]: buffer d’enters que
representen els caràcters introduitses
reinicialitza i s’omple
p ex: messageBuffer[0] = byteToInt(A)
mode = ‘f’; messageBuffer[0]=11;
cont_mess = 1
byteToInt(): converteix el
carácter en número
p ex: byteToInt(A) = 11
enableLaserModulation()
m f o l k
Figura 3.5 Diagrama de flux de
serialCommandHandler()
51
Un cop analitzada la comanda i convertits els caràcters a representar en números enters
es crida la funció displayMessage().
La funció bàsica de displayMessage() consisteix en cridar seqüencialment
displayCharacter() per cada caràcter introduït per l’usuari amb un offs que es va
incrementant per cada caràcter que es representa.
messageBuffer[]
mode
cont_mess
Analitza i reconeix la variable
mode
p ex: ‘f’
f s
flow: flag per determinar el tipus
de projecció
offs: enter necessàri per escriure
caràcters seguits
p ex: flow = ‘FIXED’
offs = 0
i = 0,cont_mess,1
displayCharacter(offs*6,
messageBuff[i])
offs +=6
Figura 3.6 Diagrama de flux de
displayMessage()
52
L’execució de la funció displayCharacter() es presenta a continuació:
pos: valor d’offs
shape: valor numèric del
carácter
p ex: pos=0; shape=11
line = 0,7,1
pixel = 0,5,1
data = true
data =
pgm_read_byte(&Bitmap[line+s
hape*8][pixel])
p ex: data =
pgm_read_byte[88…95][0…6]
data = false
lightLines(line,pixel,pos)
p ex: ligtLines(0..7,0..5,0)
extinguishLines(line,pixel,pos)
p ex: extinguishLines(0..7,0..5,0)
Figura 3.7 Diagrama de flux de
displayCharacter()
53
En aquest cas recorrem els diferents valors del caràcter seleccionat de la variable
Bitmap, que és la que conté tots els caràcters representats possibles. En cas que llegim
un 1 s’executa la funció lightLines() i en cas de llegir un 0 extinguishLines().
En aquest cas els valors per cada línia han estat trobats i ajustats analíticament. Com
major sigui el número definit per cada fila més a la dreta de la pantalla es desplaçarà la
projecció. Els valors per les files des de la línia 0 a la 7 són respectivament: 516, 425,
333, 608, 234, 706, 52 i 144.
Posteriorment es crida a la funció lightPixel()
El que es fa és omplir el buffer que conté tots els possibles valors de la representació
int frameBuffer[80] amb zeros i uns. Al tractar-se d’un buffer d’enters cada posició de
l’array tindrà una resolució de 16 bits (2 bytes). Per tant amb un array de 80 posicions
es podran guardar 1280 bits que són suficients per a la resolució de la pantalla del
projector làser.
lineNum
pixelNum
offst
Selecciona la línia corresponent
lightPixel(516+
pixelNum+offs)
lightPixel(425+
pixelNum+offs)
lightPixel(333+
pixelNum+offs)
pixelID
pixelID%16
Es calcula el mòdul
entre pixelID i 16
bitWrite(frameBuffer[int(pixelID/16)],
0, 1)
bitWrite(frameBuffer[int(pixelID/16)],
1, 1)
Figura 3.8 Diagrama de flux de
lightLines()
Figura 3.9 Diagrama de flux de lightPixel()
54
Calculant el mòdul de pixelID i 16 distribuïm els 1 en les posicions del buffer precises
(inicialitzat amb tots els valors a 0).
S’utilitza aquest sistema per tal d’optimitzar al màxim la memòria limitada de la placa
que és de 32.256 bytes. Pel cas d’extinguishLines() i extinguishPixel() la metodologia
és exactament la mateixa, on enlloc d’omplir el buffer amb uns s’omple amb zeros.
D’aquesta forma gràfica s’ha explicat com s’omple l’array d’enters frameBuffer quant
es vol representar un o varis caràcters. Posteriorment i a través de les interrupcions ja
explicades el programa s’encarrega de llegir el buffer i encendre i apagar el làser per
anar mostrant el missatge.
L’única diferència que suposa l’escriptura d’un missatge que es mou consisteix en
l’activació del flag SCROLLING a la funció loop(). Aquesta implementa un switch on
cada cop que es repeteix loop() mou tots els caràcters representats una posició a
l’esquerra, fent desaparèixer el que es surt de la pantalla i incloent el nou caràcter.
3.2 Interfície gràfica Per tal de facilitar l’enviament de comandes al port Serial s’ha desenvolupat una
senzilla interfície gràfica a través llenguatge Java ( programació orientada a objectes).
Com a plataforma de desenvolupament s’ha escollit Netbeans IDE [24] al tractar-se
d’una multiplataforma gratuïta que accepta Java, PHP, C/C++, i HTML5.
Comunicació Serial
Java és una plataforma independent i per tant l’obertura de la comunicació serial no és
senzilla. Inicialment SUN (el desenvolupador de Java) va crear una aplicació
anomenada JavaComm que no formava part de l’edició estàndard de Java i per tant no
estava disponible en totes les plataformes. Per aquest motiu es va desenvolupar la
llibreria RxTx de software lliure que ofereix una interfície més rica sense estar
estandarditzada.
Actualment si es desitja una major portabilitat entre diferents aplicacions de Java es
recomana l’ús de l’API JavaComm i en cas de no estar implementada es pot utilitzar
RxTx com a driver. Al no necessitar aquesta portabilitat i al trobar més guies
d’instal·lació i ús d’RxTx s’ha optat per aquesta llibreria.
Per instal·lar la llibreria a Windows és necessari realitzar les següents operacions [25]:
Figura 3.10 Exemple de la representació
del caràcter’A’amb les diferents posicions
del frameBuffer
55
- Descarregar els arxius rxtxSerial.dll i RXTXComm.jar
- Ubicar rxtxSerial.dll als diferents directoris de Java:
- C:\Program Files\Java\jdkx.x.x\bin (on x.x.x es refereix a la versió del
paquet jdk)
- C:\Program Files\Java\jrex.x.x\bin (on x.x.x es refereix a la versió del paquet
jre)
- C:\Windows\ SysWOW64 (System32 en cas d’utilitzar un sistema operatiu
de 32 bits)
- Ubicar RXTXComm.jar als diferents directoris de Java:
- C:\Program Files\Java\jrex.x.x\lib\ext
Per tal d’explicar la implementació de la interfície, inicialment s’ha realitzat una
descripció de les diferents classes i objectes involucrats en la comunicació Serial.
- JMainInterface: Es tracta de la classe principal constituïda com a JFrame Form
des d’on es creen i s’executen les diferents classes. Conté la funció principal main()
i el disseny gràfic amb els diferents elements que interactuen amb l’usuari (jButton,
jComboBox, jLabel, jScrollPanel...). Els atributs i les operacions més importants són
presentats en la següent taula
JMainInterface
Atributs
//S’inicialitzen els tres fitxers de text que es faran servir, els diferents objectes lligats a la interfície
gràfica (jButtons...) no s’han inclòs
package File currentDirFile = newFile(“config.xml”)
package File currentLogFile = newFile(“logFile.log”)
package String log_path = currentLogFile.getAbsolutePath()
package File currentMRFile = newFile(“motor_rate.txt”)
package String mr_path = currentMRFile.getAbsolutePath()
//Es creen instàncies de les classes que s’utilitzen
Arduino conn = new Arduino()
XMLprocess configParams = new XMLprocess(currentDirFile)
WriteFile log = new WriteFile(log_path,true);
WriteFile mr = new WriteFile(mr_path,true);
Operacions
//No s’han inclòst les operacions lligades als diferents elements de la interfície gràfica per evitar
redundància.
public static void main(String args[]) //Funció principal del programa
private void initComponents() //Inicialitza els elements de la interfície gràfica
private void setPortList() //Llegeix l’ArrayList de la classe Arduino i omple el jComboBox de la
interfície amb els valors llegits
private boolean checkBaudRate(String baud) //Comprova que la baud_rate especificada al fitxer
“config.xml” sigui correcta
private String checkText(StringText) //Crida a la funció checkChar per cada caràcter del text
introduït per l’usuari per a representar
private boolean checkChar(char temp) //Comprova que el caràcter introduït sigui reconegut
public void EventAdded(ActivityRegisterEvent Description) //Cada vegada que s’afegeix una
descripció d’estat, aquesta és mostrada per la consola principal i escrita en el fitxer “LogFile.log”
public void EventAdded(SerialInputMREvent Description //Cada vegada que es detecta
l’entrada de dades des de la placa Arduino aquestes són escrites en el fitxer “motor_rate.txt”
Taula 3.1 Atributs i operacions principals de la classe WriteFile
56
- Arduino: Classe encarregada de l’obtenció de la llista de ports disponibles i
d’enllaçar amb la classe SerialRxTx. Utilitza funcionalitats de la llibreria RxTx.
- SerialRxTx: És instanciada des de la classe Arduino i el seu objectiu és dur a terme
les tres operacions principals amb el port Serial: obertura, tancament i enviament de
dades. Utilitza funcionalitats de la llibreria RxTx.
- WriteFile: S’encarrega de crear, i omplir un fitxer de text instanciat.
Arduino
Atributs
Operacions
public Arduino() //Constructor
public ArayList getPortList() //Retorna una llista d’arrays amb els ports
serials que estan ocupats.
public void OpenCommArduino (String serialCOM, int data_rate)
//Crea una nova instància (arduino) de la classe SerialRxTx(serialCOM,
data_rate)
public void CloseArduinoComm() //Crida l’operació close de l’objecte
arduino
public void CommArduino(String value) //Crida l’operació
sendData(value) de l’objecte arduino.
SerialRxTx
Atributs
private OutputStream serialOut = null
privateInputStream serialIn = null
private String inputLine = “”
public SerialPort = null
private int data_rate
private String serialCOM
Operacions
public SerialRxTx(String serialCOM, int data_rate) //Constructor
public void initialize() //Prova d’establir connexió amb el port indicat i la
velocitat de transimissió indicats
public void close() //Prova de tancar la transmissió de la variable serialPort
public void SendData(String option) //Converteix el missatge option a
bytes i els envia a través de la comunicació serial.
public void serialEvent(SerialPortEvent evt) //En cas que detecti que
Arduino està enviant dades, les converteix a String (es produirà quan s’activi
la opció “Save Detected Rate”)
Taula 3.2 Atributs i operacions principals
de la classe Arduino
Taula 3.3 Atributs i operacions principals
de la classe SerialRxTx
57
- XMLprocess: En aquesta classe es processen els valors que per defecte seran
configurats en la interfície llegint un fitxer d’entrada anomenat config.xml.
Aquestes característiques són les propietats de rotació del motor o les
característiques de la comunicació Serial entre la interfície i Arduino.
El programa també implementa dos listeners que s’utilitzen per registrar les diferents
comandes enviades a través de la comunicació Serial i recollir els valors retornats pel
programa d’Arduino, p ex: la velocitat de rotació del motor a cada volta.
- ActivityRegisterListener: Consisteix en una classe tipus interface que va lligada a
un esdeveniment (ActivityRegister) el qual s’activa cada vegada que una comanda
o acció és executada per l’usuari. D’aquesta manera es va creant un registre de les
diferents operacions realitzades.
- SerialInputMRListener: Declarat també com a interface lligada a una classe
(ActivityRegister) que obté les dades que són enviades des del programa d’Arduino
a través del port serial. En aquest cas s’encarrega d’obtenir la velocitat calculada per
cada volta a través del sensor.
WriteFile
Atributs
private String path
private boolean append_to_file = false
Operacions
public WriteFile(String path, boolean append_to_file) //Constructor
public void writeToFile(String textLine) //Escriu la línia
especificada en el fitxer de text
XMLprocessFile
Atributs
private final File xmlFile
public String serialCOM
public String baud_rate
public String spin_rate
public String spin_direction
public ArrayList<String> special_char = new ArrayList<String>()
Operacions
public XMLprocess(File xmlFile) //Constructor
private void getXMLvalues() //Llegeix els diferents paràmetres de
configuració del fitxer “config.xml” i els guarda en les variables
indicades
Taula 3.4 Atributs i operacions principals
de la classe WriteFile
Taula 3.5 Atributs i operacions principals
de la classe XMLprocess
58
- ActivityRegister: S’encarrega de llançar un esdeveniment a les classes listeners
especificades cada vegada que és cridada. Existeixen dos tipus d’esdeveniments: les
instruccions que l’usuari dóna al programa i la recepció de dades des de la
plataforma Arduino.
Les classes descrites es troben enllaçades de la següent forma:
ActivityRegister
Atributs
private static ActivityRegister myActivityRegister
private ArrayList Activities
private ArrayList SerialInputMR
private final List Listeners = new ArrayList()
private final List SerialInputMRListeners = new ArrayList()
Operacions
//S’han descrit les operacions més rellevants per evitar redundància
public void addActivity(String Description) //Crea una nova llista
“Activities” en cas que no existeixi i crida a la funció “fireEvent” quan
l’usuari realitza una acció
public void addSerialInputMR(String Description) //Crea una nova
llista “SerialInputMR” en cas que no existeixi i crida a la funció
“fireSerialInputMREvent” quan rep dades de la plataforma Arduino
private synchronized void fireEvent(String Description) //Crea un
nou esdeveniment i l’afegeix a la interfície “AtivityRegisterListener”
private synchronized void fireEvent(String Description) //Crea un
nou esdeveniment i l’afegeix a la interfície “SerialInputMRListener”
ActivityRegisterListener
Taula 3.6 Atributs i operacions principals
de la classe ActivityRegister
Figura 3.11 Relacions entre les diferents
classes de la interfície gràfica
conn
Arduino
arduino
SerialRxTx
configParams
XMLprocess WriteFile
log mr
JMainInterface
SerialInputMRListener
ActivityRegister
59
Com es pot observar la classe principal inicialitza tots els objectes que actuaran en el
programa. Les interfícies ActivityRegister i SerialInputRegister activaran les diferents
funcionalitats de la classe AcitivityRegister cada vegada que es compleixin les
condicions explicades anteriorment.
Típicament doncs la inicialització del programa acceptarà un fitxer d’entrada com el
següent:
<Config_Values>
<Serial_Param_Default>
<SerialId>COM3</SerialId>
<!-- Típicament Arduino sempre es connecta al COM3-->
<Baud_Rate>9600</Baud_Rate>
<!-- Valor acceptat: 115200-->
</Serial_Param_Default>
<Motor_Param_Default>
<Spin_Rate>15000</Spin_Rate><!-- Rang acceptat: 10000-90000 ms-->
<Spin_Direction>w</Spin_Direction><!-- Valors acceptat: w,c-->
</Motor_Param_Default>
</Config_Values>
Pel que fa a la configuració de la velocitat de connexió tot i que Arduino accepta
diversos valors d’entrada diferents, cal fixar la comunicació amb un valor específic. En
aquest cas s’ha escollit el valor més alt de transmissió 115200 bauds per permetre una
comunicació més ràpida.
La direcció i velocitat de rotació del motor també són configurables però el programa
d’Arduino està desenvolupat a partir dels camps que es presenten per defecte. Canvis en
la velocitat de rotació provoca la desincronització de les línies dels caràcters. Si es
modifica la direcció de rotació els resultats són més crítics ja que la lectura dels
diferents paràmetres del bufferFrame no coincidirà amb les característiques físiques de
cada mirall.
A continuació es presenta la interfície gràfica desenvolupada i s’exposen les seves
operatives de funcionament.
Figura 3.12 Exemple de paràmetres del
fitxer “config.xml”
60
El funcionament de la interfície és força senzill, les operacions que es poden realitzar
són:
1. Selecció del port Serial de comunicació (Sempre estarà seleccionat per defecte el
port indicat en “config.xml” en cas que existeixi comunicació).
2. Velocitat de comunicació indicada en el fitxer “config.xml” (només pot ser
115200)
3. Obertura de la comunicació amb Arduino a través del port serial.
4. Tancament de la comunicació del port serial.
5. Inici de la rotació del motor a la velocitat i direcció especificades.
6. Desactivació de la rotació del motor.
7. Es guarden els paràmetres de retorn de la velocitat del motor detectada pel
sensor al fitxer “motor_rate.txt”. També es desactiva la modulació làser per
evitar la desincronització temporal.
8. Paràmetre de velocitat del motor especificat al fitxer “config.xml”.
9. Paràmetre de direcció de rotació especificat al fitxer “config.xml”.
10. Activació del làser sense modulació, encès sempre.
11. Desactivació del làser.
12. Especificació del tipus de representació dels caràcters: fixa (8 caràcters màxim)
o en moviment (fins a 500 caràcters).
13. Pantalla d’introducció de la frase que es vol representar. S’accepten un total de
76 caràcters: totes les majúscules, minúscules i números a més dels símbols: “,”,
”;”, ”.”, “:”, ”!”, ”?”, ”+”, ”-”, “=”, ”%”,”#”,”*”,”)”.
14. Enviament de la frase escrita i el mode de projecció al programa d’Arduino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Figura 3.13 Exemple d’inicialització de la
interfície gràfica
61
15. Esborrament de la pantalla d’escriptura (no s’envia el missatge buit a
representar).
16. Consola de comunicació on es notifiquen els diferents errors i comandes que va
executant l’usuari. També es van introduint els valors al fitxer “logFile.log”.
63
4. VALORACIÓ DE RESULTATS
Cal recordar que l’objectiu final del projecte era la construcció d’un projector làser
alfanumèric de baix preu, dimensions i pes (portable) amb les característiques de
projecció més òptimes possibles.
Com s’ha anat exposant al llarg de la memòria aquestes limitacions tenen un efecte
directe en la qualitat de la projecció que es faran més explícites en les conclusions
d’aquest capítol.
En primera instància s’analitzarà la resposta dels diferents elements que composen el
sistema del projector làser
4.1 Motor i controlador
El rang operatiu del DC motor és de 600 mA a un voltatge entre 4.5 i 9V. La velocitat
de rotació del motor doncs anirà estretament relacionada amb la velocitat necessària
d’encesa del làser; a major velocitat del motor major rapidesa de la modulació làser per
obtenir el mateix resultat. Per tant doncs interessa ajustar la velocitat del motor el
màxim lenta possible sense que es detectin interrupcions en la representació. També cal
tenir en compte que a major velocitat la rotació del capçal és més estable i ofereix una
rotació més acurada.
De forma experimental s’ha considerat que una bona velocitat de rotació és 15000 µs
(0.015 s) per volta, un valor força ràpid que permet una rotació prou òptima del capçal.
A través de la lectura del fitxer “motor_rate.txt” s’han representat els primers 1409
valors del sensor en tres configuracions diferents: la mínima velocitat permesa (90000
µs), la velocitat per defecte (15000 µs) i la velocitat màxima (10000 µs).
0
20000
40000
60000
80000
100000
120000
140000
1 58
11
5 17
2 22
9 28
6 34
3 40
0 45
7 51
4 57
1 62
8 68
5 74
2 79
9 85
6 91
3 97
0 10
27
1084
11
41
1198
12
55
1312
13
69
Resposta IR Sensor
90000
15000
10000
Fig 4.1 Representació de la velocitat
calculada pel sensor amb 1049 mostres
64
Com s’observa en el gràfic la resposta del sensor és més acurada en menor velocitat i en
canvi per a més altes revolucions ofereix un cert error (valors que decreixen de forma
brusca). Tot i això l’error que suposa per al resultat final és insignificant ja que suposa
una part molt petita del total.
4.2 Característiques de la projecció
En primera instància s’han realitzat els càlculs de les característiques de la superfície
d’escaneig per obtenir una idea aproximada dels resultats que caracteritzaran la
projecció.
4.2.1 Superfície d’escaneig
L’angle característic de la projecció (per cada mirall) determina la resolució total de la
pantalla i està directament lligat amb l’angle interior de la figura que dóna forma al
capçal.
On n representa el nombre de costats del polígon regular.
A través de la llei d’Snell s’obté que la relació entre els angles d’incidència i de
refracció d’una ona (electromagnètica, lumínica...) són equivalents a l’índex de
refracció característics dels medis que es propaga. L’equació ve donada per:
θ1: angle d’incidència
θ2 : angle de reflexió
n1: índex de refracció del primer medi
n2: índex de refracció del segon medi
En el cas dels miralls la reflexió de l’ona és total i per tant la relació entre índexs de
refracció és 1. Per tant l’angle d’incidència serà el mateix que el de reflexió.
Així doncs cada raig del làser serà reflectit pel mirall amb el mateix angle respecte la
perpendicular de la superfície.
Un cop introduïdes les característiques trigonomètriques del sistema s’ha realitzat una
representació per demostrar la relació entre l’angle d’escaneig i l’angle interior de la
figura.
En el següent gràfic es pot observar el capçal en tres posicions diferents: posició inicial
(el làser incideix en el vèrtex del mirall), posició intermitja (el làser incideix al centre
del mirall) i posició final (el làser incideix en el següent vèrtex del mirall).
Eq 4.1
65
L’escaneig total del mirall en qüestió es realitzarà quant el capçal hagi girat l’equivalent
a l’angle interior de l’octògon. Com es pot observar en la primera posició l’angle
d’incidència del raig formarà un angle equivalent a l’angle interior de l’octògon i per
tant l’angle de reflexió total serà igual a l’angle interior. En el segon cas la reflexió
coincidirà amb la normal de la superfície i en l’últim cas obtindrem el mateix resultat
que en la posició inicial però a l’invers.
Per tant queda demostrat gràficament que la relació entre l’angle interior i l’angle
d’escaneig és la següent:
A partir de trigonometria directa s’obté la longitud de la superfície d’escaneig:
On L representa la longitud de la superfície d’escaneig i d la distància entre el mirall i la
superfície.
Fig 4.2 Representació de tres posicions
del capçal en l’escaneig d’un mirall
Eq 4.2
Eq 4.3
66
Un cop definides les relacions es busquen els resultats en el sistema presentat.
En el sistema específic del projector làser alfanumèric construït el capçal consta de 8
cares (octògon regular) i per tant l’angle interior de la figura ve determinat per:
Així doncs aplicant l’equació 4.4 obtenim un angle d’escaneig de 90º.
Tenint en compte que la projecció s’ha realitzat a una distància de 56 cm per obtenir la
representació de tota la pantalla podem trobar que la pantalla d’escaneig serà:
Els resultats obtinguts de forma analítica s’acosten a la resolució real obtinguda amb les
característiques especificades on obtenim una pantalla d’uns 95 cm.
Cal destacar que els miralls no presenten una resolució igual entre sí a causa de les
limitacions físiques de cadascun i del possible error introduït en la seva fixació a la
peça. En el càlcul trigonomètric s’ha suposat que el làser està perfectament focalitzat al
centre de la peça cosa que també pot introduir errors en el càlcul.
Finalment a conseqüència de les limitacions físiques de cada mirall s’ha hagut d’ajustar
la longitud de pantalla de projecció a través del software que ha quedat reduïda
pràcticament a la meitat amb una longitud útil de 48 cm.
4.2.2 Característiques del capçal
L’objectiu inicial de la projecció consistia en aconseguir una separació entre línies
d’aproximadament un centímetre a 3 metres de distància. Com s’ha detallat en la secció
del segon prototip del hardware, la implementació física d’aquesta inclinació suposava
aconseguir un angle entre els miralls de 0.191º. Finalment i utilitzant el model de capçal
que permetia un ajust mixt els resultats finals no han estat del tot òptims.
Fig 4.3 Superfície d’escaneig amb la modulació làser desactivada.
Eq 4.4
67
# línia Distància Interlineat
7
6
5
4
3
2
1
0
+3 cm
+2.4 cm
+1.4 cm
+0.8 cm
+0.6 cm
+0.4 cm
+0.1 cm
0.6 cm
1 cm
1.2 cm
0.2 cm
0.2 cm
0.3 cm
0.1 cm
Com es pot observar hi ha salts especialment notoris en les línies 5 i 6 que es poden
haver produït a causa de la variació de posició dels miralls un cop encolats.
Les contribucions es veuen més clares en la següent figura:
S’observen clarament les limitacions físiques del sistema de miralls implementat en
comparació al model ideal. També es pot veure com la sincronització de les línies no és
perfecte degut als petits canvis entre les resolucions del motor i les limitacions de la
pròpia discretització temporal.
Tot i això els resultats aconseguits es consideren positius ja que la comprensió dels
caràcters és prou bona per poder implementar tant lletres majúscules com minúscules.
4.2.3 Resultats de la projecció
A nivell analític s’ha observat que per les característiques físiques del sistema uns
projecció òptima s’obté situant el làser inclinat 60º respecte l’eix perpendicular del
motor a una distància de 6 cm dels miralls del capçal. La distància de projecció s’ha
mantingut a 56 cm.
Taula 4.1 distàncies relatives entre les línies de la
matriu a una distancia de projecció de 43 cm.
Fig 4.4 Comparació entre el model teòric i el model
experimental de la projecció del carácter “A”
línia 0: 516…522
línia 1: 425…431
línia 2: 333…339
línia 3: 608…612 línia 4: 234…240
línia 5: 706…711
línia 6: 52…58 línia 7: 144…150
68
La resolució de cada discretització horitzontal de la pantalla (cada bit) es correspon a 1
cm i per tant amb la pantalla de 48 cm de longitud es podran escriure fins a 48 bits per
línea.
Aquest càlcul també es pot realitzar tenint en comte la velocitat de rotació del motor i la
durada temporal de cada bit. En el cas d’estudi com s’ha explicat al segon capítol en
l’apartat d’Arduino cada bit suposarà un període de 12.5 µs. Si tenim en compte que la
velocitat del motor és de 15000 µs obtenim:
Si s’aplica la divisió per la durada temporal de cada bit:
Com s’ha explicat en l’apartat anterior la resolució teòrica de cada mirall s’ha reduït
pràcticament a la meitat per tant de forma analítica la quantitat de bits a representar
quedaria reduïda a 75. Aquest valor s’aproxima als 48 bits reals representables i els
Fig 4.5 Esquema de les característiques de projecció del projector implementat
69
errors en el càlcul també es poden justificar amb la dificultat d’obtenir amb precisió la
mesura experimental de cada bit (a causa del moviment intrínsec a la projecció).
Si es té en compte que els caràcters s’han definit com sèries de bits de 8x6 en el cas
exposat es podran representar fins a 8 caràcters consecutius amb posició fixa.
A continuació es mostren alguns resultats de les projeccions que s’han realitzat amb
mode “FIXED”. Recordar que la modalitat “SCROLLING” permet la representació de
fins a 500 caràcters consecutius.
Fig 4.6 Representació de 3 frases diferents mitjançan el mode “FIXED” (màxim 8
caràcters)
70
4.3 Anàlisi de costos
Per analitzar els costos s’ha realitzat una taula amb els diferents materials obtinguts.
S’ha valorat el preu de tots els components utilitzats tot i que molts ja es tenien.
Components Preu
Arduino UNO (*) 32.94 €
Díode Làser 1.95 €
Peça capçal Rotllo de material CPE (*) 31.50 €
100 Miralls 20x10 mm
Controlador Motor
DC Motor 4.5V – 9V (*) 3.50 €
L293D 1.85 €
Placa soldadura 9.23 €
Font d’alimentació 11.69 €
Kit de 25 connectors CI 2 pols 1.95 €
Estany 100 gr 4.46 €
Cables unifilars 1 mm 6.52 €
Cables unifilars 0.5 mm 1.9 €
Connector Font d’alimentació 1.5 €
IR Sensor
OPB815W
8.95 €
Resistències de carboni 1/6W
150Ω i 1kΩ
0.06 €
Estructura
Caixa 6.13 €
Ferro sustentació motor (*) 2 €
Kit tornillería 3.65 €
TOTAL 128.28 €
Com es pot observar els costos s’han reduït al màxim i es pot arribar a construir el
model amb menys de 150 €. Pel que fa al pes cal tenir en compte que encara es pot
optimitzar més utilitzant materials més lleugers per la construcció de l’estructura de
suport del motor. En aquest cas si s’utilitza alumini enlloc de ferro el pes es redueix
substancialment
Tot i això el model construït té un pes inferior al kg (834 gr) i per tant és perfectament
viable per a la utilització en Drones tot i que òbviament depenent del model estarà
capacitat o no per suportar pes. S’han trobat exemples de Drones capaços d’aixecar
pesos de més de 5kg.
Taula 4.2 Costos en material. (*) Aquests elements no han estat comprats per la seva
disponibilitat anterior.
71
4.4 Conclusions i propostes de millora
L’experiència ha estat totalment positiva i s’han aconseguit el principals objectius
marcats a l’inici del projecte. Com s’ha anat explicant al llarg del capítol han sorgit
dificultats a l’hora de dissenyar el model físic del projector i tot i no haver aconseguit
una representació òptima els resultats són més que acceptables.
Un dels problemes més evidents ha estat la implementació i el disseny d’un model que
permetés ajustar la inclinació dels miralls. Finalment s’ha optat per un ajust manual
però per futures millores l’ideal seria obtenir una impressió 3D amb prou resolució per
tal d’implementar la inclinació necessària. La resolució final de la pantalla ha vingut
limitada per les petites dimensions dels miralls i el capçal, cosa que s’hauria de
replantejar ja que únicament es poden representar de forma fixa 8 caràcters consecutius.
Per tant respecte la part de hardware es plantegen les següents línies de millora:
- Fixar la inclinació del capçal mitjançant una impressió 3D més precisa.
- Amb aquesta impressió més precisa es podria reduir l’angle entre els miralls per tal
de poder augmentar la distància de projecció.
- Instal·lar miralls més grans per augmentar l’àrea de projecció
- Utilització d’un làser (o un sistema de làsers) més potents per augmentar la
irradiància del sistema.
Pel que fa al motor s’ha pogut observar que la velocitat de rotació era suficient i per tant
no es necessita un sistema amb més potència. La fixació del capçal es considera prou
aconseguida (quasi no presenta oscil·lació horitzontal) però no permet la seva
substitució ja que està fixada a la plataforma de rotació. Respecte a la regulació de la
rotació a través del sistema de control també es considera positiva ja que s’aconsegueix
una estabilitat prou bona del motor a altes revolucions.
Per la part de software es planteja el disseny d’una interfície que permeti la introducció
de caràcters personalitzables per part de l’usuari. En aquest cas caldria una estructura
d’emmagatzematge de dades que fos dinàmica i per tant no quedés fixada en la
memòria estàtica del programa.
Tot i això la interfície dissenyada i el programa d’Arduino aconsegueixen una
comunicació amb l’usuari prou bona.
En futures millores es podria augmentar la velocitat de modulació del làser per poder
representar més caràcters i dissenyar un sistema d’ajust de la longitud de la pantalla
també personalitzat.
73
ANNEX
Figura 1 Vista de les diferents soldadures
realitzades pel controlador del motor i sensor
Figura 2 Ajustament manual de la inclinació dels
miralls
74
Figura 3 Soldadura de la peça de sustentació del
motor
Figura 4 Motor, capçal i estructura de suport
75
Figura 5 Vista d’alçat de del Projector Làser Bitmap
Figura 6 Vista de perfil de la del Projector Làser Bitmap
77
Bibliografia
[1] Luberth Dijkman Bangert. (2003). Mechanically scanned laser display.
http://www.luberth.com/help/Mechanically_scanned_laser_display_microchip_p
ic/Mechanically_scanned_laser_display_microchip_pic.htm
[2] Stefan Marti. (2002). TinyProjector. MIT Media Lab, Masachussetts.
http://web.media.mit.edu/~stefanm/TinyProjector/TinyProjector_labnotebook_pr
oposal.html
[3] sakirfm. (2008). Laser Projector.
https://sites.google.com/site/shakirfm/briefconceptandworking
[4] Vitaliy Mosesov (2012). Alpha-numeric Laser Projector.
http://portablelaserprojector.blogspot.com.es
[5] Mark Freeman, Mark Champion and Sid Madhavan. (2009). Scanned Laser
Pico-projectors. OPN.
http://www.microvision.com/wp-content/uploads/2014/07/OPN_Article.pdf
[6] ChaN. (2006). Home Built Laser Projector.
http://elm-chan.org/works/vlp/report_e.html
[7] Karol Łuszcz. (2011). RGB Laser Projector.
http://www.edaboard.com/thread230353.html
[8] Macpod LLC. (2012). Lasershark.
http://hackedgadgets.com/2012/11/19/lasershark-laser-projector-project
[9] LaserFX. (1996-2008). How Laser Shows Work.
http://www.laserfx.com/Works/Works2.html
[10] Dr. E. Gómez González. (2008). Fuentes de luz y emisión láser. Universidad de
Sevilla.
http://laplace.us.es/campos/optica/tema3/opt-tema3-0809.pdf
[11] SGS-THOMSON. Microelectronics. Push-pull four channel driver with diodes.
http://www.ti.com/lit/ds/symlink/l293.pdf
[12] TT-electronics. Deep Gap Slotted Switch with Wire and Connector Options
OPB815L, OPB815WZ Series.
http://docs-europe.electrocomponents.com/webdocs/0028/0900766b80028ba5.pdf
[13] Arduino. What is Arduino?
https://www.arduino.cc/en/Guide/Introduction
[14] Arduino. Arduino UNO & Genuino UNO.
https://www.arduino.cc/en/Main/ArduinoBoardUno
78
[15] Arduino. PWM.
https://www.arduino.cc/en/Tutorial/PWM
[16] Arduino. ATmega168/328-Arduino Pin Mapping. https://www.arduino.cc/en/Hacking/PinMapping168
[17] Terry King, Mary Alice Osborne, Jun Yuan Peng, Barry King. Arduino Timers
and Interrupts.
https://arduino-info.wikispaces.com/Timers-Arduino
[18] Arduino. Secrets of Arduino.
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
[19] Ultimaker. Ultimaker 2 makes easy even easier.
https://ultimaker.com/en/products/ultimaker-2#quality
[20] Ultimaker. Cura and 3D Printing.
https://ultimaker.com/en/products/cura-software
[21] Arduino. Arduino Software (IDE).
https://www.arduino.cc/en/Guide/Environment
[22] Vitaliy Mosesov (2012). Alpha-numeric Laser Projector.
https://docs.google.com/file/d/0B6TxLGNbF8U1a25wTllFY1VGd1E/edit
[23] Bill Porter. (2010). Ready, Set, Oscillate! The Fastest Way to Change Arduino
Pins.
http://www.billporter.info/2010/08/18/ready-set-oscillate-the-fastest-way-to-
change-arduino-pins/
[24] Netbeans IDE. Netbeans IDE 8.1 Download.
https://netbeans.org/features/java-on-server/java-ee.html
[25] Embarcados. Comunicação Serial Java + Arduino.
http://www.embarcados.com.br/comunicacao-serial-java-arduino