sábado, 10 de agosto de 2013

Acender Lâmpada com Arduino e Controle Infavermelho


     Esta página irá ensinar a como motar um circuito capaz de acender uma lâmpada com um controle emissor de infravermelho (controle de televisão, dvd, recptor de parabólica, controle de rádio de carro, etc) utilizando o microcontrolador arduino.. Para isso será necessário o seguinte material:
-Arduino (no caso utilizei o UNO)
-2 Resistores 330 Ω
-1 Módulo Relé 5V para arduino
-1 Receptor infravermelho
-1 Bateria 9V (para alimentar o arduino)
-1 Cabo para alimentar o arduino atravéz da bateria
-1 Bocal lâmpada
-1 Lâmpada 127 V
-Fios

    O esquemático da ligação segue abaixo:
      O vídeo mostrando o resultado do projeto está mostrado abaixo:



      O código para a programação do arduino segue abaixo:

#include <IRremote.h>
#include <IRremoteInt.h>

int RECV_PIN = 8;
IRrecv irrecv(RECV_PIN);
decode_results results;

#define BT_LIGA 0xFFA25D  //Botao Liga

#define Controle_Rele 7   //Controla Relé

int Controle_Rele_State = LOW;  //Relé começa fechado

long bt = 0; //Ultimo botao precionado
unsigned long startMilis = 0; //Contado para blink sem delay

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();

  pinMode(Controle_Rele, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    irrecv.resume();

    Serial.println(results.value, HEX); //Aqui voce descobre qual o botao do seu controle

    //Apenas para filtrar os botoes apertados, no meu caso para filtrar outros controles =)
    if(results.value == BT_LIGA)
    {
      startMilis = millis(); //Apertou um botao, reseta o contador
      bt = results.value; //Salva ultimo botao apertado
      mod(1);
    }
  }


}

void mod(int x)
{
  unsigned long currentMillis = millis();

  if(x == 1)
  {
   Controle_Rele_State=!Controle_Rele_State;
   
   digitalWrite(Controle_Rele, Controle_Rele_State);
  }
  
}

terça-feira, 30 de julho de 2013

Carrinho Controle IR Arduino


      Esta página irá ensinar como fazer um carrinho controlado por controle remoto emissor de infravermelho (controle de televisão, dvd, recptor de parabólica, controle de rádio de carro, etc). Para isso será necessário o seguinte material:
-Arduino (no caso utilizei o UNO)
-7 Resistores 330 Ω
-2 Capacitores 100 nF
-1 Ponte H dupla: CI L298N
-2 Motores com caixa de redução
-1 Receptor de infravermelho de 3 terminais
-1 Protoboard
-4 Leds alto brilho
-4 Leds amarelos
-2 Leds vermelhos
-1 Receptor infravermelho
-1 Bateria 9V (para alimentar o arduino)
-1 Suporte para 6 pilhas AA
-6 Pilhas AA
-Fios

    O esquemático da ligação segue abaixo:


  O fundo do carrinho foi feito seguindo o seguinte modelo:
     O vídeo mostrando o resultado do projeto está mostrado abaixo:


     O código para a programação do arduino segue abaixo:

#include <IRremote.h>
#include <IRremoteInt.h>

int RECV_PIN = 8;
IRrecv irrecv(RECV_PIN);
decode_results results;

#define BT_1 0xFF18E7   //Botao 1 - Cima
#define BT_2 0xFF4AB5   //Botao 2 - Baixo
#define BT_3 0xFF5AA5   //Botao 3 - Direita
#define BT_4 0xFF10EF   //Botao 4 - Esquerda
#define BT_5 0xFF38C7   //Botao 5 - Para
#define BT_6 0xFFA25D   //Botao 6 - Acende Farol


#define MOTOR1_Enable 5  //Enable Motor 1
#define MOTOR1_1 2       //Pino 1 Motor 1
#define MOTOR1_2 3       //Pino 2 Motor 1
#define MOTOR2_1 4       //Pino 1 Motor 2
#define MOTOR2_2 7       //Pino 2 Motor 2
#define MOTOR2_Enable 6  //Enable Motor 2

#define LUZ_VERMELHA 9       //Saída Luz Vermelha
#define LUZ_SETA_DIREITA 10  //Saída Luz Seta Direita
#define LUZ_SETA_ESQUERDA 11 //Saída Luz Seta Esquerda
#define LUZ_BRANCA_RE 12     //Saída Luz Re
#define LUZ_BRANCA_FRENTE 13 //Saída Luz Branca Farol


