POV- Propeller Clock- Relógio Analógico

22
UNIVERSIDADE PAULISTA INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS- ICET TRABALHO DE APS - 8º SEMESTRE ENGENHARIA MECATRÔNICA SÃO JOSÉ DOS CAMPOS-SP 2013

description

Trabalho acadêmico APS Semestral do curso Eng Mecatrônica

Transcript of POV- Propeller Clock- Relógio Analógico

UNIVERSIDADE PAULISTA

INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS- ICET

TRABALHO DE APS - 8º SEMESTRE

ENGENHARIA MECATRÔNICA

SÃO JOSÉ DOS CAMPOS-SP

2013

UNIVERSIDADE PAULISTA

INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS-

ICET

RELÓGIO ANALÓGICO POV

PROPELLER CLOCK

(PERSISTENCE OF VISION)

FABIANO FORMAGINI– A554JI0

JENNIFER DINIZ MACIEL-A496157

ANDRESS HEIJI NOMURA-A578CD5

JONATHAN YUJIRO GONDO-A4764J8

EDSON GABRIEL COLMAN MAIA-A4286I0

JONATHAN GUILHERME T DE MORAES-A480080

SÃO JOSÉ DOS CAMPOS-SP

Novembro de 2013

3

ÍNDICE

RESUMO Pg4

ILUSÃO DE ÓPTICA Pg4

EXPLICANDO O FENÔMENO POV Pg5

O PROJETO Pg5

PCI e MOTOR Pg6

ALIMENTAÇÃO Pg6

LEDs Pg7

DRIVER Pg7

MICROCONTROLADOR E SOFTWARE Pg7

ACIONAMENTO DA BARRA DE LEDs Pg8

MOSTRAGEM DOS PONTEIROS Pg9

CÓDIGO FONTE Pg10

DIAGRAMA ESQUEMÁTICO Pg19

LAYOUT DA PLACA Pg20

FOTO DO PROTÓTIPO Pg21

REFERÊNCIAS BIBLIOGRÁFICAS Pg22

4

RESUMO

Este é um dispositivo diferenciado, pois diferentemente dos relógios convencionais,

neste não existem ponteiros reais nem painéis estáticos.

Como o próprio nome deixa subentendido, “The PropellerClock ” é um relógio

constituído de uma hélice acoplada ao eixo de um motor. A interface deste é efetivada

através de uma barra de LEDs que se encontra acoplada a esta hélice.

Utilizando os princípios de varrimento mecânico, a barra de LEDs é previamente

programada para que, em determinados momentos já pré-estabelecidos, pisquem,

provocando aos observadores a ilusão de imagens serem exibidas no ar. Estes são

conhecidos também como Displays Aéreos.

Especificamente o “The PropellerClock”, consiste em um RTC – implementado por

software – que exibe, no ar, a imagem de um pseudo-relógio analógico mecânico.

ILUSÃO DE ÓPTICA

O termo Ilusão de Óptica aplica-se a todos os fenômenos que tem a capacidade de

distorcer a resposta do sistema visual humano, sendo capaz de induzir o ser a ver algo

que não está fisicamente presente ou simplesmente alterar a forma de percepção visual.

Estas podem assumir caráter fisiológico ou até mesmo cognitivo, surgindo

naturalmenteou sendo induzidas.As cores e as formas usuais sobre o que pode ser visto, surge

instantaneamente noscircuitos neurais dos seres humanos e influenciam na representação de

alguma cena. Aspropriedades percebidas dos objetos, tais como o brilho, tamanho angular e

cor sãodeterminadas inconscientemente e não são propriedades físicas reais. A interpretação

doque o ser humano vê no mundo exterior é uma tarefa muito complexa.

Estudos mostram que existem mais de trinta áreas diferentes de cérebro humano

voltadas a reproduzir e processar as imagens do mundo exterior. Algumas áreas

parecem corresponder ao movimento outras à cor, outras à profundidade e mesmo à

direção de um contorno. Existe também uma tendência do cérebro humano a simplificar

as coisas em relação ao que elas realmente são. E é essa simplificação que permite ao

ser humano uma apreensão mais rápida. - ainda que imperfeita - da realidade exterior, o

que dá origem às ilusões de óptica.

5

Foi em 1995 que Bob Blick desenvolver um relógio utilizando o conceito de escrita

por varrimento mecânico, utilizando um array de sete LEDs acopladas a um motor.Batizou

seu projeto de PropellerClock , a partir de então, inúmeros outros projetos foram criados.

EXPLICANDO O FENÔMENO POV

Foram encontradas em cavernas pré-históricas as primeiras sequências de figuras

