quarta-feira, 29 de junho de 2011

Programação Sensor de Luz


     Nessa programação vamos usar a programação if só, mas podemos também usar a programação do switch / case. Ambos são simples de usar, mas as pessoas que tem dificuldade nessa programação é bom fazer um fluxograma do que pretende fazer na programação, ajuda muito a ter a ideia de como monta-la.

Primeiramente vamos entender as funções:
-If: Expressa uma condição, para usa-la precisa usar também o conjunto de operação de comparação.

-Operação de Comparação:
 x == y (x é igual a y)
 x! = y (x não é igual a y)
 x <y (x é menor que y) 
 x> y (x é maior que y)
 x <= y (x é menor ou igual a y)
 x> = y (x é maior ou igual a y)

-Operações Booleanas:
 && (AND, é verdade quando x E y é maior que 0)
 ||     (OR, é verdade quando x OU y é maior que 0)
!       (NOT é verdade quando x é igual a 0)

-Switch / Case: Permiti controlar o fluxo do programa para que os programadores especifique o código diferente que deve ser executado em varias condições. Criamos vários casos, ai o arduino vai olhar cada caso e ver qual irá se encaixar na condição que declarou.

-Break: Serve para sair de cada case, isso serve para que se a condição for falsa passe para a próxima condição até chegar à verdadeira.

     Geralmente essas estruturas de controle são usadas para programar sensores, mas também pode programar qualquer coisa que não seja sensor.

Programação if:
     Vou fazer a programação do seguidor de linha como exemplo dessa programação:
int ldr1= 0; //Porta Analógica do Arduino
int valor1 = 850; //Variável qualquer que utilizei para o ldr1
int ldr2 = 1; //Porta Analógica do Arduino
int valor2 = 900; Variável qualquer que usei para o ldr2
void setup()
{
  
Serial.begin(9600); //Taxa de transmissão de dados 9600bps
}
void loop()
{
  valor1=analogRead(ldr1); //Preparei o sensor1 e declarei que o valor1 pertence ao ldr1
  valor2=analogRead(ldr2);  //Preparei o sensor1 e declarei que o valor2 pertence ao ldr2
  //Ambos os sensores veem branco
  if(valor1>920 && valor2>920) //Condição 1
  {
   //Faz algo, anda, para ou o que quiser
  }
  //Ambos os sensores veem preto
 if(valor1<920 && valor2<920) //Condição 2
  {
   //Faz algo diferente da primeira, anda, para ou o que quiser
  }
}
     Vamos por parte, no setup() perceberam que eu não declarei os sensores, isso porque eu coloquei nas portas analógicas do arduino, por que se fosse às portas digitais eu deveria declarar.
     Agora vimos mais uma nova função Serial.begin(9600), que define a taxa de dados de bits por segundo, o padrão que geralmente sempre usamos e de 9600 bps.
     No loop() eu só precisei preparar os sensores apenas 1 vez e só fiz 2 condições (apesar de que para o que pretendo fazer seriam 4 condições [preto & preto; branco & branco; preto & branco; branco & preto])
     Na hora que preparei os sensores, declarei que cada valor1 pertence ao sensor ao ldr1 e o valor2 pertence ao sensor ldr2. Mas quando se "prepara" um sensor só escreve analogRead(pino) se for à porta analógica do arduino ou digitalRead(pino) se for à porta digital da placa.

Programação switch / case:
     Nessa programação vai ter coisas da programação anterior. Vamos ter que preparar o sensor para cada caso. Mas vou direto ao loop() porque antes disso é o mesmo a diferença vai ser pouca também.