int MOTOR1_1State = LOW;   //Estado atual do MOTOR1_1
int MOTOR1_2State = LOW;   //Estado atual do MOTOR1_2
int MOTOR2_1State = LOW;   //Estado atual do MOTOR2_1
int MOTOR2_2State = LOW;   //Estado atual do MOTOR2_2
int FAROL_State = LOW;     //Estado atual do FAROL


long bt = 0; //Ultimo botao precionado
long penultimo = 0; //Penultimo botao precionado
unsigned long startMilis = 0; //Contado para blink sem delay

int value = LOW;                // último valor do LED da SETA
long previousMillis = 0;        // último momento que o LED foi atualizado
long interval = 400;           // tempo de transição entre estados do pisca da seta (milisegundos)

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();

  pinMode(MOTOR1_1, OUTPUT);
  pinMode(MOTOR1_2, OUTPUT);
  pinMode(MOTOR1_Enable, OUTPUT);
  pinMode(MOTOR2_1, OUTPUT);
  pinMode(MOTOR2_2, OUTPUT);
  pinMode(MOTOR2_Enable, OUTPUT);
  pinMode(LUZ_VERMELHA, OUTPUT);
  pinMode(LUZ_SETA_DIREITA, OUTPUT);
  pinMode(LUZ_SETA_ESQUERDA, OUTPUT);
  pinMode(LUZ_BRANCA_RE, OUTPUT);
  pinMode(LUZ_BRANCA_FRENTE, OUTPUT);

  //Motor Ativo no Inicio
  digitalWrite(MOTOR1_Enable,HIGH);
  digitalWrite(MOTOR2_Enable,HIGH);
}

void loop() {
  if (irrecv.decode(&results)) {
    irrecv.resume();

    Serial.println(results.value, HEX); //Aqui voce descobre qual o botao do seu controle
    //Apenas para filtrar os botoes apertados, no meu caso para filtrar outros controles =)
    if(results.value == BT_1 || results.value == BT_2 || results.value == BT_3 || results.value == BT_4 || results.value == BT_5 || results.value==BT_6)
    {
      startMilis = millis(); //Apertou um botao, reseta o contador
      bt = results.value; //Salva ultimo botao apertado
     
      if(bt==BT_1)
        mod(1);
      else if(bt==BT_2)
        mod(2);
      else if(bt==BT_3)
      {
        if(penultimo==BT_1)
          mod(3);
        else if(penultimo==BT_2)
          mod(4);
        else
          mod(5);
      }
      else if(bt==BT_4)
      {
        if(penultimo==BT_1)
          mod(6);
        else if(penultimo==BT_2)
          mod(7);
        else
          mod(8);
      }
      else if(bt==BT_5)
        mod(9);
      else
        mod(10);
    }
  }
  if(bt==BT_3)
  {
    if (millis() - previousMillis > interval)
    {
      previousMillis = millis();   // lembre-se do último tempo que piscamos o LED
      value=!value;
      digitalWrite(LUZ_SETA_DIREITA, value);
    }
  }
  else if(bt==BT_4)
  {
    if (millis() - previousMillis > interval)
    {
      previousMillis = millis();   // lembre-se do último tempo que piscamos o LED
      value=!value;
      digitalWrite(LUZ_SETA_ESQUERDA, value);
    }
  }
}

