Cubo do Mario Bros acionado remotamente pelo SNES
Porém ficar ligando ele na chave ficou sem graça e decidi evoluir a criatividade acionando ele remotamente ao ligar o SNES.
A base do projeto ficou com uso de um TX/RX RF de baixíssimo custo conhecido como FS1000A, facilmente encontrado no ML ou Aliexpress.
Mas para o conjunto FS1000A funcionar ainda era preciso um micro controlador, eu optei por usar um ATtiny 85 em cada ponta, programando o ATtiny 85 pela IDE Arduino com biblioteca damellis e para a codificação do FS100A usei a biblioteca VirtualWire.
O ATiny 85 deixei a frequência como vem de fábrica em 8Mhz, importante selecionar na IDE Arduino esse frequência para o correto funcionamento.
Para o lado TX com o SNES, foi usado a entrada de 9V do SNES alimentando um 7805 para alimentar o circuito, ou seja, dessa forma com a fonte plugada e mesmo com o SNES ainda desligado o circuito já fica trabalhando. Isso foi necessário para manter o link de RF ativo, caso contrário o RX poderia por interferência ligar ou desligar sozinho. Importante um capacitor de pelo menos 470uF na saída deste 7805 alimentado com os 9V. Com o circuito alimentado a porta PB2 (pino 7) recebe 5V através de um resistor de 1k de pull-up e dessa forma fica enviando "1" para o RX, ao ligar o SNES o mosfet tipo N (que pode ser qualquer um) recebe no gate 5V do 7805, agora o da placa do SNES, e a porta PB2 vai a 0 através desse mosfet tipo N, passando assim a enviar "0" para o RX que irá acionar sua porta para acender a fita led.
// TX
#include <VirtualWire.h>
char *controller;
int buttonPin = 2; // Será usado para acionar a porta no RX
int buttonState = 0;
void setup() {
pinMode(0,OUTPUT); // Apenas para visualização com led por ex. não necessário
vw_set_ptt_inverted(true);
vw_set_tx_pin(1); // Porta para comunicação com o FS100A
vw_setup(4000); // Velocidade de transferência dos dados em Kbps
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH){ // Verifica o estado da porta
controller="1" ;
vw_send((uint8_t *)controller, strlen(controller)); // Envia "1" para o RX
vw_wait_tx(); // Aguarda o envio
digitalWrite(0,1);
}else
{
controller="0" ;
vw_send((uint8_t *)controller, strlen(controller)); // Envia "0" para o RX
vw_wait_tx();
digitalWrite(0,0);
}
}
No lado do RX tanto o ATtiny 85 quando o RX de RF são alimentados diretamente com a bateria 18650, já que ambos funcionam bem com tensões entre 3.3V e 5V. O ATtiny 85 recebe "1" sempre que o TX estiver energizado e deixa a saída da porta PB0 (pino 5) sempre em 0. Por segurança foi adicionado um resistor de pull-down nessa porta PB0 que está ligada ao gate do mosfet, evitando de todas as maneiras que este mosfet seja acionado enquanto a PB0 não estiver em 1. Ao ligar o SNES o TX envia "0" e a porta PB0 do ATtiny 85 de RX vai para 5V, acionando assim o gate do mosfet, que fecha o circuito da fita led acendendo ela. Neste caso o mosfet precisa atender as especificações da corrente e tensão da fita led, eu usei um parrudo e desnecessário IRFZ44N 55V/49A por ser o único que eu tinha .
// RX
#include <VirtualWire.h>
unsigned long ultimaMensagem = 0;
const unsigned long TIMEOUT = 500; // ms
void setup() {
vw_set_ptt_inverted(true);
vw_set_rx_pin(1); // Porta para comunicação com o FS100A
vw_setup(4000); // Velocidade de transferência dos dados em Kbps
vw_rx_start(); // Inicializa o RX
pinMode(0, OUTPUT);
}
void loop() {
// Buferizando os dados
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // Se existir dados executa
{
if (buf[0] == '1') { // Se chegar 1 coloca a porta em 0, senão em 1
digitalWrite(0, 0);
}
if (buf[0] == '0') {
digitalWrite(0, 1);
}
}
}
O consumo do lado do RX é em torno de 30mA com a fita led desligada, pensando em uma bateria com capacidade pra 3000mA isso daria algo em torno de 4000 dias até a completa descarga, mas mesmo assim ainda deixei uma chave liga/desliga geral.
Sobre os módulos TX e RX, eles são extremamente simples possuindo os pinos de alimentação e o pino de dados. A antena para 433Mhz seria um fio de 16cm que pode ser enrolada em um diâmetro de 5mm.
Sobre o buck boost e o carregador da bateria, são tipo esses da foto, mas existem diversos que fazem a mesma função:









Comentários
Postar um comentário