desenhadas pelo homem de modo a produzirem a sensação de movimento.Essa descoberta

confirma a percepção de que quando folheamos rapidamente desenhos ou fotografias em

sequência elas parecem se mover. Foi só em 1826 que o médico e filólogo inglês Peter Mark

Rogetpublicou um estudo sobre o assunto.

Segundo o cientista, o olho humano retém a imagem que se forma na retina por alguns

décimos de segundo a mais (aproximadamente 1/24 de segundo) mesmo após o clarão que a

provocou haver desaparecido.Essa peculiaridade do sistema óptico humano capaz de reter a

imagem por esse pequeno lapso de tempo é conhecida como persistência da visão ou

persistência retiniana.

Três anos após essa descoberta, o físico belga Joseph-Antoine Plateau foi o primeiro a

medir o tempo da persistência da visão ao concluir quepara uma série de imagens darem a

ilusão de movimento é necessário que se sucedam à razão de dez por segundo.

Baseados nessas descobertas, inúmeros equipamentos foram criados para captar a

imagem do movimento. Os primeiros aparelhos de projeção eram formados por discos com

várias imagens coladas em posições diferentesque ao serem rodados, davam a impressão de

mobilidade. Para filmar um corpo em movimento, são feitas várias fotos (fotogramas) em

intervalos bem curtos e hoje a velocidade de filmagem e projeção é padronizada em 24

fotogramas por segundo.

Como a imagem na retina persiste no intervalo de tempo compreendido entre duas

imagens sucessivas, o fotograma seguinte é projetado no exato instante em que o fotograma

anterior está desaparecendo de nossa "memória visual", o que produz a sensação de

movimento contínuo.

A ciência da visão é muito mais complexa do que tudo que foi acima citado.

6

O PROJETO

Todos os componentes com exceção do microcontrolador são em SMD

( Surface Mounting Devices) em razão da miniaturização constate nos dias de hoje.

PCI e MOTOR

A PCI ( placa de circuito impresso) é de fenolite com um lado cobreado, o layout foi

montado no software Eagle, (EasilyApplicableGraphicalLayout Editor) da Cadsoft , e

impresso em folha A4 ,este foi transferido para a placa de fenolite por compressão e calor e

assim mergulhada na solução de percloreto de ferro para a corrosão do cobre. As partes

pintadas não são corroídas eas partes nú o ácido reage com o cobre corroendo o mesmo.

O alinhamento e o balanceamento foi observado com critério, uma vez que a placa

desbalanceada causa vibração no momento do giro. O motor usado é um Motor DC Mabuchi,

e com giro de 950RPM. A rotação do motor foi setada variando-se a tensão de alimentação do

mesmo e o eixo do motor foi acoplado ao centro de gravidade da placa.

ALIMENTAÇÃO

A alimentação do circuito é feita com 3 bobinas de 33uH, L1,L2 e L3 estas acopladas

posterior a placa. Estaticamente temos um imã , que com a rotação da PCI as bobinas geram

um campo eletromagnético e a DDP gerada é retificada por onda completa pelos diodos

retificadores de chaveamento rápido ( Schottky) fabricados pela Rohm, de PartNumber

RB161M-20, e D1,D2 e D3, se apresentam em encapsulamento SOD-1231

. A tensão é filtrada

por dois capacitores, C3 e C4.

A tensão gerada é insuficiente para acender os LEDs, esta então é elevada e

estabilizada em 5.3Volts pelo CI Step-UP EUP2584 2. A alimentação do PIC® é feita

através de D5 e mesmo com o motor parado, temos alimentação para o PIC® graças a um

capacitor de back-up ,C7, um Gold-Cap3

da Serie SD do fabricante Panasonic, Part-

NumberGC5.5V0.33F .Com este cuidado o PIC continua contando as horas sem que resete o

relógio, neste momento o diodo D5 desempenha outra função, impedir que a tensão retorne e

alimente os LEDs, descarregando C7.

7

LEDs

Os LEDs são montados em linha sendo intercaladas as cores para assim se obter o

ponteiro das horas ,minutos e segundos em cores distintas, um LED foi adicionado para

marcar a posição das horas e um segundo LED faz o circulo em torno do relógio, este

mantem-se aceso constantemente e com o giro do dispositivo, temos o contorno do relógio.

Para uma melhor visualização dos ponteiros, aumentamos o numero de "pixels"

(LEDs) ,usando 21 LEDs na cor Vermelha e 26 LEDs na cor verde. Os LEDs vermelhos,

LED 1 a LED 21 e LED48, são do fabricante Multicomp ,de PartNumber

MCL-S290SRC4

e encapsulamento 06035

