quarta-feira, 7 de setembro de 2011

Carrinho Acionado por Luz

     Bom esse projeto não uso o arduino, mas também pode implementar o arduino nele, esse projeto é bom para o pessoal que está começando a eletrônica. Se usa um circuito bem simples e fácil de montar. Primeiramente é bom montar o circuito em um protoboard ou numa barra sindal para depois fazer a placa (caso saiba fazer).

     O circuito desse carrinho precisa de um transistor NPN (usei o TIP120), um resistor, um LDR, um motor e suporte para  2 de pilhas AA (o meu suporte arranquei de um carrinho velho que tinha, rs).

     O carrinho funciona, quando colocar algum alguma luz direcionada ao LDR, a resistência do LDR diminui e aciona o motor, o transistor serve para amplificar a corrente para que o motor funcione.

Esquema do Projeto:



Fotos do Projeto:


sábado, 3 de setembro de 2011

Potenciômetro

     Nessa postagem irei explicar função nova, estou utilizando potenciômetro para controlar o tempo em que um LED vai piscar e a intensidade de luz do LED RGB, usando nas portas PWM.

     Nessa "aula" estou usando 4 potenciômetros, 1 LED RGB e 3 resistores de 220ohm para proteger o LED. 1 potenciômetro é para o LED do pino 13 e outros 3 para cada cor do LED RGB. O circuito do potenciômetro com os LED RGB fica assim:
Esse circuito é para 1 potenciômetro, mas é idem com todos os potenciômetros.
Programação:

const int led = 13;
int T = 0;
const int R = 11;
const int G = 10;
const int B = 9;
const int potled = 0;
const int potR = 1;
const int potG = 2;
const int potB = 3;
void setup()
{
  pinMode(led, OUTPUT);
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);  Serial.begin(9600);
}
void loop()
{
  //Programação De Tempo do LED que pisca
  T=analogRead(potled);
  digitalWrite(led, HIGH);
  delay(T);
  digitalWrite(led, LOW);
  delay(T);
                                                                                                                                                               //Programação de Cores com RGB                                                                                                                                   int valorR=analogRead(potR);                                                                                                              int valorG=analogRead(potG);
  int valorB=analogRead(potB);
  int pwmr = map(valorR,0,1023,0,255);
  int pwmg = map(valorG,0,1023,0,255);
  int pwmb = map(valorB,0,1023,0,255);
  analogWrite(R, pwmr);

  analogWrite(G, pwmg);
  analogWrite(B, pwmb);
}

     Agora irei explicar a função matemática map() e variável const:
                                 - const -> A const palavra-chave significa constante. É uma variável qualificador que modifica o comportamento da variável, tornando uma variável " read-only ". Isto significa que a variável pode ser usado apenas como qualquer outra variável de seu tipo, mas seu valor não pode ser alterado. Você vai ter um erro do compilador, se você tentar atribuir um valor a uma const variável.

- map() -> map serve para fazer calculo de um intervalo para o outro, map(valor, ValorInicialDesligado, ValorInicialLigado, ValorFinalDesligado, ValorFinalLigado), ou seja, o ValorInicalDesligado ficará mapeado em ValorFinalDesligado, e o ValorInicalLigado ficará mapeado em ValorFinalLigado.
OBS.: Nos valores Desligado, não quer dizer que o valor tem quer se menor do que os valores Ligados, podendo fazer o contrario, o valor Desligado ser maior que os Ligado. Também podendo usar valores negativos.


Vídeo:

sexta-feira, 26 de agosto de 2011

