Via G. Galilei, 16 - Conegliano (TV)
Tel. 0438.61649 - Fax. 0438.450178
[email protected] - www.itisgalileiconegliano.gov.it
PROIETTORE LASER
LUCCHETTA BRYAN – CLASSE 5 AELN
ANNO SCOLASTICO 2014/2015
1
INDICE
1. LASER:
- THE INVENTION 2
- HOW DOES IT WORK? 3
- THE APPLICATIONS 4
- LASER SAFETY 5
2. PROIETTORE LASER:
- IL PRINCIPIO 6
- IL GALVANOMETRO 7
- I COMPONENTI UTILIZZATI 9
- I SEGNALI DI CONTROLLO 12
- LA COMUNICAZIONE SCHEDA-PC 16
- FIRMWARE 17
3. CAD SOFTWARE:
- L’INTERFACCIA UTENTE 23
- IL SOFTWARE:
o LA LETTURA E INTERPRETAZIONE DI FILE ILDA 24
o DISEGNO A MANO LIBERA 28
o LE ANIMAZIONI (sola lettura da file) 29
4. L’IDEA E LA REALIZZAZIONE 30
5. CONCLUSIONI E RINGRAZIAMENTI 33
6. BIBLIOGRAFIA 33
2
LASER
THE INVENTION
Maser
Lasers evolved from masers, which are
similar but produce microwaves and radio
waves instead of visible light. Masers were
invented in the 1950s by Charles Townes and
Arthur Schawlow, both of whom went on to
win the Nobel Prize in Physics for their work
(Townes in 1964 and Schawlow in 1981).
They applied to protect their invention on
July 30, 1958 and were granted US Patent
#2,929,922 (Masers and maser
communication system) on March 22, 1960
(you can see one of the drawings from it
here).
Laser
But did they invent the laser? In 1957,
one of Townes' graduate students,
Gordon Gould, sketched in his lab
notebook an idea for how a visible light
version of the maser could work, coining
the word "laser" that we've used ever
since. Unfortunately, he didn't patent his
idea at the time and had to devote the
next 20 years of his life to legal battles,
eventually gaining a patent for part of the
laser invention (Method of energizing a
material) and substantial back royalties in
1977.
Although Townes and Schawlow are often credited with inventing lasers, the first person to build
a working, visible light laser was actually Theodore Maiman, who has never really gained the
recognition he deserved: his original writeup of his work was rejected by the journal Physical
Review Letters and, despite twice being nominated for the Nobel Physics Prize, he never won the
ultimate accolade.
3
HOW DOES IT WORK?
Already in the word laser, stands for ‘Light Amplification by Stimulated Emission of Radiation’,
there is a simple explanation of how it works.
A typical laser is made from a ruby crystal, a lamp and a particular oval container reflective,
which has the function to bring the light in all the face of the ruby crystal. When this crystal is
illuminated thanks to the lamp, the atoms in the ruby are stimulated to emit the laser light. This
effect is called “stimulated emission”.
Stimulated emission
In the classical view, the energy of an electron orbiting an
atomic nucleus is larger for orbits further from the nucleus of
an atom. However, quantum mechanical effects force
electrons to take on discrete positions in orbitals. Thus,
electrons are found in specific energy levels of an atom, two of
which are shown below:
When an electron absorbs energy either from light (photons)
or heat (phonons), it receives that incident quantum of energy.
But transitions are only allowed in between discrete energy
levels such as the two shown above. This leads to emission
lines and absorption lines.
When an electron is excited from a
lower to a higher energy level, it will
not stay that way forever. An electron
in an excited state may decay to a
lower energy state which is not
occupied, according to a particular
time constant characterizing that
transition. When such an electron
decays without external influence,
emitting a photon, that is called
"spontaneous emission". The phase
associated with the photon that is
emitted is random. A material with
many atoms in such an excited state
may thus result in radiation which is
very spectrally limited (centered around one wavelength of light), but the individual photons
would have no common phase relationship and would emanate in random directions. This is the
mechanism of fluorescence and thermal emission.
Now that we have understand the principle of the stimulated emission that essentially happens
inside the ruby crystal (there are other materials or substances adapt for this application with
different characteristics), all the photon created by this technique are reflected backwards and
4
forwards by two mirrors, each at the front and at the end of the ruby. The emitted photon,
thanks to the mirrors, hurt the other atoms and the latter emit other photos, building up the
laser beam.
The laser light differs from ordinary light in four important features that make the laser valuable:
Small Divergence: the beam from a laser does not diverge after it leaves the laser tube.
Moreover, instead of being dissipated rapidly, the energy is concentrated in a narrow
beam.
Monochromatic: the laser light is said to be monochromatic because it’s contained one
specific wave light of light, that correspond at one particular color.
Coherent: the laser light, instead of the ordinary light, is precisely organized so that each
photon moves in step with the others.
High Intensity: the laser beam is very intense because all its energy is concentrated. In
fact, a powerful laser can be made in order to burn materials. The light coming from a
typical classroom laser (which will be discus later) is relatively safe and even if focused on
the hands cannot be felt.
THE APPLICATIONS
Thanks to all these characteristic of the laser beam listed above, the laser has different
application:
They are use to store music, films and other data on compact discs by burning the surface
of the disc of tiny pits. Laser can also play or read the data stored on the disc by
transforming the reflection of the laser coming though the disc in a electrical information
and decode them as images or sound.
Scanning beams can also be used to read information placed on the casing of the product,
such as bar codes at a supermarket checkout. Scanner can also keep track of shipments
all around the world, and by using electronic machines, manage and direct the package to
the recipient.
Also the laser is use in the
communication field. Optical fibers
conduct the light generated by the
laser and each fiber can carry as
much information as several
thousand copper wires.
Industrial laser otherwise the
normal application, use powerful
laser of thousands of watts of
power in order to cut and weld
materials and drill holes precisely.
So lasers can replace the standard
5
industrial tools which are less efficient and reliable, and also the surgical tools in some
operation, especially eye surgery.
Also a laser can determinate the distance of an object by measuring the time a pulse of
laser light takes to reach and reflect back from the object. Laser beams can also function
as a sensors, detecting small movements of the ground, for example in earthquake
warning system, or in laser gyroscopes to detect changes in direction.
LASER SAFETY
Even the first laser was recognized as being potentially dangerous. Theodore Maiman
characterized the first laser as having a power of one "Gillette" as it could burn through one
Gillette razor blade. Today, it is accepted that even low-power lasers with only a few milliwatts of
output power can be hazardous to human eyesight when the beam hits the eye directly or after
reflection from a shiny surface. At wavelengths which the cornea and the lens can focus well, the
coherence and low divergence of laser light means that it can be focused by the eye into an
extremely small spot on the retina, resulting in localized burning and permanent damage in
seconds or even less time.
Lasers are usually labeled with a safety class number, which identifies how dangerous the laser
is:
- Class 1 is inherently safe, usually because the
light is contained in an enclosure, for example
in CD players.
- Class 2 is safe during normal use; the blink
reflex of the eye will prevent damage. Usually
up to 1mW power, for example laser pointers.
- Class 3R (formerly IIIa) lasers are usually up
to 5mW and involve a small risk of eye
damage within the time of the blink reflex.
Staring into such a beam for several seconds is likely to cause damage to a spot on
the retina.
- Class 3B can cause immediate eye damage upon exposure.
- Class 4 lasers can burn skin, and in some cases, even scattered light can cause eye
and/or skin damage. Many industrial and scientific lasers are in this class.
The indicated powers are for visible-light, continuous-wave lasers. For pulsed lasers and invisible
wavelengths, other power limits apply. People working with class 3B and class 4 lasers can
protect their eyes with safety goggles which are designed to absorb light of a particular
wavelength.
Infrared lasers with wavelengths longer than about 1.4 micrometers are often referred to as
"eye-safe", because the cornea strongly absorbs light at these wavelengths, protecting the retina
from damage. The label "eye-safe" can be misleading, however, as it only applies to relatively low
power continuous wave beams; a high power or Q-switched laser at these wavelengths can burn
the cornea, causing severe eye damage, and even moderate power lasers can injure the eye.
6
PROIETTORE LASER
Credo che a nessuno di noi non sia mai capitato di vedere dei Laser Show nelle discoteche o nei
festival. Essenzialmente esistono due categorie di effetti laser: la prima viene chiamata effetto
fascio, che sostanzialmente consiste nel creare un gioco di fasci luminosi sparati direttamente
sulla folla, creando effetti particolari e belli da osservare. L’altra applicazione è “l’effetto schermo”
che permette di riprodurre su una parete un’immagine creata a computer, tramite lo
spostamento del fascio luminoso lungo dei vettori ben definiti. La prima applicazione solitamente
viene preferita alla seconda in quanto è in grado di creare effetti più emozionanti e solitamente è
un alternativa
economica, e dunque
non prevede precisone
e prestazioni elevate
come la seconda
applicazione. In
questo progetto
ovviamente verrà
presa in
considerazione la
seconda applicazione,
non esente in ogni
caso dalla possibilità di
creare effetti di luce
anch’essa.
IL PRINCIPIO
Principalmente i proiettori laser vengono impiegati nell’industria dell’intrattenimento. La maggior
parte di questi sono prodotti su misura per gli acquirenti in base alle loro esigenze e agli effetti
che vogliono ottenere. Per riuscire a realizzare anche i più semplici effetti senza la necessità di
riprodurre immagini o figure sullo schermo è sufficiente un prisma che divide e direziona i fasci
di luce in base all’effetto che si vuole ottenere. Invece, per i proiettori più complessi viene
utilizzato un scanner x-y che
permette attraverso due specchi di
muovere il fascio laser lungo gli assi
di un ipotetico piano cartesiano.
Come mostra la figura qui a fianco,
sostanzialmente vengono montati
due specchietti in ortogonale. Il
raggio laser viene indirizzato nel
primo specchio, che ha il compito di
muovere il fascio nell’asse X,
successivamente il fascio rimbalza
sul secondo specchio che lo sposta
lungo l’altro asse, formando così lo
schermo di riproduzione. La
7
direzione del fascio laser può essere determinata dalla combinazione dei due angoli di riflessione
formati dagli specchi.
Gli specchi solitamente vengono montati su due “motori”, che vengono chiamati galvanometri
per le loro alte prestazioni e velocita di movimento. Infatti proprio nella riproduzioni di immagini,
lo scanner X-Y deve avere prestazioni elevate e dunque una buona velocità, per ottenere
immagini fedeli e ferme sullo schermo.
Tutto questo è possibile grazie alla persistenza dell’immagine nell’occhio umano. Infatti per
ottenere l’effetto desiderato, ossia un’immagine non sfarfallante e deformata, lo scanner
dev’essere in grado di riprodurre la figura almeno trenta volte in un secondo, cosicché essa possa
appararci ferma nello schermo. Se ciò non dovesse accadere cominceremo ad osservare un
immagine che lampeggia. Inoltre bisogna far attenzione anche a non superare i limiti fisici dei 2
galvanometri, ovvero la velocità massima che essi possono raggiungere, perché anche se
l’immagine risulterebbe stabile, essa apparirebbe deformata sullo schermo.
Va ricordato inoltre, che a incidere sulla velocità di riproduzione delle immagini e anche l’angolo
di riflessione massimo che si vuole ottenere dal fascio. Maggiore sarà quest’angolo e minore
ovviamente sarà la velocità con cui potremo andare a riprodurre l’immagine. Questo perché il
galvanometro dovrà ruotare con un angolo maggiore e quindi compiere un movimento più
ampio, a parità di velocità. Come riporta la generica tabella di un galvanometro qui sotto si nota
che, se l’angolo massimo di riflessione del fascio è di 5 gradi, la velocità che può raggiungere il
galvanometro è di 35 mila punti al secondo, mentre se la riflessione è di 20 gradi, la velocità cala
drasticamente attestandosi sui 20 mila punti al secondo. Un maggior angolo di riflessione,
ovviamente comporta un immagine più grande sullo schermo di riproduzione.
IL GALVANOMETRO
Vediamo ora che cos’è un galvanometro,
come funziona e le sue applicazioni.
Il galvanometro sostanzialmente è un
dispositivo che riesce a trasformare una
corrente elettrica in un momento
magnetico. E’ utilizzato in diversi settori
come strumento di misura, nei registratori
oppure nei servomeccanismi per laser.
Negli strumenti di misura in particolare
viene utilizzato come rivelatore di corrente
continua.
Il dispositivo è costituito da una bobina
mobile che può parzialmente ruotare
8
all'interno di un campo magnetico, solidale con una lancetta indicatrice sovrapposta ad una scala
graduata. Una molla viene usata per tenere la bobina in posizione zero. Quando una corrente
fluisce nelle spire, il solenoide genera un campo magnetico, che opponendosi a quello esterno
produce una forza che fa ruotare la bobina e quindi l'ago indicatore. La molla contrasta la
rotazione, con il risultato che l'angolo di deviazione è proporzionale all'intensità della corrente.
Nei registratori invece il galvanometro è impiegato per far muovere un pennino scrivente su
nastro di carta scorrevole, realizzando così un registratore analogico, come il poligrafo usato per
la registrazione dell'elettrocardiogramma e dell'elettroencefalogramma.
Un galvanometro in grado di muovere uno specchio invece è
usato nei sistemi laser per il puntamento del fascio luminoso,
come avviene nel caso nostro. Si tratta in genere di
galvanometri di elevata potenza, facenti parte di un sistema
retro-azionato che può essere ad anello aperto o chiuso.
I 2 galvanometri utilizzati in questo progetto sono controllati
da 2 apposite schede distinte con controllo a catena chiusa.
Con il termine catena chiusa si intende che il sistema conosce
la posizione dello specchio intervenendo nell’attuatore
qualora la posizione richiesta non corrisponda con quella
effettiva. Il comando di posizione solitamente è fatto
attraverso 2 ingressi differenziali analogici; ciò significa che la
scheda riconosce la differenza di potenziale tra l’ingresso
negativo e quello positivo (la massa non influisce) ed
interviene sul sistema sulla base di questo segnale
differenziale.
La parte più importante di un sistema a catena chiusa è sicuramente il controllo di posizione che
può avvenire attraverso un metodo ottico, magnetico oppure conduttivo. Solitamente in questo
tipo di applicazione il controllo avviene attraverso un semplice metodo capacitivo: quando una
tensione alternata è applicata ad un condensatore, la corrente che scorre sul condensatore è
proporzionale alla capacità. Il principio è lo stesso che viene utilizzato per sintonizzare le vecchie
radio. Un possibile controllo di posizione capacitivo potrebbe essere il seguente: un dispositivo di
posizione è formato da una lamina quadrata di materiale conduttivo divisa in 4 sezioni, sulla
superficie di questa lamina a distanza ravvicinata si trova una seconda lamina a forma di farfalla
stilizzata, collegata all’albero del galvanometro, formando cosi una specie di condensatore dove
l’isolante è l’aria. Mentre ruota insieme all’albero motore, questa lamina a forma di farfalla
cambia la superficie di un’armatura delle 4 sezioni fisse. Cambiando ovviamente la superficie di
un’armatura anche la capacità dei 4 ipotetici condensatori che si sono venuti a formare cambia.
Se noi facciamo scorrere ora la corrente alternata come già analizzato, osserviamo piccole
variazioni della corrente, segno che la capacità è stata modificata, riuscendo così a risalire alla
posizione del galvanometro.
Avendo analizzato come avviene il comando e il controllo di posizione del galvanometro,
soffermiamoci in particolare sulle schede driver dei due galvanometri utilizzati in questo
progetto. Le schede e la struttura ortogonale dove sono montati i 2 galvanometri sono stati
acquistati a parte, in quanto la loro realizzazione avrebbe richiesto conoscenze più solidali e
9
ampliate rispetto al corso normale offerto dalla scuola, oltre al tempo necessario per la
progettazione e realizzazione di questi.
La scheda driver, completamente analogica, contiene
sostanzialmente al suo interno numerosi amplificatori
differenziali che in particolari configurazioni, gestiscono
tutto il controllo a catena chiusa del galvanometro.
Possiede 7 trimmer multi-giro in grado di regolare diversi
parametri come la potenza del segnale di feedback del
controllo di posizione, l’ampiezza di scala, lo
smorzamento, l’offset del segnale di controllo e così via.
In allegato è possibile consultare il manuale della scheda
driver fornito dal rivenditore.
I COMPONENTI UTILIZZATI
Il sistema deve gestire tutte le funzioni per cui è stato progettato, come la gestione e
l’elaborazione dell’immagine da riprodurre, la gestione della comunicazione con il pc e
l’interfaccia utente del display. Ecco riportate qui di seguito le varie scelte fatte per ogni singolo
componente della scheda:
PIC32MX470F512H: Al centro della scheda troviamo appunto il
microcontrollore della serie 32bit di Microchip, il cuore pulsante
di tutto il progetto. E’ stato scelto essenzialmente sulla base
della velocità di calcolo di cui dispone. In questo caso è il PIC più
veloce della serie 32MX, in grado di arrivare fino a 120 MHz di
clock. Per andare sul sicuro, sapendo che in questa applicazione
vengono richieste velocità di calcolo considerevoli per elaborare
tutte le coordinate dell’immagine da riprodurre, avevo
inizialmente puntato sulla serie 32MZ (la più veloce in
commercio di Microchip). Questa serie però a mio malgrado
non viene più supportata dall’ambiente di sviluppo MPLAB, richiedendo appunto conoscenze
sull’utilizzo di Armony, un nuovo ambiente a detta di Microchip più prestante e funzionale. Ecco
dunque la scelta di utilizzare il PIC più performante della serie ancora supportata da MPLAB,
ovvero la 32MX. Una volta verificata anche la presenza di 2 SPI, servite al controllo del DAC e
dell’SD, di almeno un UART e di un numero di piedini sufficiente (ne ha 100) per collegare il
display, alcuni controlli e periferiche, ho puntato appunto sull’acquisto del PIC32MX470F512H. La
scelta si è rivelata più che soddisfacente alle aspettative che avevo, riuscendo a gestire tutta il
sistema senza grossi problemi.
Emulatore RS-232/USB: Più in basso a sinistra troviamo l’emulatore seriale RS-232/USB, usato per
comunicare attraverso la periferica UART del PIC e la periferica USB del PC. Insicuro della
funzionalità e compatibilità USB offerta dalle librerie MLA di Microchip, ho optato per una
soluzione più semplice e veloce alla comunicazione tra scheda e PC. Questo componente si è
rivelato a dir poco utile perché mi ha permesso di utilizzare la “banale” comunicazione UART del
10
PIC per riuscire a ricevere le coordinate dell’immagine dal PC collegato alla scheda. Riuscendo a
raggiungere una velocità di comunicazione pari a 38560 Kbit/sec, anche le immagini più pensanti
da trasferire ci impiegano qualche manciata di secondi per essere trasmesse.
DAC MCP4822: A destra dell’emulatore troviamo un altro
componente fondamentale per l’esperienza svolta: il
convertitore digitale-analogico MCP4822 della Microchip.
Fondamentalmente è un convertitore SPI a 2 canali, con
risoluzione a 12 bit e con una tensione di riferimento interna
pari a 2.048V, che può essere portata al doppio se
programmato correttamente. Il suo settling time è pari 4.5 μs,
garantendo così una buona velocità di conversione utile in
queste applicazioni dove è richiesta particolare precisione e
velocità. Consigliato dal professore, si è rivelato un
componente prestante e assolutamente compatibile con le richieste di progetto.
TLV2372: Correlato al DAC e consigliato anche questo dal professore, troviamo anche un
amplificatore operazionale Rail-to-Rail che è servito per rendere compatibile la tensione
convertita dal DAC, con quella differenziale di controllo delle 2 schede driver dei galvanometri,
che funzionano con tensioni comprese tra ±5V. Anche in questo caso veniva richiesto un
amplificatore in grado di avere una buona banda passante e un buon slew-rate, in questo caso
rispettivamente 3MHz e 2.4 V/µs, rispondendo così appieno alle esigenze di progetto.
TC7662A: Ovviamente per rendere compatibile la tensione convertita con quella delle 2 schede
driver abbiamo già affermato che sono necessarie anche tensioni negative (fino a -5 V). Per
risolvere il problema senza avere la necessità di installare nel proiettore un alimentatore con
anche una tensione di riferimento negativa per alimentare l’operazionale, è stato scelto di
utilizzare una pompa di carica sempre di Microchip. Questo componente utilizzando dei
condensatori (lo stesso principio del moltiplicatore di tensione) riesce a generare una tensione
negativa compresa tra -3V e -18V con una corrente erogabile massima pari a 40 mA. Fornendo in
ingresso i 5V, questo componente si occupa di invertire la tensione fornita all’ingresso,
generando così i -5V richiesti dalle schede driver e che fungono da alimentazione negativa
dell’operazionale.
DISPLAY 16X4: Il display è stato impiegato nel
proiettore per permette di impostare alcuni
parametri, come ad esempio la luminosità e il
contrasto del display stesso, oppure la scelta di
riprodurre l’immagine da un file della scheda SD o
dalle coordinate inviate dal PC. E’ stato utilizzato
inoltre anche per effettuare dei test in fase di
programmazione, come la funzionalità del DAC
MCP4822. Con un display di 16 righe e 4 colonne
retroilluminato, si presenta come una soluzione
idonea al progetto per la visualizzazione dei dati
essenziali, anche qualora la scheda venga utilizzata in luoghi di scarsa luminosità.
11
SOCKET SD-CARD: Il socket SD, che è possibile ritrovare sul lato
sinistro della scheda, permette l’inserimento di un classica
schedina SD facilmente trovabile in commercio e ampliamente
utilizzata in macchinette fotografiche e videocamere per il
salvataggio di file, immagini e video. Nel progetto, l’SD
permette di riprodurre un immagine contenuta in essa, con il
proiettore laser, semplicemente inserendola nel socket e
selezionando il file da riprodurre attraverso l’apposito display e
tastiera.
LASER VERDE: Il laser, componente chiave di questo
progetto, permette di visualizzare chiaramente l’immagine
che si sta riproducendo con i galvanometri. Grazie alle
proprietà caratteristiche del fascio laser, elencate e spiegate
nella prima parte in inglese, l’immagine risulta ben delineata
e visibile anche in zone ben illuminate. E’ stato scelto sulla
base dei milli-watt che riesce a erogare e alla sua lunghezza
d’onda, che appunto nel caso di una luce verde si attesta
intorno ai 532 nm. Per pilotare il raggio, in modo da
spegnerlo e accenderlo a seconda delle esigenze, il modulo laser è stato tolto dal suo involucro
originario e la scheda di controllo incorporata è stata analizzata per poterne conoscere il circuito.
Intervenendo su questo circuito e realizzando un’apposita scheda driver è stato possibile
controllare il raggio attraverso un segnale TTL che viene a sua volta gestito dal PIC. Per la sua
economicità, essendo stato progettato per essere utilizzato come un classico puntatore, questo
laser non si presenta idoneo nelle applicazioni di queste tipo dove è richiesta affidabilità e
velocità, in quanto presenta tempi di accensione significativi che rendono alcuni punti
dell’immagine poco visibile. Tratteremo in seguito questo aspetto nella sezione dedicata ai
“segnali di controllo”.
SCANNER X-Y: Lo scanner, secondo componente chiave del
progetto, come già ampliamente discusso precedentemente
deve avere prestazioni molto elevate, rendendolo cosi un
componete costoso e non alla portata di tutti. Acquistato
attraverso un rivenditore cinese, lo scanner se pur
economico, fa il suo dovere riproducendo immagini semplici
(garantendo anche una buona precisione e controllo), ma
comincia a risentirne e avere problemi in quelle più
complesse. Il kit comprendeva le 2 schede driver dei
galvanometri, i galvanometri montati già in ortogonale
su un apposito contenitore, e l’alimentatore utilizzato per
alimentare le due schede driver e i due galvanometri.
ALIMENTATORE SWITCHING: Regalato da un società per cui ho svolto uno stage estivo, questo
alimentatore è di tipo switching, in grado di portare la tensione di rete (230V alternati) in due
tensioni continue rispettivamente di 12V e 5V, aggiustabili con un apposito potenziometro. Si è
rivelato una soluzione sovra-abbondante per questa applicazione, in quanto è in grado di fornire
fino a 6A per la linea a 5V e fino a 3A per quella a 12V, quando invece la scheda ne richiede
12
soltanto un centinaio di milli. Oltre a fornire l’alimentazione per la scheda principale viene
utilizzato anche per alimentare le 2 ventole di raffreddamento dei 2 driver dei galvanometri,
poste su un fianco del contenitore.
LM7805CT: E’ un regolatore di tensione in grado di convertire una
tensione continua applicata all’ingresso in una di riferimento pari a 5V,
con una tolleranza del ±4 %. La massima tensione applicabile
all’ingresso di questo componente è di 35 V ed è in grado di fornire
una corrente di uscita massima di 1 A. Utilizzato per convertire i 12V
continui provenienti dall’alimentatore switching, permette di
alimentare tutti i componenti della scheda principale. Anche il
microcontrollore che lavora con un tensione di 3,3 V utilizza un
regolatore di tensione che riceve come tensione di ingresso i 5V
convertiti da questo componente. Per utilizzarlo è stato necessario applicare un dissipatore
sull’apposita aletta, in quanto il regolatore dissipa all’incirca 1W di potenza.
LD1086V33: Simile al regolatore precedente, questo componente è in grado di convertire una
tensione continua presente all’ingresso, in una di riferimento pari a 3,3 V ±1%, utilizzata per
alimentare il PIC. La tensione d’ingresso massima applicabile è di 30 V e riesce ad erogare una
corrente massima di 1,5A. In questo caso non è stato necessario applicare un dissipatore al
regolatore in quanto la potenza dissipata è dell’ordine di qualche centinaio di milli-watt.
I SEGNALI DI CONTROLLO
I segnali di controllo utilizzati in questa scheda principalmente riguardano il comando di
posizione dei galvanometri e la gestione del laser, per l’accensione e lo spegnimento. Questi
segnali di controllo, gestiti dal microcontrollore situato nella scheda principale, combinati fra di
loro in modo opportuno, permettono appunto la visualizzazione dell’immagine nello schermo di
riproduzione del proiettore. Analizziamo la loro natura e come vengono gestiti.
Per i segnali di comando dei 2 galvanometri viene utilizzato un DAC a 2 canali a 12 bit e un
amplificatore operazionale in configurazione sommatore-invertente con offset e guadagno
regolabili attraverso 2 potenziometri (uno per ogni canale). Ad un canale viene affidata l’ordinata,
mentre al rimanente e affidata l’ascissa di un ipotetica coordinata. Avendo a disposizione 12 bit
questo significa che il DAC è in grado di fornire in uscita fino a 4096 livelli di tensione possibili in
una scala compresa tra 0 e la tensione di riferimento interna (o al doppio di quella interna).
Dunque al numero decimale 4096 è associata la tensione doppia di riferimento del DAC e al
numero 0 invece una tensione nulla pari a 0 V. Analogamente anche le coordinate che si vogliono
riprodurre, possono assumere un valore massimo e un valore minimo, definito dallo standard
ILDA. Questo particolare standard, che verrà analizzato più approfonditamente in seguito,
definisce che le coordinate sono formate da 2 numeri binari con segno a 16 bit (rispettivamente
uno per ascissa e uno per ordinata). Quindi l’ordinata o l’ascissa di un’ipotetica coordinata basata
sullo standard ILDA può assumere tutti i valori decimali compresi tra -32768 e +32767. Attraverso
una semplice proporzione, il microcontrollore adatta l’ascissa e l’ordinata di una coordinata ILDA
al DAC a 12 bit senza segno, dimodoché per esempio ad una coordinata (-32768; -32768)
corrisponda per il DAC il numero decimale 0 per entrambi i canali. Analogamente per una
13
coordinata (+32767; +32767) il DAC dovrà ricevere ambedue i canali, il numero decimale
convertibile massimo, ossia 4096.
Una volta capito il funzionamento della parte logica-digitale per convertire e adattare le
coordinate al nostro DAC, dobbiamo ora rendere compatibile la tensione analogica convertita
con quella delle schede driver dei galvanometri. Anche in questo caso le schede driver
riconoscono un range di tensioni entro il quale i valori dell’ascissa e dell’ordinata di una
coordinata devono rispettare, ossia ±5V. Come visto precedentemente è necessario quindi
adattare la tensione analogica 0 V a -5V e la tensione +4,096 V a +5V. Per fare questo è
necessario, come abbiamo già accennato precedentemente, utilizzare un amplificatore
operazionale in configurazione sommatore-invertente per riuscire ad adattare la tensione
analogica convertita dal DAC a quella richiesta dalle due schede driver.
L’amplificatore operazionale in configurazione
sommatore-invertente è in grado di sommare un
numero a piacere di tensioni presenti ai suoi
ingressi e di applicare un guadagno per ogni
tensione applicata. In questo progetto è stato
applicato ad un ingresso una tensione negativa in
modo da regolare l’offset del segnale analogico
proveniente dal DAC, per adattarlo appunto al
range ±5 V, e poi è stato applicato un guadagno
comune, alla somma delle 2 tensioni. Per la
tensione di riferimento da sommare a quella
proveniente dal DAC, è stato utilizzato un partitore
di tensione, dove al posto di una delle 2 resistenze
ritroviamo un potenziometro per permettere all’utente di regolare l’offset. Allo stesso modo
anche per il guadagno dell’amplificatore è stato utilizzato un potenziometro con una resistenza in
serie, opportunamente calcolata. Così facendo l’utente può scegliere sia per l’asse delle ordinate
e per quello delle ascisse il guadagno, che nella pratica si traduce nella grandezza dell’immagine
sullo schermo di riproduzione, e l’offset che permette di spostare l’immagine nelle quattro
direzioni possibili. Ovviamente il tutto è possibile fin tanto che l’operazionale non si trovi a
lavorare nella zona di saturazione, dopodiché l’immagine sarà tagliata. Allo stesso modo se i 2
guadagni non vengono calibrati l’immagine risulterà deformata.
14
Per quel che ne concerne invece il controllo del laser, è stata
realizzata un’apposita scheda esterna contente al suo interno
un mosfet e un regolatore di tensione variabile, LM1117ADJ.
Questa scheda possiede, oltre alla normale alimentazione a
+5V, un ingresso di controllo e tre uscite corrispondenti
all’alimentazione del modulo laser e il controllo laser. Il
controllo avviene attraverso il mosfet che chiudendo verso
massa o aprendosi, va ad agire su un riferimento di tensione
di corrente all’interno della scheda laser. Così facendo il laser
si spegne e si accende, agendo semplicemente sul gate del
mosfet. Per l’alimentazione del laser è stato progettato il circuito classico da adottare nel caso in
cui si voglia realizzare un alimentatore a tensione variabile con LM1117ADJ. Intervenendo in uno
dei 2 resistori (l’altro di solito è fisso con una resistenza pari a 270 ohm) si va a scegliere la
tensione d’uscita che in questo caso è pari a 3V, appunto l’alimentazione del laser. Si ricorda
inoltre di applicare all’ingresso e all’uscita di questo componente 2 condensatori di
stabilizzazione per evitare che la tensione in uscita sia affetta da disturbi.
Nelle due immagini riportate qui sotto è stata analizzata la risposta del diodo laser a una serie di
gradini di tensione di diversa durata, valutando la luce emessa (immagine di destra) e la corrente
che passa sul diodo laser (immagine di destra). Come è possibile notare il ritardo di accensione
del diodo, non è dovuto alla risposta del circuito elettronico, che in grado di fornire corrente
istantaneamente all’arrivo del comando, ma dal diodo laser stesso che ha bisogno di un certo
tempo per riuscire ad accendersi completamente.
Cerchio deformato a causa del guadagno errato Cerchio tagliato a causa dell’offset errato
15
Vengono inoltre riportate qua sotto altre due immagini tratte dall’oscilloscopio, riguardanti il
concetto espresso precedentemente riguardo alla trasformazione di una coordinata digitale in
una analogica, compatibile con le specifiche richieste dalle due schede driver dei galvanometri. A
sinistra viene analizzata in dettaglio la struttura della coordinata a 12 bit, più i bit di
configurazione per il DAC; a destra invece vengono riportati i dati di un’intera coordinata (ascissa
e ordinata), ma le rimanenti due sonde dell’oscilloscopio sono state posizionate su uno solo dei 2
canali. Come è possibile notare, il convertitore digitale-analogico converte un numero digitale,
corrispondente all’ordinata di una coordinata (in questo caso perché si sta analizzando un solo
canale), in una tensione analogica (traccia gialla), e successivamente questa tensione viene
adattata alla specifiche richieste (traccia blu). Il numero viene ricevuto attraverso la periferica
SPI, di cui ne viene riportata il clock e i dati inviati al convertitore DAC.
Traccia gialla: segnale di comando
Traccia blu: risposta del diodo laser
Traccia gialla: corrente diodo laser
Traccia blu: risposta del diodo laser
Traccia gialla: segnale convertito DAC Traccia verde: clock SPI
Traccia viola: dati inviati in SPI Traccia blu: segnale adattato per scheda driver
16
LA COMUNICAZIONE SCHEDA-PC
Per gestire la comunicazione tra il PC e la scheda è stato realizzato un apposito protocollo di
comunicazione. Di seguito viene riportata la struttura dati del protocollo che viene trasmessa dal
computer:
Dove:
STX (Start Transmission) = È il Byte che viene inviato per indicare l’inizio del pacchetto dati Numero dati = Il numero di Byte che verranno inviati nel campo “Dati”, il seguente numero è composto da 2 byte
Dati = I dati che vengono inviati Checksum = È un numero a 16 bit così composto:
Si ottiene sommando tutti i Byte del campo dati. Se si supera il numero 65.535
(216-1) si riparte da 0. Il checksum è uno dei modi per verificare l’integrità dei dati inviati.
ETX (End Transmission) = È il Byte che viene inviato per indicare la fine del pacchetto dati.
Il PIC attraverso una macchina a stati verifica che tutti i dati in ricezione rispettino il protocollo.
Se questo non dovesse accadere, un apposito messaggio verrà visualizzato sul display del
proiettore, e l’intero pacchetto verrà scartato. In questo protocollo è stata inoltre implementata
anche la tecnica di controllo dei dati basata sul calcolo della checksum. Per ogni byte trasmesso il
computer dovrà farne la somma, allegando in coda ai dati il risultato ottenuto. Se il PIC
rieseguendo la somma di tutti i dati ricevuti otterrà il medesimo risultato della checksum,
significa che i dati trasmetti sono giunti a destinazione correttamente, altrimenti l’intero
pacchetto sarà compromesso e dovrà essere ritrasmesso.
Man mano che il PIC riceverà i pacchetti dati, li dovrà memorizzare in un’apposita memoria,
ricostruendo così l’intero file trasmesso dal computer. Sul display inoltre sarà possibile
Numero dati parte alta Numero dati parte
bassa
Checksum parte alta Checksum parte bassa
17
visualizzare, in fase di ricezione, i pacchetti rimanenti al completamento dell’operazione.
Attenzione a non inviare più di 100Kbyte di file perché il PIC non riuscirà a memorizzarlo tutto
per colpa dei limiti di memoria interna.
All’interno del primo pacchetto che verrà trasmesso, oltre alle coordinate da inviare, saranno
presenti i byte riguardanti il numero del frame dove saranno contenute le successive coordinate
e il numero di coordinate presenti in quel frame. A seguire su tutti i pacchetti rimanenti
(compreso il primo) saranno contenuti 2 byte in testa per conoscere il numero del pacchetto (i
pacchetti sono numerati in ordine decrescente). Una funzione importante svolge soprattutto il
primo pacchetto perché conterrà anche il numero dei pacchetti che si trasmetteranno, così il PIC
potrà saperlo e visualizzarlo sul display.
Ad ogni pacchetto inviato il PIC, dopo aver controllato la checksum e dunque di averlo ricevuto
correttamente, invierà una risposta al PC di avvenuta ricezione. Se non ciò non dovesse accadere,
significa che il pacchetto inviato non è stato ricevuto correttamente o la comunicazione si è
interrotta. La trasmissione quindi verrà annullata e un apposito messaggio comparirà sul
software PC e sul display; sarà dunque necessario ristabilire la comunicazione e rinviare l’intero
file di dati.
I dati a sua volta sono strutturati in modo particolare, per ogni coordinata da inviare essa
occuperà 6 byte: 2 byte per l’ascissa, 2 byte per l’ordinata, 1 byte vuoto per mantenere una
struttura pari e 1 byte di controllo che serve a controllare il laser. Se il numero contenuto in
quest’ultimo byte sarà pari a 0, il laser dovrà essere accesso, se fosse 1 il laser dovrà essere
spento. A seguire ci saranno tutte le coordinate rimanenti strutturate nel medesimo modo.
FIRMWARE:
Come si sa, alla base di qualunque applicazione in cui è utilizzato un microcontrollore, la parte
più importante è sicuramente la programmazione di quest’ultimo. Il software è il programma che
permette alla scheda di svolgere tutte le funzioni per cui essa è stata progettata e realizzata,
gestendo e coordinando così anche tutti i componenti esterni, come ad esempio il display, il DAC
e la scheda SD.
Il programma è stato realizzato in ambiente di sviluppo MPLAB X IDE, un nuovo compilatore che
permette appunto di programmare la famiglia di PIC della serie 32, 24, 18 e 16 della Microchip.
La sua novità principale, che lo contraddistingue da quella precedente, e l’editor di testo che
dispone della funzionalità di auto-completamento, che aiuta il programmatore a non commettere
errori nella fase di scrittura del software, oppure si presenta come uno strumento utile per
trovare il nome di una funzione che non ci si ricorda. Il compilatore utilizzato per questa serie di
PIC è l’XC32, che implementa anch’esso nuove funzionalità e strumenti, come la gestione
dell’interrupt che avviene in modo diverso rispetto al classico C18.
Per comprendere al meglio la logica di funzionamento del programma e l’hardware che si sta
utilizzando, viene riportato qui di seguito il diagramma a blocchi della scheda principale e il
diagramma di flusso del software utilizzato.
18
19
20
1. Al momento dell’accensione del proiettore, e dunque della scheda principale, il PIC deve
inizializzare tutte le porte usate nello schema hardware del circuito e le variabili utilizzate
nel programma, per poter svolgere in seguito tutte le funzioni per cui è stato
programmato. Come già chiarito precedentemente questo microcontrollore dispone di
100 piedini, dove le porte vengono suddivise in gruppi che vanno dalla A alla G. Le porte
vengono configurare come ingresso o come uscita utilizzando la funzione TRIS= in
riferimento alla porta che si sta configurando; 1 se essa viene utilizzata come ingresso, 0
come uscita. Attenzione inoltre alle porte settate di default come analogiche, che in
questo microcontrollore riguardano i gruppi B e G, dove per configurarle come digitali è
necessario utilizzare l’istruzione (sempre in riferimento al gruppo di porte interessato)
ANSEL: 0 per la porta digitale, 1 per quella analogica. Un'altra istruzione utilizzata poi in
alcune porte, è l’ODC che permette di configurare la porta in open drain nel caso in cui si
voglia lavorare con livelli logici 0 V e 5 V, con una resistenza di pull-up collegata ai 5V.
Ricordiamo che questo microcontrollore, lavorando con una tensione di alimentazione di
3,3V, i livelli logici delle porte saranno 0V per quello basso, 3,3V per quello alto.
2. Questo microcontrollore dispone della funzione di configurare alcune porte come ingressi
o uscite delle periferiche interne al PIC, come ad esempio l’SPI o L’UART, chiamata
Peripheral Pin Select. Per poterle configurare, facendo riferimento al datasheet del PIC,
basta utilizzare le apposite macro contenute nella libreria pps.h. Di seguito è mostrato un
breve esempio di come utilizzarle.
3. Una volta configurate le porte delle periferiche utilizzate, è necessario inizializzare
quest’ultime, prima di poterci lavorare. Per quanto riguarda i timer, utilizzati per la
gestione dei tempi delle coordinate o per il PWM, viene utilizzata una funzione chiamata
(void) Init-TIMER (void) che contiene al suo interno le diverse configurazioni dei registri
per poterlo inizializzarlo. A questi si aggiungono i moduli SPI e UART, inizializzati con
apposite macro e il display e DAC, inizializzati rispettivamente con le funzioni
(void)init_disp (void) e voidInitDac(void).
4. Una volta configurato correttamente il microcontrollore, esso è pronto per potersi
interfacciare con l’utente esterno attraverso l’apposito display e tastiera. Nel display infatti
21
sarà presente un menù dove l’utente potrà scegliere tra diverse opzioni. Sulla base di tale
scelta il software dovrà eseguire delle apposite operazioni. Vediamole qui di seguito:
5. Se l’utente avrà scelto di configurare le impostazioni del display, si troverà di fronte ad un
apposito menù che gli permetterà di scegliere se regolare la luminosità o il contrasto del
display. Tutte e due queste funzioni sono state realizzate con la tecnica del PWM: il
contrasto del display è collegato a un filtro passa-basso che permette di generare una
tensione proporzionale al contrasto desiderato; per la luminosità invece si va ad agire su
un transistor posto sull’alimentazione della retro-illuminazione. L’utente non fa altro che
modificare delle apposite variabili all’interno del PIC che poi verranno utilizzate per
configurare la durata dell’impulso alto del PWM.
6. Se l’utente sceglierà di riprodurre le coordinate di un file ILDA presente all’interno della
scheda SD, il software inizializzerà la scheda, tramite delle apposite funzione ricavate dalle
Microchip Libraries for Applications, verificando la presenza o meno della scheda.
Qualora la scheda venga riconosciuta, il PIC andrà a leggere i file ILDA contenuti in essa e
li mostrerà sullo schermo del display, utilizzando delle apposite funzioni. Il PIC, una volta
che l’utente avrà scelto il file da riprodurre, non farà altro che memorizzare il nome di tale
file, per poi avviare un timer. Ogni volta che il timer raggiungerà il valore prefissato nel
suo registro PRX, genererà un interrupt che si occuperà della lettura e interpretazione
delle coordinate, per poi inviarle al DAC.
7. L’utente potrà scegliere inoltre di riprodurre le coordinate inviate da PC. Una volta
ricevute, è sufficiente selezionare l’apposita opzione dal menù del display, e il PIC attiverà
il timer 3, gestendo le diverse coordinate come visto per la sezione precedente.
8. Durante il normale svolgimento del programma il PIC verifica in continuazione l’eventuale
presenza di dati UART da elaborare. Una volta ricevuti il microprocessore elaborerà tali
dati come descritto nella sezione “La comunicazione scheda-PC”.
Passiamo ora ad analizzare la routine di Interrupt, che si dedica alla gestione ed elaborazione
delle coordinate e degli eventuali dati ricevuti attraverso l’UART. Per comprenderne la logica, ne
viene riportato il diagramma di flusso.
Ciclo infinito dove il microcontrollore testa in continuazione la presenza di eventuali dati da
elaborare provenienti dal PC, o la pulsantiera per sapere se l’utente sta premendo un tasto
22
1. Allo scadere del timer 2,
avviato dal programma principale
dopo la scelta da parte dell’utente,
esso genererà un interrupt che
dovrà essere gestito. Nell’interrupt
il microcontrollore si occuperà di
leggere una coordinata dal file
ILDA contenuto nell’SD Card e di
elaborarla, come visto nella
sezione “Segnali di Controllo”, per
poi essere inviata al DAC. Allo
scadere nuovamente del timer il
PIC invierà la coordinata
successiva, permettendo in
questo modo di controllare la
velocità di riproduzione
dell’immagine sulla base del
timer.
2. Analoga è la gestione
dell’interrupt del timer 3, dove il
microcontrollore al posto che
leggere le coordinate contenute
nell’SD Card, elaborerà quelle
contenute nel file ricevuto da PC,
situato in un apposito vettore di
memoria interno del PIC.
3. La routine di Interrupt
UART si manifesta qualora il PC
stia tentando la comunicazione
con la scheda. Un apposito flag di
ricezione dell’UART, segnalerà la
presenza di un dato ricevuto e
inserito nel registro di ricezione di
tale periferica. A questo punto, il
microcontrollore non dovrà far
altro che memorizzare il dato
ricevuto e tutti quelli che lo
seguiranno in un apposito vettore
(segnalando anche la presenza di
dati) per l’elaborazione successiva
vista nel punto 8 della descrizione
della logica del programma
principale.
23
CAD SOFTWARE INTERFACCIA UTENTE All’apertura del programma, appositamente creato per disegnare a mano libera disegni o aprire
file ILDA, l’interfaccia utente si presenterà nel seguente modo:
Essenzialmente l’interfaccia è suddivisa in 3 parti: lo schermo che permette di verificare come si
presenterà l’immagine da proiettare, una parte dedicata alle impostazioni del medesimo, come
ad esempio cancellarlo, disegnare gli assi cartesiani, cambiare frame oppure effettuare
24
l’animazione dell’immagine riproducendo in successione i diversi frame, e un menù situato nella
parte superiore dell’interfaccia che permette di utilizzarne le funzioni principali.
All’interno del menù infatti è possibile aprire un file ILDA, aprire la tabella delle coordinate del
file o quella del disegno, oppure inviare le coordinate al proiettore del disegno creato o di quello
aperto dal file, selezionando l’apposita seriale.
Come già accennato questo programma dispone della funzionalità di creare qualunque disegno a
“mano libera” da riprodurre successivamente con il proiettore. E’ sufficiente posizionarsi con il
mouse sopra lo schermo e tenere premuto il tasto sinistro del mouse per disegnare, il
programma si occuperà di creare la tabella di coordinate automaticamente.
IL SOFTWARE
LA LETTURA E INTERPRETAZIONE DI FILE ILDA
L’International Laser Display Association (ILDA) è un organizzazione mondiale non-profit dedicata
nel far progredire l’utilizzo dei proiettori laser nell’arte. E’ stata fondata nell’agosto del 1986, e
ogni anno, ILDA sponsorizza una conferenza per l’assegnazione del premio annuale ILDA Awards
per realizzazione artistica e tecnica in spettacoli laser.
Oltre ad accrescere la fama per i spettacoli laser tra il pubblico, ILDA è inoltre un’associazione
che fornisce un punto di partenza per le aziende che si stanno cimentando in queste applicazioni.
ILDA non produce e commercializza tecnologie di riproduzione laser, ma i suoi membri offrono
supporto per venire a conoscenza di aziende che sono attive in questo settore, oppure dei
rivenditori che trattano soluzioni o equipaggiamenti per realizzare laser show. I membri lavorano
tra di loro, ma non come competitori, ma come colleghi per risolvere i diversi problemi che
possono subentrare. I membri associati possono così avere ampio supporto, disponendo cosi di
informazioni riguardo le nuove norme di sicurezza o le nuove tecnologie in ambito laser.
L’ILDA ha sviluppato un formato immagine adatto per l'interscambio dei dati d’immagine tra
controllori laser e dispositivi laser. Le informazioni possono anche essere memorizzate come
frames (immagini), che possono poi essere elaborate su un computer o altro dispositivo di
controllo. Le aziende responsabili del comitato tecnico di ILDA sono LaserMedia, Image
Engineering, Foresight, and Laser Dream.
Vediamo ora il protocollo dati utilizzato nel formato .ilda, che è possibile reperire nell’apposito
documento realizzato dalla società stessa e allegato qui in fondo.
25
STRUTTURA HEADER
STRUTTURA COORDINATE
Come è possibile osservare il file si compone di 2 parti, una parte di intestazione chiamata
header dove contiene al suo interne diverse informazioni sul file, sull’immagine contenuta in
esso, o sulla società che lo ha fornito. Ad esso vengono riservati 32 bytes che è possibile ritrovare
all’inizio del file e analizzarli per estrarne le diverse informazioni contenute in esso. A seguire
vengono riportare le coordinate, in una struttura simile a quella utilizzata nella sezione
“Comunicazione con il PC”, dunque 2 byte per l’ascissa della coordinata, 2 byte per l’ordinata e 2
byte per la profondità, ma questo soltanto se l’immagine è tridimensionale, altrimenti questi
ultimi 2 byte saranno vuoti, ossia varranno 0. A seguire altri 2 byte, uno per lo “status code” e un
altro per il colore riferito alla coordinata e utilizzato qualora si stia utilizzando un proiettore laser
a colori. Lo “status code” a sua volta è suddiviso in questo modo:
26
E’ formato essenzialmente da 2 byte, i più significativi, che contengono al loro interno 2
informazioni: se la coordinata deve essere illuminata tramite l’accensione del laser (Blanking = 1)
o spenta (Blanking = 0), e se la coordinata presa in esamine è l’ultima della serie (Last Point = 1 se
lo è).
Conoscendo ora la struttura di un file ILDA è necessario creare un algoritmo che permetta di
estrarre le diverse informazioni contenute nel file e le coordinate per ricreare l’immagine.
Analizziamo dunque la parte di programmazione per realizzare la lettura corretta del file.
Innanzitutto, dopo aver aperto il file, è necessario leggere i primi 32 byte per conoscere le
principali informazioni sull’immagine che dovremo andare a riprodurre. Dunque è stato
sufficiente creare un algoritmo che estraesse le diverse informazioni e le memorizzasse nelle
apposite variabili che poi verranno utilizzate in un secondo momento. Di seguito è riportata la
soluzione adottata nel seguente programma:
Avvalendosi dell’oggetto reader e del metodo ReadBytes sono stati letti i primi 32 byte e inseriti
in una variabile di tipo FileEntry. In seguito sono stati analizzati i diversi byte contenuti in questa
variabile ed estratto le diverse informazioni con l’ausilio delle classi BitConverter, se i byte
rappresentano un numero, o Encoding se i byte rappresentano una stringa. E’ stata inoltre
utilizzata una funzione (SwapEndianness), appositamente creata per lo scambio dei 4 bit più
significativi con quelli meno significativi, per poter codificare correttamente il numero binario a 2
byte, e della quale ne viene riportato il codice qui di seguito:
Una volta interpretata l’intestazione del file occorre leggere tutte le coordinate, per fare ciò è
stato utilizzato un ciclo for che si occupa di leggere 8 byte alla volta contenenti l’informazione
della coordinata stessa. E’ sufficiente ripetere il ciclo for per tutte le coordinate presenti nel file
(informazione contenuta nell’header), e utilizzare i metodi visti in precedenza per memorizzare in
un’apposita matrice le informazioni ricavate.
27
A questo punto tutte le coordinate del file riguardanti il primo frame sono state memorizzate in
un’apposita area di memoria, più specificamente in una matrice dati chiamata “Filecordinates”.
Se il file presenta più frame bisogna gestire le rimanenti coordinate e immagini. Per fare ciò
innanzitutto il programma verifica la presenza di ulteriori frame da memorizzare, e qualora ce ne
siano, il software tramite un altro apposito ciclo for estrarrà le coordinate dei rimanti frame.
Ricordiamo che ogni frame avrà in testa il file header visto precedentemente contenente le
informazioni riguardanti quel frame. E’ necessario quindi leggere le informazioni contenute in
esso per poi estrarre le coordinate, come visto per il primo frame.
Una volta memorizzate tutte le informazioni contenute nel file ILDA il programma dovrà
occuparsi di disegnare l’immagine contenuta in esso, e qualora i frame fossero più di uno,
disegnare l’immagine corrispondente al primo frame. Per fare questo il programma utilizza una
funzione chiamata Draw_Points(), che adatta le coordinate lette allo schermo presente
nell’interfaccia, eseguendo una semplice proporzione riportata nel codice qui sotto, e in seguito
le disegna componendo così l’immagine. La funzione gestisce inoltre le eventuali coordinate dove
il laser dovrebbe essere spento, disegnandole di un colore blu. Così facendo è possibile capire
nella figura il percorso che dovranno compiere i galvanometri per posizionarsi sulla successiva
posizione illuminata dal laser.
28
A questo punto l’immagine sarà comparsa sullo schermo del software pronta per essere
eventualmente presa in esame dall’utente e inviata al PIC per la riproduzione su parete.
DISEGNO A MANO LIBERA
Il software dispone inoltre della funzionalità di poter disegnare una qualsiasi immagine o figura
da riprodurre con il proiettore laser. Per fare questo è stata realizzata un’apposita funzione che
gestisce gli eventi del mouse sullo schermo. Di conseguenza, qualora l’utente scelga di disegnare
la propria figura, è sufficiente cliccare con il mouse destro all’interno dell’area grigia scura e
verranno automaticamente generate le coordinate sulla base dei movimenti compiuti dal
cursore. Il software inoltre compila automaticamente una tabella di coordinate che è possibile
analizzare tramite l’apposito pulsante inserito nel menù “visualizza” in alto. Per fare questo sono
state create 3 apposite funzioni che valutano gli spostamenti del mouse, e la posizione del
pulsante sinistra mouse, a seconda se esso è cliccato oppure no. Le coordinate vengono inserite
ogni qual volta l’utente si allontana dalla coordinata precedente con il cursore; la distanza può
venire cambiata per questione di esigenze, come ad esempio una maggior precisione e fedeltà
nella composizione dell’immagine, cambiando un apposito parametro all’interno di una delle tre
funzioni.
La tabella di coordinate può essere aperta tramite l’apposito buttone situato nel menù
“Visualizza”. Un nuovo form verrà aperto contente al suo interno la tabella che fornisce
indicazioni sulla posizione della coordinata (X e Y) e se la coordinata e visibile o meno. Per creare
la tabella è stata utilizzata una funzione che si occupa di compilarla con i dati delle coordinate
contenuti nella matrice “coordinates”.
29
LE ANIMAZIONI (solo da lettura file)
E’ posibbile riprodurre anche delle animazioni, che consintono nella successione dei diversi
frame a tempi costanti. All’interno di un file ILDA infatti è possibile ritrovare più di un immagine
(o anche detta frame) dove se visualizzate in sequesta possono dar vita ad una animazione
grafica. Il software è in grado di gestire la presenza di più frame e di visuallizzare un’anteprima
dell’animazione che si andrà a creare con il proiettore. Il software può gestire solo le animazione
caricate attraverso un file ILDA, e non offrè la possibilità di poterne creare da parte dell’utente.
Una volta precaricata l’intera animazione, in seguito alla lettura del file, è possibile muoversi
all’interno dei diversi frame tramite l’apposito selettore posto in basso all’interfaccia utente.
Inoltre il programma dispone della posibilità di animare automaticamente l’immagine attraverso
lo scorrimento automatico dei frame ad un tempo determinato (utilizzo di un apposito timer),
semplicemente cliccando l’apposità checkbox “Animate” situata in basso a destra.
30
L’IDEA E LA REALIZZAZIONE
Questo progetto nasce in
quarta superiore dove,
dopo essermi appassionato
per gli effetti di luce che
erano in grado di realizzare
i laser alle feste, decisi di
cimentarmi in questa
sfida: la realizzazione di
un proiettore laser in
grado di riprodurre
qualunque immagine o
effetto. Dopo
numerose ricerche in
internet, constatai che il
progetto richiedeva una
buona conoscenza dei
fondamenti di informatica
e programmazione e di
progettazione, le mie
materie preferite e di cui riuscivo ad ottenere ottimi risultati. Inoltre scelsi questo progetto per la
sua originalità. Decisi quindi che questo doveva essere il mio progetto a qualunque costo e che lo
avrei cercato di portare a termine in ogni caso. Incominciai così nel secondo quadrimestre della
quarta ad informarmi con l’aiuto del professore Visentin sul funzionamento di questi proiettori e
la loro tecnologia, osservando però che l’impresa sarebbe stata ardua e difficile.
Trascorso il periodo estivo e rientrato a scuola, decisi di iniziare subito a informarmi nuovamente
per la realizzazione di questo progetto con il professore Visentin, il quale mi consigliò di far
visita ad un’azienda di sua conoscenza che si occupa di incisioni a laser su stoffe, utilizzando lo
stesso principio dei laser ottici. L’azienda subito mi fece perdere gran parte delle speranze che
avevo, soprattutto nella realizzazione del software di disegno, facendomi notare che il loro
software è il frutto di anni di sviluppo e programmazione. Nonostante tutto decisi di non
arrendermi e iniziai subito a realizzare il software di disegno, era il dicembre del 2014. Dopo 3
mesi riuscii a portarlo a termine, fiero di essere riuscito a superare il primo scoglio.
31
Ma la parte più difficile doveva ancora avvenire, ossia la realizzazione della parte hardware del
progetto. Continuavano a persistere numerose incertezze in merito al funzionamento di questi
proiettori, una tra queste era proprio la velocità dei galvanometri e la gestione dei segnali di
controllo per quest’ultimi. Considerando poi che questi componenti non costano poco, sarebbe
stata dura abbandonare il progetto dopo aver speso tutti quei soldi, nel caso in cui non
funzionasse. Ma mio padre decise di appoggiare il progetto e mi finanziò l’acquisto dei
galvanometri e dei componenti necessari.
Progettai così la scheda sulla base del principio di funzionamento che ero riuscito a cogliere
grazie a internet e all’azienda che avevo visitato, sperando che il risultato che avrei ottenuto fosse
stato soddisfacente. E così fu: dopo aver portato a termine la scheda e collegato i galvanometri,
ero riuscito ad ottenere immagini fedeli e abbastanza ferme sullo schermo, e poi in seguito allo
sviluppo del software di disegno, integrando anche la funzionalità di disegno a mano libera,
riuscivo a disegnare quello che volevo con il proiettore. Avevo riguadagnato così tutta l’autostima
e mi sentivo fiero dei traguardi che ero riuscito a portare a termine.
Passai poi alla realizzazione dell’involucro che avrebbe contenuto al suo interno tutti i
componenti, utilizzando una scatola in legno appositamente tagliata e levigata da mio zio.
Posizionai all’interno di essa tutti i componenti e li fissai sul fondo. Poi, con l’aiuto di mio padre,
realizzai il coperchio in modo che esso fosse estraibile, per lavorare all’interno della scatola, e
trasparente, cosicché anche durante il funzionamento si potesse osservare all’interno, optando
per il plexiglass e un supporto a calamite. Il proiettore era così ultimato e pronto per essere
portato con sé in qualunque luogo.
Qui di seguito alcune foto del lavoro portato a termine:
Il supporto a calamita per il coperchio
Il display e la tastiera visti da dietro
attaccati al plexiglass
32
Le ventole di raffreddamento per le
schede driver galvanometri
Foro uscita raggio laser
Scheda principale retro
Scheda principale fronte
33
RINGRAZIAMENTI
Ringrazio innanzitutto tutta la mia famiglia per il supporto e l’aiuto che mi ha dato
durante tutto l’anno scolastico per portare avanti questo progetto, in particolar modo
mio padre che lo ha finanziato e mi ha aiutato nella realizzazione della scatola.
Ringrazio i miei compagni, i professori e l’ITIS per essermi stati sempre al mio fianco,
dandomi consigli importanti per potermi migliorare non solo come studente ma anche
come persona.
Ringrazio i professori Visentin e Tonon per il prezioso aiuto che mi è stato dato nella
realizzazione e nella programmazione di questo progetto. Senza di loro probabilmente
tutto questo non avrebbe preso forma, restando una semplice idea abbozzata in un
pezzo di carta.
BIBLIOGRAFIA E SITOGRAFIA
- wikipedia.org
- Introduction to Laser Technology – Melles Griot
- elm-chan.org
- www.laserfx.com
- English for new technology – Kiaran O’Malley
5
5
4
4
3
3
2
2
1
1
D D
C C
B B
A A
8-12 V
40 mA
LASER CONNECTOR
DISPLAY CONNECTOR
Lucchetta Bryan
RA14RA15
RA10
RC1
RF0
RG6
RF5RG15
RA0RA1RA2RA3RA4RA5RA6RA7
RC1
RG6RF0RF5
RA0RA1RA2RA3RA4RA5RA6RA7
RA10RA14RA15RD10
RD1
RD10RD1RD2RD3
RG15
RD0
RG9
RG9
RD3RD2
RD0
VAL
VCC
+5CC
+5CC
+5CC
-5CC
+5CC
VCC
Title
Size Document Number Rev
Date: Sheet o f
Scheda principale proiettore laser
B
1 5Monday, June 15, 2015
Title
Size Document Number Rev
Date: Sheet o f
Scheda principale proiettore laser
B
1 5Monday, June 15, 2015
Title
Size Document Number Rev
Date: Sheet o f
Scheda principale proiettore laser
B
1 5Monday, June 15, 2015
R251,2 K
U3TC7662ACPA
NC1
C+2
GND3
C-4
VOUT5NC_16OSC7VDD8
C3.1uF
U6
SD SOCKET
DO7
VSS26
SCLK5
Vdd14
Vss13
DI2
CS1
J1
HEADER 2
12
C1410uF
C2.1uF
C7CAPACITOR
+ C610uF
+ C110uF R24
1,2 K
U4
LD1086V33
VIN1
GN
D2
VOUT3
J3
HEADER 3
123
C810uF
R4 15
Q1BC107
PIC32MZ
PIC32MZ
RA0RA1RA2RA3RA4RA5RA6RA7
RD10
RD1RD2RD3
RC1
RG6RF0RF5
RA10RA14RA15
RG15
RG9RD0
DACMODULE
DACMODULE
RD10RD1RD2RD3
+ C410uF
+ C510uF
U1
LM7805/TO
VIN1
GN
D2
VOUT3
R26
4,7K
J2
HEADER 16
123456789
10111213141516
5
5
4
4
3
3
2
2
1
1
D D
C C
B B
A A
PROGRAMMAZIONE EDEBUG
Lucchetta Bryan
RA0
RA1
RA2RA3RA4
RG15
RA6RA7
RC1
RD10
RD1RD2RD3
RF0
RG6
RF5
RA10
RA15RA14
RG9
VCC
VCC
VCC
VCC
Title
Size Document Number Rev
Date: Sheet o f
Microcontrollore PIC32MX470F512H
B
5 5Monday, June 15, 2015
Title
Size Document Number Rev
Date: Sheet o f
Microcontrollore PIC32MX470F512H
B
5 5Monday, June 15, 2015
Title
Size Document Number Rev
Date: Sheet o f
Microcontrollore PIC32MX470F512H
B
5 5Monday, June 15, 2015
D1
1N4148 SMD
C16100nF
R1710K
C13 22pF
R18
100
C20100nF
JP1
HEADER 5
12345
C1710 uF LESR
C12 22pF
C10.1uF
Y1
20MHz
C11.1uF
U8PIC32MX450F256L-80I_PF
RG151
VDD2
AN22/RPE5/PMD5/RE53
AN23/PMD6/RE64
AN27/PMD7/RE75
RPC1/RC16
RPC2/RC27
RPC3/RC38
RPC4/CTED7/RC49
AN16/C1IND/RPG6/SCK2/PMA5/RG610
AN17/C1INC/RPG7/PMA4/RG711
AN18/C2IND/RPG8/PMA3/RG812
*MCLR13
AN19/C2INC/RPG9/PMA2/RG914
VSS15
VDD_116
TMS/CTED1/RA017
RPE8/RE818
RPE9/RE919
AN5/C1INA/RPB5/RB520
AN4/C1INB/USBOEN/RB421
PGED3/AN3/C2INA/RPB3/RB322
PGEC3/AN2/C2INB/RPB2/CTED13/RB223
PGEC1/AN1/RPB1/CTED12/RB124
PGED1/AN0/RPB0/RB025
PGEC2/AN6/RPB6/RB626
PGED2/AN7/RPB7/CTED3/RB727
PGED2/AN7/RPB7/CTED3/RB7VREF-/CVREF-/PMA7/RA928
VREF+/CVREF+/PMA6/RA1029
AVDD30
AVSS31
AN8/RPB8/CTED10/RB832
AN9/RPB9/CTED4/RB933
CVREFOUT/AN10/RPB10/PMA13/CTED11/RB1034
AN11/PMA12/RB1135
VSS_136
VDD_237
TCK/CTED2/RA138
RPF13/RF1339
RPF12/RF1240
AN12/PMA11/RB1241
AN13/RB1342
AN14/RPB14/PMA1/CTED5/RB1443
AN15/RPB15/PMA0/CTED6//RB1544
VSS_245
VDD_346
RPD14/RD1447
RPD15/RD1548
RPF4/PMA9/RF449
RPF5/PMA8/RF550
RPF3/USBID/RF351RPF2/RF252RPF8/RF853VBUS54VUSB3V355D-/RG356D+/RG257SCL2/RA258SDA2/RA359TDI/CTED9/RA460TDO/RA561VDD_462CLKI/RC12/OSC163CLKO/RC15/OSC264VSS_365SCL1/RPA14/RA1466SDA1/RPA15/RA1567RPD8/RTCC/RD868RPD9/RD969RPD10/SCK1/PMCS2/RD1070RPD11/PMCS1/RD1171RPD0/INT0/RD072SOSCI/RPC13/RC1373SOSCO/RPC14/T1CK/RC1474VSS_475AN24/RPD1/RD176AN25/RPD2/RD277AN26/RPD3/RD378RPD12/PMD12/RD1279PMD13/RD1380RPD4/PMWR/RD481RPD5/PMRD/RD582RPD6/PMD14/RD683RPD7/PMD15/RD784VCAP85VDD_586RPF0/PMD11/RF087RPF1/PMD10/RF188RPG1/PMD9/RG189RPG0/PMD8/RG090TRCLK/RA691TRD3/CTED8/RA792PMD0/RE093PMD1/RE194TRD2/RG1495TRD1/RG1296TRD0/RG1397AN20/PMD2/RE298RPE3/PMD3/RE399AN21/PMD4/RE4100
C19CAPACITOR
R191MEG
C9.1uF
C15100nF
5
5
4
4
3
3
2
2
1
1
D D
C C
B B
A A
VOUT = 2.048 * G * (Dn / 2^N) G = Gain selection (1x or 2x) Dn = Digital value of DAC (0-4095) for MCP4822 N = DAC bit resolution
VOUT
Lucchetta Bryan
RD2 RD3
RD0RD1
+5CC
-5CC
-5CC
+5CC
+5CC
-5CC
-5CC
Title
Size Document Number Rev
Date: Sheet o f
Parte conversione digitale-analogica
B
2 5Monday, June 15, 2015
Title
Size Document Number Rev
Date: Sheet o f
Parte conversione digitale-analogica
B
2 5Monday, June 15, 2015
Title
Size Document Number Rev
Date: Sheet o f
Parte conversione digitale-analogica
B
2 5Monday, June 15, 2015
R83,3K
R19
6,8K
J5
HEADER 2
12
R21
2,2K
R6
3,3K
R15
3,3K
R114,7K
-
+
U5A
TLV2372
3
21
41
1
U4MCP4822-P
VDD1
*CS2
SCK3
SDI4
*LDAC5VOUTB6AVSS7VOUTA8
R17
6,8K
R10
100
R16
100
R143,3K
J4
HEADER 2
12
-
+
U5B
TLV2372
5
67
41
1
R234,7K
R9
3,3K
R12
3,3K
R22
2,2K
5
5
4
4
3
3
2
2
1
1
D D
C C
B B
A A
VOUT = 2.048 * G * (Dn / 2^N) G = Gain selection (1x or 2x) Dn = Digital value of DAC (0-4095) for MCP4822 N = DAC bit resolution
VOUT
Lucchetta Bryan
RD2 RD3
RD0RD1
+5CC
-5CC
-5CC
+5CC
+5CC
-5CC
-5CC
Title
Size Document Number Rev
Date: Sheet o f
Parte conversione digitale-analogica
B
2 5Monday, June 15, 2015
Title
Size Document Number Rev
Date: Sheet o f
Parte conversione digitale-analogica
B
2 5Monday, June 15, 2015
Title
Size Document Number Rev
Date: Sheet o f
Parte conversione digitale-analogica
B
2 5Monday, June 15, 2015
R83,3K
R19
6,8K
J5
HEADER 2
12
R21
2,2K
R6
3,3K
R15
3,3K
R114,7K
-
+
U5A
TLV2372
3
21
41
1
U4MCP4822-P
VDD1
*CS2
SCK3
SDI4
*LDAC5VOUTB6AVSS7VOUTA8
R17
6,8K
R10
100
R16
100
R143,3K
J4
HEADER 2
12
-
+
U5B
TLV2372
5
67
41
1
R234,7K
R9
3,3K
R12
3,3K
R22
2,2K
ILDA Image Data Transfer FormatSpecification
ILDA Technical [email protected]
November 16, 2014Revision 011
ILDA Image Data Transfer Format Specification
Contents
1. ILDA Image Data Transfer Format 41.1. Scope of the ILDA File Format . . . . . . . . . . . . . . . . . . . . . . . 4
2. Introduction 52.1. Nomenclature and Structure . . . . . . . . . . . . . . . . . . . . . . . . 52.2. Binary vs. ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.3. Byte Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.4. Point Data in ILDA Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.5. Colors in ILDA Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3. File Structure 63.1. Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.2. Format Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.3. Application Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . 73.4. Color Palette Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4. Header Section 84.1. Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.2. Field Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.2.1. "ILDA" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.2.2. Reserved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.2.3. Format Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94.2.4. Frame or Color Palette Name . . . . . . . . . . . . . . . . . . . . 94.2.5. Company Name . . . . . . . . . . . . . . . . . . . . . . . . . . . 94.2.6. Number of Records . . . . . . . . . . . . . . . . . . . . . . . . . 94.2.7. Frame or Color Palette Number . . . . . . . . . . . . . . . . . . . 94.2.8. Total Frames in Sequence or 0 . . . . . . . . . . . . . . . . . . . 94.2.9. Projector Number . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5. Data Records 105.1. Data Record Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.1.1. Format 0 – 3D Coordinates with Indexed Color . . . . . . . . . . 105.1.2. Format 1 – 2D Coordinates with Indexed Color . . . . . . . . . . 105.1.3. Format 2 – Color Palette . . . . . . . . . . . . . . . . . . . . . . 115.1.4. Format 4 – 3D Coordinates with True Color . . . . . . . . . . . . 115.1.5. Format 5 – 2D Coordinates with True Color . . . . . . . . . . . . 12
5.2. Data Field Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.2.1. X Coordinate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.2.2. Y Coordinate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.2.3. Z Coordinate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Page 2 c©2014 International Laser Display Association Revision 011
ILDA Image Data Transfer Format Specification
5.2.4. Status Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.2.5. Color Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.2.6. Blue Color Component . . . . . . . . . . . . . . . . . . . . . . . 145.2.7. Green Color Component . . . . . . . . . . . . . . . . . . . . . . 145.2.8. Red Color Component . . . . . . . . . . . . . . . . . . . . . . . 14
6. Revision History 15
7. Contributors 15
8. Copyright 16
Appendix 17
A. Suggested Default Color Palette 17
Revision 011 c©2014 International Laser Display Association Page 3
ILDA Image Data Transfer Format Specification
1. ILDA Image Data Transfer Format
This technical standard describes the official International Laser Display AssociationData Transfer Format for exchanging laser show frames between systems. It has beendeveloped by ILDA’s Technical Committee.
The official name of this standard is “ILDA Image Data Transfer Format”.
You can obtain frames from any program that correctly writes ILDA-format files, andtransparently load them directly into any system that can load ILDA-format files. Simi-larly, you can save frames in ILDA format, to sell or trade with users of other systemsthat read ILDA format.
1.1. Scope of the ILDA File Format
The ILDA format is intended for frame exchange purposes only. A laser system is freeto read and write its own proprietary format that best meets its features and require-ments.
It is not optimized for space or speed, and it is not currently concerned with displayissues such as point output rate. Also, the format does not include show informationsuch as timing of frames. Generally, the highest function the ILDA format can provide isa sequence of frames which play back to form an animation.
Page 4 c©2014 International Laser Display Association Revision 011
ILDA Image Data Transfer Format Specification
2. Introduction
2.1. Nomenclature and Structure
Throughout this document, the word “SHALL” is used in capitals to stress required con-formance with the ILDA Format. The word “SHOULD” in capitals indicates suggestedconformance.
2.2. Binary vs. ASCII
The terms “binary 0” or “binary 1” refer to bit codes 0000 0000 and 0000 0001. They areused to avoid confusion with the ASCII characters “0” or “1”.
2.3. Byte Order
For values which span more than a single byte, the multiple byte ordering followedSHALL be that of the big endian standard. The most significant byte will occur first,the least significant byte last.
2.4. Point Data in ILDA Files
The ILDA format is intended for “point-oriented” frames only rather than “vector-oriented”frames. This means the data in an ILDA file is interpreted as data samples which aredirectly sent to the galvanometer scanners used in laser projectors. The data is NOTraw vector information which needs further processing.
2.5. Colors in ILDA Files
Assume that the RGB color values specified in this standard are linear and are colorbalanced. For linearity, this is visual linearity: a color value of 127 (50 %) appears halfas bright to the eye as a setting of 255 (100 %).
Revision 011 c©2014 International Laser Display Association Page 5
ILDA Image Data Transfer Format Specification
3. File Structure
3.1. Layout
An ILDA file consists of sections which either contain a frame or a color palette. Eachsection consists of a fixed length header followed by a variable number of data records,which are either frame points or color palette colors.
Header
Header
Data Record #0
followed by up to 65534Data Records
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
Section(frame orcolor palette)
Data
...
Frame Header with Number of Records = 0LastSection
Header
Figure 1: ILDA File Structure
The “Number of Records” field in the header defines how many data records will followthe header.
The end of the file is marked by a header with frame format code (Format 0, 1, 4 or 5)and zero number of records.
3.2. Format Codes
The type and data format of the section is defined by the format code. There are fivedifferent formats currently defined:
Page 6 c©2014 International Laser Display Association Revision 011
ILDA Image Data Transfer Format Specification
• Format 0 – 3D Coordinates with Indexed Color
• Format 1 – 2D Coordinates with Indexed Color
• Format 2 – Color Palette for Indexed Color Frames
• Format 4 – 3D Coordinates with True Color
• Format 5 – 2D Coordinates with True Color
Format 3 was proposed within the ILDA Technical Committee but was never approved.Therefore, format 3 is omitted in this ILDA standard.
Formats 0, 1, 4 and 5 define point data. Each point includes X and Y coordinates, andcolor information. The 3D formats 0 and 4 also include Z (depth) information.
The indexed color formats 0 and 1 use a data format where each point has a Color Indexbetween 0 and 255 used as an index into a color palette. Format 2 specifies the colorpalette for use with indexed color frames. The true color formats 4 and 5 use a red,green and blue color component of 8 bits for each point. ILDA files may contain a mix offrames with several different format codes.
3.3. Application Requirements
An application which reads ILDA format files SHALL be able to read all five currentformats (0, 1, 2, 4 and 5).
Newly created applications SHOULD primarily use the true color frame formats.
For compatibility with older versions of the ILDA file format applications SHOULD be ableto write one of the indexed color frame formats, optionally including the color palette.
3.4. Color Palette Handling
For each projector there is a color palette which is used for indexed color frames.
The color palette used for a projector can be set using a format 2 color palette section.The color palette will then be used for all following frames for that projector. If anotherformat 2 section is encountered for that projector, it will replace the projector’s currentcolor palette.
Often ILDA files contain indexed color frames without a format 2 color table precedingthem. For this case the color palette has to be initialized to a user-defined color palette.One possible palette is given in Appendix A of this standard.
Revision 011 c©2014 International Laser Display Association Page 7
ILDA Image Data Transfer Format Specification
4. Header Section
4.1. Structure
The header has a fixed size of 32 bytes and the following structure:078151631
"ILDA"(1 – 4)
Reserved(5 – 7)
Format Code(8)
Frame or Color Palette Name(9-16)
Company Name(17 – 24)
Number of Records(25 – 26)
Frame or Color Palette Number(27 – 28)
Total Frames or 0(29 – 30)
Projector Number(31)
Reserved(32)
Figure 2: Header StructureByte numbers in parenthesis.
4.2. Field Description
4.2.1. "ILDA"
Bytes 1 – 4. The ASCII letters ILDA, identifying an ILDA format header.
4.2.2. Reserved
Bytes 5 – 7 and 32. Reserved for future use. When writing a file, this SHALL be set to0. When reading a file, do not test the value of these bytes.
Page 8 c©2014 International Laser Display Association Revision 011
ILDA Image Data Transfer Format Specification
4.2.3. Format Code
Byte 8. One of the format codes defined in the Format Codes section.
4.2.4. Frame or Color Palette Name
Bytes 9 – 16. Eight ASCII characters with the name of this frame or color palette. If abinary zero is encountered, than any characters following the zero SHALL be ignored.
4.2.5. Company Name
Bytes 17 – 24. Eight ASCII characters with the name of the company who created theframe. If a binary zero is encountered, than any characters following the zero SHALL beignored.
4.2.6. Number of Records
Bytes 25 – 26. Total number of data records (points or colors) that will follow this headerexpressed as an unsigned integer (0 – 65535).
If the number of records is 0, then this is to be taken as the end of file header and nomore data will follow this header.
For color palettes, the number of records SHALL be between 2 and 256.
4.2.7. Frame or Color Palette Number
Bytes 27 – 28. If the frame is part of a group such as an animation sequence, thisrepresents the frame number. Counting begins with frame 0. Range is 0 – 65534.
4.2.8. Total Frames in Sequence or 0
Bytes 29 – 30. Total frames in this group or sequence. Range is 1 – 65535. For colorpalettes this SHALL be 0.
Revision 011 c©2014 International Laser Display Association Page 9
ILDA Image Data Transfer Format Specification
4.2.9. Projector Number
Byte 31. The projector number that this frame is to be displayed on. Range is 0 – 255.For single projector files this SHOULD be set 0.
5. Data Records
5.1. Data Record Structures
5.1.1. Format 0 – 3D Coordinates with Indexed Color
Format 0 records have a size of 8 bytes and the following structure:
07815
X Coordinate (1 – 2)
Y Coordinate (3 – 4)
Z Coordinate (5 – 6)
Status Code (7) Color Index (8)
Figure 3: Structure of Point Format 0 -3D Coordinates with “Indexed Color”
Byte numbers in parenthesis.
5.1.2. Format 1 – 2D Coordinates with Indexed Color
Format 1 records have a size of 6 bytes and the following structure:
Page 10 c©2014 International Laser Display Association Revision 011
ILDA Image Data Transfer Format Specification
07815
X Coordinate (1 – 2)
Y Coordinate (3 – 4)
Status Code (5) Color Index (6)
Figure 4: Structure of Point Format 1 -2D Coordinates with “Indexed Color”
Byte numbers in parenthesis.
5.1.3. Format 2 – Color Palette
Format 2 records have a size of 3 bytes and the following structure:
7 0
Red (1)
Green (2)
Blue (3)
Figure 5: Structure of Format 2 -Color Palette
Byte numbers in parenthesis.
5.1.4. Format 4 – 3D Coordinates with True Color
Format 4 records have a size of 10 bytes and the following structure:
Revision 011 c©2014 International Laser Display Association Page 11
ILDA Image Data Transfer Format Specification
07815
X Coordinate (1 – 2)
Y Coordinate (3 – 4)
Z Coordinate (5 – 6)
Status Code (7) Blue (8)
Green (9) Red (10)
Figure 6: Structure of Point Format 4 -3D Coordinates with True Color
Byte numbers in parenthesis.
5.1.5. Format 5 – 2D Coordinates with True Color
Format 5 records have a size of 8 bytes and the following structure:
07815
X Coordinate (1-2)
Y Coordinate (3-4)
Status Code (5) Blue (6)
Green (7) Red (8)
Figure 7: Structure of Point Format 5 -2D Coordinates with True Color
Byte numbers in parenthesis.
5.2. Data Field Description
5.2.1. X Coordinate
A 16-bit binary twos complement (signed) integer.
Extreme left is -32768; extreme right is +32767. (All directions referenced to front pro-jection.)
Page 12 c©2014 International Laser Display Association Revision 011
ILDA Image Data Transfer Format Specification
5.2.2. Y Coordinate
A 16-bit binary twos complement (signed) integer.
Extreme bottom is -32768; extreme top is +32767.
5.2.3. Z Coordinate
A 16-bit binary twos complement (signed) integer.
Extreme rear (away from viewer; behind screen) is -32768; extreme front (towardsviewer; in front of screen) is +32767.
5.2.4. Status Code
0567
Last Point(Bit 7)
Blanking(Bit 6) 0
Figure 8: Status Code Format
Bit 7 (MSB) – Last Point Bit: This bit SHALL be set to 0 for all points except the lastpoint of the image.
Bit 6 – Blanking Bit: If this is a 1, then the laser is off (blank). If this is a 0, then thelaser is on (draw). Note that all systems SHALL write this bit, even if a particular systemuses the color index for blanking/color information.
When reading files, the blanking bit takes precedence over the color from the colorpalette or the points RGB values. If the blanking bit is set, all RGB values SHOULD betreated as zero.
Bits 0 – 5: SHALL be set to 0. Do not test the value of these bits.
5.2.5. Color Index
Indicates the point’s color number. This value is used as an index into the color palette.
Revision 011 c©2014 International Laser Display Association Page 13
ILDA Image Data Transfer Format Specification
5.2.6. Blue Color Component
This value is the point’s blue color component. A value of 0 indicates “zero brightness”and a value of 255 indicates “maximum brightness”.
5.2.7. Green Color Component
This value is the point’s green color component. A value of 0 indicates “zero brightness”and a value of 255 indicates “maximum brightness”.
5.2.8. Red Color Component
This value is the point’s red color component. A value of 0 indicates “zero brightness”and a value of 255 indicates “maximum brightness”.
Page 14 c©2014 International Laser Display Association Revision 011
ILDA Image Data Transfer Format Specification
6. Revision History
Not all versions are listed here.
• Revision 004, June 1992 – Added Format 2 with color header table data.
• Revision 005.1, July 2006 – Corrected coordinate ranges and made a minor cor-rection in one place.
• Revision 008, March 2007 – Added Formats 4 and 5. Limited distribution as adraft, within the ILDA Technical Committee
• Revision 009, October 2008 – No change to Formats. Extensive changes andadditions to explanatory text.
• Revision 010A, April 2013 – Major update of layout and structure of this document.
• Revision 010B, September 2013 – Minor corrections.
• Revision 010C, June 2014 – Minor corrections.
• Revision 010D, October 2014 – No changes to Formats. Renamed "Scanner Num-ber" to "Projector Number", various minor corrections.
• Revision 010E, October 2014 – No changes to Formats. Various minor correc-tions, added bytes numbers to tables.
• Revision 011, November 2014 – Release Version
7. Contributors
Many individuals have contributed to ILDA standards development and this document.These include the following contributors:
Robin Adams, RayComposerWilliam R. Benner, Jr., Pangolin Laser Systems, Inc.Daniel Cohn, Technological ArtisansSteve Heminover, Aura Technologies, Inc.Peter Jakubek, LaserAnimation Sollinger GmbHPatrick Murphy, Pangolin Laser Systems, Inc.Frank Plughoff, Full Spectrum LasersKelly Plughoff, Full Spectrum LasersMatt Polak, Raven Systems Design, Inc.Michael Sollinger, LaserAnimation Sollinger GmbH
Revision 011 c©2014 International Laser Display Association Page 15
ILDA Image Data Transfer Format Specification
8. Copyright
This document c©1992-2014 International Laser Display Association. All rights reserved.For reproduction permission contact ILDA’s Executive Director ([email protected]).
Page 16 c©2014 International Laser Display Association Revision 011
ILDA Image Data Transfer Format Specification
Appendix
A. Suggested Default Color Palette
The color palette described here was originally developed by LFI and Aura Technologies.It contains 64 colors of the full saturated hues and white.
This color palette is used by most ILDA files that do not contain a color palette, includingthe ILDA test pattern.
Table 1: Suggested Default Color PaletteColor Number Red Green Blue Color name
0 255 0 0 Red
1 255 16 0
2 255 32 0
3 255 48 0
4 255 64 0
5 255 80 0
6 255 96 0
7 255 112 0
8 255 128 0
9 255 144 0
10 255 160 0
11 255 176 0
12 255 192 0
13 255 208 0
14 255 224 0
15 255 240 0
16 255 255 0 Yellow
17 224 255 0
Revision 011 c©2014 International Laser Display Association Page 17
ILDA Image Data Transfer Format Specification
18 192 255 0
19 160 255 0
20 128 255 0
21 96 255 0
22 64 255 0
23 32 255 0
24 0 255 0 Green
25 0 255 36
26 0 255 73
27 0 255 109
28 0 255 146
29 0 255 182
30 0 255 219
31 0 255 255Cyan
32 0 227 255
33 0 198 255
34 0 170 255
35 0 142 255
36 0 113 255
37 0 85 255
38 0 56 255
39 0 28 255
40 0 0 255 Blue
41 32 0 255
42 64 0 255
43 96 0 255
44 128 0 255
45 160 0 255
Page 18 c©2014 International Laser Display Association Revision 011
ILDA Image Data Transfer Format Specification
46 192 0 255
47 224 0 255
48 255 0 255Magenta
49 255 32 255
50 255 64 255
51 255 96 255
52 255 128 255
53 255 160 255
54 255 192 255
55 255 224 255
56 255 255 255 White
57 255 224 224
58 255 192 192
59 255 160 160
60 255 128 128
61 255 96 96
62 255 64 64
63 255 32 32
Revision 011 c©2014 International Laser Display Association Page 19