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...
sábado, 16 de julho de 2011
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...
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...
Marcadores:
Programação
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.
Vamos usar nessa programação, duas novas funções Serial.read() e o Serial.available():
void loop()
![]() |
| O que está marcado em amarelo não é utilizado, é o valor em decimal e ao lado o correspondente. |
-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);
}
{
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...
Marcadores:
Programação
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...
Marcadores:
Eletrônica
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
int valor2 = 900; Variável qualquer que usei para o ldr2
void setup()
{
Serial.begin(9600); //Taxa de transmissão de dados 9600bps
}
{
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....
Marcadores:
Programação
Assinar:
Postagens (Atom)