ProtoTanque 1º Parte

      Bom meu primeiro projeto com o arduino já está concluído, esse projeto está usando esses sensores e a base de programação que passei até agora, sensor de toque e sensor de luz. O projeto possui 3 sensores de luz (CNY70) que uso para ser o seguidor de linha e 2 sensores de toque para poder desviar de obstáculos.

      O chassi o Isvaldo da minha sala que deu idéia de como deixá-lo firme e o Carlos Eduardo me ajudou na programação do sensor de toque.

     As rodas em que estou usando no carrinho, são esteiras e uma caixa de redução dupla para dois motores DC que comprei na robotmarketplace como mostra as imagens a seguir:


     O sensor CNY70 existe um circuito próprio, dentro desse optoacoplador, possui LED infravermelho emissor e um fototransistor receptor. Estou usando 3 sendo que 1 ficar detectando preto e outros 2 detectando branco (um no lado esquerdo e outro no lado direito). Na programação fiz uma tabela verdade para poder me orientar e o fazer as condições para a programação.

0 significa cor preta e 1 significa cor branca, essas condições foram feitas por mim mas pode ser feitas de outro jeito.
     No sensor de toque, estou utilizando 2 para ter mais alcance para detectar um objeto, estou usando ele nas extremidades do projeto. A ideia é que se houver um toque a frente, o ProtoTanque irá virar para a direita > anda > esquerda > anda > esquerda > anda > direita > e volta ao percurso normalmente. Caso haja um segundo toque logo apos do primeiro em um intervalo de 2,5 segundos o projeto irá desviar para o outro lado.

O projeto deverá fazer o percurso como mostra as imagens logo acima.

     Quando utilizo a ponte H, eu coloquei um cooler pequeno com o mesmo circuito que mostrei nos motores DC, sendo que em vez de colocar o pino na porta digital, como me referi, coloquei direito numa porta de 5v do arduino. Esse cooler serve para ajudar a resfriar o CI porque esquenta, portanto seria bom usar algo para dissipar o calor desse CI.

Fotos:


segunda-feira, 22 de agosto de 2011

Serial Monitor

     Serial Monitor, localiza-se logo abaixo da barra de ferramentas como irei mostra logo a seguir. Esse ícone serve para exibir dados que vem da placa do Arduino ou enviar dados para o Arduino.


     Primeiramente para poder ver esses valores, logo no void setup() precisamos usar o Serial.begin(). Relembrando o quer seria isso, a função Serial serve para poder ter uma comunicação entre a placa e o computador e a função begin() é para definir a taxa de transmissão de bits por segundo para transmissão de dados serial, vale ressaltar que essas taxas são: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, ou 115200. Mas geralmente é usado a taxa de 9600 bps.                                                              
    Logo relembrando isso, na programação dentro do loop() ou no setup() iremos usar outra função que seria o print() e/ou println().
     O comando print() podemos escrever qualquer coisa contanto que esteja entre aspas "", mas pode colocar a variável em que deseja visualizar o valor ou poder ver os valores da Tabela ASCII (logo iria colocar o valor logo depois desse valor a virgula e o formato (val, format)) e tudo é visto na mesma linha.
     O comando printiln() é idêntico ao print() sendo que depois desse valor irá pular uma linha na leitura.      


     A janela em que possamos ver o que deseja, basta clicar no Serial Monitor e abrirá uma janela como essa, logo a seguir. Mas só podemos ver essas variáveis contanto que o arduino esteja ligado ao computador pelo USB.


Como sempre espero que tenham entendido pessoal!!! Até....

quarta-feira, 17 de agosto de 2011

Programação Sensor de Toque (Push Button ou Chave Switch)

     A programação do Sensor de Toque, praticamente é igual ao do Sensor de Luz, mas é mais pratico usar esse Sensor numa porta Digital do Arduino, porque nesse sensor você só irá ligar e desligar algo, vai ser 0 quando estiver pressionado ou 1 quando não pressionar o botão (ou vice versa dependendo do circuito que você queira), na minha opinião, o mais adequado para isso seria usar o push button. Mas podendo fazer numa porta analógica, ai seria melhor usar a Chave Switch porque podemos controlar um pouco a intensidade do toque no sensor.

     Quando usamos as portas analógicas do Arduino, o arduino irá fazer uma leitura de 0-1023 na porta digital, a leitura vai ser 0-1, mas na programação colocamos HIGH (1) e LOW (0).

     Para quem não conhece o que é um Push Button ou Chave Switch, logo abaixo tem foto desses sensores e para quem não sabe montar o Sistema do Sensor de Toque aqui o link para saber montar.


     Como disse a programação não tem mistério praticamente o idem do Sensor de Luz, mas nesse aqui estou usando o PushButton para controlar os LEDs mas a partir disso dá para usar no sensor de toque, por exemplo o projeto desviar de obstáculos.

     O circuito do PushButton é fácil de montar mas tem que prestar atenção no botão nos terminais, ver onde ficar o NA e o NF (Normalmente Aberto e Fechado). O circuito do RGB é independente do botão os circuitos não se misturam como mostra a imagem a seguir:

