Apostila Arduino Básico RoboCore v2.0
Apostila Arduino Básico RoboCore v2.0
1. Introdução ................................................................................................................ 3
2.2. Só piscar não dá! Eu que quero acender e apagar este LED ............................... 21
2.3. Meu dedo cansou, dá pra deixar ligado e desligar depois? ................................. 23
MENSAGEM IMPORTANTE
Este material destina-se única e exclusivamente a apoio didático do curso Arduino para
Iniciantes da RoboCore®, qualquer reprodução e/ou distribuição sem o consentimento do
autor ou da RoboCore® estará sujeita a punições segundo os Direitos Autorais.
1. INTRODUÇÃO
Você pode construir suas próprias placas do Arduino, uma vez que todo o projeto Arduino
está sob a licença open-source. Todo o projeto e arquivos CAD podem ser baixados e você
está livre para adaptá-los às suas necessidades, porém, se você quiser apenas utilizar uma
das placas padrões, recomenda-se adquirir seu modelo e um representante autorizado,
como a RoboCore® ([Link]
Arduino está pronto para interagir com o mundo por meio de suas entradas e saídas onde
é possível conectar os mais diversos sensores e atuadores. Projetos do Arduino podem ser
stand-alone, ou seja, dependem apenas de sua placa Arduino, ou podem se comunicar com
um software rodando em um computador, por exemplo, Flash, Processing, MaxMSP ou
qualquer outra solução desenvolvida em um ambiente de programação desenvolvida por
você.
Existe uma infinidade de tipos de placas de Arduino e outros infinitos Shields, que são
placas que podem ser empilhadas ao seu Arduino ampliando a capacidade desta fantástica
placa, porém, neste material apenas abordaremos o Arduino Uno, modelo de referência e
mais utilizado da família Arduino. Com essa placa é possível realizar projetos maravilhosos
nos mais diversos segmentos da tecnologia, dê asas a sua imaginação, use sua criatividade
e entre de cabeça no fantástico mundo do Arduino.
O Arduino Uno é uma placa microcontrolada baseada no ATmega328, possui 14 pinos que
podem ser configurados como entradas ou saídas digitais, destes 14 pinos 6 podem ser
usados como saídas PWM. O Arduino Uno também 6 entradas analógicas, um cristal de 16
MHz, conexão USB, um conector de alimentação e um botão de reset. A placa já vem
pronta para ser programada, você pode alimentá-la pela própria porta USB de seu
computador ou adquirir um adaptador AC/DC e liga-lo diretamente a uma tomada de sua
residência.
O Uno difere-se do seu antecessor Arduino 2009 pelo fato de não utilizar mais o chip FTDI
para realizar a conversão USB para Serial, em vez disso, é utilizado outro
microcontrolador, o Atmega16U2, programado como um conversor USB-Serial. O nome
Uno significa um em italiano (país de origem do Arduino) e foi utilizado para marcar o
lançamento do Arduino 1.0 (IDE de programação do Arduino). O Uno e a versão 1.0 são as
versões de referência do Arduino.
Microcontrolador ATmega328
Tensão de operação 5V
Tensão de Entrada (recomendado) 7-12V
Tensão de Entrada (limites) 6-20V
Entradas/Saídas Digitais 14 (6 podem ser saídas PWM)
Entradas Analógicas 6
Máxima corrente nos pinos de entrada/saída 40 mA
Máxima corrente nos pinos de 3.3V 50 mA
32 KB (ATmega328) onde 0.5 KB é usado
Memória Flash
com o bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Velocidade de Clock 16 MHz
Na figura abaixo você encontra as partes principais que compõe sua placa Arduino Uno.
Entradas/Saídas Digitais
Botão de reset
Entrada USB
Entrada
alimentação
Entradas Analógicas
Potência
Agora que você já conhece as principais características da sua placa Arduino Uno vamos
conhecer os demais componentes que você recebeu em seu kit que acompanha seu curso
Arduino para Iniciantes da RoboCore®.
Ao longo do nosso curso iremos montar alguns circuitos eletrônicos que irão interagir com
seu Arduino. Para montar os experimentos desse kit não é necessário nenhum tipo de
curso anterior de eletrônica, porém, para ajudar você a identificar cada um dos
componentes e deixar a compreensão do circuito um pouco mais fácil, iremos detalhar
cada um dos componentes que compõe nosso exclusivo kit Arduino para Iniciantes.
Resistor:
O que isto faz: Limita a corrente elétrica que passa pelo circuito.
Para limitar mais ou menos corrente, o valor deste componente
pode variar.
+ Detalhes: [Link]
Buzzer:
O que isto faz: Quando uma corrente elétrica passa por ele, ele emite
um som.
+ Detalhes: [Link]
Chave momentânea:
O que isto faz: Quando o botão é apertado, os contatos entre os
terminais de cada lado são ligados entre si.
Potenciômetro:
O que isto faz: Varia a resistência dos terminais conforme a haste
superior é girada.
+ Detalhes: [Link]
LED:
O que isto faz: Emite uma luz quando uma pequena corrente o excita
(apenas em uma direção, do pino mais longo para o pino mais curto).
+ Detalhes: [Link]
+ Detalhes: [Link]
LED RGB:
O que isto faz: Pense em três LEDs de alto brilho: um vermelho, um
verde e um azul. Agora, junte todos eles em um só. Pronto, isso é um
LED RGB.
+ Detalhes: [Link]
Display de LCD:
O que isto faz: Mostra dados lidos pelo Arduino em letras e números,
muito utilizado em diversos equipamentos eletrônicos. Este dispositivo
mostra os dados que estão dentro do Arduino para os seres humanos
de uma forma inteligível.
+ Detalhes: [Link]
+ Detalhes:
+ Detalhes:
[Link]
+ Detalhes:
[Link]
+ Detalhes:
[Link]
Cabo USB:
O que isto faz: Faz a comunicação entre o computador e o Arduino. A
maioria dos Arduinos utiliza o cabo USB AB, porém, alguns Arduinos,
como por exemplo o Leonardo, utilizam o cabo Micro USB.
Protoboard:
O que isto faz: trata-se de uma placa de plástico, cheia de pequenos furos com ligações
internas, onde você irá fazer as ligações elétricas. Os furos nas extremidades superior e
inferior são ligados entre si na horizontal, enquanto que as barras do meio são ligadas na
vertical. Para ilustrar isto, veja abaixo como são as ligações internas da protoboard:
Cada fio azul acima representa uma ligação interna. Para deixar este componente
totalmente entendido, veja o exemplo abaixo:
Número de pinos: na protoboard que acompanha o kit existem 840 furos, porém existem
protoboards com menos e com mais furos.
+ Detalhes: [Link]
Agora que já conhecemos todo o material que utilizaremos em nosso curso é hora de saber
como conseguir e como instalar o ambiente de programação do Arduino (IDE).
Seu Arduino Uno é totalmente Plug & Play, uma vez rodando o ambiente de
desenvolvimento, insira o cabo USB no Arduino e depois no computador. Seu computador
deverá reconhecer automaticamente o Arduino e uma nova porta COM (no caso de sistema
operacional Windows Vista, Windows 7 ou Linux). Caso o sistema operacional não
reconheça a placa automaticamente, os drivers podem ser localizados na pasta “\arduino-
1.0.1\drivers”.
Para selecionar esta nova porta COM onde o Arduino está localizado, abra o ambiente de
desenvolvimento, então clique em TOOLS > SERIAL PORT> COM X (onde X é o número da
porta que o Arduino foi instalado automaticamente). Na imagem a seguir temos um
exemplo do que você deverá ver:
Note que o número da porta COM não é necessariamente 108 como na imagem acima.
Cada computador poderá apresentar um número de porta diferente.
Não se desespere seu Arduino não está com defeito, você não é a pessoa com mais azar na
face de toda a Terra, veja abaixo a solução:
Por causa de fatores ligados a permissões do sistema, o Windows 7 algumas vezes impede
que o driver seja instalado de uma determinada pasta, onde estão os drivers e ambiente de
desenvolvimento do Arduino. Desta forma, temos que fazer com que o Windows “force” a
instalação destes drivers de alguma forma. Siga os seguintes passos:
1) Conecte seu Arduino à porta USB de seu computador. Aguarde até aparecer a
mensagem de erro de instalação de driver. A mensagem deve se parecer com a
seguinte:
8) Neste ponto, não use a opção de seleção de diretório para escolher o driver do
Arduino. Se você fizer isto, o Windows não irá permitir que o driver seja instalado,
pois ele não tem permissão para carregar o driver da pasta em questão.
Clique então em “PERMITIR QUE EU ESCOLHA EM UMA LISTA DE DRIVERS E
DISPOSITIVOS NO COMPUTADOR”, como na figura a seguir:
9) Na janela que abrir, role a lista para baixo até encontrar “Portas (COM e LPT)” e
clique em Avançar;
11) Na janela que abrir, faça a busca do driver pelo botão “Procurar”. Direcione esta
busca para a pasta DRIVERS, do ambiente de desenvolvimento Arduino, e dentro
dela clique em “ARDUINO UNO REV3”, caso esta seja sua placa Arduino, conforme
a figura abaixo:
14) Pronto! Seu Arduino está instalado e pronto para ser usado! Agora, basta selecionar
a porta serial do mesmo no ambiente de desenvolvimento Arduino e usá-lo.
3) Selecione "Troubleshoot";
A instalação dos drivers no Linux é muito fácil, basta entrar no terminal de comandos com
a placa conectada ao computador, e digitar o seguinte:
Para fazer a instalação no Mac basta copiar o programa para sua pasta de aplicativos,
como qualquer aplicativo para Mac. Ao conectar a placa ao computador via cabo USB, o
LED power irá ligar na placa e a mesma será automaticamente reconhecida pelo
computador. Entre nos aplicativos e abra o Arduino IDE. Em Tools > Serial Port procure
sua placa Arduino. A descrição da porta de comunicação será algo como
/dev/[Link] juntamente a algum número de identificação.
Para realizar a configuração do tipo de placa utilizada basta ir ao menu TOOLS e depois
BOARD, selecionando o modelo compatível a sua placa Arduino. Em nosso curso, como já
sabemos, utilizaremos o modelo Arduino Uno, modelo este selecionado na figura
apresentada a seguir.
ATENÇÃO: Caso você não esteja utilizando a placa Arduino UNO, selecione
a placa correta.
Você neste momento já deve estar desesperado, quinze páginas de enrolação e nada de
programação, como dá pra enrolar tanto? Bem suas preces chegaram ao fim neste capítulo
iremos aprender os comandos básicos necessários para criar programas simples para
nossa placa Arduino.
O exemplo apresentado a seguir, “Piscando um LED” será nosso primeiro programa, com
ele entenderemos cada uma das partes que compõem o programa do Arduino e ainda
iremos testar se nossa placa está funcionando corretamente.
/*************************************************************************
** **
** CURSO ARDUINO PARA INICIANTES - ROBOCORE **
** **
** Exemplo 01: Piscando um LED **
** **
*************************************************************************/
Além de ensinar para você o básico da programação do Arduino, tentarei passar um pouco
da minha experiência e apresentarei algumas dicas de boas práticas de programação, eu
sei que com o tempo você irá desenvolver seu jeito próprio de programar, afinal de contas
jeito de programar é que nem time de futebol, cada um tem o seu e isso não se discute.
ou seja, serve apenas para o programador colocar informações que podem ajudar a ele ou a
outras pessoas, em um futuro, entender o que esse programa ou linha de código faz.
Existem duas formas de se escrever um comentário em um programa do Arduino, a linha
de comentário ou o bloco de comentário.
Toda linha de comentário é iniciada por // tudo que está localizado a direita do // é
interpretado como comentário até que seja pulado de linha (também conhecido como
enter). O bloco de comentário por sua vez é delimitado por /* e */, portanto tudo que está
entre este /* e */ é um comentário, por exemplo:
DICA: Sempre que possível utilize comentários, pode parecer chato e uma
perda de tempo escrever comentários em um programa que talvez somente
nós iremos utilizar, não parece chato é realmente chato, mas não é perda
de tempo. Muitas vezes fazemos um programa na esperança de nunca mais
fazer qualquer tipo de alteração, mas sempre existe aquele dia em que
precisamos editar alguma coisinha no programa e daí nos deparamos com
aquela bagunça e não sabemos nem por onde começar. Moral da história,
normalmente começamos um novo programa do zero, perdendo mais tempo
do que o que seria necessário para fazer os benditos comentários, portanto,
COMENTE!!!
P.S.: Esta é uma das minhas experiências de vida, não comentar e ter que
refazer o serviço, experiência a não ser seguida.
Agora que já sabemos o que um comentário e sabemos que é bom utilizá-los, vamos
entender nosso primeiro programa.
Esta linha é uma declaração de uma variável. Variáveis como o próprio nome já diz é algo
que pode variar (Ah vá!), ou seja, damos esse nome a um endereço de memória que guarda
em seu conteúdo uma informação que pode ser alterada a qualquer momento do programa.
Em nosso caso a declaração de variáveis serve para falar para o Arduino em qual pino ou
porta estará ligado o LED.
Um conceito importante a se saber sobre variáveis é se ela é global ou local. Uma variável
global pode ser vista e editada dentro de toda e qualquer função do programa (daqui a
pouco eu explico o que é uma função!), já uma variável local, apenas pode ser vista e/ou
modificada dentro da função onde ela foi declarada. Para simplificar nossas vidas vou me
restringir apenas ao universo Arduino.
Toda variável que for declarada fora de uma função, por exemplo, setup(), loop(), etc são
variáveis globais. Variáveis declaradas dentro de funções são variáveis locais.
A função setup() e todo seu conteúdo é executado apenas uma vez quando o Arduino é
iniciado, entenda essa função como um conjunto de instruções enviadas ao Arduino para
que ele se configure adequadamente para fazer os comandos que virão na sequência.
A função loop() é a função principal do Arduino que será executada de forma repetitiva,
todos os comandos pertencentes a esta função serão executados em um loop infinito. Tudo
que você queira que seu Arduino faça ponha dentro desta função.
No nosso programa dentro da função setup() apenas configuramos o pino do LED (pino 13)
como saída, uma vez que um pino digital pode ser tanto entrada como saída. Essa
configuração é feita por meio do comando pinMode, como pode ser visto:
Lembre-se que led é uma variável que criamos e que é igual a 13. Caso o pino a ser
configurado for uma entrada troque OUTPUT por INPUT.
O restante do programa está todo dentro da função loop() e é composto apenas por dois
comandos o digitalWrite e o delay.
O comando digitalWrite liga a saída do Arduino caso se use HIGH ou desliga se LOW for
usado, novamente é necessário informar qual pino vai ser ligado ou desligado. O comando
delay faz o Arduino aguardar o tempo em milissegundos [ms] especificado, só para lembrar
1000 ms é igual a 1 s.
Bem é isso, terminamos nosso primeiro programa. Como a função loop() é executada
repetidamente, nosso programa irá ficar piscando um LED ligado ao pino 13 até que o
Arduino seja desligado.
A melhor parte deste programa é que ele não precisa de nenhum circuito eletrônico
adicional para ser testado, você lembra que nossa placa do Arduino já possui um LED
conectado ao pino 13, portanto é só fazer o upload do programa e verificar o resultado.
Para fazer o upload, primeiramente precisamos compilar o programa para só depois fazer o
upload para nossa placa Arduino. Para compilar o programa devemos clicar no botão Verify
do ambiente de desenvolvimento, para ver se não existe nenhum erro de código.
Se na barra inferior aparecer a mensagem: Done Compiling, o programa está pronto para
ser enviado ao Arduino. Para tanto, basta clicar no botão Upload. Espere então o upload
ser completado e pronto. Você deverá ver o led da placa piscando com intervalos de 1
segundo.
Você provavelmente alterou os tempos de forma igual nos dois comandos delay, tente
colocar dois valores diferentes e bem pequenos, por exemplo, 1 e 5, que equivale a 1 ms
com o LED ligado e 5 ms com o LED desligado, faça o upload e veja o que aconteceu de
diferente.
2.2. SÓ PISCAR NÃO DÁ! EU QUE QUERO ACENDER E APAGAR ESTE LED
Nosso primeiro programa foi válido como aprendizado, porém, acredito que você deve ter se
cansado dele após poucos minutos. Sabendo disso vamos aprender mais algumas
coisinhas para incrementar nossos projetos. Nesse exemplo iremos aprender a usar um
botão no Arduino.
/*************************************************************************
** **
** CURSO ARDUINO PARA INICIANTES - ROBOCORE **
** **
** Exemplo 02: Usando um botão **
** **
*************************************************************************/
Já sabemos que as primeiras linhas de nosso programa são declarações de variáveis para
indicar os pinos que estamos usando (Pino 13 para o LED e o pino 2 para o botão). Além
dos endereços dos pinos temos mais uma variável, que chamamos de estado, que será
usada para salvar o estado em que o botão está 0 para desligado e 1 para ligado.
No setup() não possuímos novidades portanto vamos direto para o loop(), onde estão as
novidades. O comando digitalRead retorna o estado de uma entrada digital, LOW ou 0 caso
nosso botão não esteja pressionado e HIGH ou 1 caso alguém esteja apertando o botão.
Vamos lá, faça o upload desse nosso segundo programa e veja o que acontece.
O programa já ficou mais interessante, mas é cansativo ficar com o dedo no botão por todo
o tempo que eu queira a luz acesa, não seria mais legal apertar o botão uma vez e ligar o
LED e apertar novamente para desligar?
A resposta é óbvia, lógico que fazer assim é muito mais inteligente, então vamos fazer isso.
O circuito continua o mesmo, só o programa que mudou um pouco:
/*************************************************************************
** **
** CURSO ARDUINO PARA INICIANTES - ROBOCORE **
** **
** Exemplo 03: Usando um botão com memória **
** **
*************************************************************************/
O programa não mudou muita coisa, adicionamos uma variável chamada estado_led,
encare essa variável como uma memória para saber se o LED está aceso ou apagado. Ao
invés de acionarmos diretamente o LED, quando apertamos o botão, alteramos, ou melhor,
invertemos o estado dessa variável, se está aceso apagamos se está apagado acendemos.
Ao final utilizamos essa memória para comandar a saída ligada ao LED.
Simples, não é? Então faça logo esse upload e teste seu novo programa.
Você deve ter percebido que esse nosso programa parece não funcionar direito às vezes, e
talvez já esteja duvidando da qualidade desse curso. Calma eu consigo me redimir. O
problema que está acontecendo em nosso programa anterior já é bem conhecido no
fantástico mundo da eletrônica, este fenômeno é chamado de Bouncing e está representado
na figura abaixo.
O Bouncing ocorre toda a vez que se altera o estado de um botão, isto se deve ao fato de
irregularidades nas superfícies metálicas localizadas na parte interna do botão, e não
adianta querer trocar de botão todos são assim. Felizmente o bouncing geralmente dura de
10 a 50 ms, portanto ensinarei pra você como implementar um Debouncing para evitar
esse inconveniente. Nosso Debouncing está implementado no código abaixo.
/*************************************************************************
** **
** CURSO ARDUINO PARA INICIANTES - ROBOCORE **
** **
** Exemplo 04: Usando um botão com debouncing **
** **
*************************************************************************/
void loop() {
estado = digitalRead(botao); // Lê a entrada do botão
Faça o upload e veja como melhorou! Se o resultado ainda não ficou a seu agrado altere o
tempo do delay.
Legal já sabemos ligar e desligar um LED, mas seria mais legal se conseguíssemos acendê-
lo de forma proporcional, sabe pra fazer aquele ambiente a meia-luz dá pra fazer isso? A
resposta é: Claro que sim, mas pra isso precisaremos usar a saída analógica do Arduino,
que ao invés de colocar 0 ou 5 V em sua saída permite valores intermediários, como por
exemplo, 3.9 V.
Para gerar as saídas analógicas o Arduino utiliza um recurso que já havia mencionado
anteriormente o PWM, a figura abaixo explica o conceito por trás deste recurso.
O conceito é simples, tendo apenas dois estados ligado e desligado o PWM consiste em
deixar a saída parte do tempo ligada parte do tempo desligada, porém, em período de
tempo muito pequeno para que nossos olhos não consigam perceber que desligamos a
saída. O período total em que esse processo de ligar e desligar acontece é fixo, e é a razão
entre o tempo ligado e o tempo desligado que varia a intensidade da saída.
Para você entender melhor vamos considerar que nosso período é de 10 ms se utilizarmos
o PWM em 50%, ou seja, 5 ms ligado e 5 ms desligado, veremos a lâmpada, ilustrada pelo
raio amarelo, acesa com metade da intensidade luminosa que teríamos se deixássemos a
lâmpada ligada os 10 ms. Para um tempo de 2 ms ligado e 8 ms desligado, teríamos um
PWM em 20%, ou seja, a lâmpada pareceria estar acesa com 20% da sua intensidade
máxima.
Vamos montar um circuito para testar essa funcionalidade do Arduino, agora precisamos
trocar a porta do LED, uma vez que o pino 13 não é PWM. Já que teremos que usar um
LED a mais no circuito, vamos aproveitar para usar um LED de alto-brilho, aquele
transparente do seu kit, você verá como ele é bem mais bonito.
/*************************************************************************
** **
** CURSO ARDUINO BÁSICO - ROBOCORE **
** **
** Exemplo 05: LED com efeito Fading **
** **
*************************************************************************/
void setup() {
// não precisamos colocar nada no setup, para uma saída analógica não precisa configurar.
}
void loop() {
A primeira grande novidade em nosso programa é a estrutura for, que faz parte do
conjunto de estruturas de repetição presentes nas linguagens de programação. Encare o
for como uma estrutura que executará o conteúdo englobado pelo conjunto de “{” e “}” uma
certa quantidade de vezes. No nosso caso iniciamos a variável saida com 0 (saida = 0) e
aumentamos seu valor de 5 em 5 (saida +=5) até que ela atinja 255 (saida <= 255), só
assim a estrutura for e seu conteúdo parará de ser executada. Esta mesma estrutura é
executada mais uma vez, porém, decrementando a variável ao invés de incrementar.
Faça o upload desse programa em sua placa Arduino agora mesmo e veja o LED acender e
apagar gradativamente.
Dificilmente iremos utilizar uma lâmpada funcionando do mesmo jeito do exemplo anterior,
é muito mais inteligente utilizar um dimmer. Um dimmer nada mais é que um
potenciômetro usado para variar a intensidade da luminosidade da lâmpada.
O circuito que devemos montar nesse exemplo é bem parecido com o anterior, sendo
apenas necessário adicionar o potenciômetro a uma das 6 entradas analógicas do Arduino,
como pode ser observado no circuito abaixo.
/*************************************************************************
** **
** CURSO ARDUINO PARA INICIANTES - ROBOCORE **
** **
** Exemplo 06: Dimmer **
** **
*************************************************************************/
void setup() {
// não precisamos colocar nada no setup, para uma saída analógica não precisa configurar.
}
void loop() {
saida = analogRead(pot); // Lê o valor da entrada analógica (0 – 1023)
saida = map(saida, 0, 1023, 0, 255); // Converte o valor da saída para valores entre 0-255
analogWrite(led, saida); // Acende o LED com intensidade proporcional ao potenciômetro
}
é apenas necessário informar qual entrada a ser lida (no nosso caso A0) e então será
retornado um valor entre 0 e 1023 proporcional ao valor da tensão presente no pino.
A função map por sua vez apenas faz um ajuste de escala de uma determinada variável. No
nosso programa a variável saida possui um valor entre 0 e 1023, porém, para ser utilizado
no comando analogWrite seu valor não pode exceder 255, portanto utiliza-se o comando
map para fazer essa adequação.
Faça o upload desse novo programa em seu Arduino, mexa no potenciômetro do circuito e
verifique que a intensidade do LED se altera proporcionalmente.
Você neste momento pode estar se perguntando se é possível comunicar o Arduino com
seu computador, a resposta é sim, e isso pode ser feito de uma maneira muito simples,
usando uma comunicação serial.
Para você entender o conceito por trás da comunicação serial, vamos utilizar o mesmo
circuito do exemplo anterior e apenas alterar o programa. Nossa intenção é enviar para o
computador o valor que estamos lendo no potenciômetro e enviando para o LED.
/*************************************************************************
** **
** CURSO ARDUINO PARA INICIANTES - ROBOCORE **
** **
** Exemplo 07: Dimmer com Serial **
** **
*************************************************************************/
void setup() {
[Link](9600); // Cria a comunicação serial
// não precisamos colocar nada no setup, para uma saída analógica não precisa configurar.
}
void loop() {
saida = analogRead(pot); // Lê o valor da entrada analógica (0 – 1023)
[Link]("Potenciometro = "); // Escreve Potenciometro = na serial
[Link](saida); // Escreve na serial o valor da saida
saida = map(saida, 0, 1023, 0, 255); // Converte o valor da saída para valores entre 0-255
[Link](" LED = "); // Escreve LED = na serial
[Link](saida); // Escreve na serial o valor da saida
analogWrite(led, saida); // Acende o LED com intensidade proporcional ao potenciômetro
}
O uso da comunicação serial, como você pode ver no programa acima, é bem simples.
Basicamente utilizaremos três comandos, o [Link](9600) que cria a comunicação
serial, o 9600 é o valor de baudrate que a velocidade que são enviados os dados pela serial.
Podem ser enviados dados (variáveis) e textos pela serial, para enviar uma variável basta
colocar o nome da variável dentro dos parênteses. Para se enviar um texto pela serial deve-
se coloca-lo entre aspas duplas (“ ”), recomenda-se não utilizar acentuação nos textos.
Faça o upload do programa em seu Arduino, para visualizar os dados enviados pela serial
abra o Serial Monitor no IDE do Arduino.
Serial Monitor
Você pode ter ficado empolgado com o fato do Arduino poder conversar com seu
computador, mas provavelmente deve ter ficado se perguntando “Toda a vez que eu quiser
saber o que o Arduino está fazendo eu terei que conectá-lo ao meu computador?”. A
resposta é não.
Existem diversos tipos e tamanhos de displays LCD, o que utilizaremos é o 16x2. Este
display apresenta 2 linhas e 16 colunas, por isso o nome (sugestivo não?). Independente do
tamanho os pinos de configuração e comunicação desses diplays são geralmente iguais.
Os displays LCDs são controlados por meio de uma comunicação paralela. Esta por sua
vez pode ser configurada de duas maneiras: 4 bits ou 8 bits. O modo de 4 bits requer sete
pinos de I/O do Arduino, enquanto que o modo de 8 bits requer 11 pinos. Para a exibição
de textos, você pode fazer quase tudo, no modo de 4 bits, em nosso exemplo controlaremos
um display LCD 16x2 no modo de 4 bits, afinal de contas sempre é bom economizar
alguns pinos do Arduino. Monte o circuito abaixo, atentando-se nos pinos do display LCD,
para podermos iniciar nosso exemplo.
Para se imprimir algo no display deve-se primeiramente posicionar o cursor, imagine que o
display LCD funciona como uma antiga máquina de escrever, todos os dados enviados ao
display são impressos caractere por caractere um após o outro a partir da posição do
cursor, a única diferença é que o Arduino não pula linha automaticamente, para isso você
precisará utilizar a função [Link](número da coluna, número da linha). Vale
lembrar que tanto o número da linha quanto o da coluna começam no 0 (zero).
Para imprimir um dado no display LCD basta utilizar a função [Link](dado a ser
impresso), lembrando que ser for imprimir um texto este deve estar entre “ ”. Não perca
mais tempo faça o upload desse programa em seu Arduino e vamos ver o tempo que o
Arduino está ligado impresso no display LCD.
/*************************************************************************
** **
** CURSO ARDUINO PARA INICIANTES - ROBOCORE **
** **
** Exemplo 08: Usando o display LCD **
** **
*************************************************************************/
void setup() {
[Link](16, 2); // Define o tamanho do display LCD (16 colunas e 2 linhas)
[Link]("Alo Arduino"); // Imprime o texto no display LCD
}
void loop() {
[Link](0, 1); // Posiciona o cursor na coluna 0 e linha 1 (A linha 1 é a segunda
linha)
[Link](millis()/1000); // Imprime os segundos que se passaram desde que o Arduino foi
ligado
}
DICA: Se você não conseguir ver o texto escrito no seu display LCD, mexa
no potenciômetro presente no circuito. Este potenciômetro é responsável
por ajustar o contraste do display LCD.
Até agora não utilizamos nosso Arduino para ler o valor vindo de um sensor analógico.
Neste experimento além de medirmos a temperatura ambiente, por meio de um sensor de
temperatura, criaremos uma indicação luminosa com a barra gráfica de LEDs e um sinal
de alarme utilizando um buzzer.
O programa para nosso alarme é bem simples, todos os conceitos para se fazer esse
experimento você já possui, só é preciso adaptá-los aos novos componentes. O buzzer será
acionado como o LED dos primeiros exemplos, de forma digital (HIGH ligado e LOW
desligado) e da mesma forma a barra gráfica de LEDs. Para se ler o valor proporcional à
A lógica do programa responsável por fazer nosso alarme sonoro funcionar vai ter duas
condições, onde a primeira se dá quando a temperatura é maior que valor de referência
(SetPoint) fazendo o buzzer tocar ou desligando ele quando o valor for menor. Já para a
barra gráfica de LEDs, para cada LED da barra um valor de referência deve ser
determinado. Programa entendido? Sim, então faça o upload dele em seu Arduino e vamos
ver como ficou o nosso alarme.
/*************************************************************************
** **
** CURSO ARDUINO PARA INICIANTES - ROBOCORE **
** **
** Exemplo 09: Alarme de temperatura **
** **
*************************************************************************/
int PinoSensor = A0; // Pino no qual o sensor de temperatura está conectado, no caso A0
int Buzzer = 3; // Pino no qual o buzzer está conectado, no caso 2
int ValorSensor = 0; // Variável para guardar a leitura do sensor de temperatura
float temperatura = 0; // Variável para guardar o valor convertido do sensor para um valor
de temperatura
int SetPoint = 40; // Set point de temperatura, acima desse valor dispara o alarme
int led1 = 4; // Pino no qual o primeiro LED da barra gráfica será ligado, no caso 3
int led2 = 5; // Pino no qual o segundo LED da barra gráfica será ligado, no caso 4
int led3 = 6; // Pino no qual o terceiro LED da barra gráfica será ligado, no caso 5
int led4 = 7; // Pino no qual o quarto LED da barra gráfica será ligado, no caso 6
int led5 = 8; // Pino no qual o quinto LED da barra gráfica será ligado, no caso 7
int led6 = 9; // Pino no qual o sexto LED da barra gráfica será ligado, no caso 8
int led7 = 10; // Pino no qual o sétimo LED da barra gráfica será ligado, no caso 9
int led8 = 11; // Pino no qual o oitavo LED da barra gráfica será ligado, no caso 10
int led9 = 12; // Pino no qual o nono LED da barra gráfica será ligado, no caso 11
int led10 = 13; // Pino no qual o décimo LED da barra gráfica será ligado, no caso 12
void setup() {
pinMode(led1, OUTPUT); // Configura o pino do LED 1 como saída
pinMode(led2, OUTPUT); // Configura o pino do LED 2 como saída
pinMode(led3, OUTPUT); // Configura o pino do LED 3 como saída
pinMode(led4, OUTPUT); // Configura o pino do LED 4 como saída
pinMode(led5, OUTPUT); // Configura o pino do LED 5 como saída
pinMode(led6, OUTPUT); // Configura o pino do LED 6 como saída
pinMode(led7, OUTPUT); // Configura o pino do LED 7 como saída
pinMode(led8, OUTPUT); // Configura o pino do LED 8 como saída
pinMode(led9, OUTPUT); // Configura o pino do LED 9 como saída
pinMode(led10, OUTPUT); // Configura o pino do LED 10 como saída
pinMode(Buzzer, OUTPUT); // Configura o pino do buzzer como saída
[Link](9600); // Cria a comunicação serial
}
void loop() {
ValorSensor = analogRead(PinoSensor); // Lê o valor do sensor de temperatura
temperatura = 5.0*ValorSensor*100/1024; // Converte o valor lido do sensor em um valor de
temperatura
[Link]("Valor do Sensor = "); // Escreve Valor do Sensor = na serial
[Link](ValorSensor); // Escreve o valor do sensor na serial
[Link](" Valor da Temperatura = "); // Escreve Valor do Sensor = na serial
[Link](temperatura); // Escreve o valor do sensor na serial
digitalWrite(Buzzer, LOW); // O valor lido é menor que o set point, não aciona o alarme
}
if (temperatura <= 20) { // A temperatura é menor que 20, apaga todos os LEDs
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
}
Você sempre vontade de tocar algum instrumento musical, mas nunca teve o dom (para
não dizer coordenação motora)? Se a sua resposta foi sim seus problemas se acabaram,
agora você pode programar seu Arduino para tocar uma música para você. Neste
experimento iremos aprender a utilizar uma função do Arduino que é capaz de produzir
notas musicais.
Primeiramente monte o circuito abaixo, ele é bem simples é só retirar a parte do sensor de
temperatura do experimento anterior.
Não perca mais um minuto, faça o upload desse programa em seu Arduino e vamos
escutar uma musiquinha.
/*************************************************************************
** **
** CURSO ARDUINO PARA INICIANTES - ROBOCORE **
** **
** Exemplo 10: Tocando uma melodia **
** **
*************************************************************************/
void setup() {
// tone(Pino, Frequência, Duração)
tone(Buzzer,NOTE_C4,250); // Toca a nota de acordo com os parâmetros
delay(325); // Espera o tempo da pausa
noTone(Buzzer); // Para de tocar a nota, prepara para próxima nota
tone(Buzzer,NOTE_G3,125); // Toca a nota de acordo com os parâmetros
delay(160); // Espera o tempo da pausa
noTone(Buzzer); // Para de tocar a nota, prepara para próxima nota
tone(Buzzer,NOTE_G3,125); // Toca a nota de acordo com os parâmetros
delay(160); // Espera o tempo da pausa
noTone(Buzzer); // Para de tocar a nota, prepara para próxima nota
tone(Buzzer,NOTE_A3,250); // Toca a nota de acordo com os parâmetros
delay(325); // Espera o tempo da pausa
noTone(Buzzer); // Para de tocar a nota, prepara para próxima nota
tone(Buzzer,NOTE_G3,250); // Toca a nota de acordo com os parâmetros
delay(325); // Espera o tempo da pausa
noTone(Buzzer); // Para de tocar a nota, prepara para próxima nota
tone(Buzzer,0,250); // Toca a nota de acordo com os parâmetros
delay(325); // Espera o tempo da pausa
noTone(Buzzer); // Para de tocar a nota, prepara para próxima nota
tone(Buzzer,NOTE_B3,250); // Toca a nota de acordo com os parâmetros
delay(325); // Espera o tempo da pausa
noTone(Buzzer); // Para de tocar a nota, prepara para próxima nota
tone(Buzzer,NOTE_C4,250); // Toca a nota de acordo com os parâmetros
delay(325); // Espera o tempo da pausa
noTone(Buzzer); // Para de tocar a nota, prepara para próxima nota
}
void loop() {
// A melodia apenas é executada uma vez no setup
}
/*************************************************************************
** **
** CURSO ARDUINO PARA INICIANTES - ROBOCORE **
** **
** Exemplo 11: Teremim **
** **
*************************************************************************/
void setup() {
pinMode(ledPin, OUTPUT); // Inicializa o pino do LED como saída.
digitalWrite(ledPin, HIGH); // Liga a saída do LED
Sensor_Max = Valor_sensor;
}
// Grava o menor valor lido no LDR
if (Valor_sensor < Sensor_Min) {
Sensor_Min = Valor_sensor;
}
}
// Desliga o LED para indicar fim da rotina de calibração do LDR
digitalWrite(ledPin, LOW);
}
void loop() {
Valor_sensor = analogRead(A0); //Lê o valor do LDR
Uma das diferenças desse programa é que executaremos algumas tarefas dentro do setup,
para ser mais específico será executada uma rotina de calibração do nosso teremim dentro
do setup. Essa calibração consiste em determinar o maior e o menor valor lido pelo
Arduino referente à luminosidade sentida pelo LDR. Utilizaremos a luminosidade como
uma medida indireta da posição da mão da pessoa que estará tocando o teremim, quanto
mais perto a mão mais escuro, quanto mais longe mais claro.
Toda essa rotina de calibração dura 5 segundos e é feita dentro do laço de repetição while
do setup.
O LED do pino 13 é usado para indicar que a rotina de calibração está ativa, LED aceso
rotina ativa, LED apagado rotina finalizada. Durante a calibração espera-se que a pessoa
movimente a mão, que irá utilizar para tocar o teremim, para cima e para baixo em cima
do LDR. Com isso o Arduino irá registrar a maior e a menor posição da sua mão e ajustará
a faixa de valores possíveis melhorando a escala da leitura.
Passado a rotina de calibração ficou fácil, no loop apenas temos a função int nota =
map(Valor_sensor, Sensor_Min, Sensor_Max, 50, 4000), que transformará a posição da
mão em uma faixa de frequências entre 50 e 4000, e a função tone(Buzzer, nota, 20) que
tocará a frequência da nota proporcional a posição da mão.
Está chegando ao fim a saga do seu treinamento inicial no mundo do Arduino, nesse
momento você já deve possuir todos os conhecimentos básicos que são necessários para
entender, fazer e criar o seu próprio projeto utilizando está fantástica ferramenta. Como
projeto de graduação no nosso curso eu te proponho criar um piano de 4 notas.
Logo abaixo eu coloco para você o circuito do nosso projeto, porém, gostaria que nesse
momento você tentasse montar o circuito sem bisbilhotar o circuito abaixo. Caso você trave
em alguma parte do circuito volte em nossos experimentos anteriores e tente rever o
conceito que você está com dificuldade.
A mesma ideia serve para o programa, ele é simples, mas utiliza boa parte dos comandos
básicos que trabalhamos nesse curso. Acredito que você conseguirá entende-lo sem
maiores problemas, mas a ideia de criar o programa sem “colar” do programa pronto
abaixo continua valendo. Tente criar seu próprio programa com suas próprias
características (lembra que eu disse que cada um tem seu jeito próprio de programar?).
Lembre-se de configurar os pinos de entrada e saída (use a dica de criar variáveis para
isso), confira se os pinos que você colocou no programa são os mesmos que estão
montados no circuito. Não existe uma só maneira de fazer este projeto, fique a vontade
para dar seu toque pessoal, assim você poderá dizer que esse projeto é de fato seu.
/*************************************************************************
** **
** CURSO ARDUINO PARA INICIANTES - ROBOCORE **
** **
** Projeto Final: Teclado de 4 notas **
** **
*************************************************************************/
4. CONSIDERAÇÕES FINAIS
Bem, nosso curso chegou ao fim, mas não chegaram ao fim os infinitos projetos que agora
você pode desenvolver. Com esses mesmos componentes presentes no seu kit você pode
criar, por exemplo, uma lâmpada que acende automaticamente quando ficar escuro,
utilizando o LDR e o LED. Outra ideia que você pode por em prática, também utilizando o
LDR, é criar uma distorção para seu piano do projeto final.
Com o sensor de temperatura e o display LCD você pode criar um termômetro para seu
quarto. Projetos que usam LEDs como os do kit você encontrará aos montes na internet. Já
apreoveitando que falei de internet não deixe de acessar o site da RoboCore®
([Link]), use e abuse do nosso fórum. Nele existem duas seções que você pode
tirar grande proveito, a seção Arduino e a seção de Tutoriais, seja para tirar dúvidas seja
para compartilhar com outras pessoas seus progressos e projetos.
Espero que este curso tenha sido proveitoso para você e desejo muita sorte neste fantástico
mundo que você acabou de conhecer. Explore todas as possibilidades dele, seja um
Arduinizador do Mundo.
Arduinize o Mundo
RoboCore®: Curso Arduino para Iniciantes
[Link]