void loop()
{
  switch(int Estado = 1)
  {
    case 1:
    valor1=analogRead(ldr1); //Preparei o sensor1 e declarei que o valor1 pertence ao ldr1
    valor2=analogRead(ldr2);  //Preparei o sensor1 e declarei que o valor2 pertence ao ldr2
    //Ambos os sensores veem branco
    if(valor1>920 && valor2>920) //Condição 1
    {
      //Faz algo, anda, para ou o que quiser
    }
    else
    {
      Estado = 2;
    }
    case 2:
    valor1=analogRead(ldr1); //Preparei o sensor1 e declarei que o valor1 pertence ao ldr1
    valor2=analogRead(ldr2);  //Preparei o sensor1 e declarei que o valor2 pertence ao ldr2
    //Ambos os sensores veem preto
    if(valor1<920 && valor2<920) Condição 2
    {
      //Faz algo diferente da primeira, anda, para ou o que quiser
    }
    else
    {
      Estado = x; // x seria o próximo estado
    } 
}
     Como viram também vimos à função else, que nada mais é o contrario de if. SE (if) for verdade faz isso, SE NÃO (else) faz aquilo. Mas no if precisa declarar a condição, falar os valores e no else não precisa disso.
     Também tive que cria um estado (mas poderia ter colocado outro nome), isso entende que cada case é um Estado diferente e com isso da para passar para o próximo case.
     Em relação aos valores (valor1 e valor2) eu tive que verificar antes os valores de cada sensor... ex.: Cada sensor não vão dar o mesmos valores e fica variando. Eu peguei o menor valor de branco e o maior valor de preto e tirei a media deles, essa media é o valor1 ou o valor2. Precisa fazer isso em cada sensor e de preferência toda vez que usar, como os sensores foram montados com o tempo o componente vai ficando fraco e os valores vai mudando muito.

     Os valores 920 eu chutei, vi que acima disso o LDR detectava que era branco e a baixo disso detectava preto. Mas esse valor podemos mudar também. Outro exemplo seria comprar a média com o menor valor de branco ou maior valor de preto (ex.: o branco variava de 915 a 945 e preto de 810 a 860... logo tirei a media x e quando comparei ficou; if(valor de x > 860) quer dizer que está vendo branco; if(valor de x < 915) quer dizer que está vendo preto.
     Outra diferença entre essas programações if e switch é que no switch o arduino vai verificar caso por caso para ver qual vai ser a verdadeira (se tiver 500 casos, o arduino irá olhar um por um até achar a sentença verdadeira). Na if não vai ter esse problema, porque quando detecta o valor, o arduino vai direto à sentença verdadeira e não vai ficar detectando cada sentença. para ver se é falsa ou não.


Vídeo:


Espero que isso ajude muito vocês,
Até mais....


terça-feira, 28 de junho de 2011

Sistema Sensor de Luz

     Vou explicar como montar um Sistema de Sensor de Luz. Antes de tudo, vocês devem ta pensando porque Sistema de Sensor de Luz e não um Sensor de Luz: Bom o sensor de luz nada mais é o componente que seria o LDR (resistor dependente de luz, que funciona da seguinte forma. Quando não há nenhuma luz na direção do componente a corrente é muito alta e quando coloca uma luz na direção dele a corrente vai diminuindo.). O Sistema de Sensor de Luz seria fazer que o arduino lê o valor que o LDR capta, mas fazendo um circuito para ter uma duração longa do componente.
     Lembrando também que existe varias maneiras de montar um Sistema de Luz desses, como infravermelho por exemplo, mas também em vez de fazer podemos comprar já pronto (no momento o único que vem na cabeça é o CNY 70). Esse sistema foi feito pelo Antonio (qualquer duvida carvalho.sistema@gmail.com) que faz parte da equipe de robótica da minha escola. 

Material Usado:
-2 resistores (1 de 470ohm e outro de 100kohm);
-1 LED de auto brilho;
-1 LDR;
-Fio cabinhos;
-2 Canudos (um fino e outro largo, estilo de Milk-Shake) ;

Circuito do Sistema:
Visão Lateral:
      No canudo como viram eu envolvi por fita isolante para direcionar a luz para uma única direção e também tirar um pouco da sensibilidade do LDR.

Visão Frontal:
     O LDR fica dentro do canudo melhor, isso foi para tirar a sensibilidade do componente e também como o LED está do lado, poderia afetar no resultado. Esse canudo pequeno também está envolvido por fica isolante.

     No caso esses Sistemas, eu vou utilizar para fazer um carrinho seguidor de linha com o arduino, só que no arduino cada cor o sensor vai ter um valor, mas eu só vou usar as cores brancas que será o fundo e preta que é a linha.

Espero que tenham entendido e qualquer dúvida é só comentar que responderei o quanto antes.
Até a próxima...

segunda-feira, 27 de junho de 2011

Motores DC

     Primeiramente, para ligar um motor DC no arduino, precisamos montar um pequeno circuito. Porque o arduino não tem corrente suficiente para ligar um motor, a corrente que o arduino tem é de 40mA e dependendo do motor, precisa de mais que isso, uns 50mA em diante.
     Existem n maneiras para montar um circuito para pode ligar o motor, vou mostrar só uma delas como mostra a imagem a seguir:
     O resistor que usei é de 1kohm, diodo 1N4007, transistor TIP120 e a bateria é que serve para ligar o motor. Lembrando também que existe varias maneiras para ligar um motor, a programação praticamente é igual a do Blink também pode ser feita pelo for mas precisa usar uma porta pwm, só que em vez do LED vai ligar um motor DC.

Programação:
int motor= 9;  //Variável 9 que declarei como motor
void setup()
{
  pinMode(motor, OUTPUT);  //Porta Digital do arduino, pino 9 (pwm)
}
void loop()
{
  digitalWrite(motor, HIGH); //Motor Liga por
  delay(1000);                   // 1segundo = 1000 milissegundos
  digitalWrite(motor, LOW); //Motor Desliga por
  delay(1000);                  //1segundo = 1000 milissegundos
}
     Como vocês viram, mudou quase nada da programação Blink, mas como a porta 9, é uma porta pwm, logo vocês podem mudar a corrente, em vez de HIGH pode-se colocar 255 (corrente máxima ou outro valor para andar) e em vez de LOW pode colocar como 0 (corrente nula ou um valor muito baixo para ele andar bem de vagar), mas lembrando de que precisa mudar de digitalWrite para analogWrite. Fazendo isso, podemos controlar a velocidade dos motores, leds, qualquer componente.

Vídeo:

Até mais...

sexta-feira, 24 de junho de 2011

Programação - Introdução


     O que estou postando, foi retirado do Laboratório de Garagem na parte de programação. Achei interessante, porque tem uma breve introdução falando de cada função, explicando como se usa e para que serve.

Temos que obrigatoriamente programar dois métodos:
void setup( ) 
{
}
void loop( )
{
}
     O setup é executado uma só vez assim que a placa for ligada e o loop terá o código de execução infinita. No setup() é define-se quais pinos serão entrada e saídas e outros parâmetros de inicialização. Pode-se criar funções diferentes assim como em C/C++.

Sintaxe
A sintaxe da programação do Arduino é igual à programação em C/C++. A sintaxe está sendo colocada para aprendizado e referência na linguagem.
"//" - (Comando para comentário de uma linha).
"/* texto */" - (Comando para comentário de várias linhas(texto)).
"{ }" - (Dentro das chaves coloca-se os comandos de cada função ou de cada comando).
";" - (Coloca-se ponto e vírgula sempre que um comando termina).

Tipos de Variáveis
Aqui está sendo mostrado os tipos mais comuns e utilizados. No Site Arduino mostra todos os tipos e o que cada um faz.
"boolean" - Sendo Verdadeiro(true) ou Falso(false). Existe também Alto(HIGH) e Baixo(LOW).
"int" - Sendo os números inteiros(de -32768 a 32767).
"unsigned int" - Sendo os números inteiros positivos(de 0 a 65535).
"long" - Sendo os números inteiros(de -2147483648 a 2147483647).
"unsigned long" - Sendo os números inteiros positivos(de 0 a 4294967295).
"float" - Sendo os números inteiros com decimais(-3.4028235*(10 elevado a +38) a 3.4028235*(10 elevado a +38)).
"char" - Sendo um caractere - Obs.: Existe o "string" que é um conjunto de caracteres.
No site mostra INPUT(Entrada) e OUTPUT(Saída) como tipos de variáveis, mas seria mais como definição dos pinos, isto é, os pinos podem ser definidos como entradas e/ou saídas.

Operadores Matemáticos
"=" - Atribui um valor a uma variável.
"+" - Soma.
"-" - Subtração.
"*" - Multiplicação.
"/" - Divisão.
"%" - Resto da divisão. Ex: 5%2 -> O resto da divisão de 5 por 2 é 1.

Operadores de comparação
"==" - "é igual a".
"!=" - "é diferente a".
"<" - "é menor a".
">" - "é maior a".

Estruturas de controle
"if(condição){comandos1} - Se a condição for verdadeira então faça os comandos1
else if(condição){comandos2} - Senão se a condição for verdadeira então faça os comandos2
else{comandos3}" - Senão faça os comandos3. Esta estrutura pode ter apenas o "if" caso tenha apenas uma condição.

"for(variável=início;condição;modifica){comandos}" - Para a variável=início e a condição for verdadeira faça os comandos, depois modifica e verifica se a condição é verdadeira. Geralmente o "for" é utilizado para executar os comandos um número n de vezes dentro do void loop() {}.

"while(condição){comandos}" - Enquanto a condição for verdadeira faça os comandos. Parecido com o "for". Esta estrutura verifica primeiro a condição e depois executa os comandos.
"do{comandos}
while(condição)" - Faça os comandos enquanto a condição for verdadeira. Esta estrutura executa primeiro os comandos e depois verifica a condição.

Portas digitais e analógicas
Na prática ligamos componentes em portas digitais e analógicas e através do código Arduino, manipulamos as portas: pinMode(<porta>, <modo>): configura uma porta digital para ser lida ou para enviarmos dados.
digitalWrite(<porta>, 0 ou 1): envia 0 ou 1 para porta digital.
digitalRead(<porta>): retorna um 0 ou 1 lido da porta.
analogRead(<porta>): retorna de 0 a 1023 com o valor da porta analógica.
analogWrite(<porta>, <valor>): escreve em uma porta PWM um valor de 0 a 255.

Espero que isso ajude muito vocês... Até mais!

MotorShield

     Montar o seu próprio Shield não é tão difícil como se pensa, só precisa saber manusear um ferro de solda. Os componentes que usei no meu Shields foram:
-CI L293D, ponte h;
-Suporte para CI de 16 pinos;
-Barra de terminal macho;
-Fios;
-Borne KRE;

     Antes de tudo o que seria a ponte h? A ponte h é um circuito que permite que um micro controlador controle um motor DC, o micro controlador por si não consegue "dar" a corrente necessária para o funcionamento do motor, e ainda torna possível que o motor rode tanto para um sentido quanto o outro.
     Vamos ver os terminais desse CI:
* Pino 16, corrigindo, é idem ao terminal 8

          Apesar de que existe outros CIs, preferir usar o L293D, que deve custar em torno de R$15,00 à R$20,00. A montagem fica como está a imagem abaixo:

Foto do MotorShield

Até mais pessoal...

quinta-feira, 23 de junho de 2011

Blink - Piscando LED


      Aqui vai uma breve explicação para programação de piscar um led, esse é um exemplo clássico que todos quando recebem o arduino usa para testa-lo se está funcionando. Mas na programação existe várias maneiras para fazer a mesma coisa, no caso vou explicar a programação básica e uma, um pouquinho mais avançada para quem está começando agora com o arduino, que é a programação por for.

1-Programação Básica:
    Vou fazer a programação toda e depois vou explicar em partes. Lembrando que no próprio arduino tem um led conectado a porta 13.

int led= 13; //Declarei que led é a variável 13
void setup()
{
  pinMode(led, OUTPUT); //Agora utilizei essa variável e disse que ela é a porta 13 do arduino
}
void loop()
{
  digitalWrite(led, HIGH); // Led ficará ligado
  delay(1000);                    //Por 1000 milissegundos
  digitalWrite(led, LOW); //Led irá ficar desligado
  delay(1000);                   //Por 1000 milissegundos
}
     No início da programação quando declarei que led = 13, esse valor serial uma variável, mas no nosso consentimento, na nossa cabeça fica como se fosse já a porta do arduino, mas é uma variável qualquer.
     No void setup(); que é a preparação da programação, ai sim digamos falamos da porta do arduino, declarei que esse valor vai sair dados, vai sair tensão (se fosse INPUT, seria o contrario, entraria dados);
     No void loop(); como o nome já diz, vai servir para repetir a programação infinitamente até que se desligue o arduino. Mas na programação dentro do loop que o led vai ficar acesso por 1000 milissegundos

PS: No delay, que seria o tempo da função que foi ativado, é em milissegundos.

     Voltando, o led vai ficar acesso por 1 segundo e depois vai se desligar por 1 segundo e isso vai ficar assim o tempo todo até que desligue o arduino.

2-Programação em for:
     Nessa programação precisa colocar o led numa porta PWM que está marcado na placa do arduino, a programação vai ficar fica assim:

int led= 10;  //Declarei a variável 10 vai se chamar led, idem ao anterior
void setup()
{
  pinMode(led, OUTPUT); //Agora declarei que aquela porta 10 é a porta digital do arduino
}
void loop()
{
  for(int i = 0; i < 255; i++) //Condição que usei, i começa em zero, se ele for menor que 255 vai somar 1 para i
   {
     analogWrite(led, i); //Led acende de acordo com o valor de i
     delay(250); //Durante 250 milissegundos
   }
}

     Bom, eu mudei a porta e coloquei numa porta PWM, mas lembrando de que, declarei a variável 10 do led, no void setup() que , digamos, eu falei que seria na porta 10 do arduino.
     A grande mudança foi no loop(), que usei a sentaça for, dentro desse sentença como viram tem uma expressão, nessa função vocês tem que falar inicialização, condição e incremento.
     Então, i declarei dentro do for para ser uma variável qualquer, mas essa variável vai está ligado a corrente que vai passar no led. Comecei com a variável em 0 (inicialização); se i for menor que 255 (condição); vão ser somados 1 variável em i (incremento).

     Dessa vez não usei digitalWrite e sim analogWrite, que serve para as portas pwm... Agora vocês se perguntando o que seria essas portas pwm: É uma porta aonde você controla a corrente que passa onde que variável de 0-1023, mas na programação esse valor é divido por 4, logo vai variar de 0-255.


Vídeo:
Houve um erro de português no ultimo video, em vez de programaçãos e sim programações

Bom pessoal, espero que tenham entendido, qualquer coisa deixa como comentário que explicarei
Até mais... 

quarta-feira, 22 de junho de 2011

Conhecendo o arduino

          O arduino é uma plataforma open-source, é um software livre, a programação dele toda e inspirado em C/C++ (não é C/C++ todo). Esse hardware existe há pouco tempo foi feito em 2005 com intenção em projetos escolares de forma a ter um orçamento menor que outros sistemas de prototipagem disponíveis naquela época.
     Podemos fazer qualquer projeto que imaginar com o arduino, podemos usar todos os sensores que existir no arduino e até ligar motores também.
     No arduino existe módulos expansivos chamados de Shields que serve para estender a sua capacidade. Existe vários tipos de Shields (wifi, Bluetooth, motor, ethernet, etc.).
         Nesses links a seguir fala da programação do Arduino, falando da estrutura e de cada função: Programação Arduino.
     O Software do Arduino IDE é uma aplicação multiplataforma escrita em Java na qual é derivada dos projetos Processing e Wiring. Para a programação funcionar sempre precisar deixar declaradas duas funções:
  • setup() - Inserida no inicio, na qual pode ser usada para inicializar configuração;
  • loop() - Chamada para repetir um bloco de comandos ou esperar até que seja desligada;
     No link a seguir tem um vídeo que é um documentário sobre o arduino, o áudio está em inglês, mas a legenda em espanhol The Arduino Documentary e uma breve introdução do arduino:

Até mais pessoal, espero que tenha entendido tudo.
Fui!!!

Primeira Postagem


Bom pessoal, nessa primeira postagem, irei fazer uma breve apresentação.

Ainda curso o ensino médio e faço curso técnico em eletrônica. Já participei em dois eventos de robóticas, a OBR (Olimpíadas Brasileira de Robótica) em 2010, onde a minha equipe ficamos em 2º lugar no Estadual e entre os 10 melhores do Brasil na Nacional (7º lugar) usando kit da Legomindstorms.

Agora comecei a usar o kit do arduino, estudo o arduino há quase um ano e estou fazendo vários projetos com ele de robótica e física. Pretendo postar tudo o que fiz e o que sei aqui no blog para ajudar a todos.

Bom pessoal até mais...
 
Blogger Templates