vuoi
o PayPal
tutte le volte che vuoi
Elettronica ed Elettrotecnica - Filtri (passa basso, passa alto)
CANOVA
5 19
Pag. di
Lo schema a blocchi del prodotto si divide in due sotto schemi, per la
base e per la penna.
La penna è costruita attorno ad un
microprocessore Attiny 85, le cui specifiche
tecniche sono riportate nel datasheet (Allegato 1),
alimentato da una batteria LiPo ricaricabile tramite
l’apposito dock di ricarica.
Al microprocessore è collegata un IMU (“Inertial
Measurement Unit” o “Unità di Misurazione
Inerziale”) a 6 gradi di libertà, ossia il movimento
nei tre assi e la rotazione attorno a questi,
composta da un accelerometro ADXL345 e da un giroscopio ITG3200.
Oltre all’IMU, sulla penna sono presenti quattro led infrarossi posti a
90° d’inclinazione l’uno dall’altro sulla circonferenza della penna e un
modulo radio ricetrasmittente usato solo Attiny 85
come trasmettitore.
La base è costruita attorno ad un
microprocessore Atmega2560 basato su
piattaforma Arduino Mega, le cui
specifiche sono riportate sul datasheet
(Allegato 2), alimentato tramite la porta
USB che funge anche da mezzo di comunicazione con il computer.
Sulla piattaforma Arduino è montata la scheda di controllo che
gestisce le fotocamere ed il modulo ricetrasmittente, usato solo nella
sua funzione di ricevitore. Arduino Mega
6 19
Pag. di
Principio di funzionamento
Dopo approfondite ricerche, si è giunti ad
implementare un sistema di rilevazione
basato su due fotocamere ottenute da
altrettanti telecomandi (“Wiimote”) della
nota console di videogiochi Nintendo “Wii”. Una delle fotocamere ottenute
Un Wiimote
Le fotocamere contenute nel telecomando hanno un filtro per raggi
infrarossi posto davanti alle lenti, che filtra tutta la banda di frequenza
che non sia quella della luce infrarossa compresa tra 430THz e
300GHz, oltre ad una lente dicroica che svolge lo stesso compito, ed
un microprocessore incorporato che legge i dati delle fotocamere, li
elabora, e restituisce con protocollo di comunicazione I2C (“Inter-
Integrated Circuit”) le coordinate sul piano parallelo a quello della
fotocamera di ogni punto nello spazio (fino a 4 in realtà) che emette
raggi infrarossi.
Si sono scelte tali fotocamere in quanto sono dotate di un
microprocessore interno che velocizza il calcolo delle coordinate e che
ricampiona l’immagine in uscita dalle fotocamere da una risoluzione di
7 19
Pag. di 128*64 pixel a 1024*768 pixel,
utilizzando l’interpolazione
bilineare.
La “penna” impugnata dall’utente ha quindi 4 led infrarossi posti a 90°
tra loro, led che vengono percepiti dalle fotocamere che, come si può
vedere dall’immagine, essendo poste
perpendicolarmente, restituiscono le
coordinate delle proiezioni nei due piani (y-z
ed x-z) della punta della penna.
Incrociando le coordinate così ottenute si
possono calcolare le coordinate nello spazio
tridimensionale della punta della penna.
Il pinout delle fotocamere è visibile in figura.
Oltre all’alimentazione a 3.3V e i pin di massa,
sono presenti i 2 pin per la comunicazione I2C,
SDA ed SCL, 1 pin per il clock che aziona l’otturatore della fotocamera
ed un pin connesso al reset del microprocessore interno.
Inoltre, alle fotocamere è portato un pin aggiuntivo che fornisce
tensione al portabatterie del telecomando in quanto ci siamo accorti
che le fotocamere, dopo un certo periodo di inattività, entravano in
una sorta di “stand-by”, che interrompeva la comunicazione delle
coordinate. Il pinout delle
Dopo vari test siamo riusciti a capire che fotocamere
dando un impulso di tensione al portabatterie questa fase di standby
si interrompeva. 8 19
Pag. di Hardware
La base è costituita
essenzialmente da tre elementi
hardware, ossia il microcontrollore,
la scheda di controllo e le fotocamere.
La base La scheda di controllo è realizzata
su una basetta millefori su cui sono stati riportati con strip di
connettori maschio-maschio i pin della piattaforma Arduino, cui vanno
a connettersi i vari elementi circuitali.
È provvista innanzitutto di un diodo led di segnalazione il cui catodo è
connesso al pin 13 dell’Arduino, mentre l’anodo a massa tramite una
resistenza da 470Ω (R8), che fornisce un utile indicatore in caso di
errori del sistema o per comunicazioni all’utente.
La resistenza è stata calcolata in modo da mantenere una corrente di
circa 10mA sul diodo, abbastanza grande da avere un’emissione di
luce visibile e abbastanza piccola da non danneggiare l’uscita digitale
del microcontrollore, che può erogare fino a 40mA.
9 19
Pag. di
−V
V 5−0,7 E’ presente inoltre un pulsante tra il
cc soglia ≅
= =430Ω
R= 470Ω
I 10 m
pin RESET del microcontrollore e massa, in modo da poter
agevolmente resettare il microprocessore all’occorrenza.
Il circuito che genera il clock per le fotocamere è costituito da due
porte “NOT”, presenti nell’integrato 74HC04 (IC1), e un oscillatore al
quarzo, composto a sua volta da un quarzo a 20MHz (X1), due
resistenze da 1MΩ e da 47kΩ (R7, R6) e da due condensatori da 10pF
(C3, C4).
In parallelo all’alimentazione dell’integrato un condensatore
elettrolitico (C2) mantiene stabile la tensione e un condensatore
ceramico (C6) filtra eventuali disturbi.
Inizialmente l’integrato scelto era il 74LS04, che comprende sei porte
“NOT”, ma l’oscillatore così realizzato non riusciva a generare 20MHz,
in quanto l’integrato appartiene alla famiglia logica TTL (Transistor-
Transistor Logic) che, per limitazioni tecnologiche, non permette
commutazioni a tale frequenza.
Si è optato quindi di adottare l’integrato 74HC04 che appartiene alla
famiglia logica CMOS, che permette di arrivare alla frequenza di
20MHz.
Per quanto riguarda il reset delle fotocamere, essendo un active-low
(che si attiva cioè quando la tensione sul pin è zero) esso è mantenuto
costantemente a 5 volt dalla serie della resistenza R5, da 33kΩ, e del
condensatore C5, da 1nF.
La serie resistenza-condensatore costituisce un filtro passa-basso con
costante di tempo τ:
≅
=R∗C=33
τ k∗1 n 33 μ s f
Quindi la frequenza di taglio :
T
1 1 ≅
= =
f 30 kHz
T τ 33 μ
La tensione è quindi filtrata, in modo da renderla il più stabile
possibile. 10 19
Pag. di
Per quanto riguarda la comunicazione I2C, la linea SCL è in comune a
entrambe le fotocamere, mentre le rispettive linee SDA sono
selezionate alternativamente utilizzando due transistor NPN (Q1, Q2),
la cui base è collegata rispettivamente ai pin 3 e 4 del
microcontrollore tramite due resistenze da 1kΩ (R2, R3).
Un transistor NPN (Q3), la cui base è collegata al pin 6 tramite una
resistenza da 1kΩ (R3), collega l’uscita di tensione a 3.3V del
microcontrollore al contatto positivo dei porta batterie dei telecomandi
ogni qualvolta si deve interrompere lo stand-by delle fotocamere.
Il modulo radio non ha bisogno di componenti esterni, ed è
semplicemente connesso a massa, all’alimentazione 5V ed al pin RX1,
che riceve i dati in ingresso. 11 19
Pag. di
12 19
Pag. di
Software
Il software si divide in due parti, ossia il “lato base” e il “lato
computer”.
Il software sulla base è stato sviluppato
nell’ambiente Arduino con il linguaggio
omonimo, Arduino, che è un derivato di Java
adattato per la programmazione su
microcontrollore, che semplifica molto la
programmazione, ma rallenta l’esecuzione dei
programmi, poiché impedisce di avere un
dialogo diretto con i registri del
microprocessore come invece è permesso fare,
ad esempio, programmando in linguaggio C.
Si è scelto di programmare utilizzando questo
linguaggio in quanto esistevano già librerie per interfacciare Arduino
alle fotocamere, e questo ha comportato L’IDE di Arduino
un notevole risparmio di tempo nello sviluppo del codice.
Il software sulla base si occupa di ricevere le
comunicazioni via radio che arrivano dalla
penna e di compiere il calcolo delle coordinate
secondo ciò che il microprocessore legge dalle
fotocamere.
Il software su computer è stato programmato
in linguaggio Java utilizzando l’ambiente di
programmazione Processing, che graficamente
è molto simile all’ambiente Arduino, ma
permette di programmare applicazioni visuali
anziché di programmare su microcontrollore.
Esso consente l’acquisizione in real-time delle
coordinate e la modifica dei disegni registrati, anch’essa possibile in
real-time, con la possibilità di aggiungere o eliminare punti al disegno.
L’IDE di processing
13 19
Pag. di
Software lato base
Il programma è consultabile nell’Allegato 4.
Il programma caricato sulla scheda Arduino montata sulla base ha due
tipi di funzionamento, che sono eseguiti in base allo stato della
variabile “debug”, di tipo booleano.
Se quest’ultima assume il valore “true”, il funzionamento è quello di
debug, ossia il microcontrollore, attraverso il monitor seriale integrato
nell’IDE di Arduino stampa tutti i possibili comandi di debug, come ad
esempio ‘l’ che accende il diodo led oppure ‘r’ che resetta il
microprocessore.
Una volta inviato il comando ‘b’ il microcontrollore spedisce
continuamente via seriale le coordinate rilevate dalle fotocamere
come ad esempio:
BLOB 1: x1,y1,s1, BLOB 2: x2,y2,s2,
“x1”, “y1”, “x2” ed “y2” sono le coordinate rilevate dalle due
fotocamere mentre “s1” e “s2” assumono in realtà lo stesso valore, in
quanto indicano lo stato del pulsante sulla penna che stabilisce se sto
disegnando o meno.
Se invece la variabile debug assume il valore “false”, il programma
parte in automatico a inviare sulla seriale le coordinate ricavate dalle
due fotocamere, già unite in un singolo punto, come ad esempio:
FINAL: x,y,s,i,
“x” e “y” sono le coordinate del punto, mentre “s” indica se si sta
disegnando o meno.
“i” è un indice progressivo che determina quale figura si sta
disegnando.
Questo è usato perché se non si distinguesse tra, ad esempio, una
lettera e l’altra in una parola scritta, un attuatore che vada a
realizzare il disegno traccerebbe un’unica linea mentre, con un indice