You are on page 1of 9

 Carro controlado por Bluetooth

1. Roteiro de Trabalho Prático 01


O Arduino é uma plataforma de computação de fonte aberta (em inglês: open-source1), com base em uma
placa simples de entrada/saída (em inglês: Input/Output, ou I/O) baseada em um hardware flexível e um software
fácil de usar. A plataforma de fonte aberta permite você compartilhar, copiar, distribuir e transmitir o trabalho, além
de adaptar e fazer uso comercial da obra, desde que, você siga as seguintes condições: Atribuição: Você deve
atribuir o trabalho da forma especificada pelo autor da obra (Arduino); Compartilhamento pela mesma licença: Se
você alterar, transformar ou ampliar esta obra, só pode distribuir a sua obra resultante apenas sob a mesma licença
ou semelhante a esta.

2. Experimentos
Antes de iniciarmos um experimento é recomendado desgravar o seu Arduino. Isso é apenas uma boa
prática de eletrônica para evitar “queimar” seu circuito, uma vez que não sabemos que está gravado no seu Arduino.
Para isso, bastar gravar um sketch com as funções setup e loop vazias, como mostrado na Figura 1.

Figura 1. Desgravar o Arduino.

2.1. Montagem 01 – Piscar o LED interno da Placa do Arduino.

Toda prática com o Arduino nesse material será chamada de Montagem, pois geralmente teremos um
circuito para montar e um programa para desenvolver. Pensando um pouco como programador, o primeiro programa
criado por um iniciante em alguma linguagem de programação é o “Hello World!” ou “Olá Mundo!”. Em
microcontroladores, o primeiro programa “Hello World!” é piscar um LED. Vamos explorar a IDE de programação e
a interface de desenvolvimento do Arduino. Inicialmente, vamos piscar o LED da placa ARDUINO UNO ligado
internamente ao pino 13 do Arduino (Figura 2).

Figura 2. LED conectado no PINO 13 do Arduino UNO.

Execute o programa “arduino.exe” e familiariza-se com a interface de desenvolvimento (Figura 3). Ela
1
Página

permite que os programas sejam escritos, compilados e transferidos (via cabo USB) ao Arduino. Há duas funções
principais: setup() – configurações de hardware e software; loop() – programa a ser executado em um loop infinito.

1
GNU Operationg System. Hardware e Software: GNU GPL. Documentação: Creative Commons. Attribution-ShareAlike 2.5
Generic (CC BY-SA 2.5). Disponível em: http://creativecommons.org/licenses/by-sa/2.5/
Prof. Fernando Esquírio Torres
Apostila criada para fins didáticos. Proibido qualquer reprodução ou uso não autorizado.
 Profissão e Ação

Figura 3. Ambiente de programação do Arduino.

1) Considere o programa (sketch) da Figura 4 para piscar o LED interno ligado ao pino 13. Em laranja,
aparecem funções da biblioteca padrão do dispositivo e, em azul, variáveis pré-definidas e autoexplicativas, da
biblioteca. Veja os comentários no código.

2) Digite o código da Figura 4 e habitue-se a incluir comentários, como boa prática de programação.

/* Função: void setup()


* Entradas: Nenhuma (void)
* Saídas: Nenhuma (void)
* Descrição: Esta função é a primeira a rodar quando energizamos
* o Arduino. Contém as configurações do hardware.
*/
void setup () {
pinMode(13, OUTPUT); // Configura o pino 13 como saída digital
}// Fim do setup

/* Função: void loop()


* Entradas: Nenhuma (void)
* Saídas: Nenhuma (void)
* Descrição: Esta função é chamada após o término da função
* setup(). Contém a lógica principal do código.
*/
void loop () {
digitalWrite(13, HIGH); // Acende o LED ligado ao pino 13
delay(500); // Aguarda 0.5 segundo
digitalWrite(13, LOW); // Apaga o LED ligado ao pino 13
delay(500); // Aguarda 0.5 segundo
}// Fim do loop
Figura 4. Primeiro Programa Piscar o LED do pino 13.

3) Salve o programa com um nome representativo, como PRATICA_01_PISCAR_LED.

