sábado, 16 de julho de 2011

Simulando Circuitos

     O link a seguir é um programa que geralmente utilizamos (até o pessoal do arduino.cc) Fritzing para fazer os esquemas de circuitos e projetar antes como ficará o projeto para que não ocorra nenhum erro. Mas simulação só de imagens mostrando como monta, não detecta se o circuito está certo ou errado.

     O link que passei é do site, só ir à parte de download que irá baixar a ultima versão do software. Nele também podemos fazer programações (creio que também pode mandar a programação por esse programa, nunca experimentei).

     Todas as imagens que usei no meu blog foram todas feitas por esse programa, podemos fazer os circuitos no protoboard, esquemático e PCB. No PCB podemos também até em fazer as placas de circuito impresso, criamos o layout e depois é clicar em exportar para PDF.

Espero que tenham sido útil. Logo postarei os meus projetos de robótica, estou terminando de montar e postarei detalhando tudo.

Até mais...

segunda-feira, 11 de julho de 2011

Ponte H

     Agora é a vez de falar de programação desse CI, comentei só da montagem e de cada terminal. Mas essa explicação é bem curta é rápida.

     Como no motor comum só se usa 1 terminal do arduino, com a ponte H, usamos 2 terminais do arduino para cada motor. No caso de ligarmos um dos terminais o outro tem que está desligado e vice versa (ligou terminal 1, motor horário, ligou terminal 2, motor anti-horário ). Mas nunca pode ligar os 2 terminais ligados.

A programação fica assim (mas vou falar só do acionamento dos motores, porque qual terminal do arduino e o void setup() já conhecemos):

  analogWrite(motor_direito_frente, 255);     //Exemplo: terminal 10 do arduino
  analogWrite(motor_direito_atras, 0);     //Exemplo: terminal 9 do arduino
  analogWrite(motor_esquerdo_frente, 255);     //Exemplo: terminal 5 do arduino
  analogWrite(motor_esquerdo_atras, 0);     //Exemplo: terminal 4 do arduino

     Como viram que eu especifiquei o motor do sentido oposto do que desejo. Isso para o arduino ter certeza (porque podem ocorrer falhas) que o outro pino vai está desligado e não gerar conflito. Com essa maneira você precisa ficar digitando varias vezes isso. Existem várias maneiras para simplificar isso. Podemos em vez de ficar digitando isso várias vezes criar um comando e a partir do nome desse comando irá identificar o que deseja fazer. (exemplo: se eu digitar anda(); o arduino irá identificar que esse comando significar a programação que coloquei logo acima)
     Mas ensinarei logo como simplificar a programação e fazer esses comandos.


Espero que tenham entendido pessoal... Até mais...

quarta-feira, 6 de julho de 2011

Controle pelo Teclado

     Esse tipo de programação é bem tranquilo de fazer e de entender também, mas para fazer isso precisa ter em mãos a Tabela ASCII (American Standard Code for Information Interchange) para fazer a programação, usamos só o valor decimal.
O que está marcado em amarelo não é utilizado, é o valor em decimal e ao lado o correspondente.
     Vamos usar nessa programação, duas novas funções Serial.read() e o Serial.available():
-Serial: Ele se comunica nos pinos digitais 0 (RX) e 1 (TX), bem como com o computador via USB.
-read: Serve para lê as entradas de dados do serial.
-available: Serve para obter o números de bits disponível para a leitura da porta serial.


void setup()
{
 Serial.begin(9600);
}

void loop()
{
  if(Serial.available()>0)
  {
    n = Serial.read();
    Serial.print("Voce digitou: ");
    Serial.println(n, BYTE); // Imprime na tela o valor do telhado em BYTE

    if(n==119)  // tecla w (minusculo)
    {
      //Tecla ação 1, ex.: se for um carrinho anda para frente
    }
    if(n==115)  // tecla s (minusculo)
    {
      //Tecla ação 2, ex.: carrinho anda para tras
    }
    if(n==100)  // tecla d (minusculo)
    {
      //Tecla ação 3, ex.: carrinho anda para a direita
    }
    if(n==97)  // tecla a (minusculo)
    {
      //Tecla ação 4, ex.: carrinho anda para a esquerda
    }
  }
}

     Esse n eu declarei como uma variável qualquer, dei exemplos de 4 ações só mas podemos criar varias ações para ficar controlando pelo teclado. Lembrando que no void setup() precisa colocar o Serial.begin(9600). Também usei como exemplo para controlar carrinho, mas podemos usar para controlar leds, fazer teclado musical (usando um piezo) (mas tem que ficar de olho nos valores).
     Mas para funcionar, assim que passar a programação para o arduino, clica no Serial Monitor e abrirá uma janela como a imagem a seguir. Na barra onde digitamos a tecla e logo em seguida aperte enter, pronto a função que você escolhe irá funcionar.

Vídeo:
Espero que tenham entendido, qualquer coisa só deixar como comentário que explicarei.
Até mais...

segunda-feira, 4 de julho de 2011

Sistema Sensor de Toque


     Explicar agora a montagem do Sistema Sensor de Toque, nesse projeto estou usando a chave switch mas podemos usar outros componentes como pushbutton ou que construirmos (ai sim, quando construirmos deixa de ser o sistema e sim só o sensor, mas o sistema é fazer que o arduino leia os valores).
     Vou usar esse Sistema para o meu projeto detectar se há ou não obstáculos à frente. Podemos usar outras maneiras para detectar isso, usando Ultrassom ou Detector de distancia (que usa o led infravermelho em alguns casos).

Material Usado:
-Chave Switch;
-Fios Cabinhos;
-Tubo (caneta velha);
-Resistor de 100kohm;
-Barra de Terminais Macho;
-Fita Isolante;

     Usei o tubo de caneta velha para pode prender o sensor numa ponta e a outra no projeto e também ta um alcance maior para que o projeto não fique muito encima do obstáculo. Para ter uma aparecia melhor peguei fita isolante e envolvi o tubo todo.

Esquema de como ficou o circuito, CF:Normalmente Circuito Fechado, CA:Normalmente Circuito Aberto, CM:Comum.

Nessa foto é o Sistema já pronto, com a fita isolante que comentei, para ficar firme os fios eu dei uns pingos de cola quente nas 2 extremidades da caneta, para fixar a chave switch e para os fios também.

     Esse esquema vai funcionar como no arduino: Quando a CF (que está conectado ao 5v) não estiver pressionado, que dizer que está passando corrente para o comum e o analógico do arduino fica lendo (como coloquei o resistor de 100kohm, varia de 0 - 900, diferença mínima).
     Quando pressionar a chave, o CF abre o circuito e o CA fecha. Mas como o CA está ligado a GND o analógico ver que não passa nenhuma corrente e o valor fica em 0 (pode variar um pouquinho o valor, fuga de corrente, de 0 - 20).

     Logo postarei como se programa, sendo que é idem a programação do Sistema Sensor de Luz, praticamente não há diferença e pode fazer nos 2 jeitos.

Até mais...

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....


 
Blogger Templates