– FiBre Clock

Boas…

Entao vou disponibilizar aqui tudo o que utilizei para que o pessoal possa desenvolver um “brinquedo” parecido…

Apresentação do Projecto

O projecto baseia-se no conceito POV (Persistence of Vision).
Já tinha em mente fazer um projecto destes á algum tempo mas nao sabia como, foi entao que passei pelo blog do amigo Ricardo Dias e vi o magnifico projecto dele o Round’Aclock, a partir dai comecei a desenvolver o meu proprio POV.

Vou colocar aqui algumas das etapas que segui para que o pessoal as possa seguir tambem:

1ª Etapa

Primeiramente tinha feito a base com uma caixa de cd’s, depois de alguns testes conclui que a coisa podia correr mal e levar com uma breadboard pela cabeça, foi entao que decido fazer uma base bem robusta para aguentar a rotação da plataforma.

Material Para Construção da Base e plataforma Giratorio:

– Madeira 1cm
– Parafusos Para Madeira
– Aparafusadora
– Berbequim
– Brocas de 5, 6 e 7 mm
– Acrilico
– Motor 8.4V
– Bateria 8.4V (Fonte de alimentação, etc…)
– Botao ON/OFF

Esquema com o motor:

Motor

Depois da base feita convem testa-la, ver se a plataforma gira como deve de ser, ver se está o mais centrada possivel para que a base fique estavel.

2ª Etapa

Desenvolver toda a parte Electronica.

Comecei inicialmenete por utilizar o sistema PICAXE, mas mais tarde vi que não era limitado para o que queria fazer, entao adquiri o meu Arduino Duemilenove (Grande compra).

Aqui fica o Esquema que utilizei com o arduino:

Em baixo o esquema que utilizei para o receptor e para o emissor de Infra Vermelhos. (Nota: Baseado no esquema do topico do amigo metRo_)

Receptor:

Emissor:

3ª Etapa

Esta etapa foi a de programação do arduino, antes de mais quero agradecer á fantastica ajuda que os membros desta comunidade me deram no meu (ainda) inicio em C.

O codigo que desenvolvi foi o seguinte:

/* FIRST PROGRAM IN ARDUINO 0017
BY: AndréD.
Project POV FiBre Clock */

int timer=300; // Tempo entre cada letra em MicroSegundos
int timer1=500; // Tempo entre cada letra em MicroSegundos
int x=0;
int var_sensorIR = 0; |
int sensorIR = 0; |-> Variaveis Correspondentes ao Sensor de Infravermelhos

void setup() {
Serial.begin(9600);
pinMode (8, OUTPUT); |
pinMode (9, OUTPUT); |
pinMode (10, OUTPUT); |—- > Configuração das portas para os leds
pinMode (11, OUTPUT); |
pinMode (12, OUTPUT); |

}

void loop()
{

var_sensorIR = analogRead(sensorIR); \\ Leitura do valor do Sensor e escrita desse mesmo valor na variavel “val_sensorIR”

if(var_sensorIR < 400){ \\ Condição SE o valor do sensor for menos que 400 entao começa a sequencia dos Leds.

/* LETRA L */
PORTB = B00000000; \\ Escrita em varios Pinos o que permite acender os leds pretendidos.
delayMicroseconds(timer); \\ Tempo de espera em Microsegundos
PORTB = B00011111;
delayMicroseconds(timer);
PORTB = B00010000;
delayMicroseconds(timer);
PORTB = B00010000;
delayMicroseconds(timer);
PORTB = B00010000;
delayMicroseconds(timer1);
PORTB = B00000000;
delayMicroseconds(timer);

/* LETRA U */
PORTB = B00001111;
delayMicroseconds(timer);
PORTB = B00010000;
delayMicroseconds(timer);
PORTB = B00010000;
delayMicroseconds(timer);
PORTB = B00010000;
delayMicroseconds(timer);
PORTB = B00001111;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer1);

/* LETRA S */
PORTB = B00010010;
delayMicroseconds(timer);
PORTB = B00010101;
delayMicroseconds(timer);
PORTB = B00010101;
delayMicroseconds(timer);
PORTB = B00010101;
delayMicroseconds(timer);
PORTB = B00001001;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer1);

/* LETRA O */
PORTB = B00001110;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00001110;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer1);

/* ESPAÇO */

PORTB = B00000000;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer);

/* LETRA R */
PORTB = B00011111;
delayMicroseconds(timer);
PORTB = B00000101;
delayMicroseconds(timer);
PORTB = B00000101;
delayMicroseconds(timer);
PORTB = B00001101;
delayMicroseconds(timer);
PORTB = B00010010;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer1);

/* LETRA O */
PORTB = B00001110;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00001110;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer1);

/* LETRA B */
PORTB = B00011111;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00010101;
delayMicroseconds(timer);
PORTB = B00010101;
delayMicroseconds(timer);
PORTB = B00001010;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer1);

/* LETRA O */
PORTB = B00001110;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00001110;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer1);

/* LETRA T */
PORTB = B00000001;
delayMicroseconds(timer);
PORTB = B00000001;
delayMicroseconds(timer);
PORTB = B00011111;
delayMicroseconds(timer);
PORTB = B00000001;
delayMicroseconds(timer);
PORTB = B00000001;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer1);

/* LETRA I */
PORTB = B00000000;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00011111;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer1);

/* LETRA C */
PORTB = B00011111;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00010001;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer1);

/* LETRA A */
PORTB = B00011110;
delayMicroseconds(timer);
PORTB = B00000101;
delayMicroseconds(timer);
PORTB = B00000101;
delayMicroseconds(timer);
PORTB = B00000101;
delayMicroseconds(timer);
PORTB = B00011110;
delayMicroseconds(timer);
PORTB = B00000000;
delayMicroseconds(timer1);

}
}

4ª Etapa

Por fim efectuei os testes. Ligar tudo, Colocar a andar e visualizar o resultado.

Video – FiBre Clock

Resta pedir desculpa pela qualidade (telemovel, mas da para ver e perceber…), outra coisa e a os fps do telemovel que como devem perceber nao conseguem apanhar as letras fixas, mas a “olho nu” esta impecavel….

Agradecimentos:

– Forum LusoRobotica
– Blog Ricardo Dias

Agradecimentos Pessoais: (Por toda a ajuda dada na elaboração deste projecto):

– TigPT
– FIFAS
– metRo_
– PDI
– mauromartins
– msaleiro
– Rui

Cumps
AndréD.

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s