Escolar Documentos
Profissional Documentos
Cultura Documentos
Arduino
Conversor
Serial ↔ USB
Jack
USB
Cristal
CPU
Fonte de Atmel
alimentação
Microcontrolador
Jack
Alimentação
https://lucinio.wixsite.com/lucinioprezaaraujo Página 2
Arquitetura do Arduino
O microcontrolador
https://lucinio.wixsite.com/lucinioprezaaraujo Página 3
Arduino uno - Caraterísticas
• Microcontrolador: ATmega328
• Tensão de operação: 5V
• Tensão recomendada (entrada): 7-12V
• Limite da tensão de entrada: 6-20V
• Pinos digitais: 14 (seis pinos com saída PWM)
• Entrada analógica: 6 pinos
• Corrente contínua por pino de entrada e saída: 40 mA
• Corrente para o pino de 3.3 V: 50 mA
• Quantidade de memória FLASH: 32 KB (ATmega328) onde 0.5 KB usado para o
bootloader
• Quantidade de memória SRAM: 2 KB (ATmega328)
• Quantidade de memória EEPROM: 1 KB (ATmega328)
• Velocidade de clock (cristal): 16 MHz
https://lucinio.wixsite.com/lucinioprezaaraujo Página 4
Software
Arduino IDE
As principais funcionalidades
do IDE do Arduino são:
- Escrever o código do
programa
- Compilar um programa
- Transportar o código
compilado para a placa do
Arduino
https://lucinio.wixsite.com/lucinioprezaaraujo Página 5
Ciclo de desenvolvimento
Funções base
void setup() - Esta função apenas é executada uma vez e é normalmente utilizada
para executar a inicialização de variáveis, a inicialização da utilização bibliotecas, a
definição dos pinos (como input ou output), o início do uso de comunicação série, entre
outros. Esta função apenas volta a ser executada novamente ao ser efectuado o reset
ou quando se desligar e volta a ligar a placa de desenvolvimento Arduino.
void loop() - Esta função faz um “loop” sucessivo (como o próprio nome indica), ou
seja, todos os comandos existentes no interior desta função são sucessivamente
repetidos, o que pode permitir a leitura sucessiva de portas, a leitura sucessiva de
parâmetros provenientes de sensores externos e actuar de acordo com as condições
estabelecidas.
https://lucinio.wixsite.com/lucinioprezaaraujo Página 6
Programar no Arduino
Comentários
Constantes
https://lucinio.wixsite.com/lucinioprezaaraujo Página 7
Portas digitais
As portas digitais trabalham com valores bem definidos, ou seja, no caso do Arduino
esses valores são 0V e 5V.
0V indica a ausência de um sinal e 5V indica a presença de um sinal.
Para escrever numa porta digital basta utilizar a função digitalWrite(pin, estado).
Para ler um valor numa porta digital basta utilizar a função digitalRead(pin).
Saídas PWM
O que é PWM?
Entradas analógica
Portas Analógicas
https://lucinio.wixsite.com/lucinioprezaaraujo Página 8
Programar no Arduino
Para definir uma porta como entrada ou saída é necessário explicitar essa situação
no programa.
A função pinMode(pin, estado) é utilizada para definir se a porta será de entrada ou
saída de dados.
Exemplo:
Programa explicado
/*
-----------------------------------
1º Exercício
-----------------------------------
Ligar e desligar um LED por um segundo
*/
//------------------------------------
//Função principal
//------------------------------------
void setup() // Executa-se quando o arduino é ligado
{
pinMode(13,OUTPUT); // Inicializa o pin 13 como uma saída
}
//------------------------------------
//Função repetitiva
//------------------------------------
void loop() // Esta função executa-se o instante todo
// quando está ligado o Arduino
{
digitalWrite(13,HIGH); // Liga o LED
delay(1000); // Temporiza um segundo (1s = 1000ms)
digitalWrite(13,LOW); // Desliga o LED
delay(1000); // Temporiza um segundo (1s = 1000ms)
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 9
Programar no Arduino
https://lucinio.wixsite.com/lucinioprezaaraujo Página 10
Shields
Possivelmente algum dia vai precisar de adicionar uma biblioteca para trabalhar com
algum sensor ou outro componente no Arduino. Existem diversas bibliotecas
disponíveis na internet, que pode baixar e utilizar. Entretanto tem que adicioná-las ao
seu IDE para que o mesmo reconheça os comandos que está a utilizar.
Para mostrar como proceder, vamos adicionar a biblioteca MsTimer2.h como exemplo.
Primeiro vamos baixá-la na página do Arduino
(http://arduino.cc/playground/Main/MsTimer2). Feito isso, descompacte o arquivo.zip
que foi baixado. Agora vá até à pasta onde “instalou” o seu IDE para o Arduino e
procure pela pasta libraries. Dentro deste diretório copie a pasta que foi extraída
anteriormente.
Por fim, vamos verificar se a biblioteca foi mesmo detectada pelo IDE. Vá a Files >
Examples e verifique se a biblioteca que acabamos de adicionar está ali. Se sim, a
instalação ocorreu bem e já pode começar a utilizar a sua nova biblioteca. Agora é só
“chamá-la” no seu código, que neste caso ficaria: #include <MsTimer2.h>. Vale a pena
destacar que na própria página onde baixou a biblioteca, possui as instruções de como
utilizar a mesma.
https://lucinio.wixsite.com/lucinioprezaaraujo Página 11
Exercícios propostos
5.Melhore seu protótipo adicionando um atuador sonoro, que avisa caso a senha esteja
errada, caso ela esteja certa, e denuncie, caso alguém erre a senha mais de três vezes
Utilize sons diferentes para cada caso.
Fontes de informação
Biblioteca MsTimer2
http://arduino.cc/playground/Main/MsTimer2
https://lucinio.wixsite.com/lucinioprezaaraujo Página 12
Exercícios no Arduino
https://lucinio.wixsite.com/lucinioprezaaraujo Página 13
/*
Liga e desliga um LED por um segundo
*/
//------------------------------------
//Função principal
//------------------------------------
void setup() // Executa-se quando o arduino é ligado
{
pinMode(13,OUTPUT); // Inicializa o pin 13 como uma saída
}
//------------------------------------
//Função repetitiva
//------------------------------------
void loop() // Esta função se executa o instante todo
// quando este ligado o Arduino
{
digitalWrite(13,HIGH); // Liga o LED
delay(1000); // Temporiza um segundo (1s = 1000ms)
digitalWrite(13,LOW); // Desliga o LED
delay(1000); // Temporiza um segundo (1s = 1000ms)
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 14
/*
-----------------------------------
Liga um LED com um botão
-----------------------------------
*/
//------------------------------------
//Declara os portos de entradas e saídas
Variável do tipo int
//------------------------------------ Descrição: Este tipo de variável
int botao=2; //Pino onde se encontra o botão, entrada (integer) permite guardar um valor
int led=13; //Pino onde se encontra o LED, saída inteiro.
//------------------------------------ Sintaxe:
int variável = valor
//Função principal
//------------------------------------
void setup()
{
pinMode(botao, INPUT); //Configura a entrada digitalRead()
pinMode(led,OUTPUT); //Configurar a saída Descrição: Possibilita a leitura de
} uma entrada digital específica,
retornando um valor no formato
//------------------------------------ integer (int). Se obtivermos um
//Função cíclica valor de retorno de “1”, estamos
//------------------------------------ perante uma leitura do tipo
void loop() “HIGH” (valor lógico 1). Se tal não
se verificar, e tivermos um valor
{
de retorno igual a “0”, estamos
//Condicional para saber o estado do botão perante uma leitura do tipo “LOW”
if (digitalRead(botao)==HIGH) (valor lógico 0).
{ Ciclo If…….else
//Botão pressionado É utilizado para descrever uma
condição, ou seja, quando uma
digitalWrite(led,HIGH); //Liga o LED variável for: igual, maior, menor ou
} diferente (de acordo com a
else declaração efectuada) a um
{ determinado valor é executada uma
//Botão NAO pressionado determinada condição. Podem-se
usar vários ciclos if….else
digitalWrite(led,LOW); //desliga o LED encadeados, de forma a verificar
} diversas condições.
5V DC
https://lucinio.wixsite.com/lucinioprezaaraujo Página 15
/*
--------------------------------------
Leitura serial de uma entrada digital
--------------------------------------
Lê uma entrada digital e apresenta no ecrã do computador (console serial) o estado do botão
quando é pressionado.
*/
//------------------------------------
//Declara os pinos de entradas e saídas
//------------------------------------
int botao=2;
//------------------------------------
//Função principal
//------------------------------------
void setup()
{
//Configuração
Serial.begin(int baud rate)
pinMode(botao,INPUT); //Configura o botão como entrada
Descrição: Instrução
Serial.begin(9600); //Inicia a comunicação serial necessária para iniciar a
} comunicação série,
//------------------------------------ permitindo definir qual a
//Função cíclica “baud rate” da comunicação.
Os valores de velocidade de
//------------------------------------ comunicação mais comuns
void loop() para comunicação com um
{ computador são: 300, 1200,
//salva em uma variável inteira o valor do botão 0 ou 1 2400, 4800, 9600, 14400,
int estado = digitalRead(botao); 19200, 28800, 38400,
57600 e 115200 (No entanto
//Condicional para saber o estado do botão podem definir-se outros
if (estado==1) valores).
{ Sintaxe:
// pressionado Serial.begin( int baud rate);
Serial.print("Ligado"); //Imprime na consola serial
}
else Serial.print()
{ Descrição: Instrução que
// Não está pressionado permite o envio de dados
pela porta série.
Serial.print("desligado"); Sintaxe:
} Serial.print(dado a enviar);
delay(100);//Retardo para visualizar os dados no ecrã.
}
Cabo
USB B – RS232
USB
5V DC
https://lucinio.wixsite.com/lucinioprezaaraujo Página 16
/*
--------------------------------------
Leitura serial de uma entrada analógica
--------------------------------------
Lê uma entrada analógica e apresenta no ecrã do computador
(console serial) o valor do potenciómetro
*/
//------------------------------------
//Função principal
//------------------------------------
void setup()
{
Serial.begin(9600); //Inicia comunicação serial
}
//------------------------------------
//Função repetitiva
//------------------------------------
void loop()
{
//Guarda numa variável inteira o valor do potenciómetro
0 a 1024
int valor= analogRead(A0);
//Imprime na console serial o valor da variável
Serial.print(valor);
//Atraso para a visualização dos dados no ecrã
delay(100);
}
analogRead()
Descrição: Possibilita a leitura do valor analógico do pino especificado, com um conversor A/D possuindo uma
resolução de 10 bits. O que leva a que um valor compreendido entre 0 e 5 V, esteja compreendido entre os valores
inteiros (int) 0 e 1023.
Sintaxe:
Variável do tipo integer = analogRead(Número do pino)
Porta
Série
USB
5V
DC
https://lucinio.wixsite.com/lucinioprezaaraujo Página 17
/*
--------------------------------------
Escrita serial
--------------------------------------
Escrever no ecrã do computador (console serial) uma letra predefinida, a primeira vez
que seja escrita ligará um led, se é reescrita pela segunda vez o led é desligado
*/
//--------------------------------------------------
//Declara os portos de entrada e saídas e variáveis
//--------------------------------------------------
int led = 13; //Pino onde se encontra o LED, saída
char letra; //Variável onde se guarda a letra
boolean ligado=false; //Estado do LED a primeira vez, desligado
//------------------------------------
//Função principal
//------------------------------------
void setup()
{
Serial.begin(9600); //Inicia comunicação serial
pinMode(led, OUTPUT); //Configura o LED como uma saída
}
//------------------------------------
//Função cíclica
//------------------------------------
void loop()
{
//Guarda numa variável o valor da console serial
letra=Serial.read();
// Se é a letra 'L' e o LED está desligado
if ( (letra=='L') && (ligado==false) )
{
digitalWrite(led,HIGH); // liga o LED
ligado=true; // Atualiza o estado do LED
}
// Se é a letra 'L' e o LED está ligado
else if ( (letra=='L') && (ligado==true) )
{
digitalWrite(led,LOW); // desliga o LED
ligado=false; // Atualiza o estado do LED
}
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 18
/*
---------------------------------------------
Liga/desliga um LED de forma proporcional
---------------------------------------------
Programa que liga proporcionalmente um LED quando chega ao seu ponto máximo de
intensidade começa a desligar proporcionalmente.
*/
//--------------------------------------------------
//Declara os portos de entradas, saídas e variáveis
//--------------------------------------------------
int brilho = 0; //Variável de brilho inicia em 0
int variacao = 5; //Variável de incremento configurada de 5 em 5
int led = 9; //Pino onde se encontra o LED, saída
//------------------------------------
//Função principal
//------------------------------------
void setup ()
{
pinMode(led, OUTPUT); //Configura o LED como uma saida
}
//------------------------------------
//Função cíclica
//------------------------------------
void loop ()
{
// Escrita analógica (PWM) no LED escrevo o valor de brilho
analogWrite(led, brilho);
// Incremento a variável brilho de 5 em 5
brilho = brilho + variacao;
// Notação: PWM ----> 0 - 255
// Se o brilho é 0 o 255
if (brilho == 0 || brilho == 255)
variacao = -variacao; //a variação se volta negativa
delay (30); //Tempo de incremento no brilho
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 19
/*
---------------------------------------------
Controle ON/OFF com potenciómetro
---------------------------------------------
Programa que liga um LED quando o valor da entrada analógica comandada pelo
potenciómetro está em determinado valor, quando este valor varia o LED desliga-se,
correspondendo a um sistema com controlo ON/OFF
*/
//------------------------------------
//Função principal
//------------------------------------
void setup()
{
Serial.begin(9600); //Inicia comunicação serial
pinMode(13,OUTPUT); //Configura o pin 13 como uma saída
}
//------------------------------------
//Função cíclica
//------------------------------------
void loop()
{
//Salva em uma variável o valor da leitura analógica
int valor = analogRead(A0);
Serial.println(valor); //Imprime o valor pela console
//Se o valor é maior o igual a 500
if (valor >= 500)
{
digitalWrite(13,HIGH); //Liga o LED no pino 13
}
//Se o valor é menor a 500
else
{
digitalWrite(13,LOW); //Desliga o LED no pino 13
}
delay(100); //Retardo de 100ms para obter os dados da consola
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 20
/*
---------------------------------------------
Controle de intensidade de um LED
---------------------------------------------
Programa que liga um LED de maneira proporcional de acordo à quantidade de luz que
incida numa fotoresistência LDR.
*/
//------------------------------------
//Função principal
//------------------------------------
void setup()
{
Serial.begin(9600);
pinMode(9,OUTPUT); //Configura o pin 9 como una saida,PWM
}
//------------------------------------
//Função cíclica
//------------------------------------
void loop()
{
//salva em uma variável o valor da leitura analógica da LDR
int foto = analogRead(A0);
//Verifica o valor máximo e realiza uma conversão
int conversao = 780 - foto;
//Condicional para estabelecer um valor absoluto
if ( conversao < 0)
conversao = conversao * -1; //Multiplica por -1 por que é negativo
//Imprimir dados do valor da leitura analógica da LDR
Serial.print("LDR : ");
Serial.print(foto);
Serial.println("");
//Imprimir dados do valor da conversão
Serial.print("Conv : ");
Serial.print(conversao);
Serial.println("");
//Escrita analógica de PWM no LED de acordo à conversão
analogWrite(9, conversao);
delay(100); //Retardo para dados na console
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 21
/*
---------------------------------------------
Contador de pulsos
---------------------------------------------
Programa que apresenta no ecrã (console serial) o número de vezes que o botão tem
sido premido, realiza-se um processo que de acordo com o número de vezes que o
botão foi premido se liga um LED.
*/
//--------------------------------------------------
//Declara os portos de entradas, saídas e variáveis
//--------------------------------------------------
int conta = 0; //Variável para salvar o centeio dos pulsos
//------------------------------------
//Função principal
//------------------------------------
void setup() /
{
Serial.begin(9600);
pinMode(2,INPUT); //Configura o pino 2 como uma entrada, botão
pinMode(13,OUTPUT); //Configura o pino 13 como uma saída, LED
}
//------------------------------------
//Função cíclica
//------------------------------------
void loop()
{
// Se o botão esta oprimido
if ( digitalRead(2) == HIGH )
{
// Se o botao não esta oprimido, flanco de baixada
if ( digitalRead(2) == LOW )
{
conta++; //Acrescenta o contador
Serial.println(conta); //Imprime o valor pela console
delay (100); // Retardo
}
}
// Se o valor do contador é 5
if (conta==5)
{
digitalWrite(13,HIGH); //Liga o LED
}
// Se o valor do contador é 8
if (conta==8)
{
digitalWrite(13,LOW); // Desliga o LED
}
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 22
/*
---------------------------------------------
Interruptor magnético para gerar um alerta
---------------------------------------------
Programa que gera uma alarma visual com um LED a partir de um campo magnético
gerado por um reed switch.
*/
int contato = 2; //Pino assignado ao reed switch
int led= 13; //Pino assignado ao LED
//------------------------------------
//Função principal
//------------------------------------
void setup()
{
pinMode(contato,INPUT); //O reed switch como uma entrada
pinMode(led, OUTPUT); //o LED como uma saída
}
//------------------------------------
//Função cíclica
//------------------------------------
void loop()
{
// Se o íman se aproxima ao reed switch
if (digitalRead(contato)==LOW){
//Ciclo for que vai de 0 a 50, o contador esta
//na variable a, se repete se é menor de 50
for(int a=0; a<50; a++){
digitalWrite(led,HIGH); //Liga o LED
delay(50); //Tempo
digitalWrite(led,LOW); //Desliga o LED
delay(50); //Tempo
}
// Se o íman esta longe do reed switch
}else{
digitalWrite(led,LOW); //Mantém desligado o LED
}
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 23
/*
---------------------------------------------
Controle básico de um LED RGB – semáforo
---------------------------------------------
Programa que gera uma alarma visual com um LED a partir de um campo magnético
gerado por um reed switch.
*/
//--------------------------------------------------
//Declara portos de entradas, saídas e variáveis
//--------------------------------------------------
int ledDelay = 10000; // retardo para o cambio de luz
int vermelhoPino = 10;
int amareloPino = 9;
int verdePino = 8;
//------------------------------------
//Função principal
//------------------------------------
void setup() {
pinMode(vermelhoPino, OUTPUT);
pinMode(amarelhoPino, OUTPUT);
pinMode(verdePino, OUTPUT);
}
//------------------------------------
//Função cíclica
//------------------------------------
void loop() {
digitalWrite(vermelhoPino, HIGH); // liga a luz vermelha
delay(ledDelay); // aguarda 5 seg
digitalWrite(amareloPino, HIGH); // liga a luz amarela
delay(2000); // aguarda 2 seg
digitalWrite(verdePino, HIGH); // liga a luz verde
digitalWrite(vermelhoPino, LOW); // desliga a luz vermelha
digitalWrite(amareloPino, LOW); // desliga a luz amarela
delay(ledDelay); // aguarda o ledDelay
digitalWrite(amareloPino, HIGH); // liga a luz amarela
digitalWrite(verdePino, LOW); // desliga a luz verde
delay(2000); // aguarda 2 seg
digitalWrite(amareloPino, LOW); // desliga a luz amarela
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 24
/*
---------------------------------------------
Controle ON/OFF de um motor
---------------------------------------------
Programa que faz uso de um motor e um botão, Se é mantido pressionado, o motor
deve estar ligado (ON) se não deve estar desligado (OFF)
*/
//--------------------------------------------------
//Declara portos de entradas, saídas e variáveis
//--------------------------------------------------
int botao=7; //Declara Pino do botão
int motor=3; //Declara Pino do motor
//------------------------------------
//Função principal
//------------------------------------
void setup()
{
pinMode(botao,INPUT);
pinMode(motor,OUTPUT);
}
//------------------------------------
//Função cíclica
//------------------------------------
void loop()
{
// Se o botao se encontra premido
if(digitalRead(botao) == HIGH){
digitalWrite(motor,HIGH); //liga o motor
}else{ //se o botao não esta premido
digitalWrite(motor,LOW); //desliga o motor
}
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 25
/*
---------------------------------------------
Controle por PWM de um motor
---------------------------------------------
Programa que faz uso de um motor e a Console serial de Arduino, tem a possibilidade de
configurar o motor em 5 velocidades distintas, desde o teclado do PC pode-se enviar a
velocidade desejada. As 5 velocidades configuram-se com 5 PWM distintos.
*/
//--------------------------------------------------
//Declara portos de entrada, saídas e variáveis
//--------------------------------------------------
int motor=3; //Declara Pino do motor
//------------------------------------
//Função principal
//------------------------------------
void setup()
{
Serial.begin(9600);
}
//------------------------------------
//Função cíclica
//------------------------------------
void loop()
{
// Se tem algum valor na consola serial
if (Serial.available()){
//Variável onde se salva o caráter enviado desde o teclado
char a = Serial.read();
// Se o caráter ingressado esta entre 0 e 5
if (a>='0' && a<='5'){
//Variável para escalar o valor ingressado na faixa de PWM
int velocidade = map(a,'0','5',0,255);
//Escrita de PWM ao motor
analogWrite(motor,velocidade);
//Mensagem para o usuário
Serial.print("o motor esta girando à velocidade ");
Serial.println(a);
}else{ // Se o caráter ingressado não esta entre 0 e 5
//Mensagem para o usuário
Serial.print("Velocidade invalida");
Serial.println(a);
}
}
}
Fonte: http://arduino.labdegaragem.com/
https://lucinio.wixsite.com/lucinioprezaaraujo Página 26
Montagem prática com o
Arduino
https://lucinio.wixsite.com/lucinioprezaaraujo Página 27
Robô
detetor de obstáculos
https://lucinio.wixsite.com/lucinioprezaaraujo Página 28
Fonte: https://uriedubot.wordpress.com/
Introdução ao projeto
A ideia do projeto surgiu de estudos realizados por mim sobre programação, robótica e a placa
Arduino.
Arquitetura do robô
O projeto será composto por apenas cinco componentes de hardware: os dois motores
de 4,5 V DC / 250 mA, o sensor ultra-sónico SRF05 de 5 V / 4mA, o Arduino Uno e
uma Arduino shield MotoMama – L298 de 5 V para realizar a ligação/controlo dos
motores.
O Arduino serve como ponte entre o sensor ultra-sónico e os atuadores (motores), transmitindo-
lhes as instruções provenientes do firmware/software.
A comunicação entre a interface de controlo e o dispositivo dá-se através de uma ligação serial
padrão.
https://lucinio.wixsite.com/lucinioprezaaraujo Página 29
Os motores DC (4,5 V / 250 mA)
https://lucinio.wixsite.com/lucinioprezaaraujo Página 30
Sensor ultrasónico (SRF05 de 5 V / 4mA)
https://lucinio.wixsite.com/lucinioprezaaraujo Página 31
A ponte H utilizada para inverter a rotação do motor é um circuito bem simples composto
por 4 interruptores, um motor e uma fonte de energia.
https://lucinio.wixsite.com/lucinioprezaaraujo Página 32
As ligações
A complexidade de um robô passa pelas dificuldades dos projetos mecânicos e elétricos, mas o
principal desafio é, com certeza, dar ao dispositivo a “inteligência” necessária para que ele possa
desempenhar as suas tarefas.
O projeto usa a plataforma open-source Arduino.
Os pinos de saída digital
(output) 3, 4, 9. 5, 6 e 10
do Arduino são ligados
nos pinos de entrada
(input) da shield Arduino
para fazer o acionamento
dos motores.
Para ligar o Arduino com
o sensor ultrasónico são
ligados os pinos digitais
13 e 12 do Arduino com
os pinos “Trig” e “Eco”
do sensor ultra-sónico.
Detalhes sobre as ligações entre os equipamentos podem ser observados na seguinte tabela.
9 V DC Jack power
5 V DC 5 V DC 5 V supply
Pino 12 Echo (output)
Entrada digital
Pino 13 Trigger (input)
Saída digital
6 V DC Vin
Controla a
Pino 10 (PWM) EnA corrente para o
motor
Porta de
Pino 5 In1 entrada Roda para a
(porta digital) de A direita
https://lucinio.wixsite.com/lucinioprezaaraujo Página 33
9V Arduino Uno
DC
SRF-05
5 V DC
Echo
Trigger
10
5V
9
0V
GND
D
6
5
4
3
Motores DC
6V
DC
In4
In3
EnB
EnA
In2
In1
https://lucinio.wixsite.com/lucinioprezaaraujo Página 34
O programa – Firmware
Códigos
Sketch
void setup()
{
Serial.begin(9600); // Permite a inicialização da comunicação Série - USB.
setupMove(); // Chamada de função que seta os pinos dos motores com saída
(OUTPUT). E prepara os motores colocando os pinos em LOW – baixo.
setupUltrasonic(); //Seta os pinos do Sensor ultrasónico e prepara o pino
trigger em LOW – baixo
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 35
void loop()
{
unsigned int d; // declara um inteiro e faz com que só suporte números
positivos.
moveFrente(); // Função para mover motores para frente
d = leDistancia(); // a variável d recebe o retorno da função leDistancia
Serial.println(d, DEC); // Imprime no serial monitor a distância.
if (d <= 20) // verifica se a distância é menor que 20 cm
{
moveTras(); // função para mover para trás
delay(500); // metade de um segundo – em 1 segundo existem 1000
milissegundos.
moveEsquerda(); // função para mover para esquerda
delay(200); // 200 milissegundos
}
analogWrite(DIR_VEL, NORMAL_VEL);
digitalWrite(DIR_PIN1, LOW);
digitalWrite(DIR_PIN2, HIGH);
}
analogWrite(DIR_VEL, NORMAL_VEL);
digitalWrite(DIR_PIN1, HIGH);
digitalWrite(DIR_PIN2, LOW);
}
analogWrite(DIR_VEL, NORMAL_VEL);
digitalWrite(DIR_PIN1, LOW);
digitalWrite(DIR_PIN2, HIGH);
}
analogWrite(DIR_VEL, NORMAL_VEL);
digitalWrite(DIR_PIN1, HIGH);
digitalWrite(DIR_PIN2, LOW);
}
analogWrite(DIR_VEL, PARA_VEL);
digitalWrite(DIR_PIN1, LOW);
digitalWrite(DIR_PIN2, LOW);
}
pinMode(DIR_VEL, OUTPUT);
pinMode(DIR_PIN1, OUTPUT);
pinMode(DIR_PIN2, OUTPUT);
analogWrite(DIR_VEL, PARA_VEL);
digitalWrite(DIR_PIN1, LOW);
digitalWrite(DIR_PIN2, LOW);
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 37
// Lê um pulso (HIGH ou LOW) em um pino. Retorna o comprimento do pulso em
microssegundos.
//pulseIn retorna (tempo de alto nível * velocidade do som (340M/S)/2).
return duracao/58; //retorna a divisão por 58 da duração para converter em
centímetro.
digitalWrite(TRIG, LOW);
}
https://lucinio.wixsite.com/lucinioprezaaraujo Página 38