4) Compile ou “verifique” (✓) o código. No caso de sucesso, será exibida uma mensagem escrita com cor
branca na Área de Status (Figura 5). Caso contrário, haverá uma mensagem de erro em cor alaranjada, nesse caso
verifique linha por linha do seu código com o da Figura 4.
2
Página

Figura 5. Verificação com sucesso.


Prof. Fernando Esquírio Torres
Apostila criada para fins didáticos. Proibido qualquer reprodução ou uso não autorizado.
 Carro controlado por Bluetooth
5) Configure a porta de comunicação e o tipo de hardware Arduino.

i) Porta serial: conecte o Arduino em uma das portas USB e consulte “Painel de controle → Gerenciador de
Dispositivos → Portas (COM e LPT)” e descubra qual a porta de comunicação (por exemplo, COM5) utilizada. Em
seguida, configure a porta de comunicação na IDE do Arduino em “Tools → Serial Port”.

ii) modelo de placa Arduino. No computador que você está trabalhando já foi instalado o driver (para usar o a
plataforma Arduino em outro computador instale o driver conforme tutorial do Windows 7 ou Windows 8. Para
configurar a placa Arduino, na IDE faça ““Tools → Board → Arduino Uno”.

6) Grave o programa compilado na placa do Arduino, clicando no botão UPLOAD ().

Ao final da transferência do código para a placa do Arduino, uma mensagem


branca irá aparecer e os LEDs TX e RX (Figura 6) irão piscar rapidamente,
executando o código será automaticamente. Caso apareça alguma mensagem
da cor alaranjada, houve algum erro. Você verá que o LED interno ligado pino 13
ficará acesso enquanto a placa Arduino estiver energizada.
Figura 6. LEDs TX e RX.

2.2. Montagem 02 – Ponte H com Motor DC.

Ponte H é um circuito eletrônico que fornece a corrente necessária para o funcionamento de um motor, por
exemplo, motor DC, e também possibilita o controle do sentido de rotação do motor. Para obter a rotação em ambos
os sentidos, o que se faz é alterar o sentido de circulação da corrente aplicada ao motor, ou seja, basta alimentar
as bobinas com Vcc e GND. Para fazê-lo girar em sentido contrário, basta inverter o Vcc com o GND. E a melhor
forma de se fazer isso, sem a necessidade de recursos mecânicos como chaves e relés, é através de uma ponte H.

Na Figura 7 (a), pode-se verificar um Motor DC conectado a quatro chaves. É essa configuração que é
conhecida como uma ponte H, com a ponte de carga no centro.

(a) (b) (c)


Figura 7. Desenho esquemático de uma Ponte H.

Na Figura 7 (b), as chaves do canto superior esquerdo e do canto inferior direito estão fechadas. Dessa
forma, a corrente fluirá pelo motor, da esquerda para a direita, e o motor rotacionará. Caso abra essas chaves e
feche as chaves do canto superior direito e do canto inferior esquerdo (Figura 7 (c)), a corrente fluirá pelo motor na
direção oposta, fazendo com que ele rotacione também na direção oposta.

Atualmente, existem vários circuitos prontos para serem usados com microcontroladores em geral, esses
circuitos são chamados de Shields ou módulos. Em nossa prática, vamos usar o módulo Ponte H L298N (Figura 8),
que permite o controle de 2 motores DC ou um motor de passo.
3
Página

Figura 8. Módulo Ponte H L298N.


Prof. Fernando Esquírio Torres
Apostila criada para fins didáticos. Proibido qualquer reprodução ou uso não autorizado.
 Profissão e Ação

O módulo da ponte H L298N possui as seguintes características:

- Chip L298N - Módulo de 2 Canais


– Tipo: Ponte H de alta potência – Sinal de controle de entrada:
– Tensão de Operação: 7~35v > Nível Alto: 2.3v ≤ Vin ≤ Vss
– Tensão lógica 5V > Nível Baixo: -0.3V ≤ Vin ≤ 1.5V
- Corrente lógica 0~36mA – Temperatura de operação: -25°C ~ +130°C
– Corrente de Operação máxima: 2A por canal - Dimensões: 43mm x 43mm x 27mm
– Máxima potência dissipada: 25W - Peso: 30g
A Figura 9 mostra os pinos de conexão do
módulo da Ponte H L298N rotulados com suas
respectivas funções.

