Julho 2014 - Arduino e Cia
Postado por Arduino e Cia às 00:01 52 comentários:
O módulo QRE1113 é composto por um led infravermelho e um fototransistor e é do tipo analógico, ou seja, varia a tensão de saída de acordo com a quantidade de luz detectada pelo receptor. Por ter um tamanho bem reduzido (14 x 8 mm), é ideal para construção de robôs seguidores de linha.
O módulo sensor de linha analógico QRE1113
São apenas 3 pinos no módulo : Vcc (5 volts), GND e OUT (Sinal), sendo que este último aceita níveis de tensão de 3.3 à 5v, portanto você pode utilizar esse sensor tanto em sistemas mais comuns, com o Arduino Uno, como em sistemas que utilizem, por exemplo, o Arduino Due, que trabalha com níveis de sinal de 3.3v.
O funcionamento é simples : quanto mais luz for recebida pelo sensor, menor será a tensão na saída, assim você pode usar um conjunto de sensores e ajustar, por exemplo, a direção e/ou velocidade dos motores direito e esquerdo do seu robô conforme uma linha for detectada.
Circuito sensor de linha QRE1113 Sparkfun
E como eu faço para ler isso ? Usando uma das portas analógicas do Arduino, e enviando os dados para o serial monitor, que vai mostrar que quanto mais clara a superfície que estamos testando, mais ela vai refletir a luz IR, e mais baixo vai ser o nível de tensão na saída do módulo.
No programa, nada de bibliotecas específicas ou comandos complicados. Você pode utilizar somente comandos básicos do Arduino para testar o sensor e enviar os dados para a serial. No nosso exemplo, vamos ler o valor da porta analógica A3, e mostrar o nível de tensão na saída do módulo a cada 500 ms. Também vamos acender um led quando a tensão atingir um determinado valor (variável nivel_sinal) :
//Programa : Teste sensor de linha QRE1113 Sparkfun
int nivel_sinal = 0;
int pino_led = 4;
int pino_sensor = A3;
//Leitura do sensor
nivel_sinal = analogRead(pino_sensor);
//Envia os dados para o serial monitor
Serial.print("Nivel : ");
Serial.println(nivel_sinal);
//Teste o nivel de sinal e acende o led
if (nivel_sinal < 1000)
//Aguarda 500 ms e reinicia o processo
Aproxime diferentes materiais do sensor para verificar a variação do sinal na saída do módulo. Cores mais escuras refletem menos a luz, e consequentemente geram menos variação de sinal. O contrário acontece com as cores claras.
Ajuste os valores da variável nivel_sinal para adequar a sensibiidade do sensor às necessidades do seu projeto, ou ainda inclua outras variáveis para testar diferentes níveis de luminosidade.
Postado por Arduino e Cia às 09:04 Um comentário:
Marcadores: IR, modulos, sparkfun
Detectando campos magnéticos com o Sensor Hall KY-003
Sensor de campo magnético hall é um sensor que usa o efeito hall para detectar a aproximação de um campo magnético do sensor, gerando em sua saída um valor analógico ou digital, dependendo do tipo de construção do módulo.
Existem diversos tipos de sensor hall para utilização com Arduino. Alguns deles detectam a variação e intensidade do campo magnético e transferem essas informações ao pino de sinal de forma analógica, permitindo medir essa variação de forma confiável e precisa.
Outros trabalham apenas com a saída de forma digital, que é o caso do Sensor Hall KY-003 que eu testei. Aproxime um ímã do sensor e você terá o valor 0 no pino de saída. Na ausência de campo magnético, o valor se manterá estável em 1.
Desta forma, o funcionamento é o mesmo de qualquer outro sensor ou botão que utilizamos com o Arduino : ligamos o pino de sinal do módulo sensor hall à uma porta digital, e tomamos uma ação de acordo com o estado 0 ou 1 dessa porta.
Esse tipo de sensor é ideal para configurações onde não há possibilidade ou necessidade de contato, como em um medidor de RPM de um motor ou um sistema de alarmes.
Esse módulo pode ser alimentado (pino central) com os próprios 5v do Arduino (tensão máxima suportada pelo módulo é de 24v DC). Conecte o pino da esquerda (-) ao GND e o pino da direita (S) à porta digital do seu Arduino. Um led no lado esquerdo da placa indica a presença de sinal no pino de saída:
O programa que utilizei para testar esse circuito é o mesmo que já usei no artigo Ligando uma lâmpada com relé e push-button, com pequenas alterações quanto às portas. A cada acionamento do sensor hall, o estado do led é invertido e permanece assim até que o sensor seja novamente acionado :
// Programa : Teste de acionamento Sensor Hall KY-003
// define a porta para o acionamento do led
// Porta ligada ao pino SINAL do sensor
int pinosinal = 4;
// Armazena informações sobre a leitura do sensor
// Armazena o estado do led (ligado/desligado)
//Define o pino do led como saida
//Define o pino do sensor hall como entrada
while(digitalRead(pinosinal) != 1)
digitalWrite(pinoled , estadoled);
Postado por Arduino e Cia às 00:01 14 comentários:
Marcadores: led, sensor hall, sensores
Conforme prometido no artigo Controlando motores DC com o Arduino Motor Shield L293D, hoje vou apresentar o esquema de funcionamento desse shield com o nosso também já conhecido Motor de Passo 28BYJ-48 Arduino (foto abaixo).
Atualizado : Controle também servo motores com o Motor Shield L293D. Veja no artigo Controlando servo motor com o Motor Shield L293D.
O motor de passo 28BYJ-48 funciona com alimentação de 5V e possui uma redução de 1/64. Essa redução faz com que o número de passos necessários para que o motor dê uma volta completa seja de 4096, ou no modo de ativação de 4 passos, esse número cai pela metade, para 2048.
"Peraí, modo de ativação de 4 passos ? O que é isso ?"
O motor de passo pode funcionar em 2 modos de ativação : 8 passos (half-mode) ou 4 passos (full step). No modo de ativação de 8 passos, a sequência de acionamento das bobinas segue a tabela abaixo. Primeiro é acionada uma bobina, depois duas, depois uma, depois duas novamente, e assim por diante, até se completarem os 8 passos :
Já no modo de 4 passos, são acionadas 2 bobinas de cada vez, o que reduz o número de acionamentos necessários para movimentar o motor :
O modo de acionamento de 4 passos é utilizado pela biblioteca padrão do Arduino, e teoricamente imprime mais força ao motor, já que sempre teremos duas bobinas sendo acionadas ao mesmo tempo.
Relembrando um pouco sobre o funcionamento do Motor Shield L293D, vimos que ele pode controlar 2 servos, e até 4 motores DC ou 2 motores de passo. Para controlar motores de passo, utilizamos os conectores laterais, os mesmos usados para controlar motores DC :
Vamos ligar não só um, mas dois motores de passo 28BYJ-48 nessa placa (muito útil para um robô, não ?). Atenção para a ordem de ligação dos fios desse motor, que deve ser a mesma do circuito abaixo. A alimentação será feita por meio dos 5V do próprio Arduino Uno, que usaremos nos testes, por isso vamos manter o jumper PWR na placa.
A biblioteca utilizada para controlar os motores de passo é a AFMotor, que você pode baixar nesse link. Descompacte o arquivo, renomeie a pasta para AFMotor e coloque-a dentro da pasta LIBRARIES da IDE do seu Arduino.
Para controle de motor de passo, os principais comandos do programa são :
AF_Stepper nome(passos, porta) - Define o nome dado ao motor de passo, o número total de passos desse motor (para dar uma volta completa) e a porta à qual esse motor está ligado. A porta pode ter o valor 1 para motores ligados no conector do lado esquerdo (M1 / GND / M2), ou o valor 2 para motores ligados no conector do lado direito (M3 / GND / M4)
nome.step(numero_passos, direção, tipo_passo) - São os comandos de movimentação do motor identificado por nome. Numero_passos é a quantidade de passos que o motor vai girar ao executar o comando. Os comandos de direção podem ser o FORWARD (gira o motor no sentido horário) ou BACKWARD (gira o motor no sentido anti-horário). Tipo_passo determina de que maneira as bobinas serão acionadas, sendo que pode ser definido como SINGLE (uma bobina por vez), DOUBLE (duas bobinas por vez), INTERLEAVE (alternando entre 1 e 2 bobinas, aumentando a precisão) e MICROSTEPPING, que rotaciona o motor de uma forma mais suave e precisa. Não são todos os motores de passo que aceitam os modos INTERLEAVE e o MICROSTEPPING.
O programa gira os dois motores de passo, alternadamente, um em cada direção. A cada ciclo, o motor se move na quantidade de graus definida na variável angulo, no início do programa.
O funcionamento dessa ligação e do programa apresentados você confere no vídeo abaixo :
Falta agora o controle de Servo Motor com esse shield. Assunto para um próximo post. Até lá !
Postado por Arduino e Cia às 09:00 49 comentários:
Marcadores: 28BYJ-48, L293D, motor de passo, motores, shield
A maioria dos sensores IR que eu testei tem um alcance limitado, de apenas alguns centímetros. São ideais para pequenos projetos, maquetes e simulações.
Um sensor um pouco mais, digamos assim, profissional, é este sensor de proximidade infravermelho, que funciona da mesma maneira que os outros sensores IR mas tem algumas características que facilitam a montagem do seu projeto :
Esse sensor funciona basicamente como todos os outros sensores IR : existe um led emissor IR e um receptor IR, tudo no mesmo componente. As diferenças estão na montagem do sensor e na distância de detecção, que pode variar de 3 à 80 cm, ajustáveis por um parafuso na parte de trás do sensor :
Girando o parafuso no sentido horário ou anti-horário, você aumenta ou diminui, respectivamente, a sensibilidade do sensor. O componente tem 45mm de comprimento e um diâmetro de 17mm, e vem com duas porcas que facilitam a montagem nos mais variados tipos de suporte.
A cabo de ligação do sensor tem 3 pinos, sendo o pino vermelho o Vcc (alimentação de 5 volts), amarelo o pino de sinal, e o preto, o GND. A leitura pode ser feita por meio de uma porta digital ou analógica do Arduino, dependendo do seu projeto.
O funcionamento, como eu comentei, é igual ao de outros sensores IR : o led emite luz infravermelha, que dependendo da superfície é refletida e volta para ser detectada pelo fototransistor, enviando um sinal de 0,3 à 1,5v em nível baixo, e de 2,3 à 5v em nível alto, ao pino de sinal.
Eu utilizei esse sensor para montar um contador que registra a passagem de caixas em uma esteira. A cada 10 caixas, é emitido um sinal sonoro para que o operador do equipamento tome algum tipo de ação :
Os dados são enviados para o serial monitor, apenas para monitoramento do contador, mas um display LCD ou 7 segmentos pode ser facilmente adaptado ao projeto.
O comando while(digitalRead(pinosensor) != 1) evita que o contador seja incrementado caso um objeto pare em frente ao sensor :
// Programa : Contador com sensor de proximidade IR
int pinosensor = 5;
int pinobuzzer = 7;
//Define o pino do sensor como entrada, e o do buzzer como saida
Serial.print("Contador : ");
//Se o contador atingir 10, aciona o buzzer
tone(pinobuzzer,262,500);
//Loop caso o objeto pare na frente do sensor
Abaixo, um vídeo demonstrativo do sensor com um contador até 5 :
Postado por Arduino e Cia às 13:08 46 comentários:
Marcadores: contador, IR, sensores
Aquele seu projeto está ficando grande demais e com muitos motores para controlar ? Talvez seja a hora de partir para um controlador de motores integrado, como o Arduino Motor Shield L293D :
Esse shield é compatível com Arduino Uno e Arduino Mega, possui dois chips L293D, cada um composto por 2 pontes H (um conceito que já abordamos no artigo Controle de motor CC com o L293D - Ponte H), além de um CI 74HC595. Tudo isso para controlar até 4 motores DC, 2 Servos (alimentados por 5v) ou 2 motores de passo. Lembrando que a corrente máxima suportada por cada L293D é de 600 mA, com picos de 1.2A.
Nas laterais da placa temos os terminais (com parafusos) para conexão dos motores DC ou motores de passo. Na parte superior esquerda, conectores de 3 pinos permitem a conexão de até 2 servos. Um led na parte central da placa indica não só o funcionamento do shield como também que há alimentação para os motores :
A tensão de entrada pode variar de 4,5 à 25 Vcc. Para utilização de alimentação externa, não se esqueça de retirar o jumper PWR.
Como a maioria dos shields, você tem à disposição os pinos que sobram quando você não está controlando motores, obviamente, e também alguns pinos que estão sempre disponíveis :
Pinos disponíveis : os pinos analógicos de A0 a A5, que também podem ser utilizados como pinos digitais 14 a 19. Também estão disponíveis os pinos 2 e 13.
Pinos utilizados para controle de motores DC e motores de passo : 11,3,5 e 6, além dos pinos 4,7, 8 e 12.
Pinos utilizados para controle de servo motores : pinos 9 (servo 1) e 10 (servo 2)
Para utilizar os pinos que sobram, você pode soldar uma barra de pinos ao shield nos furos correspondentes, como fizemos no nosso shield :
Essa é uma visão geral sobre a estrutura desse shield. Para utilizá-lo com o Arduino, precisaremos da biblioteca AFMotor, disponível nesse link.
Quando você descompacta o arquivo, é criada uma pasta chamada adafruit-Adafruit-Motor-Shield-library-4bd21ca. Renomeie essa pasta simplesmente para AFMotor, e coloque-a dentro da pasta LIBRARIES da IDE do seu Arduino.
Se você quiser controlar 2 motores DC de 5 volts, por exemplo, utilize alimentação externa e monte o circuito da seguinte maneira :
O programa abaixo gira cada motor em um sentido diferente, e depois de 5 segundos inverte essa rotação. Os principais comandos utilizados são :
motor.setSpeed(velocidade) - Ajusta a velocidade de rotação do motor, podendo ser um valor entre 0 (mínimo) e 255 (máximo)
motor.run(sentido) - Aciona o motor. A variável sentido pode ter o valor FORWARD (move o motor no sentido horário), BACKWARD (sentido inverso/anti-horário) ou RELEASE, que determina a parada do motor :
// Programa : Arduino Motor Shield - Controle motores DC
Em um próximo artigo, vamos mostrar como controlar um motor de passo utilizando o Arduino Motor Shield L293D. Até lá !