Material Arduino8
Material Arduino8
1. Introdução ..................................................................................................................... 4
1.1. O material .................................................................................................................. 5
2. Componentes ................................................................................................................ 6
2.1. Arduino ...................................................................................................................... 7
2.1.1. O que é Arduino? .................................................................................................. 7
2.1.2. O Arduino MEGA 2560 .......................................................................................... 7
2.2. Módulo de motor L298N ........................................................................................... 8
2.3. LCD........................................................................................................................... 10
2.4. Sensor LDR............................................................................................................... 10
2.5. LED alto brilho ......................................................................................................... 11
2.6. Servomotor.............................................................................................................. 11
2.7. Sensor IR .................................................................................................................. 12
2.8. Sensor ultrassônico ................................................................................................. 13
2.9. Motor com redução ................................................................................................ 13
3. Básico de programação........................................................................................... 15
3.1. Computador ........................................................................................................... 16
3.2. Programa de Computador ................................................................................... 16
3.3. Linguagem de Programação .............................................................................. 16
3.4. Algoritmo (Programa) ........................................................................................... 17
3.5. Variável .................................................................................................................. 17
3.6. Operador ................................................................................................................ 19
3.7. Função ................................................................................................................... 19
3.8. Comentários .......................................................................................................... 21
3.9. Estruturas de Controle ......................................................................................... 23
3.10. Bibliotecas.......................................................................................................... 31
4. Principais Funções ....................................................................................................... 33
4.1. Funções para pinos digitais ..................................................................................... 34
4.2. Funções para pinos analógicos................................................................................ 36
2
4.3. Funções para comunicação (USB) ........................................................................... 36
4.4. Funções matemáticas e de tempo .......................................................................... 37
5. Exercícios ..................................................................................................................... 39
5.1. Exercícios de compreensão ..................................................................................... 40
5.2. Seguidor de linha ..................................................................................................... 40
3
1. Introdução
4
1.1. O material
5
2. Componentes
6
2.1. Arduino
Assim, foi criada uma placa composta por um microcontrolador Atmel, circuitos de
entrada/saída e que pode ser facilmente conectada à um computador e programada
via IDE (Integrated Development Environment, ou Ambiente de Desenvolvimento
Integrado) utilizando uma linguagem baseada em C/C++, sem a necessidade de
equipamentos extras além de um cabo USB.
O Arduino MEGA 2560 possui 54 pinos de entrada e saída digitais (dos quais 15
podem ser usados como saídas PWM) e 16 entradas analógicas. A localização de
seus pinos pode ser vista na figura 2.1.
7
Figura 2.1
As portas digitais sem PWM podem ser usadas para ligar LED’s, por exemplo, pois só
recebem ou enviam os valores 0 (0V) para o LED desligado ou 1 (5V) para o LED
ligado, porém não podem controlar a intensidade da luz desse LED.
Como se pode ver, as portas analógicas são de entrada somente. Caso seja
necessário uma saída de um valor diferente de 0 ou 1, como, por exemplo, para
controlar a velocidade de um motor ou a intensidade da luz de uma lâmpada, ao invés
de simplesmente ligá-los ou desligá-los como o pino digital sem PWM faria, usamos
os pinos digitais com PWM, que serve para simular um sinal analógico, ele pode
enviar valores de 0 a 255.
O Arduino não possui corrente suficiente para ativar um motor, por isso precisamos de
um módulo. A alimentação externa é ligada ao módulo que é ligado ao motor e ao
Arduino. O sinal que o Arduino envia ao módulo serve de chave para o controle do
motor. Dependendo do sinal enviado pelo Arduino, o motor executará uma função
8
diferente. A função do módulo varia de controle de velocidade a controle de sentido do
motor (anti-horário e horário). Na figura 2.2 podemos ver um exemplo de módulo de
motor com seus componentes especificados.
Figura 2.2
9
somente se tornará uma entrada caso esteja controlando um motor de 4-5,5v
(sem jumper), assim poderá usar a saída +5v do Arduino;
2.3. LCD
O LCD serve para que a calibração dos sensores possa ser visualizada e ajustada
sem que haja necessidade do robô estar conectado a um computador. Na figura 2.3
podemos ver um exemplo de LCD.
Figura 2.3
10
de luz que incide sobre ele. Quanto maior a intensidade da luz que ele recebe, menor
a sua resistência. No nosso projeto do seguidor de linha será utilizado para a
identificação da cor prata. Na figura 2.4 é apresentado um exemplo de sensor LDR.
Figura 2.4
Figura 2.5
Os LED’s possuem um achatamento em um dos seus lados (lado direito na figura 2.4),
isso serve para indicar qual lado é o positivo e qual é o negativo. O lado achatado é o
negativo, esse lado deve ser ligado no GND. O outro lado é o positivo e deve ser
ligado no pino digital, porém a tensão fornecida pelo pino digital é de 5V e isso é mais
do que o LED pode suportar, portanto entre o pino digital e o lado positivo do LED
deve-se ligar um resistor.
2.6. Servomotor
11
Um servomotor tem funcionamento semelhante ao de um motor. Porém em vez de
girar ou se mover livremente sem um controle mais efetivo de posição como a maioria
dos motores, ele é movido para que atinja uma posição específica. Um sinal é enviado
ao servomotor indicando a posição final desejada, ele então determina a posição
inicial em que ele se encontra e realiza o movimento necessário para que a posição
final seja atingida. O servomotor não gira mais do que 180° como fazem a maioria dos
motores.
Figura 2.6
2.7. Sensor IR
Mesmo a luz infravermelha sendo invisível a olho nu, ela é uma luz e também é
absorvida e refletida. Para testarmos se o emissor está realmente emitindo a radiação
infravermelha podemos filmar o sensor em funcionamento com uma câmera de
celular, por exemplo, na câmera será possível visualizar a luz emitida.
12
Figura 2.7
O sensor ultrassônico pode ser chamado de “olhos do robô”, pois sua função é de
“enxergar” objetos e também pela sua semelhança a um par de olhos, como pode ser
visto na figura 2.8. Ele é utilizado para detectar objetos e também determinar a que
distância eles se encontram. Tem funcionamento semelhante ao do sensor IR. Uma
onda sonora é emitida pelo sensor e seu reflexo é recebido e analisado, de acordo
com o tempo que essa onda levou para chegar até o objeto e retornar ao sensor é
possível calcular a distância a que esse objeto se encontra do sensor. Sabendo a
distância é possível programar os motores para desviarem do objeto.
Figura 2.8
É o motor que controla os movimentos do seguidor de linha. Cada motor controla uma
roda, no caso do seguidor de linha não são necessárias mais que duas rodas. Na
figura 2.9 estão representados um motor e sua roda. Com a programação de cada
motor é possível controlar a velocidade, a direção e o sentido do robô.
13
Figura 2.9
14
3. Básico de programação
15
3.1. Computador
O Arduino pode ser considerado um tipo de computador. Um computador é, de forma
simplificada, uma máquina que processa instruções. Essas instruções são
processadas no "cérebro" do computador, que se chama microprocessador. Todo
computador possui pelo menos um microprocessador. O Arduino, por exemplo, nada
mais é do que um computador muito pequeno, e ele utiliza um microprocessador do
modelo ATmega. Alguns microprocessadores, como o ATmega, também são
chamados de microcontroladores.
Para converter um programa escrito em uma linguagem de alto nível para linguagem
de máquina, nós utilizamos uma coisa chamada compilador. A ação de converter um
programa para linguagem de máquina é chamada compilar. Para compilar um
programa, normalmente se utiliza um ambiente de desenvolvimento (ou IDE, do
inglês Integrated Development Environment), que é um aplicativo de computador que
possui um compilador integrado, onde você pode escrever o seu programa e compilá-
lo. No caso do Arduino, esse ambiente de desenvolvimento é o Arduino IDE.
16
3.4. Algoritmo (Programa)
Um algoritmo, ou simplesmente programa, é uma forma de dizer para um computador
o que ele deve fazer, de uma forma que nós humanos conseguimos entender
facilmente. Os algoritmos normalmente são escritos em linguagens de programação
de alto nível. Isso se aplica a praticamente qualquer computador, inclusive o Arduino,
onde um algoritmo também é conhecido como sketch. Para simplificar, a partir de
agora nós vamos nos referir aos algoritmos, programas ou sketches simplesmente
como "programas".
void setup() {
pinMode(led, OUTPUT);
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
3.5. Variável
Uma variável é um recurso utilizado para armazenar dados em um programa de
computador. Todo computador possui algum tipo de memória, e uma variável
representa uma região da memória usada para armazenar uma determinada
informação. Essa informação pode ser, por exemplo, um número, um caractere ou
uma sequência de texto. Para podermos usar uma variável em um programa Arduino,
nós precisamos fazer uma declaração de variável, como por exemplo:
17
int led;
Nesse caso estamos declarando uma variável do tipo int chamada led . Em seguida
nós falaremos mais sobre o tipo de dado de uma variável.
3.5.2. Atribuição
Atribuir um valor a uma variável significa armazenar o valor nela para usar
posteriormente. O comando de atribuição em C++ é o = . Para atribuirmos o
valor 13 à variável led que criamos acima, fazemos assim:
led = 13;
O objetivo dessa linha de código é dizer que o pino 13 do Arduino será utilizado para
acender o LED, e armazenar essa informação para usar depois ao longo do programa.
18
3.6. Operador
Um operador é um conjunto de um ou mais caracteres que serve para operar sobre
uma ou mais variáveis ou constantes. Um exemplo muito simples de operador é o
operador de adição, o + . Digamos que queremos somar dois números e atribuir a
uma variável x . Para isso, fazemos o seguinte:
x = 2 + 3;
Operadores aritméticos:
o + : adição ("mais")
o - : subtração ("menos")
o * : multiplicação ("vezes")
o / : divisão ("dividido por")
Operadores lógicos:
o && : conjunção ("e")
o || : disjunção ("ou")
o == : igualdade ("igual a")
o != : desigualdade ("diferente de")
o ! : negação ("não")
o > : "maior que"
o < : "menor que"
o >= : "maior ou igual a"
o <= : "menor ou igual a"
Operadores de atribuição:
o = : atribui um valor a uma variável, como vimos acima.
Ao longo do desenvolvimento dos seus projetos, aos poucos você se familiarizará com
todos esses operadores.
3.7. Função
Uma função é, em linhas gerais, uma sequência de comandos que pode ser reutilizada
várias vezes ao longo de um programa. Para criar uma função e dizer o que ela faz,
nós precisamos fazer uma declaração de função. Veja como uma função é declarada
no nosso programa de exemplo:
void setup() {
19
pinMode(led, OUTPUT);
Aqui estamos declarando uma função com o nome setup() . O que ela faz é executar
os comandos de uma outra função pinMode() . A ação de executar os comandos de
função previamente declarada é denominada chamada de função. Nós não
precisamos declarar a função pinMode() porque ela já é declarada automaticamente
no caso do Arduino.
Chamar uma função significa executar os comandos que foram definidos na sua
declaração. Uma vez declarada, uma função pode ser chamada várias vezes no
mesmo programa para que seus comandos sejam executados novamente. Para
chamarmos a nossa função setup() , por exemplo, nós usaríamos o seguinte
comando:
setup();
A palavra chave que vem antes do nome da função na declaração define o tipo
do valor de retorno da função. Toda vez que uma função é chamada, ela é executada
e devolve ou retorna um determinado valor - esse é o valor de retorno, ou
simplesmente retorno da função. O valor de retorno precisa ter um tipo, que pode ser
qualquer um dos tipos de dados citados anteriormente. No caso da nossa
função setup() , o tipo de retorno é void , o que significa que a função não retorna
nada.
Para exemplificar, vamos criar uma função que retorna alguma coisa, por exemplo, um
número inteiro. Para retornar um valor, nós utilizamos o comando return :
int f() {
return 1;
Quando chamada, a função f() acima retorna sempre o valor 1 . Você pode usar o
valor de retorno de uma função para atribuí-lo a uma variável. Por exemplo:
20
x = f();
Após declarar a função f() e chamar o comando de atribuição acima, a variável x irá
conter o valor 1 .
3.7.3. Parâmetros
Um outro recurso importante de uma função são os parâmetros. Eles servem para
enviar algum dado para a função quando ela é chamada. Vamos criar por exemplo
uma função que soma dois números:
return a + b;
Aqui acabamos definir uma função chamada soma() , que aceita dois números inteiros
como parâmetros. Nós precisamos dar um nome para esses parâmetros, e nesse caso
escolhemos a e b . Esses parâmetros funcionam como variável que você pode usar
dentro da função. Sempre que chamarmos a função soma() , precisamos fornecer
esses dois números. O comando return a + b; simplesmente retorna a função com a
soma dos dois números. Vamos então somar 2 + 3 e atribuir o resultado para uma
variável x :
x = soma(2, 3);
3.8. Comentários
Um comentário é um trecho de texto no seu programa que serve apenas para explicar
(documentar) o código, sem executar nenhum tipo de comando no programa. Muitas
vezes, os comentários são usados também para desabilitar comandos no código.
Nesse caso, dizemos que o código foi comentado.
21
comentários são exibidos na cor cinza. Vamos então explicar o que o programa de
exemplo faz, inserindo nele vários comentários explicativos:
/*
*/
/*
*/
/*
Esta função é chamada apenas uma vez, quando o Arduino é ligado ou rei
niciado.
*/
void setup() {
/*
22
Declaração da função loop()
*/
void loop() {
A seguir nós veremos algumas das estruturas de controle mais comuns usadas nas
linguagens de programação em geral. Vamos também modificar o nosso programa de
teste para exemplificar melhor como essas estruturas funcionam.
23
3.9.1. While
while(condição) {
...
Vamos então fazer uma modificação no nosso programa para exemplificar melhor
como o while funciona. O nosso objetivo agora é fazer o LED piscar três vezes,
depois esperar cinco segundos, piscar mais três vezes e assim por diante. Nós vamos
mudar o conteúdo da função loop() para o seguinte:
int i = 0;
while(i < 3) {
24
Primeiro nós declaramos uma variável i . Essa variável vai contar quantas vezes o
LED já piscou desde o início do programa ou desde a última pausa de cinco segundos.
Nós vamos inicializar essa variável com zero porque no início da função loop() o LED
ainda não piscou nenhuma vez sob essas condições.
Entre os caracteres { e } nós colocamos o código que faz o LED piscar, como
anteriormente, mas não podemos nos esquecer de somar 1 à variável que conta o
número de "piscadas". Isso é feito na seguinte linha de código:
25
6. Esperamos cinco segundos por meio da chamada delay(5000) .
Após esses passos, chegamos ao final da função loop() , e como já sabemos, ela é
chamada novamente pelo sistema do Arduino. Isso reinicia o ciclo, executando os
passos acima indefinidamente.
Rode o programa modificado com as instruções acima no seu Arduino e tente variar o
número de "piscadas" e o número
3.9.2. For
Agora que nós já aprendemos o comando while, fica muito fácil aprender o
comando for, pois ele é quase a mesma coisa. Vamos modificar o conteúdo da
função loop() como fizemos acima, porém usando o for no lugar do while :
int i;
A primeira modificação que fizemos foi declarar a variável i sem inicializá-la com o
valor 0 . Nós podemos fazer isso porque o comando for fará isso para a gente. Ele
segue o seguinte formato:
26
...
Podemos então verificar que o for nada mais é do que um while acrescido de um
comando de inicialização e um comando de finalização. Para o nosso programa de
teste, esses comandos são, respectivamente:
3.9.3. If
Para ilustrar, vamos modificar o nosso programa de exemplo para que ele faça a
mesma coisa que fizemos com o while e o for acima, porém vamos fazer isso usando
um if , que segue o seguinte formato:
if(condição) {
...
27
A lógica é muito simples: sempre que a condição for verdadeira, os comandos
entre { e } são executados, caso contrário o programa prossegue sem executá-los.
Vamos ver então como fica a função loop() :
int i = 0;
void loop() {
if(i == 3) {
Aqui a lógica é um pouco diferente: nós vamos manter a função loop() piscando o
LED como no programa original, porém vamos inserir uma espera adicional de 5
segundos após cada 3 piscadas. Para isso, criamos uma variável i fora da
função loop() ; ela precisa ser declarada de fora da função para poder reter o seu
valor entre cada execução da função loop() . Chamamos isso de variável global.
Quando a variável é declarada dentro do corpo da função, ela não retém o valor entre
28
cada execução, sendo reiniciada a cada vez que a função é reexecutada. Chamamos
isso de variável local.
Nós usaremos então essa variável global i para contar, novamente, o número de
vezes que o LED acendeu e apagou. Na declaração da variável, nós a inicializamos
com o valor 0 para indicar que o LED não acendeu nenhuma vez ainda. A
função loop() então começa a ser executada, acendendo e apagando o LED. Para
contar o número de vezes que o LED piscou, nós adicionamos a seguinte linha de
código:
A partir daí a função loop() continua sendo chamada e o ciclo se inicia novamente.
3.9.4. If-Else
O if-else, também conhecido como if-then-else, pode ser visto como uma extensão do
comando if . Else em inglês significa "caso contrário", e ele faz exatamente o que o
nome diz: "se isso for verdadeiro, então faça aquilo, caso contrário, faça outra coisa".
Ele segue o seguinte formato:
if(condição) {
...
} else {
...
Para exemplificar, vamos usar o programa do for que mostramos acima, mas vamos
dessa vez fazer o LED acender e apagar quatro vezes antes de dar uma pausa de
cinco segundos. Depois vamos fazer com que na terceira de cada uma dessas quatro
"piscadas", o LED acenda por um período mais curto. Dentro da função loop() ,
teremos o seguinte:
29
// Variável para contar o número de vezes que o LED piscou
int i;
if(i == 2) {
} else {
30
Aqui o que fazemos é, toda vez que vamos acender o LED, verificar se é a terceira vez
que isso acontece, por meio do comando if com a condição i == 2 . Se essa
expressão for verdadeira, isso quer dizer que já acendemos o LED duas vezes e
estamos prestes a acendê-lo pela terceira vez; nesse caso mudamos o tempo que o
LED fica aceso para um valor menor, de 0,2 segundo (uma redução de 0,8 segundo) e
o tempo que ele fica apagado para um valor maior, de 1,8 segundos (aumento de 0,8
segundo).
Mas e se essa não for a terceira vez que o LED está sendo acionado? É aí que entra
o else : se a condição do if for verdadeira, o bloco de comandos entre { e } logo
após o if é executado, caso contrário, o bloco entre { e } após o else é executado.
Isso quer dizer que para a primeira, segunda e quarta "piscadas" será usado o tempo
padrão de um segundo.
3.10. Bibliotecas
As coisas que aprendemos nas seções anteriores são importantes para implementar a
lógica do seu programa no Arduino, mas normalmente você vai querer fazer mais
coisas além de apenas acender um LED. Quando se faz tarefas mais complexas ou se
utiliza algum outro circuito conectado ao seu Arduino, um recurso muito importante são
as bibliotecas.
Uma biblioteca é basicamente composta de código fonte adicional que você adiciona
ao seu projeto por meio do comando include. Vejamos como adicionar, por exemplo,
uma biblioteca para controle de um display de cristal liquido (LCD):
#include <LiquidCrystal.h>
Uma biblioteca do Arduino se apresenta normalmente como uma ou mais classes que
possuem funções, os métodos, para acionar dispositivos, configurá-los ou executar
alguma outra tarefa. Continuando com o exemplo do display de cristal líquido, para
usá-lo no seu programa, primeiro é preciso inicializá-lo. O que fazemos nesse caso é
criar um objeto para acessar o LCD (tecnicamente isso se chama instanciar um
objeto). Vejamos como isso é feito:
31
lcd.begin(16, 2);
Feitos esses passos, já podemos escrever texto no LCD. Fazemos isso usando o
método print() do objeto lcd , sempre que precisarmos ao longo do programa:
lcd.print("Oi!");
32
4. Principais Funções
33
4.1. Funções para pinos digitais
34
Função Exemplo Notas
35
4.2. Funções para pinos analógicos
36
4.4. Funções matemáticas e de tempo
millis( ) Retorna o número long total = millis( ); Aqui a Essa variável vai ser
de milissegundos desde variável inteira longa (de 32 resetada depois de
que o Arduino começou a bits) ‘total’ vai guardar o tempo aproximadamente 9
executar o programa em ms desde que o Arduino foi horas.
corrente. inicializado.
37
Funçao Exemplo Notas
38
5. Exercícios
39
5.1. Exercícios de compreensão
5.1.1. Instale a IDE do Arduino em seu computador. Ela está disponível para
download no site http://arduino.cc/
5.1.2. Crie um programa que faça com que um LED pisque, ficando 1 segundo
apagado e 2 segundos aceso
5.1.3. Crie um programa para ler o sensor IR
5.1.4. Crie um programa para ler o sensor ultrassônico
5.1.5. Crie um programa que faça com que o motor gire para ambos os lados,
depois acelere de desacelere até parar.
5.1.6. Crie um programa para o servomotor ir até 180°, depois até 90°, até 160° e
voltar a 0°.
5.1.7. Crie um programa para exibir a frase “Alo mundo!” no LCD.
5.1.8. Crie um programa que leia o valor do sensor IR e o exiba no LCD.
40
A. Esquemas de montagem de alguns componentes
41
Figura A.2 – Ligação do LED
42
Figura A.4 – Ligação do servomotor
43
B. Informações adicionais
o http://www.meccomeletronica.com/site/data/uploads/apostila-de-arduino.pdf
o http://blog.filipeflop.com/arduino/o-que-e-arduino.html
o http://arduino.cc/
o http://blog.filipeflop.com/motores-e-servos/motor-dc-arduino-ponte-h-l298n.html
o http://pt.wikipedia.org/wiki/Servomotor
o http://en.wikipedia.org/wiki/Passive_infrared_sensor
o https://www.circuitar.com.br/
o http://arduino.cc/
o http://ordemnatural.com.br/pdf-files/CartilhadoArduino_ed1.pdf (Arduino -
Cartilha para programação em C)
44