void mod(int x)
{
  unsigned long currentMillis = millis();

  if(x == 1)
  {
    //Mod 1, Anda para Frente
    digitalWrite(MOTOR1_Enable,HIGH);
    digitalWrite(MOTOR2_Enable,HIGH);
    digitalWrite(LUZ_SETA_DIREITA,LOW);
    digitalWrite(LUZ_SETA_ESQUERDA,LOW);
    digitalWrite(LUZ_BRANCA_RE,LOW);
    penultimo=BT_1;
    MOTOR1_1State = LOW;
    MOTOR1_2State = HIGH;
    MOTOR2_1State = LOW;
    MOTOR2_2State = HIGH;
  }
 
  if(x == 2)
  {
    //Mod 2, Anda para Traz
    digitalWrite(MOTOR1_Enable,HIGH);
    digitalWrite(MOTOR2_Enable,HIGH);
    digitalWrite(LUZ_SETA_DIREITA,LOW);
    digitalWrite(LUZ_SETA_ESQUERDA,LOW);
    digitalWrite(LUZ_BRANCA_RE,HIGH);
    penultimo=BT_2;
    MOTOR1_1State = HIGH;
    MOTOR1_2State = LOW;
    MOTOR2_1State = HIGH;
    MOTOR2_2State = LOW;
  }
 
  if(x == 3)
  {
    //Mod 3, Anda para Frente e Direita
    analogWrite(MOTOR1_Enable, 90); //Corresponde a 35% do ciclo
    digitalWrite(MOTOR2_Enable,HIGH);
    digitalWrite(LUZ_SETA_ESQUERDA,LOW);
    MOTOR1_1State = LOW;
    MOTOR1_2State = HIGH;
    MOTOR2_1State = LOW;
    MOTOR2_2State = HIGH;
  }
 
  if(x == 4)
  {
    //Mod 4, Anda para Traz e Direita
    analogWrite(MOTOR1_Enable, 90); //Corresponde a 35% do ciclo
    digitalWrite(MOTOR2_Enable,HIGH);
    digitalWrite(LUZ_SETA_ESQUERDA,LOW);
    MOTOR1_1State = HIGH;
    MOTOR1_2State = LOW;
    MOTOR2_1State = HIGH;
    MOTOR2_2State = LOW;
  }
 
  if(x == 5)
  {
    //Mod 5, Gira sobre o eixo no sentido horário
    digitalWrite(MOTOR1_Enable, HIGH);
    digitalWrite(MOTOR2_Enable,HIGH);
    digitalWrite(LUZ_SETA_ESQUERDA,LOW);
    MOTOR1_1State = HIGH;
    MOTOR1_2State = LOW;
    MOTOR2_1State = LOW;
    MOTOR2_2State = HIGH;
  }
 
  if(x == 6)
  {
    //Mod 6, Anda para Frente e Esquerda
    digitalWrite(MOTOR1_Enable, HIGH);
    analogWrite(MOTOR2_Enable,90); //Corresponde a 35% do ciclo
    digitalWrite(LUZ_SETA_DIREITA,LOW);
    MOTOR1_1State = LOW;
    MOTOR1_2State = HIGH;
    MOTOR2_1State = LOW;
    MOTOR2_2State = HIGH;
  }
 
  if(x == 7)
  {
    //Mod 7, Anda para Traz e Esquerda
    digitalWrite(MOTOR1_Enable, HIGH);
    analogWrite(MOTOR2_Enable,90); //Corresponde a 35% do ciclo
    digitalWrite(LUZ_SETA_DIREITA,LOW);
    MOTOR1_1State = HIGH;
    MOTOR1_2State = LOW;
    MOTOR2_1State = HIGH;
    MOTOR2_2State = LOW;
  }
 
  if(x == 8)
  {
    //Mod 8, Gira sobre o eixo no sentido anti-horário
    digitalWrite(MOTOR1_Enable, HIGH);
    digitalWrite(MOTOR2_Enable,HIGH);
    digitalWrite(LUZ_SETA_DIREITA,LOW);
    MOTOR1_1State = LOW;
    MOTOR1_2State = HIGH;
    MOTOR2_1State = HIGH;
    MOTOR2_2State = LOW;
  }
 
  if(x == 9)
  {
    //Mod 9, Para
    penultimo=BT_5;
    digitalWrite(LUZ_BRANCA_RE,LOW);
    digitalWrite(LUZ_SETA_DIREITA,LOW);
    digitalWrite(LUZ_SETA_ESQUERDA,LOW);
    MOTOR1_1State = LOW;
    MOTOR1_2State = LOW;
    MOTOR2_1State = LOW;
    MOTOR2_2State = LOW;
  }
 
  if(x == 10)
  {
    //Mod 10, Acende Farol
    FAROL_State=!FAROL_State;
    digitalWrite(LUZ_VERMELHA,FAROL_State);
    digitalWrite(LUZ_BRANCA_FRENTE,FAROL_State);
  }
 
  digitalWrite(MOTOR1_1, MOTOR1_1State);
  digitalWrite(MOTOR1_2, MOTOR1_2State);
  digitalWrite(MOTOR2_1, MOTOR2_1State);
  digitalWrite(MOTOR2_2, MOTOR2_2State);
}