A Tabela 1 mostra as conexões do


módulo da Ponte H L298N e como podemos liga-
las no Arduino.

Figura 9. Detalhes das conexões da Ponte H L298N.

Tabela 1. Conexões do módulo da Ponte H L298N.

Nome da Porta Estado Descrição


+12V power - Conexão para fonte de alimentação externa (5V a 35V).
Deve ser ligada ao pino de 5V do Arduino.
power GND - Conexão para o GND da fonte de alimentação externa.
Deve ser ligada ao pino GND do Arduino.
+5V power - Saída de 5V.
ENA Entrada A enable. Controle de saída do motor: o nível lógico baixo (0V) desativa o MOTOR A
IN1 Entrada Controle de direção do MOTOR A.
Deve ser ligado a um pino de controle do Arduino.
IN2 Entrada Controle de direção do MOTOR A.
Deve ser ligado a um pino de controle do Arduino.
ENB Entrada B enable. Controle de saída do motor: o nível lógico baixo (0V) desativa o MOTOR B
IN3 Entrada Controle de direção do MOTOR B.
Deve ser ligado a um pino de controle do Arduino.
IN4 Entrada Controle de direção do MOTOR B.
Deve ser ligado a um pino de controle do Arduino.
Output A Saída Saída para o MOTOR A
Output B Saída Saída para o MOTOR B
5V enable - Se o jumper estiver conectado no pino 5V_EN o LM7805 irá fornecer 5V para alimentar o chip L298.
Caso desconecte o jumper do pino será necessário fornecer 5V para o chip L298N.

Além dos detalhes mostrados na Tabela 1, os sinais de entrada (IN1, IN2, IN3 e IN4) têm a função de controlar a
velocidade de rotação do motor através de um sinal PWM. Para isso, usamos a seguinte configuração:

• IN1: Este é um sinal PWM do controlador, ele diz quão rápido o motor 1 deve funcionar. No exemplo abaixo
este valor pode ser entre 0 e 255, sendo 0 (parado) e 255 (velocidade máxima).
• IN2: Simples sinal digital que informa o sentido da rotação do motor 1, sendo que 0 significa reverso e 1 frente.

4

IN3: PWM para a velocidade do motor 2.



Página

IN4: Sinal digital para direção do motor 2.

Vamos controlar um motor DC na saída A (output A) do Módulo da Ponte H L298N.

 Siga os passos para realizar as conexões corretamente, certifique-se que a Placa Arduino esteja desligada.

Prof. Fernando Esquírio Torres


Apostila criada para fins didáticos. Proibido qualquer reprodução ou uso não autorizado.
 Carro controlado por Bluetooth
 Chame seu professor para verificar sua ligação, antes de ligar o Arduino na porta USB, para evitar danos ao
Módulo da Ponte H L298N.
1º. Conecte o pino 9 do Arduino na entrada IN1 do módulo (Figura 10).
2º. Conecte o pino 8 do Arduino na entrada IN2 do módulo (Figura 10).
3º. Conecte os fios do Motor DC na saída A (output A) (Figura 10).
4º. Verifique se o jumper de 5V enable está no local correto.
5º. Conecte o pino de GND do Arduino na conexão GND Power do
módulo.

Figura 10. Circuito Ponte H e Motor DC.

6º. Conecte o pino de 5V do Arduino na conexão +12V Power do módulo.


Estude o código da Figura 11, digite-o, compile, salve e execute com a montagem da Ponte H.
#define IN1 9
#define IN2 8

/* Função: void setup()


* Entradas: Nenhuma (void)
* Saídas: Nenhuma (void)
* Descrição: Configura o hardware.
*/
void setup(){
//Saídas Digitais
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
}// Fim da função setup ()

/* Função: void loop()


* Entradas: Nenhuma (void)
* Saídas: Nenhuma (void)
* Descrição: Lógica principal do código.
*/
void loop (){
//Sentido Horário
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
delay (5000); //Atraso 5s
//Motor Parado
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
delay (2000); //Atraso 2s
//Sentido Anti-Horário
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
delay (5000); //Atraso 5s
//Motor Parado
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
delay (2000); //Atraso 2s
}// Fim da função loop