com 15mcd de intensidade luminosa cada. Os LEDs

verde e o LED azul,( LED 22 a LED 47e LED 49) são do fabricante KingBright, de

PartNumber KP-2012SGC6, e encapsulamento 0603 com 15mcd de intensidade luminosa

cada.

DRIVER

O controle de alimentação dos LEDs é feito por 4 transistores Mos-Fet Canal-P SMD,

fabricado pela Advance Power Electronics Corporation, de PartNumber AP2301GN7,

suportam uma corrente de até -2.6A cada. Entretanto , a corrente máxima aplicada em cada

transistor neste projeto não passa de algumas centenas de mA.

Os resistores limitadores de corrente são SMD de encapsulamento 0603. R1 a R21 são

de 470 Ohms e R22 a R48 são de 240 Ohms .

MICROCONTROLADOR E SOFTWARE

O Microcontrolador escolhido foi o PIC16F6848 do fabricante Microchip, uma vez

que ele consome em operação normal com cristal de 32.768Khz apenas 11µA . A

programação é em Assembly, que é a língua primitiva dos micro-controladores. Linguagem

Assembly, como opróprio nome sugere é definida como linguagem de montagem. Tem essa

definição pois é uma linguagem de baixo nível, sendo ela a mais próxima da linguagem de

máquina.

A lógica de funcionamento do software pode ser dividida em quatro etapas: a

primeira etapa é o pré-set do relógio; a segunda etapa é responsável pelo controle da

8

base de tempo do relógio; a terceira etapa é a responsável por detectar a posição da barra e a

última etapa, responsável por controlar o acionamento da barra de LEDs – levando em

consideração as duas primeiras etapas.

Primeiramente, é necessário fazer o pré-set do horário para isso utilizam-se duas

portas do micro-controlador que estão conectadas a um sensor infravermelho. Cada vez que

um sensor é ativado, tem um respectivo valor de tensão analógico, zero, este que é

reconhecido e tratado pelo micro-controlador. Cada sensor tem uma função distinta: T1 ajusta

as horas e T2 os minutos.

Como é proposto em seu próprio título, é necessário criar um relógio para o controle

da base de tempo. A idéia inicial para implementação deste relógio foi utilizar o clock gerado

pelo cristal e dividir para se obter uma freqüência de 1Hz. Pensando nas limitações mecânicas

do dispositivo e nas limitações do próprio micro-controlador optou-se em implementar um

RTC (real time clock) por software. Para implementação do RTC foi adaptada uma biblioteca

pronta. Esta biblioteca configura um timer interno do micro-controlador para atender uma

interrupção a cada segundo, fazendo assim com que haja o incremento de segundo. Para

incremento do minuto, testa-se a variável que armazena os segundos. Para incremento da

hora, testa-se a variável dos minutos.

O monitor de posição é efetuado através da resposta do Sensor de efeito Hall, IC2

PartNumberA11049, da Allegro Micro Systems. Este sensor atua sempre que o motor

completa um giro de 360º marcando cada volta. Nos micro-controladores da família PIC®

existe um pino que pode ser configurado para atender uma interrupção externa toda vez que

detectar uma troca de nível de sinal,ou seja, sempre que o sensor atuar.

Para calcular a rotação do motor utiliza-se uma interrupção externa, esta que será

atendida sempre que o sensor atuar detectando uma borda de descida no pino do micro-

controlador. Toda vez que esta interrupção externa for atendida, o programa incrementa uma

variável, que a cada segundo conta quantas vezes foram detectadas estas interrupções ou seja,

guarda o número de voltas que foram dadas pelo motor durante um segundo.

ACIONAMENTO DA BARRA DE LEDs

O controle para o acionamento dos LEDs é dependente das supra-referidas etapas,

pois o acionamento dos mesmos ocorre com base na hora e velocidade atual.

9

Primeiramente é necessário salientar o número de posições que cada ponteiro pode assumir.

O ponteiro responsável pela exibição das horas pode assumir 12 posições, enquanto os

ponteiros responsáveis pela exibição dos minutos e segundos assumem 60 posições cada.

Para saber a posição exata de cada ponteiro, é necessário que exista um ponto de

referência fixo. Para isto, o sensor de efeito Hall foi estrategicamente posicionado, servindo

de referência ao software e fazendo com que, no momento em que o sensor é acionado, o

dispositivo esteja na posição 12 Horas. É este ponto de referencia que possibilita estimar o

tempo necessário para atingir cada passo dos ponteiros. Partindo destas premissas, é possível

controlar devidamente o dispositivo.Feita a leitura do horário atual calcula-se a velocidade de