Programação:

int led13 = 13;
int R = 11;
int G = 10;
int B = 9;
int botao13 = 2;
int valor13 = 0;
int botaoR = 3;
int valorR = 0;
int botaoG = 4;
int valorG = 0;
int botaoB = 5;
int valorB = 0;
int botaoReset = 6;
int valorReset = 0;
void setup()
{
  pinMode(led13, OUTPUT);
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(botao13, INPUT);
  pinMode(botaoR, INPUT);
  pinMode(botaoG, INPUT);
  pinMode(botaoB, INPUT);
  pinMode(botaoReset, INPUT);
}
void loop()
{
  // Liga a Desliga o Led13
  valor13=digitalRead(botao13);
  if(valor13 == HIGH)
  {
    digitalWrite(led13, HIGH);
  }
  else
  {
    digitalWrite(led13, LOW);
  }
  // Liga a Desliga Cores do RGB
  valorR=digitalRead(botaoR);
  valorG=digitalRead(botaoG);
  valorB=digitalRead(botaoB);
  valorReset=digitalRead(botaoReset);
  if(valorR == HIGH)
  {
    digitalWrite(R, HIGH);
    digitalWrite(G, LOW);
    digitalWrite(B, LOW);
  }
  if(valorG == HIGH)
  {
    digitalWrite(R, LOW);
    digitalWrite(G, HIGH);
    digitalWrite(B, LOW);
  }
  if(valorB == HIGH)
  {
    digitalWrite(R, LOW);
    digitalWrite(G, LOW);
    digitalWrite(B, HIGH);
  }
  if(valorReset == HIGH)
  {
    digitalWrite(R, LOW);
    digitalWrite(G, LOW);
    digitalWrite(B, LOW);
  }
}



     Explicando a primeira parte da programação, o 1º botão só vai servir para ligar o LED quando for pressionado, quando não for, o LED fica apagado. Para fazer isso como vimos usei a programação else serve para fazer o contrario (dependendo da programação) do if, o Arduino irá ler assim: "SE (if) botão for igual a 1 (HIGH), o LED acende, DO CONTRARIO (else) caso o botão não fique pressionado o LED apaga. Não colocando o else, o Microcontrolador irá entender que quando pressionar uma vez o LED ficará acesso e não apaga.

     Na programação, devemos sempre colocar até os mínimos detalhes como você quer, quando quer que uma situação (exemplo) o LED acenda e outra situação o LED apague, porque se não pode gerar conflito dependendo da programação.

     Na segunda parte da programação, ai usei 4 botões para isso, cada um vai ligar uma única cor (sem fazer misturas de cores) e o quarto botão vai ser um botão de Reset que vai apagar todas as cores independendo de qual cor esteja acesso.

 Como falei um pouco antes, eu tive que detalhar a programação falando como eu queria que funcionasse, que se eu aperta o botaoR, quero que só a cor vermelha acenda fique HIGH e outras LOW. Caso aperte o botaoG quero que só o verde acenda e os outros apaguem e caso eu aperte o botaoB só o azul fique HIGH e o resto LOW. Mas tipo fazendo isso em qualquer sequencia de quando eu apertar o botão, ai no botaoReset como quero que apague tudo deixei claro que quando eu aperta-se o botão, todos vão se apagar, vão ficar LOW.


Vídeo:


Até mais... espero que tenham entendido mesmo, qualquer duvida já sabem!!!

 
Blogger Templates