Figura 11. Código do Módulo da Ponte H L298N.

Salve o programa com um nome representativo, como PRATICA_02_PONTE_H.

7º. Compile ou “verifique” (✓) o código. No caso de sucesso, será exibida uma mensagem escrita com a cor branca
5

na Área de Status. Caso contrário, haverá uma mensagem de erro em cor alaranjada, nesse caso verifique linha
Página

por linha do seu código com o da Figura 11.

Prof. Fernando Esquírio Torres


Apostila criada para fins didáticos. Proibido qualquer reprodução ou uso não autorizado.
 Profissão e Ação

2.3. Montagem 03 – Módulo Bluetooth

Bluetooth é um padrão de tecnologia wireless para trocar dados


em distâncias curtas de dispositivos fixos ou móveis. Eles fazem parte das
redes PAN (Personal Area Network). Originalmente foi inventada como
uma alternativa sem fio para o RS-323.

Nessa prática vamos usar o modelo serial HC-05. Vantagens


praticidade de programação e facilidade de uso. Desvantagem
comunicação serial mais lenta. Figura 12. Bluetooth serial HC-05.

Você precisará baixar alguns aplicativos no seu celular Android para continuar essa prática. São eles: S2
Terminal for Bluetooth Free e Arduino Bluetooth RC Car (Figura 13). Peça ajuda ao seu professor se não conseguir
baixar os aplicativos.

Figura 13. Aplicativos S2 Terminal for Bluetooth Free e Arduino Bluetooth RC Car.

Grave um sketch com as funções setup e loop vazias. Antes de toda montagem do circuito vamos
“desgravar” o Arduino para evitar acidentes.
 Siga os passos para realizar as conexões corretamente, certifique-se que a Placa Arduino esteja desligada.
 Chame seu professor para verificar sua ligação, antes de ligar o Arduino na porta USB, para evitar danos ao
Sensor Ultrassom.
1º. Estude atentamente a montagem a ser feita (Figura 14).
2º. Fixe a placa do Arduino (com uma fita elástica) ao protoboard.
Conecte a alimentação (+Vcc e terra) do protoboard a partir do Arduino; utilize os barramentos horizontais
superior e inferior do protoboard para isso.

Figura 14. Montagem 02-circuito Bluetooth.


6

3º. Conecte o módulo Bluetooth como mostrado na Figura 14.


Página

4º. Peça seu professor para verificar sua ligação, antes de continuar.
Ligue o Arduino na sua USB e verifique o ID do seu módulo Bluetooth. Anote-o caso precise de encontrá-lo
novamente. O funcionamento da prática: Vamos enviar e receber dados pelo módulo Bluetooth. Do Arduino:
enviaremos uma mensagem de conexão estabelecida e o nome do aluno e esperaremos um comando 'A' para trocar
Prof. Fernando Esquírio Torres
Apostila criada para fins didáticos. Proibido qualquer reprodução ou uso não autorizado.
 Carro controlado por Bluetooth
o estado do LED ligado ao Pino 13. Do celular: enviaremos o comando 'A' pelo Bluetooth para a placa Arduino.
Função setup ( ): Configuraremos a nossa comunicação serial com o Bluetooth, o pino do LED como saída digital e
enviaremos a mensagem de conexão estabelecida e seu nome. Função loop ( ): Colocaremos a tarefa espera de
um dado da serial e atuaremos sobre o LED do PINO 13 da placa Arduino.

Estude o código da Figura 15, digite-o, chame o professor ou o monitor antes de gravar o código.

#define LED_PINO 13

//Variável para receber dados


int valor_recebido = 's';

//Variável armazena estado dos LEDs


char estado_LED = LOW;

/* Função: void setup()


* Entradas: Nenhuma (void)
* Saídas: Nenhuma (void)
* Descrição: Configurações hardware
*/
void setup() {
// Saídas digitais
pinMode (LED_PINO, OUTPUT);
//Inicializa a Serial
Serial.begin (9600);
//Espera que a serial conectar
while (!Serial);
//Mensagem inicial da prática
Serial.print ("Conectado OK!");
//Escreva no monitor serial
Serial.println ("SEU_NOME.");
}//Fim da função void setup

