Mostrando postagens com marcador motor dc. Mostrar todas as postagens
Mostrando postagens com marcador motor dc. Mostrar todas as postagens

sábado, 26 de dezembro de 2015

Tutorial 5: Controlando um Cooler via comunicação Arduino Wireless, utilizando potenciômetro e os Módulos RF 433Mhz


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.h
const int 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ões

void setup()
{
  //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 digitais
  pinMode(2, OUTPUT);
  pinMode(A0, INPUT);
}

void loop()
{
  val = analogRead(potPin); // Leitura do potênciomentro
  pwm = val / 4;// Recebe o valor de 0-1023 e converte para 0-255
  
  if (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 String
    Serial.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ão
    delay(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.h
int i;
int flag = 0;
int pwm;
char valor[4];
const int inPWM = 3;

void setup()
{
  //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);
}
void loop()
{
  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 recebido
  if (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 Char
  if (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 Vetor
  for (i = 0; i <= 4; i++) {
    valor[i] = 0;
  }
}