domingo, 23 de dezembro de 2012
sábado, 15 de dezembro de 2012
Como
fazer o seu cubo de leds 5x5x5
Já faz algum tempo que
venho planejando construir um cubo de leds e mesmo com diversos projetos na
internet não encontrei nenhum bem detalhado e com componentes fáceis de
encontrar. Tive a ideia de utilizar o shift register 74HCC595 que é exemplo no tutorial do Arduino.cc. http://www.arduino.cc/en/Tutorial/ShiftOut
O chip 74HC595 recebe
do microcontrolador através de comandos ShiftOut um número decimal que é
convertido em binário, este número binário representa os pinos que devem ser
ligados e desligados para acender ou apagar os leds que formam os desenhos no
cubo de leds.
O Cube de Leds é um cubo composto por LEDs
interligados capaz de proporcionar imagens holográficas, em movimento.
A ideia foi
de um estudante norueguês, que queria expressar a arte visual de uma
forma bem diferente, através do conjunto de LEDs interligados, de forma a criar um
cubo.
O
cubo está ligado a um conjunto de registradores que são controlados por um microcontrolador
com instruções que controlam cada um dos LEDs que deve acender e apagar
Apesar de
ainda não ser um holograma perfeito em alta definição consegue apresentar a
ideia que imaginamos. Esta forma envolve uma tecnologia bem avançada e criativa
pela sua engenhosa construção. O
efeito final é a ilusão de imagens 3D em
movimento, dentro dos limites do Cube de Leds.
O projeto foi
montado, experimentalmente, em duas Protoboards
de 850 pontos, utilizei alguns jumpers para as ligações entre os componentes
eletrônicos, 4 registradores 74HC595, um Atmega328 com Bootloader
Arduino Duemilanove, resistores, 125 leds e outros componentes, a lista
completa de todo o material será exibida mais a frente. O Acesso ao computador foi
feito com um conversor USB-TTL.
Diagrama do 74hc595 Registrador de deslocamento Binário (shift register)
Em breve publicarei todo o circuito eletrônico e código fonte que desenvolvi.
terça-feira, 28 de fevereiro de 2012
Comunicação entre dois Arduinos com auxílio do PC, através de Rádio Frequência, utilizando os módulos de RF 433Mhz
Há algum tempo venho pensando em desenvolver um link de comunicação serial entre o PC e o arduino com um display digital. Algo onde fosse possível escrever no PC e transmitir para o LCD. Conversando com meu filho sobre esse assunto tivemos a idéia de desenvolver um módulo transmissor e um receptor sem fio, onde fosse possível escrever uma mensagem na tela do PC e esta mesnagem ser transmitida para o LCD remotamente. Pensamos em algumas possibilidade e após verificar o que tinhamos disponível em nossa bancada resolvemos utilizar os Módulo RF Transmissor+receptor 433mhz, um LCD de fundo azul e letras brancas, uma placa protoshield, baterias para o módulo remoto, fios e conectores.
Começamos pela montagem da base do LCD que deve ser compacta e por este motivo optamos por montar em uma ProtoShield que são placas de circuito impresso normalmente projetadas para acoplar em cima do Arduino.e utilizar as mesmas conexões.
A ligação do LCD ao arduino é muito simples, utilizamos os pinos digitais 2, 3, 4, 5, 6, 7 que estão livres e não são utilizados internamente pela VirtualWire, que falaremos mais adiante.
Na ProtoShield soldamos os pinos refrente as conexões do Arduino para que a placa se encaixe perfeitamente. Também soldamos as barras de conexão que serão usadas para encaixar os pinos de 1 a 16 do LCD e todas as ligações referente aos pinos de contraste, backlight e alimentação do módulo.
Em seguida construímos
os conectores que ligam os componentes de RF a placa do Arduino. São
necessários apenas quatro fios para ligar, que podem ser da seguinte forma: Um
fio vermelho para os 5 ou 3,3 Volts
dependendo do módulo transmissor. Um fio preto para o GND (negativo), um fio
branco para a comunicação de dados e outro para a antena que deve ter 30
centímetros.
No módulo receptor
é comum ter mais do que quatro terminais, mas alguns são interligados
internamente, você deve consultar o Datasheet do fabricante para ter certesa de
como fazer as ligações.
No Arduíno que
será usado como transmissor utilizamos o pino digital 12 para a transmissão de
dados, que é o default no VirtualWire.h. Os fios positivo e GND foram ligados
nos pinos 3V3 e GND.
No módulo
receptor, utilizamos o pino digital 13 para a transmissão de dados, que é o default no VirtualWire.h. Os fios positivo e GND foram ligados nos pinos 5V e GND.
A pós a montagem
da ProtoShield, soldagem da barra de terminais no módulo LCD e os conectores
dos módulos RF, encaixamos todos os módulos e concluímos a parte referente ao hardware
do nosso projeto.
O VirtualWire é uma biblioteca que fornece recursos para enviar mensagens curtas. Pode ser
utilizado com diversos modelos de transmissores e receptores de
rádio de baixo custo. Tem tudo o
que é necessário para transmitir
e receber dados através dos módulos Arduíno. Pode ser
baixado de vários sites conhecidos que falam sobre Arduino.
O código fonte foi
retirado de alguns exemplos e adaptado para exibir mensagens em uma tela de
LCD.
O “VirtualWirw.h” deve ser descompactado para dentro da
pasta “/libraries”
//TRANSMISSOR
#include <VirtualWire.h> // you must download
and install the VirtualWire.h to your hardware/libraries folder
char myCmd[16];
int inputSize=0;
void setup()
{
Serial.begin(9600);
// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for RF Link
module
vw_setup(2000);
// Bits per sec
vw_set_tx_pin(12); // Set the digital IO pin to use
for transmit data. Defaults to 12.
}
void loop()
{
inputSize=0;
if
(Serial.available() > 0) {
delay(300);
inputSize =
Serial.available();
Serial.print("inputSize=");
Serial.println(inputSize);
for (int i =
0; i < inputSize; i++){
myCmd[i] =
Serial.read();
}
// say what
you got:
Serial.print("I received: ");
Serial.println(myCmd);
}
vw_send((uint8_t *)myCmd, strlen(myCmd));
vw_wait_tx(); // Wait for message to finish
delay(200);
}
//RECEPTOR
LCD
#include <VirtualWire.h>
#include <LiquidCrystal.h>
// initialize the library with the numbers of the
interface pins
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int i;
int cont;
int message_ok;
void setup()
{
Serial.begin(9600); // Debugging
only
Serial.println("setup");
// set up
the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a
message to the LCD.
lcd.print("Setup LCD");
//
Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec
vw_rx_start(); // Start the
receiver PLL running
lcd.clear();
lcd.print("VirtualWire
");
}
void loop()
{
// set the
cursor to column 0, line 1 (note: line 1 is the second row, since counting
begins with 0)
lcd.setCursor(0, 1);
uint8_t
buf[VW_MAX_MESSAGE_LEN];
uint8_t
buflen = VW_MAX_MESSAGE_LEN;
//reception
to stabilize
message_ok =
0;
cont = 0;
for (cont =
0; cont < 12 ; cont++)
{
delay(50); // wait for
reception to stabilize
message_ok
= vw_get_message(buf, &buflen); //
check the reception
if
(message_ok > 0){cont = 12;} //force the output
Serial.print(message_ok);
Serial.print(" ");
}
//if
(vw_get_message(buf, &buflen)) // Non-blocking
if
(message_ok > 0)
{
digitalWrite(13, true); // Flash a light to show received good message
// Message
with a good checksum received, dump it.
Serial.print("Got:
");
for (i = 0;
i < buflen; i++)
{
Serial.print(buf[i], HEX);
Serial.print(" ");
lcd.print(buf[i]);
}
Serial.println("");
digitalWrite(13, false);
}else
{
lcd.print("No message.....");}
}
[]'s Marcelo Victorio de A. Costa.
Assinar:
Postagens (Atom)