/* Função: void loop()


* Entradas: Nenhuma (void)
* Saídas: Nenhuma (void)
* Descrição: Lógica principal do código.
*/
void loop() {
//Verifica se a comunicação serial está disponível
if (Serial.available() > 0) {
//Lê o valor recebido pela serial
valor_recebido = Serial.read();
//Testa o valor recebido
if (valor_recebido == 'A') {
//Troca o estado do LED
estado_LED = !estado_LED;
//Atualiza o LED_VERMELHO
digitalWrite (LED_PINO, estado_LED);
//Escreva o estado no serial monitor
if (estado_LED)
Serial.println ("LED Ligado!");
else
Serial.println ("LED Desligado!");
}//Fim do if (valor_recebido == 'A')

}//Fim do if (Serial.available() > 0)

}//Fim da função void loop


Figura 15. Código Bluetooth.
7

5º. Compile ou “verifique” (✓) o código. No caso de sucesso, será exibida uma mensagem escrita com a cor
Página

branca na Área de Status. Caso contrário, haverá uma mensagem de erro em cor alaranjada, nesse caso
verifique linha por linha do seu código com o da Figura 15.

Prof. Fernando Esquírio Torres


Apostila criada para fins didáticos. Proibido qualquer reprodução ou uso não autorizado.
 Profissão e Ação

2.4. Montagem 04 – Carro controlado por Bluetooth

Aproveite a montagem na estrutura e digite o código da Figura 16 e grave no seu Arduino. Dúvidas chame o seu
professor ou monitor.
#define IN1 9 //Pino do Motor A-Dianteiro
#define IN2 8 //Outro Pino do Motor A-Dianteiro
#define IN3 7 //Pino do Motor B-Traseiro
#define IN4 6 //Outro Pino do Motor B-Traseiro

char determinant; // Usado na função check, armazena o dado enviado pelo celular.
char dataIn = 'S'; // Caracter/Dado vindo do celular.
char value = ' ';

/* Função: void setup()


* Entradas: Nenhuma (void)
* Saídas: Nenhuma (void)
* Descrição: Configurações hardware */
void setup() {
// Saídas digitais inicializa as entradas da Ponte H
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);

Serial.begin (9600); //Inicializa a Serial


while (!Serial); //Espera que a serial conectar
} //Fim da função void setup

/* Função: void loop()


* Entradas: Nenhuma (void)
* Saídas: Nenhuma (void)
* Descrição: Lógica principal do código. */
void loop() {
value = check(); //Lê dado da serial

while (value == 'F') {


digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
value = check();
} // Fim do while (value == 'F')

while (value == 'B') {


digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
value = check();
} // Fim do while (value == 'B')

while (value == 'L') {


digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
value = check();
} // Fim do while (value == 'L')
8

while (value == 'R') {


Página

digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
value = check();
} // Fim do while (value == 'R')

Prof. Fernando Esquírio Torres


Apostila criada para fins didáticos. Proibido qualquer reprodução ou uso não autorizado.
 Carro controlado por Bluetooth

while (value == 'G') {


digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
value = check();
} // Fim do while (value == 'G')

while (value == 'I') {


digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
value = check();
} // Fim do while (value == 'I')

while (value == 'J') {


digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
value = check();
} // Fim do while (value == 'I')

while (value == 'H') {


digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
value = check();
} // Fim do while (value == 'H')

while (value == 'S') {


digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
value = check();
} // Fim do while (value == 'S')

} //Fim da função void loop

/* Função: char check()


* Entradas: Nenhuma (void)
* Saídas: Nenhuma (void)
* Descrição: Lê dado vindo da serial. */
char check(){
// Verifica doados no barramento serial.
if (Serial.available() > 0){
dataIn = Serial.read(); // Recebe caractere enviado pelo telefone.
determinant = dataIn;
} // Fim if (Serial.available() > 0)
return determinant;
} // Fim int check()
Figura 16. Código do carro controlado por Bluetooth.
9
Página

Prof. Fernando Esquírio Torres


Apostila criada para fins didáticos. Proibido qualquer reprodução ou uso não autorizado.

You might also like