Disseny i implementació d’un Projector Làser Alfanumèric

89
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

Transcript of Disseny i implementació d’un Projector Làser Alfanumèric

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

ii

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.

10

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”.

62

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.

72

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

76

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