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;
  }
}


quinta-feira, 10 de dezembro de 2015

Tutorial 4: Controlando LED RGB através do Arduino via botões


Fala Makers, ficamos um tempo sem postar tutoriais e esse tempo foi por uma boa causa, estamos preparando muitos outros tutoriais e Kit's para facilitar seu aprendizado. Esse é um tutorial bem simples para servir de decoração para tudo o que você quiser dar um brilho, lembrando que o natal está ai e você poderá criar sua própria luz de natal. Mande sugestões dos tutoriais que você quer ver por aqui, e não se esqueça de curtir nosso canal no Youtube (em breve colocaremos esse vídeo no ar) e curta nossa página no Facebook. Agora vamos ao que interessa:

O LED RGB pode lhe proporcionar mais de 16 milhões de cores, lembrando que temos 3 cores básicas vermelho (red), verde (green) e o azul (blue), podemos fazer misturas dessas cores que resultarão em mais outras 4 cores que também podemos considerar básicas, as cores são essas abaixo:

Figura 1- RGB
Mas como consigo formar mais de 16 milhões de cores?

Figura 2 - Imagem com todas as cores possíveis do sistema RGB

A explicação é simples, cada cor tem um variação de 1byte, ou seja cada um desses três componentes tem um valor de intensidade de 1 a 256 (256 x 256 x 256 = 16777216). Nesse tutorial você irá fazer isso manualmente através de botões, agora vamos a montagem mais abaixo.


Figura 3 - Montagem do projeto
Se você tem dúvidas de como usar um protoboard ou não sabe o que é protoboard acesse esse link: Tutorial 3: Comunicação Wireless utilizando Arduino e os Módulos RF 433Mhz. O seu funcionamento é bem simples, você utiliza os dois primeiros botões para controle do LED vermelho onde o da esquerda (com sinal de -) você diminui seu brilho até atingir 0 e o da direita  (com sinal de +) você aumenta o brilho até atingir 255, com os outros botões a função será a mesma. Cada LED precisa de uma alimentação específica para seu funcionamento , se isso não for respeitado você pode ter o brilho do seu LED reduzido ou até a queima do mesmo. O LED vermelho funciona com 2,5volts, verde com 3volts e azul com 3volts , ou seja precisamos de um resistor diferenciado para o vermelho para que não haja sua queima.
Vamos usar um resistor de 150 Ohm para o vermelho e 100 Ohm para o verde e azul conforme a figura abaixo:

Figura 4 - Posição e resistores usados
Para facilitar seu uso deixando menos poluído e suscetível a mal contato, fizemos a montagem 
do LED junto aos resistores, isso irá ajudar muito em seu projeto final. Ele já vem com as cores facilitando seu uso visualmente e evitando a queima, lembrando que ele foi desenvolvido para ser utilizado com arduino, ou seja 5volts. Você pode adquirir esse produto nesse link:

Figura 5 - LED RGB Customizado para Arduino


 Logo abaixo temos o projeto montado, ele é bem simples e qualquer pessoa pode fazer sem nenhum conhecimento prévio de eletrônica, em breve estaremos postando o vídeo tutorial.

Figura 6 - Montagem completa

Sketch 

/*Densenvolvido por Marco Silva MSmaker 08/12/2015
Para dúvidas nos mande email
Email: universomakers@gmail.com
*/

const int R = 9; 
const int G = 10; 
const int B = 11; 
const int RDOW=2;
const int RUP=3;
const int GDOW=4;
const int GUP=5;
const int BDOW=6;
const int BUP=7;

int pwmr=0;
int pwmg=0;
int pwmb=0;
 
void setup()
{
    pinMode(2,INPUT);
    pinMode(3,INPUT);
    pinMode(4,INPUT);
    pinMode(5,INPUT);
    pinMode(6,INPUT);
    pinMode(7,INPUT);
    pinMode(9,OUTPUT); 
    pinMode(10,OUTPUT); 
    pinMode(11,OUTPUT); 
 }
 
void loop()
{
//LED R (Vermelho)
//**********************************************
   if(digitalRead(RDOW)==0)
   {
     delay(10); 
     if(pwmr>=0)   
        {
          if(pwmr!=0)  
          {
          pwmr--;
          }
             analogWrite(R,pwmr);       
        }
   }
        if(digitalRead(RUP)==0)
       {
         delay(10);
         if(pwmr<=255) 
         analogWrite(R, pwmr++);   
       }
       
 //LED G (Verde)  
//********************************************** 
        if(digitalRead(GDOW)==0)
   {
      delay(10); 
     if(pwmg>=0)   
        {
          if(pwmg!=0)  
          {
          pwmg--;
          }
           analogWrite(G, pwmg);    
        }  
   
   }
        if(digitalRead(GUP)==0)
       {
         delay(10);
         if(pwmg<=255)  
         analogWrite(G, pwmg++);   
       }
       
 //LED B (Azul)  
//********************************************** 
        if(digitalRead(BDOW)==0)
 {
      delay(10); 
     if(pwmb>=0)   
        {
          if(pwmb!=0)  
          {
          pwmb--;
          }
           analogWrite(B, pwmb);    
        }  
   
   }
        if(digitalRead(BUP)==0)
       {
         delay(10);
         if(pwmb<=255)  
         analogWrite(B, pwmb++);   
       }
  //**********************************************
}


Abra sua IDE Arduino e copie e cole o código acima, qualquer dúvida e sugestões nos mande um email e curta nossas páginas.