rotação do motor para corrigir o tempo de passo dos ponteiros. Com base no horário obtido,

sabem-se quantos passos é necessário dar para o ponteiro chegar à respectiva posição. Após

saber o número de passos necessários, configura-se um timer interno do micro-controlador

para aguardar o tempo correto para poder efetivar o acionamento da barra de LEDs no ponto

correspondente. Este procedimento é efetuado para os três ponteiros.

MOSTRAGEM DOS PONTEIROS

HORA

Para a mostrar o ponteiro marcador das horas as portas RC0 e RC4 do PIC® passam

o nível lógico para "1" para "0".

MINUTOS

Para a mostrar o ponteiro marcador dos minutos as portas RC3 e RC4 do PIC®

passam o nível lógico para "1" para "0".

SEGUNDOS

Para a mostrar o ponteiro marcador dos segundos as portas RC0 e RC1 do PIC®

passam o nível lógico para "1" para "0".

10

CÓDIGO FONTE

LIST P=16F684, R=DEC

INCLUDE "p16f684.inc"

__CONFIG _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _CPD_OFF & _CP_OFF &

_MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

CBLOCK 0x20

hours, minutes, seconds, hrpos

w_save, stat_save, pc_save

temp, tick, tickNotch

debounce:2

ENDC

ORG 0 ; iniciaprograma

goto main

ORG 4 ; ISR é chamado a cada segundo

movwf w_save ; salvaWreg

swapf STATUS, w ; salvasem stat reg

movwf stat_save ; troca flags

btfss PIR1, TMR1IF ; TMR1 interrupção

goto start ; -processo de sinc de pulso

movlw 128 ; seta prox. interrupção

movwf TMR1H ; separa 1 segundo

incf seconds, f ; carrega o código ISR

movlw 60

subwf seconds, w

btfss STATUS, Z

11

goto ISR_end

clrf seconds ; seconds = segundos (mod 60)

incf minutes, f

movf hours, w

movwf hrpos ; hrpos = horas

addwf hrpos, f

addwf hrpos, f

addwf hrpos, f

addwf hrpos, f ; hrpos = horas * 5

movf minutes, w

movwf temp

movlw 12 ; hrpos += floor(minutos/12)

incf hrpos, f

subwf temp, f

btfsc STATUS, C

goto $-3

decf hrpos, f

movlw 60

subwf minutes, w

btfss STATUS, Z

goto ISR_end

clrf minutes ; minutes = minutos (mod 60)

incf hours, f

movlw 12

subwf hours, w

12

btfss STATUS, Z

goto ISR_end

clrf hours ; horas = horas (mod 12)

ISR_end

bcf PIR1, TMR1IF ; limpainterrupção

swapf stat_save, w ; carrega original flags in STATUS

movwf STATUS

swapf w_save, f ; restore Wreg

swapf w_save, w

retfie

main ; código principal

clrf PORTA

clrf PORTC

movlw 0x07

movwf CMCON0 ; comparadores OFF

bsf STATUS, RP0 ; chaveiapara BANK 1

clrf ANSEL ^ 0x80 ; todas entradas digitais

clrf TRISA ^ 0x80 ; PORTA saída

bsf TRISA ^ 0x80, 2 ; INT pin para entrada

clrf TRISC ^ 0x80 ; enable PORTC para saída

bsf TRISC ^ 0x80, 5 ; PORTC pin 5 é entrada

bsf PIE1 ^ 0x80, TMR1IE ; enable TMR1 interrupts

bcf OPTION_REG^0x80, 6 ; interromper ao cair nível RA2

bcf STATUS, RP0 ; retorna para BANK 0

movlw b'00001111' ; enable TMR1 com clock externo

13

movwfT1CON

bsf INTCON, PEIE

bsf INTCON, INTE

bcf PIR1, TMR1IF

clrf hours

clrf hrpos

clrf minutes

clrf seconds

start

clrf tick ; posiçãoatual da placa

clrf tickNotch ; led azul, posição

incf tickNotch, f

bcf INTCON, INTF ; clear INT flag

bsf INTCON, GIE ; (re)-enable todas interrupções

loop ; loop

movlw b'011011' ; apaga display

movwf PORTC

decfsz tickNotch, f ; set the Z flag

goto $+4

bsf PORTC, 2 ; liga led azul

movlw 5

movwf tickNotch ; tickNotch = 5

movf seconds, w

subwf tick, w

btfss STATUS, Z

14

goto check_min

bcf PORTC, 0 ; exibir ponteiro segundos

bcf PORTC, 1

check_min

movf minutes, w

subwf tick, w

btfss STATUS, Z

goto check_hours

