sexta-feira, 14 de junho de 2013

Controlando Um Carrinho Através de Comandos Infra vermelho de um Controle Remoto Incrementado de sensores de distancia, Luminosidade, Temperatura e Umidade.





Esse Carrinho, é controlado Via Infra Vermelho por um controle Remoto de um som automotivo com auxílio de uma Ponte H e alguns Sensores para dar enfase ao Projeto.

A princípio a idéia era somente pilotar esse carrinho via Porta Serial, mas no decorrer do percurso, tamanha foi a facilidade que resolvemos implementar alguns sensores.


Agora além de ser comandado via Infra Vermelho por um controle Remoto de som Automotivo, o mesmo possui Sensor de Ultrassom, que detecta obstáculos a frente e aciona sinal sonoro para obstáculos a menos de 20cm, e para motor em obstáculos abaixo de 10cm.
Possui ainda um LED que se acende quando esta sobre baixa luminosidade, detectada por um LDR.  
O Sensor DHT11, transmite Temperatura e Humidade do ar no local onde o Carrinho está percorrendo. 
Tais Indormações Podem Ser Observadas através do Serial Monitor da IDE do Arduíno.





Itens Utilizados:

1 Arduíno Uno
1 Ponte H de Potência L298N para Controlar até 2 (dois) Motores DC
1 Carro de brinquedo com dois motores DC.
1 Buzzer
1 Led
1 Sensor de Ultrasom HC-SR04
1 Sensor Receptor Infra Vermelho IR
1 Sensor de Umidade e Temperatura DHT11
1 Resistor LDR
1 Protoboard


Ligações Ponte H.



Saída MotorA Da ponte H Ligada No Motor 1 - Move para Frente e Para Traz.
Saída MotorB Da Ponte H Ligada No Motor 2 - Move para Esquerda e Direita.



ENA liga na Pino Digital 3 Arduino.
IN1 liga na Pino Digital 2 Arduíno.
IN2 liga na Pino Digital 4 Arduíno.
IN3 liga na Pino Digital 5 Arduíno.
IN4 liga na Pino Digital 7 Arduíno.
ENB liga na Pino Digital 6 Arduíno.


Ligações Sensor HC-SR04



VCC - Alimentação 5V Arduíno.
Trig - liga na Pino Digital 12 Arduino.
Echo - liga na Pino Digital 13 Arduino.
GND - Ground Arduíno.


Ligações Sensor DHT11





VCC - Alimentação 5V
OUT - Liga na Pino Analógica A1 do Arduino.
GND - Ground Arduíno


Ligações Sensor Receptor Infra Vermelho IR 






OUT - Pino 8 Digital Arduíno
VCC - Alimentação 5V Arduíno
GND -Ground Arduino
Ligação LDR
Pino Analógico A1 Arduíno ( Ver Modelo Ligação )

Demais Ligações

Buzzer - Pino Digital 9 Arduíno
Led - Pino Digital 10 Arduíno




Código Programa

#include <IRremote.h> //Inclui Biblioteca
#include <dht.h> //Inclui Biblioteca
#define dht_dpin A1 //Pino DATA do Sensor ligado na porta Analogica A1
#define echoPin 13 //Pino 13 recebe o pulso do echo
#define trigPin 12 //Pino 12 envia o pulso para gerar o echo

//--------------------------Variáveis----------------------------

long distanciag = 0;
int luminosidade =0;
int temper = 0;
int humid=0;
int pinoIN=8;
IRrecv sinal(pinoIN);
decode_results resultado;
dht DHT; //Inicializa o sensor
long int codigo=-8;

//--------------------------Setanado Pinos entrada e Saida----------------

void setup()

{
Serial.begin(9600); // programa a porta serial para comunicação em 9600 bps
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
sinal.enableIRIn();
}


//------------------------------------------------------
//------------------------------------------------------


void loop()

{
DHT.read11(dht_dpin);
temper=DHT.temperature;
humid=DHT.humidity ;
luminosidade= Luminosidade();
distanciag= Distancia();
if (sinal.decode(&resultado)) //----------Recebe codigo do Controle
{
codigo=resultado.value;
Serial.print("Código Recebido: ");
Serial.println(codigo);
sinal.resume();
}
distanciag= Distancia();
if ((codigo==16718055)&&(distanciag >10)) // Condição Para seguir em frente
{
Frente();
}
if ((distanciag<10)||(codigo==16726215)) // Condiçãode parada
{
Parar();
}
if (codigo==16730805) // Condição para dar ré
{
Traz();
}
if (codigo==16716015) // Condição para ir a esquerda
{
Esquerda();
}
if (codigo==16734885) // Condição para ir a Direita
{
Direita();
}
if (codigo==16724175) // Condição para Receber Dados dos Sensores e lança´los a tela
{
DHT.read11(dht_dpin);
temper=DHT.temperature;
humid=DHT.humidity ;
luminosidade= Luminosidade();
distanciag= Distancia();
Tela();
codigo=-8;
}
if (luminosidade<400)
{
digitalWrite(10,HIGH);
}
if (luminosidade>=400)
{
digitalWrite(10,LOW);
}
if (distanciag<10)
{
digitalWrite(9,HIGH);
}
if (distanciag>10)
{
digitalWrite(9,LOW);
}
delay (5);
}

      ///-------------------------Funções

void Tela()

{
Serial.println("DISTANCIA - TEMPERATURA - HUMIDADE - LUMINOSIDADE");
Serial.print(" ");
Serial.print(distanciag);
Serial.print("CM ");
Serial.print(temper);
Serial.print("ºC ");
Serial.print(humid);
Serial.print("% ");
Serial.print(luminosidade/10);
Serial.println("% ");
}

//-----------------------------------------------------
//----------------------------------------------------

int Direita()

{
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(5,LOW);
}

//-----------------------------------------------------
//----------------------------------------------------

int Esquerda()

{
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(7,LOW);
}

//-----------------------------------------------------
//----------------------------------------------------

int Frente()

{
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
digitalWrite(4,LOW);
}

//------------------------------------------------------
//------------------------------------------------------


int Traz()

{
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(2,LOW);
}

//------------------------------------------------------
//------------------------------------------------------


int Parar()

{
digitalWrite(3,LOW);
digitalWrite(2,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}


//------------------------------------------------------
//------------------------------------------------------

int Luminosidade()

{
int i = analogRead(0);
return (i);
}
//------------------------------------------------------
//------------------------------------------------------

long Distancia()

{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin,HIGH);
long distancia = duration /29 / 2 ;
return(distancia); 
}
//------------------------------------------------------
//------------------------------------------------------

2 comentários:

  1. Bom diaaa! Queria saber qual foi o custo do projeto e tb queria uma forma de contato com vcs, para fzer aqui na nossa faculdade

    ResponderExcluir