Escolar Documentos
Profissional Documentos
Cultura Documentos
Aprendendo a
Programar em
Arduino
Realizao: PET Auto Net
Autor: Micael Bronzatti Gaier
2011
www.autonet.cba.ifmt.edu.br
IFMT
Campus Cuiab
A obra Aprendendo a Programar em Arduino de Micael Gaier - PET AutoNet IFMT foi
licenciada com uma Licena Creative Commons - Atribuio - Uso No Comercial - Partilha nos
Mesmos Termos 3.0 No Adaptada.
Sumrio
Introduo
11
Comentrios
11
Funes - Base
12
Pinmode(Pino, Modo)
12
12
Portas Digitais
12
Portas Analgicas
12
Tempo
14
Bibliotecas
15
#INCLUDE e #DEFINE
15
Variveis E Modificadores
16
Variveis
16
Classe De Variveis
16
17
Funes I
Como Programar Em Arduino
Operadores Booleanos, De Comparao E Incremento E Decremento
18
20
20
Operadores De Comparao
20
Operadores Booleanos
20
21
21
If
21
If... Else
22
For
22
Switch Case
23
While
25
Do While
26
Comunicao Serial
26
28
Operadores Matemticos
28
Trigonometria
30
30
Sinais PWM
30
32
33
33
33
35
Programao Ponte H
Conectando Um Display De Cristal Liquido (LCD)
Programando Um LCD Em Arduino
Uso De Sensores
40
42
43
45
Anexos
47
Bibliografia
48
Introduo
A cada dia que passa a plataforma Arduino vem conquistando novos usurios.
Tal sucesso devido a sua simplicidade e ao fato de no necessitar conhecer
profundamente a eletrnica e as estruturas de linguagens para criar gadgets, robs ou
pequenos sistemas inteligentes.
Devido ao aumento de procura dos estudantes do IFMT para realizar seus
projetos com a plataforma Arduino, o Grupo PET AutoNet juntamente com o
Departamento da rea de Eletro-Eletrnica (DAE-E), o Departamento da rea de
Informtica (DAI) e o Departamento de Pesquisa e Ps-Graduao (DPPG) desta
instituio resolveram ministrar sob orientao do Prof. Dr. Ronan Marcelo Martins um
minicurso sobre a plataforma Arduino aos estudantes interessados, de onde surgiu
esta apostila.
Esta apostila foi desenvolvida para complementar o aprendizado sobre
Arduino, que possui tanto a parte do hardware como do software do Arduino
proporcionando aos estudantes um melhor entendimento sobre o assunto. Esta
apostila serve como apoio tanto para a comunidade interna ou externa ao IFMT devido
s aes sociais realizadas pelo grupo PET AutoNet.
Texto extrado da Revista Saber Eletrnica; Ano 47; N 454 2011; Editora Saber LTDA
Pginas 12 a 15. Autor Filipe Pereira
Apresentao do Arduino: uma placa microcontroladora baseada no microcontrolador
ATmega 328. Ela tem 14 pinos I/O digitais, 6 entradas analgicas, um oscilador de 16 MHz (a cristal),
uma conexo USB, um jaque de alimentao, um header ICSP, e um boto de reset. Ela contm
tudo o que necessrio para o suporte do C (microcontrolador), ligando-a simplesmente a um
computador atravs de um cabo USB, ou alimentando-a com um adaptador AC/AD (ou bateria) para
dar a partida.
Microcontrolador
Tenso de Funcionamento
Tenso de Entrada (recomendado)
Tenso de Entrada (limites)
Pinos E/S digitais
Pinos de Entrada Analgicos
Corrente DC por pino E/S
Corrente DC por pino 3.3V
Memria Flash
SRAM
EEPROM
ATmega328
5V
7-12 V
6-20 V
14 (dos quais 6 so sadas PWM)
6
40 mA
50 mA
32 KB, sendo 2KB utilizado pelo bootloader
2 KB
1 KB
Alimentao
O Arduino pode ser alimentado pela ligao USB ou por qualquer fonte de alimentao externa. A
fonte de alimentao selecionada automaticamente. Alimentao externa (no USB) pode ser tanto de
uma fonte como de uma bateria. A fonte pode ser ligada com um plugue de 2,1 mm (centro positivo) no
conector de alimentao. Cabos vindos de uma bateria podem ser inseridos nos pinos GND (massa) e Vin
(entrada de tenso) do conector de alimentao.
A placa pode funcionar com uma alimentao externa de 6 a 20 volts. Entretanto, se a alimentao
for inferior a 7 volts, o pino 5 V pode fornecer menos de 5 volts e a placa poder ficar instvel. Se a
alimentao for superior a 12 volts, o regulador de tenso poder sobreaquecer e avariar a placa. A
alimentao recomendada de 7 a 12 volts.
Os pinos de alimentao so:
VIN - Entrada de alimentao para a placa Arduino quando uma fonte externa for utilizada. Poderse- fornecer alimentao por este pino ou, se for usar o conector de alimentao, empregar a alimentao
por este pino.
5V - A fonte de alimentao utilizada para o microcontrolador e para outros componentes da placa
pode ser proveniente do pino Vin atravs de um regulador on-board, ou ser fornecida pelo USB ou outra
fonte de 5 volts.
3V3 - Alimentao de 3,3 volts fornecida pelo chip FTDI. A corrente mxima de 50 mA.
GND - Pino terra ou massa.
Memria
O ATmega328 tem 32 KB de memria flash para armazenar cdigo (dos quais 2 KB so utilizados
pelo bootloader), alm de 2 KB de SRAM e 1 KB de EEPROM (Electrically-Erasable Programmable Read-Only
Memory), que pode ser lida e escrita atravs da biblioteca EEPROM.
Entrada e Sada
Cada um dos 14 pinos digitais do Arduino pode ser utilizado como entrada ou sada, usando as
funes de pinMode(), digitalWrite(), e digitalRead(). Eles trabalham com 5 volts. Cada pino pode fornecer
ou receber um mximo de 40 mA e tem uma resistncia de pull-up interna (vem desligada de fbrica) de
20-50 k. Alm disso, alguns pinos tm funes especficas, a saber:
Serial: 0 (RX) e 1 (TX): so usados para receber (RX) e transmitir (TX) dados srie, TTL. Estes pinos
so ligados aos pinos correspondentes do chip serial FTDI USB-to-TTL
External Interrupts: 2 and 3 - Estes pinos podem ser configurados para ativar uma interrupo por
um baixo valor, uma elevao ou falling edge ou uma mudana de valor. Veja a funo attachInterrupt()
para mais pormenores.
PWM: 3, 5, 6, 9, 10, e 11 - Fornecem uma sada analgica PWM de 8-bit com a funo
analogWrite().
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) - Estes pinos suportam comunicao SPI, que embora
compatvel com o hardware, no est includa na linguagem do Arduino.
LED: 13 - H um LED j montado e ligado de origem ao pino digital 13. Quando o pino est no valor
HIGH, o LED acende; quando o valor est em LOW, ele apaga. O Arduino tem 6 entradas analgicas e cada
uma delas tem uma resoluo de 10 bits (i.e. 1024 valores diferentes). Por padro, elas medem de 0 a 5
volts, embora seja possvel mudar o limite superior usando o pino AREF e um pouco de cdigo de baixo
nvel. Adicionalmente alguns pinos tm funcionalidades especficas, a saber:
I2C: 4 (SDA) and 5 (SCL) - Suportam comunicao I2C (TWI) usando a biblioteca.
H ainda mais alguns pinos na placa:
AREF - Referncia de tenso para entradas analgicas. So usados com o analogReference().
Reset - Envia o valor LOW para efetuar o RESET ao microcontrolador. tipicamente utilizado para
adicionar um boto de reset aos shields que bloqueiam o que h na placa.
ainda importante referir que a corrente mxima por cada pino analgico e digital de 40 mA,
com exceo da sada que providencia 3,3 V, que permite correntes mximas de 50 mA.
De acordo com Sousa and Lavinia, 2006, a capacidade de utilizar Pulse Width Modulation (PWM)
muito importante, pois permite obter uma tenso analgica a partir de um sinal digital, ou seja, de um sinal
que apenas pode assumir o estado lgico 0 (0 V) ou 1 (5 V). O conceito de PWM usado para referir sinal
que possua uma frequncia constante e um duty-cicle varivel.
Comunicao
Com o Arduino, a comunicao com um computador, com outro Arduino ou com outros
microcontroladores muito simplificada. O ATmega328 permite comunicao srie no padro UART TTL
(5V), que est disponvel nos pinos digitais 0 (RX) e 1 (TX), vide figura 2. Um chip FTDI FT232RL na placa
encaminha esta comunicao srie atravs do USB e os drives FTDI (includo no software do Arduino)
fornecem uma porta COM virtual para o software no computador. O software Arduino inclui um monitor
srie que permite que dados simples de texto sejam enviados placa Arduino.
Os LEDs RX e TX da placa piscam quando os dados esto para ser transferidos para o computador
pelo chip FTDI. Pela ligao USB no d quando h comunicao srie pelos pinos 0 e 1.
A biblioteca SoftwareSerial permite a comunicao srie por quaisquer dos pinos digitais do
Duemilanove.
O ATmega328 tambm oferece suporte aos padres de comunicao I2C (TWI) e SPI. O software do
Arduino inclui uma biblioteca Wire para simplificar o uso do bus I2C; para usar a comunicao SPI, veja a
folha de informaes do ATmega328.
Programao
O Arduino pode ser programado com o software Arduino (download).
O ATmega328 no Arduino vem pr-gravado com um bootloader que permite enviar novos
programas sem o uso de um programador de hardware externo. Ele se comunica utilizando o protocolo
original STK500 (referncia, C header files). Tambm poder-se- programar o ATmega328 atravs do ICSP
(In-Circuit Serial Programming) header;
Caractersticas fsicas
O comprimento e largura mximos do so 2,7 (68,50 mm) e 2,1 (53,34 mm) respectivamente,
com o conector USB e o jack de alimentao indo um pouco alm destas dimenses. Trs furos de fixao
permitem a montagem da placa numa superfcie ou caixa. Note que a distncia entre os pinos de entrada e
sadas digitais n 7 e n 8 de 160 mil (milsimos de polegada), no sequer mltiplo do espaamento de
100 mil dos outros pinos.
10
/*
Liga o LED por um segundo e ento o apaga por um
segundo, repentidamente.
Este exemplo de cdigo livre, de domnio publico.
Traduzido por Micael Bronzatti Gaier
*/
void setup() {
// inicializa o pino digital como sada de dados.
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
//
//
//
//
liga o LED
espera por um segundo
apaga o LED
espera por um segundo
COMENTRIOS
Quando desejamos realizar alguma instruo ou comentrio com mais de uma
linha sobre o programa, usamos como smbolo /* ao incio de um comentrio e */ ao
trmino do mesmo.
Quando se deseja dar uma instruo breve, pode se usar //, assim, quando
voc iniciar uma nova linha, voltar a editar o programa novamente.
11
FUNES - BASE
Um programa possui um corpo, uma funo principal, onde o programa ser
rodado.
Em Arduino, obrigatrio que o programa tenha a funo void setup() e a
funo void loop(). Caso seu programa no tenha estas funes, ele no ser capaz
de identificar a linguagem e no realizar a compilao.
A funo void setup() funciona como uma funo de inicializao, o que
estar contido nela rodar apenas uma vez no programa. Nela, deve conter as
informaes principais para iniciar o seu programa, que estar contido dentro da
funo void loop() . Em void loop() dever conter tudo o que voc quiser que o
programa faa.
pinMode(pino, MODO)
No Arduino, como lidamos com entrada e sada de dados, o pinMode configura
um pino especfico da placa como entrada ou sada. O pino um nmero inteiro e ele
identificado na prpria placa. O MODO ele pode ser de entrada (INPUT) ou sada
(OUTPUT) de dados.
OBSERVAO:
Quando se tratar de uma leitura de dados analgicos, no caso os pinos
A0 ao A5, no necessrio realizar a declarao destes pinos em void
setup(), porm, os pinos analgicos, tambm podem ser usados como
pinos digitais, assim, quando estiver se referindo ao uso destes pinos
como digitais, voc dever identificar no programa na funo de
inicializao como pino 14 (no caso do A0) at o 19 (no caso do A5).
12
OBSERVAO!
O recomendado caso for usada uma tenso de referncia
externa, que seja colocado um resistor de 5kOms, assim, caso
possua alguma configurao errada no software e o
microcontrolador no conseguir entender, isso previne que
ocorra algum dano no equipamento, porm, internamente, h
uma resistncia no valor de 32kOms, isso significa que voc ter
um divisor de tenso na entrada do equipamento, ou seja, a
tenso de referncia ser diferente da tenso aplicada antes do
resistor de 5kOms.
Exemplo: Se for aplicada uma tenso de 4.2V na
entrada do equipamento, a tenso de referncia ser:
=
,
= ,
+
13
/*
Entrada Analgica
Demonstra a leitura de um sensor analgico (A0) e a
emisso de luz de um LED (13).
O tempo que o LED permanecer acesso depender do valor
obtido do sensor.
Este exemplo de cdigo de domnio pblico.
Modificado por Micael Bronzatti Gaier
*/
// #include <SoftwareSerial.h>
#define sensor A0 // seleciona o pino de entrada do
//potencimetro e o identifica como sensor
int led = 13;
// seleciona o pino para o LED
int valSensor; // varivel que armazena o valor do sensor
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
}
14
void loop() {
valSensor = analogRead(sensor); // l sensor e define
// valor como varivel global
Serial.println(valSensor); // envia valor do sensor //
para porta serial
piscarLED(); // funo secundria
}
void piscarLED(){
digitalWrite(led, HIGH); // ligar o LED
delay(valSensor); //pausa de acordo com o valor da
//varivel
BIBLIOTECAS
Voc, como programador, deve saber que devemos simplificar ao mximo
nossos cdigos visando economizar espao na memria do programa. Para isso
quando voc obtm um equipamento, sensor, etc., o fabricante muitas vezes fornece
uma biblioteca para facilitar a programao, ou seja, invs de voc realizar uma longa
e extensa programao, voc utiliza a biblioteca e simplifica o cdigo.
Quando voc obtm uma biblioteca e a armazena na pasta de bibliotecas do
Arduino, ao abrir um programa e clicar no menu em Sketch > Import Library, voc
poder escolher a biblioteca que desejar. Quando escolher, aparecer no seu
programa algo como no exemplo acima, porm, sem ser comentado.
#include <NomeDaBiblioteca.h>
Quando adicionar uma biblioteca ao seu programa, necessrio verificar as
instrues corretas para realizar a programao.
#include e #define
Quando voc usa #include, voc est dizendo ao programa que ele deve
incluir o arquivo-cabealho ao programa.
O uso da ferramenta #define interessante para ser usado com o Arduino.
Observando o exemplo 2, voc percebe que logo aps a declarao da ferramenta,
colocado um nome em geral. Aps ele foi usado o local onde est o sensor no
Arduino, o pino A0. Com isso, voc percebe que em todo o programa quando quiser
se referir ao pino A0, se usa a palavra sensor. Assim, podemos definir:
#define nomeVariavel dados (OBS: no usado ; no final)
15
VARIVEIS E MODIFICADORES
VARIVEIS
Os nomes das variveis apenas devem obedecer algumas regras: elas podem
comear com letras ou sublinhado (_) e no podem ter nome idntico a alguma das
palavras reservadas pelo programa ou de alguma biblioteca.
As variveis devem ser declaradas antes de serem usadas. Observe:
tipo_de_varivel lista_de_variveis
Ex:
int ledPin, potencimetro
CLASSE DE VARIVEIS
Um cdigo que se encontra dentro de outra funo, entre { e }, se encontra
isolado de todo o resto do cdigo e os dados contidos l apenas podem ser
armazenados atravs de variveis. Existem trs classes de variveis: locais, globais e
estticas.
VARIVEIS LOCAIS
Quando uma varivel declarada dentro de uma funo especfica, ela
denominada varivel local. Estas variveis apenas existem enquanto o bloco onde
est armazenada estiver sendo executado. A partir do momento em que o programa
voltar funo principal, esta varivel deixar de existir.
VARIVEIS GLOBAIS
Uma varivel global aquela varivel que conhecida por todo o programa, ou
seja, independente da funo que estiver sendo executada ela ser reconhecida e
rodar normalmente. Uma varivel global ela declarada antes mesmo da funo void
setup().
VARIVEIS ESTTICAS
Funcionam de forma parecida com as variveis globais conservando o valor
durante a execuo de outras funes, porm, s so reconhecidas dentro da funo
onde declarada. Como exemplo, podemos dizer que uma varivel esttica uma
varivel declarada dentro da lista de parmetros de uma funo.
16
TAMANHO (BITS)
8
16
32
64
0
INTERVALO
-128 a 127
-32768 a 32767
3,4E-38 a 3,4E+38
1,7E-308 a 1,7E+308
sem valor
MODIFICADORES
Para cada tipo de varivel, existem os modificadores de tipos, sendo eles:
signed, unsigned, short, long. Porm, em float no se pode aplicar nenhum
modificador, e no double o nico aceito o long.
Os quatro modificadores podem ser aplicados a qualquer inteiro. O objetivo de
short e long que possam oferecer tamanhos diferentes de inteiros. Na realidade, o
int ter o tamanho natural de uma determinada mquina, a nica restrio que
17
NUMERO
DE BITS
8
8
8
16
16
16
16
16
16
32
32
32
32
64
80
INTERVALO
INICIO
FIM
-128
127
0
255
-128
127
-32.768
32.767
0
65.535
-32.768
32.767
-32.768
32.767
0
65.535
-32.768
32.767
-2.147.483.648 2.147.483.647
-2.147.483.648 2.147.483.647
0
4.294.967.295
3,4E-38
3.4E+38
1,7E-308
1,7E+308
3,4E-4932
3,4E+4932
FUNES I
Anteriormente, j foi explicado um pouco a respeito sobre o void setup() e o
void loop(), que mesmo no utilizando-os, eles precisam ser declarados.
Uma funo uma unidade autnoma do cdigo, que foi feita para cumprir
uma atividade em particular. Um programa consiste em vrias funes. Uma funo se
resume em:
tipo nome(declarao de parmetros){
comando1;
comando2;
...
}
Existem dois tipos de funes: as que retornam algum valor para a funo onde
est inserida e as funes que no retornam nenhum valor.
Tipo int
Uma funo int retorna um valor para a funo que a chamou.
H duas formas de retornar de uma funo, uma delas quando o finalizador de
funo ( } ) encontrado, ou quando for feito o uso da declarao return.
A declarao return retorna um valor especificado para a funo que a
chamou.
18
Tipo void
uma funo tipo void no retorna nenhum valor para a funo
que a chamou, ou seja, as aes executadas nesta funo no resultaram em
nmeros binrios, variveis booleanas ou caracteres para a funo principal. Com o
uso de void no permitido usar a declarao return.
Usar funes pode simplificar o cdigo e o deixar mais organizado. No
exemplo 2 percebemos que foi criada uma funo apenas para o LED piscar e que foi
inserida na funo void loop(), com isso, se o cdigo fosse extenso e seria necessrio
o LED piscar vrias vezes durante o programa, aquela parte do cdigo no precisaria
ficar sendo repetida, assim, apenas chamaria a funo piscarLED(), ento quando ela
terminasse de ser executada voltaria ao mesmo ponto em que parou.
19
x == y
x != y
x< y
x> y
x <= y
x >= y
OPERADORES BOOLEANOS
Os operadores booleanos verificam se uma funo verdadeira ou no.
OPERADOR E (&&)
A condio apenas ser verdadeira se todos os itens foram verdadeiros.
Exemplo: if (digitalRead(2) == 1 && digitalRead(3) == 1){
... }
Se a leitura digital dos pinos 2 e 3 forem 1 (HIGH), a condio verdadeira.
OPERADOR OU ( || )
A condio ser verdadeira se algum dos itens for verdadeiro.
Exemplo: if (x>0 || y>0){
... }
Se x ou y for maior que 0, a condio ser verdadeira.
OPERADOR NO ( ! )
A condio ser verdadeira se o operador for falso.
Exemplo: if (!x){
... }
Se x for falso, a condio verdadeira.
20
Ps-fixado
Se: x=48
y=x++
Ento:
x=49
y=48
>
>
>
>
x=x+y
x=xy
x=x*y
x=x/y
21
FOR
O estrutura for uma das estruturas que se trabalha com loops de repetio.
Esta estrutura normalmente usada para repetir um bloco de informaes definidas
na funo. Enquanto a condio for verdadeira, as informaes contidas na funo
sero executadas. Sua forma geral :
for (inicializao; condio; incremento)
{
//instruo(ou instrues); }
Vamos entender os blocos desta estrutura:
INICIALIZAO: a inicializao o que ocorre primeiro e apenas uma vez.
CONDIO: o bloco for trabalha com loops de repetio, cada vez que a
funo for repetida, a condio ser testada, se ela for verdadeira (1), executar o que
se encontra dentro das chaves.
INCREMENTO: se a condio for verdadeira, o incremento ser executado,
caso contrrio, se a condio for falsa, o loop terminado.
Caso ainda no conseguiu entender a estrutura for equivale a mesma coisa
que o seguinte cdigo:
inicializao;
Micael Bronzatti Gaier
22
EXEMPLO 3:
// Dimmer de um LED usando um pino PWM como sada
int pinoPWM = 10; // LED ligado em srie com um resistor de 1k
.
//ao pino 10
void setup()
{
// no necessrio setup
}
void loop()
{
for (int i= 0; i <= 255; i++){
// a varivel i incrementada at que ir valer 255,
//depois o loop terminado
analogWrite(pinoPWM, i);
//o valor de i escrito no pinoPWM
delay(10);
}
}
SWITCH CASE
O Switch Cace permite programar diferentes blocos de instrues para
diferentes condies. Por exemplo, dizemos que voc possui um sensor analgico que
emite diferentes valores e cada valor indica que voc necessita tomar uma ao
especfica, ou seja, uma instruo diferente. Sua forma geral :
switch (valor) {
case 1:
//fazer algo quando valor igual a 1
break;
case 2:
//fazer algo quando valor igual a 2
break;
default:
// se nenhum caso se encaixa, fazer algo como padro
}
Quando uma condio for verdadeira, break responsvel por interromper o
cdigo e seguir a programao adiante. Usa-se default caso nenhuma das condies
especificadas forem verdadeiras, e ento o bloco contido ser executado.
EXEMPLO 4:
23
24
analogPin A0
digPin01 4
digPin02 5
digPin03 6
void setup(){
// inicializao dos pinos digitais
for (int i = 4; i<7; i++){
pinMode(i, OUTPUT);
}
}
void loop(){
int valor = analogRead(analogPin); // leitura pino analgico
while (valor < 900){ // executar se 'valor' for menor que
900
if (valor < 200){
digitalWrite(digPin01, HIGH);
}
else if ( valor >= 200 && valor < 600){
digitalWrite(digPin02, HIGH);
}
else {
digitalWrite(digPin03, HIGH);
}
}
for (int i = 4; i<7; i++){
digitalWrite(i, LOW);
}
}
}
25
COMUNICAO SERIAL
Se voc perceber em placas Arduino como Uno, Duemilanove, Nano e Mega,
voc ver que h um CI responsvel por converter o sinal da porta serial de hardware
para Universal Serial Bus (USB), para poder ser usado em qualquer dispositivo que
possua esta sistema, como seu computador, por exemplo. Na comunicao serial,
possvel voc obter todos os dados que o Arduino est gerando ou recebendo e enviar
ao computador para simplesmente analisar os dados ou rodar algum outro programa.
Quando voc conecta um dispositivo porta serial do Arduino, necessrio
uma taxa de bits por segundo para a transmisso serial. O Arduino consegue emitir
esta taxa nos seguintes valores: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800,
38400, 57600, ou 115200 bits por segundo. H equipamentos que apenas recebero
26
Significado
Nova Linha
Tabulao Horizontal (tab)
Tabulao Vertical
Binrio ou Base 2
Base 8
Hexadecimal ou Base 16
Decimal, ou Base 10
Resulta em Byte
Serial.println();
Envia dados para a porta serial, porm, com um caractere de retorno. Este
comando funciona da mesma forma que Serial.print().
27
Exemplo 7:
28
void setup() {}
void loop() {
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}
PARA ENTENDER!
Dizemos que voc possui um sensor analgico (0 a 1023) que est
controlando a velocidade de giro de um motor conectado numa entrada PWM (0 a
255). Quando o sensor analgico emitir o valor de 0, o resultado na sada PWM ser
0, enquanto se o sensor analgico emitir 1023, o resultado em PWM ser 255. Caso
seja obtido um valor intermedirio do sensor, a sada PWM tambm obter um valor
intermedirio equivalente, mas em sua faixa de valores.
OBSERVAO:
Esta funo no limita a faixa de valores, se voc estiver
lidando com variveis em valor, e o seu limite superior de deAlta 1023 e o paraAlta
255, caso voc inserir um valor superior a 1023, o valor da faixa e sada tambm
ser maior que 255. Por isso pode ser usada a funo constrain(x,a,b) para auxiliar e
limitar esta faixa de valores.
pow(base, expoente)
Calcula o valor de um nmero elevado a uma
potncia.
base = um nmero qualquer (float)
expoente = a potncia que a base ser elevada (float)
RETORNO DA FUNO: double
29
TRIGONOMETRIA
sin(rad)
Calcula o seno de um ngulo (em radianos).
rad = valor do ngulo em radianos (float)
RETORNO DA FUNO: a funo retorna um valor entre -1 e 1
(double).
cos(rad)
Calcula o cosseno de um ngulo (em radianos).
rad = valor do ngulo em radianos (float)
RETORNO DA FUNO: a funo retorna um valor entre -1 e 1
(double).
tan(rad)
Calcula a tangente de um ngulo (em radianos).
rad = valor do ngulo em radianos (float)
RETORNO DA FUNO: a funo retorna um
negativamente ou positivamente (double).
OBSERVAO!
suportam a impresso de floats.
valor
infinito
30
31
EXEMPLO 8
EXEMPLO 9
Este exemplo consiste no uso do sensor ultrassnico LV-Max Sonar EZ0 que
capaz de informar se h obstculos a sua frente at 6,45 metros. Para o sistema
funcionar corretamente necessrio um resistor de 100 ohms entre o pino de 5V do
Arduino e a Entrada Vin do sensor, e um capacitor eletroltico de 100F entre as
alimentaes (Vin e Gnd).
32
33
34
Encontramos hoje no mercado uma vasta lista de shields para Arduino, alm
destes, podemos encontrar shields que permitem realizar diversas funes como: MP3
Player, conexo com redes wi-fi, shields que simulam funes de celulares, etc.
Normalmente os fabricantes dos shields oferecem bibliotecas de contedo para
facilitar ainda a programao, assim, muitas vezes no necessrio fazer um estudo
muito detalhado para aprender a executar funes especficas.
35
36
Para um motor ter a habilidade de movimentao nos dois sentidos do seu eixo
e tambm para obter um controle sobre sua velocidade, torque e outros dados
tcnicos, devemos montar um circuito que seja inteligente para poder realizar estes
fundamentos bsicos apresentados atravs de sinais enviados do Arduino. Se
observarmos atentamente o esquema de chaves, veremos que ele se torna similar
com um H, assim, dando a estes estudos o nome de Ponte H (H-Bridge, em ingls).
H vrias maneiras de se montar uma Ponte H. Ela pode ser feita tanto com
rels, como com transistores e at com CIs (circuitos inteligentes) j criados
especialmente para isso. No h como apresentar um modelo de Ponte H e dizer que
ela funcionar adequadamente com qualquer circuito que for, pois, ao montar o
circuito, devemos levar em considerao os dados tcnicos do motor que est sendo
usado, as especificaes do Arduino, dos dispositivos que sero utilizados e do
ambiente em que o sistema atuar.
Como exemplo ns usaremos uma Ponte H dupla desenvolvida no IFMT para
comandar dois motores DC em um Rob Sumo. Observe o esquema.
37
38
39
PROGRAMAO PONTE H
Para programar uma Ponte H deve-se levar em considerao os conceitos
apresentados sobre entrada e sada de dados. Esta programao leva o sistema de
Ponte H apresentado anteriormente como referncia. Esta programao possui
velocidade constante. Exemplo 10.
40
parar();
delay(1000);
paratras();
delay(1000);
}
void frente(){
//enviando sinal alto de cada componente de forma individual
digitalWrite(transa, HIGH);
digitalWrite(transb, HIGH);
}
void paratras(){
// enviando sinal alto de TODOS componentes atravs da funo for
for(int i=2, i<6, i++){
digitalWrite(i, HIGH);
}
}
void parar(){
digitalWrite(relea, LOW);
digitalWrite(trana, LOW);
digitalWrite(releb, LOW);
digitalWrite(transb, LOW);
}
41
Os displays LCD compatveis com o chipset Hitachi podem atuar nos modos de
4-bits ou 8-bits, porm, no modo de 4-bits necessrio apenas 7 pinos I/O do
Arduino, enquanto no modo 8-bits necessrio 11 pinos I/O. Se voc for trabalhar
apenas com textos o modo de 4-bits suficiente.
Veja como fazer a ligao entre o display LCD e o Arduino corretamente.
42
Pino no LCD
RS
E
D4
D5
D6
D7
Pino no Arduino
12
11
5
4
3
2
43
44
45
46
1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
1.7.
47
BANZI, Massimo; Getting Started With Arduino; OReilly Media Inc.; 2010;
48