Fala Makers, esse é um tutorial bastante pedido e foi feito de uma forma bem simples e objetiva. Vamos controlar um Cooler ( você pode retirar de uma fonte de computador comum), você também pode controlar a velocidade de qualquer motor DC devendo variar o transistor chaveador de acordo com a potência do motor. Nesse projeto foi utilizado o Kit RF Eletrônica Protoboard e um potenciômetro ,esse Kit foi projetado especialmente para Arduino, mas nada impede de ser utilizado com qualquer outro microcontrolador.
Figura 1- Kit RF Eletrônica Protoboard Analógico Arduino
Seu funcionamento é bem simples você gira o potenciômetro para aumentar e diminuir a rotação e o melhor é que tudo isso sera feito a distância. Você pode utilizar esse código para acionar carrinhos de controle remoto, a velocidade varia de 0-255 e você ainda terá outras saídas digitais para controlar LED's e outros dispositivos.
A imagem abaixo representa o montagem do transmissor, veja como é extremamente simples, se você não sabe como funciona a protoboard ou é seu primeiro projeto acesse nossos outros tutoriais aqui.
Figura 2 - Montagem do Transmissor
Notem que não adicionamos outras funções, porém de acordo com o que você aprendeu nos outros tutoriais você pode implementa-los nesse projeto tornando seu produto final mais completo. Abaixo temos a montagem do receptor, repare que utilizamos o transistor BC327. Esse transistor pode dissipar uma corrente de até 800 mA, como nosso cooler consome apenas 150 mA será mais que suficiente. Se por acaso você quiser utilizar um motor mais parrudo você precisará de um transistor mais potente e terá que isolar seu Arduino.
Figura 3 - Montagem do Receptor
Sketch do Transmissor
/* MSmaker RF Example developed by MSmaker date: december 22, 2015 universomakers@gmail.com */
#include <stdlib.h>
#include<string.h>
#include <VirtualWire.h> //Inclui a biblioteca VirtualWire.hconstint potPin = A0;
long val = 0;
int i;
int pwm;
int compara;
char pwmEnvia[10];
char *dado ; //Cria a variável que ira armazenar a informação pré definida enviadas pelos botõesvoidsetup()
{
//Configura o Arduino para trabalhar como transmissor
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_tx_pin(2);//Configura o pino 2 como tx//===================================================Serial.begin(9600);
//Configura o estado das portas digitaispinMode(2, OUTPUT);
pinMode(A0, INPUT);
}
voidloop()
{
val = analogRead(potPin); // Leitura do potênciomentro
pwm = val / 4;// Recebe o valor de 0-1023 e converte para 0-255if (pwm > (compara + 2) || pwm < (compara - 2)) {// Solução para não enviar informação enquanto o potenciômetro não for utlilizado
itoa(pwm, pwmEnvia, 10);// Coverte inteiro em StringSerial.println(pwmEnvia); // Essa linha pode ser removida, serve apenas para verificar seu funcionamento
dado = pwmEnvia; //Armazena o dado pré determinado
vw_send((uint8_t *)dado, strlen(dado)); //Envia a variável dado
vw_wait_tx(); //Aguarda o fim de transmissãodelay(200); //Aguarda um tempo para a próxima leitura
compara = pwm;// Compara se o mesmo valor ja foi enviado
}
}
Sketch do Receptor
/* MSmaker RF Example developed by MSmaker date: July 7, 2015 universomakers@gmail.com */
#include <VirtualWire.h> //Inclui a biblioteca VirtualWire.hint i;
int flag = 0;
int pwm;
char valor[4];
constint inPWM = 3;
voidsetup()
{
//Configura o Arduino para trabalhar como receptor
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_rx_pin(2);//Configura o pino 2 como rx
vw_rx_start();
//=================================================pinMode(2, INPUT);
pinMode(3, OUTPUT);
Serial.begin(9600);
}
voidloop()
{
char cod;//Cria uma variavel para armazenar o dado recebido.
uint8_t buf[VW_MAX_MESSAGE_LEN]; //Recebe os dados e armazena na variável buf
uint8_t buflen = VW_MAX_MESSAGE_LEN; //Armazena na variável buflen o tamanho do dado recebidoif (vw_get_message(buf, &buflen)) //Pega a mensagem que foi recebida
{
flag = 1;// Flag de recebimento
}
// Copia os dados recebidos para um array do tipo Charif (flag == 1) {
for (i = 0; i < buflen; i++) {
valor[i] = buf[i];
}
pwm = atoi(valor);
analogWrite(inPWM, pwm);
Serial.println(pwm);
}
flag = 0;// Zera a flag de recebimento//Limpa as posições do Vetorfor (i = 0; i <= 4; i++) {
valor[i] = 0;
}
}