Escolar Documentos
Profissional Documentos
Cultura Documentos
INTRODUO
O objetivo deste manual apresentar, de uma forma simples e rpida, o bsico
de programao, sendo assim iremos focar apenas nos conceitos que so
importantes para Arduino e sistemas embarcados em geral.
COMPUTADOR
PROGRAMA DE COMPUTADOR
LINGUAGEM DE PROGRAMAO
www.meccomeletronica.com Pgina 1
Para converter um programa escrito em uma linguagem de alto nvel para
linguagem de mquina, ns utilizamos uma coisa chamada compilador. A ao
de converter um programa para linguagem de mquina chamada compilar.
Para compilar um programa, normalmente se utiliza um ambiente de
desenvolvimento (ou IDE, do ingls 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.
ALGORITMO (PROGRAMA)
VARIVEL
INT LED;
Nesse caso estamos declarando uma varivel do tipo INT chamada LED. Em
seguida ns falaremos mais sobre o tipo de dado de uma varivel.
www.meccomeletronica.com Pgina 2
TIPO DE DADO
O tipo de dado de uma varivel significa, como o prprio nome diz, o tipo de
informao que se pode armazenar naquela varivel. Em muitas linguagens de
programao, como C++, obrigatrio definir o tipo de dado no momento da
declarao da varivel, como vimos na declarao da varivel led acima. No
caso dos Arduino que usam processador ATmega, os tipos mais comuns de
dados que utilizamos so:
char: um caracter
ATRIBUIO
Atribuir um valor a uma varivel significa armazenar o valor nela para usar
posteriormente. O comando de atribuio em C++ o =. Para atribuirmos o
valor 13 varivel led que criamos acima, fazemos assim:
LED = 13;
O objetivo dessa linha de cdigo dizer que o pino 13 do Arduino ser utilizado
para acender o LED, e armazenar essa informao para usar depois ao longo
do programa.
www.meccomeletronica.com Pgina 3
Os valores fixos usados no programa, como o valor 13 acima, so chamados
de constantes, pois, diferentemente das variveis, o seu valor no muda.
OPERADOR
x = 2 + 3;
www.meccomeletronica.com Pgina 4
Ao longo do desenvolvimento dos seus projetos, aos poucos voc se
familiarizar com todos esses operadores.
FUNO
Uma funo , em linhas gerais, uma seqncia de comandos que pode ser
reutilizada vrias vezes ao longo de um programa. Para criar uma funo e
dizer o que ela faz, ns precisamos fazer uma declarao de funo. Veja
como uma funo declarada no nosso programa de exemplo:
void setup() {
pinMode(led, OUTPUT);
Aqui estamos declarando uma funo com o nome setup(). O que ela faz
executar os comandos de uma outra funo pinMode(). A ao de executar os
comandos de funo previamente declarada denominada chamada de
funo. Ns no precisamos declarar a funo pinMode() porque ela j
declarada automaticamente no caso do Arduino.
CHAMADA DE FUNO
setup();
VALOR DE RETORNO
A palavra chave que vem antes do nome da funo na declarao define o tipo
do valor de retorno da funo. Toda vez que uma funo chamada, ela
executada e devolve ou retorna um determinado valor - esse o valor de
retorno, ou simplesmente retorno da funo. O valor de retorno precisa ter um
tipo, que pode ser qualquer um dos tipos de dados citados anteriormente. No
caso da nossa funo setup(), o tipo de retorno void, o que significa que a
funo no retorna nada.
www.meccomeletronica.com Pgina 5
Para exemplificar, vamos criar uma funo que retorna alguma coisa, por
exemplo um nmero inteiro. Para retornar um valor, ns utilizamos o comando
return:
int f() {
return 1;
Quando chamada, a funo f() acima retorna sempre o valor 1. Voc pode usar
o valor de retorno de uma funo para atribu-lo a uma varivel. Por exemplo:
x = f();
PARMETROS
return a + b;
Aqui acabamos definir uma funo chamada soma(), que aceita dois nmeros
inteiros como parmetros. Ns precisamos dar um nome para esses
parmetros, e nesse caso escolhemos a e b. Esses parmetros funcionam
como varivel que voc pode usar dentro da funo. Sempre que chamarmos a
funo soma(), precisamos fornecer esses dois nmeros. O comando return a
+ b; simplesmente retorna a funo com a soma dos dois nmeros. Vamos
ento somar 2 + 3 e atribuir o resultado para uma varivel x:
x = soma(2, 3);
COMENTRIOS
www.meccomeletronica.com Pgina 6
Na linguagem C++, um comentrio pode ser escrito de duas formas:
/*
*/
/*
*/
/*
*/
void setup() {
www.meccomeletronica.com Pgina 7
/*
*/
void loop() {
www.meccomeletronica.com Pgina 8
ESTRUTURAS DE CONTROLE
WHILE
while(condio) {
...
int i = 0;
while(i < 3) {
www.meccomeletronica.com Pgina 9
delay(5000); // Espera 5 segundos para piscar o LED de novo
Primeiro ns declaramos uma varivel i. Essa varivel vai contar quantas vezes
o LED j piscou desde o incio do programa ou desde a ltima pausa de cinco
segundos. Ns vamos inicializar essa varivel com zero porque no incio da
funo loop() o LED ainda no piscou nenhuma vez sob essas condies.
www.meccomeletronica.com Pgina 10
2. Somamos 1 varivel i, tornando-a 3: sabemos que o LED piscou trs
vezes.
FOR
int i;
www.meccomeletronica.com Pgina 11
A primeira modificao que fizemos foi declarar a varivel i sem inicializ-la
com o valor 0. Ns podemos fazer isso porque o comando for far isso para a
gente. Ele segue o seguinte formato:
...
}
IF
Para ilustrar, vamos modificar o nosso programa de exemplo para que ele faa
a mesma coisa que fizemos com o while e o for acima, porm vamos fazer isso
usando um if, que segue o seguinte formato:
if(condio) {
...
int i = 0;
void loop() {
www.meccomeletronica.com Pgina 12
i++; // Incrementa o nmero de "piscadas"
if(i == 3) {
www.meccomeletronica.com Pgina 13
IF-ELSE
O if-else, tambm conhecido como if-then-else, pode ser visto como uma
extenso do comando if. Else em ingls significa "caso contrrio", e ele faz
exatamente o que o nome diz: "se isso for verdadeiro, ento faa aquilo, caso
contrrio, faa outra coisa". Ele segue o seguinte formato:
if(condio) {
...
} 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 perodo mais curto.
Dentro da funo loop(), teremos o seguinte:
int i;
if(i == 2) {
} else {
www.meccomeletronica.com Pgina 14
digitalWrite(led, LOW); // Atribui nvel lgico baixo ao pino do LED,
apagando-o
BIBLIOTECAS
#INCLUDE <LIQUIDCRYSTAL.H>
www.meccomeletronica.com Pgina 15
lcd.begin(16, 2);
Feitos esses passos, j podemos escrever texto no LCD. Fazemos isso usando
o mtodoprint() do objeto lcd, sempre que precisarmos ao longo do programa:
lcd.print("Oi!");
www.meccomeletronica.com Pgina 16
O QUE O ARDUINO?
www.meccomeletronica.com Pgina 17
2. O Hardware
Arquitetura do Arduino
www.meccomeletronica.com Pgina 18
O hardware do Arduino muito simples, porm muito eficiente. Vamos analisar
a partir deste momento, o hardware do Arduino UNO. Esse hardware
composto dos seguintes blocos:
Pinos digitais
0 ou 1, low ou high
Pinos analgicos
(0,1,2,3.....1021,1022,1023)
www.meccomeletronica.com Pgina 19
2.1 Fonte de Alimentao
Responsvel por receber a energia de alimentao externa, que pode ter uma
tenso de no mnimo 7 Volts e no mximo 35 Volts e uma corrente mnima de
300mA. A fonte filtra e depois regula a tenso de entrada para duas sadas: 5
Volts e 3,3 Volts. O requisito deste bloco entregar as tenses de 5 e 3,3 Volts
para que a CPU e os demais circuitos funcionem.
Comentamos acima que basicamente toda eletrnica ativa est dentro do chip
micro controlador. Para entender o que seria essa eletrnica, vamos considerar
o chip mais simples usado no Arduino: o ATMega8.
www.meccomeletronica.com Pgina 20
No Arduino, os 28 pinos deste micro controlador so divididos da seguinte
maneira:
No total temos disponveis 20 pinos que podem ser utilizados como entradas
digitais. Os 14 pinos digitais mais os 6 pinos analgicos, podem ser
programados para serem entradas digitais. Quando um pino programado
para funcionar como entrada digital, atravs do programa que escrevemos
colocamos um comando que ao ser executado efetua a "leitura" da tenso
aplicada ao pino que est sendo lido. Ento, aps a execuo deste comando,
sabemos se o pino encontra-se em um estado "alto" ou "baixo".
www.meccomeletronica.com Pgina 21
2.3.2 Entradas Analgicas
Com uma sada digital podemos fazer com que um pino libere 0 volts ou 5
volts. Com um pino programado como sada digital, podemos acender um led,
ligar um rel, acionar um motor, dentre diversas outras coisas. Podemos
programar o Arduino para no mximo 20 sadas digitais, porm podemos
utilizar um ou mais pinos para controlar um bloco de pinos.
PWM: Tratado como sada analgica, na verdade uma sada digital que gera
um sinal alternado (0 e 1) onde o tempo que o pino fica em nvel 1 (ligado)
controlado. usado para controlar velocidade de motores, ou gerar tenses
com valores controlados pelo programa. Pinos 3, 5, 6, 9, 10 e 11.
Porta Serial USART: Podemos usar um pino para transmitir e um pino para
receber dados no formato serial assncrono (USART). Podemos conectar um
mdulo de transmisso de dados via bluetooth por exemplo e nos
comunicarmos com o Arduino remotamente. Pinos 0 (rx recebe dados) e pino 1
(tx envia dados).
Comparador analgico: Podemos usar dois pinos para comparar duas tenses
externas, sem precisar fazer um programa que leia essas tenses e as
compare. Essa uma forma muito rpida de comparar tenses e feita pelo
hardware sem envolver programao. Pinos 6 e 7.
www.meccomeletronica.com Pgina 22
Porta SPI: um padro de comunicao serial Sncrono, bem mais rpido que
a USART. nessa porta que conectamos cartes de memria (SD) e muitas
outras coisas. Pinos 10 (SS), 11 (MOSI), 12 (MISO) e 13 (SCK).
2.5 Firmware
3. O Software
www.meccomeletronica.com Pgina 23
Para comear a utilizar, devemos escolher qual placa estamos utilizando,
assim vamos em Tools > Board e escolhemos. O IDE possui tambm uma
quantidade imensa de exemplos. Para utiliz-los basta ir a File > Examples e
escolher qual deles voc quer testar, de acordo com sua necessidade.
Aproveitando os exemplos que o IDE fornece, nosso primeiro programa vai ser
acender um led.
www.meccomeletronica.com Pgina 24
O programa para o Arduino dividido em duas partes principais: Setup e Loop,
como indicam as setas na imagem.
www.meccomeletronica.com Pgina 25
3.2 Serial Monitor
Esse monitor usado para que possamos comunicar nossa placa com o
computador, mas tambm muito til para a depurao do programa.
Basicamente conectamos a placa no computador e atravs desta tela podemos
ver as informaes enviadas pela placa.
www.meccomeletronica.com Pgina 26
No exemplo, o comando Serial.begin(9600) inicializa a comunicao com uma
taxa de 9600 baunds (taxa de bits). O comando Serial.println (argumento)
envia a mensagem para o computador.
www.meccomeletronica.com Pgina 27
3.3 Outros comandos
Como j foi informado, e vocs j devem ter observado, a linguagem base para
a programar um Arduino C. Logo, suas estruturas de controle (if, else, while,
for...), seus elementos de sintaxe ( #define, #include, {}...), operadores
aritmticos (+, -, *, ^ ...), operadores de comparao (==, !=, <, > ...), enfim,
todos so utilizados aqui no IDE. Portanto, saber C primordial para programar
o Arduino em alto nvel.
www.meccomeletronica.com Pgina 28
4. UTILIZANDO UM PROTOBOARD
Sabemos que a porta digital escreve HIGH (5v) ou LOW (0v). Logo, se
colocarmos 5v o Led ir queimar. Portanto devemos colocar um resistor em
srie com o Led para limitarmos a corrente que passa por ele. Essa corrente
deve ser de algo em torno de 20mA. Assim, utilizando um pouquinho de teoria
de circuitos temos:
www.meccomeletronica.com Pgina 29
Ligado o circuito conforme a figura 8, podemos passar para o Arduino o cdigo
da figura 5 (o exemplo de como acender Led) que o nosso Led externo vai
acender assim como o interno.
www.meccomeletronica.com Pgina 30
5. Utilizando o PWM
PWM significa modulao por largura de pulso (Pulse Width modulation) e
basicamente uma tcnica para obtermos resultados analgicos em com meios
digitais. O controle digital usado para criar uma onda quadrada, um sinal
alternado entre ligado e desligado. Assim a tcnica consiste em manipularmos
a razo cclica de um sinal, o duty cycle afim de transportar informao ou
controlar a potncia de algum outro circuito. Com isso, teremos um sinal digital
que oscila entre 0v e 5v com determinada freqncia (o Arduino trabalha com
um padro prximo a 500Hz). O duty cycle a razo do tempo em que o sinal
permanece em 5v sobre o tempo total de oscilao, como est ilustrado na
figura abaixo:
www.meccomeletronica.com Pgina 31
A funo analogWrite (), apesar de estarmos utilizando uma porta digital, a
responsvel pelo PWM e recebe como parmetro o pino e um valor entre 0
255, em que o 0 corresponde a 0% e 255 corresponde a 100% do duty cycle.
Quando rodarmos o cdigo, podemos observar que o LED acender de
maneira mais suave. Cada etapa de luminosidade diferente corresponde a uma
iterao do for. Agora, tente modificar o cdigo para que o LED tambm
apague suavemente.
www.meccomeletronica.com Pgina 32
6. SHIELDS
O Arduino possui o que chamamos de Shields, que so nada mais, nada
menos do que outras plaquinhas que se acoplam placa original, agregando
diversas outras funcionalidades. Existe diversos Shields, com diversas
funes. Alguns servem como entrada, como sada e outros como entradas e
sada. Com eles conseguimos, por exemplo, fazer com que o Arduino se
comunique numa rede Ethernet ou via USB com um celular Android.
www.meccomeletronica.com Pgina 33
7. CONTROLANDO UM ULTRASSOM
www.meccomeletronica.com Pgina 34
Como temos um receptor e um emissor, precisaremos de dois pinos um para
cada (existe ultrassons que possuem um pino para os dois, porm os mais
comuns utilizam dois). Portanto declaramos dois pinos, um como sada (que
emite o sinal) e outro como entrada (que recebe o sinal). O pino que envia o
pulso chamado de trigger e o que recebe echo. Observe o cdigo abaixo
(bastante comentado):
www.meccomeletronica.com Pgina 35
para que o resultado saia em centmetros, temos que dividir o tempo (duration)
por 29. Por fim o resultado impresso no serial monitor.
www.meccomeletronica.com Pgina 36
8. Utilizando a interrupo
Uma interrupo de entrada e sada (IO) uma funo que executada
quando existe uma mudana estado no pino correspondente, independente do
ponto em que se encontra a execuo do programa. O Arduino UNO possui
dois pinos que podem ser ligados como interrupo, os pinos 2 e 3 (no Arduino
mega temos 6 interrupes).
www.meccomeletronica.com Pgina 37
9. Adicionando uma biblioteca
Possivelmente algum dia voc ir precisar adicionar uma biblioteca para
trabalhar com seu com algum sensor ou outro componente no seu Arduino.
Existem diversas bibliotecas disponveis na internet, que voc pode baixar e
utiliz-las. Entretanto voc tem que adicion-las ao seu IDE para que o mesmo
reconhea os comandos dela que voc est utilizando.
Se sim, a instalao ocorreu tudo bem e voc j pode comear a utilizar a sua
nova biblioteca. Agora s cham-la no seu cdigo, que neste caso ficaria:
#include <MsTimer2.h>. Vale a pena destacar que na prpria pgina onde voc
baixou a biblioteca, possui as instrues de como utilizar a mesma.
www.meccomeletronica.com Pgina 38
10. Explorando um servomotor
O servomotor um dispositivo eletromecnico que, a partir de um sinal eltrico
em sua entrada, pode ter seu eixo posicionado em uma determinada posio
angular. Ou seja, eles no foram feitos para girar livremente, e sim para ir para
uma posio escolhida de acordo com um limite, que geralmente 180 graus.
Por serem pequenos, compactos, alm de permitir um posicionamento preciso
de seu eixo, os ser servomotores so largamente utilizado em robtica e
modelismo. O IDE do Arduino j possui uma biblioteca de fbrica para
controlarmos o servomotor, que a Servo.h.
www.meccomeletronica.com Pgina 39
1 - Para comear declaramos uma varivel do tipo Servo: Servo motor1; por
exemplo. No nosso caso de Arduino UNO podemos criar no mximo 8 servos.
2 - Temos que associar a varivel ao pino que ligamos anteriormente, e isso
feito da seguinte forma: motor1.attach(pino);
3 - Temos que escrever o ngulo para o qual o servo dever girar (entre 0 e
180): motor1.write(ngulo);
4 - Podemos tambm desejar saber o ngulo que o meu servo se encontra,
para isso: ang = motor1.read ();
www.meccomeletronica.com Pgina 40
www.meccomeletronica.com Pgina 41
LOCALIZANDO O ARQUIVO .HEX
Abrir a IDE do Arduino, selecionar File, Preferncias.
www.meccomeletronica.com Pgina 42
Marque a opo Compilation
www.meccomeletronica.com Pgina 43
Selecione a opo Upload, o programa nesse momento ira conferir o cdigo,
estando tudo certo, far o processo de envio do arquivo .hex, neste caso como
no h uma placa conectado ele apontara um erro.
www.meccomeletronica.com Pgina 44
Use a barra de rolagem e encontre na antepenltima linha o caminho da pasta
temporria com o nome completo e o seu arquivo .hex gerado.
www.meccomeletronica.com Pgina 45
Abra o proteus, selecione o modelo de arduino. Sempre insira os pinos de fonte
na placa do arduino.
www.meccomeletronica.com Pgina 46
PARA SELECIONAR O ARQUIVO .HEX
D um duplo clique no ATmega da placa arduino, aps isso aparecer a janela
Edit Component.
www.meccomeletronica.com Pgina 47