bcf PORTC, 3 ; exibir ponteiro minutos

bcf PORTC, 4

check_hours

movf hrpos, w

subwf tick, w

btfss STATUS, Z

goto $+3

bcf PORTC, 1 ; exibir ponteiro horas

bcf PORTC, 4

call delayOn

movlw b'010111' ; apaga display

movwf PORTC

call delayOff ; gap delay

incf tick, f ; atualiza mostrador de horas

movlw 60

subwf tick, w

btfss STATUS, Z

15

goto loop

setTime

call wait4Release ; aguarda 32 msec para soltar botão

call wait4Press ; aguarda 32 msec para pressionar botão

goto setTime

wait4Release

clrf debounce ; aguarda soltar botões

clrf debounce+1

btfss PORTA, 3 ; botão de minutos solto?

goto wait4Release ; NAO-aguarda soltar

btfss PORTC, 5 ; botão horas liberado?

goto wait4Release ; NAO - aguardar liberar

incf debounce, f

btfsc STATUS, Z

incf debounce+1, f

btfss debounce+1, 4 ; 4096*8 = 32msec

goto $-6

return

wait4Press

clrf debounce ; aguardar botão ser pressionado

clrf debounce+1

btfsc PORTC, 5 ; botão horas pressionado?

goto checkMinButt ; NO - check outro botão

incf debounce, f

btfsc STATUS, Z

16

incf debounce+1, f

btfss debounce+1, 4 ; 4096*8 = 32msec

goto $-6

call incHours ; atualiza horas

call blink ; pisca led azul

return

checkMinButt

btfsc PORTA, 3 ; botão de minutos pressionado?

goto wait4Press ; Não - aguarde pressionar

incf debounce, f

btfsc STATUS, Z

incf debounce+1, f

btfss debounce+1, 4 ; 4096*8 = 32msec

goto $-6

call incMinutes ; atualiza minutos

call blink ;pisca led azul

return

incHours ; incrementa horas mod 12

bcf INTCON, GIE ; desabillita interrupções

incf hours, f

movlw 12

subwf hours, w

btfsc STATUS, C ; hora é >= 12 ?

clrf hours ; SIM - limpa

movf hours, w ; computa nova posição de hrpos

17

movwf hrpos ; hrpos = hours

addwf hrpos, f

addwf hrpos, f

addwf hrpos, f

addwf hrpos, f ; hrpos = hours * 5

movf minutes, w

movwf temp

movlw 12 ; hrpos += floor(minutes/12)

incf hrpos, f

subwf temp, f

btfsc STATUS, C

goto $-3

decf hrpos, f

bsf INTCON, GIE

return

inc Minutes ; incrementa minutos mod 60

bcf INTCON, GIE

incf minutes, f

movlw 60

subwf minutes, w

btfsc STATUS, C ; minutos é >= 60 ?

clrf minutes ; YES - limpa

bsf INTCON, GIE

return

blink ; pisca led azul base te tempo de 100ms

18

bsf PORTC,2 ; led azul, on

movlw 100

movwf temp

movlw 250

addlw -1

btfss STATUS, Z

goto $-2

decfsz temp, f

goto $-5

bcf PORTC, 2 ; desliga led azul

return

delayOn ; formar intervalo de tempo para mostrar posição horas

movlw 10 ; e ponteiros

addlw -1

btfss STATUS, Z

goto $-2

return

delayOff ; formar intervalos entre minutos

movlw 90 ; mostrador

addlw -1

btfss STATUS, Z ; a soma dos dois últimos retardos não deverá

exceder 110 msec para prevenir efeitoflicker

goto $-2

return

END

19

DIAGRAMA ESQUEMÁTICO

20

LAYOUT DA PLACA

21

FOTO DO PROTÓTIPO

22

REFERENCIAS BIBLIOGRÁFICAS

1-http://www.icbank.com/icbank_data/semi_package/sod123_dim.pdf

2-http://www.bdtic.com/DataSheet/EUTECH/EUP2584.pdf

3 -http://www.panasonic.com/industrial/components/pdf/goldcap_tech-guide_052505.pdf

4-http://www.farnell.com/datasheets/1671538.pdf

5-http://www.panasonic.com/industrial/components/pdf/AOA0000CE1.pdf

6-http://datasheet.octopart.com/KP-2012SGC-Kingbright-datasheet-7584627.pdf

7- http://www.tme.eu/at/Document/b0c1ffacb22e23996c5177b97bc3c132/AP2301GN-3.pdf

8- http://ww1.microchip.com/downloads/en/devicedoc/41202f-print.pdf

9-http://www.farnell.com/datasheets/926082.pdf